Changeset 25592


Ignore:
Timestamp:
09/24/20 13:32:38 (4 years ago)
Author:
Mathieu Morlighem
Message:

CHG: now use dependent objects, computed at the end of the run ONLY, to get gradient

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/cores/transient_core.cpp

    r25578 r25592  
    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
     
    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                 }
    386         }
    387         else{
    388                 femmodel->IceVolumeAboveFloatationx(&J,false);
     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();
    389386        }
    390387        tape_codi.registerOutput(J);
     
    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;
     
    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)*/
Note: See TracChangeset for help on using the changeset viewer.