source:
issm/oecreview/Archive/24684-25833/ISSM-25591-25592.diff
Last change on this file was 25834, checked in by , 4 years ago | |
---|---|
File size: 2.8 KB |
-
../trunk-jpl/src/c/cores/transient_core.cpp
332 332 transient_step(femmodel); 333 333 334 334 /*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 } 340 342 } 341 343 342 344 if(VerboseSolution()) _printf0_(" counting number of active variables\n"); … … 377 379 SetControlInputsFromVectorx(femmodel,X); 378 380 379 381 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(); 386 386 } 387 else{388 femmodel->IceVolumeAboveFloatationx(&J,false);389 }390 387 tape_codi.registerOutput(J); 391 388 392 389 tape_codi.setPassive(); … … 434 431 <<std::fixed<<std::setprecision(2)<<thistime/yts<< " (time step: " << thisdt/yts << ")\n"); 435 432 transient_step(femmodel); 436 433 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 437 444 /*First and last segment need special treatment*/ 438 445 if(thisstep==finalstep) break; 439 446 if(reverse_step==1 && ii==recording_frequency-2) break; … … 459 466 for(int i=0; i<Ysize_i; i++) Yb[i] = tape_codi.gradient(Yin[i]); 460 467 for(int i=0; i<Xsize; i++) Xb[i] += X[i].gradient(); 461 468 } 469 /*Clear tape*/ 470 tape_codi.reset(); 462 471 463 472 /*Broadcast gradient to other ranks (make sure to sum all gradients)*/ 464 473 double* gradient=xNew<double>(Xsize);
Note:
See TracBrowser
for help on using the repository browser.