source: issm/oecreview/Archive/17802-17983/ISSM-17908-17909.diff@ 17986

Last change on this file since 17986 was 17986, checked in by Mathieu Morlighem, 11 years ago

New release

File size: 8.0 KB
  • TabularUnified ../trunk-jpl/src/m/classes/m1qn3inversion.py

     
    2222                        self.incomplete_adjoint          = 0
    2323                        self.control_parameters          = float('NaN')
    2424                        self.nsteps                      = 0
     25                        self.dxmin                       = 0.
     26                        self.epsrel                      = 0.
    2527                        self.cost_functions              = float('NaN')
    2628                        self.cost_functions_coefficients = float('NaN')
    2729                        self.min_parameters              = float('NaN')
     
    5961                string="%s\n%s"%(string,fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'))
    6062                string="%s\n%s"%(string,fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'))
    6163                string="%s\n%s"%(string,fielddisplay(self,'nsteps','number of optimization searches'))
     64                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'))
    6266                string="%s\n%s"%(string,fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'))
    6367                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'))
    6468                string="%s\n%s"%(string,fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'))
     
    9498                #several responses can be used:
    9599                self.cost_functions=101
    96100
     101                #m1qn3 parameters
     102                self.dxmin  = 0.1
     103                self.epsrel = 1e-4
     104
    97105                return self
    98106        #}}}
    99107        def checkconsistency(self,md,solution,analyses):    # {{{
     
    109117                md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
    110118                md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy','Thickness'])
    111119                md = checkfield(md,'fieldname','inversion.nsteps','numel',[1],'>=',0)
     120                md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0.)
     121                md = checkfield(md,'fieldname','inversion.epsrel','numel',1,'>',0.)
    112122                md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
    113123                md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
    114124                md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
     
    132142                        return
    133143                WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
    134144                WriteData(fid,'object',self,'class','inversion','fieldname','nsteps','format','Integer')
     145                WriteData(fid,'object',obj,'class','inversion','fieldname','dxmin','format','Double')
     146                WriteData(fid,'object',obj,'class','inversion','fieldname','epsrel','format','Double')
    135147                WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
    136148                WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
    137149                WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
  • TabularUnified ../trunk-jpl/src/m/classes/m1qn3inversion.m

     
    99                incomplete_adjoint          = 0
    1010                control_parameters          = NaN
    1111                nsteps                      = 0
     12                dxmin                       = 0;
     13                epsrel                      = 0;
    1214                cost_functions              = NaN
    1315                cost_functions_coefficients = NaN
    1416                min_parameters              = NaN
     
    1820                vz_obs                      = NaN
    1921                vel_obs                     = NaN
    2022                thickness_obs               = NaN
     23
    2124        end
    2225        methods
    2326                function obj = m1qn3inversion(varargin) % {{{
     
    3033                                        error('constructor not supported');
    3134                        end
    3235                end % }}}
    33                 function obj = setdefaultparameters(obj) % {{{
     36                function self = setdefaultparameters(self) % {{{
    3437
    3538                        %default is incomplete adjoint for now
    36                         obj.incomplete_adjoint=1;
     39                        self.incomplete_adjoint=1;
    3740
    3841                        %parameter to be inferred by control methods (only
    3942                        %drag and B are supported yet)
    40                         obj.control_parameters={'FrictionCoefficient'};
     43                        self.control_parameters={'FrictionCoefficient'};
    4144
    4245                        %number of steps in the control methods
    43                         obj.nsteps=20;
     46                        self.nsteps=20;
    4447
    4548                        %several responses can be used:
    46                         obj.cost_functions=101*ones(obj.nsteps,1);
     49                        self.cost_functions=101*ones(self.nsteps,1);
    4750
     51                        %m1qn3 parameters
     52                        self.dxmin  = 0.1;
     53                        self.epsrel = 1e-4;
     54
    4855                end % }}}
    4956                function md = checkconsistency(obj,md,solution,analyses) % {{{
    5057
    5158                        %Early return
    5259                        if ~obj.iscontrol, return; end
    5360
    54                         if ~IssmConfig('_HAVE_TAO_'),
    55                                 md = checkmessage(md,['TAO has not been installed, ISSM needs to be reconfigured and recompiled with TAO']);
     61                        if ~IssmConfig('_HAVE_M1QN3_'),
     62                                md = checkmessage(md,['M1QN3 has not been installed, ISSM needs to be reconfigured and recompiled with M1QN3']);
    5663                        end
    5764
    5865                        num_controls=numel(md.inversion.control_parameters);
     
    6370                        md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
    6471                                {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'});
    6572                        md = checkfield(md,'fieldname','inversion.nsteps','numel',1,'>=',0);
     73                        md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
     74                        md = checkfield(md,'fieldname','inversion.epsrel','numel',1,'>',0);
    6675                        md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
    6776                        md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
    6877                        md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
     
    8392                        fielddisplay(obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');
    8493                        fielddisplay(obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');
    8594                        fielddisplay(obj,'nsteps','number of optimization searches');
     95                        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');
    8697                        fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step');
    8798                        fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
    8899                        fielddisplay(obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
     
    111122                        if ~obj.iscontrol, return; end
    112123                        WriteData(fid,'object',obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
    113124                        WriteData(fid,'object',obj,'class','inversion','fieldname','nsteps','format','Integer');
     125                        WriteData(fid,'object',obj,'class','inversion','fieldname','dxmin','format','Double');
     126                        WriteData(fid,'object',obj,'class','inversion','fieldname','epsrel','format','Double');
    114127                        WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
    115128                        WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
    116129                        WriteData(fid,'object',obj,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
Note: See TracBrowser for help on using the repository browser.