Changeset 27724
- Timestamp:
- 05/04/23 11:29:48 (23 months ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r27650 r27724 3498 3498 if(!IsOnBase()) return; 3499 3499 } 3500 3501 /*Get out if this is not an element input*/3502 if(!IsInputEnum(control_enum)) return;3503 3500 3504 3501 /*Prepare index list*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r27689 r27724 5032 5032 } 5033 5033 } 5034 5035 /*Get out if this is not an element input*/5036 if(!IsInputEnum(control_enum)) return;5037 5034 5038 5035 /*Get list of ids for this element and this control*/ -
issm/trunk-jpl/src/c/classes/Params/ControlParam.cpp
r27722 r27724 62 62 63 63 savedvalue=NULL; 64 gradient= NULL;64 gradient=xNewZeroInit<IssmDouble>(M); 65 65 } 66 66 else{ … … 78 78 xDelete<IssmDouble>(minvalue); 79 79 xDelete<IssmDouble>(maxvalue); 80 xDelete<IssmDouble>(gradient); 81 xDelete<IssmDouble>(savedvalue); 80 82 return; 81 83 } … … 201 203 void ControlParam::SetGradient(IssmDouble* poutput, int in_M){/*{{{*/ 202 204 205 _assert_(in_M==this->M); 206 203 207 /*avoid leak: */ 204 208 xDelete<IssmDouble>(this->gradient); -
issm/trunk-jpl/src/c/classes/Params/Parameters.cpp
r27719 r27724 649 649 } 650 650 /*}}}*/ 651 void Parameters::SetControlParam(IssmDouble* IssmDoublearray,int M, int enum_type){/*{{{*/ 652 653 Param* param=NULL; 654 655 /*first, figure out if the param has already been created: */ 656 param=xDynamicCast<Param*>(this->FindParamObject(enum_type)); 657 658 if(param) param->SetValue(IssmDoublearray,M); //already exists, just set it. 651 void Parameters::SetControlFromVector(IssmDouble* vector, int enum_type, int M, int N, int offset){/*{{{*/ 652 653 /*first, figure out if the param has already been created: */ 654 Param* param=NULL; 655 param=xDynamicCast<Param*>(this->FindParamObject(enum_type)); 656 657 if(param) param->SetValue(&vector[offset], M); 658 else _error_("Param "<< EnumToStringx(enum_type) << " cannot setValue"); 659 } 660 /*}}}*/ 661 void Parameters::SetGradientFromVector(IssmDouble* vector, int enum_type, int M, int N, int offset){/*{{{*/ 662 663 /*first, figure out if the param has already been created: */ 664 Param* param=NULL; 665 param=xDynamicCast<Param*>(this->FindParamObject(enum_type)); 666 667 if(param) param->SetGradient(&vector[offset], M); 659 668 else _error_("Param "<< EnumToStringx(enum_type) << " cannot setValue"); 660 669 } -
issm/trunk-jpl/src/c/classes/Params/Parameters.h
r27719 r27724 74 74 void SetParam(FILE* fid,int enum_type); 75 75 void SetParam(DataSet* dataset,int enum_type); 76 void SetControlParam(IssmDouble* IssmDoublearray,int M, int enum_type); 76 void SetControlFromVector(IssmDouble* array, int enum_type, int M, int N, int offset); 77 void SetGradientFromVector(IssmDouble* array, int enum_type, int M, int N, int offset); 77 78 void ControlParamSetGradient(IssmDouble* IssmDoublearray, int M, int enum_type); 78 79 void GetVectorFromControl(Vector<IssmDouble>* vector,int control_enum,int control_index,int N,const char* data,int offset); -
issm/trunk-jpl/src/c/cores/controladm1qn3_core.cpp
r27722 r27724 251 251 #ifdef _HAVE_CODIPACK_ 252 252 if(checkpoint_frequency && solution_type == TransientSolutionEnum){ 253 if(IsParamEnum(control_enum[0])){ 254 #ifdef _HAVE_AD_ 255 IssmDouble* aX=xNew<IssmDouble>(intn,"t"); 256 #else 257 IssmDouble* aX=xNew<IssmDouble>(intn); 258 #endif 259 for(int i=0;i<intn;i++) { 260 aX[i]=X[i]; 261 } 262 femmodel->parameters->SetControlParam(aX,M[0],control_enum[0]); 263 } 264 else{ 265 SetControlInputsFromVectorx(femmodel,X); 266 } 253 SetControlInputsFromVectorx(femmodel,X); 267 254 *pf = transient_ad(femmodel, G, &Jlist[(*Jlisti)*JlistN]); 268 255 } … … 317 304 318 305 ISSM_MPI_Bcast(aX,intn,ISSM_MPI_DOUBLE,0,IssmComm::GetComm()); 319 if(IsParamEnum(control_enum[0])){ 320 femmodel->parameters->SetControlParam(aX,M[0],control_enum[0]); 321 } 322 else{ 323 SetControlInputsFromVectorx(femmodel,aX); 324 } 306 SetControlInputsFromVectorx(femmodel,aX); 325 307 xDelete<IssmDouble>(aX); 326 308 … … 673 655 } 674 656 675 if(IsParamEnum(control_enum[0])){ 676 //femmodel->parameters->ControlParamSetGradient(aG,M[0],control_enum[0]); 677 femmodel->parameters->SetControlParam(aX,M[0],control_enum[0]); 678 } 679 else{ 680 ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG); 681 SetControlInputsFromVectorx(femmodel,aX); 682 } 657 ControlInputSetGradientx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,aG); 658 SetControlInputsFromVectorx(femmodel,aX); 683 659 xDelete(aX); 684 660 -
issm/trunk-jpl/src/c/cores/transient_core.cpp
r27696 r27724 392 392 delete hdl_regin; 393 393 if(my_rank==0) for(int i=0; i < Xsize; i++) tape_codi.registerInput(X[i]); 394 395 if(IsParamEnum(control_enum[0])){ 396 femmodel->parameters->SetControlParam(X,M[0],control_enum[0]); 397 } 398 else{ 399 SetControlInputsFromVectorx(femmodel,X); 400 } 394 SetControlInputsFromVectorx(femmodel,X); 401 395 402 396 IssmDouble J = 0.; … … 461 455 /*Tell codipack that X is the independent*/ 462 456 for(int i=0; i<Xsize; i++) tape_codi.registerInput(X[i]); 463 464 if(IsParamEnum(control_enum[0])){ 465 femmodel->parameters->SetControlParam(X,M[0],control_enum[0]); 466 } 467 else{ 468 SetControlInputsFromVectorx(femmodel,X); 469 } 457 SetControlInputsFromVectorx(femmodel,X); 470 458 471 459 /*Get New state*/ -
issm/trunk-jpl/src/c/modules/ControlInputSetGradientx/ControlInputSetGradientx.cpp
r25539 r27724 25 25 int offset = 0; 26 26 for(int i=0;i<num_controls;i++){ 27 for(Object* & object : elements->objects){ 28 Element* element=xDynamicCast<Element*>(object); 29 element->ControlInputSetGradient(gradient,control_type[i],i,offset,M_all[i],N_all[i],interp_all[i]); 27 /*Is the control a Param?*/ 28 if(IsParamEnum(control_type[i])){ 29 parameters->SetGradientFromVector(gradient, control_type[i], M_all[i], N_all[i], offset); 30 } 31 else if(IsInputEnum(control_type[i])){ 32 for(Object* & object : elements->objects){ 33 Element* element=xDynamicCast<Element*>(object); 34 element->ControlInputSetGradient(gradient,control_type[i],i,offset,M_all[i],N_all[i],interp_all[i]); 35 } 36 } 37 else{ 38 _error_("not supported yet"); 30 39 } 31 40 offset+=M_all[i]*N_all[i]; -
issm/trunk-jpl/src/c/modules/SetControlInputsFromVectorx/SetControlInputsFromVectorx.cpp
r26893 r27724 22 22 int offset = 0; 23 23 for(int i=0;i<num_controls;i++){ 24 for(Object* & object : femmodel->elements->objects){ 25 Element* element=xDynamicCast<Element*>(object); 26 element->SetControlInputsFromVector(vector,control_type[i],i,offset,M[i],N[i]); 24 /*Is the control a Param?*/ 25 if(IsParamEnum(control_type[i])){ 26 femmodel->parameters->SetControlFromVector(vector,control_type[i],M[i],N[i],offset); 27 } 28 else if(IsInputEnum(control_type[i])){ 29 for(Object* & object : femmodel->elements->objects){ 30 Element* element=xDynamicCast<Element*>(object); 31 element->SetControlInputsFromVector(vector,control_type[i],i,offset,M[i],N[i]); 32 } 33 } 34 else{ 35 _error_("not supported yet"); 27 36 } 28 37 offset += M[i]*N[i];
Note:
See TracChangeset
for help on using the changeset viewer.