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
RevLine 
[17986]1Index: ../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)
52Index: ../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);
Note: See TracBrowser for help on using the repository browser.