[17986] | 1 | Index: ../trunk-jpl/src/m/classes/m1qn3inversion.py
|
---|
| 2 | ===================================================================
|
---|
| 3 | --- ../trunk-jpl/src/m/classes/m1qn3inversion.py (revision 17908)
|
---|
| 4 | +++ ../trunk-jpl/src/m/classes/m1qn3inversion.py (revision 17909)
|
---|
| 5 | @@ -22,6 +22,8 @@
|
---|
| 6 | self.incomplete_adjoint = 0
|
---|
| 7 | self.control_parameters = float('NaN')
|
---|
| 8 | self.nsteps = 0
|
---|
| 9 | + self.dxmin = 0.
|
---|
| 10 | + self.epsrel = 0.
|
---|
| 11 | self.cost_functions = float('NaN')
|
---|
| 12 | self.cost_functions_coefficients = float('NaN')
|
---|
| 13 | self.min_parameters = float('NaN')
|
---|
| 14 | @@ -59,6 +61,8 @@
|
---|
| 15 | string="%s\n%s"%(string,fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'))
|
---|
| 16 | string="%s\n%s"%(string,fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'))
|
---|
| 17 | string="%s\n%s"%(string,fielddisplay(self,'nsteps','number of optimization searches'))
|
---|
| 18 | + string="%s\n%s"%(string,fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical'))
|
---|
| 19 | + string="%s\n%s"%(string,fielddisplay(self,'epsrel','convergence criterion: ratio between current gradient and initial gradient'))
|
---|
| 20 | string="%s\n%s"%(string,fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'))
|
---|
| 21 | 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'))
|
---|
| 22 | string="%s\n%s"%(string,fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'))
|
---|
| 23 | @@ -94,6 +98,10 @@
|
---|
| 24 | #several responses can be used:
|
---|
| 25 | self.cost_functions=101
|
---|
| 26 |
|
---|
| 27 | + #m1qn3 parameters
|
---|
| 28 | + self.dxmin = 0.1
|
---|
| 29 | + self.epsrel = 1e-4
|
---|
| 30 | +
|
---|
| 31 | return self
|
---|
| 32 | #}}}
|
---|
| 33 | def checkconsistency(self,md,solution,analyses): # {{{
|
---|
| 34 | @@ -109,6 +117,8 @@
|
---|
| 35 | md = checkfield(md,'fieldname','inversion.incomplete_adjoint','values',[0,1])
|
---|
| 36 | md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',['BalancethicknessThickeningRate','FrictionCoefficient','MaterialsRheologyBbar','DamageDbar','Vx','Vy','Thickness'])
|
---|
| 37 | md = checkfield(md,'fieldname','inversion.nsteps','numel',[1],'>=',0)
|
---|
| 38 | + md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0.)
|
---|
| 39 | + md = checkfield(md,'fieldname','inversion.epsrel','numel',1,'>',0.)
|
---|
| 40 | md = checkfield(md,'fieldname','inversion.cost_functions','size',[num_costfunc],'values',[101,102,103,104,105,201,501,502,503,504,505])
|
---|
| 41 | md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices,num_costfunc],'>=',0)
|
---|
| 42 | md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices,num_controls])
|
---|
| 43 | @@ -132,6 +142,8 @@
|
---|
| 44 | return
|
---|
| 45 | WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean')
|
---|
| 46 | WriteData(fid,'object',self,'class','inversion','fieldname','nsteps','format','Integer')
|
---|
| 47 | + WriteData(fid,'object',obj,'class','inversion','fieldname','dxmin','format','Double')
|
---|
| 48 | + WriteData(fid,'object',obj,'class','inversion','fieldname','epsrel','format','Double')
|
---|
| 49 | WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1)
|
---|
| 50 | WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3)
|
---|
| 51 | WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3)
|
---|
| 52 | Index: ../trunk-jpl/src/m/classes/m1qn3inversion.m
|
---|
| 53 | ===================================================================
|
---|
| 54 | --- ../trunk-jpl/src/m/classes/m1qn3inversion.m (revision 17908)
|
---|
| 55 | +++ ../trunk-jpl/src/m/classes/m1qn3inversion.m (revision 17909)
|
---|
| 56 | @@ -9,6 +9,8 @@
|
---|
| 57 | incomplete_adjoint = 0
|
---|
| 58 | control_parameters = NaN
|
---|
| 59 | nsteps = 0
|
---|
| 60 | + dxmin = 0;
|
---|
| 61 | + epsrel = 0;
|
---|
| 62 | cost_functions = NaN
|
---|
| 63 | cost_functions_coefficients = NaN
|
---|
| 64 | min_parameters = NaN
|
---|
| 65 | @@ -18,6 +20,7 @@
|
---|
| 66 | vz_obs = NaN
|
---|
| 67 | vel_obs = NaN
|
---|
| 68 | thickness_obs = NaN
|
---|
| 69 | +
|
---|
| 70 | end
|
---|
| 71 | methods
|
---|
| 72 | function obj = m1qn3inversion(varargin) % {{{
|
---|
| 73 | @@ -30,29 +33,33 @@
|
---|
| 74 | error('constructor not supported');
|
---|
| 75 | end
|
---|
| 76 | end % }}}
|
---|
| 77 | - function obj = setdefaultparameters(obj) % {{{
|
---|
| 78 | + function self = setdefaultparameters(self) % {{{
|
---|
| 79 |
|
---|
| 80 | %default is incomplete adjoint for now
|
---|
| 81 | - obj.incomplete_adjoint=1;
|
---|
| 82 | + self.incomplete_adjoint=1;
|
---|
| 83 |
|
---|
| 84 | %parameter to be inferred by control methods (only
|
---|
| 85 | %drag and B are supported yet)
|
---|
| 86 | - obj.control_parameters={'FrictionCoefficient'};
|
---|
| 87 | + self.control_parameters={'FrictionCoefficient'};
|
---|
| 88 |
|
---|
| 89 | %number of steps in the control methods
|
---|
| 90 | - obj.nsteps=20;
|
---|
| 91 | + self.nsteps=20;
|
---|
| 92 |
|
---|
| 93 | %several responses can be used:
|
---|
| 94 | - obj.cost_functions=101*ones(obj.nsteps,1);
|
---|
| 95 | + self.cost_functions=101*ones(self.nsteps,1);
|
---|
| 96 |
|
---|
| 97 | + %m1qn3 parameters
|
---|
| 98 | + self.dxmin = 0.1;
|
---|
| 99 | + self.epsrel = 1e-4;
|
---|
| 100 | +
|
---|
| 101 | end % }}}
|
---|
| 102 | function md = checkconsistency(obj,md,solution,analyses) % {{{
|
---|
| 103 |
|
---|
| 104 | %Early return
|
---|
| 105 | if ~obj.iscontrol, return; end
|
---|
| 106 |
|
---|
| 107 | - if ~IssmConfig('_HAVE_TAO_'),
|
---|
| 108 | - md = checkmessage(md,['TAO has not been installed, ISSM needs to be reconfigured and recompiled with TAO']);
|
---|
| 109 | + if ~IssmConfig('_HAVE_M1QN3_'),
|
---|
| 110 | + md = checkmessage(md,['M1QN3 has not been installed, ISSM needs to be reconfigured and recompiled with M1QN3']);
|
---|
| 111 | end
|
---|
| 112 |
|
---|
| 113 | num_controls=numel(md.inversion.control_parameters);
|
---|
| 114 | @@ -63,6 +70,8 @@
|
---|
| 115 | md = checkfield(md,'fieldname','inversion.control_parameters','cell',1,'values',...
|
---|
| 116 | {'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'MaterialsRheologyZbar' 'Vx' 'Vy' 'Thickness'});
|
---|
| 117 | md = checkfield(md,'fieldname','inversion.nsteps','numel',1,'>=',0);
|
---|
| 118 | + md = checkfield(md,'fieldname','inversion.dxmin','numel',1,'>',0);
|
---|
| 119 | + md = checkfield(md,'fieldname','inversion.epsrel','numel',1,'>',0);
|
---|
| 120 | md = checkfield(md,'fieldname','inversion.cost_functions','size',[1 num_costfunc],'values',[101:105 201 501:506]);
|
---|
| 121 | md = checkfield(md,'fieldname','inversion.cost_functions_coefficients','size',[md.mesh.numberofvertices num_costfunc],'>=',0);
|
---|
| 122 | md = checkfield(md,'fieldname','inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]);
|
---|
| 123 | @@ -83,6 +92,8 @@
|
---|
| 124 | fielddisplay(obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');
|
---|
| 125 | fielddisplay(obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');
|
---|
| 126 | fielddisplay(obj,'nsteps','number of optimization searches');
|
---|
| 127 | + fielddisplay(obj,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');
|
---|
| 128 | + fielddisplay(obj,'epsrel','convergence criterion: ratio between current gradient and initial gradient');
|
---|
| 129 | fielddisplay(obj,'cost_functions','indicate the type of response for each optimization step');
|
---|
| 130 | fielddisplay(obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');
|
---|
| 131 | fielddisplay(obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');
|
---|
| 132 | @@ -111,6 +122,8 @@
|
---|
| 133 | if ~obj.iscontrol, return; end
|
---|
| 134 | WriteData(fid,'object',obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');
|
---|
| 135 | WriteData(fid,'object',obj,'class','inversion','fieldname','nsteps','format','Integer');
|
---|
| 136 | + WriteData(fid,'object',obj,'class','inversion','fieldname','dxmin','format','Double');
|
---|
| 137 | + WriteData(fid,'object',obj,'class','inversion','fieldname','epsrel','format','Double');
|
---|
| 138 | WriteData(fid,'object',obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);
|
---|
| 139 | WriteData(fid,'object',obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);
|
---|
| 140 | WriteData(fid,'object',obj,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);
|
---|