Changeset 17918
- Timestamp:
- 05/02/14 09:43:20 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 2 added
- 3 deleted
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/cores/controlm1qn3_core.cpp
r17911 r17918 30 30 /*Intermediaries*/ 31 31 long omode; 32 double f,dxmin, epsrel;33 int nsteps,maxiter;32 double f,dxmin,gttol; 33 int maxsteps,maxiter; 34 34 int intn,num_controls,solution_type; 35 35 IssmDouble *X = NULL; … … 39 39 femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum); 40 40 femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum); 41 femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum); 41 femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum); 42 femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum); 42 43 femmodel->parameters->FindParam(&dxmin,InversionDxminEnum); 43 femmodel->parameters->FindParam(& epsrel,InversionEpsrelEnum);44 femmodel->parameters->FindParam(>tol,InversionGttolEnum); 44 45 femmodel->parameters->SetParam(false,SaveResultsEnum); 45 maxiter=nsteps*10;46 46 47 47 /*Initialize M1QN3 parameters*/ … … 60 60 61 61 /*Optimization criterions*/ 62 long niter = long( nsteps); /*Maximum number of iterations*/62 long niter = long(maxsteps); /*Maximum number of iterations*/ 63 63 long nsim = long(maxiter);/*Maximum number of function calls*/ 64 64 … … 90 90 m1qn3_(costfuncion,prosca,&ctonbe_,&ctcabe_, 91 91 &n,X,&f,G,&dxmin,&f1, 92 & epsrel,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,92 >tol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz, 93 93 &reverse,&indic,izs,rzs,(void*)femmodel); 94 94 -
issm/trunk-jpl/src/c/cores/controltao_core.cpp
r17907 r17918 26 26 int ierr; 27 27 int num_controls,solution_type; 28 int nsteps,maxiter; 28 int maxsteps,maxiter; 29 IssmDouble fatol,frtol,gatol,grtol,gttol; 29 30 AppCtx user; 30 31 TaoSolver tao = 0; 31 32 int *control_list = NULL; 33 char *algorithm = NULL; 32 34 Vector<IssmDouble> *X = NULL; 33 35 Vector<IssmDouble> *G = NULL; … … 45 47 femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum); 46 48 femmodel->parameters->FindParam(&control_list,NULL,InversionControlParametersEnum); 47 femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum); 49 femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum); 50 femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum); 51 femmodel->parameters->FindParam(&fatol,InversionFatolEnum); 52 femmodel->parameters->FindParam(&frtol,InversionFrtolEnum); 53 femmodel->parameters->FindParam(&gatol,InversionGatolEnum); 54 femmodel->parameters->FindParam(&grtol,InversionGrtolEnum); 55 femmodel->parameters->FindParam(>tol,InversionGttolEnum); 56 femmodel->parameters->FindParam(&algorithm,InversionAlgorithmEnum); 48 57 femmodel->parameters->SetParam(false,SaveResultsEnum); 49 maxiter=nsteps*10;50 58 51 59 /*Prepare Toolkit*/ … … 56 64 if(VerboseControl()) _printf0_(" Initializing the Toolkit for Advanced Optimization (TAO)\n"); 57 65 TaoSetFromOptions(tao); 58 TaoSetType(tao,"tao_blmvm"); 59 //TaoSetType(tao,"tao_cg"); 60 //TaoSetType(tao,"tao_lmvm"); 66 TaoSetType(tao,algorithm); 61 67 62 68 /*Prepare all TAO parameters*/ 63 69 TaoSetMonitor(tao,IssmMonitor,&user,NULL); 64 70 TaoSetMaximumFunctionEvaluations(tao,maxiter); 65 TaoSetMaximumIterations(tao, nsteps);66 TaoSetTolerances(tao, 0.,0.,0.,0.,0.);71 TaoSetMaximumIterations(tao,maxsteps); 72 TaoSetTolerances(tao,fatol,frtol,gatol,grtol,gttol); 67 73 68 74 GetVectorFromControlInputsx(&X, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value"); … … 101 107 /*Clean up and return*/ 102 108 xDelete<int>(control_list); 109 xDelete<char>(algorithm); 103 110 xDelete<double>(user.J); 104 111 delete X; -
issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp
r17911 r17918 30 30 parameters->AddObject(iomodel->CopyConstantObject(InversionNumControlParametersEnum)); 31 31 parameters->AddObject(iomodel->CopyConstantObject(InversionNumCostFunctionsEnum)); 32 parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum));33 32 parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum)); 34 33 … … 50 49 switch(inversiontype){ 51 50 case 0:/*Brent Search*/ 51 parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum)); 52 52 parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum)); 53 53 iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum); … … 59 59 break; 60 60 case 1:/*TAO*/ 61 parameters->AddObject(iomodel->CopyConstantObject(InversionFatolEnum)); 62 parameters->AddObject(iomodel->CopyConstantObject(InversionFrtolEnum)); 63 parameters->AddObject(iomodel->CopyConstantObject(InversionGatolEnum)); 64 parameters->AddObject(iomodel->CopyConstantObject(InversionGrtolEnum)); 65 parameters->AddObject(iomodel->CopyConstantObject(InversionGttolEnum)); 66 parameters->AddObject(iomodel->CopyConstantObject(InversionMaxstepsEnum)); 67 parameters->AddObject(iomodel->CopyConstantObject(InversionMaxiterEnum)); 68 parameters->AddObject(iomodel->CopyConstantObject(InversionAlgorithmEnum)); 61 69 break; 62 70 case 2:/*M1QN3*/ 63 71 parameters->AddObject(iomodel->CopyConstantObject(InversionDxminEnum)); 64 parameters->AddObject(iomodel->CopyConstantObject(InversionEpsrelEnum)); 72 parameters->AddObject(iomodel->CopyConstantObject(InversionGttolEnum)); 73 parameters->AddObject(iomodel->CopyConstantObject(InversionMaxstepsEnum)); 74 parameters->AddObject(iomodel->CopyConstantObject(InversionMaxiterEnum)); 65 75 break; 66 76 default: -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r17914 r17918 142 142 InversionMaxstepsEnum, 143 143 InversionFatolEnum, 144 InversionF gtolEnum,144 InversionFrtolEnum, 145 145 InversionGatolEnum, 146 InversionG gtolEnum,146 InversionGrtolEnum, 147 147 InversionGttolEnum, 148 148 InversionAlgorithmEnum, … … 150 150 InversionNstepsEnum, 151 151 InversionDxminEnum, 152 InversionEpsrelEnum,153 152 InversionNumControlParametersEnum, 154 153 InversionNumCostFunctionsEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r17914 r17918 150 150 case InversionMaxstepsEnum : return "InversionMaxsteps"; 151 151 case InversionFatolEnum : return "InversionFatol"; 152 case InversionF gtolEnum : return "InversionFgtol";152 case InversionFrtolEnum : return "InversionFrtol"; 153 153 case InversionGatolEnum : return "InversionGatol"; 154 case InversionG gtolEnum : return "InversionGgtol";154 case InversionGrtolEnum : return "InversionGrtol"; 155 155 case InversionGttolEnum : return "InversionGttol"; 156 156 case InversionAlgorithmEnum : return "InversionAlgorithm"; … … 158 158 case InversionNstepsEnum : return "InversionNsteps"; 159 159 case InversionDxminEnum : return "InversionDxmin"; 160 case InversionEpsrelEnum : return "InversionEpsrel";161 160 case InversionNumControlParametersEnum : return "InversionNumControlParameters"; 162 161 case InversionNumCostFunctionsEnum : return "InversionNumCostFunctions"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r17914 r17918 153 153 else if (strcmp(name,"InversionMaxsteps")==0) return InversionMaxstepsEnum; 154 154 else if (strcmp(name,"InversionFatol")==0) return InversionFatolEnum; 155 else if (strcmp(name,"InversionF gtol")==0) return InversionFgtolEnum;155 else if (strcmp(name,"InversionFrtol")==0) return InversionFrtolEnum; 156 156 else if (strcmp(name,"InversionGatol")==0) return InversionGatolEnum; 157 else if (strcmp(name,"InversionG gtol")==0) return InversionGgtolEnum;157 else if (strcmp(name,"InversionGrtol")==0) return InversionGrtolEnum; 158 158 else if (strcmp(name,"InversionGttol")==0) return InversionGttolEnum; 159 159 else if (strcmp(name,"InversionAlgorithm")==0) return InversionAlgorithmEnum; … … 161 161 else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum; 162 162 else if (strcmp(name,"InversionDxmin")==0) return InversionDxminEnum; 163 else if (strcmp(name,"InversionEpsrel")==0) return InversionEpsrelEnum;164 163 else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum; 165 164 else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum; … … 260 259 else if (strcmp(name,"RiftsRiftstruct")==0) return RiftsRiftstructEnum; 261 260 else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum; 261 else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 262 262 else stage=3; 263 263 } 264 264 if(stage==3){ 265 if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum; 266 else if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum; 265 if (strcmp(name,"SettingsLowmem")==0) return SettingsLowmemEnum; 267 266 else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum; 268 267 else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum; … … 383 382 else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum; 384 383 else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum; 384 else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum; 385 385 else stage=4; 386 386 } 387 387 if(stage==4){ 388 if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum; 389 else if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum; 388 if (strcmp(name,"MeshdeformationSolution")==0) return MeshdeformationSolutionEnum; 390 389 else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum; 391 390 else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum; … … 506 505 else if (strcmp(name,"QmuVyMesh")==0) return QmuVyMeshEnum; 507 506 else if (strcmp(name,"QmuVzMesh")==0) return QmuVzMeshEnum; 507 else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum; 508 508 else stage=5; 509 509 } 510 510 if(stage==5){ 511 if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum; 512 else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum; 511 if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum; 513 512 else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum; 514 513 else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum; … … 629 628 else if (strcmp(name,"MinVy")==0) return MinVyEnum; 630 629 else if (strcmp(name,"MaxVy")==0) return MaxVyEnum; 630 else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum; 631 631 else stage=6; 632 632 } 633 633 if(stage==6){ 634 if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum; 635 else if (strcmp(name,"MinVz")==0) return MinVzEnum; 634 if (strcmp(name,"MinVz")==0) return MinVzEnum; 636 635 else if (strcmp(name,"MaxVz")==0) return MaxVzEnum; 637 636 else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum; -
issm/trunk-jpl/src/m/classes/m1qn3inversion.m
r17909 r17918 9 9 incomplete_adjoint = 0 10 10 control_parameters = NaN 11 nsteps = 0 11 maxsteps = 0 12 maxiter = 0 12 13 dxmin = 0; 13 epsrel= 0;14 gttol = 0; 14 15 cost_functions = NaN 15 16 cost_functions_coefficients = NaN … … 43 44 self.control_parameters={'FrictionCoefficient'}; 44 45 45 %number of steps in the control methods 46 self.nsteps=20; 46 %number of iterations 47 self.maxsteps=20; 48 self.maxiter=40; 47 49 48 50 %several responses can be used: 49 self.cost_functions=101 *ones(self.nsteps,1);51 self.cost_functions=101; 50 52 51 53 %m1qn3 parameters 52 54 self.dxmin = 0.1; 53 self. epsrel = 1e-4;55 self.gttol = 1e-4; 54 56 55 57 end % }}} … … 70 72 md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',... 71 73 {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'}); 72 md = checkfield(md,'fieldname','inversion.nsteps','numel',1,'>=',0); 74 md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0); 75 md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0); 73 76 md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0); 74 md = checkfield(md,'fieldname','inversion. epsrel','numel',1,'>',0);77 md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>',0); 75 78 md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]); 76 79 md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0); … … 92 95 fielddisplay(obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'); 93 96 fielddisplay(obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 94 fielddisplay(obj,'nsteps','number of optimization searches'); 97 fielddisplay(obj,'maxsteps','maximum number of iterations (gradient computation)'); 98 fielddisplay(obj,'maxiter','maximum number of Function evaluation (forward run)'); 95 99 fielddisplay(obj,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical'); 96 fielddisplay(obj,' epsrel','convergence criterion: ratio between current gradient and initial gradient');100 fielddisplay(obj,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)'); 97 101 fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step'); 98 102 fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); … … 122 126 if ~obj.iscontrol, return; end 123 127 WriteData(fid,'object',obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean'); 124 WriteData(fid,'object',obj,'class','inversion','fieldname','nsteps','format','Integer'); 128 WriteData(fid,'object',obj,'class','inversion','fieldname','maxsteps','format','Integer'); 129 WriteData(fid,'object',obj,'class','inversion','fieldname','maxiter','format','Integer'); 125 130 WriteData(fid,'object',obj,'class','inversion','fieldname','dxmin','format','Double'); 126 WriteData(fid,'object',obj,'class','inversion','fieldname',' epsrel','format','Double');131 WriteData(fid,'object',obj,'class','inversion','fieldname','gttol','format','Double'); 127 132 WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 128 133 WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3); -
issm/trunk-jpl/src/m/classes/m1qn3inversion.py
r17913 r17918 22 22 self.incomplete_adjoint = 0 23 23 self.control_parameters = float('NaN') 24 self.nsteps = 0 24 self.maxsteps = 0 25 self.maxiter = 0 25 26 self.dxmin = 0. 26 self. epsrel= 0.27 self.gttol = 0. 27 28 self.cost_functions = float('NaN') 28 29 self.cost_functions_coefficients = float('NaN') … … 43 44 self.incomplete_adjoint = inv.incomplete_adjoint 44 45 self.control_parameters = inv.control_parameters 45 self. nsteps= inv.nsteps46 self.maxsteps = inv.nsteps 46 47 self.cost_functions = inv.cost_functions 47 48 self.cost_functions_coefficients = inv.cost_functions_coefficients … … 61 62 string="%s\n%s"%(string,fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity')) 62 63 string="%s\n%s"%(string,fielddisplay(self,'control_parameters','ex: [''FrictionCoefficient''], or [''MaterialsRheologyBbar'']')) 63 string="%s\n%s"%(string,fielddisplay(self,'nsteps','number of optimization searches')) 64 string="%s\n%s"%(string,fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)')) 65 string="%s\n%s"%(string,fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)')) 64 66 string="%s\n%s"%(string,fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical')) 65 string="%s\n%s"%(string,fielddisplay(self,' epsrel','convergence criterion: ratio between current gradient and initial gradient'))67 string="%s\n%s"%(string,fielddisplay(self,'gttol','||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)')) 66 68 string="%s\n%s"%(string,fielddisplay(self,'cost_functions','indicate the type of response for each optimization step')) 67 69 string="%s\n%s"%(string,fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter')) … … 93 95 self.control_parameters='FrictionCoefficient' 94 96 95 #number of steps in the control methods 96 self.nsteps=20 97 #number of iterations 98 self.maxsteps=20 99 self.maxiter=40 97 100 98 101 #several responses can be used: … … 101 104 #m1qn3 parameters 102 105 self.dxmin = 0.1 103 self. epsrel = 1e-4106 self.gttol = 1e-4 104 107 105 108 return self … … 117 120 md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1]) 118 121 md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy','Thickness']) 119 md = checkfield(md,'fieldname','inversion.nsteps','numel',[1],'>=',0) 122 md = checkfield(md,'fieldname','inversion.maxsteps','numel',[1],'>=',0) 123 md = checkfield(md,'fieldname','inversion.maxiter','numel',[1],'>=',0) 120 124 md = checkfield(md,'fieldname','inversion.dxmin','numel',[1],'>',0.) 121 md = checkfield(md,'fieldname','inversion. epsrel','numel',[1],'>',0.)125 md = checkfield(md,'fieldname','inversion.gttol','numel',[1],'>',0.) 122 126 md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505]) 123 127 md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0) … … 142 146 return 143 147 WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean') 144 WriteData(fid,'object',self,'class','inversion','fieldname','nsteps','format','Integer') 148 WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer') 149 WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer') 145 150 WriteData(fid,'object',self,'class','inversion','fieldname','dxmin','format','Double') 146 WriteData(fid,'object',self,'class','inversion','fieldname',' epsrel','format','Double')151 WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double') 147 152 WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1) 148 153 WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3) -
issm/trunk-jpl/src/m/classes/taoinversion.m
r17904 r17918 9 9 incomplete_adjoint = 0 10 10 control_parameters = NaN 11 nsteps = 0 11 maxsteps = 0 12 maxiter = 0 13 fatol = 0 14 frtol = 0 15 gatol = 0 16 grtol = 0 17 gttol = 0 18 algorithm = '' 12 19 cost_functions = NaN 13 20 cost_functions_coefficients = NaN … … 26 33 obj=setdefaultparameters(obj); 27 34 case 1 28 if isa(varargin{1},'inversion'), 29 disp('converting inversion to taoinversion'); 30 in=varargin{1}; 31 obj.iscontrol = in.iscontrol; 32 obj.incomplete_adjoint = in.incomplete_adjoint; 33 obj.control_parameters = in.control_parameters; 34 obj.nsteps = in.nsteps; 35 obj.cost_functions = in.cost_functions(1,:); %Keep first line only 36 obj.cost_functions_coefficients = in.cost_functions_coefficients; 37 obj.min_parameters = in.min_parameters; 38 obj.max_parameters = in.max_parameters; 39 obj.vx_obs = in.vx_obs; 40 obj.vy_obs = in.vy_obs; 41 obj.vz_obs = in.vz_obs; 42 obj.vel_obs = in.vel_obs; 43 obj.thickness_obs = in.thickness_obs; 44 end 35 obj=structtoobj(obj,varargin{1}); 45 36 otherwise 46 37 error('constructor not supported'); … … 56 47 obj.control_parameters={'FrictionCoefficient'}; 57 48 58 %number of steps in the control methods 59 obj.nsteps=20; 49 %number of iterations and steps 50 obj.maxsteps=20; 51 obj.maxiter =30; 52 53 %default tolerances 54 obj.fatol = 0; 55 obj.frtol = 0; 56 obj.gatol = 0; 57 obj.grtol = 0; 58 obj.gttol = 1e-4; 59 60 %minimization algorithm 61 obj.algorithm = 'tao_blmvm'; 60 62 61 63 %several responses can be used: 62 obj.cost_functions=101 *ones(obj.nsteps,1);64 obj.cost_functions=101; 63 65 64 66 end % }}} … … 79 81 md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',... 80 82 {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'}); 81 md = checkfield(md,'fieldname','inversion.nsteps','numel',1,'>=',0); 83 md = checkfield(md,'fieldname','inversion.maxsteps','numel',1,'>=',0); 84 md = checkfield(md,'fieldname','inversion.maxiter','numel',1,'>=',0); 85 md = checkfield(md,'fieldname','inversion.fatol','numel',1,'>=',0); 86 md = checkfield(md,'fieldname','inversion.frtol','numel',1,'>=',0); 87 md = checkfield(md,'fieldname','inversion.gatol','numel',1,'>=',0); 88 md = checkfield(md,'fieldname','inversion.grtol','numel',1,'>=',0); 89 md = checkfield(md,'fieldname','inversion.gttol','numel',1,'>=',0); 90 md = checkfield(md,'fieldname','inversion.algorithm','values',{'tao_blmvm','tao_cg','tao_lmvm'}); 82 91 md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]); 83 92 md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0); … … 99 108 fielddisplay(obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'); 100 109 fielddisplay(obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 101 fielddisplay(obj,'nsteps','number of optimization searches'); 110 fielddisplay(obj,'maxsteps','maximum number of iterations (gradient computation)'); 111 fielddisplay(obj,'maxiter','maximum number of Function evaluation (forward run)'); 112 fielddisplay(obj,'fatol','convergence criterion: f(X)-f(X*) (X: current iteration, X*: "true" solution, f: cost function)'); 113 fielddisplay(obj,'frtol','convergence criterion: |f(X)-f(X*)|/|f(X*)|'); 114 fielddisplay(obj,'gatol','convergence criterion: ||g(X)|| (g: gradient of the cost function)'); 115 fielddisplay(obj,'grtol','convergence criterion: ||g(X)||/|f(X)|'); 116 fielddisplay(obj,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)'); 117 fielddisplay(obj,'algorithm','minimization algorithm: ''tao_blmvm'', ''tao_cg'', ''tao_lmvm'''); 102 118 fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step'); 103 119 fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); … … 127 143 if ~obj.iscontrol, return; end 128 144 WriteData(fid,'object',obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean'); 129 WriteData(fid,'object',obj,'class','inversion','fieldname','nsteps','format','Integer'); 145 WriteData(fid,'object',obj,'class','inversion','fieldname','maxsteps','format','Integer'); 146 WriteData(fid,'object',obj,'class','inversion','fieldname','maxiter','format','Integer'); 147 WriteData(fid,'object',obj,'class','inversion','fieldname','fatol','format','Double'); 148 WriteData(fid,'object',obj,'class','inversion','fieldname','frtol','format','Double'); 149 WriteData(fid,'object',obj,'class','inversion','fieldname','gatol','format','Double'); 150 WriteData(fid,'object',obj,'class','inversion','fieldname','grtol','format','Double'); 151 WriteData(fid,'object',obj,'class','inversion','fieldname','gttol','format','Double'); 152 WriteData(fid,'object',obj,'class','inversion','fieldname','algorithm','format','String'); 130 153 WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 131 154 WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3); -
issm/trunk-jpl/src/m/enum/EnumDefinitions.py
r17914 r17918 142 142 def InversionMaxstepsEnum(): return StringToEnum("InversionMaxsteps")[0] 143 143 def InversionFatolEnum(): return StringToEnum("InversionFatol")[0] 144 def InversionF gtolEnum(): return StringToEnum("InversionFgtol")[0]144 def InversionFrtolEnum(): return StringToEnum("InversionFrtol")[0] 145 145 def InversionGatolEnum(): return StringToEnum("InversionGatol")[0] 146 def InversionG gtolEnum(): return StringToEnum("InversionGgtol")[0]146 def InversionGrtolEnum(): return StringToEnum("InversionGrtol")[0] 147 147 def InversionGttolEnum(): return StringToEnum("InversionGttol")[0] 148 148 def InversionAlgorithmEnum(): return StringToEnum("InversionAlgorithm")[0] … … 150 150 def InversionNstepsEnum(): return StringToEnum("InversionNsteps")[0] 151 151 def InversionDxminEnum(): return StringToEnum("InversionDxmin")[0] 152 def InversionEpsrelEnum(): return StringToEnum("InversionEpsrel")[0]153 152 def InversionNumControlParametersEnum(): return StringToEnum("InversionNumControlParameters")[0] 154 153 def InversionNumCostFunctionsEnum(): return StringToEnum("InversionNumCostFunctions")[0]
Note:
See TracChangeset
for help on using the changeset viewer.