source: issm/oecreview/Archive/24684-25833/ISSM-25591-25592.diff

Last change on this file was 25834, checked in by Mathieu Morlighem, 4 years ago

CHG: added 24684-25833

File size: 2.8 KB
RevLine 
[25834]1Index: ../trunk-jpl/src/c/cores/transient_core.cpp
2===================================================================
3--- ../trunk-jpl/src/c/cores/transient_core.cpp (revision 25591)
4+++ ../trunk-jpl/src/c/cores/transient_core.cpp (revision 25592)
5@@ -332,11 +332,13 @@
6 transient_step(femmodel);
7
8 /*Go through our dependent variables, and compute the response:*/
9- DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
10- for(Object* & object:dependent_objects->objects){
11- DependentObject* dep=(DependentObject*)object;
12- dep->Responsex(&output_value,femmodel);
13- dep->AddValue(output_value);
14+ if(finaltime==time){
15+ DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
16+ for(Object* & object:dependent_objects->objects){
17+ DependentObject* dep=(DependentObject*)object;
18+ dep->Responsex(&output_value,femmodel);
19+ dep->AddValue(output_value);
20+ }
21 }
22
23 if(VerboseSolution()) _printf0_(" counting number of active variables\n");
24@@ -377,16 +379,11 @@
25 SetControlInputsFromVectorx(femmodel,X);
26
27 IssmDouble J = 0.;
28- if(0){
29- DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
30- for(Object* & object:dependent_objects->objects){
31- DependentObject* dep=(DependentObject*)object;
32- J += dep->GetValue();
33- }
34+ DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
35+ for(Object* & object:dependent_objects->objects){
36+ DependentObject* dep=(DependentObject*)object;
37+ J += dep->GetValue();
38 }
39- else{
40- femmodel->IceVolumeAboveFloatationx(&J,false);
41- }
42 tape_codi.registerOutput(J);
43
44 tape_codi.setPassive();
45@@ -434,6 +431,16 @@
46 <<std::fixed<<std::setprecision(2)<<thistime/yts<< " (time step: " << thisdt/yts << ")\n");
47 transient_step(femmodel);
48
49+ /*Go through our dependent variables, and compute the response:*/
50+ if(thistime==finaltime){
51+ DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
52+ for(Object* & object:dependent_objects->objects){
53+ DependentObject* dep=(DependentObject*)object;
54+ dep->Responsex(&output_value,femmodel);
55+ dep->AddValue(output_value);
56+ }
57+ }
58+
59 /*First and last segment need special treatment*/
60 if(thisstep==finalstep) break;
61 if(reverse_step==1 && ii==recording_frequency-2) break;
62@@ -459,6 +466,8 @@
63 for(int i=0; i<Ysize_i; i++) Yb[i] = tape_codi.gradient(Yin[i]);
64 for(int i=0; i<Xsize; i++) Xb[i] += X[i].gradient();
65 }
66+ /*Clear tape*/
67+ tape_codi.reset();
68
69 /*Broadcast gradient to other ranks (make sure to sum all gradients)*/
70 double* gradient=xNew<double>(Xsize);
Note: See TracBrowser for help on using the repository browser.