Changeset 18616
- Timestamp:
- 10/10/14 14:51:26 (10 years ago)
- Location:
- issm/trunk-jpl/src/c
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp ¶
r18571 r18616 33 33 int maxsteps,maxiter; 34 34 int intn,num_controls,solution_type; 35 IssmDouble *scaling_factors = NULL; 35 36 IssmDouble *X = NULL; 36 37 IssmDouble *G = NULL; … … 43 44 femmodel->parameters->FindParam(&dxmin,InversionDxminEnum); 44 45 femmodel->parameters->FindParam(>tol,InversionGttolEnum); 46 femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum); 45 47 femmodel->parameters->SetParam(false,SaveResultsEnum); 46 48 … … 74 76 G = xNew<double>(n); 75 77 78 /*Scale control for M1QN3*/ 79 if(num_controls!=1) _error_("not supported yet..."); 80 for(long i=0;i<n;i++){ 81 X[i] = X[i]/scaling_factors[0]; 82 } 83 76 84 /*Allocate m1qn3 working arrays (see doc)*/ 77 85 long m = 100; … … 132 140 133 141 /*Recover number of cost functions responses*/ 134 int num_responses; 142 int num_responses; 143 int num_controls; 144 IssmDouble* scaling_factors = NULL; 135 145 femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum); 146 femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum); 147 femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum); 136 148 137 149 /*Constrain input vector*/ … … 140 152 GetVectorFromControlInputsx(&XL,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"lowerbound"); 141 153 GetVectorFromControlInputsx(&XU,femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"upperbound"); 154 if(num_controls!=1) _error_("not supported yet"); 142 155 for(long i=0;i<*n;i++){ 156 X[i] = X[i]*scaling_factors[0]; 143 157 if(X[i]>XU[i]) X[i]=XU[i]; 144 158 if(X[i]<XL[i]) X[i]=XL[i]; … … 162 176 _printf0_("f(x) = "<<setw(12)<<setprecision(7)<<*pf<<" | "); 163 177 164 165 166 178 if(indic==0){ 167 179 /*dry run, no gradient required*/ … … 190 202 /*Constrain Gradient*/ 191 203 IssmDouble Gnorm = 0.; 204 if(num_controls!=1) _error_("not supported yet"); 192 205 for(long i=0;i<*n;i++){ 193 206 if(X[i]>=XU[i]) G[i]=0.; 194 207 if(X[i]<=XL[i]) G[i]=0.; 208 G[i] = G[i]*scaling_factors[0]; 209 X[i] = X[i]/scaling_factors[0]; 195 210 Gnorm += G[i]*G[i]; 196 211 } … … 203 218 204 219 /*Clean-up and return*/ 205 220 xDelete<IssmDouble>(Jlist); 206 221 xDelete<IssmDouble>(XU); 207 222 xDelete<IssmDouble>(XL); -
TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp ¶
r18128 r18616 13 13 int inversiontype; 14 14 int nsteps; 15 int num_control _type;16 int num_c m_responses;15 int num_controls; 16 int num_costfunc; 17 17 int *control_type = NULL; 18 18 int *maxiter = NULL; … … 20 20 IssmDouble *cm_jump = NULL; 21 21 IssmDouble *optscal = NULL; 22 IssmDouble *control_scaling_factors = NULL; 22 23 23 24 /*retrieve some parameters: */ … … 41 42 42 43 /*Now, recover fit, optscal and maxiter as vectors: */ 43 iomodel->FetchData(&control_type,NULL,&num_control _type,InversionControlParametersEnum);44 iomodel->FetchData(&cm_responses,NULL,&num_c m_responses,InversionCostFunctionsEnum);45 parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_control _type));46 parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_c m_responses));44 iomodel->FetchData(&control_type,NULL,&num_controls,InversionControlParametersEnum); 45 iomodel->FetchData(&cm_responses,NULL,&num_costfunc,InversionCostFunctionsEnum); 46 parameters->AddObject(new IntVecParam(InversionControlParametersEnum,control_type,num_controls)); 47 parameters->AddObject(new IntVecParam(InversionCostFunctionsEnum,cm_responses,num_costfunc)); 47 48 48 49 /*Inversion type specifics*/ … … 54 55 iomodel->FetchData(&optscal,NULL,NULL,InversionGradientScalingEnum); 55 56 iomodel->FetchData(&maxiter,NULL,NULL,InversionMaxiterPerStepEnum); 56 parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_control _type));57 parameters->AddObject(new DoubleMatParam(InversionGradientScalingEnum,optscal,nsteps,num_controls)); 57 58 parameters->AddObject(new DoubleVecParam(InversionStepThresholdEnum,cm_jump,nsteps)); 58 59 parameters->AddObject(new IntVecParam(InversionMaxiterPerStepEnum,maxiter,nsteps)); … … 73 74 parameters->AddObject(iomodel->CopyConstantObject(InversionMaxstepsEnum)); 74 75 parameters->AddObject(iomodel->CopyConstantObject(InversionMaxiterEnum)); 76 iomodel->FetchData(&control_scaling_factors,NULL,NULL,InversionControlScalingFactorsEnum); 77 parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_controls)); 75 78 break; 76 79 case 3:/*Validation*/
Note:
See TracChangeset
for help on using the changeset viewer.