source:
issm/oecreview/Archive/24684-25833/ISSM-25465-25466.diff
Last change on this file was 25834, checked in by , 4 years ago | |
---|---|
File size: 5.6 KB |
-
../trunk-jpl/src/c/cores/transient_core.cpp
72 72 if(isoceancoupling) OceanExchangeDatax(femmodel,true); 73 73 #endif 74 74 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; 81 76 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?*/ 85 78 femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum); 86 87 /*Go through our dependent variables, and compute the response:*/88 dependents=xNew<IssmPDouble>(num_dependents);89 79 } 90 80 91 81 if(isslr) sealevelrise_core_geometry(femmodel); … … 157 147 /*Go through our dependent variables, and compute the response:*/ 158 148 for(int i=0;i<dependent_objects->Size();i++){ 159 149 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); 163 153 } 154 } 164 155 } 165 156 166 157 if(!iscontrol || !isautodiff) femmodel->RequestedDependentsx(); … … 283 274 } 284 275 285 276 }/*}}}*/ 277 278 #ifdef _HAVE_CODIPACK_ 279 void 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(×tepping,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.