Changeset 19040 for issm/trunk-jpl/src/m/classes/m1qn3inversion.m
- Timestamp:
- 01/26/15 18:40:38 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/m1qn3inversion.m
r18994 r19040 27 27 end 28 28 methods 29 function obj= m1qn3inversion(varargin) % {{{29 function self = m1qn3inversion(varargin) % {{{ 30 30 switch nargin 31 31 case 0 32 obj=setdefaultparameters(obj);32 self=setdefaultparameters(self); 33 33 case 1 34 obj=structtoobj(m1qn3inversion(),varargin{1});34 self=structtoobj(m1qn3inversion(),varargin{1}); 35 35 otherwise 36 36 error('constructor not supported'); … … 61 61 62 62 end % }}} 63 function md = checkconsistency( obj,md,solution,analyses) % {{{63 function md = checkconsistency(self,md,solution,analyses) % {{{ 64 64 65 65 %Early return 66 if ~ obj.iscontrol, return; end66 if ~self.iscontrol, return; end 67 67 68 68 if ~IssmConfig('_HAVE_M1QN3_'), … … 97 97 end 98 98 end % }}} 99 function disp( obj) % {{{99 function disp(self) % {{{ 100 100 disp(sprintf(' m1qn3inversion parameters:')); 101 fielddisplay( obj,'iscontrol','is inversion activated?');102 fielddisplay( obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');103 fielddisplay( obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');104 fielddisplay( obj,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)');105 fielddisplay( obj,'maxsteps','maximum number of iterations (gradient computation)');106 fielddisplay( obj,'maxiter','maximum number of Function evaluation (forward run)');107 fielddisplay( obj,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');108 fielddisplay( obj,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');109 fielddisplay( obj,'cost_functions','indicate the type of response for each optimization step');110 fielddisplay( obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');111 fielddisplay( obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');112 fielddisplay( obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');113 fielddisplay( obj,'vx_obs','observed velocity x component [m/yr]');114 fielddisplay( obj,'vy_obs','observed velocity y component [m/yr]');115 fielddisplay( obj,'vel_obs','observed velocity magnitude [m/yr]');116 fielddisplay( obj,'thickness_obs','observed thickness [m]');117 fielddisplay( obj,'surface_obs','observed surface elevation [m]');101 fielddisplay(self,'iscontrol','is inversion activated?'); 102 fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'); 103 fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 104 fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)'); 105 fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)'); 106 fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)'); 107 fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical'); 108 fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)'); 109 fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'); 110 fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); 111 fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'); 112 fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'); 113 fielddisplay(self,'vx_obs','observed velocity x component [m/yr]'); 114 fielddisplay(self,'vy_obs','observed velocity y component [m/yr]'); 115 fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]'); 116 fielddisplay(self,'thickness_obs','observed thickness [m]'); 117 fielddisplay(self,'surface_obs','observed surface elevation [m]'); 118 118 disp('Available cost functions:'); 119 119 disp(' 101: SurfaceAbsVelMisfit'); … … 127 127 disp(' 503: ThicknessAbsGradient'); 128 128 end % }}} 129 function marshall( obj,md,fid) % {{{129 function marshall(self,md,fid) % {{{ 130 130 131 131 yts=365.0*24.0*3600.0; 132 132 133 WriteData(fid,'object', obj,'class','inversion','fieldname','iscontrol','format','Boolean');133 WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean'); 134 134 WriteData(fid,'enum',InversionTypeEnum(),'data',2,'format','Integer'); 135 if ~ obj.iscontrol, return; end136 WriteData(fid,'object', obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');137 WriteData(fid,'object', obj,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);138 WriteData(fid,'object', obj,'class','inversion','fieldname','maxsteps','format','Integer');139 WriteData(fid,'object', obj,'class','inversion','fieldname','maxiter','format','Integer');140 WriteData(fid,'object', obj,'class','inversion','fieldname','dxmin','format','Double');141 WriteData(fid,'object', obj,'class','inversion','fieldname','gttol','format','Double');142 WriteData(fid,'object', obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);143 WriteData(fid,'object', obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);144 WriteData(fid,'object', obj,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);145 WriteData(fid,'object', obj,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);146 WriteData(fid,'object', obj,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);147 WriteData(fid,'object', obj,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);148 if(numel( obj.thickness_obs)==md.mesh.numberofelements),135 if ~self.iscontrol, return; end 136 WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean'); 137 WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3); 138 WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer'); 139 WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer'); 140 WriteData(fid,'object',self,'class','inversion','fieldname','dxmin','format','Double'); 141 WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double'); 142 WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 143 WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3); 144 WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3); 145 WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts); 146 WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts); 147 WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts); 148 if(numel(self.thickness_obs)==md.mesh.numberofelements), 149 149 mattype=2; 150 150 else 151 151 mattype=1; 152 152 end 153 WriteData(fid,'object', obj,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);154 WriteData(fid,'object', obj,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);153 WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype); 154 WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype); 155 155 156 156 %process control parameters 157 num_control_parameters=numel( obj.control_parameters);157 num_control_parameters=numel(self.control_parameters); 158 158 data=zeros(1,num_control_parameters); 159 159 for i=1:num_control_parameters, 160 data(i)=StringToEnum( obj.control_parameters{i});160 data(i)=StringToEnum(self.control_parameters{i}); 161 161 end 162 162 WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3); … … 164 164 165 165 %process cost functions 166 num_cost_functions=size( obj.cost_functions,2);167 data=marshallcostfunctions( obj.cost_functions);166 num_cost_functions=size(self.cost_functions,2); 167 data=marshallcostfunctions(self.cost_functions); 168 168 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3); 169 169 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer');
Note:
See TracChangeset
for help on using the changeset viewer.