Changeset 18617
- Timestamp:
- 10/10/14 15:05:23 (10 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/cores/controlvalidation_core.cpp ¶
r18604 r18617 15 15 IssmDouble j0,j,yts; 16 16 IssmDouble Ialpha,exponent,alpha; 17 IssmDouble* scaling_factors = NULL; 17 18 IssmDouble* jlist = NULL; 18 19 IssmDouble *G = NULL; … … 29 30 femmodel->parameters->FindParam(&num_responses,InversionNumCostFunctionsEnum); 30 31 femmodel->parameters->FindParam(&yts,ConstantsYtsEnum); 32 femmodel->parameters->FindParam(&scaling_factors,NULL,InversionControlScalingFactorsEnum); 31 33 32 34 /*Get initial guess*/ … … 51 53 if(VerboseControl()) _printf0_(" Compute Initial cost function\n"); 52 54 femmodel->CostFunctionx(&j0,&jlist,NULL); 53 _printf0_("Initial J(x+dk) | List of contributions\n"); 54 _printf0_("_____________________________________________\n"); 55 _printf0_("J(x) = "<<setw(12)<<setprecision(7)<<j0<<" | "); 56 for(int i=0;i<num_responses;i++) _printf0_(" "<<setw(12)<<setprecision(7)<<jlist[i]); 57 _printf0_("\n"); 55 _printf0_("Initial cost function J(x) = "<<setw(12)<<setprecision(7)<<j0<<"\n"); 58 56 xDelete<IssmDouble>(jlist); 59 57 … … 62 60 for(int i=0;i<n;i++) G[i] = -G[i]; 63 61 64 /*Range of tests*/65 IssmDouble exp0 = 0.;66 IssmDouble incr = -0.2;67 IssmDouble exp1 = -18.;68 int num = reCast<int,IssmDouble>((exp1-exp0)/incr);69 70 62 /*Allocate output*/ 63 int num = 26; 71 64 IssmDouble* output = xNew<IssmDouble>(2*num); 72 65 … … 76 69 for(int m=0;m<num;m++){ 77 70 78 /*Calculate alpha = 10^-exponent*/79 exponent = exp0+m*incr;80 alpha = pow(10.,exponent);81 82 71 /*Create new vector*/ 72 alpha = pow(2.,-m); 83 73 for(int i=0;i<n;i++) X[i] = X0[i] + alpha; 84 74 … … 89 79 90 80 IssmDouble Den = 0.; 91 for(int i=0;i<n;i++) Den += alpha* G[i] * 1.;81 for(int i=0;i<n;i++) Den += alpha* G[i] * scaling_factors[0]; 92 82 Ialpha = fabs((j - j0)/Den - 1.); 93 83 -
TabularUnified issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp ¶
r18616 r18617 78 78 break; 79 79 case 3:/*Validation*/ 80 iomodel->FetchData(&control_scaling_factors,NULL,NULL,InversionControlScalingFactorsEnum); 81 parameters->AddObject(new DoubleVecParam(InversionControlScalingFactorsEnum,control_scaling_factors,num_controls)); 80 82 break; 81 83 default: -
TabularUnified issm/trunk-jpl/src/m/classes/inversionvalidation.m ¶
r18605 r18617 9 9 incomplete_adjoint = 0 10 10 control_parameters = NaN 11 control_scaling_factors = NaN 11 12 cost_functions = NaN 12 13 cost_functions_coefficients = NaN … … 40 41 self.control_parameters={'FrictionCoefficient'}; 41 42 43 %Scaling factor for each control 44 self.control_scaling_factors=1; 45 42 46 %several responses can be used: 43 47 self.cost_functions=101; … … 56 60 {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'DamageDbar' 'Vx' 'Vy' 'Thickness',... 57 61 'BalancethicknessOmega' 'BalancethicknessApparentMassbalance'}); 62 md = checkfield(md,'fieldname','inversion.control_scaling_factors','size',[1 num_controls],'>',0,'NaN',1); 58 63 md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506 601:604]); 59 64 md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0); … … 77 82 fielddisplay(obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'); 78 83 fielddisplay(obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 84 fielddisplay(obj,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)'); 79 85 fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step'); 80 86 fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); … … 105 111 if ~obj.iscontrol, return; end 106 112 WriteData(fid,'object',obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean'); 113 WriteData(fid,'object',obj,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3); 107 114 WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 108 115 WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
Note:
See TracChangeset
for help on using the changeset viewer.