source: issm/oecreview/Archive/13393-13976/ISSM-13539-13540.diff@ 21726

Last change on this file since 21726 was 13980, checked in by Mathieu Morlighem, 12 years ago

preparing oecreview for 13393-13976'

File size: 40.9 KB
RevLine 
[13980]1Index: ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh
2===================================================================
3--- ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh (revision 13539)
4+++ ../trunk-jpl/externalpackages/python/install-2.7.3-macosx-lion.sh (revision 13540)
5@@ -7,7 +7,7 @@
6 mkdir install src
7
8 #Download from ISSM server
9-$ISSM_DIR/scripts/DownloadExternalPackage.py http://issm.jpl.nasa.gov/files/externalpackages/Python-2.7.3.tgz Python-2.7.3.tgz
10+#$ISSM_DIR/scripts/DownloadExternalPackage.py http://issm.jpl.nasa.gov/files/externalpackages/Python-2.7.3.tgz Python-2.7.3.tgz
11
12 #Untar and move python into install directory
13 tar -zxvf Python-2.7.3.tgz
14@@ -16,8 +16,7 @@
15
16 #Configure and compile
17 cd src
18-./configure \
19- --enable-framework="$ISSM_DIR/externalpackages/python/install/Library/Frameworks"
20+./configure --enable-framework="$ISSM_DIR/externalpackages/python/install/Library/Frameworks"
21 if [ $# -eq 0 ]; then
22 make
23 else
24Index: ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp
25===================================================================
26--- ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp (revision 13539)
27+++ ../trunk-jpl/src/c/solutions/CorePointerFromSolutionEnum.cpp (revision 13540)
28@@ -17,88 +17,42 @@
29 #include "../include/include.h"
30 #include "../solvers/solvers.h"
31
32-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
33+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore){
34
35 /*output: */
36 void (*solutioncore)(FemModel*)=NULL;
37
38- switch(solutiontype){
39+ /*parameters: */
40+ bool control_analysis=false;
41+ bool tao_analysis=false;
42+ bool dakota_analysis=false;
43
44- case DiagnosticSolutionEnum:
45- #ifdef _HAVE_DIAGNOSTIC_
46- solutioncore=&diagnostic_core;
47- #else
48- _error_("ISSM was not compiled with diagnostic capabilities. Exiting");
49- #endif
50- break;
51- case SteadystateSolutionEnum:
52- #ifdef _HAVE_STEADYSTATE_
53- solutioncore=&steadystate_core;
54- #else
55- _error_("ISSM was not compiled with steady state capabilities. Exiting");
56- #endif
57- break;
58- case ThermalSolutionEnum:
59- #ifdef _HAVE_THERMAL_
60- solutioncore=&thermal_core;
61- #else
62- _error_("ISSM was not compiled with thermal capabilities. Exiting");
63- #endif
64- break;
65- case EnthalpySolutionEnum:
66- #ifdef _HAVE_THERMAL_
67- solutioncore=&enthalpy_core;
68- #else
69- _error_("ISSM was not compiled with thermal capabilities. Exiting");
70- #endif
71- break;
72- case BalancethicknessSolutionEnum:
73- #ifdef _HAVE_BALANCED_
74- solutioncore=&balancethickness_core;
75- #else
76- _error_("ISSM was not compiled with balanced capabilities. Exiting");
77- #endif
78- break;
79- case HydrologySolutionEnum:
80- #ifdef _HAVE_HYDROLOGY_
81- solutioncore=&hydrology_core;
82- #else
83- _error_("ISSM was not compiled with hydrology capabilities. Exiting");
84- #endif
85- break;
86- case SurfaceSlopeSolutionEnum:
87- #ifdef _HAVE_SLOPE_
88- solutioncore=&surfaceslope_core;
89- #else
90- _error_("ISSM was not compiled with slope capabilities. Exiting");
91- #endif
92- break;
93- case BedSlopeSolutionEnum:
94- #ifdef _HAVE_SLOPE_
95- solutioncore=&bedslope_core;
96- #else
97- _error_("ISSM was not compiled with slope capabilities. Exiting");
98- #endif
99- break;
100- case TransientSolutionEnum:
101- #ifdef _HAVE_TRANSIENT_
102- solutioncore=&transient_core;
103- #else
104- _error_("ISSM was not compiled with transient capabilities. Exiting");
105- #endif
106- break;
107- case PrognosticSolutionEnum:
108- #ifdef _HAVE_PROGNOSTIC_
109- solutioncore=&prognostic_core;
110- #else
111- _error_("ISSM was not compiled with prognostic capabilities. Exiting");
112- #endif
113- break;
114- default:
115- _error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
116- break;
117+ /* retrieve some parameters that tell us whether wrappers are allowed, or whether we return
118+ * a pure core. Wrappers can be dakota_core (which samples many solution_cores) or control_core (which
119+ * carries out adjoint based inversion on a certain core: */
120+ parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
121+ parameters->FindParam(&control_analysis,InversionIscontrolEnum);
122+ parameters->FindParam(&tao_analysis,InversionTaoEnum);
123+
124+ if(nodakotacore)dakota_analysis=false;
125+
126+ if(dakota_analysis){
127+ #ifdef _HAVE_DAKOTA_
128+ solutioncore=dakota_core;
129+ #else
130+ _error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
131+ #endif
132 }
133-
134+ else if(control_analysis){
135+ #ifdef _HAVE_CONTROL_
136+ if(tao_analysis) solutioncore=controltao_core;
137+ else solutioncore=control_core;
138+ #else
139+ _error_("ISSM was not compiled with control support, cannot carry out control analysis!");
140+ #endif
141+ }
142+ else PureCorePointerFromSolutionEnum(&solutioncore,parameters,solutiontype); /*This means we retrieve a core solution that is not a wrapper*/
143+
144 /*Assign output pointer:*/
145 _assert_(psolutioncore);
146 *psolutioncore=solutioncore;
147Index: ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp
148===================================================================
149--- ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp (revision 0)
150+++ ../trunk-jpl/src/c/solutions/PureCorePointerFromSolutionEnum.cpp (revision 13540)
151@@ -0,0 +1,106 @@
152+/*!\file: PureCorePointerFromSolutionEnum.cpp
153+ * \brief: return type of analyses, number of analyses and core solution function.
154+ */
155+
156+#ifdef HAVE_CONFIG_H
157+ #include <config.h>
158+#else
159+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
160+#endif
161+
162+#include "../toolkits/toolkits.h"
163+#include "../classes/objects/objects.h"
164+#include "../shared/shared.h"
165+#include "../EnumDefinitions/EnumDefinitions.h"
166+#include "./solutions.h"
167+#include "../modules/modules.h"
168+#include "../include/include.h"
169+#include "../solvers/solvers.h"
170+
171+void PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype){
172+
173+ /*output: */
174+ void (*solutioncore)(FemModel*)=NULL;
175+
176+ switch(solutiontype){
177+
178+ case DiagnosticSolutionEnum:
179+ #ifdef _HAVE_DIAGNOSTIC_
180+ solutioncore=&diagnostic_core;
181+ #else
182+ _error_("ISSM was not compiled with diagnostic capabilities. Exiting");
183+ #endif
184+ break;
185+ case SteadystateSolutionEnum:
186+ #ifdef _HAVE_STEADYSTATE_
187+ solutioncore=&steadystate_core;
188+ #else
189+ _error_("ISSM was not compiled with steady state capabilities. Exiting");
190+ #endif
191+ break;
192+ case ThermalSolutionEnum:
193+ #ifdef _HAVE_THERMAL_
194+ solutioncore=&thermal_core;
195+ #else
196+ _error_("ISSM was not compiled with thermal capabilities. Exiting");
197+ #endif
198+ break;
199+ case EnthalpySolutionEnum:
200+ #ifdef _HAVE_THERMAL_
201+ solutioncore=&enthalpy_core;
202+ #else
203+ _error_("ISSM was not compiled with thermal capabilities. Exiting");
204+ #endif
205+ break;
206+ case BalancethicknessSolutionEnum:
207+ #ifdef _HAVE_BALANCED_
208+ solutioncore=&balancethickness_core;
209+ #else
210+ _error_("ISSM was not compiled with balanced capabilities. Exiting");
211+ #endif
212+ break;
213+ case HydrologySolutionEnum:
214+ #ifdef _HAVE_HYDROLOGY_
215+ solutioncore=&hydrology_core;
216+ #else
217+ _error_("ISSM was not compiled with hydrology capabilities. Exiting");
218+ #endif
219+ break;
220+ case SurfaceSlopeSolutionEnum:
221+ #ifdef _HAVE_SLOPE_
222+ solutioncore=&surfaceslope_core;
223+ #else
224+ _error_("ISSM was not compiled with slope capabilities. Exiting");
225+ #endif
226+ break;
227+ case BedSlopeSolutionEnum:
228+ #ifdef _HAVE_SLOPE_
229+ solutioncore=&bedslope_core;
230+ #else
231+ _error_("ISSM was not compiled with slope capabilities. Exiting");
232+ #endif
233+ break;
234+ case TransientSolutionEnum:
235+ #ifdef _HAVE_TRANSIENT_
236+ solutioncore=&transient_core;
237+ #else
238+ _error_("ISSM was not compiled with transient capabilities. Exiting");
239+ #endif
240+ break;
241+ case PrognosticSolutionEnum:
242+ #ifdef _HAVE_PROGNOSTIC_
243+ solutioncore=&prognostic_core;
244+ #else
245+ _error_("ISSM was not compiled with prognostic capabilities. Exiting");
246+ #endif
247+ break;
248+ default:
249+ _error_("solution type: " << EnumToStringx(solutiontype) << " not supported yet!");
250+ break;
251+ }
252+
253+ /*Assign output pointer:*/
254+ _assert_(psolutioncore);
255+ *psolutioncore=solutioncore;
256+
257+}
258Index: ../trunk-jpl/src/c/solutions/ad_core.cpp
259===================================================================
260--- ../trunk-jpl/src/c/solutions/ad_core.cpp (revision 0)
261+++ ../trunk-jpl/src/c/solutions/ad_core.cpp (revision 13540)
262@@ -0,0 +1,301 @@
263+/*!\file ad_core
264+ * \brief: compute outputs from the AD mode, using our dependents and independents, and drivers available in Adolc.
265+ */
266+
267+/*Includes: {{{*/
268+#ifdef HAVE_CONFIG_H
269+ #include <config.h>
270+#else
271+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
272+#endif
273+
274+
275+#include <set>
276+#include "../toolkits/toolkits.h"
277+#include "../classes/objects/objects.h"
278+#include "../shared/shared.h"
279+#include "../io/io.h"
280+#include "../EnumDefinitions/EnumDefinitions.h"
281+#include "./solutions.h"
282+#include "../modules/modules.h"
283+#include "../include/include.h"
284+#include "../solvers/solvers.h"
285+/*}}}*/
286+
287+void ad_core(FemModel* femmodel){
288+
289+ /*diverse: */
290+ int i;
291+ int dummy;
292+
293+ bool isautodiff = false;
294+ int num_dependents;
295+ int num_independents;
296+ char* driver=NULL;
297+
298+ /*state variables: */
299+ IssmDouble *axp = NULL;
300+ double *xp = NULL;
301+
302+ /*AD mode on?: */
303+ femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
304+
305+ if(isautodiff){
306+
307+ #ifdef _HAVE_ADOLC_
308+
309+ if(VerboseAutodiff())_pprintLine_(" start ad core");
310+
311+ /*First, stop tracing: */
312+ trace_off();
313+
314+ /*preliminary checks: */
315+ femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
316+ femmodel->parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
317+ if(!(num_dependents*num_independents)) return;
318+
319+ /*retrieve state variable: */
320+ femmodel->parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
321+
322+ /* driver argument */
323+ xp=xNew<double>(num_independents);
324+ for(i=0;i<num_independents;i++){
325+ xp[i]=reCast<double,IssmDouble>(axp[i]);
326+ }
327+
328+ /*get the EDF pointer:*/
329+ ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(femmodel->parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
330+
331+ /*Branch according to AD driver: */
332+ femmodel->parameters->FindParam(&driver,AutodiffDriverEnum);
333+
334+ /* these are always needed regardless of the interpreter */
335+ anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
336+ anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
337+
338+ if (strcmp(driver,"fos_forward")==0){
339+
340+ int anIndepIndex;
341+ double *tangentDir=NULL;
342+ double *jacTimesTangentDir=NULL;
343+ double *theOutput=NULL;
344+
345+ /*retrieve direction index: */
346+ femmodel->parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
347+
348+ if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
349+
350+ tangentDir=xNewZeroInit<double>(num_independents);
351+ tangentDir[anIndepIndex]=1.0;
352+
353+ jacTimesTangentDir=xNew<double>(num_dependents);
354+ theOutput=xNew<double>(num_dependents);
355+
356+ /*set the forward method function pointer: */
357+ anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
358+
359+ /*allocate the space for the parameters to invoke the EDF fos_forward:*/
360+ anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
361+ anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
362+
363+ /*call driver: */
364+ fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
365+
366+ /*add to results*/
367+ femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
368+
369+ /*free resources :*/
370+ xDelete(theOutput);
371+ xDelete(jacTimesTangentDir);
372+ xDelete(tangentDir);
373+ }
374+ else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
375+
376+ int* indepIndices=NULL;
377+ int tangentDirNum;
378+ int dummy;
379+ double **jacTimesSeed=NULL;
380+ double **seed=NULL;
381+ double *theOutput=NULL;
382+ std::set<unsigned int> anIndexSet;
383+
384+
385+ /*retrieve directions:*/
386+ if (strcmp(driver,"fov_forward_all")==0){
387+ tangentDirNum=num_independents;
388+ indepIndices=xNewZeroInit<int>(tangentDirNum);
389+ for(i=0;i<num_independents;i++)indepIndices[i]=1;
390+ }
391+ else{
392+ femmodel->parameters->FindParam(&indepIndices,&tangentDirNum,&dummy,AutodiffFovForwardIndicesEnum);
393+ }
394+
395+ /*Some checks: */
396+ if (tangentDirNum<1 || tangentDirNum>num_independents) _error_("tangentDirNum should be in [1,num_independents]");
397+
398+ /* full Jacobian or Jacobian projection:*/
399+ jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
400+
401+ /*set the forward method function pointers: */
402+ anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
403+ // anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
404+
405+ /*allocate the space for the parameters to invoke EDF fov_forward:*/
406+ anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
407+ anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
408+
409+ /*seed matrix: */
410+ seed=xNewZeroInit<double>(num_independents,tangentDirNum);
411+
412+ /*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
413+ for (int i=0; i<tangentDirNum; ++i) {
414+ /* make sure the index is in range*/
415+ if (indepIndices[i]>num_independents) {
416+ _error_("indepIndices values must be in [0,num_independents-1]");
417+ }
418+ if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
419+ _error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
420+ }
421+ anIndexSet.insert(indepIndices[i]);
422+ /* now populate the seed matrix from the set of independent indices;
423+ * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
424+ seed[indepIndices[i]][i]=1.0;
425+ }
426+
427+ /*allocate output: */
428+ theOutput=xNew<double>(num_dependents);
429+
430+ /*call driver: */
431+ fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
432+ /*Free resources: */
433+ xDelete(theOutput);
434+ xDelete(indepIndices);
435+ xDelete(seed);
436+
437+ /*add to results: */
438+ femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
439+
440+ /*Free resources: */
441+ xDelete(jacTimesSeed);
442+ xDelete(indepIndices);
443+ }
444+ else if (strcmp(driver,"fos_reverse")==0) {
445+
446+ int aDepIndex=0;
447+ double *aWeightVector=NULL;
448+ double *weightVectorTimesJac=NULL;
449+
450+ /*retrieve direction index: */
451+ femmodel->parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
452+
453+ if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
454+
455+ aWeightVector=xNewZeroInit<double>(num_dependents);
456+ aWeightVector[aDepIndex]=1.0;
457+
458+ weightVectorTimesJac=xNew<double>(num_independents);
459+
460+ /*set the forward method function pointer: */
461+ anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
462+
463+ /*allocate the space for the parameters to invoke the EDF fos_reverse :*/
464+ anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
465+ anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
466+
467+ /*call driver: */
468+ fos_reverse(1,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
469+
470+ /*add to results*/
471+ femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
472+
473+ /*free resources :*/
474+ xDelete(weightVectorTimesJac);
475+ xDelete(aWeightVector);
476+ }
477+ else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){
478+
479+ int* depIndices=NULL;
480+ int weightNum;
481+ int dummy;
482+ double **weightsTimesJac=NULL;
483+ double **weights=NULL;
484+ std::set<unsigned int> anIndexSet;
485+
486+
487+ /*retrieve directions:*/
488+ if (strcmp(driver,"fov_reverse_all")==0){
489+ weightNum=num_dependents;
490+ depIndices=xNewZeroInit<int>(weightNum);
491+ for(i=0;i<num_dependents;i++)depIndices[i]=1;
492+ }
493+ else{
494+ femmodel->parameters->FindParam(&depIndices,&weightNum,&dummy,AutodiffFovForwardIndicesEnum);
495+ }
496+
497+ /*Some checks: */
498+ if (weightNum<1 || weightNum>num_dependents) _error_("tangentDirNum should be in [1,num_dependents]");
499+
500+ /* full Jacobian or Jacobian projection:*/
501+ weightsTimesJac=xNew<double>(weightNum,num_independents);
502+
503+ /*set the forward method function pointers: */
504+ anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
505+
506+ /*allocate the space for the parameters to invoke the EDF fos_reverse :*/
507+ anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
508+ anEDF_for_solverx_p->dpp_Z=xNew<double>(weightNum,anEDF_for_solverx_p->max_n);
509+
510+ /*seed matrix: */
511+ weights=xNewZeroInit<double>(weightNum,num_dependents);
512+
513+ /*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
514+ for (int i=0; i<weightNum; ++i) {
515+ /* make sure the index is in range*/
516+ if (depIndices[i]>num_dependents) {
517+ _error_("depIndices values must be in [0,num_dependents-1]");
518+ }
519+ if (anIndexSet.find(depIndices[i])!=anIndexSet.end()) {
520+ _error_("duplicate depIndices values are not allowed until we implement Jacobian decompression");
521+ }
522+ anIndexSet.insert(depIndices[i]);
523+ /* now populate the seed matrix from the set of independent indices;
524+ * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
525+ weights[depIndices[i]][i]=1.0;
526+ }
527+
528+ /*call driver: */
529+ fov_reverse(1,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
530+
531+ /*add to results: */
532+ femmodel->results->AddObject(new GenericExternalResult<IssmPDouble*>(femmodel->results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
533+
534+ /*Free resources: */
535+ xDelete(weights);
536+ xDelete(weightsTimesJac);
537+ xDelete(depIndices);
538+ }
539+ else _error_("driver: " << driver << " not yet supported!");
540+
541+ /* delete the allocated space for the parameters:*/
542+ xDelete(anEDF_for_solverx_p->dp_x);
543+ xDelete(anEDF_for_solverx_p->dp_X);
544+ xDelete(anEDF_for_solverx_p->dpp_X);
545+ xDelete(anEDF_for_solverx_p->dp_y);
546+ xDelete(anEDF_for_solverx_p->dp_Y);
547+ xDelete(anEDF_for_solverx_p->dpp_Y);
548+ xDelete(anEDF_for_solverx_p->dp_U);
549+ xDelete(anEDF_for_solverx_p->dpp_U);
550+ xDelete(anEDF_for_solverx_p->dp_Z);
551+ xDelete(anEDF_for_solverx_p->dpp_Z);
552+
553+ /*Free resources: */
554+ xDelete(xp);
555+ xDelete(axp);
556+
557+ if(VerboseAutodiff())_pprintLine_(" end AD core");
558+
559+ #else
560+ _error_("Should not be requesting AD drivers when an AD library is not available!");
561+ #endif
562+ }
563+}
564Index: ../trunk-jpl/src/c/solutions/solutions.h
565===================================================================
566--- ../trunk-jpl/src/c/solutions/solutions.h (revision 13539)
567+++ ../trunk-jpl/src/c/solutions/solutions.h (revision 13540)
568@@ -30,6 +30,7 @@
569 void steadystate_core(FemModel* femmodel);
570 void transient_core(FemModel* femmodel);
571 void dakota_core(FemModel* femmodel);
572+void ad_core(FemModel* femmodel);
573 IssmDouble objectivefunction(IssmDouble search_scalar,OptArgs* optargs);
574
575 //convergence:
576@@ -51,7 +52,8 @@
577
578 //solution configuration
579 void AnalysisConfiguration(int** panalyses,int* pnumanalyses, int solutiontype);
580-void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
581+void PureCorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype);
582+void CorePointerFromSolutionEnum(void (**psolutioncore)(FemModel*),Parameters* parameters,int solutiontype,bool nodakotacore=false);
583 void AdjointCorePointerFromSolutionEnum(void (**padjointcore)(FemModel*),int solutiontype);
584
585
586Index: ../trunk-jpl/src/c/solutions/dakota_core.cpp
587===================================================================
588--- ../trunk-jpl/src/c/solutions/dakota_core.cpp (revision 13539)
589+++ ../trunk-jpl/src/c/solutions/dakota_core.cpp (revision 13540)
590@@ -64,13 +64,10 @@
591 Dakota::ModelLIter ml_iter;
592 Parameters* parameters = NULL;
593
594- /*Retrieve parameters: */
595- parameters=femmodel->parameters;
596-
597 /*Recover dakota_input_file, dakota_output_file and dakota_error_file, in the parameters dataset in parallel */
598- parameters->FindParam(&dakota_input_file,QmuInNameEnum);
599- parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
600- parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
601+ femmodel->parameters->FindParam(&dakota_input_file,QmuInNameEnum);
602+ femmodel->parameters->FindParam(&dakota_output_file,QmuOutNameEnum);
603+ femmodel->parameters->FindParam(&dakota_error_file,QmuErrNameEnum);
604
605 if(my_rank==0){
606
607Index: ../trunk-jpl/src/c/solutions/issm.cpp
608===================================================================
609--- ../trunk-jpl/src/c/solutions/issm.cpp (revision 13539)
610+++ ../trunk-jpl/src/c/solutions/issm.cpp (revision 13540)
611@@ -14,7 +14,6 @@
612 FILE *output_fid = NULL;
613 FILE *petscoptionsfid = NULL;
614 bool waitonlock = false;
615- bool dakota_analysis,control_analysis,tao_analysis;
616
617 /*AD: */
618 bool autodiff=false;
619@@ -78,9 +77,6 @@
620
621 /*get parameters: */
622 femmodel->parameters->FindParam(&waitonlock,SettingsWaitonlockEnum);
623- femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
624- femmodel->parameters->FindParam(&control_analysis,InversionIscontrolEnum);
625- femmodel->parameters->FindParam(&tao_analysis,InversionTaoEnum);
626 femmodel->parameters->FindParam(&autodiff,AutodiffIsautodiffEnum);
627
628 /*Profiling: */
629@@ -103,36 +99,9 @@
630 #endif
631
632 _pprintLine_("call computational core:");
633-
634-
635- profiler->Tag(StartCore);
636- if(dakota_analysis){
637- #ifdef _HAVE_DAKOTA_
638- dakota_core(femmodel);
639- #else
640- _error_("ISSM was not compiled with dakota support, cannot carry out dakota analysis!");
641- #endif
642- }
643- else if(control_analysis){
644- #ifdef _HAVE_CONTROL_
645- if(tao_analysis) controltao_core(femmodel);
646- else control_core(femmodel);
647- #else
648- _error_("ISSM was not compiled with control support, cannot carry out control analysis!");
649- #endif
650- }
651- else{
652- solutioncore(femmodel);
653- }
654-
655- #ifdef _HAVE_ADOLC_
656- if(autodiff){
657- trace_off();
658- AutodiffDriversx(femmodel->elements, femmodel->nodes, femmodel->vertices, femmodel->loads, femmodel->materials, femmodel->parameters,femmodel->results);
659- }
660- #endif
661- profiler->Tag(FinishCore);
662-
663+ profiler->Tag(StartCore); solutioncore(femmodel); profiler->Tag(FinishCore);
664+ profiler->Tag(StartAdCore); ad_core(femmodel); profiler->Tag(FinishAdCore);
665+
666 ProfilerEnd(profiler,femmodel->results,femmodel->parameters);
667
668 _pprintLine_("write results to disk:");
669@@ -219,9 +188,9 @@
670 _pprintLine_("Solution memory used : " << solution_memory << " Bytes");
671
672 /*Add to results: */
673- results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
674- results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
675- results->AddObject(new GenericExternalResult<double>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
676+ results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingSolutionTimeEnum, solution_time, 1, 0));
677+ results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentMemEnum, solution_memory, 1, 0));
678+ results->AddObject(new GenericExternalResult<IssmDouble>(results->Size()+1, ProfilingCurrentFlopsEnum, solution_flops, 1, 0));
679 }
680
681 } /*}}}*/
682Index: ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
683===================================================================
684--- ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp (revision 13539)
685+++ ../trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp (revision 13540)
686@@ -54,6 +54,7 @@
687 bool control_analysis = false;
688 void (*solutioncore)(FemModel*) = NULL;
689 FemModel* femmodel = NULL;
690+ bool nodakotacore = true;
691
692
693 /*If counter==-1 on cpu0, it means that the dakota runs are done. In which case, bail out and return 0: */
694@@ -80,12 +81,7 @@
695
696 /*Determine solution sequence: */
697 if(VerboseQmu()) _pprintLine_("Starting " << EnumToStringx(solution_type) << " core:");
698- CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
699- #ifdef _HAVE_CONTROL_
700- if(control_analysis)solutioncore=&control_core;
701- #else
702- _error_("ISSM was not compiled with control capabilities, exiting!");
703- #endif
704+ CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type,nodakotacore);
705
706 /*Run the core solution sequence: */
707 solutioncore(femmodel);
708@@ -96,6 +92,8 @@
709
710 /*Free ressources:*/
711 DakotaFree(&d_variables,&d_variables_descriptors,&responses_descriptors, d_numvariables, numresponsedescriptors);
712+
713+ return 1; //this is critical! do not return 0, otherwise, dakota_core will stop running!
714 }
715
716 void DakotaMPI_Bcast(double** pvariables, char*** pvariables_descriptors,int* pnumvariables, int* pnumresponses){ /*{{{*/
717Index: ../trunk-jpl/src/c/solutions/control_core.cpp
718===================================================================
719--- ../trunk-jpl/src/c/solutions/control_core.cpp (revision 13539)
720+++ ../trunk-jpl/src/c/solutions/control_core.cpp (revision 13540)
721@@ -61,7 +61,7 @@
722 femmodel->parameters->SetParam(false,SaveResultsEnum);
723
724 /*out of solution_type, figure out solution core and adjoint function pointer*/
725- CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
726+ PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
727 AdjointCorePointerFromSolutionEnum(&adjointcore,solution_type);
728
729 /*Launch once a complete solution to set up all inputs*/
730Index: ../trunk-jpl/src/c/solutions/controltao_core.cpp
731===================================================================
732--- ../trunk-jpl/src/c/solutions/controltao_core.cpp (revision 13539)
733+++ ../trunk-jpl/src/c/solutions/controltao_core.cpp (revision 13540)
734@@ -93,7 +93,7 @@
735 if(VerboseControl()) _pprintLine_(" preparing final solution");
736 femmodel->parameters->SetParam(true,SaveResultsEnum);
737 void (*solutioncore)(FemModel*)=NULL;
738- CorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
739+ PureCorePointerFromSolutionEnum(&solutioncore,femmodel->parameters,solution_type);
740 solutioncore(femmodel);
741
742 /*Clean up and return*/
743Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp
744===================================================================
745--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp (revision 13539)
746+++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.cpp (revision 13540)
747@@ -1,286 +0,0 @@
748-/*!\file AutodiffDriversx
749- * \brief: compute outputs from the AD mode, using our dependents and independents, and drivers available in Adolc.
750- */
751-#include <set>
752-#include "../../modules/modules.h"
753-#include "../../shared/shared.h"
754-#include "../../include/include.h"
755-#include "../../toolkits/toolkits.h"
756-#include "../../EnumDefinitions/EnumDefinitions.h"
757-
758-
759-void AutodiffDriversx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,Results* results){
760-
761-
762- /*diverse: */
763- int i;
764- int dummy;
765-
766- bool isautodiff = false;
767- int num_dependents;
768- int num_independents;
769- char* driver=NULL;
770-
771- /*state variables: */
772- IssmDouble *axp = NULL;
773- double *xp = NULL;
774-
775- /*AD mode on?: */
776- parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
777-
778- if(isautodiff){
779-
780- #ifdef _HAVE_ADOLC_
781-
782- if(VerboseAutodiff())_pprintLine_(" start AD driver");
783-
784- /*preliminary checks: */
785- parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
786- parameters->FindParam(&num_independents,AutodiffNumIndependentsEnum);
787- if(!(num_dependents*num_independents)) return;
788-
789- /*retrieve state variable: */
790- parameters->FindParam(&axp,&dummy,AutodiffXpEnum);
791-
792- /* driver argument */
793- xp=xNew<double>(num_independents);
794- for(i=0;i<num_independents;i++){
795- xp[i]=reCast<double,IssmDouble>(axp[i]);
796- }
797-
798- /*get the EDF pointer:*/
799- ext_diff_fct *anEDF_for_solverx_p=dynamic_cast<GenericParam<Adolc_edf> * >(parameters->FindParamObject(AdolcParamEnum))->GetParameterValue().myEDF_for_solverx_p;
800-
801- /*Branch according to AD driver: */
802- parameters->FindParam(&driver,AutodiffDriverEnum);
803-
804- /* these are always needed regardless of the interpreter */
805- anEDF_for_solverx_p->dp_x=xNew<double>(anEDF_for_solverx_p->max_n);
806- anEDF_for_solverx_p->dp_y=xNew<double>(anEDF_for_solverx_p->max_m);
807-
808- if (strcmp(driver,"fos_forward")==0){
809-
810- int anIndepIndex;
811- double *tangentDir=NULL;
812- double *jacTimesTangentDir=NULL;
813- double *theOutput=NULL;
814-
815- /*retrieve direction index: */
816- parameters->FindParam(&anIndepIndex,AutodiffFosForwardIndexEnum);
817-
818- if (anIndepIndex<0 || anIndepIndex>=num_independents) _error_("index value for AutodiffFosForwardIndexEnum should be in [0,num_independents-1]");
819-
820- tangentDir=xNewZeroInit<double>(num_independents);
821- tangentDir[anIndepIndex]=1.0;
822-
823- jacTimesTangentDir=xNew<double>(num_dependents);
824- theOutput=xNew<double>(num_dependents);
825-
826- /*set the forward method function pointer: */
827- anEDF_for_solverx_p->fos_forward=EDF_fos_forward_for_solverx;
828-
829- /*allocate the space for the parameters to invoke the EDF fos_forward:*/
830- anEDF_for_solverx_p->dp_X=xNew<double>(anEDF_for_solverx_p->max_n);
831- anEDF_for_solverx_p->dp_Y=xNew<double>(anEDF_for_solverx_p->max_m);
832-
833- /*call driver: */
834- fos_forward(1,num_dependents,num_independents, 0, xp, tangentDir, theOutput, jacTimesTangentDir );
835-
836- /*add to results*/
837- results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,jacTimesTangentDir,num_dependents,1,1,0.0));
838-
839- /*free resources :*/
840- xDelete(theOutput);
841- xDelete(jacTimesTangentDir);
842- xDelete(tangentDir);
843- }
844- else if ((strcmp(driver,"fov_forward")==0) || (strcmp(driver,"fov_forward_all")==0)){
845-
846- int* indepIndices=NULL;
847- int tangentDirNum;
848- int dummy;
849- double **jacTimesSeed=NULL;
850- double **seed=NULL;
851- double *theOutput=NULL;
852- std::set<unsigned int> anIndexSet;
853-
854-
855- /*retrieve directions:*/
856- if (strcmp(driver,"fov_forward_all")==0){
857- tangentDirNum=num_independents;
858- indepIndices=xNewZeroInit<int>(tangentDirNum);
859- for(i=0;i<num_independents;i++)indepIndices[i]=1;
860- }
861- else{
862- parameters->FindParam(&indepIndices,&tangentDirNum,&dummy,AutodiffFovForwardIndicesEnum);
863- }
864-
865- /*Some checks: */
866- if (tangentDirNum<1 || tangentDirNum>num_independents) _error_("tangentDirNum should be in [1,num_independents]");
867-
868- /* full Jacobian or Jacobian projection:*/
869- jacTimesSeed=xNew<double>(num_dependents,tangentDirNum);
870-
871- /*set the forward method function pointers: */
872- anEDF_for_solverx_p->fov_forward=EDF_fov_forward_for_solverx;
873- // anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
874-
875- /*allocate the space for the parameters to invoke EDF fov_forward:*/
876- anEDF_for_solverx_p->dpp_X=xNew<double>(anEDF_for_solverx_p->max_n, tangentDirNum);
877- anEDF_for_solverx_p->dpp_Y=xNew<double>(anEDF_for_solverx_p->max_m, tangentDirNum);
878-
879- /*seed matrix: */
880- seed=xNewZeroInit<double>(num_independents,tangentDirNum);
881-
882- /*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
883- for (int i=0; i<tangentDirNum; ++i) {
884- /* make sure the index is in range*/
885- if (indepIndices[i]>num_independents) {
886- _error_("indepIndices values must be in [0,num_independents-1]");
887- }
888- if (anIndexSet.find(indepIndices[i])!=anIndexSet.end()) {
889- _error_("duplicate indepIndices values are not allowed until we implement Jacobian decompression");
890- }
891- anIndexSet.insert(indepIndices[i]);
892- /* now populate the seed matrix from the set of independent indices;
893- * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
894- seed[indepIndices[i]][i]=1.0;
895- }
896-
897- /*allocate output: */
898- theOutput=xNew<double>(num_dependents);
899-
900- /*call driver: */
901- fov_forward(1,num_dependents,num_independents, tangentDirNum, xp, seed, theOutput, jacTimesSeed );
902- /*Free resources: */
903- xDelete(theOutput);
904- xDelete(indepIndices);
905- xDelete(seed);
906-
907- /*add to results: */
908- results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*jacTimesSeed,num_dependents*tangentDirNum,1,1,0.0));
909-
910- /*Free resources: */
911- xDelete(jacTimesSeed);
912- xDelete(indepIndices);
913- }
914- else if (strcmp(driver,"fos_reverse")==0) {
915-
916- int aDepIndex=0;
917- double *aWeightVector=NULL;
918- double *weightVectorTimesJac=NULL;
919-
920- /*retrieve direction index: */
921- parameters->FindParam(&aDepIndex,AutodiffFosReverseIndexEnum);
922-
923- if (aDepIndex<0 || aDepIndex>=num_dependents) _error_("index value for AutodiffFosReverseIndexEnum should be in [0,num_dependents-1]");
924-
925- aWeightVector=xNewZeroInit<double>(num_dependents);
926- aWeightVector[aDepIndex]=1.0;
927-
928- weightVectorTimesJac=xNew<double>(num_independents);
929-
930- /*set the forward method function pointer: */
931- anEDF_for_solverx_p->fos_reverse=EDF_fos_reverse_for_solverx;
932-
933- /*allocate the space for the parameters to invoke the EDF fos_reverse :*/
934- anEDF_for_solverx_p->dp_U=xNew<double>(anEDF_for_solverx_p->max_m);
935- anEDF_for_solverx_p->dp_Z=xNew<double>(anEDF_for_solverx_p->max_n);
936-
937- /*call driver: */
938- fos_reverse(1,num_dependents,num_independents, aWeightVector, weightVectorTimesJac );
939-
940- /*add to results*/
941- results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,weightVectorTimesJac,num_independents,1,1,0.0));
942-
943- /*free resources :*/
944- xDelete(weightVectorTimesJac);
945- xDelete(aWeightVector);
946- }
947- else if ((strcmp(driver,"fov_reverse")==0) || (strcmp(driver,"fov_reverse_all")==0)){
948-
949- int* depIndices=NULL;
950- int weightNum;
951- int dummy;
952- double **weightsTimesJac=NULL;
953- double **weights=NULL;
954- std::set<unsigned int> anIndexSet;
955-
956-
957- /*retrieve directions:*/
958- if (strcmp(driver,"fov_reverse_all")==0){
959- weightNum=num_dependents;
960- depIndices=xNewZeroInit<int>(weightNum);
961- for(i=0;i<num_dependents;i++)depIndices[i]=1;
962- }
963- else{
964- parameters->FindParam(&depIndices,&weightNum,&dummy,AutodiffFovForwardIndicesEnum);
965- }
966-
967- /*Some checks: */
968- if (weightNum<1 || weightNum>num_dependents) _error_("tangentDirNum should be in [1,num_dependents]");
969-
970- /* full Jacobian or Jacobian projection:*/
971- weightsTimesJac=xNew<double>(weightNum,num_independents);
972-
973- /*set the forward method function pointers: */
974- anEDF_for_solverx_p->fov_reverse=EDF_fov_reverse_for_solverx;
975-
976- /*allocate the space for the parameters to invoke the EDF fos_reverse :*/
977- anEDF_for_solverx_p->dpp_U=xNew<double>(weightNum,anEDF_for_solverx_p->max_m);
978- anEDF_for_solverx_p->dpp_Z=xNew<double>(weightNum,anEDF_for_solverx_p->max_n);
979-
980- /*seed matrix: */
981- weights=xNewZeroInit<double>(weightNum,num_dependents);
982-
983- /*collect indices in a set to prevent accidental duplicates as long as we don't do compression:*/
984- for (int i=0; i<weightNum; ++i) {
985- /* make sure the index is in range*/
986- if (depIndices[i]>num_dependents) {
987- _error_("depIndices values must be in [0,num_dependents-1]");
988- }
989- if (anIndexSet.find(depIndices[i])!=anIndexSet.end()) {
990- _error_("duplicate depIndices values are not allowed until we implement Jacobian decompression");
991- }
992- anIndexSet.insert(depIndices[i]);
993- /* now populate the seed matrix from the set of independent indices;
994- * simple setup with a single 1.0 per column and at most a single 1.0 per row*/
995- weights[depIndices[i]][i]=1.0;
996- }
997-
998- /*call driver: */
999- fov_reverse(1,num_dependents,num_independents, weightNum, weights, weightsTimesJac );
1000-
1001- /*add to results: */
1002- results->AddObject(new GenericExternalResult<IssmPDouble*>(results->Size()+1,AutodiffJacobianEnum,*weightsTimesJac,weightNum*num_independents,1,1,0.0));
1003-
1004- /*Free resources: */
1005- xDelete(weights);
1006- xDelete(weightsTimesJac);
1007- xDelete(depIndices);
1008- }
1009- else _error_("driver: " << driver << " not yet supported!");
1010-
1011- /* delete the allocated space for the parameters:*/
1012- xDelete(anEDF_for_solverx_p->dp_x);
1013- xDelete(anEDF_for_solverx_p->dp_X);
1014- xDelete(anEDF_for_solverx_p->dpp_X);
1015- xDelete(anEDF_for_solverx_p->dp_y);
1016- xDelete(anEDF_for_solverx_p->dp_Y);
1017- xDelete(anEDF_for_solverx_p->dpp_Y);
1018- xDelete(anEDF_for_solverx_p->dp_U);
1019- xDelete(anEDF_for_solverx_p->dpp_U);
1020- xDelete(anEDF_for_solverx_p->dp_Z);
1021- xDelete(anEDF_for_solverx_p->dpp_Z);
1022-
1023- /*Free resources: */
1024- xDelete(xp);
1025- xDelete(axp);
1026-
1027- if(VerboseAutodiff())_pprintLine_(" end AD driver");
1028-
1029- #else
1030- _error_("Should not be requesting AD drivers when an AD library is not available!");
1031- #endif
1032- }
1033-}
1034Index: ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.h
1035===================================================================
1036--- ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.h (revision 13539)
1037+++ ../trunk-jpl/src/c/modules/AutodiffDriversx/AutodiffDriversx.h (revision 13540)
1038@@ -1,13 +0,0 @@
1039-/*!\file: AutodiffDriversx.h
1040- * \brief header file for requesting AD results (gradient, jacobian, etc ...)
1041- */
1042-
1043-#ifndef _AUTODIFF_DRIVERSX_H_
1044-#define _AUTODIFF_DRIVERSX_H_
1045-
1046-#include "../../Container/Container.h"
1047-
1048-/* local prototypes: */
1049-void AutodiffDriversx(Elements* elements,Nodes* nodes,Vertices* vertices,Loads* loads,Materials* materials,Parameters* parameters,Results* results);
1050-
1051-#endif /* _AUTODIFF_DRIVERSX_H_*/
1052Index: ../trunk-jpl/src/c/modules/modules.h
1053===================================================================
1054--- ../trunk-jpl/src/c/modules/modules.h (revision 13539)
1055+++ ../trunk-jpl/src/c/modules/modules.h (revision 13540)
1056@@ -7,7 +7,6 @@
1057
1058 /*Modules: */
1059 #include "./AddExternalResultx/AddExternalResultx.h"
1060-#include "./AutodiffDriversx/AutodiffDriversx.h"
1061 #include "./AverageFilterx/AverageFilterx.h"
1062 #include "./AverageOntoPartitionx/AverageOntoPartitionx.h"
1063 #include "./Bamgx/Bamgx.h"
1064Index: ../trunk-jpl/src/c/Makefile.am
1065===================================================================
1066--- ../trunk-jpl/src/c/Makefile.am (revision 13539)
1067+++ ../trunk-jpl/src/c/Makefile.am (revision 13540)
1068@@ -326,8 +326,6 @@
1069 ./modules/RequestedOutputsx/RequestedOutputsx.cpp\
1070 ./modules/RequestedDependentsx/RequestedDependentsx.h\
1071 ./modules/RequestedDependentsx/RequestedDependentsx.cpp\
1072- ./modules/AutodiffDriversx/AutodiffDriversx.h\
1073- ./modules/AutodiffDriversx/AutodiffDriversx.cpp\
1074 ./modules/ResetConstraintsx/ResetConstraintsx.h\
1075 ./modules/ResetConstraintsx/ResetConstraintsx.cpp\
1076 ./modules/ResetCoordinateSystemx/ResetCoordinateSystemx.h\
1077@@ -349,8 +347,10 @@
1078 ./solutions/ResetBoundaryConditions.cpp\
1079 ./solutions/AnalysisConfiguration.cpp\
1080 ./solutions/CorePointerFromSolutionEnum.cpp\
1081+ ./solutions/PureCorePointerFromSolutionEnum.cpp\
1082 ./solutions/EnvironmentInit.cpp\
1083 ./solutions/EnvironmentFinalize.cpp\
1084+ ./solutions/ad_core.cpp\
1085 ./solvers/solver_linear.cpp\
1086 ./solvers/solver_nonlinear.cpp\
1087 ./solvers/solver_newton.cpp\
1088Index: ../trunk-jpl/src/c/classes/objects/Profiler.cpp
1089===================================================================
1090--- ../trunk-jpl/src/c/classes/objects/Profiler.cpp (revision 13539)
1091+++ ../trunk-jpl/src/c/classes/objects/Profiler.cpp (revision 13540)
1092@@ -16,6 +16,8 @@
1093 /*FUNCTION Profiler::Profiler() default constructor {{{*/
1094 Profiler::Profiler(){
1095 this->time=new Parameters();
1096+ this->flops=new Parameters();
1097+ this->memory=new Parameters();
1098 }
1099 /*}}}*/
1100 /*FUNCTION Profiler::~Profiler(){{{*/
1101Index: ../trunk-jpl/src/c/classes/objects/Profiler.h
1102===================================================================
1103--- ../trunk-jpl/src/c/classes/objects/Profiler.h (revision 13539)
1104+++ ../trunk-jpl/src/c/classes/objects/Profiler.h (revision 13540)
1105@@ -20,6 +20,8 @@
1106 FinishInit,
1107 StartCore,
1108 FinishCore,
1109+ StartAdCore,
1110+ FinishAdCore,
1111 Finish
1112 };
1113
Note: See TracBrowser for help on using the repository browser.