Changeset 17918


Ignore:
Timestamp:
05/02/14 09:43:20 (11 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added some options to TAO and M1QN3 inversions

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  
    3030        /*Intermediaries*/
    3131        long         omode;
    32         double       f,dxmin,epsrel;
    33         int          nsteps,maxiter;
     32        double       f,dxmin,gttol;
     33        int          maxsteps,maxiter;
    3434        int          intn,num_controls,solution_type;
    3535        IssmDouble  *X  = NULL;
     
    3939        femmodel->parameters->FindParam(&solution_type,SolutionTypeEnum);
    4040        femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
    41         femmodel->parameters->FindParam(&nsteps,InversionNstepsEnum);
     41        femmodel->parameters->FindParam(&maxsteps,InversionMaxstepsEnum);
     42        femmodel->parameters->FindParam(&maxiter,InversionMaxiterEnum);
    4243        femmodel->parameters->FindParam(&dxmin,InversionDxminEnum);
    43         femmodel->parameters->FindParam(&epsrel,InversionEpsrelEnum);
     44        femmodel->parameters->FindParam(&gttol,InversionGttolEnum);
    4445        femmodel->parameters->SetParam(false,SaveResultsEnum);
    45         maxiter=nsteps*10;
    4646
    4747        /*Initialize M1QN3 parameters*/
     
    6060
    6161        /*Optimization criterions*/
    62         long      niter        = long(nsteps); /*Maximum number of iterations*/
     62        long      niter        = long(maxsteps); /*Maximum number of iterations*/
    6363        long      nsim         = long(maxiter);/*Maximum number of function calls*/
    6464
     
    9090        m1qn3_(costfuncion,prosca,&ctonbe_,&ctcabe_,
    9191                                &n,X,&f,G,&dxmin,&f1,
    92                                 &epsrel,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
     92                                &gttol,normtype,&impres,&io,imode,&omode,&niter,&nsim,iz,dz,&ndz,
    9393                                &reverse,&indic,izs,rzs,(void*)femmodel);
    9494
  • issm/trunk-jpl/src/c/cores/controltao_core.cpp

    r17907 r17918  
    2626        int                 ierr;
    2727        int                 num_controls,solution_type;
    28         int                 nsteps,maxiter;
     28        int                 maxsteps,maxiter;
     29        IssmDouble          fatol,frtol,gatol,grtol,gttol;
    2930        AppCtx              user;
    3031        TaoSolver           tao = 0;
    3132        int                *control_list = NULL;
     33        char               *algorithm    = NULL;
    3234        Vector<IssmDouble> *X            = NULL;
    3335        Vector<IssmDouble> *G            = NULL;
     
    4547        femmodel->parameters->FindParam(&num_controls,InversionNumControlParametersEnum);
    4648        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(&gttol,InversionGttolEnum);
     56        femmodel->parameters->FindParam(&algorithm,InversionAlgorithmEnum);
    4857        femmodel->parameters->SetParam(false,SaveResultsEnum);
    49         maxiter=nsteps*10;
    5058
    5159        /*Prepare Toolkit*/
     
    5664        if(VerboseControl()) _printf0_("   Initializing the Toolkit for Advanced Optimization (TAO)\n");
    5765        TaoSetFromOptions(tao);
    58         TaoSetType(tao,"tao_blmvm");
    59         //TaoSetType(tao,"tao_cg");
    60         //TaoSetType(tao,"tao_lmvm");
     66        TaoSetType(tao,algorithm);
    6167
    6268        /*Prepare all TAO parameters*/
    6369        TaoSetMonitor(tao,IssmMonitor,&user,NULL);
    6470        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);
    6773
    6874        GetVectorFromControlInputsx(&X, femmodel->elements,femmodel->nodes,femmodel->vertices,femmodel->loads,femmodel->materials,femmodel->parameters,"value");
     
    101107        /*Clean up and return*/
    102108        xDelete<int>(control_list);
     109        xDelete<char>(algorithm);
    103110        xDelete<double>(user.J);
    104111        delete X;
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/Control/CreateParametersControl.cpp

    r17911 r17918  
    3030                parameters->AddObject(iomodel->CopyConstantObject(InversionNumControlParametersEnum));
    3131                parameters->AddObject(iomodel->CopyConstantObject(InversionNumCostFunctionsEnum));
    32                 parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum));
    3332                parameters->AddObject(iomodel->CopyConstantObject(InversionIncompleteAdjointEnum));
    3433
     
    5049                switch(inversiontype){
    5150                        case 0:/*Brent Search*/
     51                                parameters->AddObject(iomodel->CopyConstantObject(InversionNstepsEnum));
    5252                                parameters->AddObject(iomodel->CopyConstantObject(InversionCostFunctionThresholdEnum));
    5353                                iomodel->FetchData(&cm_jump,&nsteps,NULL,InversionStepThresholdEnum);
     
    5959                                break;
    6060                        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));
    6169                                break;
    6270                        case 2:/*M1QN3*/
    6371                                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));
    6575                                break;
    6676                        default:
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r17914 r17918  
    142142        InversionMaxstepsEnum,
    143143        InversionFatolEnum,
    144         InversionFgtolEnum,
     144        InversionFrtolEnum,
    145145        InversionGatolEnum,
    146         InversionGgtolEnum,
     146        InversionGrtolEnum,
    147147        InversionGttolEnum,
    148148        InversionAlgorithmEnum,
     
    150150        InversionNstepsEnum,
    151151        InversionDxminEnum,
    152         InversionEpsrelEnum,
    153152        InversionNumControlParametersEnum,
    154153        InversionNumCostFunctionsEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r17914 r17918  
    150150                case InversionMaxstepsEnum : return "InversionMaxsteps";
    151151                case InversionFatolEnum : return "InversionFatol";
    152                 case InversionFgtolEnum : return "InversionFgtol";
     152                case InversionFrtolEnum : return "InversionFrtol";
    153153                case InversionGatolEnum : return "InversionGatol";
    154                 case InversionGgtolEnum : return "InversionGgtol";
     154                case InversionGrtolEnum : return "InversionGrtol";
    155155                case InversionGttolEnum : return "InversionGttol";
    156156                case InversionAlgorithmEnum : return "InversionAlgorithm";
     
    158158                case InversionNstepsEnum : return "InversionNsteps";
    159159                case InversionDxminEnum : return "InversionDxmin";
    160                 case InversionEpsrelEnum : return "InversionEpsrel";
    161160                case InversionNumControlParametersEnum : return "InversionNumControlParameters";
    162161                case InversionNumCostFunctionsEnum : return "InversionNumCostFunctions";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r17914 r17918  
    153153              else if (strcmp(name,"InversionMaxsteps")==0) return InversionMaxstepsEnum;
    154154              else if (strcmp(name,"InversionFatol")==0) return InversionFatolEnum;
    155               else if (strcmp(name,"InversionFgtol")==0) return InversionFgtolEnum;
     155              else if (strcmp(name,"InversionFrtol")==0) return InversionFrtolEnum;
    156156              else if (strcmp(name,"InversionGatol")==0) return InversionGatolEnum;
    157               else if (strcmp(name,"InversionGgtol")==0) return InversionGgtolEnum;
     157              else if (strcmp(name,"InversionGrtol")==0) return InversionGrtolEnum;
    158158              else if (strcmp(name,"InversionGttol")==0) return InversionGttolEnum;
    159159              else if (strcmp(name,"InversionAlgorithm")==0) return InversionAlgorithmEnum;
     
    161161              else if (strcmp(name,"InversionNsteps")==0) return InversionNstepsEnum;
    162162              else if (strcmp(name,"InversionDxmin")==0) return InversionDxminEnum;
    163               else if (strcmp(name,"InversionEpsrel")==0) return InversionEpsrelEnum;
    164163              else if (strcmp(name,"InversionNumControlParameters")==0) return InversionNumControlParametersEnum;
    165164              else if (strcmp(name,"InversionNumCostFunctions")==0) return InversionNumCostFunctionsEnum;
     
    260259              else if (strcmp(name,"RiftsRiftstruct")==0) return RiftsRiftstructEnum;
    261260              else if (strcmp(name,"SettingsResultsOnNodes")==0) return SettingsResultsOnNodesEnum;
     261              else if (strcmp(name,"SettingsIoGather")==0) return SettingsIoGatherEnum;
    262262         else stage=3;
    263263   }
    264264   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;
    267266              else if (strcmp(name,"SettingsOutputFrequency")==0) return SettingsOutputFrequencyEnum;
    268267              else if (strcmp(name,"SettingsWaitonlock")==0) return SettingsWaitonlockEnum;
     
    383382              else if (strcmp(name,"TransientSolution")==0) return TransientSolutionEnum;
    384383              else if (strcmp(name,"GiaSolution")==0) return GiaSolutionEnum;
     384              else if (strcmp(name,"GiaAnalysis")==0) return GiaAnalysisEnum;
    385385         else stage=4;
    386386   }
    387387   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;
    390389              else if (strcmp(name,"MeshdeformationAnalysis")==0) return MeshdeformationAnalysisEnum;
    391390              else if (strcmp(name,"LevelsetAnalysis")==0) return LevelsetAnalysisEnum;
     
    506505              else if (strcmp(name,"QmuVyMesh")==0) return QmuVyMeshEnum;
    507506              else if (strcmp(name,"QmuVzMesh")==0) return QmuVzMeshEnum;
     507              else if (strcmp(name,"AndroidFrictionCoefficient")==0) return AndroidFrictionCoefficientEnum;
    508508         else stage=5;
    509509   }
    510510   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;
    513512              else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
    514513              else if (strcmp(name,"SurfaceAbsVelMisfit")==0) return SurfaceAbsVelMisfitEnum;
     
    629628              else if (strcmp(name,"MinVy")==0) return MinVyEnum;
    630629              else if (strcmp(name,"MaxVy")==0) return MaxVyEnum;
     630              else if (strcmp(name,"MaxAbsVy")==0) return MaxAbsVyEnum;
    631631         else stage=6;
    632632   }
    633633   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;
    636635              else if (strcmp(name,"MaxVz")==0) return MaxVzEnum;
    637636              else if (strcmp(name,"MaxAbsVz")==0) return MaxAbsVzEnum;
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.m

    r17909 r17918  
    99                incomplete_adjoint          = 0
    1010                control_parameters          = NaN
    11                 nsteps                      = 0
     11                maxsteps                    = 0
     12                maxiter                     = 0
    1213                dxmin                       = 0;
    13                 epsrel                      = 0;
     14                gttol                       = 0;
    1415                cost_functions              = NaN
    1516                cost_functions_coefficients = NaN
     
    4344                        self.control_parameters={'FrictionCoefficient'};
    4445
    45                         %number of steps in the control methods
    46                         self.nsteps=20;
     46                        %number of iterations
     47                        self.maxsteps=20;
     48                        self.maxiter=40;
    4749
    4850                        %several responses can be used:
    49                         self.cost_functions=101*ones(self.nsteps,1);
     51                        self.cost_functions=101;
    5052
    5153                        %m1qn3 parameters
    5254                        self.dxmin  = 0.1;
    53                         self.epsrel = 1e-4;
     55                        self.gttol = 1e-4;
    5456
    5557                end % }}}
     
    7072                        md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
    7173                                {'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);
    7376                        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);
    7578                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
    7679                        md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
     
    9295                        fielddisplay(obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');
    9396                        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)');
    9599                        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)');
    97101                        fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step');
    98102                        fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
     
    122126                        if ~obj.iscontrol, return; end
    123127                        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');
    125130                        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');
    127132                        WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
    128133                        WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
  • issm/trunk-jpl/src/m/classes/m1qn3inversion.py

    r17913 r17918  
    2222                        self.incomplete_adjoint          = 0
    2323                        self.control_parameters          = float('NaN')
    24                         self.nsteps                      = 0
     24                        self.maxsteps                    = 0
     25                        self.maxiter                     = 0
    2526                        self.dxmin                       = 0.
    26                         self.epsrel                      = 0.
     27                        self.gttol                       = 0.
    2728                        self.cost_functions              = float('NaN')
    2829                        self.cost_functions_coefficients = float('NaN')
     
    4344                        self.incomplete_adjoint          = inv.incomplete_adjoint
    4445                        self.control_parameters          = inv.control_parameters
    45                         self.nsteps                      = inv.nsteps
     46                        self.maxsteps                    = inv.nsteps
    4647                        self.cost_functions              = inv.cost_functions
    4748                        self.cost_functions_coefficients = inv.cost_functions_coefficients
     
    6162                string="%s\n%s"%(string,fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'))
    6263                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)'))
    6466                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)'))
    6668                string="%s\n%s"%(string,fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'))
    6769                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'))
     
    9395                self.control_parameters='FrictionCoefficient'
    9496
    95                 #number of steps in the control methods
    96                 self.nsteps=20
     97                #number of iterations
     98                self.maxsteps=20
     99                self.maxiter=40
    97100
    98101                #several responses can be used:
     
    101104                #m1qn3 parameters
    102105                self.dxmin  = 0.1
    103                 self.epsrel = 1e-4
     106                self.gttol = 1e-4
    104107
    105108                return self
     
    117120                md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
    118121                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)
    120124                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.)
    122126                md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
    123127                md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
     
    142146                        return
    143147                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')
    145150                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')
    147152                WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
    148153                WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
  • issm/trunk-jpl/src/m/classes/taoinversion.m

    r17904 r17918  
    99                incomplete_adjoint          = 0
    1010                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                   = ''
    1219                cost_functions              = NaN
    1320                cost_functions_coefficients = NaN
     
    2633                                        obj=setdefaultparameters(obj);
    2734                                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});
    4536                                otherwise
    4637                                        error('constructor not supported');
     
    5647                        obj.control_parameters={'FrictionCoefficient'};
    5748
    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';
    6062
    6163                        %several responses can be used:
    62                         obj.cost_functions=101*ones(obj.nsteps,1);
     64                        obj.cost_functions=101;
    6365
    6466                end % }}}
     
    7981                        md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
    8082                                {'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'});
    8291                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
    8392                        md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
     
    99108                        fielddisplay(obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');
    100109                        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''');
    102118                        fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step');
    103119                        fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
     
    127143                        if ~obj.iscontrol, return; end
    128144                        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');
    130153                        WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
    131154                        WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
  • issm/trunk-jpl/src/m/enum/EnumDefinitions.py

    r17914 r17918  
    142142def InversionMaxstepsEnum(): return StringToEnum("InversionMaxsteps")[0]
    143143def InversionFatolEnum(): return StringToEnum("InversionFatol")[0]
    144 def InversionFgtolEnum(): return StringToEnum("InversionFgtol")[0]
     144def InversionFrtolEnum(): return StringToEnum("InversionFrtol")[0]
    145145def InversionGatolEnum(): return StringToEnum("InversionGatol")[0]
    146 def InversionGgtolEnum(): return StringToEnum("InversionGgtol")[0]
     146def InversionGrtolEnum(): return StringToEnum("InversionGrtol")[0]
    147147def InversionGttolEnum(): return StringToEnum("InversionGttol")[0]
    148148def InversionAlgorithmEnum(): return StringToEnum("InversionAlgorithm")[0]
     
    150150def InversionNstepsEnum(): return StringToEnum("InversionNsteps")[0]
    151151def InversionDxminEnum(): return StringToEnum("InversionDxmin")[0]
    152 def InversionEpsrelEnum(): return StringToEnum("InversionEpsrel")[0]
    153152def InversionNumControlParametersEnum(): return StringToEnum("InversionNumControlParameters")[0]
    154153def InversionNumCostFunctionsEnum(): return StringToEnum("InversionNumCostFunctions")[0]
Note: See TracChangeset for help on using the changeset viewer.