source: issm/oecreview/Archive/24684-25833/ISSM-25465-25466.diff@ 25834

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

CHG: added 24684-25833

File size: 5.6 KB
  • ../trunk-jpl/src/c/cores/transient_core.cpp

     
    7272        if(isoceancoupling) OceanExchangeDatax(femmodel,true);
    7373        #endif
    7474
    75         IssmDouble  output_value;
    76         int         num_dependents;
    77         IssmPDouble *dependents;
    78         DataSet*    dependent_objects=NULL;
    79         IssmDouble  J=0.;
    80 
     75        DataSet* dependent_objects=NULL;
    8176        if(iscontrol && isautodiff){
    82 
    83                 femmodel->parameters->SetParam(starttime,TimeEnum);
    84                 femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum);
     77                femmodel->parameters->SetParam(starttime,TimeEnum); /*FIXME: DO WE REALLY NEED THIS?*/
    8578                femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
    86 
    87                 /*Go through our dependent variables, and compute the response:*/
    88                 dependents=xNew<IssmPDouble>(num_dependents);
    8979        }
    9080
    9181        if(isslr) sealevelrise_core_geometry(femmodel);
     
    157147                        /*Go through our dependent variables, and compute the response:*/
    158148                        for(int i=0;i<dependent_objects->Size();i++){
    159149                                DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
    160                                  dep->Responsex(&output_value,femmodel);
    161                                  dep->AddValue(output_value);
    162                                 }
     150                                IssmDouble  output_value;
     151                                dep->Responsex(&output_value,femmodel);
     152                                dep->AddValue(output_value);
    163153                        }
     154                }
    164155        }
    165156
    166157        if(!iscontrol || !isautodiff) femmodel->RequestedDependentsx();
     
    283274        }
    284275
    285276}/*}}}*/
     277
     278#ifdef _HAVE_CODIPACK_
     279void transient_ad(FemModel* femmodel){/*{{{*/
     280
     281        /*parameters: */
     282        IssmDouble finaltime,dt,yts,starttime;
     283        bool       isoceancoupling,iscontrol,isautodiff,isgroundingline,isslr;
     284        bool       save_results,dakota_analysis;
     285        int        timestepping;
     286        int        output_frequency;
     287        int        sb_coupling_frequency;
     288        int        recording_frequency;
     289        int        groundingline_migration,smb_model,amr_frequency,amr_restart;
     290        int        numoutputs;
     291        char     **requested_outputs = NULL;
     292
     293        /*intermediary: */
     294        int        step;
     295        IssmDouble time;
     296
     297        /*first, figure out if there was a check point, if so, do a reset of the FemModel* femmodel structure. */
     298        femmodel->parameters->FindParam(&recording_frequency,SettingsRecordingFrequencyEnum);
     299        if(recording_frequency) femmodel->Restart();
     300
     301        /*then recover parameters common to all solutions*/
     302        femmodel->parameters->FindParam(&step,StepEnum);
     303        femmodel->parameters->FindParam(&time,TimeEnum);
     304        femmodel->parameters->FindParam(&finaltime,TimesteppingFinalTimeEnum);
     305        femmodel->parameters->FindParam(&starttime,TimesteppingStartTimeEnum);
     306        femmodel->parameters->FindParam(&yts,ConstantsYtsEnum);
     307        femmodel->parameters->FindParam(&dakota_analysis,QmuIsdakotaEnum);
     308        femmodel->parameters->FindParam(&output_frequency,SettingsOutputFrequencyEnum);
     309        femmodel->parameters->FindParam(&sb_coupling_frequency,SettingsSbCouplingFrequencyEnum);
     310        femmodel->parameters->FindParam(&timestepping,TimesteppingTypeEnum);
     311        femmodel->parameters->FindParam(&isslr,TransientIsslrEnum);
     312        femmodel->parameters->FindParam(&isgroundingline,TransientIsgroundinglineEnum);
     313        femmodel->parameters->FindParam(&amr_frequency,TransientAmrFrequencyEnum);
     314        femmodel->parameters->FindParam(&iscontrol,InversionIscontrolEnum);
     315        femmodel->parameters->FindParam(&isautodiff,AutodiffIsautodiffEnum);
     316        femmodel->parameters->FindParam(&numoutputs,TransientNumRequestedOutputsEnum);
     317        if(isgroundingline) femmodel->parameters->FindParam(&groundingline_migration,GroundinglineMigrationEnum);
     318        if(numoutputs)      femmodel->parameters->FindParam(&requested_outputs,&numoutputs,TransientRequestedOutputsEnum);
     319
     320        DataSet*    dependent_objects=NULL;
     321        if(iscontrol){
     322                femmodel->parameters->SetParam(starttime,TimeEnum);
     323                femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum);
     324        }
     325
     326        if(isslr) sealevelrise_core_geometry(femmodel);
     327
     328        while(time < finaltime - (yts*DBL_EPSILON)){ //make sure we run up to finaltime.
     329
     330                /*Time Increment*/
     331                switch(timestepping){
     332                        case AdaptiveTimesteppingEnum:
     333                                femmodel->TimeAdaptx(&dt);
     334                                if(time+dt>finaltime) dt=finaltime-time;
     335                                femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum);
     336                                break;
     337                        case FixedTimesteppingEnum:
     338                                femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum);
     339                                break;
     340                        default:
     341                                _error_("Time stepping \""<<EnumToStringx(timestepping)<<"\" not supported yet");
     342                }
     343                step+=1;
     344                time+=dt;
     345                femmodel->parameters->SetParam(time,TimeEnum);
     346                femmodel->parameters->SetParam(step,StepEnum);
     347                femmodel->parameters->SetParam(false,SaveResultsEnum);
     348
     349                /*Run transient step!*/
     350                transient_step(femmodel);
     351
     352                /*unload results*/
     353                if(VerboseSolution()) _printf0_("   computing requested outputs\n");
     354                femmodel->RequestedOutputsx(&femmodel->results,requested_outputs,numoutputs,false);
     355
     356                if(recording_frequency && (step%recording_frequency==0)){
     357                        if(VerboseSolution()) _printf0_("   checkpointing model \n");
     358                        femmodel->CheckPoint();
     359                }
     360
     361                /*Go through our dependent variables, and compute the response:*/
     362                for(int i=0;i<dependent_objects->Size();i++){
     363                        DependentObject* dep=(DependentObject*)dependent_objects->GetObjectByOffset(i);
     364                        IssmDouble  output_value;
     365                        dep->Responsex(&output_value,femmodel);
     366                        dep->AddValue(output_value);
     367                }
     368        }
     369
     370        if(!iscontrol) femmodel->RequestedDependentsx();
     371        if(iscontrol) femmodel->parameters->SetParam(dependent_objects,AutodiffDependentObjectsEnum);
     372
     373        /*Free ressources:*/
     374        if(numoutputs){for(int i=0;i<numoutputs;i++){xDelete<char>(requested_outputs[i]);} xDelete<char*>(requested_outputs);}
     375
     376}/*}}}*/
     377#endif
Note: See TracBrowser for help on using the repository browser.