Changeset 23311
- Timestamp:
- 09/18/18 12:31:03 (7 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/cores/control_core.cpp
r23242 r23311 81 81 IssmDouble *XL = NULL; 82 82 IssmDouble *XU = NULL; 83 GetVectorFromControlInputsx(&XL, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");84 GetVectorFromControlInputsx(&XU, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");83 GetVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 84 GetVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 85 85 for(long i=0;i<nsize;i++){ 86 86 if(X0[i]>XU[i]) X0[i]=XU[i]; … … 134 134 IssmDouble *XL = NULL; 135 135 IssmDouble *XU = NULL; 136 GetVectorFromControlInputsx(&XL, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");137 GetVectorFromControlInputsx(&XU, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");136 GetVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 137 GetVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 138 138 for(long i=0;i<nsize;i++){ 139 139 if(X[i]>XU[i]) X[i]=XU[i]; … … 225 225 IssmDouble *XL = NULL; 226 226 IssmDouble *XU = NULL; 227 GetVectorFromControlInputsx(&XL, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");228 GetVectorFromControlInputsx(&XU, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");227 GetVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 228 GetVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 229 229 for(long i=0;i<nsize;i++){ 230 230 if(X[i]>XU[i]) X[i]=XU[i]; -
issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp
r23309 r23311 78 78 79 79 /*Get initial guess*/ 80 Vector<double> *Xpetsc = NULL; 81 GetPassiveVectorFromControlInputsx(&Xpetsc,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value"); 82 X = Xpetsc->ToMPISerial(); 83 Xpetsc->GetSize(&intn); 84 delete Xpetsc; 80 GetPassiveVectorFromControlInputsx(&X,&intn,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value"); 85 81 _assert_(intn==numberofvertices*num_controls); 86 82 … … 143 139 double *XL = NULL; 144 140 double *XU = NULL; 145 GetPassiveVectorFromControlInputsx(&XL, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound");146 GetPassiveVectorFromControlInputsx(&XU, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound");141 GetPassiveVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 142 GetPassiveVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 147 143 for(int c=0;c<num_controls;c++){ 148 144 for(int i=0;i<numberofvertices;i++){ … … 213 209 double *XL = NULL; 214 210 double *XU = NULL; 215 #ifdef _HAVE_AD_ 216 GetPassiveVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 217 GetPassiveVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 218 #else 219 GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 220 GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 221 #endif 211 GetPassiveVectorFromControlInputsx(&XL,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 212 GetPassiveVectorFromControlInputsx(&XU,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 222 213 for(int c=0;c<num_controls;c++){ 223 214 for(int i=0;i<numberofvertices;i++){ -
issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.cpp
r23252 r23311 78 78 79 79 }/*}}}*/ 80 void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/80 void GetVectorFromControlInputsx( IssmDouble** pvector,int *pN, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/ 81 81 82 82 /*intermediary: */ 83 int N; 83 84 Vector<IssmDouble>* vec_vector=NULL; 84 85 86 /*Get PETSc vector*/ 85 87 GetVectorFromControlInputsx( &vec_vector, elements,nodes, vertices, loads, materials, parameters,data); 88 89 /*Serialize*/ 90 vec_vector->GetSize(&N); 86 91 IssmDouble* vector=vec_vector->ToMPISerial(); 87 88 /*Free ressources:*/89 92 delete vec_vector; 90 93 91 94 /*Assign output pointers:*/ 92 95 *pvector=vector; 96 if(pN) *pN=N; 93 97 }/*}}}*/ 94 98 95 99 /*For autodiff, we sometimes need to cast our vectors to passive*/ 96 100 #ifdef _HAVE_AD_ 97 void GetPassiveVectorFromControlInputsx(Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/ 98 99 /*Get active vector first*/ 100 Vector<IssmDouble>* activevector=NULL; 101 Vector<IssmPDouble>* vector=NULL; 102 int size; 103 104 /*Retrieve some parameters*/ 105 GetVectorFromControlInputsx(&activevector, elements,nodes, vertices, loads, materials, parameters,data); 106 107 /*Serialize vector*/ 108 activevector->GetSize(&size); 109 IssmDouble* dactivevector=activevector->ToMPISerial(); 110 111 /*Cast to passive*/ 112 vector=new Vector<IssmPDouble>(size); 113 for(int i=0;i<size;i++){ 114 vector->SetValue(i,reCast<IssmPDouble>(dactivevector[i]),INS_VAL); 115 } 116 vector->Assemble(); 117 118 /*Assign output pointers:*/ 119 delete activevector; 120 xDelete<IssmDouble>(dactivevector); 121 *pvector=vector; 122 123 }/*}}}*/ 124 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/ 101 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector,int* pN, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/ 125 102 126 103 /*Get active vector first*/ … … 144 121 xDelete<IssmDouble>(dactivevector); 145 122 *pvector=vector; 123 if(pN) *pN=size; 146 124 147 125 }/*}}}*/ 148 126 #else 149 void GetPassiveVectorFromControlInputsx( Vector<IssmPDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters,const char* data){/*{{{*/127 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector,int* pN, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/ 150 128 151 GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data); 152 153 }/*}}}*/ 154 void GetPassiveVectorFromControlInputsx(IssmPDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices, Loads* loads, Materials* materials, Parameters* parameters, const char* data){/*{{{*/ 155 156 GetVectorFromControlInputsx(pvector, elements,nodes, vertices, loads, materials, parameters,data); 129 GetVectorFromControlInputsx(pvector,pN,elements,nodes, vertices, loads, materials, parameters,data); 157 130 }/*}}}*/ 158 131 #endif -
issm/trunk-jpl/src/c/modules/GetVectorFromControlInputsx/GetVectorFromControlInputsx.h
r22828 r23311 9 9 /* local prototypes: */ 10 10 void GetVectorFromControlInputsx( Vector<IssmDouble>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters,const char* data="value"); 11 void GetVectorFromControlInputsx( IssmDouble** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters,const char* data="value");11 void GetVectorFromControlInputsx( IssmDouble** pvector,int* pN, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters,const char* data="value"); 12 12 13 void GetPassiveVectorFromControlInputsx(Vector<double>** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters,const char* data="value"); 14 void GetPassiveVectorFromControlInputsx(double** pvector, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters,const char* data="value"); 13 void GetPassiveVectorFromControlInputsx(double** pvector,int* pN, Elements* elements,Nodes* nodes, Vertices* vertices,Loads* loads, Materials* materials, Parameters* parameters,const char* data="value"); 15 14 16 15 #endif /* _GETVECTORFROMCONTROLINPUTSXX_H */
Note:
See TracChangeset
for help on using the changeset viewer.