Changeset 25560
- Timestamp:
- 09/11/20 09:53:19 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/cores/transient_core.cpp ¶
r25554 r25560 276 276 bool isoceancoupling,isslr; 277 277 int step,timestepping; 278 int recording_frequency,finalcheckpoint; 278 279 DataSet* dependent_objects=NULL; 279 280 … … 286 287 femmodel->parameters->FindParam(&isslr,TransientIsslrEnum); 287 288 femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum); 289 femmodel->parameters->FindParam(&recording_frequency,SettingsRecordingFrequencyEnum); _assert_(recording_frequency>0); 288 290 if(isslr) sealevelrise_core_geometry(femmodel); 289 291 … … 298 300 299 301 /*Time Increment*/ 300 if(timestepping!=FixedTimesteppingEnum) _error_("not supported yet, but easy to handle..."); 301 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 302 switch(timestepping){ 303 case AdaptiveTimesteppingEnum: 304 femmodel->TimeAdaptx(&dt); 305 if(time+dt>finaltime) dt=finaltime-time; 306 femmodel->parameters->SetParam(dt,TimesteppingTimeStepEnum); 307 break; 308 case FixedTimesteppingEnum: 309 femmodel->parameters->FindParam(&dt,TimesteppingTimeStepEnum); 310 break; 311 default: 312 _error_("Time stepping \""<<EnumToStringx(timestepping)<<"\" not supported yet"); 313 } 302 314 step+=1; 303 315 time+=dt; … … 307 319 time_all.push_back(time); 308 320 321 if(VerboseSolution()){ 322 _printf0_("iteration " << step << "/" << ceil((finaltime-time)/dt)+step << \ 323 " time [yr]: " <<std::fixed<<setprecision(2)<< time/yts << " (time step: " << dt/yts << ")\n"); 324 } 325 309 326 /*Store Model State at the beginning of the step*/ 310 if(VerboseSolution()) _printf0_(" checkpointing model \n"); 311 femmodel->CheckPointAD(step); 327 if(step%recording_frequency==0){ 328 if(VerboseSolution()) _printf0_(" checkpointing model (step: "<<step<<")\n"); 329 femmodel->CheckPointAD(step); 330 finalcheckpoint = step; 331 } 312 332 313 333 if(VerboseSolution()) _printf0_(" counting number of active variables\n"); … … 328 348 } 329 349 350 int finalstep = step; 330 351 if(VerboseSolution()) _printf0_(" done with initial complete transient\n"); 331 352 … … 366 387 } 367 388 else{ 368 femmodel->IceVolume x(&J,false);389 femmodel->IceVolumeAboveFloatationx(&J,false); 369 390 } 370 391 if(IssmComm::GetRank()==0) tape_codi.registerOutput(J); … … 380 401 381 402 /*reverse loop for transient step (G)*/ 382 for(int reverse_step = step;reverse_step>0; reverse_step--){403 for(int reverse_step = finalcheckpoint;reverse_step>0; reverse_step-=recording_frequency){ 383 404 384 405 /*Restore model from this step*/ … … 403 424 404 425 /*Get New state*/ 405 transient_step(femmodel); 426 for(int ii=0;ii<recording_frequency;ii++){ 427 int thisstep = reverse_step+ii; 428 IssmDouble thistime = time_all[reverse_step+ii-1]; 429 _printf0_("step "<<thisstep<<" ("<<ii+1<<"/"<<recording_frequency<<") time [yr]: "<<std::fixed<<std::setprecision(2)<<thistime/yts<<"\n"); 430 transient_step(femmodel); 431 if(thisstep==finalstep) break; 432 } 406 433 407 434 /*Register output*/ … … 422 449 423 450 /* here we access the gradient data via the stored identifiers.*/ 424 //for(int i=0; i<Ysize_i; i++) if(tape_codi.gradient(Yin[i])!=0.) printf(" %g (%i)",tape_codi.gradient(Yin[i]),Yin[i]);425 451 for(int i=0; i<Ysize_i; i++) Yb[i] = tape_codi.gradient(Yin[i]); 426 452 for(int i=0; i<Xsize; i++) Xb[i] += X[i].gradient();
Note:
See TracChangeset
for help on using the changeset viewer.