source: issm/trunk/src/m/classes/cflevelsetmisfit.m

Last change on this file was 28013, checked in by Mathieu Morlighem, 16 months ago

merged trunk-jpl and trunk for revision 28011

File size: 4.9 KB
RevLine 
[26252]1%MISFIT class definition
2%
3% Usage:
4% cflevelsetmisfit=cflevelsetmisfit();
5% cflevelsetmisfit=cflevelsetmisfit('name','CalvingFrontPosition',...
6% 'definitionstring','Outputdefinition1',...
7% 'model_string','MaskIceLevelset',...
8% 'observation_string','LevelsetObservations',...
9% 'observation',md.mask.ice_levelset,...
10% 'weights',ones(md.mesh.numberofvertices,1),...
11% 'weights_string','WeightsLevelsetObservations',...
12% 'datatime',time);
13%
14%
15
16classdef cflevelsetmisfit
17 properties (SetAccess=public)
18 %cflevelsetmisfit
19 name = '';
20 definitionstring = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-100]'
21 model_string = ''; %string for field that is modeled
22 observation = NaN; %observed field that we compare the model against
23 observation_string = ''; %string for observed field.
24 weights = NaN; %weight coefficients for every vertex
25 weights_string = ''; %string to identify this particular set of weights
26 datatime = 0; %time in years from start that the data is from
27 end
28
29 methods
30 function self = extrude(self,md) % {{{
31 if ~isnan(self.weights)
32 self.weights=project3d(md,'vector',self.weights,'type','node');
33 end
34 if ~isnan(self.observation)
35 self.observation=project3d(md,'vector',self.observation,'type','node');
36 end
37 end % }}}
38 function self = cflevelsetmisfit(varargin) % {{{
39 if nargin==0,
40 self=setdefaultparameters(self);
41 else
42 %use provided options to change fields
43 options=pairoptions(varargin{:});
44
45 %get name
46 self.name=getfieldvalue(options,'name','');
47 self.definitionstring=getfieldvalue(options,'definitionstring');
48 self.model_string=getfieldvalue(options,'model_string');
49 self.observation=getfieldvalue(options,'observation',NaN);
50 self.observation_string=getfieldvalue(options,'observation_string');
51 self.weights=getfieldvalue(options,'weights',NaN);
52 self.weights_string=getfieldvalue(options,'weights_string','');
53 self.datatime = getfieldvalue(options, 'datatime');
54
55 end
56 end % }}}
57 function self = setdefaultparameters(self) % {{{
58 self.datatime = 0;
59 end % }}}
60 function md = checkconsistency(self,md,solution,analyses) % {{{
61
62 if ~ischar(self.name),
63 error('cflevelsetmisfit error message: ''name'' field should be a string!');
64 end
65 OutputdefinitionStringArray={};
66 for i=1:100
67 OutputdefinitionStringArray{i}=strcat('Outputdefinition',num2str(i));
68 end
69 md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray);
70
71 md = checkfield(md,'fieldname','self.observation','field',self.observation,'timeseries',1,'NaN',1,'Inf',1);
72 md = checkfield(md,'fieldname','self.weights','field',self.weights,'timeseries',1,'NaN',1,'Inf',1);
73 md = checkfield(md,'fieldname','self.datatime','field',self.datatime,'<=',md.timestepping.final_time);
74
75 end % }}}
76 function md = disp(self) % {{{
77
78 disp(sprintf(' TimeMisfit:\n'));
79
80 fielddisplay(self,'name','identifier for this cflevelsetmisfit response');
81 fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-10]''');
82 fielddisplay(self,'model_string','string for field that is modeled');
83 fielddisplay(self,'observation','observed field that we compare the model against');
84 fielddisplay(self,'observation_string','observation string');
85 fielddisplay(self,'weights','weights (at vertices) to apply to the cflevelsetmisfit');
86 fielddisplay(self,'weights_string','string for weights for identification purposes');
87 fielddisplay(self,'datatime','time to compare data to model for misfit');
88
89 end % }}}
90 function md = marshall(self,prefix,md,fid) % {{{
91
92 WriteData(fid,prefix,'data',self.name,'name','md.cflevelsetmisfit.name','format','String');
93 WriteData(fid,prefix,'data',self.definitionstring,'name','md.cflevelsetmisfit.definitionstring','format','String');
94 WriteData(fid,prefix,'data',self.model_string,'name','md.cflevelsetmisfit.model_string','format','String');
95 WriteData(fid,prefix,'data',self.observation,'name','md.cflevelsetmisfit.observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
96 WriteData(fid,prefix,'data',self.observation_string,'name','md.cflevelsetmisfit.observation_string','format','String');
97 WriteData(fid,prefix,'data',self.weights,'name','md.cflevelsetmisfit.weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
98 WriteData(fid,prefix,'data',self.weights_string,'name','md.cflevelsetmisfit.weights_string','format','String');
99 WriteData(fid,prefix,'data',round(self.datatime*md.constants.yts),'name','md.cflevelsetmisfit.datatime','format','Double');
100 end % }}}
101 end
102end
Note: See TracBrowser for help on using the repository browser.