Changeset 17905
- Timestamp:
- 05/01/14 10:17:42 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp
r17902 r17905 35 35 IssmDouble *X = NULL; 36 36 IssmDouble *G = NULL; 37 IssmDouble *XL = NULL;38 IssmDouble *XU = NULL;39 37 40 38 /*Recover some parameters*/ … … 139 137 femmodel->parameters->FindParam(&responses,&num_responses,InversionCostFunctionsEnum); 140 138 139 /*Constrain input vector*/ 140 IssmDouble *XL = NULL; 141 IssmDouble *XU = NULL; 142 GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 143 GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 144 for(long i=0;i<*n;i++){ 145 if(X[i]>XU[i]) X[i]=XU[i]; 146 if(X[i]<XL[i]) X[i]=XL[i]; 147 } 148 141 149 /*Update control input*/ 142 150 SetControlInputsFromVectorx(femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,X); … … 162 170 _printf0_("\n"); 163 171 164 if(indic==0) return; /*dry run, no gradient required*/ 172 if(indic==0){ 173 /*dry run, no gradient required*/ 174 xDelete<int>(responses); 175 xDelete<IssmDouble>(XU); 176 xDelete<IssmDouble>(XL); 177 return; 178 } 165 179 166 180 /*Compute Adjoint*/ … … 172 186 Gradjx(&G2,NULL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters); 173 187 for(long i=0;i<*n;i++) G[i] = -G2[i]; 188 xDelete<IssmDouble>(G2); 189 190 /*Constrain Gradient*/ 191 for(long i=0;i<*n;i++){ 192 if(X[i]>=XU[i]) G[i]=0.; 193 if(X[i]<=XL[i]) G[i]=0.; 194 } 174 195 175 196 /*Clean-up and return*/ 176 197 xDelete<int>(responses); 177 xDelete<IssmDouble>(G2); 198 xDelete<IssmDouble>(XU); 199 xDelete<IssmDouble>(XL); 178 200 } 179 201
Note:
See TracChangeset
for help on using the changeset viewer.