Changeset 24099
- Timestamp:
- 07/18/19 01:55:59 (6 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/Makefile.am
r24080 r24099 295 295 ./cores/control_core.cpp\ 296 296 ./cores/controltao_core.cpp\ 297 ./cores/controlad_core.cpp\298 297 ./cores/controlm1qn3_core.cpp\ 299 298 ./cores/controladm1qn3_core.cpp\ -
issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp
r23316 r24099 190 190 if(solution_type == TransientSolutionEnum) femmodel = input_struct->femmodel->copy(); 191 191 192 IssmPDouble* Jlist 193 int JlistM 194 int JlistN 195 int* Jlisti 196 int intn 192 IssmPDouble* Jlist = input_struct->Jlist; 193 int JlistM = input_struct->M; 194 int JlistN = input_struct->N; 195 int* Jlisti = input_struct->i; 196 int intn = (int)*n; 197 197 198 198 /*Recover some parameters*/ … … 267 267 femmodel->parameters->FindParam(&restart_time,TimesteppingStartTimeEnum); 268 268 femmodel->parameters->SetParam(restart_time,TimeEnum); 269 270 269 } 271 270 272 271 /*Get Dependents*/ 273 IssmDouble output_value;274 int num_dependents;272 IssmDouble output_value; 273 int num_dependents; 275 274 IssmPDouble *dependents; 276 DataSet * dependent_objects=NULL;277 IssmDouble J=0.;275 DataSet *dependent_objects = NULL; 276 IssmDouble J = 0.; 278 277 femmodel->parameters->FindParam(&num_dependents,AutodiffNumDependentsEnum); 279 278 femmodel->parameters->FindParam(&dependent_objects,AutodiffDependentObjectsEnum); … … 378 377 /* call the fos_reverse in a loop on the index, from 0 to num_dependents, so 379 378 * as to generate num_dependents gradients: */ 380 for(int aDepIndex=0;aDepIndex<num_dependents_old;aDepIndex++){379 for(int dep_index=0;dep_index<num_dependents_old;dep_index++){ 381 380 382 381 /*initialize direction index in the weights vector: */ 383 aWeightVector=xNewZeroInit<IssmPDouble>(num_dependents);384 382 if(my_rank==0){ 385 if( aDepIndex<0 || aDepIndex>=num_dependents || codi_global.output_indices.size() <= aDepIndex){386 _error_("index value for AutodiffFosReverseIndexEnumshould be in [0,num_dependents-1]");383 if(dep_index<0 || dep_index>=num_dependents || codi_global.output_indices.size() <= dep_index){ 384 _error_("index value for dependent index should be in [0,num_dependents-1]"); 387 385 } 388 tape_codi.setGradient(codi_global.output_indices[ aDepIndex],1.0);386 tape_codi.setGradient(codi_global.output_indices[dep_index],1.0); 389 387 } 390 388 tape_codi.evaluate(); … … 393 391 weightVectorTimesJac=xNew<IssmPDouble>(num_independents); 394 392 auto in_size = codi_global.input_indices.size(); 395 for(size_t i = 0; i < in_size; ++i) 393 for(size_t i = 0; i < in_size; ++i){ 396 394 _assert_(i<num_independents); 397 395 weightVectorTimesJac[i] = tape_codi.getGradient(codi_global.input_indices[i]); 398 396 } 399 if(my_rank==0) for(int i=0;i<num_independents;i++) 397 if(my_rank==0) for(int i=0;i<num_independents;i++){ 400 398 totalgradient[i]+=weightVectorTimesJac[i]; 401 399 } 402 /*free resources :*/403 400 xDelete(weightVectorTimesJac); 404 xDelete(aWeightVector);405 401 } 406 402 /*}}}*/ … … 470 466 xDelete<IssmDouble>(scaling_factors); 471 467 xDelete<IssmPDouble>(totalgradient); 472 473 468 }/*}}}*/ 474 469 void controladm1qn3_core(FemModel* femmodel){/*{{{*/ -
issm/trunk-jpl/src/c/cores/cores.h
r22955 r24099 31 31 void controlm1qn3_core(FemModel* femmodel); 32 32 void controladm1qn3_core(FemModel* femmodel); 33 void controlad_core(FemModel* femmodel);34 33 void controlvalidation_core(FemModel* femmodel); 35 34 void masstransport_core(FemModel* femmodel);
Note:
See TracChangeset
for help on using the changeset viewer.