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
  • ../trunk-jpl/src/c/cores/transient_core.cpp

     
    332332                transient_step(femmodel);
    333333
    334334                /*Go through our dependent variables, and compute the response:*/
    335                 DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
    336                 for(Object* & object:dependent_objects->objects){
    337                         DependentObject* dep=(DependentObject*)object;
    338                         dep->Responsex(&output_value,femmodel);
    339                         dep->AddValue(output_value);
     335                if(finaltime==time){
     336                        DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
     337                        for(Object* & object:dependent_objects->objects){
     338                                DependentObject* dep=(DependentObject*)object;
     339                                dep->Responsex(&output_value,femmodel);
     340                                dep->AddValue(output_value);
     341                        }
    340342                }
    341343
    342344                if(VerboseSolution()) _printf0_("   counting number of active variables\n");
     
    377379        SetControlInputsFromVectorx(femmodel,X);
    378380
    379381        IssmDouble J = 0.;
    380         if(0){
    381                 DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
    382                 for(Object* & object:dependent_objects->objects){
    383                         DependentObject* dep=(DependentObject*)object;
    384                         J += dep->GetValue();
    385                 }
     382        DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
     383        for(Object* & object:dependent_objects->objects){
     384                DependentObject* dep=(DependentObject*)object;
     385                J += dep->GetValue();
    386386        }
    387         else{
    388                 femmodel->IceVolumeAboveFloatationx(&J,false);
    389         }
    390387        tape_codi.registerOutput(J);
    391388
    392389        tape_codi.setPassive();
     
    434431                                                <<std::fixed<<std::setprecision(2)<<thistime/yts<< " (time step: " << thisdt/yts << ")\n");
    435432                        transient_step(femmodel);
    436433
     434                        /*Go through our dependent variables, and compute the response:*/
     435                        if(thistime==finaltime){
     436                                DataSet* dependent_objects=((DataSetParam*)femmodel->parameters->FindParamObject(AutodiffDependentObjectsEnum))->value;
     437                                for(Object* & object:dependent_objects->objects){
     438                                        DependentObject* dep=(DependentObject*)object;
     439                                        dep->Responsex(&output_value,femmodel);
     440                                        dep->AddValue(output_value);
     441                                }
     442                        }
     443
    437444                        /*First and last segment need special treatment*/
    438445                        if(thisstep==finalstep) break;
    439446                        if(reverse_step==1 && ii==recording_frequency-2) break;
     
    459466                for(int i=0; i<Ysize_i; i++) Yb[i]  = tape_codi.gradient(Yin[i]);
    460467                for(int i=0; i<Xsize;   i++) Xb[i] += X[i].gradient();
    461468        }
     469        /*Clear tape*/
     470        tape_codi.reset();
    462471
    463472        /*Broadcast gradient to other ranks (make sure to sum all gradients)*/
    464473        double* gradient=xNew<double>(Xsize);
Note: See TracBrowser for help on using the repository browser.