Changeset 19040
- Timestamp:
- 01/26/15 18:40:38 (10 years ago)
- Location:
- issm/trunk-jpl/src/m/classes
- Files:
-
- 76 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/SMB.m
r19027 r19040 9 9 end 10 10 methods 11 function createxml( obj,fid) % {{{11 function createxml(self,fid) % {{{ 12 12 fprintf(fid, '\n\n'); 13 13 fprintf(fid, '%s\n', '<!-- surfaceforcings(SMB) -->'); 14 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="mass_balance" type="',class( obj.mass_balance),'" default="',obj.mass_balance,'">',' <section name="surfaceforcings(SMB)" />',' <help> surface mass balance [m/yr ice eq] </help>','</parameter>');14 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="mass_balance" type="',class(self.mass_balance),'" default="',self.mass_balance,'">',' <section name="surfaceforcings(SMB)" />',' <help> surface mass balance [m/yr ice eq] </help>','</parameter>'); 15 15 16 16 end % }}} 17 function obj= SMB(varargin) % {{{17 function self = SMB(varargin) % {{{ 18 18 switch nargin 19 19 case 0 … … 35 35 36 36 end % }}} 37 function md = checkconsistency( obj,md,solution,analyses) % {{{37 function md = checkconsistency(self,md,solution,analyses) % {{{ 38 38 39 39 if ismember(MasstransportAnalysisEnum(),analyses), … … 44 44 end 45 45 end % }}} 46 function disp( obj) % {{{46 function disp(self) % {{{ 47 47 disp(sprintf(' surface forcings parameters:')); 48 fielddisplay( obj,'mass_balance','surface mass balance [m/yr ice eq]');48 fielddisplay(self,'mass_balance','surface mass balance [m/yr ice eq]'); 49 49 end % }}} 50 function marshall( obj,md,fid) % {{{50 function marshall(self,md,fid) % {{{ 51 51 52 52 yts=365.0*24.0*3600.0; 53 53 54 54 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBEnum(),'format','Integer'); 55 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);55 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 56 56 end % }}} 57 57 end -
issm/trunk-jpl/src/m/classes/SMBcomponents.m
r19027 r19040 11 11 end 12 12 methods 13 function obj= SMBcomponents(varargin) % {{{13 function self = SMBcomponents(varargin) % {{{ 14 14 switch nargin 15 15 case 0 … … 41 41 42 42 end % }}} 43 function md = checkconsistency( obj,md,solution,analyses) % {{{43 function md = checkconsistency(self,md,solution,analyses) % {{{ 44 44 45 45 if ismember(MasstransportAnalysisEnum(),analyses), … … 62 62 end 63 63 end % }}} 64 function disp( obj) % {{{64 function disp(self) % {{{ 65 65 disp(sprintf(' surface forcings parameters (SMB=accumulation-runoff-evaporation) :')); 66 fielddisplay( obj,'accumulation','accumulated snow [m/yr ice eq]');67 fielddisplay( obj,'runoff','amount of ice melt lost from the ice column [m/yr ice eq]');68 fielddisplay( obj,'evaporation','amount of ice lost to evaporative processes [m/yr ice eq]');66 fielddisplay(self,'accumulation','accumulated snow [m/yr ice eq]'); 67 fielddisplay(self,'runoff','amount of ice melt lost from the ice column [m/yr ice eq]'); 68 fielddisplay(self,'evaporation','amount of ice lost to evaporative processes [m/yr ice eq]'); 69 69 end % }}} 70 function marshall( obj,md,fid) % {{{70 function marshall(self,md,fid) % {{{ 71 71 72 72 yts=365.0*24.0*3600.0; 73 73 74 74 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBcomponentsEnum(),'format','Integer'); 75 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);76 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);77 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);75 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 76 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 77 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 78 78 end % }}} 79 79 end -
issm/trunk-jpl/src/m/classes/SMBgradients.m
r19027 r19040 12 12 end 13 13 methods 14 function obj= SMBgradients(varargin) % {{{14 function self = SMBgradients(varargin) % {{{ 15 15 switch nargin 16 16 case 0 17 obj=setdefaultparameters(obj);17 self=setdefaultparameters(self); 18 18 otherwise 19 19 error('constructor not supported'); … … 30 30 31 31 end % }}} 32 function obj = setdefaultparameters(obj) % {{{32 function self = setdefaultparameters(self) % {{{ 33 33 34 34 %Nothing for now 35 35 36 36 end % }}} 37 function md = checkconsistency( obj,md,solution,analyses) % {{{37 function md = checkconsistency(self,md,solution,analyses) % {{{ 38 38 39 39 if ismember(MasstransportAnalysisEnum(),analyses), … … 44 44 end 45 45 end % }}} 46 function disp( obj) % {{{46 function disp(self) % {{{ 47 47 disp(sprintf(' surface forcings parameters:')); 48 48 49 49 disp(sprintf('\n SMB gradients parameters:')); 50 fielddisplay( obj,'href',' reference elevation from which deviation is used to calculate SMB adjustment in smb gradients method [m]');51 fielddisplay( obj,'smbref',' reference smb from which deviation is calculated in smb gradients method [mm/yr water equiv]');52 fielddisplay( obj,'b_pos',' slope of hs - smb regression line for accumulation regime required if smb gradients is activated');53 fielddisplay( obj,'b_neg',' slope of hs - smb regression line for ablation regime required if smb gradients is activated');50 fielddisplay(self,'href',' reference elevation from which deviation is used to calculate SMB adjustment in smb gradients method [m]'); 51 fielddisplay(self,'smbref',' reference smb from which deviation is calculated in smb gradients method [mm/yr water equiv]'); 52 fielddisplay(self,'b_pos',' slope of hs - smb regression line for accumulation regime required if smb gradients is activated'); 53 fielddisplay(self,'b_neg',' slope of hs - smb regression line for ablation regime required if smb gradients is activated'); 54 54 55 55 end % }}} 56 function marshall( obj,md,fid) % {{{56 function marshall(self,md,fid) % {{{ 57 57 58 58 yts=365.0*24.0*3600.0; 59 59 60 60 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBgradientsEnum(),'format','Integer'); 61 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','href','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);62 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);63 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);64 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);61 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','href','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 62 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 63 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','b_pos','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 64 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','b_neg','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 65 65 66 66 end % }}} -
issm/trunk-jpl/src/m/classes/SMBhenning.m
r19027 r19040 9 9 end 10 10 methods 11 function obj= SMBhenning(varargin) % {{{11 function self = SMBhenning(varargin) % {{{ 12 12 switch nargin 13 13 case 0 … … 29 29 30 30 end % }}} 31 function md = checkconsistency( obj,md,solution,analyses) % {{{31 function md = checkconsistency(self,md,solution,analyses) % {{{ 32 32 33 33 if ismember(MasstransportAnalysisEnum(),analyses), … … 38 38 end 39 39 end % }}} 40 function disp( obj) % {{{40 function disp(self) % {{{ 41 41 disp(sprintf(' surface forcings parameters:')); 42 fielddisplay( obj,'smbref','reference smb from which deviation is calculated [m/yr ice eq]');42 fielddisplay(self,'smbref','reference smb from which deviation is calculated [m/yr ice eq]'); 43 43 end % }}} 44 function marshall( obj,md,fid) % {{{44 function marshall(self,md,fid) % {{{ 45 45 46 46 yts=365.0*24.0*3600.0; 47 47 48 48 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBhenningEnum(),'format','Integer'); 49 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);49 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 50 50 end % }}} 51 51 end -
issm/trunk-jpl/src/m/classes/SMBmeltcomponents.m
r19027 r19040 12 12 end 13 13 methods 14 function obj= SMBmeltcomponents(varargin) % {{{14 function self = SMBmeltcomponents(varargin) % {{{ 15 15 switch nargin 16 16 case 0 … … 47 47 48 48 end % }}} 49 function md = checkconsistency( obj,md,solution,analyses) % {{{49 function md = checkconsistency(self,md,solution,analyses) % {{{ 50 50 51 51 if ismember(MasstransportAnalysisEnum(),analyses), … … 74 74 end 75 75 end % }}} 76 function disp( obj) % {{{76 function disp(self) % {{{ 77 77 disp(sprintf(' surface forcings parameters with melt (SMB=accumulation-evaporation-melt+refreeze) :')); 78 fielddisplay( obj,'accumulation','accumulated snow [m/yr ice eq]');79 fielddisplay( obj,'evaporation','amount of ice lost to evaporative processes [m/yr ice eq]');80 fielddisplay( obj,'melt','amount of ice melt in ice column [m/yr ice eq]');81 fielddisplay( obj,'refreeze','amount of ice melt refrozen in ice column [m/yr ice eq]');78 fielddisplay(self,'accumulation','accumulated snow [m/yr ice eq]'); 79 fielddisplay(self,'evaporation','amount of ice lost to evaporative processes [m/yr ice eq]'); 80 fielddisplay(self,'melt','amount of ice melt in ice column [m/yr ice eq]'); 81 fielddisplay(self,'refreeze','amount of ice melt refrozen in ice column [m/yr ice eq]'); 82 82 end % }}} 83 function marshall( obj,md,fid) % {{{83 function marshall(self,md,fid) % {{{ 84 84 85 85 yts=365.0*24.0*3600.0; 86 86 87 87 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBmeltcomponentsEnum(),'format','Integer'); 88 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);89 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);90 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','melt','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);91 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);88 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 89 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 90 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','melt','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 91 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 92 92 end % }}} 93 93 end -
issm/trunk-jpl/src/m/classes/SMBpdd.m
r19027 r19040 26 26 end 27 27 methods 28 function obj= SMBpdd(varargin) % {{{28 function self = SMBpdd(varargin) % {{{ 29 29 switch nargin 30 30 case 0 31 obj=setdefaultparameters(obj);31 self=setdefaultparameters(self); 32 32 otherwise 33 33 error('constructor not supported'); … … 55 55 56 56 end % }}} 57 function obj = setdefaultparameters(obj) % {{{57 function self = setdefaultparameters(self) % {{{ 58 58 59 obj.isdelta18o = 0;60 obj.ismungsm = 0;61 obj.desfac = 0.5;62 obj.s0p = 0;63 obj.s0t = 0;64 obj.rlaps = 6.5;65 obj.rlapslgm = 6.5;59 self.isdelta18o = 0; 60 self.ismungsm = 0; 61 self.desfac = 0.5; 62 self.s0p = 0; 63 self.s0t = 0; 64 self.rlaps = 6.5; 65 self.rlapslgm = 6.5; 66 66 67 67 end % }}} 68 function md = checkconsistency( obj,md,solution,analyses) % {{{68 function md = checkconsistency(self,md,solution,analyses) % {{{ 69 69 70 70 if ismember(MasstransportAnalysisEnum(),analyses), … … 74 74 md = checkfield(md,'fieldname','surfaceforcings.rlaps','>=',0,'numel',1); 75 75 md = checkfield(md,'fieldname','surfaceforcings.rlapslgm','>=',0,'numel',1); 76 if( obj.isdelta18o==0 & obj.ismungsm==0)76 if(self.isdelta18o==0 & self.ismungsm==0) 77 77 md = checkfield(md,'fieldname','surfaceforcings.monthlytemperatures','timeseries',1,'NaN',1); 78 78 md = checkfield(md,'fieldname','surfaceforcings.precipitation','timeseries',1,'NaN',1); 79 elseif( obj.isdelta18o==1)79 elseif(self.isdelta18o==1) 80 80 md = checkfield(md,'fieldname','surfaceforcings.delta18o','NaN',1); 81 81 md = checkfield(md,'fieldname','surfaceforcings.delta18o_surface','NaN',1); … … 86 86 md = checkfield(md,'fieldname','surfaceforcings.Tdiff','NaN',1); 87 87 md = checkfield(md,'fieldname','surfaceforcings.sealev','NaN',1); 88 elseif( obj.ismungsm==1)88 elseif(self.ismungsm==1) 89 89 md = checkfield(md,'fieldname','surfaceforcings.temperatures_presentday','size',[md.mesh.numberofvertices+1 12],'NaN',1); 90 90 md = checkfield(md,'fieldname','surfaceforcings.temperatures_lgm','size',[md.mesh.numberofvertices+1 12],'NaN',1); … … 97 97 end 98 98 end % }}} 99 function disp( obj) % {{{99 function disp(self) % {{{ 100 100 disp(sprintf(' surface forcings parameters:')); 101 101 102 102 disp(sprintf('\n PDD and deltaO18 parameters:')); 103 fielddisplay( obj,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)');104 fielddisplay( obj,'ismungsm','is temperature and precipitation mungsm parametrisation activated (0 or 1, default is 0)');105 fielddisplay( obj,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]');106 fielddisplay( obj,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]');107 fielddisplay( obj,'s0t','should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]');108 fielddisplay( obj,'rlaps','present day lapse rate [degree/km]');109 fielddisplay( obj,'rlapslgm','LGM lapse rate [degree/km]');110 if( obj.isdelta18o==0 & obj.ismungsm==0)111 fielddisplay( obj,'monthlytemperatures',['monthly surface temperatures [K], required if pdd is activated and delta18o not activated']);112 fielddisplay( obj,'precipitation',['monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o or mungsm not activated']);113 elseif( obj.isdelta18o==1)114 fielddisplay( obj,'delta18o','delta18o, required if pdd is activated and delta18o activated');115 fielddisplay( obj,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated');116 fielddisplay( obj,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');117 fielddisplay( obj,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');118 fielddisplay( obj,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');119 fielddisplay( obj,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');120 fielddisplay( obj,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');121 fielddisplay( obj,'sealev','sea level [m], 1D(year), required if mungsm is activated');122 elseif( obj.ismungsm==1)123 fielddisplay( obj,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated');124 fielddisplay( obj,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated');125 fielddisplay( obj,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');126 fielddisplay( obj,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated');127 fielddisplay( obj,'Pfac','time interpolation parameter for precipitation, 1D(year), required if mungsm is activated');128 fielddisplay( obj,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated');129 fielddisplay( obj,'sealev','sea level [m], 1D(year), required if mungsm is activated');103 fielddisplay(self,'isdelta18o','is temperature and precipitation delta18o parametrisation activated (0 or 1, default is 0)'); 104 fielddisplay(self,'ismungsm','is temperature and precipitation mungsm parametrisation activated (0 or 1, default is 0)'); 105 fielddisplay(self,'desfac','desertification elevation factor (between 0 and 1, default is 0.5) [m]'); 106 fielddisplay(self,'s0p','should be set to elevation from precip source (between 0 and a few 1000s m, default is 0) [m]'); 107 fielddisplay(self,'s0t','should be set to elevation from temperature source (between 0 and a few 1000s m, default is 0) [m]'); 108 fielddisplay(self,'rlaps','present day lapse rate [degree/km]'); 109 fielddisplay(self,'rlapslgm','LGM lapse rate [degree/km]'); 110 if(self.isdelta18o==0 & self.ismungsm==0) 111 fielddisplay(self,'monthlytemperatures',['monthly surface temperatures [K], required if pdd is activated and delta18o not activated']); 112 fielddisplay(self,'precipitation',['monthly surface precipitation [m/yr water eq], required if pdd is activated and delta18o or mungsm not activated']); 113 elseif(self.isdelta18o==1) 114 fielddisplay(self,'delta18o','delta18o, required if pdd is activated and delta18o activated'); 115 fielddisplay(self,'delta18o_surface','surface elevation of the delta18o site, required if pdd is activated and delta18o activated'); 116 fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated'); 117 fielddisplay(self,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated'); 118 fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated'); 119 fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated'); 120 fielddisplay(self,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated'); 121 fielddisplay(self,'sealev','sea level [m], 1D(year), required if mungsm is activated'); 122 elseif(self.ismungsm==1) 123 fielddisplay(self,'temperatures_presentday','monthly present day surface temperatures [K], required if delta18o/mungsm is activated'); 124 fielddisplay(self,'temperatures_lgm','monthly LGM surface temperatures [K], required if delta18o or mungsm is activated'); 125 fielddisplay(self,'precipitations_presentday','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated'); 126 fielddisplay(self,'precipitations_lgm','monthly surface precipitation [m/yr water eq], required if delta18o or mungsm is activated'); 127 fielddisplay(self,'Pfac','time interpolation parameter for precipitation, 1D(year), required if mungsm is activated'); 128 fielddisplay(self,'Tdiff','time interpolation parameter for temperature, 1D(year), required if mungsm is activated'); 129 fielddisplay(self,'sealev','sea level [m], 1D(year), required if mungsm is activated'); 130 130 end 131 131 end % }}} 132 function marshall( obj,md,fid) % {{{132 function marshall(self,md,fid) % {{{ 133 133 134 134 yts=365.0*24.0*3600.0; … … 136 136 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBpddEnum(),'format','Integer'); 137 137 138 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean');139 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','ismungsm','format','Boolean');140 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','desfac','format','Double');141 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','s0p','format','Double');142 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','s0t','format','Double');143 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','rlaps','format','Double');144 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','rlapslgm','format','Double');138 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','isdelta18o','format','Boolean'); 139 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','ismungsm','format','Boolean'); 140 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','desfac','format','Double'); 141 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0p','format','Double'); 142 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','s0t','format','Double'); 143 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','rlaps','format','Double'); 144 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','rlapslgm','format','Double'); 145 145 146 if( obj.isdelta18o==0 & obj.ismungsm==0)147 %WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1);148 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);149 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);150 elseif obj.isdelta18o151 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);152 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1);153 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);154 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','precipitations_lgm','format','DoubleMat','mattype',1);155 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','delta18o_surface','format','DoubleMat','mattype',1);156 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1);157 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1);158 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1);159 elseif obj.ismungsm160 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1);161 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1);162 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1);163 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','precipitations_lgm','format','DoubleMat','mattype',1);164 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','Pfac','format','DoubleMat','mattype',1);165 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1);166 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1);146 if(self.isdelta18o==0 & self.ismungsm==0) 147 %WriteData(fid,'object',self,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1); 148 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','monthlytemperatures','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 149 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 150 elseif self.isdelta18o 151 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1); 152 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1); 153 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1); 154 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_lgm','format','DoubleMat','mattype',1); 155 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','delta18o_surface','format','DoubleMat','mattype',1); 156 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','delta18o','format','DoubleMat','mattype',1); 157 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1); 158 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1); 159 elseif self.ismungsm 160 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_presentday','format','DoubleMat','mattype',1); 161 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','temperatures_lgm','format','DoubleMat','mattype',1); 162 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_presentday','format','DoubleMat','mattype',1); 163 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','precipitations_lgm','format','DoubleMat','mattype',1); 164 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','Pfac','format','DoubleMat','mattype',1); 165 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','Tdiff','format','DoubleMat','mattype',1); 166 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','sealev','format','DoubleMat','mattype',1); 167 167 end 168 168 end % }}} -
issm/trunk-jpl/src/m/classes/adinversion.m
r18875 r19040 26 26 end 27 27 methods 28 function obj= adinversion(varargin) % {{{28 function self = adinversion(varargin) % {{{ 29 29 switch nargin 30 30 case 0 31 obj=setdefaultparameters(obj);31 self=setdefaultparameters(self); 32 32 case 1 33 33 obj=structtoobj(adinversion(),varargin{1}); … … 57 57 58 58 end % }}} 59 function md = checkconsistency( obj,md,solution,analyses) % {{{59 function md = checkconsistency(self,md,solution,analyses) % {{{ 60 60 61 61 %Early return 62 if ~ obj.iscontrol, return; end62 if ~self.iscontrol, return; end 63 63 64 64 if ~IssmConfig('_HAVE_M1QN3_'), … … 95 95 end 96 96 end % }}} 97 function disp( obj) % {{{97 function disp(self) % {{{ 98 98 disp(sprintf(' adinversion parameters:')); 99 fielddisplay( obj,'iscontrol','is inversion activated?');100 fielddisplay( obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');101 fielddisplay( obj,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)');102 fielddisplay( obj,'maxsteps','maximum number of iterations (gradient computation)');103 fielddisplay( obj,'maxiter','maximum number of Function evaluation (forward run)');104 fielddisplay( obj,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical');105 fielddisplay( obj,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');106 fielddisplay( obj,'cost_functions','indicate the type of response for each optimization step');107 fielddisplay( obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');108 fielddisplay( obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');109 fielddisplay( obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');110 fielddisplay( obj,'vx_obs','observed velocity x component [m/yr]');111 fielddisplay( obj,'vy_obs','observed velocity y component [m/yr]');112 fielddisplay( obj,'vel_obs','observed velocity magnitude [m/yr]');113 fielddisplay( obj,'thickness_obs','observed thickness [m]');114 fielddisplay( obj,'surface_obs','observed surface elevation [m]');99 fielddisplay(self,'iscontrol','is inversion activated?'); 100 fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 101 fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)'); 102 fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)'); 103 fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)'); 104 fielddisplay(self,'dxmin','convergence criterion: two points less than dxmin from eachother (sup-norm) are considered identical'); 105 fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)'); 106 fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'); 107 fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); 108 fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'); 109 fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'); 110 fielddisplay(self,'vx_obs','observed velocity x component [m/yr]'); 111 fielddisplay(self,'vy_obs','observed velocity y component [m/yr]'); 112 fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]'); 113 fielddisplay(self,'thickness_obs','observed thickness [m]'); 114 fielddisplay(self,'surface_obs','observed surface elevation [m]'); 115 115 116 116 disp('Available cost functions:'); … … 125 125 disp(' 503: ThicknessAbsGradient'); 126 126 end % }}} 127 function marshall( obj,md,fid) % {{{127 function marshall(self,md,fid) % {{{ 128 128 129 129 yts=365.0*24.0*3600.0; 130 130 131 WriteData(fid,'object', obj,'class','inversion','fieldname','iscontrol','format','Boolean');131 WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean'); 132 132 WriteData(fid,'enum',InversionTypeEnum(),'data',4,'format','Integer'); 133 if ~ obj.iscontrol, return; end134 WriteData(fid,'object', obj,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);135 WriteData(fid,'object', obj,'class','inversion','fieldname','maxsteps','format','Integer');136 WriteData(fid,'object', obj,'class','inversion','fieldname','maxiter','format','Integer');137 WriteData(fid,'object', obj,'class','inversion','fieldname','dxmin','format','Double');138 WriteData(fid,'object', obj,'class','inversion','fieldname','gttol','format','Double');139 WriteData(fid,'object', obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);140 WriteData(fid,'object', obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);141 WriteData(fid,'object', obj,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);142 WriteData(fid,'object', obj,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);143 WriteData(fid,'object', obj,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);144 WriteData(fid,'object', obj,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);145 if(numel( obj.thickness_obs)==md.mesh.numberofelements),133 if ~self.iscontrol, return; end 134 WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3); 135 WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer'); 136 WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer'); 137 WriteData(fid,'object',self,'class','inversion','fieldname','dxmin','format','Double'); 138 WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double'); 139 WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 140 WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3); 141 WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3); 142 WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts); 143 WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts); 144 WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts); 145 if(numel(self.thickness_obs)==md.mesh.numberofelements), 146 146 mattype=2; 147 147 else 148 148 mattype=1; 149 149 end 150 WriteData(fid,'object', obj,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);151 WriteData(fid,'object', obj,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);150 WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype); 151 WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype); 152 152 153 153 %process control parameters 154 num_control_parameters=numel( obj.control_parameters);154 num_control_parameters=numel(self.control_parameters); 155 155 data=zeros(1,num_control_parameters); 156 156 for i=1:num_control_parameters, 157 data(i)=StringToEnum( obj.control_parameters{i});157 data(i)=StringToEnum(self.control_parameters{i}); 158 158 end 159 159 WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3); … … 161 161 162 162 %process cost functions 163 num_cost_functions=size( obj.cost_functions,2);164 data= obj.cost_functions;165 pos=find( obj.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum();166 pos=find( obj.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum();167 pos=find( obj.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum();168 pos=find( obj.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum();169 pos=find( obj.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum();170 pos=find( obj.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum();171 pos=find( obj.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum();172 pos=find( obj.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum();173 pos=find( obj.cost_functions==503); data(pos)=ThicknessAbsGradientEnum();174 pos=find( obj.cost_functions==504); data(pos)=ThicknessAlongGradientEnum();175 pos=find( obj.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum();176 pos=find( obj.cost_functions==506); data(pos)=BalancethicknessMisfitEnum();177 pos=find( obj.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum();178 pos=find( obj.cost_functions==1001); data(pos)=Outputdefinition1Enum();179 pos=find( obj.cost_functions==1002); data(pos)=Outputdefinition2Enum();180 pos=find( obj.cost_functions==1003); data(pos)=Outputdefinition3Enum();181 pos=find( obj.cost_functions==1004); data(pos)=Outputdefinition4Enum();182 pos=find( obj.cost_functions==1005); data(pos)=Outputdefinition5Enum();183 pos=find( obj.cost_functions==1006); data(pos)=Outputdefinition6Enum();184 pos=find( obj.cost_functions==1007); data(pos)=Outputdefinition7Enum();185 pos=find( obj.cost_functions==1008); data(pos)=Outputdefinition8Enum();186 pos=find( obj.cost_functions==1009); data(pos)=Outputdefinition8Enum();187 pos=find( obj.cost_functions==1010); data(pos)=Outputdefinition10Enum();163 num_cost_functions=size(self.cost_functions,2); 164 data=self.cost_functions; 165 pos=find(self.cost_functions==101); data(pos)=SurfaceAbsVelMisfitEnum(); 166 pos=find(self.cost_functions==102); data(pos)=SurfaceRelVelMisfitEnum(); 167 pos=find(self.cost_functions==103); data(pos)=SurfaceLogVelMisfitEnum(); 168 pos=find(self.cost_functions==104); data(pos)=SurfaceLogVxVyMisfitEnum(); 169 pos=find(self.cost_functions==105); data(pos)=SurfaceAverageVelMisfitEnum(); 170 pos=find(self.cost_functions==201); data(pos)=ThicknessAbsMisfitEnum(); 171 pos=find(self.cost_functions==501); data(pos)=DragCoefficientAbsGradientEnum(); 172 pos=find(self.cost_functions==502); data(pos)=RheologyBbarAbsGradientEnum(); 173 pos=find(self.cost_functions==503); data(pos)=ThicknessAbsGradientEnum(); 174 pos=find(self.cost_functions==504); data(pos)=ThicknessAlongGradientEnum(); 175 pos=find(self.cost_functions==505); data(pos)=ThicknessAcrossGradientEnum(); 176 pos=find(self.cost_functions==506); data(pos)=BalancethicknessMisfitEnum(); 177 pos=find(self.cost_functions==601); data(pos)=SurfaceAbsMisfitEnum(); 178 pos=find(self.cost_functions==1001); data(pos)=Outputdefinition1Enum(); 179 pos=find(self.cost_functions==1002); data(pos)=Outputdefinition2Enum(); 180 pos=find(self.cost_functions==1003); data(pos)=Outputdefinition3Enum(); 181 pos=find(self.cost_functions==1004); data(pos)=Outputdefinition4Enum(); 182 pos=find(self.cost_functions==1005); data(pos)=Outputdefinition5Enum(); 183 pos=find(self.cost_functions==1006); data(pos)=Outputdefinition6Enum(); 184 pos=find(self.cost_functions==1007); data(pos)=Outputdefinition7Enum(); 185 pos=find(self.cost_functions==1008); data(pos)=Outputdefinition8Enum(); 186 pos=find(self.cost_functions==1009); data(pos)=Outputdefinition8Enum(); 187 pos=find(self.cost_functions==1010); data(pos)=Outputdefinition10Enum(); 188 188 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3); 189 189 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer'); -
issm/trunk-jpl/src/m/classes/autodiff.m
r17720 r19040 20 20 %}}} 21 21 methods 22 function createxml( obj,fid) % {{{22 function createxml(self,fid) % {{{ 23 23 fprintf(fid, '<!-- autodiff -->\n'); 24 24 25 25 % automatic differentiation parameters 26 26 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="automatic differentiation parameters">','<section name="autodiff" />'); 27 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="isautodiff" type="',class( obj.isautodiff),'" optional="false">',' <section name="autodiff" />',' <option value="',convert2str(obj.isautodiff),'" type="string" default="true"></option>',' <help> indicates if the automatic differentiation is activated </help>',' </parameter>');27 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="isautodiff" type="',class(self.isautodiff),'" optional="false">',' <section name="autodiff" />',' <option value="',convert2str(self.isautodiff),'" type="string" default="true"></option>',' <help> indicates if the automatic differentiation is activated </help>',' </parameter>'); 28 28 29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="dependents" type="',class( obj.dependents),'" default="',convert2str(obj.dependents),'">',' <section name="autodiff" />',' <help> list of dependent variables </help>',' </parameter>');30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="independents" type="',class( obj.independents),'" default="',convert2str(obj.independents),'">',' <section name="autodiff" />',' <help> list of independent variables </help>',' </parameter>');31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="driver" type="',class( obj.driver),'" default="',convert2str(obj.driver),'">',' <section name="autodiff" />',' <help> ADOLC driver (''fos_forward'' or ''fov_forward'') </help>',' </parameter>');32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="obufsize" type="',class( obj.obufsize),'" default="',convert2str(obj.obufsize),'">',' <section name="autodiff" />',' <help> Number of operations per buffer (==OBUFSIZE in usrparms.h) </help>',' </parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lbufsize" type="',class( obj.lbufsize),'" default="',convert2str(obj.lbufsize),'">',' <section name="autodiff" />',' <help> Number of locations per buffer (==LBUFSIZE in usrparms.h) </help>',' </parameter>');34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cbufsize" type="',class( obj.cbufsize),'" default="',convert2str(obj.cbufsize),'">',' <section name="autodiff" />',' <help> Number of values per buffer (==CBUFSIZE in usrparms.h) </help>',' </parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="tbufsize" type="',class( obj.tbufsize),'" default="',convert2str(obj.tbufsize),'">',' <section name="autodiff" />',' <help> Number of taylors per buffer (&lt;=TBUFSIZE in usrparms.h) </help>',' </parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gcTriggerRatio" type="',class( obj.gcTriggerRatio),'" default="',convert2str(obj.gcTriggerRatio),'">',' <section name="autodiff" />',' <help> free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio </help>',' </parameter>');37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gcTriggerRatio" type="',class( obj.gcTriggerRatio),'" default="',convert2str(obj.gcTriggerRatio),'">',' <section name="autodiff" />',' <help> free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize </help>',' </parameter>');29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="dependents" type="',class(self.dependents),'" default="',convert2str(self.dependents),'">',' <section name="autodiff" />',' <help> list of dependent variables </help>',' </parameter>'); 30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="independents" type="',class(self.independents),'" default="',convert2str(self.independents),'">',' <section name="autodiff" />',' <help> list of independent variables </help>',' </parameter>'); 31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="driver" type="',class(self.driver),'" default="',convert2str(self.driver),'">',' <section name="autodiff" />',' <help> ADOLC driver (''fos_forward'' or ''fov_forward'') </help>',' </parameter>'); 32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="obufsize" type="',class(self.obufsize),'" default="',convert2str(self.obufsize),'">',' <section name="autodiff" />',' <help> Number of operations per buffer (==OBUFSIZE in usrparms.h) </help>',' </parameter>'); 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lbufsize" type="',class(self.lbufsize),'" default="',convert2str(self.lbufsize),'">',' <section name="autodiff" />',' <help> Number of locations per buffer (==LBUFSIZE in usrparms.h) </help>',' </parameter>'); 34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cbufsize" type="',class(self.cbufsize),'" default="',convert2str(self.cbufsize),'">',' <section name="autodiff" />',' <help> Number of values per buffer (==CBUFSIZE in usrparms.h) </help>',' </parameter>'); 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="tbufsize" type="',class(self.tbufsize),'" default="',convert2str(self.tbufsize),'">',' <section name="autodiff" />',' <help> Number of taylors per buffer (&lt;=TBUFSIZE in usrparms.h) </help>',' </parameter>'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gcTriggerRatio" type="',class(self.gcTriggerRatio),'" default="',convert2str(self.gcTriggerRatio),'">',' <section name="autodiff" />',' <help> free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio </help>',' </parameter>'); 37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gcTriggerRatio" type="',class(self.gcTriggerRatio),'" default="',convert2str(self.gcTriggerRatio),'">',' <section name="autodiff" />',' <help> free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize </help>',' </parameter>'); 38 38 39 39 fprintf(fid,'%s\n%s\n','</frame>'); 40 40 41 41 end % }}} 42 function obj= autodiff(varargin) % {{{42 function self = autodiff(varargin) % {{{ 43 43 switch nargin 44 44 case 0 45 obj=setdefaultparameters(obj);45 self=setdefaultparameters(self); 46 46 otherwise 47 47 error('constructor not supported'); 48 48 end 49 49 end % }}} 50 function obj = setdefaultparameters(obj) % {{{51 obj.obufsize = 524288;52 obj.lbufsize = 524288;53 obj.cbufsize = 524288;54 obj.tbufsize = 524288;55 obj.gcTriggerRatio=2.0;56 obj.gcTriggerMaxSize=65536;57 end % }}} 58 function md = checkconsistency( obj,md,solution,analyses) % {{{50 function self = setdefaultparameters(self) % {{{ 51 self.obufsize = 524288; 52 self.lbufsize = 524288; 53 self.cbufsize = 524288; 54 self.tbufsize = 524288; 55 self.gcTriggerRatio=2.0; 56 self.gcTriggerMaxSize=65536; 57 end % }}} 58 function md = checkconsistency(self,md,solution,analyses) % {{{ 59 59 60 60 %Early return 61 if ~ obj.isautodiff, return; end61 if ~self.isautodiff, return; end 62 62 63 63 %Driver value: … … 73 73 74 74 %go through our dependents and independents and check consistency: 75 for i=1:numel( obj.dependents),76 dep= obj.dependents{i};75 for i=1:numel(self.dependents), 76 dep=self.dependents{i}; 77 77 md=checkconsistency(dep,md,solution,analyses); 78 78 end 79 for i=1:numel( obj.independents),80 indep= obj.independents{i};81 md=checkconsistency(indep,md,i,solution,analyses, obj.driver);82 end 83 84 end % }}} 85 function disp( obj) % {{{79 for i=1:numel(self.independents), 80 indep=self.independents{i}; 81 md=checkconsistency(indep,md,i,solution,analyses,self.driver); 82 end 83 84 end % }}} 85 function disp(self) % {{{ 86 86 disp(sprintf(' automatic differentiation parameters:')); 87 fielddisplay( obj,'isautodiff','indicates if the automatic differentiation is activated');88 fielddisplay( obj,'dependents','list of dependent variables');89 fielddisplay( obj,'independents','list of independent variables');90 fielddisplay( obj,'driver','ADOLC driver (''fos_forward'' or ''fov_forward'')');91 fielddisplay( obj,'obufsize','Number of operations per buffer (==OBUFSIZE in usrparms.h)');92 fielddisplay( obj,'lbufsize','Number of locations per buffer (==LBUFSIZE in usrparms.h)');93 fielddisplay( obj,'cbufsize','Number of values per buffer (==CBUFSIZE in usrparms.h)');94 fielddisplay( obj,'tbufsize','Number of taylors per buffer (<=TBUFSIZE in usrparms.h)');95 fielddisplay( obj,'gcTriggerRatio','free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio');96 fielddisplay( obj,'gcTriggerMaxSize','free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize');97 end % }}} 98 function marshall( obj,md,fid) % {{{99 100 WriteData(fid,'object', obj,'fieldname','isautodiff','format','Boolean');101 WriteData(fid,'object', obj,'fieldname','driver','format','String');87 fielddisplay(self,'isautodiff','indicates if the automatic differentiation is activated'); 88 fielddisplay(self,'dependents','list of dependent variables'); 89 fielddisplay(self,'independents','list of independent variables'); 90 fielddisplay(self,'driver','ADOLC driver (''fos_forward'' or ''fov_forward'')'); 91 fielddisplay(self,'obufsize','Number of operations per buffer (==OBUFSIZE in usrparms.h)'); 92 fielddisplay(self,'lbufsize','Number of locations per buffer (==LBUFSIZE in usrparms.h)'); 93 fielddisplay(self,'cbufsize','Number of values per buffer (==CBUFSIZE in usrparms.h)'); 94 fielddisplay(self,'tbufsize','Number of taylors per buffer (<=TBUFSIZE in usrparms.h)'); 95 fielddisplay(self,'gcTriggerRatio','free location block sorting/consolidation triggered if the ratio between allocated and used locations exceeds gcTriggerRatio'); 96 fielddisplay(self,'gcTriggerMaxSize','free location block sorting/consolidation triggered if the allocated locations exceed gcTriggerMaxSize'); 97 end % }}} 98 function marshall(self,md,fid) % {{{ 99 100 WriteData(fid,'object',self,'fieldname','isautodiff','format','Boolean'); 101 WriteData(fid,'object',self,'fieldname','driver','format','String'); 102 102 103 103 %early return 104 if ~ obj.isautodiff,104 if ~self.isautodiff, 105 105 WriteData(fid,'data',false,'enum',AutodiffMassFluxSegmentsPresentEnum(),'format','Boolean'); 106 106 WriteData(fid,'data',false,'enum',AutodiffKeepEnum(),'format','Boolean'); … … 109 109 110 110 %buffer sizes {{{ 111 WriteData(fid,'object', obj,'fieldname','obufsize','format','Double');112 WriteData(fid,'object', obj,'fieldname','lbufsize','format','Double');113 WriteData(fid,'object', obj,'fieldname','cbufsize','format','Double');114 WriteData(fid,'object', obj,'fieldname','tbufsize','format','Double');115 WriteData(fid,'object', obj,'fieldname','gcTriggerRatio','format','Double');116 WriteData(fid,'object', obj,'fieldname','gcTriggerMaxSize','format','Double');111 WriteData(fid,'object',self,'fieldname','obufsize','format','Double'); 112 WriteData(fid,'object',self,'fieldname','lbufsize','format','Double'); 113 WriteData(fid,'object',self,'fieldname','cbufsize','format','Double'); 114 WriteData(fid,'object',self,'fieldname','tbufsize','format','Double'); 115 WriteData(fid,'object',self,'fieldname','gcTriggerRatio','format','Double'); 116 WriteData(fid,'object',self,'fieldname','gcTriggerMaxSize','format','Double'); 117 117 %}}} 118 118 %process dependent variables {{{ 119 num_dependent_objects=numel( obj.dependents);119 num_dependent_objects=numel(self.dependents); 120 120 WriteData(fid,'data',num_dependent_objects,'enum',AutodiffNumDependentObjectsEnum(),'format','Integer'); 121 121 … … 126 126 127 127 for i=1:num_dependent_objects, 128 dep= obj.dependents{i};128 dep=self.dependents{i}; 129 129 130 130 names{i}=dep.name; … … 138 138 %}}} 139 139 %process independent variables {{{ 140 num_independent_objects=numel( obj.independents);140 num_independent_objects=numel(self.independents); 141 141 WriteData(fid,'data',num_independent_objects,'enum',AutodiffNumIndependentObjectsEnum(),'format','Integer'); 142 142 … … 146 146 147 147 for i=1:num_independent_objects, 148 indep= obj.independents{i};148 indep=self.independents{i}; 149 149 150 150 names(i)=StringToEnum(indep.name); … … 156 156 %}}} 157 157 %if driver is fos_forward, build index: {{{ 158 if strcmpi( obj.driver,'fos_forward'),158 if strcmpi(self.driver,'fos_forward'), 159 159 index=0; 160 160 161 161 for i=1:num_independent_objects, 162 indep= obj.independents{i};162 indep=self.independents{i}; 163 163 if ~isnan(indep.fos_forward_index), 164 164 index=index+indep.fos_forward_index; … … 177 177 %}}} 178 178 %if driver is fos_reverse, build index: {{{ 179 if strcmpi( obj.driver,'fos_reverse'),179 if strcmpi(self.driver,'fos_reverse'), 180 180 index=0; 181 181 182 182 for i=1:num_dependent_objects, 183 dep= obj.dependents{i};183 dep=self.dependents{i}; 184 184 if ~isnan(dep.fos_reverse_index), 185 185 index=index+dep.fos_reverse_index; … … 198 198 %}}} 199 199 %if driver is fov_forward, build indices: {{{ 200 if strcmpi( obj.driver,'fov_forward'),200 if strcmpi(self.driver,'fov_forward'), 201 201 indices=0; 202 202 203 203 for i=1:num_independent_objects, 204 indep= obj.independents{i};204 indep=self.independents{i}; 205 205 if ~isempty(indep.fos_forward_index), 206 206 indices=indices+indep.fov_forward_indices; … … 221 221 mass_flux_segments=cell(0,1); 222 222 for i=1:num_dependent_objects, 223 dep= obj.dependents{i};223 dep=self.dependents{i}; 224 224 if strcmpi(dep.name,'MassFlux'), 225 225 mass_flux_segments{end+1,1}=dep.segments; … … 244 244 % 245 245 246 if length( obj.driver)<=3,246 if length(self.driver)<=3, 247 247 keep=false; %there is no "_reverse" string within the driver string: 248 248 else 249 if strncmpi( obj.driver(4:end),'_reverse',8),249 if strncmpi(self.driver(4:end),'_reverse',8), 250 250 keep=true; 251 251 else -
issm/trunk-jpl/src/m/classes/balancethickness.m
r18565 r19040 13 13 end 14 14 methods 15 function obj= balancethickness(varargin) % {{{15 function self = balancethickness(varargin) % {{{ 16 16 switch nargin 17 17 case 0 18 obj=setdefaultparameters(obj);18 self=setdefaultparameters(self); 19 19 otherwise 20 20 error('constructor not supported'); 21 21 end 22 22 end % }}} 23 function obj = setdefaultparameters(obj) % {{{23 function self = setdefaultparameters(self) % {{{ 24 24 25 25 %Type of stabilization used 26 obj.stabilization=1;26 self.stabilization=1; 27 27 28 28 end % }}} 29 function md = checkconsistency( obj,md,solution,analyses) % {{{29 function md = checkconsistency(self,md,solution,analyses) % {{{ 30 30 %Early return 31 31 if solution~=BalancethicknessSolutionEnum(), return; end … … 37 37 %md = checkfield(md,'fieldname','balancethickness.omega','size',[md.mesh.numberofvertices 1],'NaN',1,'>=',0); 38 38 end % }}} 39 function disp( obj) % {{{39 function disp(self) % {{{ 40 40 disp(sprintf(' balance thickness solution parameters:')); 41 41 42 fielddisplay( obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');43 fielddisplay( obj,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt) [m/yr]');44 fielddisplay( obj,'stabilization','0: None, 1: SU, 2: SSA''s artificial diffusivity, 3:DG');42 fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]'); 43 fielddisplay(self,'thickening_rate','ice thickening rate used in the mass conservation (dh/dt) [m/yr]'); 44 fielddisplay(self,'stabilization','0: None, 1: SU, 2: SSA''s artificial diffusivity, 3:DG'); 45 45 46 46 end % }}} 47 function marshall( obj,md,fid) % {{{47 function marshall(self,md,fid) % {{{ 48 48 49 49 yts=365.0*24.0*3600.0; 50 50 51 WriteData(fid,'object', obj,'fieldname','spcthickness','format','DoubleMat','mattype',1);52 WriteData(fid,'object', obj,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts);53 WriteData(fid,'object', obj,'fieldname','stabilization','format','Integer');51 WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1); 52 WriteData(fid,'object',self,'fieldname','thickening_rate','format','DoubleMat','mattype',1,'scale',1./yts); 53 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer'); 54 54 55 WriteData(fid,'object', obj,'fieldname','omega','format','DoubleMat','mattype',1);55 WriteData(fid,'object',self,'fieldname','omega','format','DoubleMat','mattype',1); 56 56 end % }}} 57 57 end -
issm/trunk-jpl/src/m/classes/basalforcings.m
r19027 r19040 11 11 end 12 12 methods 13 function createxml( obj,fid) % {{{13 function createxml(self,fid) % {{{ 14 14 fprintf(fid, '\n\n'); 15 15 fprintf(fid, '%s\n', '<!-- basalforcings -->'); 16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="melting_rate" type="', class( obj.melting_rate),'" default="', num2str(obj.melting_rate),'">', ' <section name="basalforcings" />',' <help> basal melting rate (positive if melting) [m/yr] </help>','</parameter>');17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="geothermalflux" type="', class( obj.geothermalflux),'" default="', num2str(obj.geothermalflux),'">', ' <section name="basalforcings" />',' <help> geothermal heat flux [W/m^2] </help>','</parameter>');16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="melting_rate" type="', class(self.melting_rate),'" default="', num2str(self.melting_rate),'">', ' <section name="basalforcings" />',' <help> basal melting rate (positive if melting) [m/yr] </help>','</parameter>'); 17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="geothermalflux" type="', class(self.geothermalflux),'" default="', num2str(self.geothermalflux),'">', ' <section name="basalforcings" />',' <help> geothermal heat flux [W/m^2] </help>','</parameter>'); 18 18 19 19 end % }}} 20 function obj= basalforcings(varargin) % {{{20 function self = basalforcings(varargin) % {{{ 21 21 switch nargin 22 22 case 0 23 obj=setdefaultparameters(obj);23 self=setdefaultparameters(self); 24 24 otherwise 25 25 error('constructor not supported'); … … 39 39 40 40 end % }}} 41 function obj = setdefaultparameters(obj) % {{{41 function self = setdefaultparameters(self) % {{{ 42 42 43 43 end % }}} 44 function md = checkconsistency( obj,md,solution,analyses) % {{{44 function md = checkconsistency(self,md,solution,analyses) % {{{ 45 45 46 46 if ismember(MasstransportAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.ismasstransport==0), … … 58 58 end 59 59 end % }}} 60 function disp( obj) % {{{60 function disp(self) % {{{ 61 61 disp(sprintf(' basal forcings parameters:')); 62 62 63 fielddisplay( obj,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]');64 fielddisplay( obj,'floatingice_melting_rate','basal melting rate (positive if melting) [m/yr]');65 fielddisplay( obj,'geothermalflux','geothermal heat flux [W/m^2]');63 fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]'); 64 fielddisplay(self,'floatingice_melting_rate','basal melting rate (positive if melting) [m/yr]'); 65 fielddisplay(self,'geothermalflux','geothermal heat flux [W/m^2]'); 66 66 67 67 end % }}} 68 function marshall( obj,md,fid) % {{{68 function marshall(self,md,fid) % {{{ 69 69 70 70 yts=365.0*24.0*3600.0; 71 71 72 72 WriteData(fid,'enum',BasalforcingsEnum(),'data',FloatingMeltRateEnum(),'format','Integer'); 73 WriteData(fid,'object', obj,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)74 WriteData(fid,'object', obj,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)75 WriteData(fid,'object', obj,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);73 WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1) 74 WriteData(fid,'object',self,'fieldname','floatingice_melting_rate','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1) 75 WriteData(fid,'object',self,'fieldname','geothermalflux','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 76 76 end % }}} 77 77 end -
issm/trunk-jpl/src/m/classes/calving.m
r19027 r19040 11 11 end 12 12 methods 13 function obj= calving(varargin) % {{{13 function self = calving(varargin) % {{{ 14 14 switch nargin 15 15 case 0 16 obj=setdefaultparameters(obj);16 self=setdefaultparameters(self); 17 17 case 1 18 18 inputstruct=varargin{1}; … … 22 22 fieldname = list1{i}; 23 23 if ismember(fieldname,list2), 24 obj.(fieldname) = inputstruct.(fieldname);24 self.(fieldname) = inputstruct.(fieldname); 25 25 end 26 26 end … … 29 29 end 30 30 end % }}} 31 function obj = setdefaultparameters(obj) % {{{31 function self = setdefaultparameters(self) % {{{ 32 32 33 33 %stabilization = 2 by default 34 obj.stabilization = 2;34 self.stabilization = 2; 35 35 36 36 end % }}} 37 function md = checkconsistency( obj,md,solution,analyses) % {{{37 function md = checkconsistency(self,md,solution,analyses) % {{{ 38 38 %Early return 39 39 if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end … … 43 43 md = checkfield(md,'fieldname','calving.meltingrate(1:md.mesh.numberofvertices,:)','>=',0,'timeseries',1,'NaN',1); 44 44 end % }}} 45 function disp( obj) % {{{45 function disp(self) % {{{ 46 46 disp(sprintf(' Calving parameters:')); 47 fielddisplay( obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');48 fielddisplay( obj,'calvingrate','calving rate at given location [m/a]');49 fielddisplay( obj,'meltingrate','melting rate at given location [m/a]');47 fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'); 48 fielddisplay(self,'calvingrate','calving rate at given location [m/a]'); 49 fielddisplay(self,'meltingrate','melting rate at given location [m/a]'); 50 50 end % }}} 51 function marshall( obj,md,fid) % {{{51 function marshall(self,md,fid) % {{{ 52 52 yts=365.0*24.0*3600.0; 53 53 WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer'); 54 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data', obj.stabilization,'format','Integer');55 WriteData(fid,'object', obj,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);56 WriteData(fid,'object', obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);54 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer'); 55 WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts); 56 WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts); 57 57 end % }}} 58 58 end -
issm/trunk-jpl/src/m/classes/calvingdev.m
r19034 r19040 11 11 end 12 12 methods 13 function obj= calvingdev(varargin) % {{{13 function self = calvingdev(varargin) % {{{ 14 14 switch nargin 15 15 case 0 16 obj=setdefaultparameters(obj);16 self=setdefaultparameters(self); 17 17 case 1 18 18 inputstruct=varargin{1}; … … 22 22 fieldname = list1{i}; 23 23 if ismember(fieldname,list2), 24 obj.(fieldname) = inputstruct.(fieldname);24 self.(fieldname) = inputstruct.(fieldname); 25 25 end 26 26 end … … 29 29 end 30 30 end % }}} 31 function obj = setdefaultparameters(obj) % {{{31 function self = setdefaultparameters(self) % {{{ 32 32 33 33 %stabilization = 2 by default 34 obj.stabilization = 2;34 self.stabilization = 2; 35 35 36 36 %Proportionality coefficient in Pi model 37 obj.coeff=2e13;37 self.coeff=2e13; 38 38 end % }}} 39 function md = checkconsistency( obj,md,solution,analyses) % {{{39 function md = checkconsistency(self,md,solution,analyses) % {{{ 40 40 %Early return 41 41 if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end … … 45 45 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0); 46 46 end % }}} 47 function disp( obj) % {{{47 function disp(self) % {{{ 48 48 disp(sprintf(' Calving Pi parameters:')); 49 fielddisplay( obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');50 fielddisplay( obj,'coeff','proportionality coefficient in Pi model');51 fielddisplay( obj,'meltingrate','melting rate at given location [m/a]');49 fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'); 50 fielddisplay(self,'coeff','proportionality coefficient in Pi model'); 51 fielddisplay(self,'meltingrate','melting rate at given location [m/a]'); 52 52 53 53 end % }}} 54 function marshall( obj,md,fid) % {{{54 function marshall(self,md,fid) % {{{ 55 55 yts=365.0*24.0*3600.0; 56 56 WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingDevEnum(),'format','Integer'); 57 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data', obj.stabilization,'format','Integer');58 WriteData(fid,'enum',CalvingpiCoeffEnum(),'data', obj.coeff,'format','DoubleMat','mattype',1);59 WriteData(fid,'class','calving','object', obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts);57 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer'); 58 WriteData(fid,'enum',CalvingpiCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1); 59 WriteData(fid,'class','calving','object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts); 60 60 end % }}} 61 61 end -
issm/trunk-jpl/src/m/classes/calvinglevermann.m
r19027 r19040 11 11 end 12 12 methods 13 function obj= calvinglevermann(varargin) % {{{13 function self = calvinglevermann(varargin) % {{{ 14 14 switch nargin 15 15 case 0 16 obj=setdefaultparameters(obj);16 self=setdefaultparameters(self); 17 17 case 1 18 18 inputstruct=varargin{1}; … … 22 22 fieldname = list1{i}; 23 23 if ismember(fieldname,list2), 24 obj.(fieldname) = inputstruct.(fieldname);24 self.(fieldname) = inputstruct.(fieldname); 25 25 end 26 26 end … … 29 29 end 30 30 end % }}} 31 function obj = setdefaultparameters(obj) % {{{31 function self = setdefaultparameters(self) % {{{ 32 32 33 33 %stabilization = 2 by default 34 obj.stabilization = 2;34 self.stabilization = 2; 35 35 36 36 %Proportionality coefficient in Levermann model 37 obj.coeff=2e13;37 self.coeff=2e13; 38 38 end % }}} 39 function md = checkconsistency( obj,md,solution,analyses) % {{{39 function md = checkconsistency(self,md,solution,analyses) % {{{ 40 40 %Early return 41 41 if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end … … 45 45 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0); 46 46 end % }}} 47 function disp( obj) % {{{47 function disp(self) % {{{ 48 48 disp(sprintf(' Calving Levermann parameters:')); 49 fielddisplay( obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');50 fielddisplay( obj,'coeff','proportionality coefficient in Levermann model');51 fielddisplay( obj,'meltingrate','melting rate at given location [m/a]');49 fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'); 50 fielddisplay(self,'coeff','proportionality coefficient in Levermann model'); 51 fielddisplay(self,'meltingrate','melting rate at given location [m/a]'); 52 52 53 53 end % }}} 54 function marshall( obj,md,fid) % {{{54 function marshall(self,md,fid) % {{{ 55 55 yts=365.0*24.0*3600.0; 56 56 WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer'); 57 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data', obj.stabilization,'format','Integer');58 WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data', obj.coeff,'format','DoubleMat','mattype',1);59 WriteData(fid,'object', obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);57 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer'); 58 WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1); 59 WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts); 60 60 end % }}} 61 61 end -
issm/trunk-jpl/src/m/classes/calvingpi.m
r19027 r19040 11 11 end 12 12 methods 13 function obj= calvingpi(varargin) % {{{13 function self = calvingpi(varargin) % {{{ 14 14 switch nargin 15 15 case 0 16 obj=setdefaultparameters(obj);16 self=setdefaultparameters(self); 17 17 case 1 18 18 inputstruct=varargin{1}; … … 22 22 fieldname = list1{i}; 23 23 if ismember(fieldname,list2), 24 obj.(fieldname) = inputstruct.(fieldname);24 self.(fieldname) = inputstruct.(fieldname); 25 25 end 26 26 end … … 29 29 end 30 30 end % }}} 31 function obj = setdefaultparameters(obj) % {{{31 function self = setdefaultparameters(self) % {{{ 32 32 33 33 %stabilization = 2 by default 34 obj.stabilization = 2;34 self.stabilization = 2; 35 35 36 36 %Proportionality coefficient in Pi model 37 obj.coeff=2e13;37 self.coeff=2e13; 38 38 end % }}} 39 function md = checkconsistency( obj,md,solution,analyses) % {{{39 function md = checkconsistency(self,md,solution,analyses) % {{{ 40 40 %Early return 41 41 if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end … … 45 45 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0); 46 46 end % }}} 47 function disp( obj) % {{{47 function disp(self) % {{{ 48 48 disp(sprintf(' Calving Pi parameters:')); 49 fielddisplay( obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding');50 fielddisplay( obj,'coeff','proportionality coefficient in Pi model');51 fielddisplay( obj,'meltingrate','melting rate at given location [m/a]');49 fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'); 50 fielddisplay(self,'coeff','proportionality coefficient in Pi model'); 51 fielddisplay(self,'meltingrate','melting rate at given location [m/a]'); 52 52 53 53 end % }}} 54 function marshall( obj,md,fid) % {{{54 function marshall(self,md,fid) % {{{ 55 55 yts=365.0*24.0*3600.0; 56 56 WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingPiEnum(),'format','Integer'); 57 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data', obj.stabilization,'format','Integer');58 WriteData(fid,'enum',CalvingpiCoeffEnum(),'data', obj.coeff,'format','DoubleMat','mattype',1);59 WriteData(fid,'object', obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts);57 WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer'); 58 WriteData(fid,'enum',CalvingpiCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1); 59 WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts); 60 60 end % }}} 61 61 end -
issm/trunk-jpl/src/m/classes/clusters/generic.m
r18089 r19040 24 24 end 25 25 methods 26 function createxml( obj,fid) % {{{26 function createxml(self,fid) % {{{ 27 27 fprintf(fid, '\n\n'); 28 28 fprintf(fid, '%s\n', '<!-- generic -->'); 29 29 30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="name" type="',class( obj.name),'" default="',convert2str(obj.name),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="login" type="',class( obj.login),'" default="',convert2str(obj.login),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="np" type="',class( obj.np),'" default="',convert2str(obj.np),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="port" type="',class( obj.port),'" default="',convert2str(obj.port),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="codepath" type="',class( obj.codepath),'" default="',convert2str(obj.codepath),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="name" type="',class(self.name),'" default="',convert2str(self.name),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="login" type="',class(self.login),'" default="',convert2str(self.login),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="np" type="',class(self.np),'" default="',convert2str(self.np),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="port" type="',class(self.port),'" default="',convert2str(self.port),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="codepath" type="',class(self.codepath),'" default="',convert2str(self.codepath),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 35 35 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="executionpath" type="',class( obj.executionpath),'" default="',convert2str(obj.executionpath),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="etcpath" type="',class( obj.etcpath),'" default="',convert2str(obj.etcpath),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');38 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="valgrind" type="',class( obj.valgrind),'" default="',convert2str(obj.valgrind),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');39 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="valgrindlib" type="',class( obj.valgrindlib),'" default="',convert2str(obj.valgrindlib),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="valgrindsup" type="',class( obj.valgrindsup),'" default="',convert2str(obj.valgrindsup),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="verbose" type="',class( obj.verbose),'" default="',convert2str(obj.verbose),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="executionpath" type="',class(self.executionpath),'" default="',convert2str(self.executionpath),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="etcpath" type="',class(self.etcpath),'" default="',convert2str(self.etcpath),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 38 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="valgrind" type="',class(self.valgrind),'" default="',convert2str(self.valgrind),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 39 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="valgrindlib" type="',class(self.valgrindlib),'" default="',convert2str(self.valgrindlib),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="valgrindsup" type="',class(self.valgrindsup),'" default="',convert2str(self.valgrindsup),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="verbose" type="',class(self.verbose),'" default="',convert2str(self.verbose),'">', ' <section name="cluster" />',' <help> N/A </help>','</parameter>'); 42 42 43 43 end % }}} -
issm/trunk-jpl/src/m/classes/constants.m
r18503 r19040 12 12 end 13 13 methods 14 function createxml( obj,fid) % {{{14 function createxml(self,fid) % {{{ 15 15 fprintf(fid, '\n\n'); 16 16 fprintf(fid, '%s\n', '<!-- constants -->'); 17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="g" type="',class( obj.g),'" default="',num2str(obj.g),'">',' <section name="constants" />',' <help> gravitational acceleration [m/s^2] </help>','</parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="yts" type="',class( obj.yts),'" default="',num2str(obj.yts),'">',' <section name="constants" />',' <help> number of seconds in a year [s/yr] </help>','</parameter>');19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="referencetemperature" type="',class( obj.referencetemperature),'" default="',num2str(obj.referencetemperature),'">',' <section name="constants" />',' <help> reference temperature used in the enthalpy model [K] </help>','</parameter>');17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="g" type="',class(self.g),'" default="',num2str(self.g),'">',' <section name="constants" />',' <help> gravitational acceleration [m/s^2] </help>','</parameter>'); 18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="yts" type="',class(self.yts),'" default="',num2str(self.yts),'">',' <section name="constants" />',' <help> number of seconds in a year [s/yr] </help>','</parameter>'); 19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="referencetemperature" type="',class(self.referencetemperature),'" default="',num2str(self.referencetemperature),'">',' <section name="constants" />',' <help> reference temperature used in the enthalpy model [K] </help>','</parameter>'); 20 20 end % }}} 21 function obj= constants(varargin) % {{{21 function self = constants(varargin) % {{{ 22 22 switch nargin 23 23 case 0 24 obj=setdefaultparameters(obj);24 self=setdefaultparameters(self); 25 25 otherwise 26 26 error('constructor not supported'); 27 27 end 28 28 end % }}} 29 function obj = setdefaultparameters(obj) % {{{29 function self = setdefaultparameters(self) % {{{ 30 30 31 31 %acceleration due to gravity (m/s^2) 32 obj.g=9.81;32 self.g=9.81; 33 33 34 34 %Earth's rotation speed 35 obj.omega = 7.292*1e-5;35 self.omega = 7.292*1e-5; 36 36 37 37 %converstion from year to seconds 38 obj.yts=365*24*3600;38 self.yts=365*24*3600; 39 39 40 40 %the reference temperature for enthalpy model (cf Aschwanden) 41 obj.referencetemperature=223.15;41 self.referencetemperature=223.15; 42 42 43 43 end % }}} 44 function md = checkconsistency( obj,md,solution,analyses) % {{{44 function md = checkconsistency(self,md,solution,analyses) % {{{ 45 45 46 46 md = checkfield(md,'fieldname','constants.g','>=',0,'size',[1 1]); %We allow 0 for validation tests … … 50 50 51 51 end % }}} 52 function disp( obj) % {{{52 function disp(self) % {{{ 53 53 disp(sprintf(' constants parameters:')); 54 54 55 fielddisplay( obj,'g','gravitational acceleration [m/s^2]');56 fielddisplay( obj,'omega','angular velocity of Earth [rad/s]');57 fielddisplay( obj,'yts','number of seconds in a year [s/yr]');58 fielddisplay( obj,'referencetemperature','reference temperature used in the enthalpy model [K]');55 fielddisplay(self,'g','gravitational acceleration [m/s^2]'); 56 fielddisplay(self,'omega','angular velocity of Earth [rad/s]'); 57 fielddisplay(self,'yts','number of seconds in a year [s/yr]'); 58 fielddisplay(self,'referencetemperature','reference temperature used in the enthalpy model [K]'); 59 59 60 60 end % }}} 61 function marshall( obj,md,fid) % {{{62 WriteData(fid,'object', obj,'fieldname','g','format','Double');63 WriteData(fid,'object', obj,'fieldname','omega','format','Double');64 WriteData(fid,'object', obj,'fieldname','yts','format','Double');65 WriteData(fid,'object', obj,'fieldname','referencetemperature','format','Double');61 function marshall(self,md,fid) % {{{ 62 WriteData(fid,'object',self,'fieldname','g','format','Double'); 63 WriteData(fid,'object',self,'fieldname','omega','format','Double'); 64 WriteData(fid,'object',self,'fieldname','yts','format','Double'); 65 WriteData(fid,'object',self,'fieldname','referencetemperature','format','Double'); 66 66 end % }}} 67 67 end -
issm/trunk-jpl/src/m/classes/damage.m
r19027 r19040 32 32 end 33 33 methods 34 function createxml( obj,fid) % {{{34 function createxml(self,fid) % {{{ 35 35 fprintf(fid, '\n\n'); 36 36 fprintf(fid, '%s\n', '<!-- damage -->'); 37 37 fprintf(fid, '%s\n', '<!-- Note: this class depends on different input of law -->'); 38 38 39 %fprintf(fid,'%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="law" type="logical"', '" default="', num2str( obj.law),'">', ' <section name="damage" />',' <help> damage law (string) from {"undamaged","pralong"} </help>','</parameter>');39 %fprintf(fid,'%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="law" type="logical"', '" default="', num2str(self.law),'">', ' <section name="damage" />',' <help> damage law (string) from {"undamaged","pralong"} </help>','</parameter>'); 40 40 % drop-down 41 41 fprintf(fid,'%s%s%s%s%s\n\t%s\n','<parameter key ="law" type="','alternative','" optional="','false','">','<section name="damage" />'); … … 49 49 fprintf(fid,'\t%s%s%s%s%s\n\t\t%s\n','<option value="pralong" type="','string','" default="','false','">','<help> law = pralong </help>'); 50 50 51 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="stress_threshold" type="',class( obj.stress_threshold),'" default="',num2str(obj.stress_threshold),'">','<help> damage stress threshold [Pa] </help>','</parameter>');52 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c1" type="', class( obj.c1),'" default="', num2str(obj.c1),'">', '<help> damage parameter 1 </help>','</parameter>');53 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c2" type="', class( obj.c2),'" default="', num2str(obj.c2),'">','<help> damage parameter 2 </help>','</parameter>');54 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c3" type="', class( obj.c3),'" default="', num2str(obj.c3),'">','<help> damage parameter 3 [W/m^2] </help>','</parameter>');55 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c4" type="', class( obj.c4),'" default="', num2str(obj.c4),'">','<help> damage parameter 4 </help>','</parameter>');56 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="healing" type="', class( obj.healing),'" default="', num2str(obj.healing),'">','<help> damage healing parameter 1 </help>','</parameter>');57 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="equiv_stress" type="', class( obj.equiv_stress),'" default="',convert2str(obj.equiv_stress),'">','<help> 0: von Mises </help>','</parameter>');58 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="requested_outputs" type="', class( obj.requested_outputs),'" default="',convert2str(obj.requested_outputs),'">','<help> additional outputs requested </help>','</parameter>');51 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="stress_threshold" type="',class(self.stress_threshold),'" default="',num2str(self.stress_threshold),'">','<help> damage stress threshold [Pa] </help>','</parameter>'); 52 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c1" type="', class(self.c1),'" default="', num2str(self.c1),'">', '<help> damage parameter 1 </help>','</parameter>'); 53 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c2" type="', class(self.c2),'" default="', num2str(self.c2),'">','<help> damage parameter 2 </help>','</parameter>'); 54 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c3" type="', class(self.c3),'" default="', num2str(self.c3),'">','<help> damage parameter 3 [W/m^2] </help>','</parameter>'); 55 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="c4" type="', class(self.c4),'" default="', num2str(self.c4),'">','<help> damage parameter 4 </help>','</parameter>'); 56 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="healing" type="', class(self.healing),'" default="', num2str(self.healing),'">','<help> damage healing parameter 1 </help>','</parameter>'); 57 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="equiv_stress" type="', class(self.equiv_stress),'" default="',convert2str(self.equiv_stress),'">','<help> 0: von Mises </help>','</parameter>'); 58 fprintf(fid,'\t\t%s%s%s%s%s\n\t\t\t%s\n\t\t%s\n', '<parameter key ="requested_outputs" type="', class(self.requested_outputs),'" default="',convert2str(self.requested_outputs),'">','<help> additional outputs requested </help>','</parameter>'); 59 59 60 60 … … 67 67 68 68 69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="D" type="', class( obj.D),'" default="', num2str(obj.D),'">', ' <section name="damage" />',' <help> damage tensor (scalar) </help>','</parameter>');70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="law" type="', class( obj.law),'" default="', num2str(obj.law),'">', ' <section name="damage" />',' <help> damage law (string) from {"undamaged","pralong"} </help>','</parameter>');71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcdamage" type="', class( obj.spcdamage),'" default="', num2str(obj.spcdamage),'">', ' <section name="damage" />',' <help> damage constraints (NaN means no constraint) </help>','</parameter>');72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="max_damage" type="', class( obj.max_damage),'" default="', num2str(obj.max_damage),'">', ' <section name="damage" />',' <help> maximum possible damage (0&lt;=max_damage&lt;1) </help>','</parameter>');69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="D" type="', class(self.D),'" default="', num2str(self.D),'">', ' <section name="damage" />',' <help> damage tensor (scalar) </help>','</parameter>'); 70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="law" type="', class(self.law),'" default="', num2str(self.law),'">', ' <section name="damage" />',' <help> damage law (string) from {"undamaged","pralong"} </help>','</parameter>'); 71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcdamage" type="', class(self.spcdamage),'" default="', num2str(self.spcdamage),'">', ' <section name="damage" />',' <help> damage constraints (NaN means no constraint) </help>','</parameter>'); 72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="max_damage" type="', class(self.max_damage),'" default="', num2str(self.max_damage),'">', ' <section name="damage" />',' <help> maximum possible damage (0&lt;=max_damage&lt;1) </help>','</parameter>'); 73 73 74 74 % stabilization (0,1, or 2) drop-down … … 79 79 fprintf(fid, '%s\n','</parameter>'); 80 80 81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="maxiter" type="', class( obj.maxiter),'" default="', num2str(obj.maxiter),'">', ' <section name="damage" />',' <help> maximum number of non linear iterations </help>','</parameter>');82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_lock" type="', class( obj.penalty_lock),'" default="', num2str(obj.penalty_lock),'">', ' <section name="damage" />',' <help> stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>','</parameter>');83 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_threshold" type="', class( obj.penalty_threshold),'" default="', num2str(obj.penalty_threshold),'">', ' <section name="damage" />',' <help> threshold to declare convergence of damage evolution solution (default is 0) </help>','</parameter>');84 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_factor" type="', class( obj.penalty_factor),'" default="', num2str(obj.penalty_factor),'">', ' <section name="damage" />',' <help> scaling exponent (default is 3) </help>','</parameter>');81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="maxiter" type="', class(self.maxiter),'" default="', num2str(self.maxiter),'">', ' <section name="damage" />',' <help> maximum number of non linear iterations </help>','</parameter>'); 82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_lock" type="', class(self.penalty_lock),'" default="', num2str(self.penalty_lock),'">', ' <section name="damage" />',' <help> stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>','</parameter>'); 83 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_threshold" type="', class(self.penalty_threshold),'" default="', num2str(self.penalty_threshold),'">', ' <section name="damage" />',' <help> threshold to declare convergence of damage evolution solution (default is 0) </help>','</parameter>'); 84 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="penalty_factor" type="', class(self.penalty_factor),'" default="', num2str(self.penalty_factor),'">', ' <section name="damage" />',' <help> scaling exponent (default is 3) </help>','</parameter>'); 85 85 86 86 end % }}} 87 87 88 function obj= damage(varargin) % {{{88 function self = damage(varargin) % {{{ 89 89 switch nargin 90 90 case 0 91 obj=setdefaultparameters(obj);91 self=setdefaultparameters(self); 92 92 case 1 93 93 inputstruct=varargin{1}; … … 97 97 fieldname = list1{i}; 98 98 if ismember(fieldname,list2), 99 obj.(fieldname) = inputstruct.(fieldname);99 self.(fieldname) = inputstruct.(fieldname); 100 100 end 101 101 end … … 104 104 end 105 105 end % }}} 106 function obj = setdefaultparameters(obj) % {{{106 function self = setdefaultparameters(self) % {{{ 107 107 108 108 %damage parameters: 109 obj.isdamage=0;110 obj.D=0;111 obj.law=0;112 113 obj.max_damage=1-1e-5; %if damage reaches 1, solve becomes singular, as viscosity becomes nil109 self.isdamage=0; 110 self.D=0; 111 self.law=0; 112 113 self.max_damage=1-1e-5; %if damage reaches 1, solve becomes singular, as viscosity becomes nil 114 114 115 115 %Type of stabilization used 116 obj.stabilization=2;116 self.stabilization=2; 117 117 118 118 %Maximum number of iterations 119 obj.maxiter=100;119 self.maxiter=100; 120 120 121 121 %finite element interpolation 122 obj.elementinterp='P1';122 self.elementinterp='P1'; 123 123 124 124 %factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor 125 obj.penalty_factor=3;125 self.penalty_factor=3; 126 126 127 127 %stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization) 128 obj.penalty_lock=0;128 self.penalty_lock=0; 129 129 130 130 %threshold to declare convergence of thermal solution (default is 0) 131 obj.penalty_threshold=0;131 self.penalty_threshold=0; 132 132 133 133 %damage evolution parameters 134 obj.stress_threshold=0;135 obj.healing=0;136 obj.c1=0;137 obj.c2=0;138 obj.c3=0;139 obj.c4=0;140 obj.equiv_stress=0;134 self.stress_threshold=0; 135 self.healing=0; 136 self.c1=0; 137 self.c2=0; 138 self.c3=0; 139 self.c4=0; 140 self.equiv_stress=0; 141 141 142 142 %output default: 143 obj.requested_outputs={'default'};144 145 end % }}} 146 function md = checkconsistency( obj,md,solution,analyses) % {{{143 self.requested_outputs={'default'}; 144 145 end % }}} 146 function md = checkconsistency(self,md,solution,analyses) % {{{ 147 147 148 148 md = checkfield(md,'fieldname','damage.isdamage','values',[1,0]); 149 if obj.isdamage,149 if self.isdamage, 150 150 md = checkfield(md,'fieldname','damage.law','numel',[1],'values',[0,1,2]); 151 md = checkfield(md,'fieldname','damage.D','>=',0,'<=', obj.max_damage,'size',[md.mesh.numberofvertices 1]);151 md = checkfield(md,'fieldname','damage.D','>=',0,'<=',self.max_damage,'size',[md.mesh.numberofvertices 1]); 152 152 md = checkfield(md,'fieldname','damage.spcdamage','timeseries',1); 153 153 md = checkfield(md,'fieldname','damage.max_damage','<',1,'>=',0); … … 166 166 md = checkfield(md,'fieldname','damage.equiv_stress','numel',[1],'values',[0 1]); 167 167 md = checkfield(md,'fieldname','damage.requested_outputs','stringrow',1); 168 elseif ( obj.law~=0),168 elseif (self.law~=0), 169 169 if (solution==DamageEvolutionSolutionEnum), 170 170 error('Invalid evolution law (md.damage.law) for a damage solution'); … … 180 180 end 181 181 end % }}} 182 function disp( obj) % {{{182 function disp(self) % {{{ 183 183 disp(sprintf(' Damage:\n')); 184 184 185 fielddisplay( obj,'isdamage','is damage mechanics being used? {true,false}');186 if obj.isdamage,187 fielddisplay( obj,'law','damage law {''0: undamaged'',''1: pralong''}');188 fielddisplay( obj,'D','damage tensor (scalar)');189 fielddisplay( obj,'spcdamage','damage constraints (NaN means no constraint)');190 fielddisplay( obj,'max_damage','maximum possible damage (0<=max_damage<1)');185 fielddisplay(self,'isdamage','is damage mechanics being used? {true,false}'); 186 if self.isdamage, 187 fielddisplay(self,'law','damage law {''0: undamaged'',''1: pralong''}'); 188 fielddisplay(self,'D','damage tensor (scalar)'); 189 fielddisplay(self,'spcdamage','damage constraints (NaN means no constraint)'); 190 fielddisplay(self,'max_damage','maximum possible damage (0<=max_damage<1)'); 191 191 192 fielddisplay( obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');193 fielddisplay( obj,'maxiter','maximum number of non linear iterations');194 fielddisplay( obj,'elementinterp','interpolation scheme for finite elements {''P1'',''P2''}');195 fielddisplay( obj,'penalty_lock','stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)');196 fielddisplay( obj,'penalty_threshold','threshold to declare convergence of damage evolution solution (default is 0)');197 fielddisplay( obj,'penalty_factor','scaling exponent (default is 3)');198 fielddisplay( obj,'c1','damage parameter 1');199 fielddisplay( obj,'c2','damage parameter 2');200 fielddisplay( obj,'c3','damage parameter 3');201 fielddisplay( obj,'c4','damage parameter 4');202 fielddisplay( obj,'healing','damage healing parameter');203 fielddisplay( obj,'stress_threshold','damage stress threshold [Pa]');204 fielddisplay( obj,'equiv_stress','0: von Mises, 1: max principal');205 fielddisplay( obj,'requested_outputs','additional outputs requested');206 end 207 208 end % }}} 209 function marshall( obj,md,fid) % {{{210 211 WriteData(fid,'object', obj,'fieldname','isdamage','format','Boolean');212 if obj.isdamage,213 WriteData(fid,'object', obj,'fieldname','law','format','Integer');214 WriteData(fid,'object', obj,'fieldname','D','format','DoubleMat','mattype',1);215 WriteData(fid,'object', obj,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);216 WriteData(fid,'object', obj,'fieldname','max_damage','format','Double');217 218 WriteData(fid,'object', obj,'fieldname','stabilization','format','Integer');219 WriteData(fid,'object', obj,'fieldname','maxiter','format','Integer');220 WriteData(fid,'enum',DamageElementinterpEnum(),'data',StringToEnum( obj.elementinterp),'format','Integer');221 WriteData(fid,'object', obj,'fieldname','penalty_threshold','format','Integer');222 WriteData(fid,'object', obj,'fieldname','penalty_lock','format','Integer');223 WriteData(fid,'object', obj,'fieldname','penalty_factor','format','Double');224 WriteData(fid,'object', obj,'fieldname','c1','format','Double');225 WriteData(fid,'object', obj,'fieldname','c2','format','Double');226 WriteData(fid,'object', obj,'fieldname','c3','format','Double');227 WriteData(fid,'object', obj,'fieldname','c4','format','Double');228 WriteData(fid,'object', obj,'fieldname','stress_threshold','format','Double');229 WriteData(fid,'object', obj,'fieldname','healing','format','Double');230 WriteData(fid,'object', obj,'fieldname','equiv_stress','format','Integer');192 fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG'); 193 fielddisplay(self,'maxiter','maximum number of non linear iterations'); 194 fielddisplay(self,'elementinterp','interpolation scheme for finite elements {''P1'',''P2''}'); 195 fielddisplay(self,'penalty_lock','stabilize unstable damage constraints that keep zigzagging after n iteration (default is 0, no stabilization)'); 196 fielddisplay(self,'penalty_threshold','threshold to declare convergence of damage evolution solution (default is 0)'); 197 fielddisplay(self,'penalty_factor','scaling exponent (default is 3)'); 198 fielddisplay(self,'c1','damage parameter 1'); 199 fielddisplay(self,'c2','damage parameter 2'); 200 fielddisplay(self,'c3','damage parameter 3'); 201 fielddisplay(self,'c4','damage parameter 4'); 202 fielddisplay(self,'healing','damage healing parameter'); 203 fielddisplay(self,'stress_threshold','damage stress threshold [Pa]'); 204 fielddisplay(self,'equiv_stress','0: von Mises, 1: max principal'); 205 fielddisplay(self,'requested_outputs','additional outputs requested'); 206 end 207 208 end % }}} 209 function marshall(self,md,fid) % {{{ 210 211 WriteData(fid,'object',self,'fieldname','isdamage','format','Boolean'); 212 if self.isdamage, 213 WriteData(fid,'object',self,'fieldname','law','format','Integer'); 214 WriteData(fid,'object',self,'fieldname','D','format','DoubleMat','mattype',1); 215 WriteData(fid,'object',self,'fieldname','spcdamage','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 216 WriteData(fid,'object',self,'fieldname','max_damage','format','Double'); 217 218 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer'); 219 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer'); 220 WriteData(fid,'enum',DamageElementinterpEnum(),'data',StringToEnum(self.elementinterp),'format','Integer'); 221 WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer'); 222 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer'); 223 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double'); 224 WriteData(fid,'object',self,'fieldname','c1','format','Double'); 225 WriteData(fid,'object',self,'fieldname','c2','format','Double'); 226 WriteData(fid,'object',self,'fieldname','c3','format','Double'); 227 WriteData(fid,'object',self,'fieldname','c4','format','Double'); 228 WriteData(fid,'object',self,'fieldname','stress_threshold','format','Double'); 229 WriteData(fid,'object',self,'fieldname','healing','format','Double'); 230 WriteData(fid,'object',self,'fieldname','equiv_stress','format','Integer'); 231 231 end 232 232 233 233 %process requested outputs 234 outputs = obj.requested_outputs;234 outputs = self.requested_outputs; 235 235 pos = find(ismember(outputs,'default')); 236 236 if ~isempty(pos), 237 237 outputs(pos) = []; %remove 'default' from outputs 238 outputs = [outputs defaultoutputs( obj,md)]; %add defaults239 end 240 if obj.isdamage,238 outputs = [outputs defaultoutputs(self,md)]; %add defaults 239 end 240 if self.isdamage, 241 241 WriteData(fid,'data',outputs,'enum',DamageEvolutionRequestedOutputsEnum,'format','StringArray'); 242 242 end -
issm/trunk-jpl/src/m/classes/debug.m
r17931 r19040 11 11 end 12 12 methods 13 function createxml( obj,fid) % {{{13 function createxml(self,fid) % {{{ 14 14 fprintf(fid, '\n\n'); 15 15 fprintf(fid, '%s\n', '<!-- Debug -->'); … … 20 20 fprintf(fid,'%s\n%s\n',' <option value="1" type="string" default="false"> </option>','</parameter>'); 21 21 22 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="gprof" type="', class( obj.gprof),'" optional="false">', ' <section name="debug" />',' <option value="',convert2str(obj.gprof),'" type="string" default="true"></option>',' <help> use gnu-profiler to find out where the time is spent </help>','</parameter>');23 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n', '<parameter key ="profiling" type="', class( obj.profiling),'" optional="false">', ' <section name="debug" />',' <option value="',convert2str(obj.profiling),'" type="string" default="true"></option>',' <help> enables profiling (memory, flops, time) </help>','</parameter>');22 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="gprof" type="', class(self.gprof),'" optional="false">', ' <section name="debug" />',' <option value="',convert2str(self.gprof),'" type="string" default="true"></option>',' <help> use gnu-profiler to find out where the time is spent </help>','</parameter>'); 23 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n', '<parameter key ="profiling" type="', class(self.profiling),'" optional="false">', ' <section name="debug" />',' <option value="',convert2str(self.profiling),'" type="string" default="true"></option>',' <help> enables profiling (memory, flops, time) </help>','</parameter>'); 24 24 end % }}} 25 function obj= debug(varargin) % {{{25 function self = debug(varargin) % {{{ 26 26 switch nargin 27 27 case 0 28 obj=setdefaultparameters(obj);28 self=setdefaultparameters(self); 29 29 otherwise 30 30 error('constructor not supported'); 31 31 end 32 32 end % }}} 33 function obj = setdefaultparameters(obj) % {{{33 function self = setdefaultparameters(self) % {{{ 34 34 35 35 end % }}} 36 function disp( obj) % {{{36 function disp(self) % {{{ 37 37 disp(sprintf(' debug parameters:')); 38 38 39 fielddisplay( obj,'valgrind','use Valgrind to debug (0 or 1)');40 fielddisplay( obj,'gprof','use gnu-profiler to find out where the time is spent');41 fielddisplay( obj,'profiling','enables profiling (memory, flops, time)');39 fielddisplay(self,'valgrind','use Valgrind to debug (0 or 1)'); 40 fielddisplay(self,'gprof','use gnu-profiler to find out where the time is spent'); 41 fielddisplay(self,'profiling','enables profiling (memory, flops, time)'); 42 42 43 43 end % }}} 44 function marshall( obj,md,fid) % {{{45 WriteData(fid,'object', obj,'fieldname','profiling','format','Boolean');44 function marshall(self,md,fid) % {{{ 45 WriteData(fid,'object',self,'fieldname','profiling','format','Boolean'); 46 46 end % }}} 47 47 end -
issm/trunk-jpl/src/m/classes/dependent.m
r13862 r19040 15 15 end 16 16 methods 17 function obj= dependent(varargin) % {{{17 function self = dependent(varargin) % {{{ 18 18 19 19 %use provided options to change fields 20 20 options=pairoptions(varargin{:}); 21 21 22 obj.name=getfieldvalue(options,'name','');23 obj.type=getfieldvalue(options,'type','');24 obj.exp=getfieldvalue(options,'exp','');25 obj.segments=getfieldvalue(options,'segments',[]);26 obj.index=getfieldvalue(options,'index',-1);27 obj.nods=getfieldvalue(options,'nods',0);22 self.name=getfieldvalue(options,'name',''); 23 self.type=getfieldvalue(options,'type',''); 24 self.exp=getfieldvalue(options,'exp',''); 25 self.segments=getfieldvalue(options,'segments',[]); 26 self.index=getfieldvalue(options,'index',-1); 27 self.nods=getfieldvalue(options,'nods',0); 28 28 29 29 %if name is mass flux: 30 if strcmpi( obj.name,'MassFlux'),30 if strcmpi(self.name,'MassFlux'), 31 31 %make sure that we supplied a file and that it exists! 32 if exist( obj.exp)~=2,32 if exist(self.exp)~=2, 33 33 error('dependent checkconsistency: specified ''exp'' file does not exist!'); 34 34 end 35 35 %process the file and retrieve segments 36 36 mesh=getfieldvalue(options,'mesh'); 37 obj.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,obj.exp);37 self.segments=MeshProfileIntersection(mesh.elements,mesh.x,mesh.y,self.exp); 38 38 end 39 39 end 40 40 %}}} 41 function obj = setdefaultparameters(obj) % {{{41 function self = setdefaultparameters(self) % {{{ 42 42 %do nothing 43 43 end % }}} 44 function md = checkconsistency( obj,md,solution,analyses) % {{{45 if strcmpi( obj.name,'MassFlux'),46 if isempty( obj.segments),44 function md = checkconsistency(self,md,solution,analyses) % {{{ 45 if strcmpi(self.name,'MassFlux'), 46 if isempty(self.segments), 47 47 error('dependent checkconsistency error: need segments to compute this dependent response'); 48 48 end 49 if obj.index<=0,49 if self.index<=0, 50 50 error('dependent checkconsistency error: index for segments should be >=1'); 51 51 end 52 52 end 53 if ~isnan( obj.fos_reverse_index),53 if ~isnan(self.fos_reverse_index), 54 54 if ~strcmpi(driver,'fos_reverse'), 55 55 error('cannot declare a dependent with a fos_reverse_index when the driver is not fos_reverse!'); 56 56 end 57 if obj.nods==0,57 if self.nods==0, 58 58 error('dependent checkconsistency error: nods should be set to the size of the independent variable'); 59 59 end … … 61 61 62 62 end % }}} 63 function disp( obj) % {{{63 function disp(self) % {{{ 64 64 disp(sprintf(' dependent variable:')); 65 65 66 fielddisplay( obj,'name','variable name (must match corresponding Enum)');67 fielddisplay( obj,'type','type of variable (''vertex'' or ''scalar'')');66 fielddisplay(self,'name','variable name (must match corresponding Enum)'); 67 fielddisplay(self,'type','type of variable (''vertex'' or ''scalar'')'); 68 68 69 if ~isnan( obj.fos_reverse_index),70 fielddisplay( obj,'fos_reverse_index','index for fos_reverse driver of ADOLC');69 if ~isnan(self.fos_reverse_index), 70 fielddisplay(self,'fos_reverse_index','index for fos_reverse driver of ADOLC'); 71 71 end 72 if ~isempty( obj.exp),73 fielddisplay( obj,'exp','file needed to compute dependent variable');74 fielddisplay( obj,'segments','mass flux segments');72 if ~isempty(self.exp), 73 fielddisplay(self,'exp','file needed to compute dependent variable'); 74 fielddisplay(self,'segments','mass flux segments'); 75 75 end 76 76 77 77 end % }}} 78 function scalar=typetoscalar( obj) % {{{79 if strcmpi( obj.type,'scalar'),78 function scalar=typetoscalar(self) % {{{ 79 if strcmpi(self.type,'scalar'), 80 80 scalar=0; 81 elseif strcmpi( obj.type,'vertex'),81 elseif strcmpi(self.type,'vertex'), 82 82 scalar=1; 83 83 end -
issm/trunk-jpl/src/m/classes/flaim.m
r17720 r19040 21 21 end 22 22 methods 23 function createxml( obj,fid) % {{{23 function createxml(self,fid) % {{{ 24 24 fprintf(fid, '<!-- flaim -->\n'); 25 25 26 26 % Input 27 27 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Input:">','<section name="flaim" />'); 28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="targets" type="',class( obj.targets),'" default="',convert2str(obj.targets),'">',' <section name="flaim" />',' <help> name of kml output targets file </help>',' </parameter>');29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="tracks" type="',class( obj.tracks),'" default="',convert2str(obj.tracks),'">',' <section name="flaim" />',' <help> name of kml input tracks file </help>',' </parameter>');30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="flightreqs" type="',class( obj.flightreqs),'" default="',convert2str(obj.flightreqs),'">',' <section name="flaim" />',' <help> structure of kml flight requirements (not used yet) </help>',' </parameter>');31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="criterion" type="',class( obj.criterion),'" default="',convert2str(obj.criterion),'">',' <section name="flaim" />',' <help> element or nodal criterion for flight path evaluation (metric) </help>',' </parameter>');28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="targets" type="',class(self.targets),'" default="',convert2str(self.targets),'">',' <section name="flaim" />',' <help> name of kml output targets file </help>',' </parameter>'); 29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="tracks" type="',class(self.tracks),'" default="',convert2str(self.tracks),'">',' <section name="flaim" />',' <help> name of kml input tracks file </help>',' </parameter>'); 30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="flightreqs" type="',class(self.flightreqs),'" default="',convert2str(self.flightreqs),'">',' <section name="flaim" />',' <help> structure of kml flight requirements (not used yet) </help>',' </parameter>'); 31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="criterion" type="',class(self.criterion),'" default="',convert2str(self.criterion),'">',' <section name="flaim" />',' <help> element or nodal criterion for flight path evaluation (metric) </help>',' </parameter>'); 32 32 fprintf(fid,'%s\n%s\n','</frame>'); 33 33 34 34 % Arguments 35 35 fprintf(fid,'%s\n%s\n%s\n','<frame key="2" label="Arguments:">','<section name="flaim" />'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gridsatequator" type="',class( obj.gridsatequator),'" default="',convert2str(obj.gridsatequator),'">',' <section name="flaim" />',' <help> number of grids at equator (determines resolution) </help>',' </parameter>');37 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="usevalueordering" type="',class( obj.usevalueordering),'" optional="false">',' <section name="flaim" />',' <option value="',convert2str(obj.usevalueordering),'" type="string" default="true"></option>',' <help> flag to consider target values for flight path evaluation </help>',' </parameter>');38 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="split_antimeridian" type="',class( obj.split_antimeridian),'" optional="false">',' <section name="flaim" />',' <option value="',convert2str(obj.split_antimeridian),'" type="string" default="true"></option>',' <help> flag to split polygons on the antimeridian </help>',' </parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gridsatequator" type="',class(self.gridsatequator),'" default="',convert2str(self.gridsatequator),'">',' <section name="flaim" />',' <help> number of grids at equator (determines resolution) </help>',' </parameter>'); 37 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="usevalueordering" type="',class(self.usevalueordering),'" optional="false">',' <section name="flaim" />',' <option value="',convert2str(self.usevalueordering),'" type="string" default="true"></option>',' <help> flag to consider target values for flight path evaluation </help>',' </parameter>'); 38 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="split_antimeridian" type="',class(self.split_antimeridian),'" optional="false">',' <section name="flaim" />',' <option value="',convert2str(self.split_antimeridian),'" type="string" default="true"></option>',' <help> flag to split polygons on the antimeridian </help>',' </parameter>'); 39 39 fprintf(fid,'%s\n%s\n','</frame>'); 40 40 41 41 % Optimization 42 42 fprintf(fid,'%s\n%s\n%s\n','<frame key="3" label="Optimization:">','<section name="flaim" />'); 43 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="path_optimize" type="',class( obj.path_optimize),'" optional="false">',' <section name="flaim" />',' <option value="',convert2str(obj.path_optimize),'" type="string" default="true"></option>',' <help> optimize? (default false) </help>',' </parameter>');44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="opt_ndir" type="',class( obj.opt_ndir),'" default="',convert2str(obj.opt_ndir),'">',' <section name="flaim" />',' <help> number of directions to test when moving a point. If this value = 1, a random direction is tested. A value > 1 results in directions equally spaced from [0, 2*PI] being tested. For example, 4 would result in directions [0, PI/2, PI, 3PI/2] </help>',' </parameter>');45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="opt_dist" type="',class( obj.opt_dist),'" default="',convert2str(obj.opt_dist),'">',' <section name="flaim" />',' <help> specifies the distance in km (default 25) to move a randomly selected path point on each iteration </help>',' </parameter>');46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="opt_niter" type="',class( obj.opt_niter),'" default="',convert2str(obj.opt_niter),'">',' <section name="flaim" />',' <help> number of iterations (default 30,000) to run for flightplan optimization, i.e. the number of times to randomly select a point and move it. </help>',' </parameter>');43 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n',' <parameter key ="path_optimize" type="',class(self.path_optimize),'" optional="false">',' <section name="flaim" />',' <option value="',convert2str(self.path_optimize),'" type="string" default="true"></option>',' <help> optimize? (default false) </help>',' </parameter>'); 44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="opt_ndir" type="',class(self.opt_ndir),'" default="',convert2str(self.opt_ndir),'">',' <section name="flaim" />',' <help> number of directions to test when moving a point. If this value = 1, a random direction is tested. A value > 1 results in directions equally spaced from [0, 2*PI] being tested. For example, 4 would result in directions [0, PI/2, PI, 3PI/2] </help>',' </parameter>'); 45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="opt_dist" type="',class(self.opt_dist),'" default="',convert2str(self.opt_dist),'">',' <section name="flaim" />',' <help> specifies the distance in km (default 25) to move a randomly selected path point on each iteration </help>',' </parameter>'); 46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="opt_niter" type="',class(self.opt_niter),'" default="',convert2str(self.opt_niter),'">',' <section name="flaim" />',' <help> number of iterations (default 30,000) to run for flightplan optimization, i.e. the number of times to randomly select a point and move it. </help>',' </parameter>'); 47 47 fprintf(fid,'%s\n%s\n','</frame>'); 48 48 49 49 % Output 50 50 fprintf(fid,'%s\n%s\n%s\n','<frame key="4" label="Output:">','<section name="flaim" />'); 51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="solution" type="',class( obj.solution),'" default="',convert2str(obj.solution),'">',' <section name="flaim" />',' <help> name of kml solution file </help>',' </parameter>');52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="quality" type="',class( obj.quality),'" default="',convert2str(obj.quality),'">',' <section name="flaim" />',' <help> quality of kml solution </help>',' </parameter>');51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="solution" type="',class(self.solution),'" default="',convert2str(self.solution),'">',' <section name="flaim" />',' <help> name of kml solution file </help>',' </parameter>'); 52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="quality" type="',class(self.quality),'" default="',convert2str(self.quality),'">',' <section name="flaim" />',' <help> quality of kml solution </help>',' </parameter>'); 53 53 fprintf(fid,'%s\n%s\n','</frame>'); 54 54 55 55 end % }}} 56 function obj= flaim(varargin) % {{{56 function self = flaim(varargin) % {{{ 57 57 switch nargin 58 58 case 0 59 obj=setdefaultparameters(obj);59 self=setdefaultparameters(self); 60 60 otherwise 61 61 error('constructor not supported'); 62 62 end 63 63 end % }}} 64 function obj = setdefaultparameters(obj) % {{{64 function self = setdefaultparameters(self) % {{{ 65 65 66 66 end % }}} 67 function md = checkconsistency( obj,md,solution,analyses) % {{{67 function md = checkconsistency(self,md,solution,analyses) % {{{ 68 68 69 69 %Early return … … 78 78 79 79 end % }}} 80 function disp( obj) % {{{80 function disp(self) % {{{ 81 81 82 82 disp(sprintf(' FLAIM - Flight Line Adaptation using Ice sheet Modeling:')); 83 83 84 84 disp(sprintf('\n Input:')); 85 fielddisplay( obj,'targets' ,'name of kml output targets file ');86 fielddisplay( obj,'tracks' ,'name of kml input tracks file ');87 fielddisplay( obj,'flightreqs' ,'structure of kml flight requirements (not used yet)');88 fielddisplay( obj,'criterion' ,'element or nodal criterion for flight path evaluation (metric)');85 fielddisplay(self,'targets' ,'name of kml output targets file '); 86 fielddisplay(self,'tracks' ,'name of kml input tracks file '); 87 fielddisplay(self,'flightreqs' ,'structure of kml flight requirements (not used yet)'); 88 fielddisplay(self,'criterion' ,'element or nodal criterion for flight path evaluation (metric)'); 89 89 90 90 disp(sprintf('\n Arguments:')); 91 fielddisplay( obj,'gridsatequator' ,'number of grids at equator (determines resolution)');92 fielddisplay( obj,'usevalueordering' ,'flag to consider target values for flight path evaluation');93 fielddisplay( obj,'split_antimeridian' ,'flag to split polygons on the antimeridian');91 fielddisplay(self,'gridsatequator' ,'number of grids at equator (determines resolution)'); 92 fielddisplay(self,'usevalueordering' ,'flag to consider target values for flight path evaluation'); 93 fielddisplay(self,'split_antimeridian' ,'flag to split polygons on the antimeridian'); 94 94 95 95 disp(sprintf('\n Optimization:')); 96 fielddisplay( obj,'path_optimize' ,'optimize? (default false)');97 fielddisplay( obj,'opt_ndir' ,{'number of directions to test when moving a point. If this value = 1, a random direction is tested.',...96 fielddisplay(self,'path_optimize' ,'optimize? (default false)'); 97 fielddisplay(self,'opt_ndir' ,{'number of directions to test when moving a point. If this value = 1, a random direction is tested.',... 98 98 'A value > 1 results in directions equally spaced from [0, 2*PI] being tested.',... 99 99 'For example, 4 would result in directions [0, PI/2, PI, 3PI/2].'}); 100 fielddisplay( obj,'opt_dist' ,'specifies the distance in km (default 25) to move a randomly selected path point on each iteration');101 fielddisplay( obj,'opt_niter' ,{'number of iterations (default 30,000) to run for flightplan optimization',...100 fielddisplay(self,'opt_dist' ,'specifies the distance in km (default 25) to move a randomly selected path point on each iteration'); 101 fielddisplay(self,'opt_niter' ,{'number of iterations (default 30,000) to run for flightplan optimization',... 102 102 'i.e. the number of times to randomly select a point and move it.'}); 103 103 104 104 disp(sprintf('\n Output:')); 105 fielddisplay( obj,'solution' ,'name of kml solution file');106 fielddisplay( obj,'quality' ,'quality of kml solution');105 fielddisplay(self,'solution' ,'name of kml solution file'); 106 fielddisplay(self,'quality' ,'quality of kml solution'); 107 107 end % }}} 108 108 end -
issm/trunk-jpl/src/m/classes/flowequation.m
r18475 r19040 26 26 end 27 27 methods (Static) 28 function obj = loadobj(obj) % {{{28 function self = loadobj(self) % {{{ 29 29 % This function is directly called by matlab when a model object is 30 30 % loaded. If the input is a struct it is an old version of this class and … … 44 44 end 45 45 46 if isstruct( obj)46 if isstruct(self) 47 47 disp('Recovering flowequation from older version'); 48 objstruct = obj;49 obj= structtoobj(flowequation(),objstruct);48 objstruct = self; 49 self = structtoobj(flowequation(),objstruct); 50 50 51 51 %2013 July 23rd 52 if isfield(objstruct,'ishutter'), obj.isSIA = objstruct.ishutter; end;53 if isfield(objstruct,'ismacayeal'), obj.isSSA = objstruct.ismacayeal; end;54 if isfield(objstruct,'ispattyn'), obj.isHO = objstruct.ispattyn; end;55 if isfield(objstruct,'isstokes'), obj.isFS = objstruct.isstokes; end;56 if isfield(objstruct,'bordermacayeal'), obj.borderSSA = objstruct.bordermacayeal; end;57 if isfield(objstruct,'borderpattyn'), obj.borderHO = objstruct.borderpattyn; end;58 if isfield(objstruct,'borderstokes'), obj.borderFS = objstruct.borderstokes; end;52 if isfield(objstruct,'ishutter'), self.isSIA = objstruct.ishutter; end; 53 if isfield(objstruct,'ismacayeal'), self.isSSA = objstruct.ismacayeal; end; 54 if isfield(objstruct,'ispattyn'), self.isHO = objstruct.ispattyn; end; 55 if isfield(objstruct,'isstokes'), self.isFS = objstruct.isstokes; end; 56 if isfield(objstruct,'bordermacayeal'),self.borderSSA = objstruct.bordermacayeal; end; 57 if isfield(objstruct,'borderpattyn'), self.borderHO = objstruct.borderpattyn; end; 58 if isfield(objstruct,'borderstokes'), self.borderFS = objstruct.borderstokes; end; 59 59 end 60 60 … … 62 62 end 63 63 methods 64 function createxml( obj,fid) % {{{64 function createxml(self,fid) % {{{ 65 65 fprintf(fid, '\n\n'); 66 66 fprintf(fid, '%s\n', '<!-- flowequation -->'); 67 67 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Flow equation parameters">','<section name="flowequation" />'); 68 68 69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isSIA" type="', class( obj.isSIA),'" default="', convert2str(obj.isSIA),'">', ' <section name="flowequation" />',' <help> is the Shallow Ice Approximation (SIA) used ? </help>','</parameter>');70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isSSA" type="', class( obj.isSSA),'" default="', convert2str(obj.isSSA),'">', ' <section name="flowequation" />',' <help> is the Shelfy-Stream Approximation (SSA) used ? </help>','</parameter>');71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isL1L2" type="', class( obj.isL1L2),'" default="', convert2str(obj.isL1L2),'">', ' <section name="flowequation" />',' <help> is the L1L2 approximation used ? </help>','</parameter>');72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isHO" type="', class( obj.isHO),'" default="', convert2str(obj.isHO),'">', ' <section name="flowequation" />',' <help> is the Higher-Order (HO) approximation used ? </help>','</parameter>');73 74 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isFS" type="', class( obj.isFS),'" default="', convert2str(obj.isFS),'">', ' <section name="flowequation" />',' <help> are the Full-FS (FS) equations used ? </help>','</parameter>');69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isSIA" type="', class(self.isSIA),'" default="', convert2str(self.isSIA),'">', ' <section name="flowequation" />',' <help> is the Shallow Ice Approximation (SIA) used ? </help>','</parameter>'); 70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isSSA" type="', class(self.isSSA),'" default="', convert2str(self.isSSA),'">', ' <section name="flowequation" />',' <help> is the Shelfy-Stream Approximation (SSA) used ? </help>','</parameter>'); 71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isL1L2" type="', class(self.isL1L2),'" default="', convert2str(self.isL1L2),'">', ' <section name="flowequation" />',' <help> is the L1L2 approximation used ? </help>','</parameter>'); 72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isHO" type="', class(self.isHO),'" default="', convert2str(self.isHO),'">', ' <section name="flowequation" />',' <help> is the Higher-Order (HO) approximation used ? </help>','</parameter>'); 73 74 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="isFS" type="', class(self.isFS),'" default="', convert2str(self.isFS),'">', ' <section name="flowequation" />',' <help> are the Full-FS (FS) equations used ? </help>','</parameter>'); 75 75 76 76 % fe_SSA drop-down (P1, P1bubble, P1bubblecondensed, P2) … … 98 98 fprintf(fid,'%s\n%s\n',' <option value="TaylorHood" type="string" default="false"> </option>','</parameter>'); 99 99 100 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="vertex_equation" type="', class( obj.vertex_equation),'" default="', convert2str(obj.vertex_equation),'">', ' <section name="flowequation" />',' <help> flow equation for each vertex </help>','</parameter>');101 102 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="element_equation" type="', class( obj.element_equation),'" default="', convert2str(obj.element_equation),'">', ' <section name="flowequation" />',' <help> flow equation for each element </help>','</parameter>');103 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="borderSSA" type="', class( obj.borderSSA),'" default="', convert2str(obj.borderSSA),'">', ' <section name="flowequation" />',' <help> vertices on SSAs border (for tiling) </help>','</parameter>');104 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="borderHO" type="', class( obj.borderHO),'" default="', convert2str(obj.borderHO),'">', ' <section name="flowequation" />',' <help> vertices on HOs border (for tiling) </help>','</parameter>');105 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="borderFS" type="', class( obj.borderFS),'" default="', convert2str(obj.borderFS),'">', ' <section name="flowequation" />',' <help> vertices on FS border (for tiling) </help>','</parameter>');100 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="vertex_equation" type="', class(self.vertex_equation),'" default="', convert2str(self.vertex_equation),'">', ' <section name="flowequation" />',' <help> flow equation for each vertex </help>','</parameter>'); 101 102 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="element_equation" type="', class(self.element_equation),'" default="', convert2str(self.element_equation),'">', ' <section name="flowequation" />',' <help> flow equation for each element </help>','</parameter>'); 103 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="borderSSA" type="', class(self.borderSSA),'" default="', convert2str(self.borderSSA),'">', ' <section name="flowequation" />',' <help> vertices on SSAs border (for tiling) </help>','</parameter>'); 104 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="borderHO" type="', class(self.borderHO),'" default="', convert2str(self.borderHO),'">', ' <section name="flowequation" />',' <help> vertices on HOs border (for tiling) </help>','</parameter>'); 105 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="borderFS" type="', class(self.borderFS),'" default="', convert2str(self.borderFS),'">', ' <section name="flowequation" />',' <help> vertices on FS border (for tiling) </help>','</parameter>'); 106 106 107 107 fprintf(fid,'%s\n%s\n','</frame>'); 108 108 end % }}} 109 function obj= flowequation(varargin) % {{{109 function self = flowequation(varargin) % {{{ 110 110 switch nargin 111 111 case 0 112 obj=setdefaultparameters(obj);112 self=setdefaultparameters(self); 113 113 otherwise 114 114 error('constructor not supported'); 115 115 end 116 116 end % }}} 117 function obj = setdefaultparameters(obj) % {{{117 function self = setdefaultparameters(self) % {{{ 118 118 119 119 %P1 for SSA 120 obj.fe_SSA= 'P1';120 self.fe_SSA= 'P1'; 121 121 122 122 %P1 for HO 123 obj.fe_HO= 'P1';123 self.fe_HO= 'P1'; 124 124 125 125 %MINI condensed element for FS by default 126 obj.fe_FS = 'MINIcondensed';127 end % }}} 128 function md = checkconsistency( obj,md,solution,analyses) % {{{126 self.fe_FS = 'MINIcondensed'; 127 end % }}} 128 function md = checkconsistency(self,md,solution,analyses) % {{{ 129 129 130 130 … … 160 160 error('Case not supported yet'); 161 161 end 162 if ~( obj.isSIA || obj.isSSA || obj.isL1L2 || obj.isHO || obj.isFS),162 if ~(self.isSIA || self.isSSA || self.isL1L2 || self.isHO || self.isFS), 163 163 md = checkmessage(md,['no element types set for this model']); 164 164 end 165 165 if ismember(StressbalanceSIAAnalysisEnum(),analyses), 166 if any( obj.element_equation==1),167 if( obj.vertex_equation & md.mask.groundedice_levelset<0.),166 if any(self.element_equation==1), 167 if(self.vertex_equation & md.mask.groundedice_levelset<0.), 168 168 disp(sprintf('\n !!! Warning: SIA''s model is not consistent on ice shelves !!!\n')); 169 169 end … … 172 172 173 173 end % }}} 174 function disp( obj) % {{{174 function disp(self) % {{{ 175 175 disp(sprintf(' flow equation parameters:')); 176 176 177 fielddisplay( obj,'isSIA','is the Shallow Ice Approximation (SIA) used ?');178 fielddisplay( obj,'isSSA','is the Shelfy-Stream Approximation (SSA) used ?');179 fielddisplay( obj,'isL1L2','is the L1L2 approximation used ?');180 fielddisplay( obj,'isHO','is the Higher-Order (HO) approximation used ?');181 fielddisplay( obj,'isFS','are the Full-FS (FS) equations used ?');182 fielddisplay( obj,'fe_SSA','Finite Element for SSA ''P1'', ''P1bubble'' ''P1bubblecondensed'' ''P2''');183 fielddisplay( obj,'fe_HO', 'Finite Element for HO ''P1'' ''P1bubble'' ''P1bubblecondensed'' ''P1xP2'' ''P2xP1'' ''P2''');184 fielddisplay( obj,'fe_FS', 'Finite Element for FS ''P1P1'' (debugging only) ''P1P1GLS'' ''MINIcondensed'' ''MINI'' ''TaylorHood'' ''XTaylorHood''');185 fielddisplay( obj,'vertex_equation','flow equation for each vertex');186 fielddisplay( obj,'element_equation','flow equation for each element');187 fielddisplay( obj,'borderSSA','vertices on SSA''s border (for tiling)');188 fielddisplay( obj,'borderHO','vertices on HO''s border (for tiling)');189 fielddisplay( obj,'borderFS','vertices on FS'' border (for tiling)');190 191 end % }}} 192 function marshall( obj,md,fid) % {{{193 WriteData(fid,'object', obj,'fieldname','isSIA','format','Boolean');194 WriteData(fid,'object', obj,'fieldname','isSSA','format','Boolean');195 WriteData(fid,'object', obj,'fieldname','isL1L2','format','Boolean');196 WriteData(fid,'object', obj,'fieldname','isHO','format','Boolean');197 WriteData(fid,'object', obj,'fieldname','isFS','format','Boolean');198 WriteData(fid,'enum',FlowequationFeSSAEnum(),'data',StringToEnum( obj.fe_SSA),'format','Integer');199 WriteData(fid,'enum',FlowequationFeHOEnum() ,'data',StringToEnum( obj.fe_HO) ,'format','Integer');200 WriteData(fid,'enum',FlowequationFeFSEnum() ,'data',StringToEnum( obj.fe_FS) ,'format','Integer');201 WriteData(fid,'enum',AugmentedLagrangianREnum(),'data', obj.augmented_lagrangian_r ,'format','Double');202 WriteData(fid,'enum',AugmentedLagrangianRhopEnum(),'data', obj.augmented_lagrangian_rhop ,'format','Double');203 WriteData(fid,'enum',AugmentedLagrangianRlambdaEnum(),'data', obj.augmented_lagrangian_rlambda ,'format','Double');204 WriteData(fid,'enum',AugmentedLagrangianRholambdaEnum(),'data', obj.augmented_lagrangian_rholambda ,'format','Double');205 WriteData(fid,'enum',AugmentedLagrangianThetaEnum() ,'data', obj.XTH_theta ,'format','Double');206 WriteData(fid,'object', obj,'fieldname','borderSSA','format','DoubleMat','mattype',1);207 WriteData(fid,'object', obj,'fieldname','borderHO','format','DoubleMat','mattype',1);208 WriteData(fid,'object', obj,'fieldname','borderFS','format','DoubleMat','mattype',1);177 fielddisplay(self,'isSIA','is the Shallow Ice Approximation (SIA) used ?'); 178 fielddisplay(self,'isSSA','is the Shelfy-Stream Approximation (SSA) used ?'); 179 fielddisplay(self,'isL1L2','is the L1L2 approximation used ?'); 180 fielddisplay(self,'isHO','is the Higher-Order (HO) approximation used ?'); 181 fielddisplay(self,'isFS','are the Full-FS (FS) equations used ?'); 182 fielddisplay(self,'fe_SSA','Finite Element for SSA ''P1'', ''P1bubble'' ''P1bubblecondensed'' ''P2'''); 183 fielddisplay(self,'fe_HO', 'Finite Element for HO ''P1'' ''P1bubble'' ''P1bubblecondensed'' ''P1xP2'' ''P2xP1'' ''P2'''); 184 fielddisplay(self,'fe_FS', 'Finite Element for FS ''P1P1'' (debugging only) ''P1P1GLS'' ''MINIcondensed'' ''MINI'' ''TaylorHood'' ''XTaylorHood'''); 185 fielddisplay(self,'vertex_equation','flow equation for each vertex'); 186 fielddisplay(self,'element_equation','flow equation for each element'); 187 fielddisplay(self,'borderSSA','vertices on SSA''s border (for tiling)'); 188 fielddisplay(self,'borderHO','vertices on HO''s border (for tiling)'); 189 fielddisplay(self,'borderFS','vertices on FS'' border (for tiling)'); 190 191 end % }}} 192 function marshall(self,md,fid) % {{{ 193 WriteData(fid,'object',self,'fieldname','isSIA','format','Boolean'); 194 WriteData(fid,'object',self,'fieldname','isSSA','format','Boolean'); 195 WriteData(fid,'object',self,'fieldname','isL1L2','format','Boolean'); 196 WriteData(fid,'object',self,'fieldname','isHO','format','Boolean'); 197 WriteData(fid,'object',self,'fieldname','isFS','format','Boolean'); 198 WriteData(fid,'enum',FlowequationFeSSAEnum(),'data',StringToEnum(self.fe_SSA),'format','Integer'); 199 WriteData(fid,'enum',FlowequationFeHOEnum() ,'data',StringToEnum(self.fe_HO) ,'format','Integer'); 200 WriteData(fid,'enum',FlowequationFeFSEnum() ,'data',StringToEnum(self.fe_FS) ,'format','Integer'); 201 WriteData(fid,'enum',AugmentedLagrangianREnum(),'data',self.augmented_lagrangian_r ,'format','Double'); 202 WriteData(fid,'enum',AugmentedLagrangianRhopEnum(),'data',self.augmented_lagrangian_rhop ,'format','Double'); 203 WriteData(fid,'enum',AugmentedLagrangianRlambdaEnum(),'data',self.augmented_lagrangian_rlambda ,'format','Double'); 204 WriteData(fid,'enum',AugmentedLagrangianRholambdaEnum(),'data',self.augmented_lagrangian_rholambda ,'format','Double'); 205 WriteData(fid,'enum',AugmentedLagrangianThetaEnum() ,'data',self.XTH_theta ,'format','Double'); 206 WriteData(fid,'object',self,'fieldname','borderSSA','format','DoubleMat','mattype',1); 207 WriteData(fid,'object',self,'fieldname','borderHO','format','DoubleMat','mattype',1); 208 WriteData(fid,'object',self,'fieldname','borderFS','format','DoubleMat','mattype',1); 209 209 %convert approximations to enums 210 data= obj.vertex_equation;210 data=self.vertex_equation; 211 211 pos=find(data==0); data(pos,end)=NoneApproximationEnum(); 212 212 pos=find(data==1); data(pos,end)=SIAApproximationEnum(); … … 220 220 pos=find(data==8); data(pos,end)=SSAFSApproximationEnum(); 221 221 WriteData(fid,'data',data,'enum',FlowequationVertexEquationEnum(),'format','DoubleMat','mattype',1); 222 data= obj.element_equation;222 data=self.element_equation; 223 223 pos=find(data==0); data(pos,end)=NoneApproximationEnum(); 224 224 pos=find(data==1); data(pos,end)=SIAApproximationEnum(); -
issm/trunk-jpl/src/m/classes/friction.m
r19027 r19040 11 11 end 12 12 methods 13 function createxml( obj,fid) % {{{13 function createxml(self,fid) % {{{ 14 14 fprintf(fid, '\n\n'); 15 15 fprintf(fid, '%s\n', '<!-- Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p -->'); 16 16 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p">','<section name="friction" />'); 17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="coefficient" type="', class( obj.coefficient),'" default="', convert2str(obj.coefficient),'">', ' <section name="friction" />',' <help> friction coefficient [SI] </help>','</parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="p" type="', class( obj.p),'" default="', convert2str(obj.p),'">', ' <section name="friction" />',' <help> p exponent </help>','</parameter>');19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="q" type="', class( obj.q),'" default="', convert2str(obj.q),'">', ' <section name="friction" />',' <help> q exponent </help>','</parameter>');17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="coefficient" type="', class(self.coefficient),'" default="', convert2str(self.coefficient),'">', ' <section name="friction" />',' <help> friction coefficient [SI] </help>','</parameter>'); 18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="p" type="', class(self.p),'" default="', convert2str(self.p),'">', ' <section name="friction" />',' <help> p exponent </help>','</parameter>'); 19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="q" type="', class(self.q),'" default="', convert2str(self.q),'">', ' <section name="friction" />',' <help> q exponent </help>','</parameter>'); 20 20 fprintf(fid,'%s\n%s\n','</frame>'); 21 21 end % }}} 22 function obj= friction(varargin) % {{{22 function self = friction(varargin) % {{{ 23 23 switch nargin 24 24 case 0 25 obj=setdefaultparameters(obj);25 self=setdefaultparameters(self); 26 26 otherwise 27 27 error('constructor not supported'); 28 28 end 29 29 end % }}} 30 function obj = setdefaultparameters(obj) % {{{30 function self = setdefaultparameters(self) % {{{ 31 31 32 32 end % }}} 33 function md = checkconsistency( obj,md,solution,analyses) % {{{33 function md = checkconsistency(self,md,solution,analyses) % {{{ 34 34 35 35 %Early return … … 39 39 md = checkfield(md,'fieldname','friction.p','NaN',1,'size',[md.mesh.numberofelements 1]); 40 40 end % }}} 41 function disp( obj) % {{{41 function disp(self) % {{{ 42 42 disp(sprintf('Basal shear stress parameters: Sigma_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p)')); 43 fielddisplay( obj,'coefficient','friction coefficient [SI]');44 fielddisplay( obj,'p','p exponent');45 fielddisplay( obj,'q','q exponent');43 fielddisplay(self,'coefficient','friction coefficient [SI]'); 44 fielddisplay(self,'p','p exponent'); 45 fielddisplay(self,'q','q exponent'); 46 46 end % }}} 47 function marshall( obj,md,fid) % {{{47 function marshall(self,md,fid) % {{{ 48 48 yts=365.0*24.0*3600.0; 49 49 50 50 WriteData(fid,'enum',FrictionLawEnum,'data',1,'format','Integer'); 51 WriteData(fid,'object', obj,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);52 %WriteData(fid,'object', obj,'fieldname','coefficient','format','DoubleMat','mattype',1);53 WriteData(fid,'object', obj,'fieldname','p','format','DoubleMat','mattype',2);54 WriteData(fid,'object', obj,'fieldname','q','format','DoubleMat','mattype',2);51 WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 52 %WriteData(fid,'object',self,'fieldname','coefficient','format','DoubleMat','mattype',1); 53 WriteData(fid,'object',self,'fieldname','p','format','DoubleMat','mattype',2); 54 WriteData(fid,'object',self,'fieldname','q','format','DoubleMat','mattype',2); 55 55 56 56 -
issm/trunk-jpl/src/m/classes/frictionhydro.m
r19027 r19040 12 12 end 13 13 methods 14 function obj= frictionhydro(varargin) % {{{14 function self = frictionhydro(varargin) % {{{ 15 15 switch nargin 16 16 case 0 17 obj=setdefaultparameters(obj);17 self=setdefaultparameters(self); 18 18 otherwise 19 19 error('constructor not supported'); 20 20 end 21 21 end % }}} 22 function obj = setdefaultparameters(obj) % {{{22 function self = setdefaultparameters(self) % {{{ 23 23 24 24 end % }}} 25 function md = checkconsistency( obj,md,solution,analyses) % {{{25 function md = checkconsistency(self,md,solution,analyses) % {{{ 26 26 27 27 %Early return … … 31 31 md = checkfield(md,'fieldname','friction.As','NaN',1,'size',[md.mesh.numberofelements 1]); 32 32 end % }}} 33 function disp( obj) % {{{33 function disp(self) % {{{ 34 34 disp(sprintf('Effective Pressure based friction law described in Gagliardini 2007')); 35 fielddisplay( obj,'q','friction law exponent q>=1');36 fielddisplay( obj,'C','friction law max value [SI]');37 fielddisplay( obj,'As','Sliding Parameter without cavitation [m Pa^-n s^-1]');38 fielddisplay( obj,'effective_pressure','Effective Pressure [Pa]');35 fielddisplay(self,'q','friction law exponent q>=1'); 36 fielddisplay(self,'C','friction law max value [SI]'); 37 fielddisplay(self,'As','Sliding Parameter without cavitation [m Pa^-n s^-1]'); 38 fielddisplay(self,'effective_pressure','Effective Pressure [Pa]'); 39 39 end % }}} 40 function marshall( obj,md,fid) % {{{40 function marshall(self,md,fid) % {{{ 41 41 WriteData(fid,'enum',FrictionLawEnum,'data',3,'format','Integer'); 42 WriteData(fid,'class','friction','object', obj,'fieldname','q','format','DoubleMat','mattype',2);43 WriteData(fid,'class','friction','object', obj,'fieldname','C','format','DoubleMat','mattype',2);44 WriteData(fid,'class','friction','object', obj,'fieldname','As','format','DoubleMat','mattype',2);45 WriteData(fid,'class','friction','object', obj,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);42 WriteData(fid,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2); 43 WriteData(fid,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',2); 44 WriteData(fid,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',2); 45 WriteData(fid,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 46 46 end % }}} 47 47 end -
issm/trunk-jpl/src/m/classes/frictiontemp.m
r19027 r19040 12 12 end 13 13 methods 14 function obj= frictiontemp(varargin) % {{{14 function self = frictiontemp(varargin) % {{{ 15 15 switch nargin 16 16 case 0 17 obj=setdefaultparameters(obj);17 self=setdefaultparameters(self); 18 18 case 1 19 19 obj=structtoobj(frictiontemp(),varargin{1}); … … 22 22 end 23 23 end % }}} 24 function obj = setdefaultparameters(obj) % {{{24 function self = setdefaultparameters(self) % {{{ 25 25 26 26 %By default gamma = 1; 27 obj.gamma = 1;27 self.gamma = 1; 28 28 29 29 30 30 end % }}} 31 function md = checkconsistency( obj,md,solution,analyses) % {{{31 function md = checkconsistency(self,md,solution,analyses) % {{{ 32 32 33 33 %Early return … … 42 42 md = checkfield(md,'fieldname','initialization.temperature','NaN',1,'size',[md.mesh.numberofvertices 1]); 43 43 end % }}} 44 function disp( obj) % {{{44 function disp(self) % {{{ 45 45 disp(sprintf('Basal shear stress parameters: tau_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b * 1/f(T)\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p)')); 46 fielddisplay( obj,'gamma','submelt sliding parameter f(T) = exp((T-Tpmp)/gamma)');47 fielddisplay( obj,'coefficient','frictiontemp coefficient [SI]');48 fielddisplay( obj,'p','p exponent');49 fielddisplay( obj,'q','q exponent');46 fielddisplay(self,'gamma','submelt sliding parameter f(T) = exp((T-Tpmp)/gamma)'); 47 fielddisplay(self,'coefficient','frictiontemp coefficient [SI]'); 48 fielddisplay(self,'p','p exponent'); 49 fielddisplay(self,'q','q exponent'); 50 50 end % }}} 51 function marshall( obj,md,fid) % {{{51 function marshall(self,md,fid) % {{{ 52 52 53 53 WriteData(fid,'enum',FrictionLawEnum,'data',4,'format','Integer'); 54 WriteData(fid,'class','friction','object', obj,'fieldname','gamma','format','Double');55 WriteData(fid,'class','friction','object', obj,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);56 WriteData(fid,'class','friction','object', obj,'fieldname','p','format','DoubleMat','mattype',2);57 WriteData(fid,'class','friction','object', obj,'fieldname','q','format','DoubleMat','mattype',2);54 WriteData(fid,'class','friction','object',self,'fieldname','gamma','format','Double'); 55 WriteData(fid,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 56 WriteData(fid,'class','friction','object',self,'fieldname','p','format','DoubleMat','mattype',2); 57 WriteData(fid,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2); 58 58 end % }}} 59 59 end -
issm/trunk-jpl/src/m/classes/frictionwaterlayer.m
r19027 r19040 12 12 end 13 13 methods 14 function obj= frictionwaterlayer(varargin) % {{{14 function self = frictionwaterlayer(varargin) % {{{ 15 15 switch nargin 16 16 case 0 17 obj=setdefaultparameters(obj);17 self=setdefaultparameters(self); 18 18 case 1 19 19 obj=structtoobj(frictionwaterlayer(),varargin{1}); … … 22 22 end 23 23 end % }}} 24 function obj = setdefaultparameters(obj) % {{{24 function self = setdefaultparameters(self) % {{{ 25 25 26 26 end % }}} 27 function md = checkconsistency( obj,md,solution,analyses) % {{{27 function md = checkconsistency(self,md,solution,analyses) % {{{ 28 28 29 29 %Early return … … 36 36 37 37 end % }}} 38 function disp( obj) % {{{38 function disp(self) % {{{ 39 39 disp(sprintf('Basal shear stress parameters: tau_b = coefficient^2 * Neff ^r * |u_b|^(s-1) * u_b * 1/f(T)\n(effective stress Neff=rho_ice*g*thickness+rho_water*g*(bed+water_layer), r=q/p and s=1/p)')); 40 fielddisplay( obj,'coefficient','frictiontemp coefficient [SI]');41 fielddisplay( obj,'p','p exponent');42 fielddisplay( obj,'q','q exponent');43 fielddisplay( obj,'water_layer','water thickness at the base of the ice (m)');40 fielddisplay(self,'coefficient','frictiontemp coefficient [SI]'); 41 fielddisplay(self,'p','p exponent'); 42 fielddisplay(self,'q','q exponent'); 43 fielddisplay(self,'water_layer','water thickness at the base of the ice (m)'); 44 44 end % }}} 45 function marshall( obj,md,fid) % {{{45 function marshall(self,md,fid) % {{{ 46 46 47 47 WriteData(fid,'enum',FrictionLawEnum,'data',5,'format','Integer'); 48 WriteData(fid,'class','friction','object', obj,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);49 WriteData(fid,'class','friction','object', obj,'fieldname','p','format','DoubleMat','mattype',2);50 WriteData(fid,'class','friction','object', obj,'fieldname','q','format','DoubleMat','mattype',2);51 WriteData(fid,'class','friction','object', obj,'fieldname','water_layer','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);48 WriteData(fid,'class','friction','object',self,'fieldname','coefficient','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 49 WriteData(fid,'class','friction','object',self,'fieldname','p','format','DoubleMat','mattype',2); 50 WriteData(fid,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2); 51 WriteData(fid,'class','friction','object',self,'fieldname','water_layer','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 52 52 end % }}} 53 53 end -
issm/trunk-jpl/src/m/classes/frictionweertman.m
r19027 r19040 10 10 end 11 11 methods 12 function createxml( obj,fid) % {{{12 function createxml(self,fid) % {{{ 13 13 fprintf(fid, '\n\n'); 14 14 fprintf(fid, '%s\n', '<!-- Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p -->'); 15 15 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Friction: Sigma= drag^2 * Neff ^r * u ^s, with Neff=rho_ice*g*thickness+rho_water*g*bed, r=q/p and s=1/p">','<section name="frictionweertman" />'); 16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="coefficient" type="', class( obj.coefficient),'" default="', convert2str(obj.coefficient),'">', ' <section name="frictionweertman" />',' <help> frictionweertman coefficient [SI] </help>','</parameter>');17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="p" type="', class( obj.p),'" default="', convert2str(obj.p),'">', ' <section name="frictionweertman" />',' <help> p exponent </help>','</parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="q" type="', class( obj.q),'" default="', convert2str(obj.q),'">', ' <section name="frictionweertman" />',' <help> q exponent </help>','</parameter>');16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="coefficient" type="', class(self.coefficient),'" default="', convert2str(self.coefficient),'">', ' <section name="frictionweertman" />',' <help> frictionweertman coefficient [SI] </help>','</parameter>'); 17 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="p" type="', class(self.p),'" default="', convert2str(self.p),'">', ' <section name="frictionweertman" />',' <help> p exponent </help>','</parameter>'); 18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="q" type="', class(self.q),'" default="', convert2str(self.q),'">', ' <section name="frictionweertman" />',' <help> q exponent </help>','</parameter>'); 19 19 fprintf(fid,'%s\n%s\n','</frame>'); 20 20 end % }}} 21 function obj= frictionweertman(varargin) % {{{21 function self = frictionweertman(varargin) % {{{ 22 22 switch nargin 23 23 case 0 24 obj=setdefaultparameters(obj);24 self=setdefaultparameters(self); 25 25 otherwise 26 26 error('constructor not supported'); 27 27 end 28 28 end % }}} 29 function obj = setdefaultparameters(obj) % {{{29 function self = setdefaultparameters(self) % {{{ 30 30 31 31 end % }}} 32 function md = checkconsistency( obj,md,solution,analyses) % {{{32 function md = checkconsistency(self,md,solution,analyses) % {{{ 33 33 34 34 %Early return … … 37 37 md = checkfield(md,'fieldname','friction.m','NaN',1,'size',[md.mesh.numberofelements 1]); 38 38 end % }}} 39 function disp( obj) % {{{39 function disp(self) % {{{ 40 40 disp('Weertman sliding law parameters:'); 41 41 disp(' Weertman''s sliding law reads:'); … … 44 44 disp(' Sigma_b = C^(-1/m) * |u_b|^(1/m-1) u_b'); 45 45 disp(' '); 46 fielddisplay( obj,'C','friction coefficient [SI]');47 fielddisplay( obj,'m','m exponent');46 fielddisplay(self,'C','friction coefficient [SI]'); 47 fielddisplay(self,'m','m exponent'); 48 48 end % }}} 49 function marshall( obj,md,fid) % {{{49 function marshall(self,md,fid) % {{{ 50 50 yts=365.0*24.0*3600.0; 51 51 52 52 WriteData(fid,'enum',FrictionLawEnum,'data',2,'format','Integer'); 53 WriteData(fid,'class','friction','object', obj,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);54 WriteData(fid,'class','friction','object', obj,'fieldname','m','format','DoubleMat','mattype',2);53 WriteData(fid,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 54 WriteData(fid,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2); 55 55 56 56 -
issm/trunk-jpl/src/m/classes/frictionweertmantemp.m
r19027 r19040 11 11 end 12 12 methods 13 function obj= frictionweertmantemp(varargin) % {{{13 function self = frictionweertmantemp(varargin) % {{{ 14 14 switch nargin 15 15 case 0 16 obj=setdefaultparameters(obj);16 self=setdefaultparameters(self); 17 17 otherwise 18 18 error('constructor not supported'); 19 19 end 20 20 end % }}} 21 function obj = setdefaultparameters(obj) % {{{21 function self = setdefaultparameters(self) % {{{ 22 22 23 23 end % }}} 24 function md = checkconsistency( obj,md,solution,analyses) % {{{24 function md = checkconsistency(self,md,solution,analyses) % {{{ 25 25 26 26 %Early return … … 29 29 md = checkfield(md,'fieldname','friction.m','NaN',1,'size',[md.mesh.numberofelements 1]); 30 30 end % }}} 31 function disp( obj) % {{{31 function disp(self) % {{{ 32 32 disp('Weertman sliding law parameters:'); 33 33 disp(' Sigma_b = C^(-1/m) * |u_b|^(1/m-1) u_b * 1/f(T)'); 34 34 disp(' '); 35 fielddisplay( obj,'gamma','submelt sliding parameter f(T) = exp((T-Tpmp)/gamma)');36 fielddisplay( obj,'C','friction coefficient [SI]');37 fielddisplay( obj,'m','m exponent');35 fielddisplay(self,'gamma','submelt sliding parameter f(T) = exp((T-Tpmp)/gamma)'); 36 fielddisplay(self,'C','friction coefficient [SI]'); 37 fielddisplay(self,'m','m exponent'); 38 38 end % }}} 39 function marshall( obj,md,fid) % {{{39 function marshall(self,md,fid) % {{{ 40 40 yts=365.0*24.0*3600.0; 41 41 42 42 WriteData(fid,'enum',FrictionLawEnum,'data',6,'format','Integer'); 43 WriteData(fid,'class','friction','object', obj,'fieldname','gamma','format','Double');44 WriteData(fid,'class','friction','object', obj,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);45 WriteData(fid,'class','friction','object', obj,'fieldname','m','format','DoubleMat','mattype',2);43 WriteData(fid,'class','friction','object',self,'fieldname','gamma','format','Double'); 44 WriteData(fid,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 45 WriteData(fid,'class','friction','object',self,'fieldname','m','format','DoubleMat','mattype',2); 46 46 47 47 -
issm/trunk-jpl/src/m/classes/geometry.m
r19027 r19040 13 13 end 14 14 methods (Static) 15 function obj = loadobj(obj) % {{{15 function self = loadobj(self) % {{{ 16 16 % This function is directly called by matlab when a model object is 17 17 % loaded. Update old properties here 18 18 19 19 %2014 March 26th 20 if isstruct( obj),20 if isstruct(self), 21 21 disp('WARNING: updating geometry'); 22 22 disp(' md.geometry.bed is now md.geometry.base'); 23 23 disp(' md.geometry.bathymetry is now md.geometry.bed'); 24 obj2 =obj;25 obj=geometry();26 obj.surface = obj2.surface;27 obj.thickness = obj2.thickness;28 obj.base = obj2.bed;29 obj.bed = obj2.bathymetry;24 obj2 = self; 25 self = geometry(); 26 self.surface = obj2.surface; 27 self.thickness = obj2.thickness; 28 self.base = obj2.bed; 29 self.bed = obj2.bathymetry; 30 30 end 31 31 … … 33 33 end 34 34 methods 35 %function createxml( obj,fid)36 function createxml( obj, fid)% {{{35 %function createxml(self,fid) 36 function createxml(self, fid)% {{{ 37 37 fprintf(fid, '\n\n'); 38 38 fprintf(fid, '%s\n', '<!-- geometry -->'); … … 41 41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thickness" type="','path','" optional="','false','">',' <section name="geometry" />',' <help> ice thickness [m] </help>','</parameter>'); 42 42 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="bed" type="','path','" optional="','false','">',' <section name="geometry" />',' <help> bed elevation [m] </help>','</parameter>'); 43 %fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="bathymetry" type="',class( obj.bathymetry),'" default="',convert2str(obj.bathymetry),'">',' <section name="geometry" />',' <help> bathymetry elevation [m] </help>','</parameter>');44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="hydrostatic_ratio" type="',class( obj.hydrostatic_ratio),'" default="',convert2str(obj.hydrostatic_ratio),'">',' <section name="geometry" />',' <help> coefficient for ice shelves; thickness correction: hydrostatic_ratio H_obs+ (1-hydrostatic_ratio) H_hydro </help>','</parameter>');43 %fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="bathymetry" type="',class(self.bathymetry),'" default="',convert2str(self.bathymetry),'">',' <section name="geometry" />',' <help> bathymetry elevation [m] </help>','</parameter>'); 44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="hydrostatic_ratio" type="',class(self.hydrostatic_ratio),'" default="',convert2str(self.hydrostatic_ratio),'">',' <section name="geometry" />',' <help> coefficient for ice shelves; thickness correction: hydrostatic_ratio H_obs+ (1-hydrostatic_ratio) H_hydro </help>','</parameter>'); 45 45 fprintf(fid,'%s\n%s\n','</frame>'); 46 46 end % }}} 47 function obj= geometry(varargin) % {{{47 function self = geometry(varargin) % {{{ 48 48 switch nargin 49 49 case 0 50 obj=setdefaultparameters(obj);50 self=setdefaultparameters(self); 51 51 otherwise 52 52 error('constructor not supported'); 53 53 end 54 54 end % }}} 55 function obj = setdefaultparameters(obj) % {{{55 function self = setdefaultparameters(self) % {{{ 56 56 57 57 end % }}} 58 function md = checkconsistency( obj,md,solution,analyses) % {{{58 function md = checkconsistency(self,md,solution,analyses) % {{{ 59 59 60 60 if (solution==SeaiceSolutionEnum()), … … 68 68 md = checkfield(md,'fieldname','geometry.base' ,'NaN',1,'size',[md.mesh.numberofvertices 1]); 69 69 md = checkfield(md,'fieldname','geometry.thickness','NaN',1,'size',[md.mesh.numberofvertices 1],'>',0); 70 if any(( obj.thickness-obj.surface+obj.base)>10^-9),70 if any((self.thickness-self.surface+self.base)>10^-9), 71 71 md = checkmessage(md,['equality thickness=surface-base violated']); 72 72 end … … 76 76 end 77 77 end % }}} 78 function disp( obj) % {{{78 function disp(self) % {{{ 79 79 disp(sprintf(' geometry parameters:')); 80 80 81 fielddisplay( obj,'surface','ice upper surface elevation [m]');82 fielddisplay( obj,'thickness','ice thickness [m]');83 fielddisplay( obj,'base','ice base elevation [m]');84 fielddisplay( obj,'bed','bed elevation [m]');81 fielddisplay(self,'surface','ice upper surface elevation [m]'); 82 fielddisplay(self,'thickness','ice thickness [m]'); 83 fielddisplay(self,'base','ice base elevation [m]'); 84 fielddisplay(self,'bed','bed elevation [m]'); 85 85 86 86 end % }}} 87 function marshall( obj,md,fid) % {{{88 WriteData(fid,'data', obj.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum());89 WriteData(fid,'data', obj.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'timeserieslength',md.mesh.numberofvertices+1);90 WriteData(fid,'data', obj.base,'format','DoubleMat','mattype',1,'enum',BaseEnum());91 WriteData(fid,'data', obj.bed,'format','DoubleMat','mattype',1,'enum',BedEnum());92 WriteData(fid,'object', obj,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1);87 function marshall(self,md,fid) % {{{ 88 WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum()); 89 WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'timeserieslength',md.mesh.numberofvertices+1); 90 WriteData(fid,'data',self.base,'format','DoubleMat','mattype',1,'enum',BaseEnum()); 91 WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum()); 92 WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1); 93 93 end % }}} 94 94 end -
issm/trunk-jpl/src/m/classes/gia.m
r17931 r19040 11 11 end 12 12 methods 13 function createxml( obj,fid) % {{{13 function createxml(self,fid) % {{{ 14 14 fprintf(fid, '<!-- gia -->\n'); 15 15 16 16 % gia solution parameters 17 17 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="gia parameters">','<section name="gia" />'); 18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mantle_viscosity" type="',class( obj.mantle_viscosity),'" default="',convert2str(obj.mantle_viscosity),'">',' <section name="gia" />',' <help> mantle viscosity[Pa s] </help>',' </parameter>');19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lithosphere_thickness" type="',class( obj.lithosphere_thickness),'" default="',convert2str(obj.lithosphere_thickness),'">',' <section name="gia" />',' <help> lithosphere thickness (km) </help>',' </parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mantle_viscosity" type="',class(self.mantle_viscosity),'" default="',convert2str(self.mantle_viscosity),'">',' <section name="gia" />',' <help> mantle viscosity[Pa s] </help>',' </parameter>'); 19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lithosphere_thickness" type="',class(self.lithosphere_thickness),'" default="',convert2str(self.lithosphere_thickness),'">',' <section name="gia" />',' <help> lithosphere thickness (km) </help>',' </parameter>'); 20 20 %cross_section_shape drop-down (1 o r 2) 21 21 fprintf(fid,'%s\n%s\n%s\n%s\n',' <parameter key ="cross_section_shape" type="alternative" optional="false">',' <section name="gia" />',' <help> 1: square-edged (default). 2: elliptical. See iedge in GiaDeflectionCore </help>'); … … 26 26 27 27 end % }}} 28 function obj= gia(varargin) % {{{28 function self = gia(varargin) % {{{ 29 29 switch nargin 30 30 case 0 31 obj=setdefaultparameters(obj);31 self=setdefaultparameters(self); 32 32 otherwise 33 33 error('constructor not supported'); 34 34 end 35 35 end % }}} 36 function obj = setdefaultparameters(obj) % {{{37 obj.cross_section_shape=1; %square as default (see iedge in GiaDeflectionCorex)36 function self = setdefaultparameters(self) % {{{ 37 self.cross_section_shape=1; %square as default (see iedge in GiaDeflectionCorex) 38 38 end % }}} 39 function md = checkconsistency( obj,md,solution,analyses) % {{{39 function md = checkconsistency(self,md,solution,analyses) % {{{ 40 40 41 41 if ~ismember(GiaAnalysisEnum(),analyses), return; end … … 60 60 61 61 end % }}} 62 function disp( obj) % {{{62 function disp(self) % {{{ 63 63 disp(sprintf(' gia parameters:')); 64 64 65 fielddisplay( obj,'mantle_viscosity','mantle viscosity[Pa s]');66 fielddisplay( obj,'lithosphere_thickness','lithosphere thickness (km)');67 fielddisplay( obj,'cross_section_shape','1: square-edged (default). 2: elliptical. See iedge in GiaDeflectionCore');65 fielddisplay(self,'mantle_viscosity','mantle viscosity[Pa s]'); 66 fielddisplay(self,'lithosphere_thickness','lithosphere thickness (km)'); 67 fielddisplay(self,'cross_section_shape','1: square-edged (default). 2: elliptical. See iedge in GiaDeflectionCore'); 68 68 69 69 end % }}} 70 function marshall( obj,md,fid) % {{{71 WriteData(fid,'object', obj,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1);72 WriteData(fid,'object', obj,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10^3); %from km to m73 WriteData(fid,'object', obj,'fieldname','cross_section_shape','format','Integer');70 function marshall(self,md,fid) % {{{ 71 WriteData(fid,'object',self,'fieldname','mantle_viscosity','format','DoubleMat','mattype',1); 72 WriteData(fid,'object',self,'fieldname','lithosphere_thickness','format','DoubleMat','mattype',1,'scale',10^3); %from km to m 73 WriteData(fid,'object',self,'fieldname','cross_section_shape','format','Integer'); 74 74 end % }}} 75 75 end -
issm/trunk-jpl/src/m/classes/groundingline.m
r18861 r19040 9 9 end 10 10 methods 11 function createxml( obj,fid) % {{{11 function createxml(self,fid) % {{{ 12 12 fprintf(fid, '\n\n'); 13 13 fprintf(fid, '%s\n', '<!-- groundingline -->'); … … 24 24 fprintf(fid,'%s\n%s\n','</frame>'); 25 25 end % }}} 26 function obj= groundingline(varargin) % {{{26 function self = groundingline(varargin) % {{{ 27 27 switch nargin 28 28 case 0 29 obj=setdefaultparameters(obj);29 self=setdefaultparameters(self); 30 30 otherwise 31 31 error('constructor not supported'); 32 32 end 33 33 end % }}} 34 function obj = setdefaultparameters(obj) % {{{34 function self = setdefaultparameters(self) % {{{ 35 35 36 36 %Type of migration 37 obj.migration='None';37 self.migration='None'; 38 38 39 39 end % }}} 40 function md = checkconsistency( obj,md,solution,analyses) % {{{40 function md = checkconsistency(self,md,solution,analyses) % {{{ 41 41 42 42 md = checkfield(md,'fieldname','groundingline.migration','values',{'None' 'AggressiveMigration' 'SoftMigration' 'SubelementMigration' 'SubelementMigration2' 'Contact' 'None' 'GroundingOnly'}); 43 43 44 if ~strcmp( obj.migration,'None'),44 if ~strcmp(self.migration,'None'), 45 45 if isnan(md.geometry.bed), 46 46 md = checkmessage(md,['requesting grounding line migration, but bathymetry is absent!']); … … 56 56 57 57 end % }}} 58 function disp( obj) % {{{58 function disp(self) % {{{ 59 59 disp(sprintf(' grounding line migration parameters:')); 60 fielddisplay( obj,'migration','type of grounding line migration: ''SoftMigration'',''AggressiveMigration'',''SubelementMigration'',''SubelementMigration2'' or ''None''');60 fielddisplay(self,'migration','type of grounding line migration: ''SoftMigration'',''AggressiveMigration'',''SubelementMigration'',''SubelementMigration2'' or ''None'''); 61 61 62 62 end % }}} 63 function marshall( obj,md,fid) % {{{64 WriteData(fid,'data',StringToEnum( obj.migration),'enum',GroundinglineMigrationEnum(),'format','Integer');63 function marshall(self,md,fid) % {{{ 64 WriteData(fid,'data',StringToEnum(self.migration),'enum',GroundinglineMigrationEnum(),'format','Integer'); 65 65 end % }}} 66 66 end -
issm/trunk-jpl/src/m/classes/hydrologydc.m
r19027 r19040 37 37 end 38 38 methods 39 % {{{ function obj= hydrologydc(varargin)40 function obj= hydrologydc(varargin)39 % {{{ function self = hydrologydc(varargin) 40 function self = hydrologydc(varargin) 41 41 switch nargin 42 42 case 0 43 obj=setdefaultparameters(obj);43 self=setdefaultparameters(self); 44 44 otherwise 45 45 error('constructor not supported'); … … 54 54 55 55 end % }}} 56 % {{{ function obj = setdefaultparameters(obj)57 function obj = setdefaultparameters(obj)56 % {{{ function self = setdefaultparameters(self) 57 function self = setdefaultparameters(self) 58 58 59 59 %Parameters from de Fleurian 2014 60 obj.water_compressibility = 5.04e-10;61 obj.isefficientlayer = 1;62 obj.penalty_factor = 3;63 obj.penalty_lock = 0;64 obj.rel_tol = 1.0e-06;65 obj.max_iter = 100;66 obj.sedimentlimit_flag = 0;67 obj.sedimentlimit = 0;68 obj.transfer_flag = 0;69 obj.leakage_factor = 10.0;70 71 obj.sediment_compressibility = 1.0e-08;72 obj.sediment_porosity = 0.4;73 obj.sediment_thickness = 20.0;74 obj.sediment_transmitivity = 8.0e-04;75 76 obj.epl_compressibility = 1.0e-08;77 obj.epl_porosity = 0.4;78 obj.epl_initial_thickness = 1.0;79 obj.epl_colapse_thickness = 1.0e-3;80 obj.epl_thick_comp = 1;81 obj.epl_max_thickness = 5.0;82 obj.epl_conductivity = 8.0e-02;83 obj.eplflip_lock = 0;84 end 85 % }}} 86 % {{{ function md = checkconsistency( obj,md,solution,analyses)87 function md = checkconsistency( obj,md,solution,analyses)60 self.water_compressibility = 5.04e-10; 61 self.isefficientlayer = 1; 62 self.penalty_factor = 3; 63 self.penalty_lock = 0; 64 self.rel_tol = 1.0e-06; 65 self.max_iter = 100; 66 self.sedimentlimit_flag = 0; 67 self.sedimentlimit = 0; 68 self.transfer_flag = 0; 69 self.leakage_factor = 10.0; 70 71 self.sediment_compressibility = 1.0e-08; 72 self.sediment_porosity = 0.4; 73 self.sediment_thickness = 20.0; 74 self.sediment_transmitivity = 8.0e-04; 75 76 self.epl_compressibility = 1.0e-08; 77 self.epl_porosity = 0.4; 78 self.epl_initial_thickness = 1.0; 79 self.epl_colapse_thickness = 1.0e-3; 80 self.epl_thick_comp = 1; 81 self.epl_max_thickness = 5.0; 82 self.epl_conductivity = 8.0e-02; 83 self.eplflip_lock = 0; 84 end 85 % }}} 86 % {{{ function md = checkconsistency(self,md,solution,analyses) 87 function md = checkconsistency(self,md,solution,analyses) 88 88 %Early return 89 89 if ~ismember(HydrologyDCInefficientAnalysisEnum(),analyses) & ~ismember(HydrologyDCEfficientAnalysisEnum(),analyses), … … 99 99 md = checkfield(md,'fieldname','hydrology.sedimentlimit_flag','numel',[1],'values',[0 1 2 3]); 100 100 md = checkfield(md,'fieldname','hydrology.transfer_flag','numel',[1],'values',[0 1]); 101 if obj.sedimentlimit_flag==1,101 if self.sedimentlimit_flag==1, 102 102 md = checkfield(md,'fieldname','hydrology.sedimentlimit','>',0,'numel',1); 103 103 end 104 if obj.transfer_flag==1,104 if self.transfer_flag==1, 105 105 md = checkfield(md,'fieldname','hydrology.leakage_factor','>',0,'numel',1); 106 106 end … … 113 113 md = checkfield(md,'fieldname','hydrology.sediment_transmitivity','>=',0,'size',[md.mesh.numberofvertices 1]); 114 114 115 if obj.isefficientlayer==1,115 if self.isefficientlayer==1, 116 116 md = checkfield(md,'fieldname','hydrology.spcepl_head','timeseries',1); 117 117 md = checkfield(md,'fieldname','hydrology.mask_eplactive_node','size',[md.mesh.numberofvertices 1],'values',[0 1]); … … 124 124 md = checkfield(md,'fieldname','hydrology.epl_conductivity','>',0,'numel',1); 125 125 md = checkfield(md,'fieldname','hydrology.eplflip_lock','>=',0,'numel',1); 126 if ( obj.epl_colapse_thickness>obj.epl_initial_thickness),126 if (self.epl_colapse_thickness>self.epl_initial_thickness), 127 127 md = checkmessage(md,'Colapsing thickness for EPL larger than initial thickness'); 128 128 end … … 130 130 end 131 131 % }}} 132 % {{{ function disp( obj)133 function disp( obj)132 % {{{ function disp(self) 133 function disp(self) 134 134 disp(sprintf(' hydrology Dual Porous Continuum Equivalent parameters:')); 135 135 disp(sprintf(' - general parameters')); 136 fielddisplay( obj,'water_compressibility','compressibility of water [Pa^-1]');137 fielddisplay( obj,'isefficientlayer','do we use an efficient drainage system [1: true; 0: false]');138 fielddisplay( obj,'penalty_factor','exponent of the value used in the penalisation method [dimensionless]');139 fielddisplay( obj,'penalty_lock','stabilize unstable constraints that keep zigzagging after n iteration (default is 0, no stabilization)');140 fielddisplay( obj,'rel_tol','tolerance of the nonlinear iteration for the transfer between layers [dimensionless]');141 fielddisplay( obj,'max_iter','maximum number of nonlinear iteration');142 fielddisplay( obj,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer');136 fielddisplay(self,'water_compressibility','compressibility of water [Pa^-1]'); 137 fielddisplay(self,'isefficientlayer','do we use an efficient drainage system [1: true; 0: false]'); 138 fielddisplay(self,'penalty_factor','exponent of the value used in the penalisation method [dimensionless]'); 139 fielddisplay(self,'penalty_lock','stabilize unstable constraints that keep zigzagging after n iteration (default is 0, no stabilization)'); 140 fielddisplay(self,'rel_tol','tolerance of the nonlinear iteration for the transfer between layers [dimensionless]'); 141 fielddisplay(self,'max_iter','maximum number of nonlinear iteration'); 142 fielddisplay(self,'sedimentlimit_flag','what kind of upper limit is applied for the inefficient layer'); 143 143 disp(sprintf('%55s 0: no limit',' ')); 144 144 disp(sprintf('%55s 1: user defined: %s',' ','sedimentlimit')); 145 145 disp(sprintf('%55s 2: hydrostatic pressure',' ')); 146 146 disp(sprintf('%55s 3: normal stress',' ')); 147 if obj.sedimentlimit_flag==1,148 fielddisplay( obj,'sedimentlimit','user defined upper limit for the inefficient layer [m]');149 end 150 fielddisplay( obj,'transfer_flag',['what kind of transfer method is applied between the layers']);147 if self.sedimentlimit_flag==1, 148 fielddisplay(self,'sedimentlimit','user defined upper limit for the inefficient layer [m]'); 149 end 150 fielddisplay(self,'transfer_flag',['what kind of transfer method is applied between the layers']); 151 151 disp(sprintf('%55s 0: no transfer',' ')); 152 152 disp(sprintf('%55s 1: constant leakage factor: %s',' ','leakage_factor')); 153 if obj.transfer_flag==1,154 fielddisplay( obj,'leakage_factor','user defined leakage factor [m]');155 end 156 fielddisplay( obj,'basal_moulin_input','water flux at a given point [m3 s-1]');153 if self.transfer_flag==1, 154 fielddisplay(self,'leakage_factor','user defined leakage factor [m]'); 155 end 156 fielddisplay(self,'basal_moulin_input','water flux at a given point [m3 s-1]'); 157 157 disp(sprintf(' - for the sediment layer')); 158 fielddisplay( obj,'spcsediment_head','sediment water head constraints (NaN means no constraint) [m above MSL]');159 fielddisplay( obj,'sediment_compressibility','sediment compressibility [Pa^-1]');160 fielddisplay( obj,'sediment_porosity','sediment [dimensionless]');161 fielddisplay( obj,'sediment_thickness','sediment thickness [m]');162 fielddisplay( obj,'sediment_transmitivity','sediment transmitivity [m^2/s]');163 164 if obj.isefficientlayer==1,158 fielddisplay(self,'spcsediment_head','sediment water head constraints (NaN means no constraint) [m above MSL]'); 159 fielddisplay(self,'sediment_compressibility','sediment compressibility [Pa^-1]'); 160 fielddisplay(self,'sediment_porosity','sediment [dimensionless]'); 161 fielddisplay(self,'sediment_thickness','sediment thickness [m]'); 162 fielddisplay(self,'sediment_transmitivity','sediment transmitivity [m^2/s]'); 163 164 if self.isefficientlayer==1, 165 165 disp(sprintf(' - for the epl layer')); 166 fielddisplay( obj,'spcepl_head','epl water head constraints (NaN means no constraint) [m above MSL]');167 fielddisplay( obj,'mask_eplactive_node','active (1) or not (0) EPL');168 fielddisplay( obj,'epl_compressibility','epl compressibility [Pa^-1]');169 fielddisplay( obj,'epl_porosity','epl [dimensionless]');170 fielddisplay( obj,'epl_initial_thickness','epl initial thickness [m]');171 fielddisplay( obj,'epl_colapse_thickness','epl colapsing thickness [m]');172 fielddisplay( obj,'epl_thick_comp','epl thickness computation flag');173 fielddisplay( obj,'epl_max_thickness','epl maximal thickness [m]');174 fielddisplay( obj,'epl_conductivity','epl conductivity [m^2/s]');175 fielddisplay( obj,'eplflip_lock','lock the epl activation to avoid fli-floping (default is 0, no stabilization)');176 end 177 178 end 179 % }}} 180 % {{{ function marshall( obj,md,fid)181 function marshall( obj,md,fid)166 fielddisplay(self,'spcepl_head','epl water head constraints (NaN means no constraint) [m above MSL]'); 167 fielddisplay(self,'mask_eplactive_node','active (1) or not (0) EPL'); 168 fielddisplay(self,'epl_compressibility','epl compressibility [Pa^-1]'); 169 fielddisplay(self,'epl_porosity','epl [dimensionless]'); 170 fielddisplay(self,'epl_initial_thickness','epl initial thickness [m]'); 171 fielddisplay(self,'epl_colapse_thickness','epl colapsing thickness [m]'); 172 fielddisplay(self,'epl_thick_comp','epl thickness computation flag'); 173 fielddisplay(self,'epl_max_thickness','epl maximal thickness [m]'); 174 fielddisplay(self,'epl_conductivity','epl conductivity [m^2/s]'); 175 fielddisplay(self,'eplflip_lock','lock the epl activation to avoid fli-floping (default is 0, no stabilization)'); 176 end 177 178 end 179 % }}} 180 % {{{ function marshall(self,md,fid) 181 function marshall(self,md,fid) 182 182 WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologydcEnum(),'format','Integer'); 183 WriteData(fid,'object', obj,'fieldname','water_compressibility','format','Double');184 WriteData(fid,'object', obj,'fieldname','isefficientlayer','format','Boolean');185 WriteData(fid,'object', obj,'fieldname','penalty_factor','format','Double');186 WriteData(fid,'object', obj,'fieldname','penalty_lock','format','Integer');187 WriteData(fid,'object', obj,'fieldname','rel_tol','format','Double');188 WriteData(fid,'object', obj,'fieldname','max_iter','format','Integer');189 WriteData(fid,'object', obj,'fieldname','sedimentlimit_flag','format','Integer');190 WriteData(fid,'object', obj,'fieldname','transfer_flag','format','Integer');191 if obj.sedimentlimit_flag==1,192 WriteData(fid,'object', obj,'fieldname','sedimentlimit','format','Double');193 end 194 if obj.transfer_flag==1,195 WriteData(fid,'object', obj,'fieldname','leakage_factor','format','Double');196 end 197 WriteData(fid,'object', obj,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1)198 199 WriteData(fid,'object', obj,'fieldname','spcsediment_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);200 WriteData(fid,'object', obj,'fieldname','sediment_compressibility','format','Double');201 WriteData(fid,'object', obj,'fieldname','sediment_porosity','format','Double');202 WriteData(fid,'object', obj,'fieldname','sediment_thickness','format','Double');203 WriteData(fid,'object', obj,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1');204 205 if obj.isefficientlayer==1,206 WriteData(fid,'object', obj,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);207 WriteData(fid,'object', obj,'fieldname','mask_eplactive_node','format','DoubleMat','mattype',1);208 WriteData(fid,'object', obj,'fieldname','epl_compressibility','format','Double');209 WriteData(fid,'object', obj,'fieldname','epl_porosity','format','Double');210 WriteData(fid,'object', obj,'fieldname','epl_initial_thickness','format','Double');211 WriteData(fid,'object', obj,'fieldname','epl_colapse_thickness','format','Double');212 WriteData(fid,'object', obj,'fieldname','epl_thick_comp','format','Integer');213 WriteData(fid,'object', obj,'fieldname','epl_max_thickness','format','Double');214 WriteData(fid,'object', obj,'fieldname','epl_conductivity','format','Double');215 WriteData(fid,'object', obj,'fieldname','eplflip_lock','format','Integer');183 WriteData(fid,'object',self,'fieldname','water_compressibility','format','Double'); 184 WriteData(fid,'object',self,'fieldname','isefficientlayer','format','Boolean'); 185 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double'); 186 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer'); 187 WriteData(fid,'object',self,'fieldname','rel_tol','format','Double'); 188 WriteData(fid,'object',self,'fieldname','max_iter','format','Integer'); 189 WriteData(fid,'object',self,'fieldname','sedimentlimit_flag','format','Integer'); 190 WriteData(fid,'object',self,'fieldname','transfer_flag','format','Integer'); 191 if self.sedimentlimit_flag==1, 192 WriteData(fid,'object',self,'fieldname','sedimentlimit','format','Double'); 193 end 194 if self.transfer_flag==1, 195 WriteData(fid,'object',self,'fieldname','leakage_factor','format','Double'); 196 end 197 WriteData(fid,'object',self,'fieldname','basal_moulin_input','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1) 198 199 WriteData(fid,'object',self,'fieldname','spcsediment_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 200 WriteData(fid,'object',self,'fieldname','sediment_compressibility','format','Double'); 201 WriteData(fid,'object',self,'fieldname','sediment_porosity','format','Double'); 202 WriteData(fid,'object',self,'fieldname','sediment_thickness','format','Double'); 203 WriteData(fid,'object',self,'fieldname','sediment_transmitivity','format','DoubleMat','mattype',1'); 204 205 if self.isefficientlayer==1, 206 WriteData(fid,'object',self,'fieldname','spcepl_head','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 207 WriteData(fid,'object',self,'fieldname','mask_eplactive_node','format','DoubleMat','mattype',1); 208 WriteData(fid,'object',self,'fieldname','epl_compressibility','format','Double'); 209 WriteData(fid,'object',self,'fieldname','epl_porosity','format','Double'); 210 WriteData(fid,'object',self,'fieldname','epl_initial_thickness','format','Double'); 211 WriteData(fid,'object',self,'fieldname','epl_colapse_thickness','format','Double'); 212 WriteData(fid,'object',self,'fieldname','epl_thick_comp','format','Integer'); 213 WriteData(fid,'object',self,'fieldname','epl_max_thickness','format','Double'); 214 WriteData(fid,'object',self,'fieldname','epl_conductivity','format','Double'); 215 WriteData(fid,'object',self,'fieldname','eplflip_lock','format','Integer'); 216 216 end 217 217 end -
issm/trunk-jpl/src/m/classes/hydrologyshreve.m
r19027 r19040 10 10 end 11 11 methods 12 function createxml( obj,fid) % {{{12 function createxml(self,fid) % {{{ 13 13 fprintf(fid, '\n\n'); 14 14 fprintf(fid, '%s\n', '<!-- Hydrology -->'); … … 17 17 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Hydrologyshreve solution parameters">','<section name="hydrologyshreve" />'); 18 18 19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcwatercolumn" type="', class( obj.spcwatercolumn),'" default="', convert2str(obj.spcwatercolumn),'">', ' <section name="hydrologyshreve" />',' <help> water thickness constraints (NaN means no constraint) [m] </help>','</parameter>');20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="stabilization" type="', class( obj.stabilization),'" default="', convert2str(obj.stabilization),'">', ' <section name="hydrologyshreve" />',' <help> artificial diffusivity (default is 1). can be more than 1 to increase diffusivity. </help>','</parameter>');19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcwatercolumn" type="', class(self.spcwatercolumn),'" default="', convert2str(self.spcwatercolumn),'">', ' <section name="hydrologyshreve" />',' <help> water thickness constraints (NaN means no constraint) [m] </help>','</parameter>'); 20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="stabilization" type="', class(self.stabilization),'" default="', convert2str(self.stabilization),'">', ' <section name="hydrologyshreve" />',' <help> artificial diffusivity (default is 1). can be more than 1 to increase diffusivity. </help>','</parameter>'); 21 21 fprintf(fid,'%s\n%s\n','</frame>'); 22 22 end % }}} 23 function obj= hydrologyshreve(varargin) % {{{23 function self = hydrologyshreve(varargin) % {{{ 24 24 switch nargin 25 25 case 0 26 obj=setdefaultparameters(obj);26 self=setdefaultparameters(self); 27 27 case 1 28 obj=structtoobj( obj,varargin{1});28 obj=structtoobj(self,varargin{1}); 29 29 otherwise 30 30 error('constructor not supported'); 31 31 end 32 32 end % }}} 33 function obj = setdefaultparameters(obj) % {{{33 function self = setdefaultparameters(self) % {{{ 34 34 35 35 %Type of stabilization to use 0:nothing 1:artificial_diffusivity 36 obj.stabilization=1;36 self.stabilization=1; 37 37 end % }}} 38 function md = checkconsistency( obj,md,solution,analyses) % {{{38 function md = checkconsistency(self,md,solution,analyses) % {{{ 39 39 40 40 %Early return … … 46 46 md = checkfield(md,'fieldname','hydrology.stabilization','>=',0); 47 47 end % }}} 48 function disp( obj) % {{{48 function disp(self) % {{{ 49 49 disp(sprintf(' hydrologyshreve solution parameters:')); 50 fielddisplay( obj,'spcwatercolumn','water thickness constraints (NaN means no constraint) [m]');51 fielddisplay( obj,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.');50 fielddisplay(self,'spcwatercolumn','water thickness constraints (NaN means no constraint) [m]'); 51 fielddisplay(self,'stabilization','artificial diffusivity (default is 1). can be more than 1 to increase diffusivity.'); 52 52 53 53 end % }}} 54 function marshall( obj,md,fid) % {{{54 function marshall(self,md,fid) % {{{ 55 55 WriteData(fid,'enum',HydrologyModelEnum(),'data',HydrologyshreveEnum(),'format','Integer'); 56 WriteData(fid,'object', obj,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);57 WriteData(fid,'object', obj,'fieldname','stabilization','format','Double');56 WriteData(fid,'object',self,'fieldname','spcwatercolumn','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 57 WriteData(fid,'object',self,'fieldname','stabilization','format','Double'); 58 58 end % }}} 59 59 end -
issm/trunk-jpl/src/m/classes/independent.m
r16815 r19040 13 13 end 14 14 methods 15 function obj= independent(varargin) % {{{15 function self = independent(varargin) % {{{ 16 16 17 17 %use provided options to change fields … … 19 19 20 20 %OK get other fields 21 obj=AssignObjectFields(pairoptions(varargin{:}),obj);21 self=AssignObjectFields(pairoptions(varargin{:}),self); 22 22 23 23 end 24 24 %}}} 25 function obj = setdefaultparameters(obj) % {{{25 function self = setdefaultparameters(self) % {{{ 26 26 %do nothing 27 27 28 28 end % }}} 29 function md = checkconsistency( obj,md,i,solution,analyses,driver) % {{{30 if ~isnan( obj.fos_forward_index),29 function md = checkconsistency(self,md,i,solution,analyses,driver) % {{{ 30 if ~isnan(self.fos_forward_index), 31 31 if ~strcmpi(driver,'fos_forward'), 32 32 error('cannot declare an independent with a fos_forward_index when the driver is not fos_forward!'); 33 33 end 34 if obj.nods==0,34 if self.nods==0, 35 35 error('independent checkconsistency error: nods should be set to the size of the independent variable'); 36 36 end 37 37 end 38 38 39 if ~isempty( obj.fov_forward_indices),39 if ~isempty(self.fov_forward_indices), 40 40 if ~strcmpi(driver,'fov_forward'), 41 41 error('cannot declare an independent with fov_forward_indices when the driver is not fov_forward!'); 42 42 end 43 if obj.nods==0,43 if self.nods==0, 44 44 error('independent checkconsistency error: nods should be set to the size of the independent variable'); 45 45 end 46 md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.fov_forward_indices'],'>=',1,'<=', obj.nods,'size',[NaN 1]);46 md = checkfield(md,'fieldname',['autodiff.independents{' num2str(i) '}.fov_forward_indices'],'>=',1,'<=',self.nods,'size',[NaN 1]); 47 47 end 48 48 49 49 end % }}} 50 function disp( obj) % {{{50 function disp(self) % {{{ 51 51 disp(sprintf(' independent variable:')); 52 52 53 fielddisplay( obj,'name','variable name (must match corresponding Enum)');54 fielddisplay( obj,'type','type of variable (''vertex'' or ''scalar'')');55 if ~isnan( obj.fos_forward_index),56 fielddisplay( obj,'fos_forward_index','index for fos_foward driver of ADOLC');53 fielddisplay(self,'name','variable name (must match corresponding Enum)'); 54 fielddisplay(self,'type','type of variable (''vertex'' or ''scalar'')'); 55 if ~isnan(self.fos_forward_index), 56 fielddisplay(self,'fos_forward_index','index for fos_foward driver of ADOLC'); 57 57 end 58 if ~isnan( obj.fov_forward_indices),59 fielddisplay( obj,'fov_forward_indices','indices for fov_foward driver of ADOLC');58 if ~isnan(self.fov_forward_indices), 59 fielddisplay(self,'fov_forward_indices','indices for fov_foward driver of ADOLC'); 60 60 end 61 61 end % }}} 62 function scalartype=typetoscalar( obj) % {{{63 if strcmpi( obj.type,'scalar'),62 function scalartype=typetoscalar(self) % {{{ 63 if strcmpi(self.type,'scalar'), 64 64 scalartype=0; 65 elseif strcmpi( obj.type,'vertex'),65 elseif strcmpi(self.type,'vertex'), 66 66 scalartype=1; 67 elseif strcmpi( obj.type,'matrix'),67 elseif strcmpi(self.type,'matrix'), 68 68 scalartype=1; 69 else error([ obj.type ' not supported yet!']);69 else error([self.type ' not supported yet!']); 70 70 end 71 71 end % }}} -
issm/trunk-jpl/src/m/classes/initialization.m
r18732 r19040 19 19 end 20 20 methods 21 function createxml( obj,fid) % {{{21 function createxml(self,fid) % {{{ 22 22 fprintf(fid, '\n\n'); 23 23 fprintf(fid, '%s\n', '<!-- initialization -->'); 24 24 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Initial field values">','<section name="initialization" />'); 25 25 26 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vx" type="',class( obj.vx),'" default="',obj.vx,'">',' <section name="initialization" />',' <help> x component of velocity [m/yr] </help>','</parameter>');27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vy" type="',class( obj.vy),'" default="',obj.vy,'">',' <section name="initialization" />',' <help> y component of velocity [m/yr] </help>','</parameter>');28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vz" type="',class( obj.vz),'" default="',obj.vz,'">',' <section name="initialization" />',' <help> z component of velocity [m/yr] </help>','</parameter>');29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vel" type="',class( obj.vel),'" default="',obj.vel,'">',' <section name="initialization" />',' <help> velocity norm [m/yr] </help>','</parameter>');30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="pressure" type="',class( obj.pressure),'" default="',obj.pressure,'">',' <section name="initialization" />',' <help> pressure field [Pa] </help>','</parameter>');31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperature" type="',class( obj.temperature),'" default="',obj.temperature,'">',' <section name="initialization" />',' <help> fraction of water in the ice </help>','</parameter>');32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="waterfraction" type="',class( obj.waterfraction),'" default="',obj.waterfraction,'">',' <section name="initialization" />',' <help> ice thickness [m] </help>','</parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="sediment_head" type="',class( obj.sediment_head),'" default="',obj.sediment_head,'">',' <section name="initialization" />',' <help> sediment water head of subglacial system [m] </help>','</parameter>');34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="epl_head" type="',class( obj.epl_head),'" default="',obj.epl_head,'">',' <section name="initialization" />',' <help> epl water head of subglacial system [m] </help>','</parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="watercolumn" type="',class( obj.watercolumn),'" default="',obj.watercolumn,'">',' <section name="initialization" />',' <help> thickness of subglacial water [m] </help>','</parameter>');26 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vx" type="',class(self.vx),'" default="',self.vx,'">',' <section name="initialization" />',' <help> x component of velocity [m/yr] </help>','</parameter>'); 27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vy" type="',class(self.vy),'" default="',self.vy,'">',' <section name="initialization" />',' <help> y component of velocity [m/yr] </help>','</parameter>'); 28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vz" type="',class(self.vz),'" default="',self.vz,'">',' <section name="initialization" />',' <help> z component of velocity [m/yr] </help>','</parameter>'); 29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="vel" type="',class(self.vel),'" default="',self.vel,'">',' <section name="initialization" />',' <help> velocity norm [m/yr] </help>','</parameter>'); 30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="pressure" type="',class(self.pressure),'" default="',self.pressure,'">',' <section name="initialization" />',' <help> pressure field [Pa] </help>','</parameter>'); 31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperature" type="',class(self.temperature),'" default="',self.temperature,'">',' <section name="initialization" />',' <help> fraction of water in the ice </help>','</parameter>'); 32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="waterfraction" type="',class(self.waterfraction),'" default="',self.waterfraction,'">',' <section name="initialization" />',' <help> ice thickness [m] </help>','</parameter>'); 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="sediment_head" type="',class(self.sediment_head),'" default="',self.sediment_head,'">',' <section name="initialization" />',' <help> sediment water head of subglacial system [m] </help>','</parameter>'); 34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="epl_head" type="',class(self.epl_head),'" default="',self.epl_head,'">',' <section name="initialization" />',' <help> epl water head of subglacial system [m] </help>','</parameter>'); 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="watercolumn" type="',class(self.watercolumn),'" default="',self.watercolumn,'">',' <section name="initialization" />',' <help> thickness of subglacial water [m] </help>','</parameter>'); 36 36 fprintf(fid,'%s\n%s\n','</frame>'); 37 37 end % }}} 38 function obj= initialization(varargin) % {{{38 function self = initialization(varargin) % {{{ 39 39 switch nargin 40 40 case 0 41 obj=setdefaultparameters(obj);41 self=setdefaultparameters(self); 42 42 otherwise 43 43 error('constructor not supported'); 44 44 end 45 45 end % }}} 46 function obj = setdefaultparameters(obj) % {{{46 function self = setdefaultparameters(self) % {{{ 47 47 48 48 end % }}} 49 function md = checkconsistency( obj,md,solution,analyses) % {{{49 function md = checkconsistency(self,md,solution,analyses) % {{{ 50 50 if ismember(StressbalanceAnalysisEnum(),analyses) 51 51 if ~(isnan(md.initialization.vx) | isnan(md.initialization.vy)), … … 98 98 end 99 99 end % }}} 100 function disp( obj) % {{{100 function disp(self) % {{{ 101 101 disp(sprintf(' initial field values:')); 102 102 103 fielddisplay( obj,'vx','x component of velocity [m/yr]');104 fielddisplay( obj,'vy','y component of velocity [m/yr]');105 fielddisplay( obj,'vz','z component of velocity [m/yr]');106 fielddisplay( obj,'vel','velocity norm [m/yr]');107 fielddisplay( obj,'pressure','pressure field [Pa]');108 fielddisplay( obj,'temperature','temperature [K]');109 fielddisplay( obj,'waterfraction','fraction of water in the ice');110 fielddisplay( obj,'sediment_head','sediment water head of subglacial system [m]');111 fielddisplay( obj,'epl_head','epl water head of subglacial system [m]');112 fielddisplay( obj,'epl_thickness','epl layer thickness [m]');113 fielddisplay( obj,'watercolumn','thickness of subglacial water [m]');103 fielddisplay(self,'vx','x component of velocity [m/yr]'); 104 fielddisplay(self,'vy','y component of velocity [m/yr]'); 105 fielddisplay(self,'vz','z component of velocity [m/yr]'); 106 fielddisplay(self,'vel','velocity norm [m/yr]'); 107 fielddisplay(self,'pressure','pressure field [Pa]'); 108 fielddisplay(self,'temperature','temperature [K]'); 109 fielddisplay(self,'waterfraction','fraction of water in the ice'); 110 fielddisplay(self,'sediment_head','sediment water head of subglacial system [m]'); 111 fielddisplay(self,'epl_head','epl water head of subglacial system [m]'); 112 fielddisplay(self,'epl_thickness','epl layer thickness [m]'); 113 fielddisplay(self,'watercolumn','thickness of subglacial water [m]'); 114 114 115 115 end % }}} 116 function marshall( obj,md,fid) % {{{116 function marshall(self,md,fid) % {{{ 117 117 118 118 yts=365.0*24.0*3600.0; 119 119 120 WriteData(fid,'data', obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum,'scale',1./yts);121 WriteData(fid,'data', obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum,'scale',1./yts);122 WriteData(fid,'data', obj.vz,'format','DoubleMat','mattype',1,'enum',VzEnum,'scale',1./yts);123 WriteData(fid,'data', obj.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum);124 WriteData(fid,'data', obj.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum);125 WriteData(fid,'data', obj.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum);126 WriteData(fid,'data', obj.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum);127 WriteData(fid,'data', obj.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum);128 WriteData(fid,'data', obj.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum);129 WriteData(fid,'data', obj.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum);120 WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum,'scale',1./yts); 121 WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum,'scale',1./yts); 122 WriteData(fid,'data',self.vz,'format','DoubleMat','mattype',1,'enum',VzEnum,'scale',1./yts); 123 WriteData(fid,'data',self.pressure,'format','DoubleMat','mattype',1,'enum',PressureEnum); 124 WriteData(fid,'data',self.temperature,'format','DoubleMat','mattype',1,'enum',TemperatureEnum); 125 WriteData(fid,'data',self.waterfraction,'format','DoubleMat','mattype',1,'enum',WaterfractionEnum); 126 WriteData(fid,'data',self.sediment_head,'format','DoubleMat','mattype',1,'enum',SedimentHeadEnum); 127 WriteData(fid,'data',self.epl_head,'format','DoubleMat','mattype',1,'enum',EplHeadEnum); 128 WriteData(fid,'data',self.epl_thickness,'format','DoubleMat','mattype',1,'enum',HydrologydcEplThicknessEnum); 129 WriteData(fid,'data',self.watercolumn,'format','DoubleMat','mattype',1,'enum',WatercolumnEnum); 130 130 131 131 if md.thermal.isenthalpy, -
issm/trunk-jpl/src/m/classes/inversion.m
r18994 r19040 26 26 end 27 27 methods 28 function createxml( obj,fid) % {{{28 function createxml(self,fid) % {{{ 29 29 fprintf(fid, '<!-- inversion -->\n'); 30 30 31 31 % inversion parameters 32 32 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="inversion parameters">','<section name="inversion" />'); 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="iscontrol" type="',class( obj.iscontrol),'" default="',convert2str(obj.iscontrol),'">',' <section name="inversion" />',' <help> is inversion activated? </help>',' </parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="iscontrol" type="',class(self.iscontrol),'" default="',convert2str(self.iscontrol),'">',' <section name="inversion" />',' <help> is inversion activated? </help>',' </parameter>'); 34 34 35 35 % incompleteadjoing drop-down (0 or 1) … … 38 38 fprintf(fid,'%s\n%s\n',' <option value="1" type="string" default="false"> </option>','</parameter>'); 39 39 40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="control_parameters" type="',class( obj.control_parameters),'" default="',convert2str(obj.control_parameters),'">',' <section name="inversion" />',' <help> ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''} </help>',' </parameter>');41 42 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="nsteps" type="',class( obj.nsteps),'" default="',convert2str(obj.nsteps),'">',' <section name="inversion" />',' <help> number of optimization searches </help>',' </parameter>');43 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cost_functions" type="',class( obj.cost_functions),'" default="',convert2str(obj.cost_functions),'">',' <section name="inversion" />',' <help> indicate the type of response for each optimization step </help>',' </parameter>');44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cost_functions_coefficients" type="',class( obj.cost_functions_coefficients),'" default="',convert2str(obj.cost_functions_coefficients),'">',' <section name="inversion" />',' <help> cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter </help>',' </parameter>');45 46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cost_function_threshold" type="',class( obj.cost_function_threshold),'" default="',convert2str(obj.cost_function_threshold),'">',' <section name="inversion" />',' <help> misfit convergence criterion. Default is 1%, NaN if not applied </help>',' </parameter>');47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="maxiter_per_step" type="',class( obj.maxiter_per_step),'" default="',convert2str(obj.maxiter_per_step),'">',' <section name="inversion" />',' <help> maximum iterations during each optimization step </help>',' </parameter>');48 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gradient_scaling" type="',class( obj.gradient_scaling),'" default="',convert2str(obj.gradient_scaling),'">',' <section name="inversion" />',' <help> scaling factor on gradient direction during optimization, for each optimization step </help>',' </parameter>');49 50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="step_threshold" type="',class( obj.step_threshold),'" default="',convert2str(obj.step_threshold),'">',' <section name="inversion" />',' <help> decrease threshold for misfit, default is 30% </help>',' </parameter>');51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="min_parameters" type="',class( obj.min_parameters),'" default="',convert2str(obj.min_parameters),'">',' <section name="inversion" />',' <help> absolute minimum acceptable value of the inversed parameter on each vertex </help>',' </parameter>');52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="max_parameters" type="',class( obj.max_parameters),'" default="',convert2str(obj.max_parameters),'">',' <section name="inversion" />',' <help> absolute maximum acceptable value of the inversed parameter on each vertex </help>',' </parameter>');53 54 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vx_obs" type="',class( obj.vx_obs),'" default="',convert2str(obj.vx_obs),'">',' <section name="inversion" />',' <help> observed velocity x component [m/yr] </help>',' </parameter>');55 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vy_obs" type="',class( obj.vy_obs),'" default="',convert2str(obj.vy_obs),'">',' <section name="inversion" />',' <help> observed velocity y component [m/yr] </help>',' </parameter>');56 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vel_obs" type="',class( obj.vel_obs),'" default="',convert2str(obj.vel_obs),'">',' <section name="inversion" />',' <help> observed velocity magnitude [m/yr] </help>',' </parameter>');57 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="thickness_obs" type="',class( obj.thickness_obs),'" default="',convert2str(obj.thickness_obs),'">',' <section name="inversion" />',' <help> observed thickness [m]) </help>',' </parameter>');40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="control_parameters" type="',class(self.control_parameters),'" default="',convert2str(self.control_parameters),'">',' <section name="inversion" />',' <help> ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''} </help>',' </parameter>'); 41 42 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="nsteps" type="',class(self.nsteps),'" default="',convert2str(self.nsteps),'">',' <section name="inversion" />',' <help> number of optimization searches </help>',' </parameter>'); 43 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cost_functions" type="',class(self.cost_functions),'" default="',convert2str(self.cost_functions),'">',' <section name="inversion" />',' <help> indicate the type of response for each optimization step </help>',' </parameter>'); 44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cost_functions_coefficients" type="',class(self.cost_functions_coefficients),'" default="',convert2str(self.cost_functions_coefficients),'">',' <section name="inversion" />',' <help> cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter </help>',' </parameter>'); 45 46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="cost_function_threshold" type="',class(self.cost_function_threshold),'" default="',convert2str(self.cost_function_threshold),'">',' <section name="inversion" />',' <help> misfit convergence criterion. Default is 1%, NaN if not applied </help>',' </parameter>'); 47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="maxiter_per_step" type="',class(self.maxiter_per_step),'" default="',convert2str(self.maxiter_per_step),'">',' <section name="inversion" />',' <help> maximum iterations during each optimization step </help>',' </parameter>'); 48 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="gradient_scaling" type="',class(self.gradient_scaling),'" default="',convert2str(self.gradient_scaling),'">',' <section name="inversion" />',' <help> scaling factor on gradient direction during optimization, for each optimization step </help>',' </parameter>'); 49 50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="step_threshold" type="',class(self.step_threshold),'" default="',convert2str(self.step_threshold),'">',' <section name="inversion" />',' <help> decrease threshold for misfit, default is 30% </help>',' </parameter>'); 51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="min_parameters" type="',class(self.min_parameters),'" default="',convert2str(self.min_parameters),'">',' <section name="inversion" />',' <help> absolute minimum acceptable value of the inversed parameter on each vertex </help>',' </parameter>'); 52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="max_parameters" type="',class(self.max_parameters),'" default="',convert2str(self.max_parameters),'">',' <section name="inversion" />',' <help> absolute maximum acceptable value of the inversed parameter on each vertex </help>',' </parameter>'); 53 54 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vx_obs" type="',class(self.vx_obs),'" default="',convert2str(self.vx_obs),'">',' <section name="inversion" />',' <help> observed velocity x component [m/yr] </help>',' </parameter>'); 55 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vy_obs" type="',class(self.vy_obs),'" default="',convert2str(self.vy_obs),'">',' <section name="inversion" />',' <help> observed velocity y component [m/yr] </help>',' </parameter>'); 56 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vel_obs" type="',class(self.vel_obs),'" default="',convert2str(self.vel_obs),'">',' <section name="inversion" />',' <help> observed velocity magnitude [m/yr] </help>',' </parameter>'); 57 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="thickness_obs" type="',class(self.thickness_obs),'" default="',convert2str(self.thickness_obs),'">',' <section name="inversion" />',' <help> observed thickness [m]) </help>',' </parameter>'); 58 58 59 59 fprintf(fid,'%s\n%s\n','</frame>'); … … 75 75 76 76 end % }}} 77 function obj= inversion(varargin) % {{{77 function self = inversion(varargin) % {{{ 78 78 switch nargin 79 79 case 0 80 obj=setdefaultparameters(obj);80 self=setdefaultparameters(self); 81 81 case 1 82 obj=structtoobj(inversion(),varargin{1});82 self =structtoobj(inversion(),varargin{1}); 83 83 otherwise 84 84 error('constructor not supported'); 85 85 end 86 86 end % }}} 87 function obj = setdefaultparameters(obj) % {{{87 function self = setdefaultparameters(self) % {{{ 88 88 89 89 %default is incomplete adjoint for now 90 obj.incomplete_adjoint=1;90 self.incomplete_adjoint=1; 91 91 92 92 %parameter to be inferred by control methods (only 93 93 %drag and B are supported yet) 94 obj.control_parameters={'FrictionCoefficient'};94 self.control_parameters={'FrictionCoefficient'}; 95 95 96 96 %number of steps in the control methods 97 obj.nsteps=20;97 self.nsteps=20; 98 98 99 99 %maximum number of iteration in the optimization algorithm for 100 100 %each step 101 obj.maxiter_per_step=20*ones(obj.nsteps,1);101 self.maxiter_per_step=20*ones(self.nsteps,1); 102 102 103 103 %the inversed parameter is updated as follows: … … 106 106 %inversed parameter (10^8 for B, 50 for drag) and can be decreased 107 107 %after the first iterations 108 obj.gradient_scaling=50*ones(obj.nsteps,1);108 self.gradient_scaling=50*ones(self.nsteps,1); 109 109 110 110 %several responses can be used: 111 obj.cost_functions=101;111 self.cost_functions=101; 112 112 113 113 %step_threshold is used to speed up control method. When 114 %misfit(1)/misfit(0) < obj.step_threshold, we go directly to114 %misfit(1)/misfit(0) < self.step_threshold, we go directly to 115 115 %the next step 116 obj.step_threshold=.7*ones(obj.nsteps,1); %30 per cent decrement.116 self.step_threshold=.7*ones(self.nsteps,1); %30 per cent decrement. 117 117 118 118 %cost_function_threshold is a criteria to stop the control methods. 119 119 %if J[n]-J[n-1]/J[n] < criteria, the control run stops 120 120 %NaN if not applied 121 obj.cost_function_threshold=NaN; %not activated122 123 end % }}} 124 function md = checkconsistency( obj,md,solution,analyses) % {{{121 self.cost_function_threshold=NaN; %not activated 122 123 end % }}} 124 function md = checkconsistency(self,md,solution,analyses) % {{{ 125 125 126 126 %Early return 127 if ~ obj.iscontrol, return; end127 if ~self.iscontrol, return; end 128 128 129 129 num_controls=numel(md.inversion.control_parameters); … … 158 158 end 159 159 end % }}} 160 function disp( obj) % {{{160 function disp(self) % {{{ 161 161 disp(sprintf(' inversion parameters:')); 162 fielddisplay( obj,'iscontrol','is inversion activated?');163 fielddisplay( obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');164 fielddisplay( obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');165 fielddisplay( obj,'nsteps','number of optimization searches');166 fielddisplay( obj,'cost_functions','indicate the type of response for each optimization step');167 fielddisplay( obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');168 fielddisplay( obj,'cost_function_threshold','misfit convergence criterion. Default is 1%, NaN if not applied');169 fielddisplay( obj,'maxiter_per_step','maximum iterations during each optimization step');170 fielddisplay( obj,'gradient_scaling','scaling factor on gradient direction during optimization, for each optimization step');171 fielddisplay( obj,'step_threshold','decrease threshold for misfit, default is 30%');172 fielddisplay( obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');173 fielddisplay( obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');174 fielddisplay( obj,'vx_obs','observed velocity x component [m/yr]');175 fielddisplay( obj,'vy_obs','observed velocity y component [m/yr]');176 fielddisplay( obj,'vel_obs','observed velocity magnitude [m/yr]');177 fielddisplay( obj,'thickness_obs','observed thickness [m]');178 fielddisplay( obj,'surface_obs','observed surface elevation [m]');162 fielddisplay(self,'iscontrol','is inversion activated?'); 163 fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'); 164 fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 165 fielddisplay(self,'nsteps','number of optimization searches'); 166 fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'); 167 fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); 168 fielddisplay(self,'cost_function_threshold','misfit convergence criterion. Default is 1%, NaN if not applied'); 169 fielddisplay(self,'maxiter_per_step','maximum iterations during each optimization step'); 170 fielddisplay(self,'gradient_scaling','scaling factor on gradient direction during optimization, for each optimization step'); 171 fielddisplay(self,'step_threshold','decrease threshold for misfit, default is 30%'); 172 fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'); 173 fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'); 174 fielddisplay(self,'vx_obs','observed velocity x component [m/yr]'); 175 fielddisplay(self,'vy_obs','observed velocity y component [m/yr]'); 176 fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]'); 177 fielddisplay(self,'thickness_obs','observed thickness [m]'); 178 fielddisplay(self,'surface_obs','observed surface elevation [m]'); 179 179 disp('Available cost functions:'); 180 180 disp(' 101: SurfaceAbsVelMisfit'); … … 188 188 disp(' 503: ThicknessAbsGradient'); 189 189 end % }}} 190 function marshall( obj,md,fid) % {{{190 function marshall(self,md,fid) % {{{ 191 191 192 192 yts=365.0*24.0*3600.0; 193 193 194 194 WriteData(fid,'enum',InversionTypeEnum(),'data',0,'format','Integer'); 195 WriteData(fid,'object', obj,'fieldname','iscontrol','format','Boolean');196 WriteData(fid,'object', obj,'fieldname','incomplete_adjoint','format','Boolean');197 if ~ obj.iscontrol, return; end198 WriteData(fid,'object', obj,'fieldname','nsteps','format','Integer');199 WriteData(fid,'object', obj,'fieldname','maxiter_per_step','format','IntMat','mattype',3);200 WriteData(fid,'object', obj,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);201 WriteData(fid,'object', obj,'fieldname','gradient_scaling','format','DoubleMat','mattype',3);202 WriteData(fid,'object', obj,'fieldname','cost_function_threshold','format','Double');203 WriteData(fid,'object', obj,'fieldname','min_parameters','format','DoubleMat','mattype',3);204 WriteData(fid,'object', obj,'fieldname','max_parameters','format','DoubleMat','mattype',3);205 WriteData(fid,'object', obj,'fieldname','step_threshold','format','DoubleMat','mattype',3);206 WriteData(fid,'object', obj,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);207 WriteData(fid,'object', obj,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);208 WriteData(fid,'object', obj,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);209 if(numel( obj.thickness_obs)==md.mesh.numberofelements),195 WriteData(fid,'object',self,'fieldname','iscontrol','format','Boolean'); 196 WriteData(fid,'object',self,'fieldname','incomplete_adjoint','format','Boolean'); 197 if ~self.iscontrol, return; end 198 WriteData(fid,'object',self,'fieldname','nsteps','format','Integer'); 199 WriteData(fid,'object',self,'fieldname','maxiter_per_step','format','IntMat','mattype',3); 200 WriteData(fid,'object',self,'fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 201 WriteData(fid,'object',self,'fieldname','gradient_scaling','format','DoubleMat','mattype',3); 202 WriteData(fid,'object',self,'fieldname','cost_function_threshold','format','Double'); 203 WriteData(fid,'object',self,'fieldname','min_parameters','format','DoubleMat','mattype',3); 204 WriteData(fid,'object',self,'fieldname','max_parameters','format','DoubleMat','mattype',3); 205 WriteData(fid,'object',self,'fieldname','step_threshold','format','DoubleMat','mattype',3); 206 WriteData(fid,'object',self,'fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts); 207 WriteData(fid,'object',self,'fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts); 208 WriteData(fid,'object',self,'fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts); 209 if(numel(self.thickness_obs)==md.mesh.numberofelements), 210 210 mattype=2; 211 211 else 212 212 mattype=1; 213 213 end 214 WriteData(fid,'object', obj,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);215 WriteData(fid,'object', obj,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);214 WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype); 215 WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype); 216 216 217 217 218 218 %process control parameters 219 num_control_parameters=numel( obj.control_parameters);219 num_control_parameters=numel(self.control_parameters); 220 220 data=zeros(1,num_control_parameters); 221 221 for i=1:num_control_parameters, 222 data(i)=StringToEnum( obj.control_parameters{i});222 data(i)=StringToEnum(self.control_parameters{i}); 223 223 end 224 224 WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3); … … 226 226 227 227 %process cost functions 228 num_cost_functions=size( obj.cost_functions,2);229 data=marshallcostfunctions( obj.cost_functions);228 num_cost_functions=size(self.cost_functions,2); 229 data=marshallcostfunctions(self.cost_functions); 230 230 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3); 231 231 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer'); -
issm/trunk-jpl/src/m/classes/inversionvalidation.m
r18994 r19040 22 22 end 23 23 methods 24 function obj= inversionvalidation(varargin) % {{{24 function self = inversionvalidation(varargin) % {{{ 25 25 switch nargin 26 26 case 0 27 obj=setdefaultparameters(obj);27 self=setdefaultparameters(self); 28 28 case 1 29 29 obj=structtoobj(inversionvalidation(),varargin{1}); … … 47 47 self.cost_functions=101; 48 48 end % }}} 49 function md = checkconsistency( obj,md,solution,analyses) % {{{49 function md = checkconsistency(self,md,solution,analyses) % {{{ 50 50 51 51 %Early return 52 if ~ obj.iscontrol, return; end52 if ~self.iscontrol, return; end 53 53 54 54 num_controls=numel(md.inversion.control_parameters); … … 75 75 end 76 76 end % }}} 77 function disp( obj) % {{{77 function disp(self) % {{{ 78 78 disp(sprintf(' inversionvalidation parameters:')); 79 fielddisplay( obj,'iscontrol','is inversion activated?');80 fielddisplay( obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');81 fielddisplay( obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');82 fielddisplay( obj,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)');83 fielddisplay( obj,'cost_functions','indicate the type of response for each optimization step');84 fielddisplay( obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');85 fielddisplay( obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');86 fielddisplay( obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');87 fielddisplay( obj,'vx_obs','observed velocity x component [m/yr]');88 fielddisplay( obj,'vy_obs','observed velocity y component [m/yr]');89 fielddisplay( obj,'vel_obs','observed velocity magnitude [m/yr]');90 fielddisplay( obj,'thickness_obs','observed thickness [m]');91 fielddisplay( obj,'surface_obs','observed surface elevation [m]');79 fielddisplay(self,'iscontrol','is inversion activated?'); 80 fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'); 81 fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 82 fielddisplay(self,'control_scaling_factors','order of magnitude of each control (useful for multi-parameter optimization)'); 83 fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'); 84 fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); 85 fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'); 86 fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'); 87 fielddisplay(self,'vx_obs','observed velocity x component [m/yr]'); 88 fielddisplay(self,'vy_obs','observed velocity y component [m/yr]'); 89 fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]'); 90 fielddisplay(self,'thickness_obs','observed thickness [m]'); 91 fielddisplay(self,'surface_obs','observed surface elevation [m]'); 92 92 disp('Available cost functions:'); 93 93 disp(' 101: SurfaceAbsVelMisfit'); … … 101 101 disp(' 503: ThicknessAbsGradient'); 102 102 end % }}} 103 function marshall( obj,md,fid) % {{{103 function marshall(self,md,fid) % {{{ 104 104 105 105 yts=365.0*24.0*3600.0; 106 106 107 WriteData(fid,'object', obj,'class','inversion','fieldname','iscontrol','format','Boolean');107 WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean'); 108 108 WriteData(fid,'enum',InversionTypeEnum(),'data',3,'format','Integer'); 109 if ~ obj.iscontrol, return; end110 WriteData(fid,'object', obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');111 WriteData(fid,'object', obj,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3);112 WriteData(fid,'object', obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);113 WriteData(fid,'object', obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);114 WriteData(fid,'object', obj,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);115 WriteData(fid,'object', obj,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);116 WriteData(fid,'object', obj,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);117 WriteData(fid,'object', obj,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);118 if(numel( obj.thickness_obs)==md.mesh.numberofelements),109 if ~self.iscontrol, return; end 110 WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean'); 111 WriteData(fid,'object',self,'class','inversion','fieldname','control_scaling_factors','format','DoubleMat','mattype',3); 112 WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 113 WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3); 114 WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3); 115 WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts); 116 WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts); 117 WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts); 118 if(numel(self.thickness_obs)==md.mesh.numberofelements), 119 119 mattype=2; 120 120 else 121 121 mattype=1; 122 122 end 123 WriteData(fid,'object', obj,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype);124 WriteData(fid,'object', obj,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype);123 WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',mattype); 124 WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',mattype); 125 125 126 126 %process control parameters 127 num_control_parameters=numel( obj.control_parameters);127 num_control_parameters=numel(self.control_parameters); 128 128 data=zeros(1,num_control_parameters); 129 129 for i=1:num_control_parameters, 130 data(i)=StringToEnum( obj.control_parameters{i});130 data(i)=StringToEnum(self.control_parameters{i}); 131 131 end 132 132 WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3); … … 134 134 135 135 %process cost functions 136 num_cost_functions=size( obj.cost_functions,2);137 data=marshallcostfunctions( obj.cost_functions);136 num_cost_functions=size(self.cost_functions,2); 137 data=marshallcostfunctions(self.cost_functions); 138 138 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3); 139 139 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer'); -
issm/trunk-jpl/src/m/classes/linearbasalforcings.m
r19027 r19040 13 13 end 14 14 methods 15 function createxml( obj,fid) % {{{15 function createxml(self,fid) % {{{ 16 16 fprintf(fid, '\n\n'); 17 17 fprintf(fid, '%s\n', '<!-- basalforcings -->'); 18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="melting_rate" type="', class( obj.melting_rate),'" default="', num2str(obj.melting_rate),'">', ' <section name="basalforcings" />',' <help> basal melting rate (positive if melting) [m/yr] </help>','</parameter>');19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="geothermalflux" type="', class( obj.geothermalflux),'" default="', num2str(obj.geothermalflux),'">', ' <section name="basalforcings" />',' <help> geothermal heat flux [W/m^2] </help>','</parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="melting_rate" type="', class(self.melting_rate),'" default="', num2str(self.melting_rate),'">', ' <section name="basalforcings" />',' <help> basal melting rate (positive if melting) [m/yr] </help>','</parameter>'); 19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="geothermalflux" type="', class(self.geothermalflux),'" default="', num2str(self.geothermalflux),'">', ' <section name="basalforcings" />',' <help> geothermal heat flux [W/m^2] </help>','</parameter>'); 20 20 21 21 end % }}} 22 function obj= linearbasalforcings(varargin) % {{{22 function self = linearbasalforcings(varargin) % {{{ 23 23 switch nargin 24 24 case 0 25 obj=setdefaultparameters(obj);25 self=setdefaultparameters(self); 26 26 case 1 27 27 obj=structtoobj(linearbasalforcings(),varargin{1}); … … 38 38 39 39 end % }}} 40 function obj = setdefaultparameters(obj) % {{{40 function self = setdefaultparameters(self) % {{{ 41 41 42 42 %default values for melting parameterization 43 obj.deepwater_melting_rate = 50;44 obj.deepwater_elevation = -800;45 obj.upperwater_elevation = -400;43 self.deepwater_melting_rate = 50; 44 self.deepwater_elevation = -800; 45 self.upperwater_elevation = -400; 46 46 47 47 end % }}} 48 function md = checkconsistency( obj,md,solution,analyses) % {{{48 function md = checkconsistency(self,md,solution,analyses) % {{{ 49 49 50 50 if ismember(MasstransportAnalysisEnum(),analyses) & ~(solution==TransientSolutionEnum() & md.transient.ismasstransport==0), … … 68 68 end 69 69 end % }}} 70 function disp( obj) % {{{70 function disp(self) % {{{ 71 71 disp(sprintf(' basal forcings parameters:')); 72 72 73 fielddisplay( obj,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]');74 fielddisplay( obj,'deepwater_melting_rate','basal melting rate (positive if melting applied for floating ice whith base < deepwater_elevation) [m/yr]');75 fielddisplay( obj,'deepwater_elevation','elevation of ocean deepwater [m]');76 fielddisplay( obj,'upperwater_elevation','elevation of ocean upperwater [m]');77 fielddisplay( obj,'geothermalflux','geothermal heat flux [W/m^2]');73 fielddisplay(self,'groundedice_melting_rate','basal melting rate (positive if melting) [m/yr]'); 74 fielddisplay(self,'deepwater_melting_rate','basal melting rate (positive if melting applied for floating ice whith base < deepwater_elevation) [m/yr]'); 75 fielddisplay(self,'deepwater_elevation','elevation of ocean deepwater [m]'); 76 fielddisplay(self,'upperwater_elevation','elevation of ocean upperwater [m]'); 77 fielddisplay(self,'geothermalflux','geothermal heat flux [W/m^2]'); 78 78 79 79 end % }}} 80 function marshall( obj,md,fid) % {{{80 function marshall(self,md,fid) % {{{ 81 81 82 82 yts=365.0*24.0*3600.0; … … 88 88 WriteData(fid,'enum',BasalforcingsEnum(),'data',LinearFloatingMeltRateEnum(),'format','Integer'); 89 89 WriteData(fid,'data',floatingice_melting_rate,'format','DoubleMat','enum',BasalforcingsFloatingiceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1) 90 WriteData(fid,'object', obj,'fieldname','groundedice_melting_rate','format','DoubleMat','enum',BasalforcingsGroundediceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1)91 WriteData(fid,'object', obj,'fieldname','geothermalflux','enum',BasalforcingsGeothermalfluxEnum(),'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);92 WriteData(fid,'object', obj,'fieldname','deepwater_melting_rate','format','Double','enum',BasalforcingsDeepwaterMeltingRateEnum(),'scale',1./yts)93 WriteData(fid,'object', obj,'fieldname','deepwater_elevation','format','Double','enum',BasalforcingsDeepwaterElevationEnum())94 WriteData(fid,'object', obj,'fieldname','upperwater_elevation','format','Double','enum',BasalforcingsUpperwaterElevationEnum())90 WriteData(fid,'object',self,'fieldname','groundedice_melting_rate','format','DoubleMat','enum',BasalforcingsGroundediceMeltingRateEnum(),'mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1) 91 WriteData(fid,'object',self,'fieldname','geothermalflux','enum',BasalforcingsGeothermalfluxEnum(),'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 92 WriteData(fid,'object',self,'fieldname','deepwater_melting_rate','format','Double','enum',BasalforcingsDeepwaterMeltingRateEnum(),'scale',1./yts) 93 WriteData(fid,'object',self,'fieldname','deepwater_elevation','format','Double','enum',BasalforcingsDeepwaterElevationEnum()) 94 WriteData(fid,'object',self,'fieldname','upperwater_elevation','format','Double','enum',BasalforcingsUpperwaterElevationEnum()) 95 95 end % }}} 96 96 end -
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'); -
issm/trunk-jpl/src/m/classes/mask.m
r18649 r19040 10 10 end 11 11 methods (Static) 12 function obj = loadobj(obj) % {{{12 function self = loadobj(self) % {{{ 13 13 % This function is directly called by matlab when a model object is 14 14 % loaded. Update old properties here 15 15 16 16 %2014 February 5th 17 if numel( obj.ice_levelset)>1 & all(obj.ice_levelset>=0),17 if numel(self.ice_levelset)>1 & all(self.ice_levelset>=0), 18 18 disp('WARNING: md.mask.ice_levelset>=0, you probably need to change the sign of this levelset'); 19 19 end … … 22 22 end 23 23 methods 24 function createxml( obj,fid) % {{{24 function createxml(self,fid) % {{{ 25 25 fprintf(fid, '\n\n'); 26 26 fprintf(fid, '%s\n', '<!-- mask -->'); 27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="groundedice_levelset" type="',class( obj.groundedice_levelset),'" default="',obj.groundedice_levelset,'">',' <section name="mask" />',' <help> is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if &lt; 0 </help>','</parameter>');28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="ice_levelset" type="',class( obj.ice_levelset),'" default="',obj.ice_levelset,'">',' <section name="mask" />',' <help> presence of ice if > 0, icefront position if = 0, no ice if &lt; 0 </help>','</parameter>');27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="groundedice_levelset" type="',class(self.groundedice_levelset),'" default="',self.groundedice_levelset,'">',' <section name="mask" />',' <help> is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if &lt; 0 </help>','</parameter>'); 28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n','<parameter key ="ice_levelset" type="',class(self.ice_levelset),'" default="',self.ice_levelset,'">',' <section name="mask" />',' <help> presence of ice if > 0, icefront position if = 0, no ice if &lt; 0 </help>','</parameter>'); 29 29 end % }}} 30 function obj= mask(varargin) % {{{30 function self = mask(varargin) % {{{ 31 31 switch nargin 32 32 case 0 33 obj=setdefaultparameters(obj);33 self=setdefaultparameters(self); 34 34 otherwise 35 35 error('constructor not supported'); 36 36 end 37 37 end % }}} 38 function obj = setdefaultparameters(obj) % {{{38 function self = setdefaultparameters(self) % {{{ 39 39 40 40 end % }}} 41 function md = checkconsistency( obj,md,solution,analyses) % {{{41 function md = checkconsistency(self,md,solution,analyses) % {{{ 42 42 if (solution==SeaiceSolutionEnum()), 43 43 return; … … 58 58 end 59 59 end % }}} 60 function disp( obj) % {{{60 function disp(self) % {{{ 61 61 disp(sprintf(' masks:')); 62 62 63 fielddisplay( obj,'groundedice_levelset','is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0');64 fielddisplay( obj,'ice_levelset','presence of ice if < 0, icefront position if = 0, no ice if > 0');63 fielddisplay(self,'groundedice_levelset','is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0'); 64 fielddisplay(self,'ice_levelset','presence of ice if < 0, icefront position if = 0, no ice if > 0'); 65 65 end % }}} 66 function marshall( obj,md,fid) % {{{67 WriteData(fid,'object', obj,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1);68 WriteData(fid,'object', obj,'fieldname','ice_levelset','format','DoubleMat','mattype',1);66 function marshall(self,md,fid) % {{{ 67 WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1); 68 WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1); 69 69 70 70 if(md.private.solution==SeaiceSolutionEnum()), -
issm/trunk-jpl/src/m/classes/masscon.m
r19027 r19040 19 19 20 20 methods 21 function obj= masscon(varargin) % {{{21 function self = masscon(varargin) % {{{ 22 22 if nargin==0, 23 obj=setdefaultparameters(obj);23 self=setdefaultparameters(self); 24 24 else 25 25 %use provided options to change fields … … 27 27 28 28 %get name 29 obj.name=getfieldvalue(options,'name','');30 obj.levelset=getfieldvalue(options,'levelset');31 obj.definitionenum=getfieldvalue(options,'definitionenum');29 self.name=getfieldvalue(options,'name',''); 30 self.levelset=getfieldvalue(options,'levelset'); 31 self.definitionenum=getfieldvalue(options,'definitionenum'); 32 32 33 33 end 34 34 end % }}} 35 function obj = setdefaultparameters(obj) % {{{35 function self = setdefaultparameters(self) % {{{ 36 36 end % }}} 37 function md = checkconsistency( obj,md,solution,analyses) % {{{37 function md = checkconsistency(self,md,solution,analyses) % {{{ 38 38 39 if ~ischar( obj.name),39 if ~ischar(self.name), 40 40 error('masscon error message: ''name'' field should be a string!'); 41 41 end 42 42 43 md = checkfield(md,'fieldname',' obj.definitionenum','field',obj.definitionenum,'values',[Outputdefinition1Enum,Outputdefinition2Enum,Outputdefinition3Enum,Outputdefinition4Enum,Outputdefinition5Enum,Outputdefinition6Enum,Outputdefinition7Enum,Outputdefinition8Enum,Outputdefinition9Enum,Outputdefinition10Enum]);43 md = checkfield(md,'fieldname','self.definitionenum','field',self.definitionenum,'values',[Outputdefinition1Enum,Outputdefinition2Enum,Outputdefinition3Enum,Outputdefinition4Enum,Outputdefinition5Enum,Outputdefinition6Enum,Outputdefinition7Enum,Outputdefinition8Enum,Outputdefinition9Enum,Outputdefinition10Enum]); 44 44 45 md = checkfield(md,'fieldname',' obj.levelset','field',obj.levelset,'timeseries',1,'NaN',1);45 md = checkfield(md,'fieldname','self.levelset','field',self.levelset,'timeseries',1,'NaN',1); 46 46 47 47 end % }}} 48 function md = disp( obj) % {{{48 function md = disp(self) % {{{ 49 49 50 50 disp(sprintf(' Misfit:\n')); 51 51 52 fielddisplay( obj,'name','identifier for this masscon response');53 fielddisplay( obj,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum');54 fielddisplay( obj,'levelset','levelset vectorial field which identifies the boundaries of the masscon');52 fielddisplay(self,'name','identifier for this masscon response'); 53 fielddisplay(self,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum'); 54 fielddisplay(self,'levelset','levelset vectorial field which identifies the boundaries of the masscon'); 55 55 56 56 end % }}} 57 function md = marshall( obj,md,fid) % {{{57 function md = marshall(self,md,fid) % {{{ 58 58 59 WriteData(fid,'object', obj,'fieldname','name','format','String');60 WriteData(fid,'object', obj,'fieldname','definitionenum','format','Integer');61 WriteData(fid,'object', obj,'fieldname','levelset','format','DoubleMat','mattype',1);59 WriteData(fid,'object',self,'fieldname','name','format','String'); 60 WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer'); 61 WriteData(fid,'object',self,'fieldname','levelset','format','DoubleMat','mattype',1); 62 62 63 63 end % }}} -
issm/trunk-jpl/src/m/classes/massconaxpby.m
r18881 r19040 23 23 24 24 methods 25 function obj= massconaxpby(varargin) % {{{25 function self = massconaxpby(varargin) % {{{ 26 26 if nargin==0, 27 obj=setdefaultparameters(obj);27 self=setdefaultparameters(self); 28 28 else 29 29 %use provided options to change fields … … 31 31 32 32 %get names 33 obj.name=getfieldvalue(options,'name','');34 obj.definitionenum=getfieldvalue(options,'definitionenum');35 obj.namex=getfieldvalue(options,'namex');36 obj.namey=getfieldvalue(options,'namey');33 self.name=getfieldvalue(options,'name',''); 34 self.definitionenum=getfieldvalue(options,'definitionenum'); 35 self.namex=getfieldvalue(options,'namex'); 36 self.namey=getfieldvalue(options,'namey'); 37 37 38 38 %get multiplicators: 39 obj.alpha=getfieldvalue(options,'alpha');40 obj.beta=getfieldvalue(options,'beta');39 self.alpha=getfieldvalue(options,'alpha'); 40 self.beta=getfieldvalue(options,'beta'); 41 41 42 42 43 43 end 44 44 end % }}} 45 function obj = setdefaultparameters(obj) % {{{45 function self = setdefaultparameters(self) % {{{ 46 46 end % }}} 47 function md = checkconsistency( obj,md,solution,analyses) % {{{47 function md = checkconsistency(self,md,solution,analyses) % {{{ 48 48 49 if ~ischar( obj.name), error('masscon error message: ''name'' field should be a string!'); end50 if ~ischar( obj.namex), error('masscon error message: ''namex'' field should be a string!'); end51 if ~ischar( obj.namey), error('masscon error message: ''namey'' field should be a string!'); end49 if ~ischar(self.name), error('masscon error message: ''name'' field should be a string!'); end 50 if ~ischar(self.namex), error('masscon error message: ''namex'' field should be a string!'); end 51 if ~ischar(self.namey), error('masscon error message: ''namey'' field should be a string!'); end 52 52 53 md = checkfield(md,'fieldname',' obj.definitionenum','field',obj.definitionenum,'values',[Outputdefinition1Enum,Outputdefinition2Enum,Outputdefinition3Enum,Outputdefinition4Enum,Outputdefinition5Enum,Outputdefinition6Enum,Outputdefinition7Enum,Outputdefinition8Enum,Outputdefinition9Enum,Outputdefinition10Enum]);53 md = checkfield(md,'fieldname','self.definitionenum','field',self.definitionenum,'values',[Outputdefinition1Enum,Outputdefinition2Enum,Outputdefinition3Enum,Outputdefinition4Enum,Outputdefinition5Enum,Outputdefinition6Enum,Outputdefinition7Enum,Outputdefinition8Enum,Outputdefinition9Enum,Outputdefinition10Enum]); 54 54 55 md = checkfield(md,'fieldname',' obj.alpha','field',obj.alpha,'NaN',1,'size',[1 1]);56 md = checkfield(md,'fieldname',' obj.betaa','field',obj.beta,'NaN',1,'size',[1 1]);55 md = checkfield(md,'fieldname','self.alpha','field',self.alpha,'NaN',1,'size',[1 1]); 56 md = checkfield(md,'fieldname','self.betaa','field',self.beta,'NaN',1,'size',[1 1]); 57 57 58 58 end % }}} 59 function md = disp( obj) % {{{59 function md = disp(self) % {{{ 60 60 61 61 disp(sprintf(' Misfit:\n')); 62 62 63 fielddisplay( obj,'name','name');64 fielddisplay( obj,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum');65 fielddisplay( obj,'namex','identifier for the first masscon');66 fielddisplay( obj,'alpha','first masscon multiplicator');67 fielddisplay( obj,'namey','identifier for the second masscon');68 fielddisplay( obj,'beta','second masscon multiplicator');63 fielddisplay(self,'name','name'); 64 fielddisplay(self,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum'); 65 fielddisplay(self,'namex','identifier for the first masscon'); 66 fielddisplay(self,'alpha','first masscon multiplicator'); 67 fielddisplay(self,'namey','identifier for the second masscon'); 68 fielddisplay(self,'beta','second masscon multiplicator'); 69 69 70 70 end % }}} 71 function md = marshall( obj,md,fid) % {{{71 function md = marshall(self,md,fid) % {{{ 72 72 73 WriteData(fid,'object', obj,'fieldname','name','format','String');74 WriteData(fid,'object', obj,'fieldname','definitionenum','format','Integer');75 WriteData(fid,'object', obj,'fieldname','namex','format','String');76 WriteData(fid,'object', obj,'fieldname','namey','format','String');77 WriteData(fid,'object', obj,'fieldname','alpha','format','Double');78 WriteData(fid,'object', obj,'fieldname','beta','format','Double');73 WriteData(fid,'object',self,'fieldname','name','format','String'); 74 WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer'); 75 WriteData(fid,'object',self,'fieldname','namex','format','String'); 76 WriteData(fid,'object',self,'fieldname','namey','format','String'); 77 WriteData(fid,'object',self,'fieldname','alpha','format','Double'); 78 WriteData(fid,'object',self,'fieldname','beta','format','Double'); 79 79 80 80 end % }}} -
issm/trunk-jpl/src/m/classes/massfluxatgate.m
r19000 r19040 16 16 end 17 17 methods 18 function obj= massfluxatgate(varargin) % {{{18 function self = massfluxatgate(varargin) % {{{ 19 19 if nargin==0, 20 obj=setdefaultparameters(obj);20 self=setdefaultparameters(self); 21 21 else 22 22 %use provided options to change fields … … 24 24 25 25 %get name 26 obj.name=getfieldvalue(options,'name','');27 obj.definitionenum=getfieldvalue(options,'definitionenum');28 obj.profilename=getfieldvalue(options,'profilename');26 self.name=getfieldvalue(options,'name',''); 27 self.definitionenum=getfieldvalue(options,'definitionenum'); 28 self.profilename=getfieldvalue(options,'profilename'); 29 29 end 30 30 end % }}} 31 function obj = setdefaultparameters(obj) % {{{31 function self = setdefaultparameters(self) % {{{ 32 32 end % }}} 33 function md = checkconsistency( obj,md,solution,analyses) % {{{33 function md = checkconsistency(self,md,solution,analyses) % {{{ 34 34 35 if ~ischar( obj.name),35 if ~ischar(self.name), 36 36 error('massfluxatgate error message: ''name'' field should be a string!'); 37 37 end 38 if ~ischar( obj.profilename),38 if ~ischar(self.profilename), 39 39 error('massfluxatgate error message: ''profilename'' field should be a string!'); 40 40 end 41 41 42 md = checkfield(md,'field', obj.definitionenum,'values',[Outputdefinition1Enum():Outputdefinition100Enum()]);42 md = checkfield(md,'field',self.definitionenum,'values',[Outputdefinition1Enum():Outputdefinition100Enum()]); 43 43 44 44 %check the profilename points to a file!: 45 if exist( obj.profilename,'file')~=2,45 if exist(self.profilename,'file')~=2, 46 46 error('massfluxatgate error message: file name for profile corresponding to gate does not point to a legitimate file on disk!'); 47 47 end 48 48 end % }}} 49 function disp( obj) % {{{49 function disp(self) % {{{ 50 50 disp(sprintf(' Massfluxatgate:\n')); 51 51 52 fielddisplay( obj,'name','identifier for this massfluxatgate response');53 fielddisplay( obj,'profilename','name of file (shapefile or argus file) defining a profile (or gate)');54 fielddisplay( obj,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum');52 fielddisplay(self,'name','identifier for this massfluxatgate response'); 53 fielddisplay(self,'profilename','name of file (shapefile or argus file) defining a profile (or gate)'); 54 fielddisplay(self,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum'); 55 55 56 56 end % }}} 57 function marshall( obj,md,fid) % {{{57 function marshall(self,md,fid) % {{{ 58 58 59 59 %before marshalling, we need to create the segments out of the profilename: 60 obj.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,obj.profilename);60 self.segments=MeshProfileIntersection(md.mesh.elements,md.mesh.x,md.mesh.y,self.profilename); 61 61 62 62 %ok, marshall name and segments: 63 WriteData(fid,'object', obj,'fieldname','name','format','String');64 WriteData(fid,'object', obj,'fieldname','definitionenum','format','Integer');65 WriteData(fid,'object', obj,'fieldname','segments','format','DoubleMat','mattype',1);63 WriteData(fid,'object',self,'fieldname','name','format','String'); 64 WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer'); 65 WriteData(fid,'object',self,'fieldname','segments','format','DoubleMat','mattype',1); 66 66 67 67 end % }}} -
issm/trunk-jpl/src/m/classes/masstransport.m
r19027 r19040 16 16 end 17 17 methods (Static) 18 function obj = loadobj(obj) % {{{18 function self = loadobj(self) % {{{ 19 19 % This function is directly called by matlab when a model object is 20 20 % loaded. If the input is a struct it is an old version of this class and … … 34 34 end 35 35 36 if isstruct( obj)36 if isstruct(self) 37 37 disp('Recovering masstransport from older version'); 38 objstruct = obj; 39 obj = structtoobj(masstransport(),objstruct); 38 self = structtoobj(masstransport(),self); 40 39 end 41 40 end% }}} 42 41 end 43 42 methods 44 function obj= masstransport(varargin) % {{{43 function self = masstransport(varargin) % {{{ 45 44 switch nargin 46 45 case 0 47 obj=setdefaultparameters(obj);46 self=setdefaultparameters(self); 48 47 case 1 49 48 inputstruct=varargin{1}; … … 53 52 fieldname = list1{i}; 54 53 if ismember(fieldname,list2), 55 obj.(fieldname) = inputstruct.(fieldname);54 self.(fieldname) = inputstruct.(fieldname); 56 55 end 57 56 end … … 65 64 66 65 end % }}} 67 function obj = setdefaultparameters(obj) % {{{66 function self = setdefaultparameters(self) % {{{ 68 67 69 68 %Type of stabilization to use 0:nothing 1:artificial_diffusivity 3:Discontinuous Galerkin 70 obj.stabilization=1;69 self.stabilization=1; 71 70 72 71 %Factor applied to compute the penalties kappa=max(stiffness matrix)*10^penalty_factor 73 obj.penalty_factor=3;72 self.penalty_factor=3; 74 73 75 74 %Minimum ice thickness that can be used 76 obj.min_thickness=1;75 self.min_thickness=1; 77 76 78 77 %Hydrostatic adjustment 79 obj.hydrostatic_adjustment='Absolute';78 self.hydrostatic_adjustment='Absolute'; 80 79 81 80 %default output 82 obj.requested_outputs={'default'};81 self.requested_outputs={'default'}; 83 82 end % }}} 84 function md = checkconsistency( obj,md,solution,analyses) % {{{83 function md = checkconsistency(self,md,solution,analyses) % {{{ 85 84 86 85 %Early return … … 95 94 96 95 end % }}} 97 function disp( obj) % {{{96 function disp(self) % {{{ 98 97 disp(sprintf(' Masstransport solution parameters:')); 99 fielddisplay( obj,'spcthickness','thickness constraints (NaN means no constraint) [m]');100 fielddisplay( obj,'isfreesurface','do we use free surfaces (FS only) are mass conservation');101 fielddisplay( obj,'min_thickness','minimum ice thickness allowed [m]');102 fielddisplay( obj,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' ');103 fielddisplay( obj,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin, 4: Flux Correction Transport');98 fielddisplay(self,'spcthickness','thickness constraints (NaN means no constraint) [m]'); 99 fielddisplay(self,'isfreesurface','do we use free surfaces (FS only) are mass conservation'); 100 fielddisplay(self,'min_thickness','minimum ice thickness allowed [m]'); 101 fielddisplay(self,'hydrostatic_adjustment','adjustment of ice shelves surface and bed elevations: ''Incremental'' or ''Absolute'' '); 102 fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding, 3: discontinuous Galerkin, 4: Flux Correction Transport'); 104 103 105 104 disp(sprintf('\n %s','Penalty options:')); 106 fielddisplay( obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');107 fielddisplay( obj,'vertex_pairing','pairs of vertices that are penalized');108 fielddisplay( obj,'requested_outputs','additional outputs requested');105 fielddisplay(self,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset'); 106 fielddisplay(self,'vertex_pairing','pairs of vertices that are penalized'); 107 fielddisplay(self,'requested_outputs','additional outputs requested'); 109 108 110 109 end % }}} 111 function marshall( obj,md,fid) % {{{110 function marshall(self,md,fid) % {{{ 112 111 113 112 yts=365.*24.*3600.; 114 113 115 WriteData(fid,'object', obj,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);116 WriteData(fid,'object', obj,'fieldname','isfreesurface','format','Boolean');117 WriteData(fid,'object', obj,'fieldname','min_thickness','format','Double');118 WriteData(fid,'data',StringToEnum( obj.hydrostatic_adjustment),'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum());119 WriteData(fid,'object', obj,'fieldname','stabilization','format','Integer');120 WriteData(fid,'object', obj,'fieldname','vertex_pairing','format','DoubleMat','mattype',3);121 WriteData(fid,'object', obj,'fieldname','penalty_factor','format','Double');114 WriteData(fid,'object',self,'fieldname','spcthickness','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 115 WriteData(fid,'object',self,'fieldname','isfreesurface','format','Boolean'); 116 WriteData(fid,'object',self,'fieldname','min_thickness','format','Double'); 117 WriteData(fid,'data',StringToEnum(self.hydrostatic_adjustment),'format','Integer','enum',MasstransportHydrostaticAdjustmentEnum()); 118 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer'); 119 WriteData(fid,'object',self,'fieldname','vertex_pairing','format','DoubleMat','mattype',3); 120 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double'); 122 121 123 122 %process requested outputs 124 outputs = obj.requested_outputs;123 outputs = self.requested_outputs; 125 124 pos = find(ismember(outputs,'default')); 126 125 if ~isempty(pos), 127 126 outputs(pos) = []; %remove 'default' from outputs 128 outputs = [outputs defaultoutputs( obj,md)]; %add defaults127 outputs = [outputs defaultoutputs(self,md)]; %add defaults 129 128 end 130 129 WriteData(fid,'data',outputs,'enum',MasstransportRequestedOutputsEnum,'format','StringArray'); -
issm/trunk-jpl/src/m/classes/matdamageice.m
r17946 r19040 30 30 end 31 31 methods 32 function createxml( obj,fid) % {{{32 function createxml(self,fid) % {{{ 33 33 fprintf(fid, '\n\n'); 34 34 fprintf(fid, '<!-- materials -->\n'); 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_ice" type="',class( obj.rho_ice),'" default="',convert2str(obj.rho_ice),'">',' <section name="materials" />',' <help> ice density [kg/m^3] </help>','</parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_water" type="',class( obj.rho_water),'" default="',convert2str(obj.rho_water),'">',' <section name="materials" />',' <help> ocean water density [kg/m^3] </help>','</parameter>');37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_freshwater" type="',class( obj.rho_freshwater),'" default="',convert2str(obj.rho_freshwater),'">',' <section name="materials" />',' <help> fresh water density [kg/m^3] </help>','</parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_ice" type="',class(self.rho_ice),'" default="',convert2str(self.rho_ice),'">',' <section name="materials" />',' <help> ice density [kg/m^3] </help>','</parameter>'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_water" type="',class(self.rho_water),'" default="',convert2str(self.rho_water),'">',' <section name="materials" />',' <help> ocean water density [kg/m^3] </help>','</parameter>'); 37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_freshwater" type="',class(self.rho_freshwater),'" default="',convert2str(self.rho_freshwater),'">',' <section name="materials" />',' <help> fresh water density [kg/m^3] </help>','</parameter>'); 38 38 39 39 40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mu_water" type="',class( obj.mu_water),'" default="',convert2str(obj.mu_water),'">',' <section name="materials" />',' <help> water viscosity [N s/m^2] </help>','</parameter>');41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="heatcapacity" type="',class( obj.heatcapacity),'" default="',convert2str(obj.heatcapacity),'">',' <section name="materials" />',' <help> heat capacity [J/kg/K] </help>','</parameter>');42 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="latentheat" type="',class( obj.latentheat),'" default="',convert2str(obj.latentheat),'">',' <section name="materials" />',' <help> latent heat of fusion [J/kg] </help>','</parameter>');40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mu_water" type="',class(self.mu_water),'" default="',convert2str(self.mu_water),'">',' <section name="materials" />',' <help> water viscosity [N s/m^2] </help>','</parameter>'); 41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="heatcapacity" type="',class(self.heatcapacity),'" default="',convert2str(self.heatcapacity),'">',' <section name="materials" />',' <help> heat capacity [J/kg/K] </help>','</parameter>'); 42 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="latentheat" type="',class(self.latentheat),'" default="',convert2str(self.latentheat),'">',' <section name="materials" />',' <help> latent heat of fusion [J/kg] </help>','</parameter>'); 43 43 44 44 45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermalconductivity" type="',class( obj.thermalconductivity),'" default="',convert2str(obj.thermalconductivity),'">',' <section name="materials" />',' <help> ice thermal conductivity [W/m/K] </help>','</parameter>');46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperateiceconductivity" type="',class( obj.temperateiceconductivity),'" default="',convert2str(obj.temperateiceconductivity),'">',' <section name="materials" />',' <help> temperate ice thermal conductivity [W/m/K] </help>','</parameter>');47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="meltingpoint" type="',class( obj.meltingpoint),'" default="',convert2str(obj.meltingpoint),'">',' <section name="materials" />',' <help> melting point of ice at 1atm in K </help>','</parameter>');45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermalconductivity" type="',class(self.thermalconductivity),'" default="',convert2str(self.thermalconductivity),'">',' <section name="materials" />',' <help> ice thermal conductivity [W/m/K] </help>','</parameter>'); 46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperateiceconductivity" type="',class(self.temperateiceconductivity),'" default="',convert2str(self.temperateiceconductivity),'">',' <section name="materials" />',' <help> temperate ice thermal conductivity [W/m/K] </help>','</parameter>'); 47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="meltingpoint" type="',class(self.meltingpoint),'" default="',convert2str(self.meltingpoint),'">',' <section name="materials" />',' <help> melting point of ice at 1atm in K </help>','</parameter>'); 48 48 49 49 50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="beta" type="',class( obj.beta),'" default="',convert2str(obj.beta),'">',' <section name="materials" />',' <help> rate of change of melting point with pressure [K/Pa] </help>','</parameter>');51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mixed_layer_capacity" type="',class( obj.mixed_layer_capacity),'" default="',convert2str(obj.mixed_layer_capacity),'">',' <section name="materials" />',' <help> mixed layer capacity [W/kg/K] </help>','</parameter>');52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermal_exchange_velocity" type="',class( obj.thermal_exchange_velocity),'" default="',convert2str(obj.thermal_exchange_velocity),'">',' <section name="materials" />',' <help> thermal exchange velocity [m/s] </help>','</parameter>');50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="beta" type="',class(self.beta),'" default="',convert2str(self.beta),'">',' <section name="materials" />',' <help> rate of change of melting point with pressure [K/Pa] </help>','</parameter>'); 51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mixed_layer_capacity" type="',class(self.mixed_layer_capacity),'" default="',convert2str(self.mixed_layer_capacity),'">',' <section name="materials" />',' <help> mixed layer capacity [W/kg/K] </help>','</parameter>'); 52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermal_exchange_velocity" type="',class(self.thermal_exchange_velocity),'" default="',convert2str(self.thermal_exchange_velocity),'">',' <section name="materials" />',' <help> thermal exchange velocity [m/s] </help>','</parameter>'); 53 53 54 54 55 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_B" type="',class( obj.rheology_B),'" default="',convert2str(obj.rheology_B),'">',' <section name="materials" />',' <help> flow law parameter [Pa/s^(1/n)] </help>','</parameter>');56 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_n" type="',class( obj.rheology_n),'" default="',convert2str(obj.rheology_n),'">',' <section name="materials" />',' <help> Glens flow law exponent </help>','</parameter>');57 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_law" type="',class( obj.rheology_law),'" default="',convert2str(obj.rheology_law),'">',' <section name="materials" />',' <help> law for the temperature dependance of the rheology: "None", "Paterson", "Arrhenius" or "LliboutryDuval" </help>','</parameter>');55 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_B" type="',class(self.rheology_B),'" default="',convert2str(self.rheology_B),'">',' <section name="materials" />',' <help> flow law parameter [Pa/s^(1/n)] </help>','</parameter>'); 56 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_n" type="',class(self.rheology_n),'" default="',convert2str(self.rheology_n),'">',' <section name="materials" />',' <help> Glens flow law exponent </help>','</parameter>'); 57 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_law" type="',class(self.rheology_law),'" default="',convert2str(self.rheology_law),'">',' <section name="materials" />',' <help> law for the temperature dependance of the rheology: "None", "Paterson", "Arrhenius" or "LliboutryDuval" </help>','</parameter>'); 58 58 59 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_shear_modulus" type="',class( obj.lithosphere_shear_modulus),'" default="',convert2str(obj.lithosphere_shear_modulus),'">',' <section name="materials" />',' <help> Lithosphere shear modulus [Pa] </help>','</parameter>');60 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_density" type="',class( obj.lithosphere_density),'" default="',convert2str(obj.lithosphere_density),'">',' <section name="materials" />',' <help> Lithosphere density [g/cm^-3] </help>','</parameter>');61 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_shear_modulus" type="',class( obj.mantle_shear_modulus),'" default="',convert2str(obj.mantle_shear_modulus),'">',' <section name="materials" />',' <help> Mantle shear modulus [Pa] </help>','</parameter>');62 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_density" type="',class( obj.mantle_density),'" default="',convert2str(obj.mantle_density),'">',' <section name="materials" />',' <help> Mantle density [g/cm^-3] </help>','</parameter>');59 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_shear_modulus" type="',class(self.lithosphere_shear_modulus),'" default="',convert2str(self.lithosphere_shear_modulus),'">',' <section name="materials" />',' <help> Lithosphere shear modulus [Pa] </help>','</parameter>'); 60 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_density" type="',class(self.lithosphere_density),'" default="',convert2str(self.lithosphere_density),'">',' <section name="materials" />',' <help> Lithosphere density [g/cm^-3] </help>','</parameter>'); 61 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_shear_modulus" type="',class(self.mantle_shear_modulus),'" default="',convert2str(self.mantle_shear_modulus),'">',' <section name="materials" />',' <help> Mantle shear modulus [Pa] </help>','</parameter>'); 62 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_density" type="',class(self.mantle_density),'" default="',convert2str(self.mantle_density),'">',' <section name="materials" />',' <help> Mantle density [g/cm^-3] </help>','</parameter>'); 63 63 64 64 65 65 end % }}} 66 function obj= matdamageice(varargin) % {{{66 function self = matdamageice(varargin) % {{{ 67 67 switch nargin 68 68 case 0 69 obj=setdefaultparameters(obj);69 self=setdefaultparameters(self); 70 70 case 1 71 71 inputstruct=varargin{1}; … … 75 75 fieldname = list1{i}; 76 76 if ismember(fieldname,list2), 77 obj.(fieldname) = inputstruct.(fieldname);77 self.(fieldname) = inputstruct.(fieldname); 78 78 end 79 79 end … … 82 82 end 83 83 end % }}} 84 function obj = setdefaultparameters(obj) % {{{84 function self = setdefaultparameters(self) % {{{ 85 85 86 86 %ice density (kg/m^3) 87 obj.rho_ice=917.;87 self.rho_ice=917.; 88 88 89 89 %ocean water density (kg/m^3) 90 obj.rho_water=1023.;90 self.rho_water=1023.; 91 91 92 92 %fresh water density (kg/m^3) 93 obj.rho_freshwater=1000.;93 self.rho_freshwater=1000.; 94 94 95 95 %water viscosity (N.s/m^2) 96 obj.mu_water=0.001787;96 self.mu_water=0.001787; 97 97 98 98 %ice heat capacity cp (J/kg/K) 99 obj.heatcapacity=2093.;99 self.heatcapacity=2093.; 100 100 101 101 %ice latent heat of fusion L (J/kg) 102 obj.latentheat=3.34*10^5;102 self.latentheat=3.34*10^5; 103 103 104 104 %ice thermal conductivity (W/m/K) 105 obj.thermalconductivity=2.4;105 self.thermalconductivity=2.4; 106 106 107 107 %wet ice thermal conductivity (W/m/K) 108 obj.temperateiceconductivity=.24;108 self.temperateiceconductivity=.24; 109 109 110 110 %the melting point of ice at 1 atmosphere of pressure in K 111 obj.meltingpoint=273.15;111 self.meltingpoint=273.15; 112 112 113 113 %rate of change of melting point with pressure (K/Pa) 114 obj.beta=9.8*10^-8;114 self.beta=9.8*10^-8; 115 115 116 116 %mixed layer (ice-water interface) heat capacity (J/kg/K) 117 obj.mixed_layer_capacity=3974.;117 self.mixed_layer_capacity=3974.; 118 118 119 119 %thermal exchange velocity (ice-water interface) (m/s) 120 obj.thermal_exchange_velocity=1.00*10^-4;120 self.thermal_exchange_velocity=1.00*10^-4; 121 121 122 122 %Rheology law: what is the temperature dependence of B with T 123 123 %available: none, paterson and arrhenius 124 obj.rheology_law='Paterson';124 self.rheology_law='Paterson'; 125 125 126 126 % GIA: 127 obj.lithosphere_shear_modulus = 6.7*10^10; % (Pa)128 obj.lithosphere_density = 3.32; % (g/cm^-3)129 obj.mantle_shear_modulus = 1.45*10^11; % (Pa)130 obj.mantle_density = 3.34; % (g/cm^-3)127 self.lithosphere_shear_modulus = 6.7*10^10; % (Pa) 128 self.lithosphere_density = 3.32; % (g/cm^-3) 129 self.mantle_shear_modulus = 1.45*10^11; % (Pa) 130 self.mantle_density = 3.34; % (g/cm^-3) 131 131 132 132 end % }}} 133 function md = checkconsistency( obj,md,solution,analyses) % {{{133 function md = checkconsistency(self,md,solution,analyses) % {{{ 134 134 md = checkfield(md,'fieldname','materials.rho_ice','>',0); 135 135 md = checkfield(md,'fieldname','materials.rho_water','>',0); … … 148 148 149 149 end % }}} 150 function disp( obj) % {{{150 function disp(self) % {{{ 151 151 disp(sprintf(' Materials:')); 152 152 153 fielddisplay( obj,'rho_ice','ice density [kg/m^3]');154 fielddisplay( obj,'rho_water','ocean water density [kg/m^3]');155 fielddisplay( obj,'rho_freshwater','fresh water density [kg/m^3]');156 fielddisplay( obj,'mu_water','water viscosity [N s/m^2]');157 fielddisplay( obj,'heatcapacity','heat capacity [J/kg/K]');158 fielddisplay( obj,'thermalconductivity',['ice thermal conductivity [W/m/K]']);159 fielddisplay( obj,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');160 fielddisplay( obj,'meltingpoint','melting point of ice at 1atm in K');161 fielddisplay( obj,'latentheat','latent heat of fusion [J/kg]');162 fielddisplay( obj,'beta','rate of change of melting point with pressure [K/Pa]');163 fielddisplay( obj,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');164 fielddisplay( obj,'thermal_exchange_velocity','thermal exchange velocity [m/s]');165 fielddisplay( obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');166 fielddisplay( obj,'rheology_n','Glen''s flow law exponent');167 fielddisplay( obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Cuffey'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);168 fielddisplay( obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');169 fielddisplay( obj,'lithosphere_density','Lithosphere density [g/cm^-3]');170 fielddisplay( obj,'mantle_shear_modulus','Mantle shear modulus [Pa]');171 fielddisplay( obj,'mantle_density','Mantle density [g/cm^-3]');153 fielddisplay(self,'rho_ice','ice density [kg/m^3]'); 154 fielddisplay(self,'rho_water','ocean water density [kg/m^3]'); 155 fielddisplay(self,'rho_freshwater','fresh water density [kg/m^3]'); 156 fielddisplay(self,'mu_water','water viscosity [N s/m^2]'); 157 fielddisplay(self,'heatcapacity','heat capacity [J/kg/K]'); 158 fielddisplay(self,'thermalconductivity',['ice thermal conductivity [W/m/K]']); 159 fielddisplay(self,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]'); 160 fielddisplay(self,'meltingpoint','melting point of ice at 1atm in K'); 161 fielddisplay(self,'latentheat','latent heat of fusion [J/kg]'); 162 fielddisplay(self,'beta','rate of change of melting point with pressure [K/Pa]'); 163 fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]'); 164 fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]'); 165 fielddisplay(self,'rheology_B','flow law parameter [Pa/s^(1/n)]'); 166 fielddisplay(self,'rheology_n','Glen''s flow law exponent'); 167 fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Cuffey'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']); 168 fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]'); 169 fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]'); 170 fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]'); 171 fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]'); 172 172 end % }}} 173 function marshall( obj,md,fid) % {{{173 function marshall(self,md,fid) % {{{ 174 174 WriteData(fid,'enum',MaterialsEnum(),'data',MatdamageiceEnum(),'format','Integer'); 175 WriteData(fid,'object', obj,'class','materials','fieldname','rho_ice','format','Double');176 WriteData(fid,'object', obj,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double');177 WriteData(fid,'object', obj,'class','materials','fieldname','rho_freshwater','format','Double');178 WriteData(fid,'object', obj,'class','materials','fieldname','mu_water','format','Double');179 WriteData(fid,'object', obj,'class','materials','fieldname','heatcapacity','format','Double');180 WriteData(fid,'object', obj,'class','materials','fieldname','latentheat','format','Double');181 WriteData(fid,'object', obj,'class','materials','fieldname','thermalconductivity','format','Double');182 WriteData(fid,'object', obj,'class','materials','fieldname','temperateiceconductivity','format','Double');183 WriteData(fid,'object', obj,'class','materials','fieldname','meltingpoint','format','Double');184 WriteData(fid,'object', obj,'class','materials','fieldname','beta','format','Double');185 WriteData(fid,'object', obj,'class','materials','fieldname','mixed_layer_capacity','format','Double');186 WriteData(fid,'object', obj,'class','materials','fieldname','thermal_exchange_velocity','format','Double');187 WriteData(fid,'object', obj,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1);188 WriteData(fid,'object', obj,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);189 WriteData(fid,'data',StringToEnum( obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');175 WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double'); 176 WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double'); 177 WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double'); 178 WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double'); 179 WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double'); 180 WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double'); 181 WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double'); 182 WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double'); 183 WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double'); 184 WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double'); 185 WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); 186 WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); 187 WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1); 188 WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2); 189 WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer'); 190 190 191 WriteData(fid,'object', obj,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');192 WriteData(fid,'object', obj,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);193 WriteData(fid,'object', obj,'class','materials','fieldname','mantle_shear_modulus','format','Double');194 WriteData(fid,'object', obj,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);191 WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double'); 192 WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3); 193 WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double'); 194 WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3); 195 195 end % }}} 196 196 end -
issm/trunk-jpl/src/m/classes/matice.m
r19027 r19040 30 30 end 31 31 methods 32 function createxml( obj,fid) % {{{32 function createxml(self,fid) % {{{ 33 33 fprintf(fid, '\n\n'); 34 34 fprintf(fid, '<!-- materials -->\n'); 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_ice" type="',class( obj.rho_ice),'" default="',convert2str(obj.rho_ice),'">',' <section name="materials" />',' <help> ice density [kg/m^3] </help>','</parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_water" type="',class( obj.rho_water),'" default="',convert2str(obj.rho_water),'">',' <section name="materials" />',' <help> ocean water density [kg/m^3] </help>','</parameter>');37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_freshwater" type="',class( obj.rho_freshwater),'" default="',convert2str(obj.rho_freshwater),'">',' <section name="materials" />',' <help> fresh water density [kg/m^3] </help>','</parameter>');38 39 40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mu_water" type="',class( obj.mu_water),'" default="',convert2str(obj.mu_water),'">',' <section name="materials" />',' <help> water viscosity [N s/m^2] </help>','</parameter>');41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="heatcapacity" type="',class( obj.heatcapacity),'" default="',convert2str(obj.heatcapacity),'">',' <section name="materials" />',' <help> heat capacity [J/kg/K] </help>','</parameter>');42 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="latentheat" type="',class( obj.latentheat),'" default="',convert2str(obj.latentheat),'">',' <section name="materials" />',' <help> latent heat of fusion [J/kg] </help>','</parameter>');43 44 45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermalconductivity" type="',class( obj.thermalconductivity),'" default="',convert2str(obj.thermalconductivity),'">',' <section name="materials" />',' <help> ice thermal conductivity [W/m/K] </help>','</parameter>');46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperateiceconductivity" type="',class( obj.temperateiceconductivity),'" default="',convert2str(obj.temperateiceconductivity),'">',' <section name="materials" />',' <help> temperate ice thermal conductivity [W/m/K] </help>','</parameter>');47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="meltingpoint" type="',class( obj.meltingpoint),'" default="',convert2str(obj.meltingpoint),'">',' <section name="materials" />',' <help> melting point of ice at 1atm in K </help>','</parameter>');48 49 50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="beta" type="',class( obj.beta),'" default="',convert2str(obj.beta),'">',' <section name="materials" />',' <help> rate of change of melting point with pressure [K/Pa] </help>','</parameter>');51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mixed_layer_capacity" type="',class( obj.mixed_layer_capacity),'" default="',convert2str(obj.mixed_layer_capacity),'">',' <section name="materials" />',' <help> mixed layer capacity [W/kg/K] </help>','</parameter>');52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermal_exchange_velocity" type="',class( obj.thermal_exchange_velocity),'" default="',convert2str(obj.thermal_exchange_velocity),'">',' <section name="materials" />',' <help> thermal exchange velocity [m/s] </help>','</parameter>');53 54 55 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_B" type="',class( obj.rheology_B),'" default="',convert2str(obj.rheology_B),'">',' <section name="materials" />',' <help> flow law parameter [Pa/s^(1/n)] </help>','</parameter>');56 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_n" type="',class( obj.rheology_n),'" default="',convert2str(obj.rheology_n),'">',' <section name="materials" />',' <help> Glens flow law exponent </help>','</parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_ice" type="',class(self.rho_ice),'" default="',convert2str(self.rho_ice),'">',' <section name="materials" />',' <help> ice density [kg/m^3] </help>','</parameter>'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_water" type="',class(self.rho_water),'" default="',convert2str(self.rho_water),'">',' <section name="materials" />',' <help> ocean water density [kg/m^3] </help>','</parameter>'); 37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rho_freshwater" type="',class(self.rho_freshwater),'" default="',convert2str(self.rho_freshwater),'">',' <section name="materials" />',' <help> fresh water density [kg/m^3] </help>','</parameter>'); 38 39 40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mu_water" type="',class(self.mu_water),'" default="',convert2str(self.mu_water),'">',' <section name="materials" />',' <help> water viscosity [N s/m^2] </help>','</parameter>'); 41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="heatcapacity" type="',class(self.heatcapacity),'" default="',convert2str(self.heatcapacity),'">',' <section name="materials" />',' <help> heat capacity [J/kg/K] </help>','</parameter>'); 42 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="latentheat" type="',class(self.latentheat),'" default="',convert2str(self.latentheat),'">',' <section name="materials" />',' <help> latent heat of fusion [J/kg] </help>','</parameter>'); 43 44 45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermalconductivity" type="',class(self.thermalconductivity),'" default="',convert2str(self.thermalconductivity),'">',' <section name="materials" />',' <help> ice thermal conductivity [W/m/K] </help>','</parameter>'); 46 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="temperateiceconductivity" type="',class(self.temperateiceconductivity),'" default="',convert2str(self.temperateiceconductivity),'">',' <section name="materials" />',' <help> temperate ice thermal conductivity [W/m/K] </help>','</parameter>'); 47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="meltingpoint" type="',class(self.meltingpoint),'" default="',convert2str(self.meltingpoint),'">',' <section name="materials" />',' <help> melting point of ice at 1atm in K </help>','</parameter>'); 48 49 50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="beta" type="',class(self.beta),'" default="',convert2str(self.beta),'">',' <section name="materials" />',' <help> rate of change of melting point with pressure [K/Pa] </help>','</parameter>'); 51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mixed_layer_capacity" type="',class(self.mixed_layer_capacity),'" default="',convert2str(self.mixed_layer_capacity),'">',' <section name="materials" />',' <help> mixed layer capacity [W/kg/K] </help>','</parameter>'); 52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="thermal_exchange_velocity" type="',class(self.thermal_exchange_velocity),'" default="',convert2str(self.thermal_exchange_velocity),'">',' <section name="materials" />',' <help> thermal exchange velocity [m/s] </help>','</parameter>'); 53 54 55 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_B" type="',class(self.rheology_B),'" default="',convert2str(self.rheology_B),'">',' <section name="materials" />',' <help> flow law parameter [Pa/s^(1/n)] </help>','</parameter>'); 56 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="rheology_n" type="',class(self.rheology_n),'" default="',convert2str(self.rheology_n),'">',' <section name="materials" />',' <help> Glens flow law exponent </help>','</parameter>'); 57 57 58 58 % rheology_law drop-down … … 64 64 65 65 66 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_shear_modulus" type="',class( obj.lithosphere_shear_modulus),'" default="',convert2str(obj.lithosphere_shear_modulus),'">',' <section name="materials" />',' <help> Lithosphere shear modulus [Pa] </help>','</parameter>');67 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_density" type="',class( obj.lithosphere_density),'" default="',convert2str(obj.lithosphere_density),'">',' <section name="materials" />',' <help> Lithosphere density [g/cm^-3] </help>','</parameter>');68 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_shear_modulus" type="',class( obj.mantle_shear_modulus),'" default="',convert2str(obj.mantle_shear_modulus),'">',' <section name="materials" />',' <help> Mantle shear modulus [Pa] </help>','</parameter>');69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_density" type="',class( obj.mantle_density),'" default="',convert2str(obj.mantle_density),'">',' <section name="materials" />',' <help> Mantle density [g/cm^-3] </help>','</parameter>');70 71 72 end % }}} 73 function obj= matice(varargin) % {{{66 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_shear_modulus" type="',class(self.lithosphere_shear_modulus),'" default="',convert2str(self.lithosphere_shear_modulus),'">',' <section name="materials" />',' <help> Lithosphere shear modulus [Pa] </help>','</parameter>'); 67 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="lithosphere_density" type="',class(self.lithosphere_density),'" default="',convert2str(self.lithosphere_density),'">',' <section name="materials" />',' <help> Lithosphere density [g/cm^-3] </help>','</parameter>'); 68 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_shear_modulus" type="',class(self.mantle_shear_modulus),'" default="',convert2str(self.mantle_shear_modulus),'">',' <section name="materials" />',' <help> Mantle shear modulus [Pa] </help>','</parameter>'); 69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n','<parameter key ="mantle_density" type="',class(self.mantle_density),'" default="',convert2str(self.mantle_density),'">',' <section name="materials" />',' <help> Mantle density [g/cm^-3] </help>','</parameter>'); 70 71 72 end % }}} 73 function self = matice(varargin) % {{{ 74 74 switch nargin 75 75 case 0 76 obj=setdefaultparameters(obj);76 self=setdefaultparameters(self); 77 77 case 1 78 78 inputstruct=varargin{1}; … … 82 82 fieldname = list1{i}; 83 83 if ismember(fieldname,list2), 84 obj.(fieldname) = inputstruct.(fieldname);84 self.(fieldname) = inputstruct.(fieldname); 85 85 end 86 86 end … … 89 89 end 90 90 end % }}} 91 function obj = setdefaultparameters(obj) % {{{91 function self = setdefaultparameters(self) % {{{ 92 92 93 93 %ice density (kg/m^3) 94 obj.rho_ice=917.;94 self.rho_ice=917.; 95 95 96 96 %ocean water density (kg/m^3) 97 obj.rho_water=1023.;97 self.rho_water=1023.; 98 98 99 99 %fresh water density (kg/m^3) 100 obj.rho_freshwater=1000.;100 self.rho_freshwater=1000.; 101 101 102 102 %water viscosity (N.s/m^2) 103 obj.mu_water=0.001787;103 self.mu_water=0.001787; 104 104 105 105 %ice heat capacity cp (J/kg/K) 106 obj.heatcapacity=2093.;106 self.heatcapacity=2093.; 107 107 108 108 %ice latent heat of fusion L (J/kg) 109 obj.latentheat=3.34*10^5;109 self.latentheat=3.34*10^5; 110 110 111 111 %ice thermal conductivity (W/m/K) 112 obj.thermalconductivity=2.4;112 self.thermalconductivity=2.4; 113 113 114 114 %wet ice thermal conductivity (W/m/K) 115 obj.temperateiceconductivity=.24;115 self.temperateiceconductivity=.24; 116 116 117 117 %the melting point of ice at 1 atmosphere of pressure in K 118 obj.meltingpoint=273.15;118 self.meltingpoint=273.15; 119 119 120 120 %rate of change of melting point with pressure (K/Pa) 121 obj.beta=9.8*10^-8;121 self.beta=9.8*10^-8; 122 122 123 123 %mixed layer (ice-water interface) heat capacity (J/kg/K) 124 obj.mixed_layer_capacity=3974.;124 self.mixed_layer_capacity=3974.; 125 125 126 126 %thermal exchange velocity (ice-water interface) (m/s) 127 obj.thermal_exchange_velocity=1.00*10^-4;127 self.thermal_exchange_velocity=1.00*10^-4; 128 128 129 129 %Rheology law: what is the temperature dependence of B with T 130 130 %available: none, paterson and arrhenius 131 obj.rheology_law='Paterson';131 self.rheology_law='Paterson'; 132 132 133 133 % GIA: 134 obj.lithosphere_shear_modulus = 6.7*10^10; % (Pa)135 obj.lithosphere_density = 3.32; % (g/cm^-3)136 obj.mantle_shear_modulus = 1.45*10^11; % (Pa)137 obj.mantle_density = 3.34; % (g/cm^-3)138 139 end % }}} 140 function md = checkconsistency( obj,md,solution,analyses) % {{{134 self.lithosphere_shear_modulus = 6.7*10^10; % (Pa) 135 self.lithosphere_density = 3.32; % (g/cm^-3) 136 self.mantle_shear_modulus = 1.45*10^11; % (Pa) 137 self.mantle_density = 3.34; % (g/cm^-3) 138 139 end % }}} 140 function md = checkconsistency(self,md,solution,analyses) % {{{ 141 141 md = checkfield(md,'fieldname','materials.rho_ice','>',0); 142 142 md = checkfield(md,'fieldname','materials.rho_water','>',0); … … 155 155 156 156 end % }}} 157 function disp( obj) % {{{157 function disp(self) % {{{ 158 158 disp(sprintf(' Materials:')); 159 159 160 fielddisplay( obj,'rho_ice','ice density [kg/m^3]');161 fielddisplay( obj,'rho_water','ocean water density [kg/m^3]');162 fielddisplay( obj,'rho_freshwater','fresh water density [kg/m^3]');163 fielddisplay( obj,'mu_water','water viscosity [N s/m^2]');164 fielddisplay( obj,'heatcapacity','heat capacity [J/kg/K]');165 fielddisplay( obj,'thermalconductivity',['ice thermal conductivity [W/m/K]']);166 fielddisplay( obj,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]');167 fielddisplay( obj,'meltingpoint','melting point of ice at 1atm in K');168 fielddisplay( obj,'latentheat','latent heat of fusion [J/kg]');169 fielddisplay( obj,'beta','rate of change of melting point with pressure [K/Pa]');170 fielddisplay( obj,'mixed_layer_capacity','mixed layer capacity [W/kg/K]');171 fielddisplay( obj,'thermal_exchange_velocity','thermal exchange velocity [m/s]');172 fielddisplay( obj,'rheology_B','flow law parameter [Pa/s^(1/n)]');173 fielddisplay( obj,'rheology_n','Glen''s flow law exponent');174 fielddisplay( obj,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Cuffey'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']);175 fielddisplay( obj,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]');176 fielddisplay( obj,'lithosphere_density','Lithosphere density [g/cm^-3]');177 fielddisplay( obj,'mantle_shear_modulus','Mantle shear modulus [Pa]');178 fielddisplay( obj,'mantle_density','Mantle density [g/cm^-3]');179 end % }}} 180 function marshall( obj,md,fid) % {{{160 fielddisplay(self,'rho_ice','ice density [kg/m^3]'); 161 fielddisplay(self,'rho_water','ocean water density [kg/m^3]'); 162 fielddisplay(self,'rho_freshwater','fresh water density [kg/m^3]'); 163 fielddisplay(self,'mu_water','water viscosity [N s/m^2]'); 164 fielddisplay(self,'heatcapacity','heat capacity [J/kg/K]'); 165 fielddisplay(self,'thermalconductivity',['ice thermal conductivity [W/m/K]']); 166 fielddisplay(self,'temperateiceconductivity','temperate ice thermal conductivity [W/m/K]'); 167 fielddisplay(self,'meltingpoint','melting point of ice at 1atm in K'); 168 fielddisplay(self,'latentheat','latent heat of fusion [J/kg]'); 169 fielddisplay(self,'beta','rate of change of melting point with pressure [K/Pa]'); 170 fielddisplay(self,'mixed_layer_capacity','mixed layer capacity [W/kg/K]'); 171 fielddisplay(self,'thermal_exchange_velocity','thermal exchange velocity [m/s]'); 172 fielddisplay(self,'rheology_B','flow law parameter [Pa/s^(1/n)]'); 173 fielddisplay(self,'rheology_n','Glen''s flow law exponent'); 174 fielddisplay(self,'rheology_law',['law for the temperature dependance of the rheology: ''None'', ''Cuffey'', ''Paterson'', ''Arrhenius'' or ''LliboutryDuval''']); 175 fielddisplay(self,'lithosphere_shear_modulus','Lithosphere shear modulus [Pa]'); 176 fielddisplay(self,'lithosphere_density','Lithosphere density [g/cm^-3]'); 177 fielddisplay(self,'mantle_shear_modulus','Mantle shear modulus [Pa]'); 178 fielddisplay(self,'mantle_density','Mantle density [g/cm^-3]'); 179 end % }}} 180 function marshall(self,md,fid) % {{{ 181 181 WriteData(fid,'enum',MaterialsEnum(),'data',MaticeEnum(),'format','Integer'); 182 WriteData(fid,'object', obj,'class','materials','fieldname','rho_ice','format','Double');183 WriteData(fid,'object', obj,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double');184 WriteData(fid,'object', obj,'class','materials','fieldname','rho_freshwater','format','Double');185 WriteData(fid,'object', obj,'class','materials','fieldname','mu_water','format','Double');186 WriteData(fid,'object', obj,'class','materials','fieldname','heatcapacity','format','Double');187 WriteData(fid,'object', obj,'class','materials','fieldname','latentheat','format','Double');188 WriteData(fid,'object', obj,'class','materials','fieldname','thermalconductivity','format','Double');189 WriteData(fid,'object', obj,'class','materials','fieldname','temperateiceconductivity','format','Double');190 WriteData(fid,'object', obj,'class','materials','fieldname','meltingpoint','format','Double');191 WriteData(fid,'object', obj,'class','materials','fieldname','beta','format','Double');192 WriteData(fid,'object', obj,'class','materials','fieldname','mixed_layer_capacity','format','Double');193 WriteData(fid,'object', obj,'class','materials','fieldname','thermal_exchange_velocity','format','Double');194 WriteData(fid,'object', obj,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);195 WriteData(fid,'object', obj,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2);196 WriteData(fid,'data',StringToEnum( obj.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer');197 198 WriteData(fid,'object', obj,'class','materials','fieldname','lithosphere_shear_modulus','format','Double');199 WriteData(fid,'object', obj,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3);200 WriteData(fid,'object', obj,'class','materials','fieldname','mantle_shear_modulus','format','Double');201 WriteData(fid,'object', obj,'class','materials','fieldname','mantle_density','format','Double','scale',10^3);182 WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double'); 183 WriteData(fid,'object',self,'class','materials','fieldname','rho_water','enum',MaterialsRhoSeawaterEnum(),'format','Double'); 184 WriteData(fid,'object',self,'class','materials','fieldname','rho_freshwater','format','Double'); 185 WriteData(fid,'object',self,'class','materials','fieldname','mu_water','format','Double'); 186 WriteData(fid,'object',self,'class','materials','fieldname','heatcapacity','format','Double'); 187 WriteData(fid,'object',self,'class','materials','fieldname','latentheat','format','Double'); 188 WriteData(fid,'object',self,'class','materials','fieldname','thermalconductivity','format','Double'); 189 WriteData(fid,'object',self,'class','materials','fieldname','temperateiceconductivity','format','Double'); 190 WriteData(fid,'object',self,'class','materials','fieldname','meltingpoint','format','Double'); 191 WriteData(fid,'object',self,'class','materials','fieldname','beta','format','Double'); 192 WriteData(fid,'object',self,'class','materials','fieldname','mixed_layer_capacity','format','Double'); 193 WriteData(fid,'object',self,'class','materials','fieldname','thermal_exchange_velocity','format','Double'); 194 WriteData(fid,'object',self,'class','materials','fieldname','rheology_B','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 195 WriteData(fid,'object',self,'class','materials','fieldname','rheology_n','format','DoubleMat','mattype',2); 196 WriteData(fid,'data',StringToEnum(self.rheology_law),'enum',MaterialsRheologyLawEnum(),'format','Integer'); 197 198 WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_shear_modulus','format','Double'); 199 WriteData(fid,'object',self,'class','materials','fieldname','lithosphere_density','format','Double','scale',10^3); 200 WriteData(fid,'object',self,'class','materials','fieldname','mantle_shear_modulus','format','Double'); 201 WriteData(fid,'object',self,'class','materials','fieldname','mantle_density','format','Double','scale',10^3); 202 202 end % }}} 203 203 end -
issm/trunk-jpl/src/m/classes/matseaice.m
r18503 r19040 18 18 end 19 19 methods 20 function obj= matseaice(varargin) % {{{20 function self = matseaice(varargin) % {{{ 21 21 switch nargin 22 22 case 0 23 obj=setdefaultparameters(obj);23 self=setdefaultparameters(self); 24 24 case 1 25 25 inputstruct=varargin{1}; … … 29 29 fieldname = list1{i}; 30 30 if ismember(fieldname,list2), 31 obj.(fieldname) = inputstruct.(fieldname);31 self.(fieldname) = inputstruct.(fieldname); 32 32 end 33 33 end … … 36 36 end 37 37 end % }}} 38 function obj = setdefaultparameters(obj) % {{{38 function self = setdefaultparameters(self) % {{{ 39 39 40 40 %Ice density 41 obj.rho_ice = 917.; %kg/m^341 self.rho_ice = 917.; %kg/m^3 42 42 43 43 %poisson modulus 44 obj.poisson=0.3;44 self.poisson=0.3; 45 45 46 46 %Young modulus 47 obj.young_modulus=9.e+9;47 self.young_modulus=9.e+9; 48 48 49 49 %ridging exponent 50 obj.ridging_exponent=-20.;50 self.ridging_exponent=-20.; 51 51 52 52 %Cohesion (Weiss 2007) 53 obj.cohesion = 40.e+3; %40 kPa53 self.cohesion = 40.e+3; %40 kPa 54 54 55 55 %internal_friction_coef 56 obj.internal_friction_coef=0.7;56 self.internal_friction_coef=0.7; 57 57 58 58 %compression_coef (Bouillon and Rampal 2014) 59 obj.compression_coef=5./2;59 self.compression_coef=5./2; 60 60 61 61 %traction_coef (Bouillon and Rampal 2014) 62 obj.traction_coef=5./6.;62 self.traction_coef=5./6.; 63 63 64 64 %Time relaxation stress 65 65 %1e20 for the elastic case (perfect memory of the stress), equal to the timestep for the viscous case (no memory of the stress) 66 obj.time_relaxation_stress=1.e+20;66 self.time_relaxation_stress=1.e+20; 67 67 68 68 %Time relaxation damage 69 69 %1e20 for the brittle case (perfect memory of the damage), equal to the timestep for the plastic case (no memory of the damage) 70 obj.time_relaxation_damage=1.e+20;70 self.time_relaxation_damage=1.e+20; 71 71 72 72 end % }}} 73 function md = checkconsistency( obj,md,solution,analyses) % {{{73 function md = checkconsistency(self,md,solution,analyses) % {{{ 74 74 md = checkfield(md,'fieldname','materials.rho_ice','NaN',1,'>',0,'numel',1); 75 75 md = checkfield(md,'fieldname','materials.poisson','NaN',1,'>',0,'<',.5,'numel',1); … … 82 82 md = checkfield(md,'fieldname','materials.time_relaxation_stress','NaN',1,'>',md.timestepping.time_step,'numel',1); 83 83 end % }}} 84 function disp( obj) % {{{84 function disp(self) % {{{ 85 85 disp(sprintf(' Sea Ice Material:')); 86 fielddisplay( obj,'rho_ice','ice density [kg/m^3]');87 fielddisplay( obj,'poisson','poisson ratio for undamaged ice [no unit]');88 fielddisplay( obj,'young_modulus','Young modulus for undamaged ice [Pa]');89 fielddisplay( obj,'ridging_exponent','Riging exponent (c, Hibler parameter) [no unit]');90 fielddisplay( obj,'cohesion','cohesion (C) [Pa]');91 fielddisplay( obj,'internal_friction_coef','Mohr-Coulomb internal friction coefficient (mu=tan(phi)) [no unit]');92 fielddisplay( obj,'compression_coef','Ratio between cutoff compressive strength and the cohesion [no unit]');93 fielddisplay( obj,'traction_coef','Ratio between cutoff tensile strength and Mohr-Coulomb tensile strength [no unit]');94 fielddisplay( obj,'time_relaxation_stress','Relaxation time for stress (1e+20: elastic, dt: viscous) [s]');95 fielddisplay( obj,'time_relaxation_damage','Relaxation time for damage (1e+20: brittle, dt: plastic) [s]');86 fielddisplay(self,'rho_ice','ice density [kg/m^3]'); 87 fielddisplay(self,'poisson','poisson ratio for undamaged ice [no unit]'); 88 fielddisplay(self,'young_modulus','Young modulus for undamaged ice [Pa]'); 89 fielddisplay(self,'ridging_exponent','Riging exponent (c, Hibler parameter) [no unit]'); 90 fielddisplay(self,'cohesion','cohesion (C) [Pa]'); 91 fielddisplay(self,'internal_friction_coef','Mohr-Coulomb internal friction coefficient (mu=tan(phi)) [no unit]'); 92 fielddisplay(self,'compression_coef','Ratio between cutoff compressive strength and the cohesion [no unit]'); 93 fielddisplay(self,'traction_coef','Ratio between cutoff tensile strength and Mohr-Coulomb tensile strength [no unit]'); 94 fielddisplay(self,'time_relaxation_stress','Relaxation time for stress (1e+20: elastic, dt: viscous) [s]'); 95 fielddisplay(self,'time_relaxation_damage','Relaxation time for damage (1e+20: brittle, dt: plastic) [s]'); 96 96 end % }}} 97 function marshall( obj,md,fid) % {{{97 function marshall(self,md,fid) % {{{ 98 98 WriteData(fid,'enum',MaterialsEnum(),'data',MatseaiceEnum(),'format','Integer'); 99 WriteData(fid,'object', obj,'class','materials','fieldname','rho_ice','format','Double');100 WriteData(fid,'object', obj,'class','materials','fieldname','poisson','format','Double');101 WriteData(fid,'object', obj,'class','materials','fieldname','young_modulus','format','Double');102 WriteData(fid,'object', obj,'class','materials','fieldname','ridging_exponent','format','Double');103 WriteData(fid,'object', obj,'class','materials','fieldname','cohesion','format','Double');104 WriteData(fid,'object', obj,'class','materials','fieldname','internal_friction_coef','format','Double');105 WriteData(fid,'object', obj,'class','materials','fieldname','compression_coef','format','Double');106 WriteData(fid,'object', obj,'class','materials','fieldname','traction_coef','format','Double');107 WriteData(fid,'object', obj,'class','materials','fieldname','time_relaxation_stress','format','Double');108 WriteData(fid,'object', obj,'class','materials','fieldname','time_relaxation_damage','format','Double');99 WriteData(fid,'object',self,'class','materials','fieldname','rho_ice','format','Double'); 100 WriteData(fid,'object',self,'class','materials','fieldname','poisson','format','Double'); 101 WriteData(fid,'object',self,'class','materials','fieldname','young_modulus','format','Double'); 102 WriteData(fid,'object',self,'class','materials','fieldname','ridging_exponent','format','Double'); 103 WriteData(fid,'object',self,'class','materials','fieldname','cohesion','format','Double'); 104 WriteData(fid,'object',self,'class','materials','fieldname','internal_friction_coef','format','Double'); 105 WriteData(fid,'object',self,'class','materials','fieldname','compression_coef','format','Double'); 106 WriteData(fid,'object',self,'class','materials','fieldname','traction_coef','format','Double'); 107 WriteData(fid,'object',self,'class','materials','fieldname','time_relaxation_stress','format','Double'); 108 WriteData(fid,'object',self,'class','materials','fieldname','time_relaxation_damage','format','Double'); 109 109 end % }}} 110 110 end -
issm/trunk-jpl/src/m/classes/mesh2d.m
r18563 r19040 70 70 end 71 71 end % }}} 72 function obj = setdefaultparameters(obj) % {{{72 function self = setdefaultparameters(self) % {{{ 73 73 74 74 %the connectivity is the averaged number of nodes linked to a … … 77 77 %give a good memory/time ration. This value can be checked in 78 78 %trunk/test/Miscellaneous/runme.m 79 obj.average_vertex_connectivity=25;79 self.average_vertex_connectivity=25; 80 80 end % }}} 81 function md = checkconsistency( obj,md,solution,analyses) % {{{81 function md = checkconsistency(self,md,solution,analyses) % {{{ 82 82 83 83 md = checkfield(md,'fieldname','mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]); … … 97 97 end 98 98 end % }}} 99 function disp( obj) % {{{99 function disp(self) % {{{ 100 100 disp(sprintf(' 2D tria Mesh (horizontal):')); 101 101 102 102 disp(sprintf('\n Elements and vertices:')); 103 fielddisplay( obj,'numberofelements','number of elements');104 fielddisplay( obj,'numberofvertices','number of vertices');105 fielddisplay( obj,'elements','vertex indices of the mesh elements');106 fielddisplay( obj,'x','vertices x coordinate [m]');107 fielddisplay( obj,'y','vertices y coordinate [m]');108 fielddisplay( obj,'edges','edges of the 2d mesh (vertex1 vertex2 element1 element2)');109 fielddisplay( obj,'numberofedges','number of edges of the 2d mesh');103 fielddisplay(self,'numberofelements','number of elements'); 104 fielddisplay(self,'numberofvertices','number of vertices'); 105 fielddisplay(self,'elements','vertex indices of the mesh elements'); 106 fielddisplay(self,'x','vertices x coordinate [m]'); 107 fielddisplay(self,'y','vertices y coordinate [m]'); 108 fielddisplay(self,'edges','edges of the 2d mesh (vertex1 vertex2 element1 element2)'); 109 fielddisplay(self,'numberofedges','number of edges of the 2d mesh'); 110 110 111 111 disp(sprintf('\n Properties:')); 112 fielddisplay( obj,'vertexonboundary','vertices on the boundary of the domain flag list');113 fielddisplay( obj,'segments','edges on domain boundary (vertex1 vertex2 element)');114 fielddisplay( obj,'segmentmarkers','number associated to each segment');115 fielddisplay( obj,'vertexconnectivity','list of vertices connected to vertex_i');116 fielddisplay( obj,'elementconnectivity','list of vertices connected to element_i');117 fielddisplay( obj,'average_vertex_connectivity','average number of vertices connected to one vertex');112 fielddisplay(self,'vertexonboundary','vertices on the boundary of the domain flag list'); 113 fielddisplay(self,'segments','edges on domain boundary (vertex1 vertex2 element)'); 114 fielddisplay(self,'segmentmarkers','number associated to each segment'); 115 fielddisplay(self,'vertexconnectivity','list of vertices connected to vertex_i'); 116 fielddisplay(self,'elementconnectivity','list of vertices connected to element_i'); 117 fielddisplay(self,'average_vertex_connectivity','average number of vertices connected to one vertex'); 118 118 119 119 disp(sprintf('\n Extracted model:')); 120 fielddisplay( obj,'extractedvertices','vertices extracted from the model');121 fielddisplay( obj,'extractedelements','elements extracted from the model');120 fielddisplay(self,'extractedvertices','vertices extracted from the model'); 121 fielddisplay(self,'extractedelements','elements extracted from the model'); 122 122 123 123 disp(sprintf('\n Projection:')); 124 fielddisplay( obj,'lat','vertices latitude [degrees]');125 fielddisplay( obj,'long','vertices longitude [degrees]');126 fielddisplay( obj,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');124 fielddisplay(self,'lat','vertices latitude [degrees]'); 125 fielddisplay(self,'long','vertices longitude [degrees]'); 126 fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)'); 127 127 end % }}} 128 function createxml( obj,fid) % {{{128 function createxml(self,fid) % {{{ 129 129 fprintf(fid, '<!-- 2D tria Mesh (horizontal) -->\n'); 130 130 131 131 %elements and vertices 132 132 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Elements and vertices">','<section name="mesh" />'); 133 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class( obj.numberofelements),'" default="',convert2str(obj.numberofelements),'">',' <section name="mesh" />',' <help> number of elements </help>',' </parameter>');134 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class( obj.numberofvertices),'" default="',convert2str(obj.numberofvertices),'">',' <section name="mesh" />',' <help> number of vertices </help>',' </parameter>');135 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class( obj.elements),'" default="',convert2str(obj.elements),'">',' <section name="mesh" />',' <help> vertex indices of the mesh elements </help>',' </parameter>');136 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class( obj.x),'" default="',convert2str(obj.x),'">',' <section name="mesh" />',' <help> vertices x coordinate [m] </help>',' </parameter>');137 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class( obj.y),'" default="',convert2str(obj.y),'">',' <section name="mesh" />',' <help> vertices y coordinate [m] </help>',' </parameter>');138 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="edges" type="',class( obj.edges),'" default="',convert2str(obj.edges),'">',' <section name="mesh" />',' <help> edges of the 2d mesh (vertex1 vertex2 element1 element2) </help>',' </parameter>');139 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofedges" type="',class( obj.numberofedges),'" default="',convert2str(obj.numberofedges),'">',' <section name="mesh" />',' <help> number of edges of the 2d mesh </help>',' </parameter>');133 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class(self.numberofelements),'" default="',convert2str(self.numberofelements),'">',' <section name="mesh" />',' <help> number of elements </help>',' </parameter>'); 134 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class(self.numberofvertices),'" default="',convert2str(self.numberofvertices),'">',' <section name="mesh" />',' <help> number of vertices </help>',' </parameter>'); 135 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class(self.elements),'" default="',convert2str(self.elements),'">',' <section name="mesh" />',' <help> vertex indices of the mesh elements </help>',' </parameter>'); 136 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class(self.x),'" default="',convert2str(self.x),'">',' <section name="mesh" />',' <help> vertices x coordinate [m] </help>',' </parameter>'); 137 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class(self.y),'" default="',convert2str(self.y),'">',' <section name="mesh" />',' <help> vertices y coordinate [m] </help>',' </parameter>'); 138 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="edges" type="',class(self.edges),'" default="',convert2str(self.edges),'">',' <section name="mesh" />',' <help> edges of the 2d mesh (vertex1 vertex2 element1 element2) </help>',' </parameter>'); 139 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofedges" type="',class(self.numberofedges),'" default="',convert2str(self.numberofedges),'">',' <section name="mesh" />',' <help> number of edges of the 2d mesh </help>',' </parameter>'); 140 140 fprintf(fid,'%s\n%s\n','</frame>'); 141 141 142 142 % properties 143 143 fprintf(fid,'%s\n%s\n%s\n','<frame key="2" label="Properties">','<section name="mesh" />'); 144 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class( obj.vertexonboundary),'" default="',convert2str(obj.vertexonboundary),'">',' <section name="mesh" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>');145 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segments" type="',class( obj.segments),'" default="',convert2str(obj.segments),'">',' <section name="mesh" />',' <help> edges on domain boundary (vertex1 vertex2 element) </help>',' </parameter>');146 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segmentmarkers" type="',class( obj.segmentmarkers),'" default="',convert2str(obj.segmentmarkers),'">',' <section name="mesh" />',' <help> number associated to each segment </help>',' </parameter>');147 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class( obj.vertexconnectivity),'" default="',convert2str(obj.vertexconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>');148 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class( obj.elementconnectivity),'" default="',convert2str(obj.elementconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to element_i </help>',' </parameter>');149 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class( obj.average_vertex_connectivity),'" default="',convert2str(obj.average_vertex_connectivity),'">',' <section name="mesh" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>');144 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class(self.vertexonboundary),'" default="',convert2str(self.vertexonboundary),'">',' <section name="mesh" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>'); 145 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segments" type="',class(self.segments),'" default="',convert2str(self.segments),'">',' <section name="mesh" />',' <help> edges on domain boundary (vertex1 vertex2 element) </help>',' </parameter>'); 146 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segmentmarkers" type="',class(self.segmentmarkers),'" default="',convert2str(self.segmentmarkers),'">',' <section name="mesh" />',' <help> number associated to each segment </help>',' </parameter>'); 147 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class(self.vertexconnectivity),'" default="',convert2str(self.vertexconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>'); 148 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class(self.elementconnectivity),'" default="',convert2str(self.elementconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to element_i </help>',' </parameter>'); 149 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class(self.average_vertex_connectivity),'" default="',convert2str(self.average_vertex_connectivity),'">',' <section name="mesh" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>'); 150 150 fprintf(fid,'%s\n%s\n','</frame>'); 151 151 152 152 %extracted model 153 153 fprintf(fid,'%s\n%s\n%s\n','<frame key="3" label="Extracted Model">','<section name="mesh" />'); 154 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedvertices" type="',class( obj.extractedvertices),'" default="',convert2str(obj.extractedvertices),'">',' <section name="mesh" />',' <help> vertices extracted from the model </help>',' </parameter>');155 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedelements" type="',class( obj.extractedelements),'" default="',convert2str(obj.extractedelements),'">',' <section name="mesh" />',' <help> elements extracted from the model </help>',' </parameter>');154 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedvertices" type="',class(self.extractedvertices),'" default="',convert2str(self.extractedvertices),'">',' <section name="mesh" />',' <help> vertices extracted from the model </help>',' </parameter>'); 155 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedelements" type="',class(self.extractedelements),'" default="',convert2str(self.extractedelements),'">',' <section name="mesh" />',' <help> elements extracted from the model </help>',' </parameter>'); 156 156 fprintf(fid,'%s\n%s\n','</frame>'); 157 157 158 158 %projection 159 159 fprintf(fid,'%s\n%s\n%s\n','<frame key="4" label="Projection">','<section name="mesh" />'); 160 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class( obj.lat),'" default="',convert2str(obj.lat),'">',' <section name="mesh" />',' <help> vertices latitude [degrees] </help>',' </parameter>');161 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class( obj.long),'" default="',convert2str(obj.long),'">',' <section name="mesh" />',' <help> verticies longitude [degrees] </help>',' </parameter>');160 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class(self.lat),'" default="',convert2str(self.lat),'">',' <section name="mesh" />',' <help> vertices latitude [degrees] </help>',' </parameter>'); 161 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class(self.long),'" default="',convert2str(self.long),'">',' <section name="mesh" />',' <help> verticies longitude [degrees] </help>',' </parameter>'); 162 162 % choice (epsg) 'n' or 's' 163 163 fprintf(fid,'%s\n%s\n%s\n',' <parameter key ="epsg" type="alternative" optional="false">',' <section name="mesh" />',' <help> Indicate epsg ''n'' or ''s'' </help>'); … … 168 168 169 169 end % }}} 170 function marshall( obj,md,fid) % {{{171 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype( obj)]),'format','Integer');172 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension( obj),'format','Integer');173 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype( obj)),'format','Integer');174 WriteData(fid,'object', obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);175 WriteData(fid,'object', obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);176 WriteData(fid,'enum',MeshZEnum(),'data',zeros( obj.numberofvertices,1),'format','DoubleMat','mattype',1);177 WriteData(fid,'object', obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);178 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofelements','format','Integer');179 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofvertices','format','Integer');180 WriteData(fid,'object', obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');181 WriteData(fid,'object', obj,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1);170 function marshall(self,md,fid) % {{{ 171 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer'); 172 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer'); 173 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer'); 174 WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1); 175 WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1); 176 WriteData(fid,'enum',MeshZEnum(),'data',zeros(self.numberofvertices,1),'format','DoubleMat','mattype',1); 177 WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2); 178 WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer'); 179 WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer'); 180 WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer'); 181 WriteData(fid,'object',self,'class','mesh','fieldname','vertexonboundary','format','DoubleMat','mattype',1); 182 182 end % }}} 183 function t = domaintype( obj) % {{{183 function t = domaintype(self) % {{{ 184 184 t = '2Dhorizontal'; 185 185 end % }}} 186 function d = dimension( obj) % {{{186 function d = dimension(self) % {{{ 187 187 d = 2; 188 188 end % }}} 189 function s = elementtype( obj) % {{{189 function s = elementtype(self) % {{{ 190 190 s = 'Tria'; 191 191 end % }}} -
issm/trunk-jpl/src/m/classes/mesh2dvertical.m
r18563 r19040 51 51 end 52 52 methods 53 function createxml( obj,fid) % {{{53 function createxml(self,fid) % {{{ 54 54 fprintf(fid, '<!-- 2d Mesh (Vertical) -->\n'); 55 55 56 56 %elements and vertices 57 57 fprintf(fid,'%s\n%s\n%s\n',' <frame key="1" label="Elements and vertices">',' <section name="mesh" />'); 58 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class( obj.numberofelements),'" default="',convert2str(obj.numberofelements),'">',' <help> number of elements </help>',' </parameter>');59 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class( obj.numberofvertices),'" default="',convert2str(obj.numberofvertices),'">',' <help> number of vertices </help>',' </parameter>');60 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class( obj.elements),'" default="',convert2str(obj.elements),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>');61 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class( obj.x),'" default="',convert2str(obj.x),'">',' <section name="mesh" />',' <help> vertices x coordinate [m] </help>',' </parameter>');62 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class( obj.y),'" default="',convert2str(obj.y),'">',' <section name="mesh" />',' <help> vertices y coordinate [m] </help>',' </parameter>');63 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="edges" type="',class( obj.edges),'" default="',convert2str(obj.edges),'">',' <section name="mesh" />',' <help> edges of the 2d mesh (vertex1 vertex2 element1 element2) </help>',' </parameter>');64 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofedges" type="',class( obj.numberofedges),'" default="',convert2str(obj.numberofedges),'">',' <section name="mesh" />',' <help> number of edges of the 2d mesh </help>',' </parameter>');58 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class(self.numberofelements),'" default="',convert2str(self.numberofelements),'">',' <help> number of elements </help>',' </parameter>'); 59 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class(self.numberofvertices),'" default="',convert2str(self.numberofvertices),'">',' <help> number of vertices </help>',' </parameter>'); 60 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class(self.elements),'" default="',convert2str(self.elements),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>'); 61 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class(self.x),'" default="',convert2str(self.x),'">',' <section name="mesh" />',' <help> vertices x coordinate [m] </help>',' </parameter>'); 62 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class(self.y),'" default="',convert2str(self.y),'">',' <section name="mesh" />',' <help> vertices y coordinate [m] </help>',' </parameter>'); 63 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="edges" type="',class(self.edges),'" default="',convert2str(self.edges),'">',' <section name="mesh" />',' <help> edges of the 2d mesh (vertex1 vertex2 element1 element2) </help>',' </parameter>'); 64 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofedges" type="',class(self.numberofedges),'" default="',convert2str(self.numberofedges),'">',' <section name="mesh" />',' <help> number of edges of the 2d mesh </help>',' </parameter>'); 65 65 fprintf(fid,'%s\n%s\n',' </frame>'); 66 66 67 67 % properties 68 68 fprintf(fid,'%s\n%s\n%s\n','<frame key="2" label="Properties">','<section name="mesh" />'); 69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class( obj.vertexonboundary),'" default="',convert2str(obj.vertexonboundary),'">',' <section name="mesh" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>');70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonbase" type="',class( obj.vertexonbase),'" default="',convert2str(obj.vertexonbase),'">',' <section name="mesh" />',' <help> vertices on the bed of the domain flag list </help>',' </parameter>');71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segments" type="',class( obj.segments),'" default="',convert2str(obj.segments),'">',' <section name="mesh" />',' <help> edges on domain boundary (vertex1 vertex2 element) </help>',' </parameter>');72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segmentmarkers" type="',class( obj.segmentmarkers),'" default="',convert2str(obj.segmentmarkers),'">',' <section name="mesh" />',' <help> number associated to each segment </help>',' </parameter>');73 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class( obj.vertexconnectivity),'" default="',convert2str(obj.vertexconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>');74 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class( obj.elementconnectivity),'" default="',convert2str(obj.elementconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to element_i </help>',' </parameter>');75 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class( obj.average_vertex_connectivity),'" default="',convert2str(obj.average_vertex_connectivity),'">',' <section name="mesh" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>');69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class(self.vertexonboundary),'" default="',convert2str(self.vertexonboundary),'">',' <section name="mesh" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>'); 70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonbase" type="',class(self.vertexonbase),'" default="',convert2str(self.vertexonbase),'">',' <section name="mesh" />',' <help> vertices on the bed of the domain flag list </help>',' </parameter>'); 71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segments" type="',class(self.segments),'" default="',convert2str(self.segments),'">',' <section name="mesh" />',' <help> edges on domain boundary (vertex1 vertex2 element) </help>',' </parameter>'); 72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="segmentmarkers" type="',class(self.segmentmarkers),'" default="',convert2str(self.segmentmarkers),'">',' <section name="mesh" />',' <help> number associated to each segment </help>',' </parameter>'); 73 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class(self.vertexconnectivity),'" default="',convert2str(self.vertexconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>'); 74 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class(self.elementconnectivity),'" default="',convert2str(self.elementconnectivity),'">',' <section name="mesh" />',' <help> list of vertices connected to element_i </help>',' </parameter>'); 75 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class(self.average_vertex_connectivity),'" default="',convert2str(self.average_vertex_connectivity),'">',' <section name="mesh" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>'); 76 76 fprintf(fid,'%s\n%s\n','</frame>'); 77 77 78 78 %projection 79 79 fprintf(fid,'%s\n%s\n%s\n','<frame key="3" label="Projection">','<section name="mesh" />'); 80 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class( obj.lat),'" default="',convert2str(obj.lat),'">',' <section name="mesh" />',' <help> vertices latitude [degrees] </help>',' </parameter>');81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class( obj.long),'" default="',convert2str(obj.long),'">',' <section name="mesh" />',' <help> verticies longitude [degrees] </help>',' </parameter>');82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="epsg" type="',class( obj.epsg),'" default="',convert2str(obj.epsg),'">',' <section name="mesh" />',' <help> Indicate epsg ''n'' or ''s'' </help>',' </parameter>');80 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class(self.lat),'" default="',convert2str(self.lat),'">',' <section name="mesh" />',' <help> vertices latitude [degrees] </help>',' </parameter>'); 81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class(self.long),'" default="',convert2str(self.long),'">',' <section name="mesh" />',' <help> verticies longitude [degrees] </help>',' </parameter>'); 82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="epsg" type="',class(self.epsg),'" default="',convert2str(self.epsg),'">',' <section name="mesh" />',' <help> Indicate epsg ''n'' or ''s'' </help>',' </parameter>'); 83 83 fprintf(fid,'%s\n%s\n','</frame>'); 84 84 85 85 end % }}} 86 function obj= mesh2dvertical(varargin) % {{{86 function self = mesh2dvertical(varargin) % {{{ 87 87 switch nargin 88 88 case 0 89 obj=setdefaultparameters(obj);89 self=setdefaultparameters(self); 90 90 case 1 91 91 inputstruct=varargin{1}; … … 95 95 fieldname = list1{i}; 96 96 if ismember(fieldname,list2), 97 obj.(fieldname) = inputstruct.(fieldname);97 self.(fieldname) = inputstruct.(fieldname); 98 98 end 99 99 end … … 102 102 end 103 103 end % }}} 104 function obj = setdefaultparameters(obj) % {{{104 function self = setdefaultparameters(self) % {{{ 105 105 106 106 %the connectivity is the averaged number of nodes linked to a … … 109 109 %give a good memory/time ration. This value can be checked in 110 110 %trunk/test/Miscellaneous/runme.m 111 obj.average_vertex_connectivity=25;112 end % }}} 113 function md = checkconsistency( obj,md,solution,analyses) % {{{111 self.average_vertex_connectivity=25; 112 end % }}} 113 function md = checkconsistency(self,md,solution,analyses) % {{{ 114 114 115 115 md = checkfield(md,'fieldname','mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]); … … 131 131 end 132 132 end % }}} 133 function disp( obj) % {{{133 function disp(self) % {{{ 134 134 disp(sprintf(' 2D tria Mesh (vertical):')); 135 135 136 136 disp(sprintf('\n Elements and vertices:')); 137 fielddisplay( obj,'numberofelements','number of elements');138 fielddisplay( obj,'numberofvertices','number of vertices');139 fielddisplay( obj,'elements','vertex indices of the mesh elements');140 fielddisplay( obj,'x','vertices x coordinate [m]');141 fielddisplay( obj,'y','vertices y coordinate [m]');142 fielddisplay( obj,'edges','edges of the 2d mesh (vertex1 vertex2 element1 element2)');143 fielddisplay( obj,'numberofedges','number of edges of the 2d mesh');137 fielddisplay(self,'numberofelements','number of elements'); 138 fielddisplay(self,'numberofvertices','number of vertices'); 139 fielddisplay(self,'elements','vertex indices of the mesh elements'); 140 fielddisplay(self,'x','vertices x coordinate [m]'); 141 fielddisplay(self,'y','vertices y coordinate [m]'); 142 fielddisplay(self,'edges','edges of the 2d mesh (vertex1 vertex2 element1 element2)'); 143 fielddisplay(self,'numberofedges','number of edges of the 2d mesh'); 144 144 145 145 disp(sprintf('\n Properties:')); 146 fielddisplay( obj,'vertexonboundary','vertices on the boundary of the domain flag list');147 fielddisplay( obj,'vertexonbase','vertices on the bed of the domain flag list');148 fielddisplay( obj,'vertexonsurface','vertices on the surface of the domain flag list');149 fielddisplay( obj,'segments','edges on domain boundary (vertex1 vertex2 element)');150 fielddisplay( obj,'segmentmarkers','number associated to each segment');151 fielddisplay( obj,'vertexconnectivity','list of vertices connected to vertex_i');152 fielddisplay( obj,'elementconnectivity','list of vertices connected to element_i');153 fielddisplay( obj,'average_vertex_connectivity','average number of vertices connected to one vertex');146 fielddisplay(self,'vertexonboundary','vertices on the boundary of the domain flag list'); 147 fielddisplay(self,'vertexonbase','vertices on the bed of the domain flag list'); 148 fielddisplay(self,'vertexonsurface','vertices on the surface of the domain flag list'); 149 fielddisplay(self,'segments','edges on domain boundary (vertex1 vertex2 element)'); 150 fielddisplay(self,'segmentmarkers','number associated to each segment'); 151 fielddisplay(self,'vertexconnectivity','list of vertices connected to vertex_i'); 152 fielddisplay(self,'elementconnectivity','list of vertices connected to element_i'); 153 fielddisplay(self,'average_vertex_connectivity','average number of vertices connected to one vertex'); 154 154 155 155 disp(sprintf('\n Projection:')); 156 fielddisplay( obj,'lat','vertices latitude [degrees]');157 fielddisplay( obj,'long','vertices longitude [degrees]');158 fielddisplay( obj,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');159 end % }}} 160 function marshall( obj,md,fid) % {{{161 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype( obj)]),'format','Integer');162 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension( obj),'format','Integer');163 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype( obj)),'format','Integer');164 WriteData(fid,'object', obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);165 WriteData(fid,'object', obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);166 WriteData(fid,'enum',MeshZEnum(),'data',zeros( obj.numberofvertices,1),'format','DoubleMat','mattype',1);167 WriteData(fid,'object', obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);168 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofelements','format','Integer');169 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofvertices','format','Integer');170 WriteData(fid,'object', obj,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);171 WriteData(fid,'object', obj,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);172 WriteData(fid,'object', obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');173 end % }}} 174 function t = domaintype( obj) % {{{156 fielddisplay(self,'lat','vertices latitude [degrees]'); 157 fielddisplay(self,'long','vertices longitude [degrees]'); 158 fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)'); 159 end % }}} 160 function marshall(self,md,fid) % {{{ 161 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer'); 162 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer'); 163 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer'); 164 WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1); 165 WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1); 166 WriteData(fid,'enum',MeshZEnum(),'data',zeros(self.numberofvertices,1),'format','DoubleMat','mattype',1); 167 WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2); 168 WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer'); 169 WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer'); 170 WriteData(fid,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1); 171 WriteData(fid,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1); 172 WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer'); 173 end % }}} 174 function t = domaintype(self) % {{{ 175 175 t = '2Dvertical'; 176 176 end % }}} 177 function d = dimension( obj) % {{{177 function d = dimension(self) % {{{ 178 178 d = 2; 179 179 end % }}} 180 function s = elementtype( obj) % {{{180 function s = elementtype(self) % {{{ 181 181 s = 'Tria'; 182 182 end % }}} -
issm/trunk-jpl/src/m/classes/mesh3dprisms.m
r18563 r19040 62 62 end 63 63 methods 64 function createxml( obj,fid) % {{{64 function createxml(self,fid) % {{{ 65 65 fprintf(fid, '<!-- 3D prism Mesh -->\n'); 66 66 67 67 % Elements and verticies of the original 2d mesh 68 68 fprintf(fid,'%s\n%s\n%s\n',' <frame key="1" label="Elements and vertices of the orginal 2d mesh">',' <section name="mesh3dprisms" />'); 69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements2d" type="',class( obj.numberofelements2d),'" default="',convert2str(obj.numberofelements2d),'">',' <help> number of elements </help>',' </parameter>');70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices2d" type="',class( obj.numberofvertices2d),'" default="',convert2str(obj.numberofvertices2d),'">',' <help> number of vertices </help>',' </parameter>');71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements2d" type="',class( obj.elements2d),'" default="',convert2str(obj.elements2d),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>');72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x2d" type="',class( obj.x2d),'" default="',convert2str(obj.x2d),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>');73 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y2d" type="',class( obj.y2d),'" default="',convert2str(obj.y2d),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>');69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements2d" type="',class(self.numberofelements2d),'" default="',convert2str(self.numberofelements2d),'">',' <help> number of elements </help>',' </parameter>'); 70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices2d" type="',class(self.numberofvertices2d),'" default="',convert2str(self.numberofvertices2d),'">',' <help> number of vertices </help>',' </parameter>'); 71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements2d" type="',class(self.elements2d),'" default="',convert2str(self.elements2d),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>'); 72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x2d" type="',class(self.x2d),'" default="',convert2str(self.x2d),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>'); 73 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y2d" type="',class(self.y2d),'" default="',convert2str(self.y2d),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>'); 74 74 fprintf(fid,'%s\n%s\n',' </frame>'); 75 75 76 76 % Elements and vertices of the extruded 3d mesh 77 77 fprintf(fid,'%s\n%s\n%s\n',' <frame key="2" label="Elements and vertices of the orginal 3d mesh">',' <section name="mesh3dprisms" />'); 78 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class( obj.numberofelements),'" default="',convert2str(obj.numberofelements),'">',' <help> number of elements </help>',' </parameter>');79 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class( obj.numberofvertices),'" default="',convert2str(obj.numberofvertices),'">',' <help> number of vertices </help>',' </parameter>');80 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class( obj.elements),'" default="',convert2str(obj.elements),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>');81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class( obj.x),'" default="',convert2str(obj.x),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>');82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class( obj.y),'" default="',convert2str(obj.y),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>');83 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="z" type="',class( obj.y),'" default="',convert2str(obj.y),'">',' <section name="mesh3dprisms" />',' <help> vertices z coordinate [m] </help>',' </parameter>');78 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class(self.numberofelements),'" default="',convert2str(self.numberofelements),'">',' <help> number of elements </help>',' </parameter>'); 79 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class(self.numberofvertices),'" default="',convert2str(self.numberofvertices),'">',' <help> number of vertices </help>',' </parameter>'); 80 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class(self.elements),'" default="',convert2str(self.elements),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>'); 81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class(self.x),'" default="',convert2str(self.x),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>'); 82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class(self.y),'" default="',convert2str(self.y),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>'); 83 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="z" type="',class(self.y),'" default="',convert2str(self.y),'">',' <section name="mesh3dprisms" />',' <help> vertices z coordinate [m] </help>',' </parameter>'); 84 84 fprintf(fid,'%s\n%s\n',' </frame>'); 85 85 86 86 % properties 87 87 fprintf(fid,'%s\n%s\n%s\n','<frame key="3" label="Properties">','<section name="mesh3dprisms" />'); 88 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberoflayers" type="',class( obj.numberoflayers),'" default="',convert2str(obj.numberoflayers),'">',' <section name="mesh3dprisms" />',' <help> number of extrusion layers </help>',' </parameter>');89 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonbase" type="',class( obj.vertexonbase),'" default="',convert2str(obj.vertexonbase),'">',' <section name="mesh3dprisms" />',' <help> lower vertices flags list </help>',' </parameter>');90 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontbase" type="',class( obj.elementontbase),'" default="',convert2str(obj.elementontbase),'">',' <section name="mesh3dprisms" />',' <help> lower elements flags list </help>',' </parameter>');91 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonsurface" type="',class( obj.vertexonsurface),'" default="',convert2str(obj.vertexonsurface),'">',' <section name="mesh3dprisms" />',' <help> upper vertices flags list </help>',' </parameter>');92 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontsurface" type="',class( obj.elementontsurface),'" default="',convert2str(obj.elementontsurface),'">',' <section name="mesh3dprisms" />',' <help> upper elements flags list </help>',' </parameter>');93 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="uppervertex" type="',class( obj.uppervertex),'" default="',convert2str(obj.uppervertex),'">',' <section name="mesh3dprisms" />',' <help> upper vertex list (NaN for vertex on the upper surface) </help>',' </parameter>');94 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="upperelements" type="',class( obj.upperelements),'" default="',convert2str(obj.upperelements),'">',' <section name="mesh3dprisms" />',' <help> upper element list (NaN for element on the upper layer) </help>',' </parameter>');95 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowervertex" type="',class( obj.lowervertex),'" default="',convert2str(obj.lowervertex),'">',' <section name="mesh3dprisms" />',' <help> lower vertex list (NaN for vertex on the lower surface) </help>',' </parameter>');96 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowerelements" type="',class( obj.lowerelements),'" default="',convert2str(obj.lowerelements),'">',' <section name="mesh3dprisms" />',' <help> element list (NaN for element on the lower layer) </help>',' </parameter>');97 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class( obj.vertexonboundary),'" default="',convert2str(obj.vertexonboundary),'">',' <section name="mesh3dprisms" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>');98 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class( obj.vertexconnectivity),'" default="',convert2str(obj.vertexconnectivity),'">',' <section name="mesh3dprisms" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>');99 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class( obj.elementconnectivity),'" default="',convert2str(obj.elementconnectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>');100 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class( obj.average_vertex_connectivity),'" default="',convert2str(obj.average_vertex_connectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>');88 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberoflayers" type="',class(self.numberoflayers),'" default="',convert2str(self.numberoflayers),'">',' <section name="mesh3dprisms" />',' <help> number of extrusion layers </help>',' </parameter>'); 89 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonbase" type="',class(self.vertexonbase),'" default="',convert2str(self.vertexonbase),'">',' <section name="mesh3dprisms" />',' <help> lower vertices flags list </help>',' </parameter>'); 90 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontbase" type="',class(self.elementontbase),'" default="',convert2str(self.elementontbase),'">',' <section name="mesh3dprisms" />',' <help> lower elements flags list </help>',' </parameter>'); 91 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonsurface" type="',class(self.vertexonsurface),'" default="',convert2str(self.vertexonsurface),'">',' <section name="mesh3dprisms" />',' <help> upper vertices flags list </help>',' </parameter>'); 92 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontsurface" type="',class(self.elementontsurface),'" default="',convert2str(self.elementontsurface),'">',' <section name="mesh3dprisms" />',' <help> upper elements flags list </help>',' </parameter>'); 93 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="uppervertex" type="',class(self.uppervertex),'" default="',convert2str(self.uppervertex),'">',' <section name="mesh3dprisms" />',' <help> upper vertex list (NaN for vertex on the upper surface) </help>',' </parameter>'); 94 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="upperelements" type="',class(self.upperelements),'" default="',convert2str(self.upperelements),'">',' <section name="mesh3dprisms" />',' <help> upper element list (NaN for element on the upper layer) </help>',' </parameter>'); 95 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowervertex" type="',class(self.lowervertex),'" default="',convert2str(self.lowervertex),'">',' <section name="mesh3dprisms" />',' <help> lower vertex list (NaN for vertex on the lower surface) </help>',' </parameter>'); 96 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowerelements" type="',class(self.lowerelements),'" default="',convert2str(self.lowerelements),'">',' <section name="mesh3dprisms" />',' <help> element list (NaN for element on the lower layer) </help>',' </parameter>'); 97 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class(self.vertexonboundary),'" default="',convert2str(self.vertexonboundary),'">',' <section name="mesh3dprisms" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>'); 98 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class(self.vertexconnectivity),'" default="',convert2str(self.vertexconnectivity),'">',' <section name="mesh3dprisms" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>'); 99 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class(self.elementconnectivity),'" default="',convert2str(self.elementconnectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>'); 100 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class(self.average_vertex_connectivity),'" default="',convert2str(self.average_vertex_connectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>'); 101 101 fprintf(fid,'%s\n%s\n','</frame>'); 102 102 103 103 % Extracted model 104 104 fprintf(fid,'%s\n%s\n%s\n','<frame key="4" label="Extracted Model">','<section name="mesh3dprisms" />'); 105 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedvertices" type="',class( obj.extractedvertices),'" default="',convert2str(obj.extractedvertices),'">',' <section name="mesh3dprisms" />',' <help> vertices extracted from the model </help>',' </parameter>');106 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedelements" type="',class( obj.extractedelements),'" default="',convert2str(obj.extractedelements),'">',' <section name="mesh3dprisms" />',' <help> elements extracted from the model </help>',' </parameter>');105 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedvertices" type="',class(self.extractedvertices),'" default="',convert2str(self.extractedvertices),'">',' <section name="mesh3dprisms" />',' <help> vertices extracted from the model </help>',' </parameter>'); 106 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedelements" type="',class(self.extractedelements),'" default="',convert2str(self.extractedelements),'">',' <section name="mesh3dprisms" />',' <help> elements extracted from the model </help>',' </parameter>'); 107 107 fprintf(fid,'%s\n%s\n','</frame>'); 108 108 109 109 % Projection 110 110 fprintf(fid,'%s\n%s\n%s\n','<frame key="5" label="Projection">','<section name="mesh3dprisms" />'); 111 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class( obj.lat),'" default="',convert2str(obj.lat),'">',' <section name="mesh3dprisms" />',' <help> vertices latitude [degrees] </help>',' </parameter>');112 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class( obj.long),'" default="',convert2str(obj.long),'">',' <section name="mesh3dprisms" />',' <help> verticies longitude [degrees] </help>',' </parameter>');113 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="epsg" type="',class( obj.epsg),'" default="',convert2str(obj.epsg),'">',' <section name="mesh3dprisms" />',' <help> Indicate epsg ''n'' or ''s'' </help>',' </parameter>');111 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class(self.lat),'" default="',convert2str(self.lat),'">',' <section name="mesh3dprisms" />',' <help> vertices latitude [degrees] </help>',' </parameter>'); 112 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class(self.long),'" default="',convert2str(self.long),'">',' <section name="mesh3dprisms" />',' <help> verticies longitude [degrees] </help>',' </parameter>'); 113 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="epsg" type="',class(self.epsg),'" default="',convert2str(self.epsg),'">',' <section name="mesh3dprisms" />',' <help> Indicate epsg ''n'' or ''s'' </help>',' </parameter>'); 114 114 fprintf(fid,'%s\n%s\n','</frame>'); 115 115 … … 133 133 end 134 134 end % }}} 135 function obj = setdefaultparameters(obj) % {{{135 function self = setdefaultparameters(self) % {{{ 136 136 137 137 %the connectivity is the averaged number of nodes linked to a … … 140 140 %give a good memory/time ration. This value can be checked in 141 141 %trunk/test/Miscellaneous/runme.m 142 obj.average_vertex_connectivity=25;143 end % }}} 144 function md = checkconsistency( obj,md,solution,analyses) % {{{142 self.average_vertex_connectivity=25; 143 end % }}} 144 function md = checkconsistency(self,md,solution,analyses) % {{{ 145 145 146 146 md = checkfield(md,'fieldname','mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]); … … 161 161 md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',24,'message','''mesh.average_vertex_connectivity'' should be at least 24 in 3d'); 162 162 end % }}} 163 function disp( obj) % {{{163 function disp(self) % {{{ 164 164 disp(sprintf(' 3D prism Mesh:')); 165 165 166 166 disp(sprintf('\n Elements and vertices of the original 2d mesh:')); 167 fielddisplay( obj,'numberofelements2d','number of elements');168 fielddisplay( obj,'numberofvertices2d','number of vertices');169 fielddisplay( obj,'elements2d','vertex indices of the mesh elements');170 fielddisplay( obj,'x2d','vertices x coordinate [m]');171 fielddisplay( obj,'y2d','vertices y coordinate [m]');167 fielddisplay(self,'numberofelements2d','number of elements'); 168 fielddisplay(self,'numberofvertices2d','number of vertices'); 169 fielddisplay(self,'elements2d','vertex indices of the mesh elements'); 170 fielddisplay(self,'x2d','vertices x coordinate [m]'); 171 fielddisplay(self,'y2d','vertices y coordinate [m]'); 172 172 173 173 disp(sprintf('\n Elements and vertices of the extruded 3d mesh:')); 174 fielddisplay( obj,'numberofelements','number of elements');175 fielddisplay( obj,'numberofvertices','number of vertices');176 fielddisplay( obj,'elements','vertex indices of the mesh elements');177 fielddisplay( obj,'x','vertices x coordinate [m]');178 fielddisplay( obj,'y','vertices y coordinate [m]');179 fielddisplay( obj,'z','vertices z coordinate [m]');174 fielddisplay(self,'numberofelements','number of elements'); 175 fielddisplay(self,'numberofvertices','number of vertices'); 176 fielddisplay(self,'elements','vertex indices of the mesh elements'); 177 fielddisplay(self,'x','vertices x coordinate [m]'); 178 fielddisplay(self,'y','vertices y coordinate [m]'); 179 fielddisplay(self,'z','vertices z coordinate [m]'); 180 180 181 181 disp(sprintf('\n Properties:')); 182 fielddisplay( obj,'numberoflayers','number of extrusion layers');183 fielddisplay( obj,'vertexonbase','lower vertices flags list');184 fielddisplay( obj,'vertexonsurface','upper vertices flags list');185 fielddisplay( obj,'uppervertex','upper vertex list (NaN for vertex on the upper surface)');186 fielddisplay( obj,'upperelements','upper element list (NaN for element on the upper layer)');187 fielddisplay( obj,'lowervertex','lower vertex list (NaN for vertex on the lower surface)');188 fielddisplay( obj,'lowerelements','lower element list (NaN for element on the lower layer');189 fielddisplay( obj,'vertexonboundary','vertices on the boundary of the domain flag list');190 191 fielddisplay( obj,'vertexconnectivity','list of vertices connected to vertex_i');192 fielddisplay( obj,'elementconnectivity','list of vertices connected to element_i');193 fielddisplay( obj,'average_vertex_connectivity','average number of vertices connected to one vertex');182 fielddisplay(self,'numberoflayers','number of extrusion layers'); 183 fielddisplay(self,'vertexonbase','lower vertices flags list'); 184 fielddisplay(self,'vertexonsurface','upper vertices flags list'); 185 fielddisplay(self,'uppervertex','upper vertex list (NaN for vertex on the upper surface)'); 186 fielddisplay(self,'upperelements','upper element list (NaN for element on the upper layer)'); 187 fielddisplay(self,'lowervertex','lower vertex list (NaN for vertex on the lower surface)'); 188 fielddisplay(self,'lowerelements','lower element list (NaN for element on the lower layer'); 189 fielddisplay(self,'vertexonboundary','vertices on the boundary of the domain flag list'); 190 191 fielddisplay(self,'vertexconnectivity','list of vertices connected to vertex_i'); 192 fielddisplay(self,'elementconnectivity','list of vertices connected to element_i'); 193 fielddisplay(self,'average_vertex_connectivity','average number of vertices connected to one vertex'); 194 194 195 195 disp(sprintf('\n Extracted model:')); 196 fielddisplay( obj,'extractedvertices','vertices extracted from the model');197 fielddisplay( obj,'extractedelements','elements extracted from the model');196 fielddisplay(self,'extractedvertices','vertices extracted from the model'); 197 fielddisplay(self,'extractedelements','elements extracted from the model'); 198 198 199 199 disp(sprintf('\n Projection:')); 200 fielddisplay( obj,'lat','vertices latitude [degrees]');201 fielddisplay( obj,'long','vertices longitude [degrees]');202 fielddisplay( obj,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');203 end % }}} 204 function marshall( obj,md,fid) % {{{205 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype( obj)]),'format','Integer');206 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension( obj),'format','Integer');207 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype( obj)),'format','Integer');208 WriteData(fid,'object', obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);209 WriteData(fid,'object', obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);210 WriteData(fid,'object', obj,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);211 WriteData(fid,'object', obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);212 WriteData(fid,'object', obj,'class','mesh','fieldname','numberoflayers','format','Integer');213 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofelements','format','Integer');214 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofvertices','format','Integer');215 WriteData(fid,'object', obj,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);216 WriteData(fid,'object', obj,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);217 WriteData(fid,'object', obj,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2);218 WriteData(fid,'object', obj,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2);219 WriteData(fid,'object', obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');220 WriteData(fid,'object', obj,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);221 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofvertices2d','format','Integer');222 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofelements2d','format','Integer');223 end % }}} 224 function type = domaintype( obj) % {{{200 fielddisplay(self,'lat','vertices latitude [degrees]'); 201 fielddisplay(self,'long','vertices longitude [degrees]'); 202 fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)'); 203 end % }}} 204 function marshall(self,md,fid) % {{{ 205 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer'); 206 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer'); 207 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer'); 208 WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1); 209 WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1); 210 WriteData(fid,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1); 211 WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2); 212 WriteData(fid,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer'); 213 WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer'); 214 WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer'); 215 WriteData(fid,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1); 216 WriteData(fid,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1); 217 WriteData(fid,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2); 218 WriteData(fid,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2); 219 WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer'); 220 WriteData(fid,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3); 221 WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer'); 222 WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer'); 223 end % }}} 224 function type = domaintype(self) % {{{ 225 225 type = '3D'; 226 226 end % }}} 227 function d = dimension( obj) % {{{227 function d = dimension(self) % {{{ 228 228 d = 3; 229 229 end % }}} 230 function s = elementtype( obj) % {{{230 function s = elementtype(self) % {{{ 231 231 s = 'Penta'; 232 232 end % }}} -
issm/trunk-jpl/src/m/classes/mesh3dtetras.m
r18563 r19040 62 62 end 63 63 methods 64 function createxml( obj,fid) % {{{64 function createxml(self,fid) % {{{ 65 65 fprintf(fid, '<!-- 3D Tetra Mesh -->\n'); 66 66 67 67 % Elements and verticies of the original 2d mesh 68 68 fprintf(fid,'%s\n%s\n%s\n',' <frame key="1" label="Elements and vertices of the orginal 2d mesh">',' <section name="mesh3dprisms" />'); 69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements2d" type="',class( obj.numberofelements2d),'" default="',convert2str(obj.numberofelements2d),'">',' <help> number of elements </help>',' </parameter>');70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices2d" type="',class( obj.numberofvertices2d),'" default="',convert2str(obj.numberofvertices2d),'">',' <help> number of vertices </help>',' </parameter>');71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements2d" type="',class( obj.elements2d),'" default="',convert2str(obj.elements2d),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>');72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x2d" type="',class( obj.x2d),'" default="',convert2str(obj.x2d),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>');73 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y2d" type="',class( obj.y2d),'" default="',convert2str(obj.y2d),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>');69 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements2d" type="',class(self.numberofelements2d),'" default="',convert2str(self.numberofelements2d),'">',' <help> number of elements </help>',' </parameter>'); 70 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices2d" type="',class(self.numberofvertices2d),'" default="',convert2str(self.numberofvertices2d),'">',' <help> number of vertices </help>',' </parameter>'); 71 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements2d" type="',class(self.elements2d),'" default="',convert2str(self.elements2d),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>'); 72 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x2d" type="',class(self.x2d),'" default="',convert2str(self.x2d),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>'); 73 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y2d" type="',class(self.y2d),'" default="',convert2str(self.y2d),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>'); 74 74 fprintf(fid,'%s\n%s\n',' </frame>'); 75 75 76 76 % Elements and vertices of the extruded 3d mesh 77 77 fprintf(fid,'%s\n%s\n%s\n',' <frame key="2" label="Elements and vertices of the orginal 3d mesh">',' <section name="mesh3dprisms" />'); 78 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class( obj.numberofelements),'" default="',convert2str(obj.numberofelements),'">',' <help> number of elements </help>',' </parameter>');79 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class( obj.numberofvertices),'" default="',convert2str(obj.numberofvertices),'">',' <help> number of vertices </help>',' </parameter>');80 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class( obj.elements),'" default="',convert2str(obj.elements),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>');81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class( obj.x),'" default="',convert2str(obj.x),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>');82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class( obj.y),'" default="',convert2str(obj.y),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>');83 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="z" type="',class( obj.y),'" default="',convert2str(obj.y),'">',' <section name="mesh3dprisms" />',' <help> vertices z coordinate [m] </help>',' </parameter>');78 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofelements" type="',class(self.numberofelements),'" default="',convert2str(self.numberofelements),'">',' <help> number of elements </help>',' </parameter>'); 79 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="numberofvertices" type="',class(self.numberofvertices),'" default="',convert2str(self.numberofvertices),'">',' <help> number of vertices </help>',' </parameter>'); 80 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="elements" type="',class(self.elements),'" default="',convert2str(self.elements),'">',' <help> vertex indices of the mesh elements </help>',' </parameter>'); 81 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="x" type="',class(self.x),'" default="',convert2str(self.x),'">',' <section name="mesh3dprisms" />',' <help> vertices x coordinate [m] </help>',' </parameter>'); 82 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="y" type="',class(self.y),'" default="',convert2str(self.y),'">',' <section name="mesh3dprisms" />',' <help> vertices y coordinate [m] </help>',' </parameter>'); 83 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="z" type="',class(self.y),'" default="',convert2str(self.y),'">',' <section name="mesh3dprisms" />',' <help> vertices z coordinate [m] </help>',' </parameter>'); 84 84 fprintf(fid,'%s\n%s\n',' </frame>'); 85 85 86 86 % properties 87 87 fprintf(fid,'%s\n%s\n%s\n','<frame key="3" label="Properties">','<section name="mesh3dprisms" />'); 88 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberoflayers" type="',class( obj.numberoflayers),'" default="',convert2str(obj.numberoflayers),'">',' <section name="mesh3dprisms" />',' <help> number of extrusion layers </help>',' </parameter>');89 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonbase" type="',class( obj.vertexonbase),'" default="',convert2str(obj.vertexonbase),'">',' <section name="mesh3dprisms" />',' <help> lower vertices flags list </help>',' </parameter>');90 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontbase" type="',class( obj.elementontbase),'" default="',convert2str(obj.elementontbase),'">',' <section name="mesh3dprisms" />',' <help> lower elements flags list </help>',' </parameter>');91 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonsurface" type="',class( obj.vertexonsurface),'" default="',convert2str(obj.vertexonsurface),'">',' <section name="mesh3dprisms" />',' <help> upper vertices flags list </help>',' </parameter>');92 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontsurface" type="',class( obj.elementontsurface),'" default="',convert2str(obj.elementontsurface),'">',' <section name="mesh3dprisms" />',' <help> upper elements flags list </help>',' </parameter>');93 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="uppervertex" type="',class( obj.uppervertex),'" default="',convert2str(obj.uppervertex),'">',' <section name="mesh3dprisms" />',' <help> upper vertex list (NaN for vertex on the upper surface) </help>',' </parameter>');94 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="upperelements" type="',class( obj.upperelements),'" default="',convert2str(obj.upperelements),'">',' <section name="mesh3dprisms" />',' <help> upper element list (NaN for element on the upper layer) </help>',' </parameter>');95 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowervertex" type="',class( obj.lowervertex),'" default="',convert2str(obj.lowervertex),'">',' <section name="mesh3dprisms" />',' <help> lower vertex list (NaN for vertex on the lower surface) </help>',' </parameter>');96 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowerelements" type="',class( obj.lowerelements),'" default="',convert2str(obj.lowerelements),'">',' <section name="mesh3dprisms" />',' <help> element list (NaN for element on the lower layer) </help>',' </parameter>');97 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class( obj.vertexonboundary),'" default="',convert2str(obj.vertexonboundary),'">',' <section name="mesh3dprisms" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>');98 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class( obj.vertexconnectivity),'" default="',convert2str(obj.vertexconnectivity),'">',' <section name="mesh3dprisms" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>');99 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class( obj.elementconnectivity),'" default="',convert2str(obj.elementconnectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>');100 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class( obj.average_vertex_connectivity),'" default="',convert2str(obj.average_vertex_connectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>');88 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberoflayers" type="',class(self.numberoflayers),'" default="',convert2str(self.numberoflayers),'">',' <section name="mesh3dprisms" />',' <help> number of extrusion layers </help>',' </parameter>'); 89 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonbase" type="',class(self.vertexonbase),'" default="',convert2str(self.vertexonbase),'">',' <section name="mesh3dprisms" />',' <help> lower vertices flags list </help>',' </parameter>'); 90 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontbase" type="',class(self.elementontbase),'" default="',convert2str(self.elementontbase),'">',' <section name="mesh3dprisms" />',' <help> lower elements flags list </help>',' </parameter>'); 91 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonsurface" type="',class(self.vertexonsurface),'" default="',convert2str(self.vertexonsurface),'">',' <section name="mesh3dprisms" />',' <help> upper vertices flags list </help>',' </parameter>'); 92 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementontsurface" type="',class(self.elementontsurface),'" default="',convert2str(self.elementontsurface),'">',' <section name="mesh3dprisms" />',' <help> upper elements flags list </help>',' </parameter>'); 93 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="uppervertex" type="',class(self.uppervertex),'" default="',convert2str(self.uppervertex),'">',' <section name="mesh3dprisms" />',' <help> upper vertex list (NaN for vertex on the upper surface) </help>',' </parameter>'); 94 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="upperelements" type="',class(self.upperelements),'" default="',convert2str(self.upperelements),'">',' <section name="mesh3dprisms" />',' <help> upper element list (NaN for element on the upper layer) </help>',' </parameter>'); 95 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowervertex" type="',class(self.lowervertex),'" default="',convert2str(self.lowervertex),'">',' <section name="mesh3dprisms" />',' <help> lower vertex list (NaN for vertex on the lower surface) </help>',' </parameter>'); 96 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lowerelements" type="',class(self.lowerelements),'" default="',convert2str(self.lowerelements),'">',' <section name="mesh3dprisms" />',' <help> element list (NaN for element on the lower layer) </help>',' </parameter>'); 97 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexonboundary" type="',class(self.vertexonboundary),'" default="',convert2str(self.vertexonboundary),'">',' <section name="mesh3dprisms" />',' <help> vertices on the boundary of the domain flag list </help>',' </parameter>'); 98 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertexconnectivity" type="',class(self.vertexconnectivity),'" default="',convert2str(self.vertexconnectivity),'">',' <section name="mesh3dprisms" />',' <help> list of vertices connected to vertex_i </help>',' </parameter>'); 99 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="elementconnectivity" type="',class(self.elementconnectivity),'" default="',convert2str(self.elementconnectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>'); 100 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="average_vertex_connectivity" type="',class(self.average_vertex_connectivity),'" default="',convert2str(self.average_vertex_connectivity),'">',' <section name="mesh3dprisms" />',' <help> average number of vertices connected to one vertex </help>',' </parameter>'); 101 101 fprintf(fid,'%s\n%s\n','</frame>'); 102 102 103 103 % Extracted model 104 104 fprintf(fid,'%s\n%s\n%s\n','<frame key="4" label="Extracted Model">','<section name="mesh3dprisms" />'); 105 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedvertices" type="',class( obj.extractedvertices),'" default="',convert2str(obj.extractedvertices),'">',' <section name="mesh3dprisms" />',' <help> vertices extracted from the model </help>',' </parameter>');106 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedelements" type="',class( obj.extractedelements),'" default="',convert2str(obj.extractedelements),'">',' <section name="mesh3dprisms" />',' <help> elements extracted from the model </help>',' </parameter>');105 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedvertices" type="',class(self.extractedvertices),'" default="',convert2str(self.extractedvertices),'">',' <section name="mesh3dprisms" />',' <help> vertices extracted from the model </help>',' </parameter>'); 106 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="extractedelements" type="',class(self.extractedelements),'" default="',convert2str(self.extractedelements),'">',' <section name="mesh3dprisms" />',' <help> elements extracted from the model </help>',' </parameter>'); 107 107 fprintf(fid,'%s\n%s\n','</frame>'); 108 108 109 109 % Projection 110 110 fprintf(fid,'%s\n%s\n%s\n','<frame key="5" label="Projection">','<section name="mesh3dprisms" />'); 111 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class( obj.lat),'" default="',convert2str(obj.lat),'">',' <section name="mesh3dprisms" />',' <help> vertices latitude [degrees] </help>',' </parameter>');112 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class( obj.long),'" default="',convert2str(obj.long),'">',' <section name="mesh3dprisms" />',' <help> verticies longitude [degrees] </help>',' </parameter>');113 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="epsg" type="',class( obj.epsg),'" default="',convert2str(obj.epsg),'">',' <section name="mesh3dprisms" />',' <help> Indicate epsg ''n'' or ''s'' </help>',' </parameter>');111 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="lat" type="',class(self.lat),'" default="',convert2str(self.lat),'">',' <section name="mesh3dprisms" />',' <help> vertices latitude [degrees] </help>',' </parameter>'); 112 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="long" type="',class(self.long),'" default="',convert2str(self.long),'">',' <section name="mesh3dprisms" />',' <help> verticies longitude [degrees] </help>',' </parameter>'); 113 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n',' <parameter key ="epsg" type="',class(self.epsg),'" default="',convert2str(self.epsg),'">',' <section name="mesh3dprisms" />',' <help> Indicate epsg ''n'' or ''s'' </help>',' </parameter>'); 114 114 fprintf(fid,'%s\n%s\n','</frame>'); 115 115 … … 133 133 end 134 134 end % }}} 135 function obj = setdefaultparameters(obj) % {{{135 function self = setdefaultparameters(self) % {{{ 136 136 137 137 %the connectivity is the averaged number of nodes linked to a … … 140 140 %give a good memory/time ration. This value can be checked in 141 141 %trunk/test/Miscellaneous/runme.m 142 obj.average_vertex_connectivity=25;143 end % }}} 144 function md = checkconsistency( obj,md,solution,analyses) % {{{142 self.average_vertex_connectivity=25; 143 end % }}} 144 function md = checkconsistency(self,md,solution,analyses) % {{{ 145 145 146 146 md = checkfield(md,'fieldname','mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]); … … 161 161 md = checkfield(md,'fieldname','mesh.average_vertex_connectivity','>=',24,'message','''mesh.average_vertex_connectivity'' should be at least 24 in 3d'); 162 162 end % }}} 163 function disp( obj) % {{{163 function disp(self) % {{{ 164 164 disp(sprintf(' 3D tetra Mesh:')); 165 165 166 166 disp(sprintf('\n Elements and vertices of the original 2d mesh:')); 167 fielddisplay( obj,'numberofelements2d','number of elements');168 fielddisplay( obj,'numberofvertices2d','number of vertices');169 fielddisplay( obj,'elements2d','vertex indices of the mesh elements');170 fielddisplay( obj,'x2d','vertices x coordinate [m]');171 fielddisplay( obj,'y2d','vertices y coordinate [m]');167 fielddisplay(self,'numberofelements2d','number of elements'); 168 fielddisplay(self,'numberofvertices2d','number of vertices'); 169 fielddisplay(self,'elements2d','vertex indices of the mesh elements'); 170 fielddisplay(self,'x2d','vertices x coordinate [m]'); 171 fielddisplay(self,'y2d','vertices y coordinate [m]'); 172 172 173 173 disp(sprintf('\n Elements and vertices of the extruded 3d mesh:')); 174 fielddisplay( obj,'numberofelements','number of elements');175 fielddisplay( obj,'numberofvertices','number of vertices');176 fielddisplay( obj,'elements','vertex indices of the mesh elements');177 fielddisplay( obj,'x','vertices x coordinate [m]');178 fielddisplay( obj,'y','vertices y coordinate [m]');179 fielddisplay( obj,'z','vertices z coordinate [m]');174 fielddisplay(self,'numberofelements','number of elements'); 175 fielddisplay(self,'numberofvertices','number of vertices'); 176 fielddisplay(self,'elements','vertex indices of the mesh elements'); 177 fielddisplay(self,'x','vertices x coordinate [m]'); 178 fielddisplay(self,'y','vertices y coordinate [m]'); 179 fielddisplay(self,'z','vertices z coordinate [m]'); 180 180 181 181 disp(sprintf('\n Properties:')); 182 fielddisplay( obj,'numberoflayers','number of extrusion layers');183 fielddisplay( obj,'vertexonbase','lower vertices flags list');184 fielddisplay( obj,'vertexonsurface','upper vertices flags list');185 fielddisplay( obj,'uppervertex','upper vertex list (NaN for vertex on the upper surface)');186 fielddisplay( obj,'upperelements','upper element list (NaN for element on the upper layer)');187 fielddisplay( obj,'lowervertex','lower vertex list (NaN for vertex on the lower surface)');188 fielddisplay( obj,'lowerelements','lower element list (NaN for element on the lower layer');189 fielddisplay( obj,'vertexonboundary','vertices on the boundary of the domain flag list');190 191 fielddisplay( obj,'vertexconnectivity','list of vertices connected to vertex_i');192 fielddisplay( obj,'elementconnectivity','list of vertices connected to element_i');193 fielddisplay( obj,'average_vertex_connectivity','average number of vertices connected to one vertex');182 fielddisplay(self,'numberoflayers','number of extrusion layers'); 183 fielddisplay(self,'vertexonbase','lower vertices flags list'); 184 fielddisplay(self,'vertexonsurface','upper vertices flags list'); 185 fielddisplay(self,'uppervertex','upper vertex list (NaN for vertex on the upper surface)'); 186 fielddisplay(self,'upperelements','upper element list (NaN for element on the upper layer)'); 187 fielddisplay(self,'lowervertex','lower vertex list (NaN for vertex on the lower surface)'); 188 fielddisplay(self,'lowerelements','lower element list (NaN for element on the lower layer'); 189 fielddisplay(self,'vertexonboundary','vertices on the boundary of the domain flag list'); 190 191 fielddisplay(self,'vertexconnectivity','list of vertices connected to vertex_i'); 192 fielddisplay(self,'elementconnectivity','list of vertices connected to element_i'); 193 fielddisplay(self,'average_vertex_connectivity','average number of vertices connected to one vertex'); 194 194 195 195 disp(sprintf('\n Extracted model:')); 196 fielddisplay( obj,'extractedvertices','vertices extracted from the model');197 fielddisplay( obj,'extractedelements','elements extracted from the model');196 fielddisplay(self,'extractedvertices','vertices extracted from the model'); 197 fielddisplay(self,'extractedelements','elements extracted from the model'); 198 198 199 199 disp(sprintf('\n Projection:')); 200 fielddisplay( obj,'lat','vertices latitude [degrees]');201 fielddisplay( obj,'long','vertices longitude [degrees]');202 fielddisplay( obj,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)');203 end % }}} 204 function marshall( obj,md,fid) % {{{205 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype( obj)]),'format','Integer');206 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension( obj),'format','Integer');207 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype( obj)),'format','Integer');208 WriteData(fid,'object', obj,'class','mesh','fieldname','x','format','DoubleMat','mattype',1);209 WriteData(fid,'object', obj,'class','mesh','fieldname','y','format','DoubleMat','mattype',1);210 WriteData(fid,'object', obj,'class','mesh','fieldname','z','format','DoubleMat','mattype',1);211 WriteData(fid,'object', obj,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2);212 WriteData(fid,'object', obj,'class','mesh','fieldname','numberoflayers','format','Integer');213 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofelements','format','Integer');214 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofvertices','format','Integer');215 WriteData(fid,'object', obj,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1);216 WriteData(fid,'object', obj,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1);217 WriteData(fid,'object', obj,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2);218 WriteData(fid,'object', obj,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2);219 WriteData(fid,'object', obj,'class','mesh','fieldname','average_vertex_connectivity','format','Integer');220 WriteData(fid,'object', obj,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3);221 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofvertices2d','format','Integer');222 WriteData(fid,'object', obj,'class','mesh','fieldname','numberofelements2d','format','Integer');223 end % }}} 224 function t = domaintype( obj) % {{{200 fielddisplay(self,'lat','vertices latitude [degrees]'); 201 fielddisplay(self,'long','vertices longitude [degrees]'); 202 fielddisplay(self,'epsg','EPSG code (ex: 3413 for UPS Greenland, 3031 for UPS Antarctica)'); 203 end % }}} 204 function marshall(self,md,fid) % {{{ 205 WriteData(fid,'enum',DomainTypeEnum(),'data',StringToEnum(['Domain' domaintype(self)]),'format','Integer'); 206 WriteData(fid,'enum',DomainDimensionEnum(),'data',dimension(self),'format','Integer'); 207 WriteData(fid,'enum',MeshElementtypeEnum(),'data',StringToEnum(elementtype(self)),'format','Integer'); 208 WriteData(fid,'object',self,'class','mesh','fieldname','x','format','DoubleMat','mattype',1); 209 WriteData(fid,'object',self,'class','mesh','fieldname','y','format','DoubleMat','mattype',1); 210 WriteData(fid,'object',self,'class','mesh','fieldname','z','format','DoubleMat','mattype',1); 211 WriteData(fid,'object',self,'class','mesh','fieldname','elements','format','DoubleMat','mattype',2); 212 WriteData(fid,'object',self,'class','mesh','fieldname','numberoflayers','format','Integer'); 213 WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements','format','Integer'); 214 WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices','format','Integer'); 215 WriteData(fid,'object',self,'class','mesh','fieldname','vertexonbase','format','BooleanMat','mattype',1); 216 WriteData(fid,'object',self,'class','mesh','fieldname','vertexonsurface','format','BooleanMat','mattype',1); 217 WriteData(fid,'object',self,'class','mesh','fieldname','lowerelements','format','DoubleMat','mattype',2); 218 WriteData(fid,'object',self,'class','mesh','fieldname','upperelements','format','DoubleMat','mattype',2); 219 WriteData(fid,'object',self,'class','mesh','fieldname','average_vertex_connectivity','format','Integer'); 220 WriteData(fid,'object',self,'class','mesh','fieldname','elements2d','format','DoubleMat','mattype',3); 221 WriteData(fid,'object',self,'class','mesh','fieldname','numberofvertices2d','format','Integer'); 222 WriteData(fid,'object',self,'class','mesh','fieldname','numberofelements2d','format','Integer'); 223 end % }}} 224 function t = domaintype(self) % {{{ 225 225 t = '3D'; 226 226 end % }}} 227 function d = dimension( obj) % {{{227 function d = dimension(self) % {{{ 228 228 d = 3; 229 229 end % }}} 230 function s = elementtype( obj) % {{{230 function s = elementtype(self) % {{{ 231 231 s = 'Tetra'; 232 232 end % }}} -
issm/trunk-jpl/src/m/classes/miscellaneous.m
r17720 r19040 11 11 end 12 12 methods 13 function createxml( obj,fid) % {{{13 function createxml(self,fid) % {{{ 14 14 fprintf(fid, '<!-- miscellaneous -->\n'); 15 15 16 16 % miscellaneous solution parameters 17 17 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="miscellaneous parameters">','<section name="miscellaneous" />'); 18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="notes" type="',class( obj.notes),'" default="',convert2str(obj.notes),'">',' <section name="miscellaneous" />',' <help> notes in a cell of strings </help>',' </parameter>');19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="name" type="',class( obj.name),'" default="',convert2str(obj.name),'">',' <section name="miscellaneous" />',' <help> model name </help>',' </parameter>');20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="dummy" type="',class( obj.dummy),'" default="',convert2str(obj.dummy),'">',' <section name="miscellaneous" />',' <help> empty field to store some data </help>',' </parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="notes" type="',class(self.notes),'" default="',convert2str(self.notes),'">',' <section name="miscellaneous" />',' <help> notes in a cell of strings </help>',' </parameter>'); 19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="name" type="',class(self.name),'" default="',convert2str(self.name),'">',' <section name="miscellaneous" />',' <help> model name </help>',' </parameter>'); 20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="dummy" type="',class(self.dummy),'" default="',convert2str(self.dummy),'">',' <section name="miscellaneous" />',' <help> empty field to store some data </help>',' </parameter>'); 21 21 fprintf(fid,'%s\n%s\n','</frame>'); 22 22 23 23 end % }}} 24 function obj= miscellaneous(varargin) % {{{24 function self = miscellaneous(varargin) % {{{ 25 25 switch nargin 26 26 case 0 27 obj=setdefaultparameters(obj);27 self=setdefaultparameters(self); 28 28 otherwise 29 29 error('constructor not supported'); 30 30 end 31 31 end % }}} 32 function md = checkconsistency( obj,md,solution,analyses) % {{{32 function md = checkconsistency(self,md,solution,analyses) % {{{ 33 33 34 34 md = checkfield(md,'fieldname','miscellaneous.name','empty',1); 35 35 36 36 end % }}} 37 function obj = setdefaultparameters(obj) % {{{37 function self = setdefaultparameters(self) % {{{ 38 38 39 39 end % }}} 40 function disp( obj) % {{{40 function disp(self) % {{{ 41 41 disp(sprintf(' miscellaneous parameters:')); 42 42 43 fielddisplay( obj,'notes','notes in a cell of strings');44 fielddisplay( obj,'name','model name');45 fielddisplay( obj,'dummy','empty field to store some data');43 fielddisplay(self,'notes','notes in a cell of strings'); 44 fielddisplay(self,'name','model name'); 45 fielddisplay(self,'dummy','empty field to store some data'); 46 46 47 47 end % }}} 48 function marshall( obj,md,fid) % {{{49 WriteData(fid,'object', obj,'fieldname','name','format','String');48 function marshall(self,md,fid) % {{{ 49 WriteData(fid,'object',self,'fieldname','name','format','String'); 50 50 end % }}} 51 51 end -
issm/trunk-jpl/src/m/classes/misfit.m
r19027 r19040 28 28 29 29 methods 30 function obj= misfit(varargin) % {{{30 function self = misfit(varargin) % {{{ 31 31 if nargin==0, 32 obj=setdefaultparameters(obj);32 self=setdefaultparameters(self); 33 33 else 34 34 %use provided options to change fields … … 36 36 37 37 %get name 38 obj.name=getfieldvalue(options,'name','');39 obj.definitionenum=getfieldvalue(options,'definitionenum');40 obj.model_enum=getfieldvalue(options,'model_enum');41 obj.observation=getfieldvalue(options,'observation',NaN);42 obj.observation_enum=getfieldvalue(options,'observation_enum');43 obj.timeinterpolation=getfieldvalue(options,'timeinterpolation','nearestneighbor');44 obj.weights=getfieldvalue(options,'weights',NaN);45 obj.weights_enum=getfieldvalue(options,'weights_enum',NaN);38 self.name=getfieldvalue(options,'name',''); 39 self.definitionenum=getfieldvalue(options,'definitionenum'); 40 self.model_enum=getfieldvalue(options,'model_enum'); 41 self.observation=getfieldvalue(options,'observation',NaN); 42 self.observation_enum=getfieldvalue(options,'observation_enum'); 43 self.timeinterpolation=getfieldvalue(options,'timeinterpolation','nearestneighbor'); 44 self.weights=getfieldvalue(options,'weights',NaN); 45 self.weights_enum=getfieldvalue(options,'weights_enum',NaN); 46 46 47 47 end 48 48 end % }}} 49 function obj = setdefaultparameters(obj) % {{{50 obj.timeinterpolation='nearestneighbor';49 function self = setdefaultparameters(self) % {{{ 50 self.timeinterpolation='nearestneighbor'; 51 51 end % }}} 52 function md = checkconsistency( obj,md,solution,analyses) % {{{52 function md = checkconsistency(self,md,solution,analyses) % {{{ 53 53 54 if ~ischar( obj.name),54 if ~ischar(self.name), 55 55 error('misfit error message: ''name'' field should be a string!'); 56 56 end 57 md = checkfield(md,'fieldname',' obj.definitionenum','field',obj.definitionenum,'values',[Outputdefinition1Enum,Outputdefinition2Enum,Outputdefinition3Enum,Outputdefinition4Enum,Outputdefinition5Enum,Outputdefinition6Enum,Outputdefinition7Enum,Outputdefinition8Enum,Outputdefinition9Enum,Outputdefinition10Enum]);57 md = checkfield(md,'fieldname','self.definitionenum','field',self.definitionenum,'values',[Outputdefinition1Enum,Outputdefinition2Enum,Outputdefinition3Enum,Outputdefinition4Enum,Outputdefinition5Enum,Outputdefinition6Enum,Outputdefinition7Enum,Outputdefinition8Enum,Outputdefinition9Enum,Outputdefinition10Enum]); 58 58 59 if ~ischar( obj.timeinterpolation),59 if ~ischar(self.timeinterpolation), 60 60 error('misfit error message: ''timeinterpolation'' field should be a string!'); 61 61 end 62 md = checkfield(md,'fieldname',' obj.observation','field',obj.observation,'timeseries',1,'NaN',1);63 md = checkfield(md,'fieldname',' obj.timeinterpolation','field',obj.timeinterpolation,'values',{'nearestneighbor'});64 md = checkfield(md,'fieldname',' obj.weights','field',obj.weights,'timeseries',1,'NaN',1);62 md = checkfield(md,'fieldname','self.observation','field',self.observation,'timeseries',1,'NaN',1); 63 md = checkfield(md,'fieldname','self.timeinterpolation','field',self.timeinterpolation,'values',{'nearestneighbor'}); 64 md = checkfield(md,'fieldname','self.weights','field',self.weights,'timeseries',1,'NaN',1); 65 65 66 66 end % }}} 67 function md = disp( obj) % {{{67 function md = disp(self) % {{{ 68 68 69 69 disp(sprintf(' Misfit:\n')); 70 70 71 fielddisplay( obj,'name','identifier for this misfit response');72 fielddisplay( obj,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum');73 fielddisplay( obj,'model_enum','enum for field that is modeled');74 fielddisplay( obj,'observation','observed field that we compare the model against');75 fielddisplay( obj,'observation_enum','observation enum');76 fielddisplay( obj,'timeinterpolation','interpolation routine used to interpolate misfit between two time steps (default is ''nearestneighbor''');77 fielddisplay( obj,'weights','weights (at vertices) to apply to the misfit');78 fielddisplay( obj,'weights_enum','enum for weights for identification purposes');71 fielddisplay(self,'name','identifier for this misfit response'); 72 fielddisplay(self,'definitionenum','enum that identifies this output definition uniquely, from Outputdefinition[1-10]Enum'); 73 fielddisplay(self,'model_enum','enum for field that is modeled'); 74 fielddisplay(self,'observation','observed field that we compare the model against'); 75 fielddisplay(self,'observation_enum','observation enum'); 76 fielddisplay(self,'timeinterpolation','interpolation routine used to interpolate misfit between two time steps (default is ''nearestneighbor'''); 77 fielddisplay(self,'weights','weights (at vertices) to apply to the misfit'); 78 fielddisplay(self,'weights_enum','enum for weights for identification purposes'); 79 79 80 80 end % }}} 81 function md = marshall( obj,md,fid) % {{{81 function md = marshall(self,md,fid) % {{{ 82 82 83 WriteData(fid,'object', obj,'fieldname','name','format','String');84 WriteData(fid,'object', obj,'fieldname','definitionenum','format','Integer');85 WriteData(fid,'object', obj,'fieldname','model_enum','format','Integer');86 WriteData(fid,'object', obj,'fieldname','observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);87 WriteData(fid,'object', obj,'fieldname','observation_enum','format','Integer');88 WriteData(fid,'object', obj,'fieldname','timeinterpolation','format','String');89 WriteData(fid,'object', obj,'fieldname','weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);90 WriteData(fid,'object', obj,'fieldname','weights_enum','format','Integer');83 WriteData(fid,'object',self,'fieldname','name','format','String'); 84 WriteData(fid,'object',self,'fieldname','definitionenum','format','Integer'); 85 WriteData(fid,'object',self,'fieldname','model_enum','format','Integer'); 86 WriteData(fid,'object',self,'fieldname','observation','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 87 WriteData(fid,'object',self,'fieldname','observation_enum','format','Integer'); 88 WriteData(fid,'object',self,'fieldname','timeinterpolation','format','String'); 89 WriteData(fid,'object',self,'fieldname','weights','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 90 WriteData(fid,'object',self,'fieldname','weights_enum','format','Integer'); 91 91 92 92 end % }}} -
issm/trunk-jpl/src/m/classes/model.m
r18961 r19040 1341 1341 end 1342 1342 end % }}} 1343 function disp( obj) % {{{1344 disp(sprintf('%19s: %-22s -- %s','mesh' ,['[1x1 ' class( obj.mesh) ']'],'mesh properties'));1345 disp(sprintf('%19s: %-22s -- %s','mask' ,['[1x1 ' class( obj.mask) ']'],'defines grounded and floating elements'));1346 disp(sprintf('%19s: %-22s -- %s','geometry' ,['[1x1 ' class( obj.geometry) ']'],'surface elevation, bedrock topography, ice thickness,...'));1347 disp(sprintf('%19s: %-22s -- %s','constants' ,['[1x1 ' class( obj.constants) ']'],'physical constants'));1348 disp(sprintf('%19s: %-22s -- %s','surfaceforcings' ,['[1x1 ' class( obj.surfaceforcings) ']'],'surface forcings'));1349 disp(sprintf('%19s: %-22s -- %s','basalforcings' ,['[1x1 ' class( obj.basalforcings) ']'],'bed forcings'));1350 disp(sprintf('%19s: %-22s -- %s','materials' ,['[1x1 ' class( obj.materials) ']'],'material properties'));1351 disp(sprintf('%19s: %-22s -- %s','damage' ,['[1x1 ' class( obj.damage) ']'],'parameters for damage evolution solution'));1352 disp(sprintf('%19s: %-22s -- %s','friction' ,['[1x1 ' class( obj.friction) ']'],'basal friction/drag properties'));1353 disp(sprintf('%19s: %-22s -- %s','flowequation' ,['[1x1 ' class( obj.flowequation) ']'],'flow equations'));1354 disp(sprintf('%19s: %-22s -- %s','timestepping' ,['[1x1 ' class( obj.timestepping) ']'],'time stepping for transient models'));1355 disp(sprintf('%19s: %-22s -- %s','initialization' ,['[1x1 ' class( obj.initialization) ']'],'initial guess/state'));1356 disp(sprintf('%19s: %-22s -- %s','rifts' ,['[1x1 ' class( obj.rifts) ']'],'rifts properties'));1357 disp(sprintf('%19s: %-22s -- %s','debug' ,['[1x1 ' class( obj.debug) ']'],'debugging tools (valgrind, gprof)'));1358 disp(sprintf('%19s: %-22s -- %s','verbose' ,['[1x1 ' class( obj.verbose) ']'],'verbosity level in solve'));1359 disp(sprintf('%19s: %-22s -- %s','settings' ,['[1x1 ' class( obj.settings) ']'],'settings properties'));1360 disp(sprintf('%19s: %-22s -- %s','toolkits' ,['[1x1 ' class( obj.toolkits) ']'],'PETSc options for each solution'));1361 disp(sprintf('%19s: %-22s -- %s','cluster' ,['[1x1 ' class( obj.cluster) ']'],'cluster parameters (number of cpus...)'));1362 disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class( obj.balancethickness) ']'],'parameters for balancethickness solution'));1363 disp(sprintf('%19s: %-22s -- %s','stressbalance' ,['[1x1 ' class( obj.stressbalance) ']'],'parameters for stressbalance solution'));1364 disp(sprintf('%19s: %-22s -- %s','groundingline' ,['[1x1 ' class( obj.groundingline) ']'],'parameters for groundingline solution'));1365 disp(sprintf('%19s: %-22s -- %s','hydrology' ,['[1x1 ' class( obj.hydrology) ']'],'parameters for hydrology solution'));1366 disp(sprintf('%19s: %-22s -- %s','masstransport' ,['[1x1 ' class( obj.masstransport) ']'],'parameters for masstransport solution'));1367 disp(sprintf('%19s: %-22s -- %s','thermal' ,['[1x1 ' class( obj.thermal) ']'],'parameters for thermal solution'));1368 disp(sprintf('%19s: %-22s -- %s','steadystate' ,['[1x1 ' class( obj.steadystate) ']'],'parameters for steadystate solution'));1369 disp(sprintf('%19s: %-22s -- %s','transient' ,['[1x1 ' class( obj.transient) ']'],'parameters for transient solution'));1370 disp(sprintf('%19s: %-22s -- %s','calving' ,['[1x1 ' class( obj.calving) ']'],'parameters for calving'));1371 disp(sprintf('%19s: %-22s -- %s','gia' ,['[1x1 ' class( obj.gia) ']'],'parameters for gia solution'));1372 disp(sprintf('%19s: %-22s -- %s','autodiff' ,['[1x1 ' class( obj.autodiff) ']'],'automatic differentiation parameters'));1373 disp(sprintf('%19s: %-22s -- %s','flaim' ,['[1x1 ' class( obj.flaim) ']'],'flaim parameters'));1374 disp(sprintf('%19s: %-22s -- %s','inversion' ,['[1x1 ' class( obj.inversion) ']'],'parameters for inverse methods'));1375 disp(sprintf('%19s: %-22s -- %s','qmu' ,['[1x1 ' class( obj.qmu) ']'],'dakota properties'));1376 disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class( obj.outputdefinition) ']'],'output definition'));1377 disp(sprintf('%19s: %-22s -- %s','results' ,['[1x1 ' class( obj.results) ']'],'model results'));1378 disp(sprintf('%19s: %-22s -- %s','radaroverlay' ,['[1x1 ' class( obj.radaroverlay) ']'],'radar image for plot overlay'));1379 disp(sprintf('%19s: %-22s -- %s','miscellaneous' ,['[1x1 ' class( obj.miscellaneous) ']'],'miscellaneous fields'));1380 disp(sprintf('%19s: %-22s -- %s','seaice' ,['[1x1 ' class( obj.seaice) ']'],'parameters for Sea Ice solution'));1343 function disp(self) % {{{ 1344 disp(sprintf('%19s: %-22s -- %s','mesh' ,['[1x1 ' class(self.mesh) ']'],'mesh properties')); 1345 disp(sprintf('%19s: %-22s -- %s','mask' ,['[1x1 ' class(self.mask) ']'],'defines grounded and floating elements')); 1346 disp(sprintf('%19s: %-22s -- %s','geometry' ,['[1x1 ' class(self.geometry) ']'],'surface elevation, bedrock topography, ice thickness,...')); 1347 disp(sprintf('%19s: %-22s -- %s','constants' ,['[1x1 ' class(self.constants) ']'],'physical constants')); 1348 disp(sprintf('%19s: %-22s -- %s','surfaceforcings' ,['[1x1 ' class(self.surfaceforcings) ']'],'surface forcings')); 1349 disp(sprintf('%19s: %-22s -- %s','basalforcings' ,['[1x1 ' class(self.basalforcings) ']'],'bed forcings')); 1350 disp(sprintf('%19s: %-22s -- %s','materials' ,['[1x1 ' class(self.materials) ']'],'material properties')); 1351 disp(sprintf('%19s: %-22s -- %s','damage' ,['[1x1 ' class(self.damage) ']'],'parameters for damage evolution solution')); 1352 disp(sprintf('%19s: %-22s -- %s','friction' ,['[1x1 ' class(self.friction) ']'],'basal friction/drag properties')); 1353 disp(sprintf('%19s: %-22s -- %s','flowequation' ,['[1x1 ' class(self.flowequation) ']'],'flow equations')); 1354 disp(sprintf('%19s: %-22s -- %s','timestepping' ,['[1x1 ' class(self.timestepping) ']'],'time stepping for transient models')); 1355 disp(sprintf('%19s: %-22s -- %s','initialization' ,['[1x1 ' class(self.initialization) ']'],'initial guess/state')); 1356 disp(sprintf('%19s: %-22s -- %s','rifts' ,['[1x1 ' class(self.rifts) ']'],'rifts properties')); 1357 disp(sprintf('%19s: %-22s -- %s','debug' ,['[1x1 ' class(self.debug) ']'],'debugging tools (valgrind, gprof)')); 1358 disp(sprintf('%19s: %-22s -- %s','verbose' ,['[1x1 ' class(self.verbose) ']'],'verbosity level in solve')); 1359 disp(sprintf('%19s: %-22s -- %s','settings' ,['[1x1 ' class(self.settings) ']'],'settings properties')); 1360 disp(sprintf('%19s: %-22s -- %s','toolkits' ,['[1x1 ' class(self.toolkits) ']'],'PETSc options for each solution')); 1361 disp(sprintf('%19s: %-22s -- %s','cluster' ,['[1x1 ' class(self.cluster) ']'],'cluster parameters (number of cpus...)')); 1362 disp(sprintf('%19s: %-22s -- %s','balancethickness',['[1x1 ' class(self.balancethickness) ']'],'parameters for balancethickness solution')); 1363 disp(sprintf('%19s: %-22s -- %s','stressbalance' ,['[1x1 ' class(self.stressbalance) ']'],'parameters for stressbalance solution')); 1364 disp(sprintf('%19s: %-22s -- %s','groundingline' ,['[1x1 ' class(self.groundingline) ']'],'parameters for groundingline solution')); 1365 disp(sprintf('%19s: %-22s -- %s','hydrology' ,['[1x1 ' class(self.hydrology) ']'],'parameters for hydrology solution')); 1366 disp(sprintf('%19s: %-22s -- %s','masstransport' ,['[1x1 ' class(self.masstransport) ']'],'parameters for masstransport solution')); 1367 disp(sprintf('%19s: %-22s -- %s','thermal' ,['[1x1 ' class(self.thermal) ']'],'parameters for thermal solution')); 1368 disp(sprintf('%19s: %-22s -- %s','steadystate' ,['[1x1 ' class(self.steadystate) ']'],'parameters for steadystate solution')); 1369 disp(sprintf('%19s: %-22s -- %s','transient' ,['[1x1 ' class(self.transient) ']'],'parameters for transient solution')); 1370 disp(sprintf('%19s: %-22s -- %s','calving' ,['[1x1 ' class(self.calving) ']'],'parameters for calving')); 1371 disp(sprintf('%19s: %-22s -- %s','gia' ,['[1x1 ' class(self.gia) ']'],'parameters for gia solution')); 1372 disp(sprintf('%19s: %-22s -- %s','autodiff' ,['[1x1 ' class(self.autodiff) ']'],'automatic differentiation parameters')); 1373 disp(sprintf('%19s: %-22s -- %s','flaim' ,['[1x1 ' class(self.flaim) ']'],'flaim parameters')); 1374 disp(sprintf('%19s: %-22s -- %s','inversion' ,['[1x1 ' class(self.inversion) ']'],'parameters for inverse methods')); 1375 disp(sprintf('%19s: %-22s -- %s','qmu' ,['[1x1 ' class(self.qmu) ']'],'dakota properties')); 1376 disp(sprintf('%19s: %-22s -- %s','outputdefinition',['[1x1 ' class(self.outputdefinition) ']'],'output definition')); 1377 disp(sprintf('%19s: %-22s -- %s','results' ,['[1x1 ' class(self.results) ']'],'model results')); 1378 disp(sprintf('%19s: %-22s -- %s','radaroverlay' ,['[1x1 ' class(self.radaroverlay) ']'],'radar image for plot overlay')); 1379 disp(sprintf('%19s: %-22s -- %s','miscellaneous' ,['[1x1 ' class(self.miscellaneous) ']'],'miscellaneous fields')); 1380 disp(sprintf('%19s: %-22s -- %s','seaice' ,['[1x1 ' class(self.seaice) ']'],'parameters for Sea Ice solution')); 1381 1381 end % }}} 1382 function memory( obj) % {{{1382 function memory(self) % {{{ 1383 1383 1384 1384 disp(sprintf('\nMemory imprint:\n')); … … 1388 1388 1389 1389 for i=1:length(fields), 1390 field= obj.(fields{i});1390 field=self.(fields{i}); 1391 1391 s=whos('field'); 1392 1392 mem=mem+s.bytes/1e6; … … 1396 1396 disp(sprintf('%19s: %g Mb','Total',mem)); 1397 1397 end % }}} 1398 function netcdf( obj,filename) % {{{1398 function netcdf(self,filename) % {{{ 1399 1399 %NETCDF - save model as netcdf 1400 1400 % … … 1409 1409 ncid=netcdf.create(filename,'CLOBBER'); 1410 1410 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Conventions','CF-1.4'); 1411 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model (' obj.miscellaneous.name ')']);1411 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Title',['ISSM model (' self.miscellaneous.name ')']); 1412 1412 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Author',getenv('USER')); 1413 1413 netcdf.putAtt(ncid,netcdf.getConstant('NC_GLOBAL'),'Date',datestr(now)); … … 1418 1418 for step=1:2, 1419 1419 counter=0; 1420 [var_id,counter]=structtonc(ncid,'md', obj,0,var_id,counter,step);1420 [var_id,counter]=structtonc(ncid,'md',self,0,var_id,counter,step); 1421 1421 if step==1, netcdf.endDef(ncid); end 1422 1422 end … … 1428 1428 netcdf.close(ncid) 1429 1429 end % }}} 1430 function xylim( obj) % {{{1431 1432 xlim([min( obj.mesh.x) max(obj.mesh.x)]);1433 ylim([min( obj.mesh.y) max(obj.mesh.y)])1430 function xylim(self) % {{{ 1431 1432 xlim([min(self.mesh.x) max(self.mesh.x)]); 1433 ylim([min(self.mesh.y) max(self.mesh.y)]) 1434 1434 end % }}} 1435 1435 function md=upload(md) % {{{ -
issm/trunk-jpl/src/m/classes/modellist.m
r17686 r19040 122 122 123 123 end % }}} 124 function obj= modellist(varargin) % {{{124 function self = modellist(varargin) % {{{ 125 125 126 126 %initialize list … … 146 146 end 147 147 148 obj.models = celllist;149 obj.cluster = obj.models{1}.cluster;150 end 151 end % }}} 152 function val = get( obj, propName)% {{{148 self.models = celllist; 149 self.cluster = self.models{1}.cluster; 150 end 151 end % }}} 152 function val = get(self, propName)% {{{ 153 153 %GET - gets model propertie from a specified object ans returns the value 154 154 % … … 158 158 switch propName 159 159 case 'numberofelements' 160 val = obj.numberofelements;160 val = self.numberofelements; 161 161 case 'numberofnodes' 162 val = obj.numberofnodes;162 val = self.numberofnodes; 163 163 case 'elements' 164 val = obj.elements;164 val = self.elements; 165 165 case 'x' 166 val = obj.x;166 val = self.x; 167 167 case 'y' 168 val = obj.y;168 val = self.y; 169 169 case 'z' 170 val = obj.z;170 val = self.z; 171 171 otherwise 172 172 error(['get error message: ' propName,' is not a valid model property']) 173 173 end 174 174 end % }}} 175 function obj = loadmultipleresultsfromcluster(obj) % {{{175 function self = loadmultipleresultsfromcluster(self) % {{{ 176 176 %LOADMULTIPLERESULTSFROMCLUSTER - load multiple results of solution sequences from cluster 177 177 % 178 178 % Usage: 179 % obj=loadresultsfromcluster(obj);180 181 nummodels=length( obj.models);179 % self=loadresultsfromcluster(self); 180 181 nummodels=length(self.models); 182 182 183 183 %Get cluster settings 184 cluster= obj.cluster;185 name= obj.name;184 cluster=self.cluster; 185 name=self.name; 186 186 cluster_rc_location=which('cluster.rc'); 187 187 [codepath,executionpath]=ClusterParameters(cluster,cluster_rc_location); … … 200 200 for i=1:nummodels, 201 201 %load results for this model 202 obj.models{i}=loadresultsfromdisk(obj.models{i},[name '-' num2str(i) 'vs' num2str(nummodels) '.outbin']);202 self.models{i}=loadresultsfromdisk(self.models{i},[name '-' num2str(i) 'vs' num2str(nummodels) '.outbin']); 203 203 204 204 delete([name '-' num2str(i) 'vs' num2str(nummodels) '.outbin']); … … 208 208 delete('ModelResults.tar.gz'); 209 209 end % }}} 210 function obj = solve(obj,varargin)% {{{210 function self = solve(self,varargin)% {{{ 211 211 %SOLVE - apply solution sequence for a list of models. Used in batch mode. 212 212 % 213 213 % Usage: 214 % obj=solve(obj,varargin)214 % self=solve(self,varargin) 215 215 % where varargin is a lit of paired arguments. 216 216 % arguments can be: 'analysis_type': 'stressbalance','thermal','masstransport','transient' 217 217 % 218 218 % Examples: 219 % obj=solve(obj,'analysis_type','stressbalance');219 % self=solve(self,'analysis_type','stressbalance'); 220 220 221 221 %recover options … … 226 226 227 227 %length of list 228 nummodels=length( obj.models);228 nummodels=length(self.models); 229 229 230 230 %name of queue: to make it unique, add a time stamp 231 name=[ obj.name '-' datestr(now,1) '-' datestr(now,'HH-MM-SS') ];231 name=[self.name '-' datestr(now,1) '-' datestr(now,'HH-MM-SS') ]; 232 232 233 233 %name of cluster will be first name of list 234 cluster= obj.cluster;234 cluster=self.cluster; 235 235 236 236 %Figure out parameters for this particular cluster … … 242 242 243 243 %model 244 mdex= obj.models{i};244 mdex=self.models{i}; 245 245 246 246 %recover some fields … … 248 248 249 249 mdex.name=[name '-' num2str(i) 'vs' num2str(nummodels)]; 250 mdex.time= obj.time;251 mdex.queue= obj.queue;252 mdex.cluster= obj.cluster;253 if ~isnan( obj.np),254 mdex.np= obj.np;250 mdex.time=self.time; 251 mdex.queue=self.queue; 252 mdex.cluster=self.cluster; 253 if ~isnan(self.np), 254 mdex.np=self.np; 255 255 end 256 256 … … 263 263 264 264 %feed back 265 obj.models{i}=mdex;265 self.models{i}=mdex; 266 266 end 267 267 … … 287 287 288 288 %save name: 289 obj.name=name;289 self.name=name; 290 290 end % }}} 291 291 end -
issm/trunk-jpl/src/m/classes/outputdefinition.m
r17720 r19040 9 9 end 10 10 methods 11 function createxml( obj,fid) % {{{11 function createxml(self,fid) % {{{ 12 12 fprintf(fid, '<!-- outputdefinition -->\n'); 13 13 14 14 % outputdefinition solution parameters 15 15 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="outputdefinition">','<section name="outputdefinition" />'); 16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="definitions" type="',class( obj.definitions),'" default="',convert2str(obj.definitions),'">',' <section name="outputdefinition" />',' <help> list of potential outputs that can be requested, but which need additional data to be defined </help>',' </parameter>');16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="definitions" type="',class(self.definitions),'" default="',convert2str(self.definitions),'">',' <section name="outputdefinition" />',' <help> list of potential outputs that can be requested, but which need additional data to be defined </help>',' </parameter>'); 17 17 fprintf(fid,'%s\n%s\n','</frame>'); 18 18 19 19 end % }}} 20 function obj= outputdefinition(varargin) % {{{20 function self = outputdefinition(varargin) % {{{ 21 21 switch nargin 22 22 case 0 23 obj=setdefaultparameters(obj);23 self=setdefaultparameters(self); 24 24 otherwise 25 25 error('constructor not supported'); 26 26 end 27 27 end % }}} 28 function obj = setdefaultparameters(obj) % {{{28 function self = setdefaultparameters(self) % {{{ 29 29 30 obj.definitions={};30 self.definitions={}; 31 31 32 32 end % }}} 33 function md = checkconsistency( obj,md,solution,analyses) % {{{33 function md = checkconsistency(self,md,solution,analyses) % {{{ 34 34 35 35 md = checkfield(md,'fieldname','outputdefinition.definitions','cell',1); 36 36 37 for i=1:length( obj.definitions),38 md=checkconsistency( obj.definitions{i},md,solution,analyses);37 for i=1:length(self.definitions), 38 md=checkconsistency(self.definitions{i},md,solution,analyses); 39 39 end 40 40 41 41 end % }}} 42 function disp( obj) % {{{42 function disp(self) % {{{ 43 43 disp(sprintf(' outputdefinition:')); 44 fielddisplay( obj,'definitions','list of potential outputs that can be requested, but which need additional data to be defined');44 fielddisplay(self,'definitions','list of potential outputs that can be requested, but which need additional data to be defined'); 45 45 46 46 end % }}} 47 function marshall( obj,md,fid) % {{{47 function marshall(self,md,fid) % {{{ 48 48 49 enums=zeros(length( obj.definitions),1);50 for i=1:length( obj.definitions),51 obj.definitions{i}.marshall(md,fid);52 classdefinition=class( obj.definitions{i});49 enums=zeros(length(self.definitions),1); 50 for i=1:length(self.definitions), 51 self.definitions{i}.marshall(md,fid); 52 classdefinition=class(self.definitions{i}); 53 53 classdefinition(1)=upper(classdefinition(1)); %so it matches our enums definitions. 54 54 enums(i)=StringToEnum(classdefinition); -
issm/trunk-jpl/src/m/classes/pairoptions.m
r15344 r19040 11 11 end 12 12 methods 13 function obj= pairoptions(varargin) % {{{13 function self = pairoptions(varargin) % {{{ 14 14 15 15 %get calling function name 16 16 a=dbstack; 17 17 if length(a)>1, 18 obj.functionname=a(2).file(1:end-2);19 else 20 obj.functionname='';18 self.functionname=a(2).file(1:end-2); 19 else 20 self.functionname=''; 21 21 end 22 22 … … 25 25 %Do nothing, 26 26 else 27 obj=buildlist(obj,varargin{:});28 end 29 end % }}} 30 function obj = buildlist(obj,varargin) % {{{27 self=buildlist(self,varargin{:}); 28 end 29 end % }}} 30 function self = buildlist(self,varargin) % {{{ 31 31 %BUILDLIST - build list of obj from input 32 32 … … 38 38 39 39 %Allocate memory 40 obj.list=cell(numoptions,3);40 self.list=cell(numoptions,3); 41 41 42 42 %go through varargin and build list of obj 43 43 for i=1:numoptions, 44 44 if ischar(varargin{2*i-1}), 45 obj.list{i,1}=varargin{2*i-1};46 obj.list{i,2}=varargin{2*i};47 obj.list{i,3}=false; %used?45 self.list{i,1}=varargin{2*i-1}; 46 self.list{i,2}=varargin{2*i}; 47 self.list{i,3}=false; %used? 48 48 else 49 49 %option is not a string, ignore it 50 50 disp(['WARNING: option number ' num2str(i) ' is not a string, it will be ignored']); 51 obj.list(i,:)=[];51 self.list(i,:)=[]; 52 52 continue 53 53 end 54 54 end 55 55 end % }}} 56 function obj = addfield(obj,field,value) % {{{56 function self = addfield(self,field,value) % {{{ 57 57 if ischar(field), 58 obj.list{end+1,1} = field;59 obj.list{end,2} = value;60 obj.list{end,3} = false;61 end 62 end % }}} 63 function obj = addfielddefault(obj,field,value) % {{{58 self.list{end+1,1} = field; 59 self.list{end,2} = value; 60 self.list{end,3} = false; 61 end 62 end % }}} 63 function self = addfielddefault(self,field,value) % {{{ 64 64 %ADDFIELDDEFAULT - add a field to an options list if it does not exist 65 65 if ischar(field), 66 if ~exist( obj,field),67 obj.list{end+1,1} = field;68 obj.list{end,2} = value;69 obj.list{end,3} = true; %It is a default so user will not be notified if not used66 if ~exist(self,field), 67 self.list{end+1,1} = field; 68 self.list{end,2} = value; 69 self.list{end,3} = true; %It is a default so user will not be notified if not used 70 70 end 71 71 end … … 84 84 end 85 85 end % }}} 86 function obj = changefieldvalue(obj,field,newvalue) % {{{86 function self = changefieldvalue(self,field,newvalue) % {{{ 87 87 %CHANGEOPTIONVALUE - change the value of an option in an option list 88 88 89 89 %track occurrence of field 90 lines=find(strcmpi( obj.list(:,1),field));90 lines=find(strcmpi(self.list(:,1),field)); 91 91 92 92 %replace value 93 93 if isempty(lines), 94 94 %add new field if not found 95 obj=addfield(obj,field,newvalue);96 obj.list{end,3}=true; % do not notify user if unused95 self=addfield(self,field,newvalue); 96 self.list{end,3}=true; % do not notify user if unused 97 97 else 98 98 for i=1:length(lines), 99 obj.list{lines(i),2}=newvalue;100 end 101 end 102 end % }}} 103 function obj = deleteduplicates(obj,warn) % {{{99 self.list{lines(i),2}=newvalue; 100 end 101 end 102 end % }}} 103 function self = deleteduplicates(self,warn) % {{{ 104 104 %DELETEDUPLICATES - delete duplicates in an option list 105 105 106 106 %track the first occurrence of each option 107 [dummy lines]=unique( obj.list(:,1),'first');107 [dummy lines]=unique(self.list(:,1),'first'); 108 108 clear dummy 109 109 110 110 %warn user if requested 111 111 if warn, 112 numoptions=size( obj.list,1);112 numoptions=size(self.list,1); 113 113 for i=1:numoptions, 114 114 if ~ismember(i,lines), 115 disp(['WARNING: option ' obj.list{i,1} ' appeared more than once. Only its first occurrence will be kept'])115 disp(['WARNING: option ' self.list{i,1} ' appeared more than once. Only its first occurrence will be kept']) 116 116 end 117 117 end … … 119 119 120 120 %remove duplicates from the options list 121 obj.list=obj.list(lines,:);122 end % }}} 123 function displayunused( obj) % {{{121 self.list=self.list(lines,:); 122 end % }}} 123 function displayunused(self) % {{{ 124 124 %DISPLAYUNUSED - display unused options 125 125 126 numoptions=size( obj.list,1);126 numoptions=size(self.list,1); 127 127 for i=1:numoptions, 128 if ~ obj.list{i,3},129 disp(['WARNING: option ' obj.list{i,1} ' was not used'])130 end 131 end 132 end % }}} 133 function disp( obj) % {{{134 disp(sprintf(' functionname: %s', obj.functionname));135 if ~isempty( obj.list),136 disp(sprintf(' list: (%ix%i)\n',size( obj.list,1),size(obj.list,2)));137 for i=1:size( obj.list,1),138 if ischar( obj.list{i,2}),139 disp(sprintf(' field: %-10s value: ''%s''', obj.list{i,1},obj.list{i,2}));140 elseif isnumeric( obj.list{i,2}) & length(obj.list{i,2})==1,141 disp(sprintf(' field: %-10s value: %g', obj.list{i,1},obj.list{i,2}));142 elseif isnumeric( obj.list{i,2}) & length(obj.list{i,2})==2,143 disp(sprintf(' field: %-10s value: [%g %g]', obj.list{i,1},obj.list{i,2}));128 if ~self.list{i,3}, 129 disp(['WARNING: option ' self.list{i,1} ' was not used']) 130 end 131 end 132 end % }}} 133 function disp(self) % {{{ 134 disp(sprintf(' functionname: %s',self.functionname)); 135 if ~isempty(self.list), 136 disp(sprintf(' list: (%ix%i)\n',size(self.list,1),size(self.list,2))); 137 for i=1:size(self.list,1), 138 if ischar(self.list{i,2}), 139 disp(sprintf(' field: %-10s value: ''%s''',self.list{i,1},self.list{i,2})); 140 elseif isnumeric(self.list{i,2}) & length(self.list{i,2})==1, 141 disp(sprintf(' field: %-10s value: %g',self.list{i,1},self.list{i,2})); 142 elseif isnumeric(self.list{i,2}) & length(self.list{i,2})==2, 143 disp(sprintf(' field: %-10s value: [%g %g]',self.list{i,1},self.list{i,2})); 144 144 else 145 disp(sprintf(' field: %-10s value: (%ix%i)', obj.list{i,1},size(obj.list{i,2},1),size(obj.list{i,2},2)));145 disp(sprintf(' field: %-10s value: (%ix%i)',self.list{i,1},size(self.list{i,2},1),size(self.list{i,2},2))); 146 146 end 147 147 end … … 150 150 end 151 151 end % }}} 152 function bool = exist( obj,field) % {{{152 function bool = exist(self,field) % {{{ 153 153 %EXIST - check if the option exists 154 154 … … 162 162 163 163 %Recover option 164 pos=find(strcmpi(field, obj.list(:,1)));164 pos=find(strcmpi(field,self.list(:,1))); 165 165 if ~isempty(pos), 166 166 bool=true; 167 obj.list{pos,3} = true; %It is a default so user will not be notified if not used167 self.list{pos,3} = true; %It is a default so user will not be notified if not used 168 168 else 169 169 bool=false; 170 170 end 171 171 end % }}} 172 function num = fieldoccurrences( obj,field), % {{{172 function num = fieldoccurrences(self,field), % {{{ 173 173 %FIELDOCCURRENCES - get number of occurrence of a field 174 174 … … 179 179 180 180 %get number of occurrence 181 num=sum(strcmpi(field, obj.list(:,1)));182 end % }}} 183 function value = getfieldvalue( obj,field,varargin), % {{{181 num=sum(strcmpi(field,self.list(:,1))); 182 end % }}} 183 function value = getfieldvalue(self,field,varargin), % {{{ 184 184 %GETOPTION - get the value of an option 185 185 % 186 186 % Usage: 187 % value=getfieldvalue( obj,field,varargin)187 % value=getfieldvalue(self,field,varargin) 188 188 % 189 189 % Find an option value from a field. A default option … … 205 205 206 206 %Recover option 207 pos=find(strcmpi( obj.list(:,1),field));207 pos=find(strcmpi(self.list(:,1),field)); 208 208 if ~isempty(pos), 209 value= obj.list{pos(1),2}; % ignore extra entry210 obj.list{pos(1),3}=true; % option used209 value=self.list{pos(1),2}; % ignore extra entry 210 self.list{pos(1),3}=true; % option used 211 211 return; 212 212 end … … 219 219 end 220 220 end % }}} 221 function obj = removefield(obj,field,warn)% {{{221 function self = removefield(self,field,warn)% {{{ 222 222 %REMOVEFIELD - delete a field in an option list 223 223 % 224 224 % Usage: 225 % obj=removefield(obj,field,warn)225 % self=removefield(self,field,warn) 226 226 % 227 227 % if warn==1 display an info message to warn user that … … 229 229 230 230 %check is field exist 231 if exist( obj,field),231 if exist(self,field), 232 232 233 233 %find where the field is located 234 lines=find(~strcmpi( obj.list(:,1),field));234 lines=find(~strcmpi(self.list(:,1),field)); 235 235 236 236 %remove duplicates from the options list 237 obj.list=obj.list(lines,:);237 self.list=self.list(lines,:); 238 238 239 239 %warn user if requested … … 243 243 end 244 244 end % }}} 245 function marshall( obj,fid,firstindex)% {{{246 247 for i=1:size( obj.list,1),248 name = obj.list{i,1};249 value = obj.list{i,2};245 function marshall(self,fid,firstindex)% {{{ 246 247 for i=1:size(self.list,1), 248 name = self.list{i,1}; 249 value = self.list{i,2}; 250 250 251 251 %Write option name -
issm/trunk-jpl/src/m/classes/private.m
r12943 r19040 12 12 end 13 13 methods 14 function obj= private(varargin) % {{{14 function self = private(varargin) % {{{ 15 15 switch nargin 16 16 case 0 17 obj=setdefaultparameters(obj);17 self=setdefaultparameters(self); 18 18 otherwise 19 19 error('constructor not supported'); 20 20 end 21 21 end % }}} 22 function obj = setdefaultparameters(obj) % {{{22 function self = setdefaultparameters(self) % {{{ 23 23 24 24 end % }}} 25 function md = checkconsistency( obj,md,solution,analyses) % {{{25 function md = checkconsistency(self,md,solution,analyses) % {{{ 26 26 27 27 end % }}} 28 function disp( obj) % {{{28 function disp(self) % {{{ 29 29 disp(sprintf(' private parameters: do not change')); 30 30 31 fielddisplay( obj,'isconsistent','is model self consistent');32 fielddisplay( obj,'runtimename','name of the run launched');33 fielddisplay( obj,'bamg','structure with mesh properties constructed if bamg is used to mesh the domain');34 fielddisplay( obj,'solution','type of solution launched');31 fielddisplay(self,'isconsistent','is model self consistent'); 32 fielddisplay(self,'runtimename','name of the run launched'); 33 fielddisplay(self,'bamg','structure with mesh properties constructed if bamg is used to mesh the domain'); 34 fielddisplay(self,'solution','type of solution launched'); 35 35 36 36 end % }}} -
issm/trunk-jpl/src/m/classes/qmu.m
r17720 r19040 24 24 end 25 25 methods 26 function createxml( obj,fid) % {{{26 function createxml(self,fid) % {{{ 27 27 fprintf(fid, '<!-- qmu -->\n'); 28 28 29 29 % qmu solution parameters 30 30 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="qmu parameters">','<section name="qmu" />'); 31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isdakota" type="',class( obj.isdakota),'" default="',convert2str(obj.isdakota),'">',' <section name="qmu" />',' <help> is qmu analysis activated? </help>',' </parameter>');32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="variables" type="',class( obj.variables),'" default="',convert2str(obj.variables),'">',' <section name="qmu" />',' <help> (arrays of each variable class) </help>',' </parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="responses" type="',class( obj.responses),'" default="',convert2str(obj.responses),'">',' <section name="qmu" />',' <help> (arrays of each response class) </help>',' </parameter>');31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isdakota" type="',class(self.isdakota),'" default="',convert2str(self.isdakota),'">',' <section name="qmu" />',' <help> is qmu analysis activated? </help>',' </parameter>'); 32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="variables" type="',class(self.variables),'" default="',convert2str(self.variables),'">',' <section name="qmu" />',' <help> (arrays of each variable class) </help>',' </parameter>'); 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="responses" type="',class(self.responses),'" default="',convert2str(self.responses),'">',' <section name="qmu" />',' <help> (arrays of each response class) </help>',' </parameter>'); 34 34 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofresponses" type="',class( obj.numberofresponses),'" default="',convert2str(obj.numberofresponses),'">',' <section name="qmu" />',' <help> number of responses </help>',' </parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="params" type="',class( obj.params),'" default="',convert2str(obj.params),'">',' <section name="qmu" />',' <help> (array of method-independent parameters) </help>',' </parameter>');37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="results" type="',class( obj.results),'" default="',convert2str(obj.results),'">',' <section name="qmu" />',' <help> (information from dakota files) </help>',' </parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofresponses" type="',class(self.numberofresponses),'" default="',convert2str(self.numberofresponses),'">',' <section name="qmu" />',' <help> number of responses </help>',' </parameter>'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="params" type="',class(self.params),'" default="',convert2str(self.params),'">',' <section name="qmu" />',' <help> (array of method-independent parameters) </help>',' </parameter>'); 37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="results" type="',class(self.results),'" default="',convert2str(self.results),'">',' <section name="qmu" />',' <help> (information from dakota files) </help>',' </parameter>'); 38 38 39 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="partition" type="',class( obj.partition),'" default="',convert2str(obj.partition),'">',' <section name="qmu" />',' <help> user provided mesh partitioning, defaults to metis if not specified </help>',' </parameter>');40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofpartitions" type="',class( obj.numberofpartitions),'" default="',convert2str(obj.numberofpartitions),'">',' <section name="qmu" />',' <help> number of partitions for semi-discrete qmu </help>',' </parameter>');41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="variabledescriptors" type="',class( obj.variabledescriptors),'" default="',convert2str(obj.variabledescriptors),'">',' <section name="qmu" />',' <help> </help>',' </parameter>');39 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="partition" type="',class(self.partition),'" default="',convert2str(self.partition),'">',' <section name="qmu" />',' <help> user provided mesh partitioning, defaults to metis if not specified </help>',' </parameter>'); 40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="numberofpartitions" type="',class(self.numberofpartitions),'" default="',convert2str(self.numberofpartitions),'">',' <section name="qmu" />',' <help> number of partitions for semi-discrete qmu </help>',' </parameter>'); 41 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="variabledescriptors" type="',class(self.variabledescriptors),'" default="',convert2str(self.variabledescriptors),'">',' <section name="qmu" />',' <help> </help>',' </parameter>'); 42 42 43 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="responsedescriptors" type="',class( obj.responsedescriptors),'" default="',convert2str(obj.responsedescriptors),'">',' <section name="qmu" />',' <help> use an enthalpy formulation to include temperate ice (default is 0) </help>',' </parameter>');44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="method" type="',class( obj.method),'" default="',convert2str(obj.method),'">',' <section name="qmu" />',' <help> array of dakota_method class </help>',' </parameter>');45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mass_flux_profile_directory" type="',class( obj.mass_flux_profile_directory),'" default="',convert2str(obj.mass_flux_profile_directory),'">',' <section name="qmu" />',' <help> directory for mass flux profiles </help>',' </parameter>');43 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="responsedescriptors" type="',class(self.responsedescriptors),'" default="',convert2str(self.responsedescriptors),'">',' <section name="qmu" />',' <help> use an enthalpy formulation to include temperate ice (default is 0) </help>',' </parameter>'); 44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="method" type="',class(self.method),'" default="',convert2str(self.method),'">',' <section name="qmu" />',' <help> array of dakota_method class </help>',' </parameter>'); 45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mass_flux_profile_directory" type="',class(self.mass_flux_profile_directory),'" default="',convert2str(self.mass_flux_profile_directory),'">',' <section name="qmu" />',' <help> directory for mass flux profiles </help>',' </parameter>'); 46 46 47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mass_flux_profiles" type="',class( obj.mass_flux_profiles),'" default="',convert2str(obj.mass_flux_profiles),'">',' <section name="qmu" />',' <help> </help>',' </parameter>');48 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mass_flux_segments" type="',class( obj.mass_flux_segments),'" default="',convert2str(obj.mass_flux_segments),'">',' <section name="qmu" />',' <help> </help>',' </parameter>');49 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="adjacency" type="',class( obj.adjacency),'" default="',convert2str(obj.adjacency),'">',' <section name="qmu" />',' <help> additional outputs requested </help>',' </parameter>');50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertex_weight" type="',class( obj.vertex_weight),'" default="',convert2str(obj.vertex_weight),'">',' <section name="qmu" />',' <help> weight applied to each mesh vertex </help>',' </parameter>');47 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mass_flux_profiles" type="',class(self.mass_flux_profiles),'" default="',convert2str(self.mass_flux_profiles),'">',' <section name="qmu" />',' <help> </help>',' </parameter>'); 48 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="mass_flux_segments" type="',class(self.mass_flux_segments),'" default="',convert2str(self.mass_flux_segments),'">',' <section name="qmu" />',' <help> </help>',' </parameter>'); 49 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="adjacency" type="',class(self.adjacency),'" default="',convert2str(self.adjacency),'">',' <section name="qmu" />',' <help> additional outputs requested </help>',' </parameter>'); 50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="vertex_weight" type="',class(self.vertex_weight),'" default="',convert2str(self.vertex_weight),'">',' <section name="qmu" />',' <help> weight applied to each mesh vertex </help>',' </parameter>'); 51 51 52 52 fprintf(fid,'%s\n%s\n','</frame>'); 53 53 54 54 end % }}} 55 function obj= qmu(varargin) % {{{55 function self = qmu(varargin) % {{{ 56 56 switch nargin 57 57 case 0 58 obj=setdefaultparameters(obj);58 self=setdefaultparameters(self); 59 59 otherwise 60 60 error('constructor not supported'); 61 61 end 62 62 end % }}} 63 function obj = setdefaultparameters(obj) % {{{63 function self = setdefaultparameters(self) % {{{ 64 64 65 65 end % }}} 66 function md = checkconsistency( obj,md,solution,analyses) % {{{66 function md = checkconsistency(self,md,solution,analyses) % {{{ 67 67 68 68 %Early return … … 90 90 end 91 91 end % }}} 92 function disp( obj) % {{{92 function disp(self) % {{{ 93 93 disp(sprintf(' qmu parameters:')); 94 94 95 fielddisplay( obj,'isdakota','is qmu analysis activated?');96 for i=1:numel( obj.variables)95 fielddisplay(self,'isdakota','is qmu analysis activated?'); 96 for i=1:numel(self.variables) 97 97 disp(sprintf(' variables%s: (arrays of each variable class)',... 98 string_dim( obj.variables,i)));99 fnames=fieldnames( obj.variables(i));98 string_dim(self.variables,i))); 99 fnames=fieldnames(self.variables(i)); 100 100 maxlen=0; 101 101 for j=1:numel(fnames) … … 105 105 for j=1:numel(fnames) 106 106 disp(sprintf([' %-' num2str(maxlen+1) 's: [%ix%i] ''%s'''],... 107 fnames{j},size( obj.variables.(fnames{j})),class(obj.variables.(fnames{j}))));107 fnames{j},size(self.variables.(fnames{j})),class(self.variables.(fnames{j})))); 108 108 end 109 109 end 110 for i=1:numel( obj.responses)110 for i=1:numel(self.responses) 111 111 disp(sprintf(' responses%s: (arrays of each response class)',... 112 string_dim( obj.responses,i)));113 fnames=fieldnames( obj.responses(i));112 string_dim(self.responses,i))); 113 fnames=fieldnames(self.responses(i)); 114 114 maxlen=0; 115 115 for j=1:numel(fnames) … … 119 119 for j=1:numel(fnames) 120 120 disp(sprintf([' %-' num2str(maxlen+1) 's: [%ix%i] ''%s'''],... 121 fnames{j},size( obj.responses.(fnames{j})),class(obj.responses.(fnames{j}))));121 fnames{j},size(self.responses.(fnames{j})),class(self.responses.(fnames{j})))); 122 122 end 123 123 end 124 fielddisplay( obj,'numberofresponses','number of responses')125 for i=1:numel( obj.method);126 if strcmp(class( obj.method(i)),'dakota_method')124 fielddisplay(self,'numberofresponses','number of responses') 125 for i=1:numel(self.method); 126 if strcmp(class(self.method(i)),'dakota_method') 127 127 disp(sprintf(' method%s : ''%s''',... 128 string_dim( obj.method,i),obj.method(i).method));128 string_dim(self.method,i),self.method(i).method)); 129 129 end 130 130 end 131 for i=1:numel( obj.params)131 for i=1:numel(self.params) 132 132 disp(sprintf(' params%s: (array of method-independent parameters)',... 133 string_dim( obj.params,i)));134 fnames=fieldnames( obj.params(i));133 string_dim(self.params,i))); 134 fnames=fieldnames(self.params(i)); 135 135 maxlen=0; 136 136 for j=1:numel(fnames) … … 140 140 for j=1:numel(fnames) 141 141 disp(sprintf([' %-' num2str(maxlen+1) 's: %s'],... 142 fnames{j},any2str( obj.params(i).(fnames{j}))));142 fnames{j},any2str(self.params(i).(fnames{j})))); 143 143 end 144 144 end 145 for i=1:numel( obj.results)145 for i=1:numel(self.results) 146 146 disp(sprintf(' results%s: (information from dakota files)',... 147 string_dim( obj.results,i)));148 fnames=fieldnames( obj.results(i));147 string_dim(self.results,i))); 148 fnames=fieldnames(self.results(i)); 149 149 maxlen=0; 150 150 for j=1:numel(fnames) … … 154 154 for j=1:numel(fnames) 155 155 disp(sprintf([' %-' num2str(maxlen+1) 's: [%ix%i] ''%s'''],... 156 fnames{j},size( obj.results.(fnames{j})),class(obj.results.(fnames{j}))));156 fnames{j},size(self.results.(fnames{j})),class(self.results.(fnames{j})))); 157 157 end 158 158 end 159 fielddisplay( obj,'partition','user provided mesh partitioning, defaults to metis if not specified')160 fielddisplay( obj,'numberofpartitions','number of partitions for semi-discrete qmu')161 fielddisplay( obj,'variabledescriptors','');162 fielddisplay( obj,'responsedescriptors','');163 fielddisplay( obj,'method','array of dakota_method class');164 fielddisplay( obj,'mass_flux_profile_directory','directory for mass flux profiles');165 fielddisplay( obj,'mass_flux_profiles','list of mass_flux profiles');166 fielddisplay( obj,'mass_flux_segments','');167 fielddisplay( obj,'adjacency','');168 fielddisplay( obj,'vertex_weight','weight applied to each mesh vertex');159 fielddisplay(self,'partition','user provided mesh partitioning, defaults to metis if not specified') 160 fielddisplay(self,'numberofpartitions','number of partitions for semi-discrete qmu') 161 fielddisplay(self,'variabledescriptors',''); 162 fielddisplay(self,'responsedescriptors',''); 163 fielddisplay(self,'method','array of dakota_method class'); 164 fielddisplay(self,'mass_flux_profile_directory','directory for mass flux profiles'); 165 fielddisplay(self,'mass_flux_profiles','list of mass_flux profiles'); 166 fielddisplay(self,'mass_flux_segments',''); 167 fielddisplay(self,'adjacency',''); 168 fielddisplay(self,'vertex_weight','weight applied to each mesh vertex'); 169 169 170 170 end % }}} 171 function marshall( obj,md,fid) % {{{172 WriteData(fid,'object', obj,'fieldname','isdakota','format','Boolean');173 if ~ obj.isdakota,171 function marshall(self,md,fid) % {{{ 172 WriteData(fid,'object',self,'fieldname','isdakota','format','Boolean'); 173 if ~self.isdakota, 174 174 WriteData(fid,'data',false,'enum',QmuMassFluxSegmentsPresentEnum,'format','Boolean'); 175 175 return; 176 176 end 177 WriteData(fid,'object', obj,'fieldname','partition','format','DoubleMat','mattype',2);178 WriteData(fid,'object', obj,'fieldname','numberofpartitions','format','Integer');179 WriteData(fid,'object', obj,'fieldname','numberofresponses','format','Integer');180 WriteData(fid,'object', obj,'fieldname','variabledescriptors','format','StringArray');181 WriteData(fid,'object', obj,'fieldname','responsedescriptors','format','StringArray');182 if ~isempty( obj.mass_flux_segments),183 WriteData(fid,'data', obj.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray');177 WriteData(fid,'object',self,'fieldname','partition','format','DoubleMat','mattype',2); 178 WriteData(fid,'object',self,'fieldname','numberofpartitions','format','Integer'); 179 WriteData(fid,'object',self,'fieldname','numberofresponses','format','Integer'); 180 WriteData(fid,'object',self,'fieldname','variabledescriptors','format','StringArray'); 181 WriteData(fid,'object',self,'fieldname','responsedescriptors','format','StringArray'); 182 if ~isempty(self.mass_flux_segments), 183 WriteData(fid,'data',self.mass_flux_segments,'enum',MassFluxSegmentsEnum,'format','MatArray'); 184 184 flag=true; 185 185 else -
issm/trunk-jpl/src/m/classes/radaroverlay.m
r14640 r19040 11 11 end 12 12 methods 13 function obj= radaroverlay(varargin) % {{{13 function self = radaroverlay(varargin) % {{{ 14 14 switch nargin 15 15 case 0 16 obj=setdefaultparameters(obj);16 self=setdefaultparameters(self); 17 17 otherwise 18 18 error('constructor not supported'); 19 19 end 20 20 end % }}} 21 function obj = setdefaultparameters(obj) % {{{21 function self = setdefaultparameters(self) % {{{ 22 22 23 23 end % }}} 24 function disp( obj) % {{{24 function disp(self) % {{{ 25 25 disp(sprintf(' radaroverlay parameters:')); 26 26 27 fielddisplay( obj,'pwr','radar power image (matrix)');28 fielddisplay( obj,'x','corresponding x coordinates [m]');29 fielddisplay( obj,'y','corresponding y coordinates [m]');27 fielddisplay(self,'pwr','radar power image (matrix)'); 28 fielddisplay(self,'x','corresponding x coordinates [m]'); 29 fielddisplay(self,'y','corresponding y coordinates [m]'); 30 30 31 31 end % }}} -
issm/trunk-jpl/src/m/classes/rifts.m
r17720 r19040 10 10 end 11 11 methods 12 function createxml( obj,fid) % {{{12 function createxml(self,fid) % {{{ 13 13 fprintf(fid, '\n\n'); 14 14 fprintf(fid, '%s\n', '<!-- rifts -->'); 15 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="riftstruct" type="', class( obj.riftstruct),'" default="', obj.riftstruct,'">', ' <section name="rifts" />',' <help> structure containing all rift information (vertices coordinates, segments, type of melange, ...) </help>','</parameter>');16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="riftproperties" type="', class( obj.riftproperties),'" default="', obj.riftproperties,'">', ' <section name="rifts" />',' <help> N/A </help>','</parameter>');15 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="riftstruct" type="', class(self.riftstruct),'" default="', self.riftstruct,'">', ' <section name="rifts" />',' <help> structure containing all rift information (vertices coordinates, segments, type of melange, ...) </help>','</parameter>'); 16 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="riftproperties" type="', class(self.riftproperties),'" default="', self.riftproperties,'">', ' <section name="rifts" />',' <help> N/A </help>','</parameter>'); 17 17 18 18 end % }}} 19 function obj= rifts(varargin) % {{{19 function self = rifts(varargin) % {{{ 20 20 switch nargin 21 21 case 0 22 obj=setdefaultparameters(obj);22 self=setdefaultparameters(self); 23 23 otherwise 24 24 error('constructor not supported'); 25 25 end 26 26 end % }}} 27 function obj = setdefaultparameters(obj) % {{{27 function self = setdefaultparameters(self) % {{{ 28 28 29 29 end % }}} 30 function md = checkconsistency( obj,md,solution,analyses) % {{{31 if isempty( obj.riftstruct) | isnans(obj.riftstruct),30 function md = checkconsistency(self,md,solution,analyses) % {{{ 31 if isempty(self.riftstruct) | isnans(self.riftstruct), 32 32 numrifts=0; 33 33 else 34 numrifts=numel( obj.riftstruct);34 numrifts=numel(self.riftstruct); 35 35 end 36 36 if numrifts, … … 38 38 md = checkmessage(md,['models with rifts are only supported in 2d for now!']); 39 39 end 40 if ~isstruct( obj.riftstruct),40 if ~isstruct(self.riftstruct), 41 41 md = checkmessage(md,['rifts.riftstruct should be a structure!']); 42 42 end … … 49 49 end 50 50 else 51 if ~isnans( obj.riftstruct),51 if ~isnans(self.riftstruct), 52 52 md = checkmessage(md,['riftstruct should be NaN since numrifts is 0!']); 53 53 end 54 54 end 55 55 end % }}} 56 function disp( obj) % {{{56 function disp(self) % {{{ 57 57 disp(sprintf(' rifts parameters:')); 58 58 59 fielddisplay( obj,'riftstruct','structure containing all rift information (vertices coordinates, segments, type of melange, ...)');60 fielddisplay( obj,'riftproperties','');59 fielddisplay(self,'riftstruct','structure containing all rift information (vertices coordinates, segments, type of melange, ...)'); 60 fielddisplay(self,'riftproperties',''); 61 61 62 62 end % }}} 63 function marshall( obj,md,fid) % {{{63 function marshall(self,md,fid) % {{{ 64 64 65 65 %Process rift info 66 if isempty( obj.riftstruct) | isnans(obj.riftstruct),66 if isempty(self.riftstruct) | isnans(self.riftstruct), 67 67 numrifts=0; 68 68 else 69 numrifts=numel( obj.riftstruct);69 numrifts=numel(self.riftstruct); 70 70 end 71 71 numpairs=0; 72 72 for i=1:numrifts, 73 numpairs=numpairs+size( obj.riftstruct(i).penaltypairs,1);73 numpairs=numpairs+size(self.riftstruct(i).penaltypairs,1); 74 74 end 75 75 … … 78 78 count=1; 79 79 for i=1:numrifts, 80 numpairsforthisrift=size( obj.riftstruct(i).penaltypairs,1);81 data(count:count+numpairsforthisrift-1,1:7)= obj.riftstruct(i).penaltypairs;82 data(count:count+numpairsforthisrift-1,8)= obj.riftstruct(i).fill;83 data(count:count+numpairsforthisrift-1,9)= obj.riftstruct(i).friction;84 data(count:count+numpairsforthisrift-1,10)= obj.riftstruct(i).fraction;85 data(count:count+numpairsforthisrift-1,11)= obj.riftstruct(i).fractionincrement;86 data(count:count+numpairsforthisrift-1,12)= obj.riftstruct(i).state;80 numpairsforthisrift=size(self.riftstruct(i).penaltypairs,1); 81 data(count:count+numpairsforthisrift-1,1:7)=self.riftstruct(i).penaltypairs; 82 data(count:count+numpairsforthisrift-1,8)=self.riftstruct(i).fill; 83 data(count:count+numpairsforthisrift-1,9)=self.riftstruct(i).friction; 84 data(count:count+numpairsforthisrift-1,10)=self.riftstruct(i).fraction; 85 data(count:count+numpairsforthisrift-1,11)=self.riftstruct(i).fractionincrement; 86 data(count:count+numpairsforthisrift-1,12)=self.riftstruct(i).state; 87 87 count=count+numpairsforthisrift; 88 88 end -
issm/trunk-jpl/src/m/classes/seaice.m
r18503 r19040 14 14 end 15 15 methods 16 function obj= seaice(varargin) % {{{16 function self = seaice(varargin) % {{{ 17 17 switch nargin 18 18 case 0 19 obj=setdefaultparameters(obj);19 self=setdefaultparameters(self); 20 20 return; 21 21 otherwise … … 23 23 end 24 24 end % }}} 25 function md = checkconsistency( obj,md,solution,analyses) % {{{25 function md = checkconsistency(self,md,solution,analyses) % {{{ 26 26 if solution~=SeaiceSolutionEnum(), return; end 27 27 md = checkfield(md,'fieldname','seaice.min_concentration','NaN',1,'>=',0,'numel',1); … … 32 32 md = checkfield(md,'fieldname','seaice.coriolis_factor','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 33 33 end % }}} 34 function obj = setdefaultparameters(obj) % {{{34 function self = setdefaultparameters(self) % {{{ 35 35 36 36 %Minimum ice concentration allowed in the simulation 37 obj.min_concentration=0.;37 self.min_concentration=0.; 38 38 39 39 %Minimum ice thickness allowed in the simulation 40 obj.min_thickness=0.;40 self.min_thickness=0.; 41 41 42 42 %Maxmimum ice thickness allowed in the simulation 43 obj.max_thickness=25.;43 self.max_thickness=25.; 44 44 45 45 end % }}} 46 function disp( obj) % {{{46 function disp(self) % {{{ 47 47 disp(sprintf(' seaice parameters:')); 48 fielddisplay( obj,'min_concentration','minimum ice concentration allowed in the simulation [no unit]');49 fielddisplay( obj,'min_thickness','minimum ice thickness allowed in the simulation [m]');50 fielddisplay( obj,'max_thickness','maximum ice thickness allowed in the simulation [m]');51 fielddisplay( obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/s]');52 fielddisplay( obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/s]');53 fielddisplay( obj,'coriolis_factor','factor applied to Coriolis forces (latitude dependent)');48 fielddisplay(self,'min_concentration','minimum ice concentration allowed in the simulation [no unit]'); 49 fielddisplay(self,'min_thickness','minimum ice thickness allowed in the simulation [m]'); 50 fielddisplay(self,'max_thickness','maximum ice thickness allowed in the simulation [m]'); 51 fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/s]'); 52 fielddisplay(self,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/s]'); 53 fielddisplay(self,'coriolis_factor','factor applied to Coriolis forces (latitude dependent)'); 54 54 end % }}} 55 function marshall( obj,md,fid) % {{{56 WriteData(fid,'object', obj,'fieldname','min_concentration','format','Double');57 WriteData(fid,'object', obj,'fieldname','min_thickness','format','Double');58 WriteData(fid,'object', obj,'fieldname','max_thickness','format','Double');59 WriteData(fid,'object', obj,'fieldname','spcvx','format','DoubleMat','mattype',1);60 WriteData(fid,'object', obj,'fieldname','spcvy','format','DoubleMat','mattype',1);61 WriteData(fid,'object', obj,'fieldname','coriolis_factor','format','DoubleMat','mattype',2);55 function marshall(self,md,fid) % {{{ 56 WriteData(fid,'object',self,'fieldname','min_concentration','format','Double'); 57 WriteData(fid,'object',self,'fieldname','min_thickness','format','Double'); 58 WriteData(fid,'object',self,'fieldname','max_thickness','format','Double'); 59 WriteData(fid,'object',self,'fieldname','spcvx','format','DoubleMat','mattype',1); 60 WriteData(fid,'object',self,'fieldname','spcvy','format','DoubleMat','mattype',1); 61 WriteData(fid,'object',self,'fieldname','coriolis_factor','format','DoubleMat','mattype',2); 62 62 end % }}} 63 63 end -
issm/trunk-jpl/src/m/classes/seaiceatm.m
r18492 r19040 14 14 end 15 15 methods 16 function obj= seaiceatm(varargin) % {{{16 function self = seaiceatm(varargin) % {{{ 17 17 switch nargin 18 18 case 0 19 obj=setdefaultparameters(obj);19 self=setdefaultparameters(self); 20 20 otherwise 21 21 error('constructor not supported'); 22 22 end 23 23 end % }}} 24 function obj = setdefaultparameters(obj) % {{{24 function self = setdefaultparameters(self) % {{{ 25 25 26 26 %air density (kg/m^3) 27 obj.rho_air=1.3;27 self.rho_air=1.3; 28 28 29 29 %By default, we apply the full stress 30 obj.air_coef = 1.;30 self.air_coef = 1.; 31 31 32 32 %drag coefficients (different from Hibler 0.0012) 33 obj.air_lin_drag_coef = 0.;34 obj.air_quad_drag_coef = 0.003;33 self.air_lin_drag_coef = 0.; 34 self.air_quad_drag_coef = 0.003; 35 35 36 36 end % }}} 37 function md = checkconsistency( obj,md,solution,analyses) % {{{37 function md = checkconsistency(self,md,solution,analyses) % {{{ 38 38 md = checkfield(md,'fieldname','surfaceforcings.rho_air','NaN',1,'>',0.,'numel',1); 39 39 md = checkfield(md,'fieldname','surfaceforcings.air_coef','NaN',1,'>=',0.,'<=',1,'numel',1); … … 43 43 md = checkfield(md,'fieldname','surfaceforcings.wind_vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 44 44 end % }}} 45 function disp( obj) % {{{45 function disp(self) % {{{ 46 46 disp(sprintf(' Atmospheric forcings for sea ice:')); 47 47 disp(sprintf('\n tau_a = air_coef*rho_air*(air_lin_drag_coef+air_quad_drag_coef*|v_wind|)*v_wind\n')); 48 fielddisplay( obj,'rho_air','air density [kg/m^3]');49 fielddisplay( obj,'air_coef','atmospheric stress spin up coefficient (between 0 and 1)');50 fielddisplay( obj,'air_lin_drag_coef','air linear drag coefficient (no unit)');51 fielddisplay( obj,'air_quad_drag_coef','air quadratic drag coefficient [s/m]');52 fielddisplay( obj,'wind_vx','wind speed x-component at 10 m elevation [m/s]');53 fielddisplay( obj,'wind_vy','wind speed y-component at 10 m elevation [m/s]');48 fielddisplay(self,'rho_air','air density [kg/m^3]'); 49 fielddisplay(self,'air_coef','atmospheric stress spin up coefficient (between 0 and 1)'); 50 fielddisplay(self,'air_lin_drag_coef','air linear drag coefficient (no unit)'); 51 fielddisplay(self,'air_quad_drag_coef','air quadratic drag coefficient [s/m]'); 52 fielddisplay(self,'wind_vx','wind speed x-component at 10 m elevation [m/s]'); 53 fielddisplay(self,'wind_vy','wind speed y-component at 10 m elevation [m/s]'); 54 54 end % }}} 55 function marshall( obj,md,fid) % {{{55 function marshall(self,md,fid) % {{{ 56 56 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SeaiceatmEnum(),'format','Integer'); 57 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','rho_air','format','Double');58 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','air_coef','format','Double');59 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','air_lin_drag_coef','format','Double');60 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','air_quad_drag_coef','format','Double');61 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','wind_vx','format','DoubleMat','mattype',1);62 WriteData(fid,'object', obj,'class','surfaceforcings','fieldname','wind_vy','format','DoubleMat','mattype',1);57 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','rho_air','format','Double'); 58 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','air_coef','format','Double'); 59 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','air_lin_drag_coef','format','Double'); 60 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','air_quad_drag_coef','format','Double'); 61 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','wind_vx','format','DoubleMat','mattype',1); 62 WriteData(fid,'object',self,'class','surfaceforcings','fieldname','wind_vy','format','DoubleMat','mattype',1); 63 63 end % }}} 64 64 end -
issm/trunk-jpl/src/m/classes/seaiceinitialization.m
r18503 r19040 20 20 end 21 21 methods 22 function obj= seaiceinitialization(varargin) % {{{22 function self = seaiceinitialization(varargin) % {{{ 23 23 switch nargin 24 24 case 0 … … 28 28 end 29 29 end % }}} 30 function md = checkconsistency( obj,md,solution,analyses) % {{{30 function md = checkconsistency(self,md,solution,analyses) % {{{ 31 31 md = checkfield(md,'fieldname','initialization.thickness','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); 32 32 md = checkfield(md,'fieldname','initialization.concentration','size',[md.mesh.numberofelements 1],'NaN',1,'>=',0); … … 42 42 md = checkfield(md,'fieldname','initialization.mesh_y','NaN',1,'size',[md.mesh.numberofvertices 1]); 43 43 end % }}} 44 function disp( obj) % {{{44 function disp(self) % {{{ 45 45 disp(sprintf(' initial field values:')); 46 fielddisplay( obj,'thickness','sea ice thickness [m]');47 fielddisplay( obj,'concentration','sea ice concentration (between 0 and 1)');48 fielddisplay( obj,'vx','x component of the ice velocity [m/s]');49 fielddisplay( obj,'vy','y component of the ice velocity [m/s]');50 fielddisplay( obj,'vx_coriolis','x component of the ice velocity used to calculate coriolis forces [m/s]');51 fielddisplay( obj,'vy_coriolis','y component of the ice velocity used to calculate coriolis forces [m/s]');52 fielddisplay( obj,'sigma_predictor_xx','Predictor for the xx component of the Cauchy stress tensor [Pa]');53 fielddisplay( obj,'sigma_predictor_yy','Predictor for the yy component of the Cauchy stress tensor [Pa]');54 fielddisplay( obj,'sigma_predictor_xy','Predictor for the xy component of the Cauchy stress tensor [Pa]');55 fielddisplay( obj,'damage','damage, between 0 (no damage) and 1 (fully damaged)');56 fielddisplay( obj,'mesh_x','x position of each vertex of the mesh using a Lagrangian approach');57 fielddisplay( obj,'mesh_y','y position of each vertex of the mesh using a Lagrangian approach');46 fielddisplay(self,'thickness','sea ice thickness [m]'); 47 fielddisplay(self,'concentration','sea ice concentration (between 0 and 1)'); 48 fielddisplay(self,'vx','x component of the ice velocity [m/s]'); 49 fielddisplay(self,'vy','y component of the ice velocity [m/s]'); 50 fielddisplay(self,'vx_coriolis','x component of the ice velocity used to calculate coriolis forces [m/s]'); 51 fielddisplay(self,'vy_coriolis','y component of the ice velocity used to calculate coriolis forces [m/s]'); 52 fielddisplay(self,'sigma_predictor_xx','Predictor for the xx component of the Cauchy stress tensor [Pa]'); 53 fielddisplay(self,'sigma_predictor_yy','Predictor for the yy component of the Cauchy stress tensor [Pa]'); 54 fielddisplay(self,'sigma_predictor_xy','Predictor for the xy component of the Cauchy stress tensor [Pa]'); 55 fielddisplay(self,'damage','damage, between 0 (no damage) and 1 (fully damaged)'); 56 fielddisplay(self,'mesh_x','x position of each vertex of the mesh using a Lagrangian approach'); 57 fielddisplay(self,'mesh_y','y position of each vertex of the mesh using a Lagrangian approach'); 58 58 end % }}} 59 function marshall( obj,md,fid) % {{{60 WriteData(fid,'data', obj.thickness,'format','DoubleMat','mattype',2,'enum',SeaiceThicknessEnum());61 WriteData(fid,'data', obj.concentration,'format','DoubleMat','mattype',2,'enum',SeaiceConcentrationEnum());62 WriteData(fid,'data', obj.vx,'format','DoubleMat','mattype',1,'enum',VxEnum);63 WriteData(fid,'data', obj.vy,'format','DoubleMat','mattype',1,'enum',VyEnum);64 WriteData(fid,'data', obj.vx_coriolis,'format','DoubleMat','mattype',1,'enum',VxStarEnum());65 WriteData(fid,'data', obj.vy_coriolis,'format','DoubleMat','mattype',1,'enum',VyStarEnum());66 WriteData(fid,'data', obj.sigma_predictor_xx,'format','DoubleMat','mattype',2,'enum',StressTensorPredictorxxEnum());67 WriteData(fid,'data', obj.sigma_predictor_yy,'format','DoubleMat','mattype',2,'enum',StressTensorPredictoryyEnum());68 WriteData(fid,'data', obj.sigma_predictor_xy,'format','DoubleMat','mattype',2,'enum',StressTensorPredictorxyEnum());69 WriteData(fid,'data', obj.damage,'format','DoubleMat','mattype',2,'enum',DamageEnum());70 WriteData(fid,'data', obj.mesh_x,'format','DoubleMat','mattype',1,'enum',MeshXEnum());71 WriteData(fid,'data', obj.mesh_y,'format','DoubleMat','mattype',1,'enum',MeshYEnum());59 function marshall(self,md,fid) % {{{ 60 WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',2,'enum',SeaiceThicknessEnum()); 61 WriteData(fid,'data',self.concentration,'format','DoubleMat','mattype',2,'enum',SeaiceConcentrationEnum()); 62 WriteData(fid,'data',self.vx,'format','DoubleMat','mattype',1,'enum',VxEnum); 63 WriteData(fid,'data',self.vy,'format','DoubleMat','mattype',1,'enum',VyEnum); 64 WriteData(fid,'data',self.vx_coriolis,'format','DoubleMat','mattype',1,'enum',VxStarEnum()); 65 WriteData(fid,'data',self.vy_coriolis,'format','DoubleMat','mattype',1,'enum',VyStarEnum()); 66 WriteData(fid,'data',self.sigma_predictor_xx,'format','DoubleMat','mattype',2,'enum',StressTensorPredictorxxEnum()); 67 WriteData(fid,'data',self.sigma_predictor_yy,'format','DoubleMat','mattype',2,'enum',StressTensorPredictoryyEnum()); 68 WriteData(fid,'data',self.sigma_predictor_xy,'format','DoubleMat','mattype',2,'enum',StressTensorPredictorxyEnum()); 69 WriteData(fid,'data',self.damage,'format','DoubleMat','mattype',2,'enum',DamageEnum()); 70 WriteData(fid,'data',self.mesh_x,'format','DoubleMat','mattype',1,'enum',MeshXEnum()); 71 WriteData(fid,'data',self.mesh_y,'format','DoubleMat','mattype',1,'enum',MeshYEnum()); 72 72 end % }}} 73 73 end -
issm/trunk-jpl/src/m/classes/seaiceocean.m
r18503 r19040 16 16 end 17 17 methods 18 function obj= seaiceocean(varargin) % {{{18 function self = seaiceocean(varargin) % {{{ 19 19 switch nargin 20 20 case 0 21 obj=setdefaultparameters(obj);21 self=setdefaultparameters(self); 22 22 otherwise 23 23 error('constructor not supported'); 24 24 end 25 25 end % }}} 26 function obj = setdefaultparameters(obj) % {{{26 function self = setdefaultparameters(self) % {{{ 27 27 28 28 %ocean density (kg/m^3) 29 obj.rho_ocean=1025.;29 self.rho_ocean=1025.; 30 30 31 31 %By default, we apply the full stress 32 obj.ocean_coef = 1.;32 self.ocean_coef = 1.; 33 33 34 34 %drag coefficients (different from Hibler 0.0055) 35 obj.ocean_lin_drag_coef = 0.;36 obj.ocean_quad_drag_coef = 0.004;35 self.ocean_lin_drag_coef = 0.; 36 self.ocean_quad_drag_coef = 0.004; 37 37 38 38 %Turning angle in degrees (McPhee 1998) 39 obj.ocean_turning_angle = deg2rad(25.);39 self.ocean_turning_angle = deg2rad(25.); 40 40 41 41 end % }}} 42 function md = checkconsistency( obj,md,solution,analyses) % {{{42 function md = checkconsistency(self,md,solution,analyses) % {{{ 43 43 md = checkfield(md,'fieldname','basalforcings.rho_ocean','NaN',1,'>',0.,'numel',1); 44 44 md = checkfield(md,'fieldname','basalforcings.ocean_coef','NaN',1,'>=',0.,'<=',1.,'numel',1); … … 50 50 md = checkfield(md,'fieldname','basalforcings.ocean_vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 51 51 end % }}} 52 function disp( obj) % {{{52 function disp(self) % {{{ 53 53 disp(sprintf(' Ocean forcings for sea ice:')); 54 54 %disp(sprintf('\n tau_b = ocean_coef*rho_ocean*...')); 55 fielddisplay( obj,'rho_ocean','ocean density [kg/m^3]');56 fielddisplay( obj,'ocean_coef','ocean stress spin up coefficient (between 0 and 1)');57 fielddisplay( obj,'ocean_lin_drag_coef','ocean linear drag coefficient [Pa/(m/s)]');58 fielddisplay( obj,'ocean_quad_drag_coef','ocean quadratic drag coefficient [Pa/(m/s)^2]');59 fielddisplay( obj,'ocean_turning_angle','ocean turning angle [rad]');60 fielddisplay( obj,'ocean_ssh','ocean sea surface height [m]');61 fielddisplay( obj,'ocean_vx','ocean speed x-component [m/s]');62 fielddisplay( obj,'ocean_vy','ocean speed y-component [m/s]');55 fielddisplay(self,'rho_ocean','ocean density [kg/m^3]'); 56 fielddisplay(self,'ocean_coef','ocean stress spin up coefficient (between 0 and 1)'); 57 fielddisplay(self,'ocean_lin_drag_coef','ocean linear drag coefficient [Pa/(m/s)]'); 58 fielddisplay(self,'ocean_quad_drag_coef','ocean quadratic drag coefficient [Pa/(m/s)^2]'); 59 fielddisplay(self,'ocean_turning_angle','ocean turning angle [rad]'); 60 fielddisplay(self,'ocean_ssh','ocean sea surface height [m]'); 61 fielddisplay(self,'ocean_vx','ocean speed x-component [m/s]'); 62 fielddisplay(self,'ocean_vy','ocean speed y-component [m/s]'); 63 63 end % }}} 64 function marshall( obj,md,fid) % {{{64 function marshall(self,md,fid) % {{{ 65 65 WriteData(fid,'enum',BasalforcingsEnum(),'data',SeaiceoceanEnum(),'format','Integer'); 66 WriteData(fid,'object', obj,'class','basalforcings','fieldname','rho_ocean','format','Double');67 WriteData(fid,'object', obj,'class','basalforcings','fieldname','ocean_coef','format','Double');68 WriteData(fid,'object', obj,'class','basalforcings','fieldname','ocean_lin_drag_coef','format','Double');69 WriteData(fid,'object', obj,'class','basalforcings','fieldname','ocean_quad_drag_coef','format','Double');70 WriteData(fid,'object', obj,'class','basalforcings','fieldname','ocean_turning_angle','format','Double');71 WriteData(fid,'object', obj,'class','basalforcings','fieldname','ocean_ssh','format','DoubleMat','mattype',1);72 WriteData(fid,'object', obj,'class','basalforcings','fieldname','ocean_vx','format','DoubleMat','mattype',1);73 WriteData(fid,'object', obj,'class','basalforcings','fieldname','ocean_vy','format','DoubleMat','mattype',1);66 WriteData(fid,'object',self,'class','basalforcings','fieldname','rho_ocean','format','Double'); 67 WriteData(fid,'object',self,'class','basalforcings','fieldname','ocean_coef','format','Double'); 68 WriteData(fid,'object',self,'class','basalforcings','fieldname','ocean_lin_drag_coef','format','Double'); 69 WriteData(fid,'object',self,'class','basalforcings','fieldname','ocean_quad_drag_coef','format','Double'); 70 WriteData(fid,'object',self,'class','basalforcings','fieldname','ocean_turning_angle','format','Double'); 71 WriteData(fid,'object',self,'class','basalforcings','fieldname','ocean_ssh','format','DoubleMat','mattype',1); 72 WriteData(fid,'object',self,'class','basalforcings','fieldname','ocean_vx','format','DoubleMat','mattype',1); 73 WriteData(fid,'object',self,'class','basalforcings','fieldname','ocean_vy','format','DoubleMat','mattype',1); 74 74 end % }}} 75 75 end -
issm/trunk-jpl/src/m/classes/settings.m
r17931 r19040 19 19 end 20 20 methods 21 function createxml( obj,fid) % {{{21 function createxml(self,fid) % {{{ 22 22 fprintf(fid, '\n\n'); 23 23 fprintf(fid, '%s\n', '<!-- settings -->'); 24 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="results_on_nodes" type="', class( obj.results_on_nodes),'" default="', convert2str(obj.results_on_nodes),'">', ' <section name="settings" />',' <help> results are output for all the nodes of each element </help>','</parameter>');25 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="io_gather" type="', class( obj.io_gather),'" default="', convert2str(obj.io_gather),'">', ' <section name="settings" />',' <help> I/O gathering strategy for result outputs (default 1) </help>','</parameter>');24 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="results_on_nodes" type="', class(self.results_on_nodes),'" default="', convert2str(self.results_on_nodes),'">', ' <section name="settings" />',' <help> results are output for all the nodes of each element </help>','</parameter>'); 25 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="io_gather" type="', class(self.io_gather),'" default="', convert2str(self.io_gather),'">', ' <section name="settings" />',' <help> I/O gathering strategy for result outputs (default 1) </help>','</parameter>'); 26 26 27 27 % lowmen drop-down (0 or 1) … … 30 30 fprintf(fid,'%s\n%s\n',' <option value="1" type="string" default="false"> </option>','</parameter>'); 31 31 32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="output_frequency" type="', class( obj.output_frequency),'" default="', convert2str(obj.output_frequency),'">', ' <section name="settings" />',' <help> frequency at which results are saved in all solutions with multiple time_steps </help>','</parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="waitonlock" type="', class( obj.waitonlock),'" default="', convert2str(obj.waitonlock),'">', ' <section name="settings" />',' <help> maximum number of minutes to wait for batch results (NaN to deactivate) </help>','</parameter>');34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_server" type="', class( obj.upload_server),'" default="', convert2str(obj.upload_server),'">', ' <section name="settings" />',' <help> server hostname where model should be uploaded </help>','</parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_path" type="', class( obj.upload_path),'" default="', convert2str(obj.upload_path),'">', ' <section name="settings" />',' <help> path on server where model should be uploaded </help>','</parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_login" type="', class( obj.upload_login),'" default="', convert2str(obj.upload_login),'">', ' <section name="settings" />',' <help> server login </help>','</parameter>');37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_port" type="', class( obj.upload_port),'" default="', convert2str(obj.upload_port),'">', ' <section name="settings" />',' <help> port login (default is 0) </help>','</parameter>');38 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="upload_filename" type="', class( obj.upload_filename),'" default="', convert2str(obj.upload_filename),'">', ' <section name="settings" />',' <help> unique id generated when uploading the file to server </help>','</parameter>');32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="output_frequency" type="', class(self.output_frequency),'" default="', convert2str(self.output_frequency),'">', ' <section name="settings" />',' <help> frequency at which results are saved in all solutions with multiple time_steps </help>','</parameter>'); 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="waitonlock" type="', class(self.waitonlock),'" default="', convert2str(self.waitonlock),'">', ' <section name="settings" />',' <help> maximum number of minutes to wait for batch results (NaN to deactivate) </help>','</parameter>'); 34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_server" type="', class(self.upload_server),'" default="', convert2str(self.upload_server),'">', ' <section name="settings" />',' <help> server hostname where model should be uploaded </help>','</parameter>'); 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_path" type="', class(self.upload_path),'" default="', convert2str(self.upload_path),'">', ' <section name="settings" />',' <help> path on server where model should be uploaded </help>','</parameter>'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_login" type="', class(self.upload_login),'" default="', convert2str(self.upload_login),'">', ' <section name="settings" />',' <help> server login </help>','</parameter>'); 37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="upload_port" type="', class(self.upload_port),'" default="', convert2str(self.upload_port),'">', ' <section name="settings" />',' <help> port login (default is 0) </help>','</parameter>'); 38 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n', '<parameter key ="upload_filename" type="', class(self.upload_filename),'" default="', convert2str(self.upload_filename),'">', ' <section name="settings" />',' <help> unique id generated when uploading the file to server </help>','</parameter>'); 39 39 40 40 end % }}} 41 function obj= settings(varargin) % {{{41 function self = settings(varargin) % {{{ 42 42 switch nargin 43 43 case 0 44 obj=setdefaultparameters(obj);44 self=setdefaultparameters(self); 45 45 otherwise 46 46 error('constructor not supported'); 47 47 end 48 48 end % }}} 49 function obj = setdefaultparameters(obj) % {{{49 function self = setdefaultparameters(self) % {{{ 50 50 51 51 %are we short in memory ? (0 faster but requires more memory) 52 obj.lowmem=0;52 self.lowmem=0; 53 53 54 54 %i/o: 55 obj.io_gather=1;55 self.io_gather=1; 56 56 57 57 %results frequency by default every step 58 obj.output_frequency=1;58 self.output_frequency=1; 59 59 60 60 %this option can be activated to load automatically the results … … 62 62 %N minutes that is generated once the solution has converged 63 63 %0 to deactivate 64 obj.waitonlock=Inf;64 self.waitonlock=Inf; 65 65 66 66 %upload options: … … 68 68 69 69 end % }}} 70 function md = checkconsistency( obj,md,solution,analyses) % {{{70 function md = checkconsistency(self,md,solution,analyses) % {{{ 71 71 72 72 md = checkfield(md,'fieldname','settings.results_on_nodes','numel',[1],'values',[0 1]); … … 77 77 78 78 end % }}} 79 function disp( obj) % {{{79 function disp(self) % {{{ 80 80 disp(sprintf(' general settings parameters:')); 81 81 82 fielddisplay( obj,'results_on_nodes','results are output for all the nodes of each element');83 fielddisplay( obj,'io_gather','I/O gathering strategy for result outputs (default 1)');84 fielddisplay( obj,'lowmem','is the memory limited ? (0 or 1)');85 fielddisplay( obj,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps');86 fielddisplay( obj,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)');87 fielddisplay( obj,'upload_server','server hostname where model should be uploaded');88 fielddisplay( obj,'upload_path','path on server where model should be uploaded');89 fielddisplay( obj,'upload_login','server login');90 fielddisplay( obj,'upload_port','port login (default is 0)');91 fielddisplay( obj,'upload_filename','unique id generated when uploading the file to server');82 fielddisplay(self,'results_on_nodes','results are output for all the nodes of each element'); 83 fielddisplay(self,'io_gather','I/O gathering strategy for result outputs (default 1)'); 84 fielddisplay(self,'lowmem','is the memory limited ? (0 or 1)'); 85 fielddisplay(self,'output_frequency','frequency at which results are saved in all solutions with multiple time_steps'); 86 fielddisplay(self,'waitonlock','maximum number of minutes to wait for batch results (NaN to deactivate)'); 87 fielddisplay(self,'upload_server','server hostname where model should be uploaded'); 88 fielddisplay(self,'upload_path','path on server where model should be uploaded'); 89 fielddisplay(self,'upload_login','server login'); 90 fielddisplay(self,'upload_port','port login (default is 0)'); 91 fielddisplay(self,'upload_filename','unique id generated when uploading the file to server'); 92 92 93 93 end % }}} 94 function marshall( obj,md,fid) % {{{95 WriteData(fid,'object', obj,'fieldname','results_on_nodes','format','Boolean');96 WriteData(fid,'object', obj,'fieldname','io_gather','format','Boolean');97 WriteData(fid,'object', obj,'fieldname','lowmem','format','Boolean');98 WriteData(fid,'object', obj,'fieldname','output_frequency','format','Integer');99 if obj.waitonlock>0,94 function marshall(self,md,fid) % {{{ 95 WriteData(fid,'object',self,'fieldname','results_on_nodes','format','Boolean'); 96 WriteData(fid,'object',self,'fieldname','io_gather','format','Boolean'); 97 WriteData(fid,'object',self,'fieldname','lowmem','format','Boolean'); 98 WriteData(fid,'object',self,'fieldname','output_frequency','format','Integer'); 99 if self.waitonlock>0, 100 100 WriteData(fid,'enum',SettingsWaitonlockEnum(),'data',true,'format','Boolean'); 101 101 else -
issm/trunk-jpl/src/m/classes/snowpack.m
r19027 r19040 105 105 end 106 106 methods 107 function obj= snowpack(varargin) % {{{107 function self = snowpack(varargin) % {{{ 108 108 switch nargin 109 109 case 0 110 obj=setdefaultparameters(obj);110 self=setdefaultparameters(self); 111 111 case 1 112 112 inputstruct=varargin{1}; … … 116 116 fieldname = list1{i}; 117 117 if ismember(fieldname,list2), 118 obj.(fieldname) = inputstruct.(fieldname);118 self.(fieldname) = inputstruct.(fieldname); 119 119 end 120 120 end … … 123 123 end 124 124 end % }}} 125 function obj = setdefaultparameters(obj) % {{{125 function self = setdefaultparameters(self) % {{{ 126 126 127 127 %snowpack: %{{{ 128 obj.snowpack_meas_tss = 1;129 obj.snowpack_enforce_measured_snow_heights = 0;130 obj.snowpack_sw_mode = 0;131 obj.snowpack_incoming_longwave = 1;132 obj.snowpack_height_of_wind_value = 12.;133 obj.snowpack_height_of_meteo_values = 12.;134 obj.snowpack_neutral = 0;135 obj.snowpack_roughness_length = 0.002;136 obj.snowpack_number_slopes = 1;137 obj.snowpack_snow_redistribution = 1;138 obj.snowpack_calculation_step_length = 15.0;139 obj.snowpack_change_bc = 0;140 obj.snowpack_thresh_change_bc = -1.0;141 obj.snowpack_snp_soil = 0;142 obj.snowpack_soil_flux = 0;143 obj.snowpack_geo_heat = 0.06;144 obj.snowpack_canopy = 0;128 self.snowpack_meas_tss = 1; 129 self.snowpack_enforce_measured_snow_heights = 0; 130 self.snowpack_sw_mode = 0; 131 self.snowpack_incoming_longwave = 1; 132 self.snowpack_height_of_wind_value = 12.; 133 self.snowpack_height_of_meteo_values = 12.; 134 self.snowpack_neutral = 0; 135 self.snowpack_roughness_length = 0.002; 136 self.snowpack_number_slopes = 1; 137 self.snowpack_snow_redistribution = 1; 138 self.snowpack_calculation_step_length = 15.0; 139 self.snowpack_change_bc = 0; 140 self.snowpack_thresh_change_bc = -1.0; 141 self.snowpack_snp_soil = 0; 142 self.snowpack_soil_flux = 0; 143 self.snowpack_geo_heat = 0.06; 144 self.snowpack_canopy = 0; 145 145 %}}} 146 146 %snowpackadvanced: %{{{ 147 obj.snowpackadvanced_variant = 'ANTARCTICA'; % use 320 kg m-3 for fixed density148 obj.snowpackadvanced_hn_density = 'EVENT';147 self.snowpackadvanced_variant = 'ANTARCTICA'; % use 320 kg m-3 for fixed density 148 self.snowpackadvanced_hn_density = 'EVENT'; 149 149 %}}} 150 150 %general: %{{{ 151 obj.general_pluginpath = '/usr/local/lib/meteoio/plugins/';152 obj.general_buff_chunk_size = 90;153 obj.general_buff_before = 1.5;151 self.general_pluginpath = '/usr/local/lib/meteoio/plugins/'; 152 self.general_buff_chunk_size = 90; 153 self.general_buff_before = 1.5; 154 154 %}}} 155 155 %input {{{ 156 obj.input_coordsys = 'ch1903';157 obj.input_coordparam = 'null';158 obj.input_time_zone = 8;159 obj.input_meteo = 'smet';160 obj.input_meteopath = './input';161 obj.input_station1 = 'domec.smet';162 obj.input_snowfile1 = 'domec.sno';156 self.input_coordsys = 'ch1903'; 157 self.input_coordparam = 'null'; 158 self.input_time_zone = 8; 159 self.input_meteo = 'smet'; 160 self.input_meteopath = './input'; 161 self.input_station1 = 'domec.smet'; 162 self.input_snowfile1 = 'domec.sno'; 163 163 %}}} 164 164 %output {{{ 165 obj.output_coordsys = 'ch1903';166 obj.output_coordparam = 'null';167 obj.output_time_zone = 8;168 obj.output_meteopath = './output';169 obj.output_experiment = 'smet';170 obj.output_ts_write = 1;171 obj.output_ts_start = 0.0;172 obj.output_ts_days_between = 0.04166667;173 obj.output_profile = 'ascii';174 obj.output_prof_write = 1;175 obj.output_prof_start = 0.0;176 obj.output_prof_days_between = 0.04166667;165 self.output_coordsys = 'ch1903'; 166 self.output_coordparam = 'null'; 167 self.output_time_zone = 8; 168 self.output_meteopath = './output'; 169 self.output_experiment = 'smet'; 170 self.output_ts_write = 1; 171 self.output_ts_start = 0.0; 172 self.output_ts_days_between = 0.04166667; 173 self.output_profile = 'ascii'; 174 self.output_prof_write = 1; 175 self.output_prof_start = 0.0; 176 self.output_prof_days_between = 0.04166667; 177 177 %}}} 178 178 %interpolations1d %{{{ 179 obj.interpolations1d_window_size = 439200; %that is 5 d and 2 h; 1 d = 86400180 obj.interpolations1d_hnw_resample = 'none';181 obj.interpolations1d_hs_resample = 'linear';182 obj.interpolations1d_tsg_resample = 'linear';183 obj.interpolations1d_rho_hn_resample = 'none';184 obj.interpolations1d_vw_resample = 'nearest_neighbour';185 obj.interpolations1d_vw_args = 'extrapolate';179 self.interpolations1d_window_size = 439200; %that is 5 d and 2 h; 1 d = 86400 180 self.interpolations1d_hnw_resample = 'none'; 181 self.interpolations1d_hs_resample = 'linear'; 182 self.interpolations1d_tsg_resample = 'linear'; 183 self.interpolations1d_rho_hn_resample = 'none'; 184 self.interpolations1d_vw_resample = 'nearest_neighbour'; 185 self.interpolations1d_vw_args = 'extrapolate'; 186 186 %}}} 187 187 %filters {{{ 188 obj.filters_ta_filter1 = 'min_max';189 obj.filters_ta_arg1 = [190 280];190 obj.filters_rh_filter1 = 'min_max';191 obj.filters_rh_arg1 = [0.01 1.2];192 obj.filters_rh_filter2 = 'min_max';193 obj.filters_rh_arg2 = {'soft' 0.01 1.0};194 obj.filters_iswr_filter1 = 'min_max';195 obj.filters_iswr_arg1 = [-10 1500];196 obj.filters_iswr_filter2 = 'min_max';197 obj.filters_iswr_arg2 = {'soft' 0 1500};198 obj.filters_rswr_filter1 = 'min_max';199 obj.filters_rswr_arg1 = [-10 1500];200 obj.filters_rswr_filter2 = 'min_max';201 obj.filters_rswr_arg2 = {'soft' 0 1500};188 self.filters_ta_filter1 = 'min_max'; 189 self.filters_ta_arg1 = [190 280]; 190 self.filters_rh_filter1 = 'min_max'; 191 self.filters_rh_arg1 = [0.01 1.2]; 192 self.filters_rh_filter2 = 'min_max'; 193 self.filters_rh_arg2 = {'soft' 0.01 1.0}; 194 self.filters_iswr_filter1 = 'min_max'; 195 self.filters_iswr_arg1 = [-10 1500]; 196 self.filters_iswr_filter2 = 'min_max'; 197 self.filters_iswr_arg2 = {'soft' 0 1500}; 198 self.filters_rswr_filter1 = 'min_max'; 199 self.filters_rswr_arg1 = [-10 1500]; 200 self.filters_rswr_filter2 = 'min_max'; 201 self.filters_rswr_arg2 = {'soft' 0 1500}; 202 202 203 203 %for ta between 190 and 280 k; 204 obj.filters_ilwr_filter1 = 'min_max';205 obj.filters_ilwr_arg1 = [30 355];206 obj.filters_ilwr_filter2 = 'min_max';207 obj.filters_ilwr_arg2 = {'soft' 35 350};208 obj.filters_tss_filter1 = 'min_max';209 obj.filters_tss_arg1 = [180 275];210 obj.filters_tsg_filter1 = 'min_max';211 obj.filters_tsg_arg1 = [200 275];212 obj.filters_vw_filter1 = 'min_max';213 obj.filters_vw_arg1 = [-2 70];214 obj.filters_vw_filter2 = 'min_max';215 obj.filters_vw_arg2 = {'soft' 0 50};204 self.filters_ilwr_filter1 = 'min_max'; 205 self.filters_ilwr_arg1 = [30 355]; 206 self.filters_ilwr_filter2 = 'min_max'; 207 self.filters_ilwr_arg2 = {'soft' 35 350}; 208 self.filters_tss_filter1 = 'min_max'; 209 self.filters_tss_arg1 = [180 275]; 210 self.filters_tsg_filter1 = 'min_max'; 211 self.filters_tsg_arg1 = [200 275]; 212 self.filters_vw_filter1 = 'min_max'; 213 self.filters_vw_arg1 = [-2 70]; 214 self.filters_vw_filter2 = 'min_max'; 215 self.filters_vw_arg2 = {'soft' 0 50}; 216 216 %}}} 217 217 218 218 end % }}} 219 function md = checkconsistency( obj,md,solution,analyses) % {{{219 function md = checkconsistency(self,md,solution,analyses) % {{{ 220 220 %snowpack: %{{{ 221 221 md=checkfield(md,'fieldname','snowpack.snowpack_meas_tss','values',[0 1]); … … 337 337 %}}} 338 338 end % }}} 339 function disp( obj) % {{{339 function disp(self) % {{{ 340 340 341 341 disp(sprintf(' Snowpack solution parameters:')); 342 342 disp(sprintf('\n %s','Snowpack parameters:')); % {{{ 343 fielddisplay( obj,'snowpack_meas_tss',{'A measured surface temperature is available and can be reliably ','used for various consistency tests (it needs to be set to true if enabling CHANGE_BC) (0 or 1)'});344 fielddisplay( obj,'snowpack_enforce_measured_snow_heights','Input mode by which a measurement of snow depth is used to drive the snow cover mass balance (0 or 1)');345 fielddisplay( obj,'snowpack_sw_mode',{'Define the shortwave radiation input:',...343 fielddisplay(self,'snowpack_meas_tss',{'A measured surface temperature is available and can be reliably ','used for various consistency tests (it needs to be set to true if enabling CHANGE_BC) (0 or 1)'}); 344 fielddisplay(self,'snowpack_enforce_measured_snow_heights','Input mode by which a measurement of snow depth is used to drive the snow cover mass balance (0 or 1)'); 345 fielddisplay(self,'snowpack_sw_mode',{'Define the shortwave radiation input:',... 346 346 '0 Incoming shortwave radiation is measured and albedo estimated by the model',... 347 347 '1 Reflected shortwave radiation is available as input and albedo is estimated by the model (IMIS standard)',... 348 348 '2 Incoming and reflected shortwave radiation are both measured and the albedo is estimated from both measurements subject to plausibility checks.'}); 349 fielddisplay( obj,'snowpack_incoming_longwave','Use the provided incoming long wave on the virtual slopes? (0 or 1)');350 fielddisplay( obj,'snowpack_height_of_wind_value',{'The instrument height (or model layer height) for wind input data; note that height ',...349 fielddisplay(self,'snowpack_incoming_longwave','Use the provided incoming long wave on the virtual slopes? (0 or 1)'); 350 fielddisplay(self,'snowpack_height_of_wind_value',{'The instrument height (or model layer height) for wind input data; note that height ',... 351 351 'is above ground for a standard SNOWPACK application but above surface (snow or ground) for Alpine3D applications '}); 352 fielddisplay( obj,'snowpack_height_of_meteo_values',{'The instrument height (or model layer height) for meteorological input data except for wind,',...352 fielddisplay(self,'snowpack_height_of_meteo_values',{'The instrument height (or model layer height) for meteorological input data except for wind,',... 353 353 'which may be at a different height; note that height is above ground for a standard SNOWPACK ',... 354 354 'application but above surface (snow or ground) for Alpine3D applications. '}); 355 fielddisplay( obj,'snowpack_neutral',{'Select the atmospheric stability correction model:',...355 fielddisplay(self,'snowpack_neutral',{'Select the atmospheric stability correction model:',... 356 356 '-1 use a simplified Richardson number stability correction',... 357 357 '0 assume standard Monin-Obukhov bulk formulation for surface exchange iteration with Paulson, Stearns and Weidner (can be used with BC_CHANGE=0)',... 358 358 '1 force Monin-Obukhov formulation to assume neutral conditions regardless of the actual stratification; it has been shown to work well in ',... 359 359 'complex terrain settings. It should be used with BC_CHANGE=1, i.e., Dirichlet /* but also is recommended with Neumann b.c., i.e., BC_CHANGE=0.'}); 360 fielddisplay( obj,'snowpack_roughness_length',{'Aerodynamic roughness length as a parameter for the Monin-Obukhov bulk formulation;',...360 fielddisplay(self,'snowpack_roughness_length',{'Aerodynamic roughness length as a parameter for the Monin-Obukhov bulk formulation;',... 361 361 'A typical value for complex terrain is 0.01 m and for snow covered flat sites 0.001 m. '}); 362 fielddisplay( obj,'snowpack_number_slopes',{'Based on meteorological input from a (flat field) automatic station or numerical weather model,',...362 fielddisplay(self,'snowpack_number_slopes',{'Based on meteorological input from a (flat field) automatic station or numerical weather model,',... 363 363 'up to 8 expositions can be calculated in addition to the flat field if the corresponding *.sno files are provided. For example,',... 364 364 'if you provide a flat field *.snow file (mandatory), which is named KLO3.sno and you want 4 slopes to be calculated the corresponding',... 365 365 'slope files should be named KLO21.sno, ...,KLO24.sno '}); 366 fielddisplay( obj,'snowpack_snow_redistribution',{'Specifies if redistribution of snow is allowed from (upwind) expositions to lee slopes.',...366 fielddisplay(self,'snowpack_snow_redistribution',{'Specifies if redistribution of snow is allowed from (upwind) expositions to lee slopes.',... 367 367 'In case just the flat field is calculated, snow erosion is enabled but only for "ENFORCE_MEASURED_SNOW_HEIGHTS".'}); 368 fielddisplay( obj,'snowpack_calculation_step_length',{'Internal time step (in minutes) used for model simulation. Please note that this MUST ',...368 fielddisplay(self,'snowpack_calculation_step_length',{'Internal time step (in minutes) used for model simulation. Please note that this MUST ',... 369 369 'be the same as HNW::accumulate (the latter being in seconds) if re-acumulating precipitation, otherwise it would lead to wrong results.'}); 370 fielddisplay( obj,'snowpack_change_bc',{'Use measured surface temperature as Dirichlet temperature BC for sub-freezing snowpacks and switch to ',...370 fielddisplay(self,'snowpack_change_bc',{'Use measured surface temperature as Dirichlet temperature BC for sub-freezing snowpacks and switch to ',... 371 371 'Neumann only for melting snowpacks. If set to false, assumes Neumann boundary conditions.'}); 372 fielddisplay( obj,'snowpack_thresh_change_bc','Threshold value (small number below freezing), which switches from Dirichlet to Neumann BCs if CHANGE_BC is selected');373 fielddisplay( obj,'snowpack_snp_soil','Soil layers as defined by the *.sno files are included in the simulation');374 fielddisplay( obj,'snowpack_soil_flux','Assume that the lower temperature boundary condition is given by GEO_HEAT (Neumann) and not by a measured temperature');375 fielddisplay( obj,'snowpack_geo_heat','Constant geothermal heat flux at great) depth W m-2): Lower flux boundary condition for temperature equation if BC is Neumann');376 fielddisplay( obj,'snowpack_canopy','Switch to tell the model that canopy is present (note that Canopy parameters should then be provided in the *.sno file)');372 fielddisplay(self,'snowpack_thresh_change_bc','Threshold value (small number below freezing), which switches from Dirichlet to Neumann BCs if CHANGE_BC is selected'); 373 fielddisplay(self,'snowpack_snp_soil','Soil layers as defined by the *.sno files are included in the simulation'); 374 fielddisplay(self,'snowpack_soil_flux','Assume that the lower temperature boundary condition is given by GEO_HEAT (Neumann) and not by a measured temperature'); 375 fielddisplay(self,'snowpack_geo_heat','Constant geothermal heat flux at great) depth W m-2): Lower flux boundary condition for temperature equation if BC is Neumann'); 376 fielddisplay(self,'snowpack_canopy','Switch to tell the model that canopy is present (note that Canopy parameters should then be provided in the *.sno file)'); 377 377 % }}} 378 378 disp(sprintf('\n %s','Snowpackadvanced parameters:')); % {{{ 379 fielddisplay( obj,'snowpackadvanced_variant','variant selection (includes a choice of specific models, DEFAULT, ANTARCTICA and JAPAN )'); % use 320 kg m-3 for fixed density380 fielddisplay( obj,'snowpackadvanced_hn_density',{'Fixed value to be used as new snow density if a constant density model is chosen, otherwise the choices are "PARAMETERIZED" "EVENT" "MEASURED"'});379 fielddisplay(self,'snowpackadvanced_variant','variant selection (includes a choice of specific models, DEFAULT, ANTARCTICA and JAPAN )'); % use 320 kg m-3 for fixed density 380 fielddisplay(self,'snowpackadvanced_hn_density',{'Fixed value to be used as new snow density if a constant density model is chosen, otherwise the choices are "PARAMETERIZED" "EVENT" "MEASURED"'}); 381 381 % }}} 382 382 disp(sprintf('\n %s','General parameters:')); % {{{ 383 fielddisplay( obj,'general_pluginpath','');384 fielddisplay( obj,'general_buff_chunk_size','Size in days of a chunk of data to read at once.');385 fielddisplay( obj,'general_buff_before','Alternate way of buffer centering: When rebuffering, the new date will be located BUFF_BEFORE days from the beginning of the buffer (therefore, it takes a value in days). ');383 fielddisplay(self,'general_pluginpath',''); 384 fielddisplay(self,'general_buff_chunk_size','Size in days of a chunk of data to read at once.'); 385 fielddisplay(self,'general_buff_before','Alternate way of buffer centering: When rebuffering, the new date will be located BUFF_BEFORE days from the beginning of the buffer (therefore, it takes a value in days). '); 386 386 % }}} 387 387 disp(sprintf('\n %s','Input parameter:')); % {{{ 388 fielddisplay( obj,'input_coordsys','coordinates in the Swiss Grid (http://geomatics.ladetto.ch/ch1903_wgs84_de.pdf). One of CH1903,UTM,UPS,PROJ4 or LOCAL');389 fielddisplay( obj,'input_coordparam',' ');390 fielddisplay( obj,'input_time_zone',' ');391 fielddisplay( obj,'input_meteo','plugin for METEO data (one of BORMA,COSMO,GEOTOP,GRIB,GS,IMIS,SMET,SNOWPACK');392 fielddisplay( obj,'input_meteopath','string containing the path to the xml files.');393 fielddisplay( obj,'input_station1','Meteorology file for station number #');394 fielddisplay( obj,'input_snowfile1','File name for the initial snow profile for station number #');388 fielddisplay(self,'input_coordsys','coordinates in the Swiss Grid (http://geomatics.ladetto.ch/ch1903_wgs84_de.pdf). One of CH1903,UTM,UPS,PROJ4 or LOCAL'); 389 fielddisplay(self,'input_coordparam',' '); 390 fielddisplay(self,'input_time_zone',' '); 391 fielddisplay(self,'input_meteo','plugin for METEO data (one of BORMA,COSMO,GEOTOP,GRIB,GS,IMIS,SMET,SNOWPACK'); 392 fielddisplay(self,'input_meteopath','string containing the path to the xml files.'); 393 fielddisplay(self,'input_station1','Meteorology file for station number #'); 394 fielddisplay(self,'input_snowfile1','File name for the initial snow profile for station number #'); 395 395 % }}} 396 396 disp(sprintf('\n %s','Output parameters:')); % {{{ 397 fielddisplay( obj,'output_coordsys','Coordinates in the Swiss Grid http://geomatics.ladetto.ch/ch1903_wgs84_de.pdf. One of CH1903,UTM,UPS,PROJ4 or LOCAL ');398 fielddisplay( obj,'output_coordparam','');399 fielddisplay( obj,'output_time_zone','');400 fielddisplay( obj,'output_meteopath','Path to the outputs (this path MUST exist, it won''t be created)');401 fielddisplay( obj,'output_experiment','Option to give an additional simulation specific output name to the run in addition to "STATION_NAME"');402 fielddisplay( obj,'output_ts_write','Write meteo data out? (0 or 1)');403 fielddisplay( obj,'output_ts_start','When to start writing meteo data out (offset, in days)');404 fielddisplay( obj,'output_ts_days_between','How often to write meteo data out (in days: 3 hours=.125, 1 hour=4.1666e-2)');405 fielddisplay( obj,'output_profile','How to write the profiles (default: ASCII, choice is ASCII,IMIS or ASCII IMIS)');397 fielddisplay(self,'output_coordsys','Coordinates in the Swiss Grid http://geomatics.ladetto.ch/ch1903_wgs84_de.pdf. One of CH1903,UTM,UPS,PROJ4 or LOCAL '); 398 fielddisplay(self,'output_coordparam',''); 399 fielddisplay(self,'output_time_zone',''); 400 fielddisplay(self,'output_meteopath','Path to the outputs (this path MUST exist, it won''t be created)'); 401 fielddisplay(self,'output_experiment','Option to give an additional simulation specific output name to the run in addition to "STATION_NAME"'); 402 fielddisplay(self,'output_ts_write','Write meteo data out? (0 or 1)'); 403 fielddisplay(self,'output_ts_start','When to start writing meteo data out (offset, in days)'); 404 fielddisplay(self,'output_ts_days_between','How often to write meteo data out (in days: 3 hours=.125, 1 hour=4.1666e-2)'); 405 fielddisplay(self,'output_profile','How to write the profiles (default: ASCII, choice is ASCII,IMIS or ASCII IMIS)'); 406 406 )'); 407 fielddisplay( obj,'output_prof_write','Write profile data out? (0 or 1) ');408 fielddisplay( obj,'output_prof_start','When to start writing profile data out (offset, in days)');409 fielddisplay( obj,'output_prof_days_between','How often to write profile data out (in days: 3 hours=.125, 1 hour=4.1666e-2)');407 fielddisplay(self,'output_prof_write','Write profile data out? (0 or 1) '); 408 fielddisplay(self,'output_prof_start','When to start writing profile data out (offset, in days)'); 409 fielddisplay(self,'output_prof_days_between','How often to write profile data out (in days: 3 hours=.125, 1 hour=4.1666e-2)'); 410 410 % }}} 411 411 disp(sprintf('\n %s','Interpolations1d parameters:')); % {{{ 412 fielddisplay( obj,'interpolations1d_window_size','Affects resampling: expresses (in seconds) how far a valid point can be searched for when re-interpolating a missing value');413 fielddisplay( obj,'interpolations1d_hnw_resample','NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR');412 fielddisplay(self,'interpolations1d_window_size','Affects resampling: expresses (in seconds) how far a valid point can be searched for when re-interpolating a missing value'); 413 fielddisplay(self,'interpolations1d_hnw_resample','NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR'); 414 414 '); 415 fielddisplay( obj,'interpolations1d_hs_resample','Mean average processing. The mean average filter returns the mean value of all values within a user given time window. (NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');416 fielddisplay( obj,'interpolations1d_tsg_resample','Mean average processing. The mean average filter returns the mean value of all values within a user given time window.(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');417 fielddisplay( obj,'interpolations1d_rho_hn_resample','(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');418 fielddisplay( obj,'interpolations1d_vw_resample','(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)');419 fielddisplay( obj,'interpolations1d_vw_args','default nothing, otherwise, ''extrapolcate''');415 fielddisplay(self,'interpolations1d_hs_resample','Mean average processing. The mean average filter returns the mean value of all values within a user given time window. (NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)'); 416 fielddisplay(self,'interpolations1d_tsg_resample','Mean average processing. The mean average filter returns the mean value of all values within a user given time window.(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)'); 417 fielddisplay(self,'interpolations1d_rho_hn_resample','(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)'); 418 fielddisplay(self,'interpolations1d_vw_resample','(NONE, NEAREST_NEIGHBOUR, ACCUMULATE or LINEAR)'); 419 fielddisplay(self,'interpolations1d_vw_args','default nothing, otherwise, ''extrapolcate'''); 420 420 % }}} 421 421 disp(sprintf('\n %s','Filters parameters:')); % {{{ 422 fielddisplay( obj,'filters_ta_filter1',' ');423 fielddisplay( obj,'filters_ta_arg1','');424 fielddisplay( obj,'filters_rh_filter1',' ');425 fielddisplay( obj,'filters_rh_arg1','');426 fielddisplay( obj,'filters_rh_filter2',' ');427 fielddisplay( obj,'filters_rh_arg2','');428 fielddisplay( obj,'filters_iswr_filter1',' ');429 fielddisplay( obj,'filters_iswr_arg1','');430 fielddisplay( obj,'filters_iswr_filter2',' ');431 fielddisplay( obj,'filters_iswr_arg2','');432 fielddisplay( obj,'filters_rswr_filter1',' ');433 fielddisplay( obj,'filters_rswr_arg1','');434 fielddisplay( obj,'filters_rswr_filter2',' ');435 fielddisplay( obj,'filters_rswr_arg2','');422 fielddisplay(self,'filters_ta_filter1',' '); 423 fielddisplay(self,'filters_ta_arg1',''); 424 fielddisplay(self,'filters_rh_filter1',' '); 425 fielddisplay(self,'filters_rh_arg1',''); 426 fielddisplay(self,'filters_rh_filter2',' '); 427 fielddisplay(self,'filters_rh_arg2',''); 428 fielddisplay(self,'filters_iswr_filter1',' '); 429 fielddisplay(self,'filters_iswr_arg1',''); 430 fielddisplay(self,'filters_iswr_filter2',' '); 431 fielddisplay(self,'filters_iswr_arg2',''); 432 fielddisplay(self,'filters_rswr_filter1',' '); 433 fielddisplay(self,'filters_rswr_arg1',''); 434 fielddisplay(self,'filters_rswr_filter2',' '); 435 fielddisplay(self,'filters_rswr_arg2',''); 436 436 437 437 %for ta between 190 and 280 k; 438 fielddisplay( obj,'filters_ilwr_filter1',' ');439 fielddisplay( obj,'filters_ilwr_arg1','');440 fielddisplay( obj,'filters_ilwr_filter2',' ');441 fielddisplay( obj,'filters_ilwr_arg2','');442 fielddisplay( obj,'filters_tss_filter1',' ');443 fielddisplay( obj,'filters_tss_arg1','');444 fielddisplay( obj,'filters_tsg_filter1',' ');445 fielddisplay( obj,'filters_tsg_arg1','');446 fielddisplay( obj,'filters_vw_filter1',' ');447 fielddisplay( obj,'filters_vw_arg1','');448 fielddisplay( obj,'filters_vw_filter2',' ');449 fielddisplay( obj,'filters_vw_arg2','');438 fielddisplay(self,'filters_ilwr_filter1',' '); 439 fielddisplay(self,'filters_ilwr_arg1',''); 440 fielddisplay(self,'filters_ilwr_filter2',' '); 441 fielddisplay(self,'filters_ilwr_arg2',''); 442 fielddisplay(self,'filters_tss_filter1',' '); 443 fielddisplay(self,'filters_tss_arg1',''); 444 fielddisplay(self,'filters_tsg_filter1',' '); 445 fielddisplay(self,'filters_tsg_arg1',''); 446 fielddisplay(self,'filters_vw_filter1',' '); 447 fielddisplay(self,'filters_vw_arg1',''); 448 fielddisplay(self,'filters_vw_filter2',' '); 449 fielddisplay(self,'filters_vw_arg2',''); 450 450 % }}} 451 451 452 452 end % }}} 453 function marshall( obj,md,fid) % {{{453 function marshall(self,md,fid) % {{{ 454 454 455 455 yts=365.0*24.0*3600.0; 456 456 457 WriteData(fid,'object', obj,'class','snowpack','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);458 WriteData(fid,'object', obj,'class','snowpack','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);459 WriteData(fid,'object', obj,'class','snowpack','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);460 WriteData(fid,'object', obj,'class','snowpack','fieldname','restol','format','Double');461 WriteData(fid,'object', obj,'class','snowpack','fieldname','reltol','format','Double');462 WriteData(fid,'object', obj,'class','snowpack','fieldname','abstol','format','Double');463 WriteData(fid,'object', obj,'class','snowpack','fieldname','isnewton','format','Integer');464 WriteData(fid,'object', obj,'class','snowpack','fieldname','FSreconditioning','format','Double');465 WriteData(fid,'object', obj,'class','snowpack','fieldname','viscosity_overshoot','format','Double');466 WriteData(fid,'object', obj,'class','snowpack','fieldname','maxiter','format','Integer');467 WriteData(fid,'object', obj,'class','snowpack','fieldname','shelf_dampening','format','Integer');468 WriteData(fid,'object', obj,'class','snowpack','fieldname','vertex_pairing','format','DoubleMat','mattype',3);469 WriteData(fid,'object', obj,'class','snowpack','fieldname','penalty_factor','format','Double');470 WriteData(fid,'object', obj,'class','snowpack','fieldname','rift_penalty_lock','format','Integer');471 WriteData(fid,'object', obj,'class','snowpack','fieldname','rift_penalty_threshold','format','Integer');472 WriteData(fid,'object', obj,'class','snowpack','fieldname','referential','format','DoubleMat','mattype',1);473 WriteData(fid,'object', obj,'class','snowpack','fieldname','requested_outputs','format','StringArray');474 WriteData(fid,'data', obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);475 WriteData(fid,'data', obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);476 WriteData(fid,'data', obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);457 WriteData(fid,'object',self,'class','snowpack','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 458 WriteData(fid,'object',self,'class','snowpack','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 459 WriteData(fid,'object',self,'class','snowpack','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 460 WriteData(fid,'object',self,'class','snowpack','fieldname','restol','format','Double'); 461 WriteData(fid,'object',self,'class','snowpack','fieldname','reltol','format','Double'); 462 WriteData(fid,'object',self,'class','snowpack','fieldname','abstol','format','Double'); 463 WriteData(fid,'object',self,'class','snowpack','fieldname','isnewton','format','Integer'); 464 WriteData(fid,'object',self,'class','snowpack','fieldname','FSreconditioning','format','Double'); 465 WriteData(fid,'object',self,'class','snowpack','fieldname','viscosity_overshoot','format','Double'); 466 WriteData(fid,'object',self,'class','snowpack','fieldname','maxiter','format','Integer'); 467 WriteData(fid,'object',self,'class','snowpack','fieldname','shelf_dampening','format','Integer'); 468 WriteData(fid,'object',self,'class','snowpack','fieldname','vertex_pairing','format','DoubleMat','mattype',3); 469 WriteData(fid,'object',self,'class','snowpack','fieldname','penalty_factor','format','Double'); 470 WriteData(fid,'object',self,'class','snowpack','fieldname','rift_penalty_lock','format','Integer'); 471 WriteData(fid,'object',self,'class','snowpack','fieldname','rift_penalty_threshold','format','Integer'); 472 WriteData(fid,'object',self,'class','snowpack','fieldname','referential','format','DoubleMat','mattype',1); 473 WriteData(fid,'object',self,'class','snowpack','fieldname','requested_outputs','format','StringArray'); 474 WriteData(fid,'data',self.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum); 475 WriteData(fid,'data',self.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum); 476 WriteData(fid,'data',self.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum); 477 477 end % }}} 478 478 end -
issm/trunk-jpl/src/m/classes/spheremesh.m
r17559 r19040 22 22 end 23 23 methods 24 function obj= spheremesh(varargin) % {{{24 function self = spheremesh(varargin) % {{{ 25 25 switch nargin 26 26 case 0 27 obj=setdefaultparameters(obj);27 self=setdefaultparameters(self); 28 28 otherwise 29 29 error('constructor not supported'); 30 30 end 31 31 end % }}} 32 function obj = setdefaultparameters(obj) % {{{32 function self = setdefaultparameters(self) % {{{ 33 33 34 34 %the connectivity is the avergaded number of nodes linked to a … … 37 37 %give a good memory/time ration. This value can be checked in 38 38 %trunk/test/Miscellaneous/runme.m 39 obj.average_vertex_connectivity=25;39 self.average_vertex_connectivity=25; 40 40 end % }}} 41 function md = checkconsistency( obj,md,solution,analyses) % {{{41 function md = checkconsistency(self,md,solution,analyses) % {{{ 42 42 43 43 md = checkfield(md,'fieldname','spheremesh.x','NaN',1,'size',[md.spheremesh.numberofvertices 1]); … … 57 57 md = checkfield(md,'fieldname','spheremesh.elementconnectivity','size',[md.spheremesh.numberofelements 3],'NaN',1); 58 58 end % }}} 59 function disp( obj) % {{{59 function disp(self) % {{{ 60 60 disp(sprintf(' Mesh:')); 61 61 62 62 disp(sprintf('\n Elements and vertices:')); 63 fielddisplay( obj,'numberofelements','number of elements');64 fielddisplay( obj,'numberofvertices','number of vertices');65 fielddisplay( obj,'elements','vertex indices of the mesh elements');66 fielddisplay( obj,'x','vertices x coordinate [m]');67 fielddisplay( obj,'y','vertices y coordinate [m]');68 fielddisplay( obj,'z','vertices z coordinate [m]');69 fielddisplay( obj,'r','vertices r coordinate [m]');70 fielddisplay( obj,'theta','vertices theta coordinate [degrees]');71 fielddisplay( obj,'phi','vertices phi coordinate [degrees]');63 fielddisplay(self,'numberofelements','number of elements'); 64 fielddisplay(self,'numberofvertices','number of vertices'); 65 fielddisplay(self,'elements','vertex indices of the mesh elements'); 66 fielddisplay(self,'x','vertices x coordinate [m]'); 67 fielddisplay(self,'y','vertices y coordinate [m]'); 68 fielddisplay(self,'z','vertices z coordinate [m]'); 69 fielddisplay(self,'r','vertices r coordinate [m]'); 70 fielddisplay(self,'theta','vertices theta coordinate [degrees]'); 71 fielddisplay(self,'phi','vertices phi coordinate [degrees]'); 72 72 73 73 disp(sprintf('\n Properties:')); 74 fielddisplay( obj,'numberoflayers','number of extrusion layers');74 fielddisplay(self,'numberoflayers','number of extrusion layers'); 75 75 76 fielddisplay( obj,'vertexconnectivity','list of vertices connected to vertex_i');77 fielddisplay( obj,'elementconnectivity','list of vertices connected to element_i');78 fielddisplay( obj,'average_vertex_connectivity','average number of vertices connected to one vertex');76 fielddisplay(self,'vertexconnectivity','list of vertices connected to vertex_i'); 77 fielddisplay(self,'elementconnectivity','list of vertices connected to element_i'); 78 fielddisplay(self,'average_vertex_connectivity','average number of vertices connected to one vertex'); 79 79 80 80 end % }}} 81 function marshall( obj,md,fid) % {{{82 WriteData(fid,'object', obj,'fieldname','x','format','DoubleMat','mattype',1);83 WriteData(fid,'object', obj,'fieldname','y','format','DoubleMat','mattype',1);84 WriteData(fid,'object', obj,'fieldname','z','format','DoubleMat','mattype',1);85 WriteData(fid,'object', obj,'fieldname','r','format','DoubleMat','mattype',1);86 WriteData(fid,'object', obj,'fieldname','theta','format','DoubleMat','mattype',1);87 WriteData(fid,'object', obj,'fieldname','phi','format','DoubleMat','mattype',1);88 WriteData(fid,'object', obj,'fieldname','elements','format','DoubleMat','mattype',2);89 WriteData(fid,'object', obj,'fieldname','numberoflayers','format','Integer');90 WriteData(fid,'object', obj,'fieldname','numberofelements','format','Integer');91 WriteData(fid,'object', obj,'fieldname','numberofvertices','format','Integer');92 WriteData(fid,'object', obj,'fieldname','elementconnectivity','format','DoubleMat','mattype',3);93 WriteData(fid,'object', obj,'fieldname','average_vertex_connectivity','format','Integer');81 function marshall(self,md,fid) % {{{ 82 WriteData(fid,'object',self,'fieldname','x','format','DoubleMat','mattype',1); 83 WriteData(fid,'object',self,'fieldname','y','format','DoubleMat','mattype',1); 84 WriteData(fid,'object',self,'fieldname','z','format','DoubleMat','mattype',1); 85 WriteData(fid,'object',self,'fieldname','r','format','DoubleMat','mattype',1); 86 WriteData(fid,'object',self,'fieldname','theta','format','DoubleMat','mattype',1); 87 WriteData(fid,'object',self,'fieldname','phi','format','DoubleMat','mattype',1); 88 WriteData(fid,'object',self,'fieldname','elements','format','DoubleMat','mattype',2); 89 WriteData(fid,'object',self,'fieldname','numberoflayers','format','Integer'); 90 WriteData(fid,'object',self,'fieldname','numberofelements','format','Integer'); 91 WriteData(fid,'object',self,'fieldname','numberofvertices','format','Integer'); 92 WriteData(fid,'object',self,'fieldname','elementconnectivity','format','DoubleMat','mattype',3); 93 WriteData(fid,'object',self,'fieldname','average_vertex_connectivity','format','Integer'); 94 94 end % }}} 95 95 end -
issm/trunk-jpl/src/m/classes/steadystate.m
r17720 r19040 11 11 end 12 12 methods 13 function createxml( obj,fid) % {{{13 function createxml(self,fid) % {{{ 14 14 fprintf(fid, '<!-- steadystate -->\n'); 15 15 16 16 % steadystate solution parameters 17 17 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="steadystate solution parameters">','<section name="steadystate" />'); 18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="reltol" type="',class( obj.reltol),'" default="',convert2str(obj.reltol),'">',' <section name="steadystate" />',' <help> relative tolerance criterion [K] </help>',' </parameter>');19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="maxiter" type="',class( obj.maxiter),'" default="',convert2str(obj.maxiter),'">',' <section name="steadystate" />',' <help> maximum number of iterations </help>',' </parameter>');20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="requested_outputs" type="',class( obj.requested_outputs),'" default="',convert2str(obj.requested_outputs),'">',' <section name="steadystate" />',' <help> additional requested outputs </help>',' </parameter>');18 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="reltol" type="',class(self.reltol),'" default="',convert2str(self.reltol),'">',' <section name="steadystate" />',' <help> relative tolerance criterion [K] </help>',' </parameter>'); 19 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="maxiter" type="',class(self.maxiter),'" default="',convert2str(self.maxiter),'">',' <section name="steadystate" />',' <help> maximum number of iterations </help>',' </parameter>'); 20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="requested_outputs" type="',class(self.requested_outputs),'" default="',convert2str(self.requested_outputs),'">',' <section name="steadystate" />',' <help> additional requested outputs </help>',' </parameter>'); 21 21 fprintf(fid,'%s\n%s\n','</frame>'); 22 22 23 23 end % }}} 24 function obj= steadystate(varargin) % {{{24 function self = steadystate(varargin) % {{{ 25 25 switch nargin 26 26 case 0 27 obj=setdefaultparameters(obj);27 self=setdefaultparameters(self); 28 28 otherwise 29 29 error('constructor not supported'); 30 30 end 31 31 end % }}} 32 function obj = setdefaultparameters(obj) % {{{32 function self = setdefaultparameters(self) % {{{ 33 33 %maximum of steady state iterations 34 obj.maxiter=100;34 self.maxiter=100; 35 35 36 36 %Relative tolerance for the steadystate convertgence 37 obj.reltol=0.01;37 self.reltol=0.01; 38 38 39 39 %default output 40 obj.requested_outputs={'default'};40 self.requested_outputs={'default'}; 41 41 end % }}} 42 42 function list=defaultoutputs(self,md) % {{{ … … 45 45 46 46 end % }}} 47 function md = checkconsistency( obj,md,solution,analyses) % {{{47 function md = checkconsistency(self,md,solution,analyses) % {{{ 48 48 49 49 %Early return … … 59 59 end 60 60 end % }}} 61 function disp( obj) % {{{61 function disp(self) % {{{ 62 62 disp(sprintf(' steadystate solution parameters:')); 63 63 64 fielddisplay( obj,'reltol','relative tolerance criterion');65 fielddisplay( obj,'maxiter','maximum number of iterations');66 fielddisplay( obj,'requested_outputs','additional requested outputs');64 fielddisplay(self,'reltol','relative tolerance criterion'); 65 fielddisplay(self,'maxiter','maximum number of iterations'); 66 fielddisplay(self,'requested_outputs','additional requested outputs'); 67 67 68 68 end % }}} 69 function marshall( obj,md,fid) % {{{70 WriteData(fid,'object', obj,'fieldname','reltol','format','Double');71 WriteData(fid,'object', obj,'fieldname','maxiter','format','Integer');69 function marshall(self,md,fid) % {{{ 70 WriteData(fid,'object',self,'fieldname','reltol','format','Double'); 71 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer'); 72 72 73 73 %process requested outputs 74 outputs = obj.requested_outputs;74 outputs = self.requested_outputs; 75 75 pos = find(ismember(outputs,'default')); 76 76 if ~isempty(pos), 77 77 outputs(pos) = []; %remove 'default' from outputs 78 outputs = [outputs defaultoutputs( obj,md)]; %add defaults78 outputs = [outputs defaultoutputs(self,md)]; %add defaults 79 79 end 80 80 WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum,'format','StringArray'); -
issm/trunk-jpl/src/m/classes/stressbalance.m
r19027 r19040 26 26 end 27 27 methods 28 function createxml( obj,fid) % {{{28 function createxml(self,fid) % {{{ 29 29 fprintf(fid, '\n\n'); 30 30 fprintf(fid, '%s\n', '<!-- StressBalance solution parameters: -->'); … … 32 32 % Convergence criteria 33 33 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Convergence criteria">','<section name="stressbalance" />'); 34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="restol" type="', class( obj.restol),'" default="', convert2str(obj.restol),'">', ' <section name="stressbalance" />',' <help> mechanical equilibrium residual convergence criterion </help>','</parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="reltol" type="', class( obj.reltol),'" default="', convert2str(obj.reltol),'">', ' <section name="stressbalance" />',' <help> velocity relative convergence criterion, NaN: not applied </help>','</parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="abstol" type="', class( obj.abstol),'" default="', convert2str(obj.abstol),'">', ' <section name="stressbalance" />',' <help> velocity absolute convergence criterion, NaN: not applied </help>','</parameter>');34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="restol" type="', class(self.restol),'" default="', convert2str(self.restol),'">', ' <section name="stressbalance" />',' <help> mechanical equilibrium residual convergence criterion </help>','</parameter>'); 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="reltol" type="', class(self.reltol),'" default="', convert2str(self.reltol),'">', ' <section name="stressbalance" />',' <help> velocity relative convergence criterion, NaN: not applied </help>','</parameter>'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="abstol" type="', class(self.abstol),'" default="', convert2str(self.abstol),'">', ' <section name="stressbalance" />',' <help> velocity absolute convergence criterion, NaN: not applied </help>','</parameter>'); 37 37 38 38 %is newton drop-down (0,1,or 2) … … 42 42 fprintf(fid,'%s\n%s\n',' <option value="2" type="string" default="false"> </option>','</parameter>'); 43 43 44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="maxiter" type="', class( obj.maxiter),'" default="', convert2str(obj.maxiter),'">', ' <section name="stressbalance" />',' <help> maximum number of nonlinear iterations </help>','</parameter>');45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="viscosity_overshoot" type="', class( obj.viscosity_overshoot),'" default="', convert2str(obj.viscosity_overshoot),'">', ' <section name="stressbalance" />',' <help> over-shooting constant new=new+C*(new-old) </help>','</parameter>');44 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="maxiter" type="', class(self.maxiter),'" default="', convert2str(self.maxiter),'">', ' <section name="stressbalance" />',' <help> maximum number of nonlinear iterations </help>','</parameter>'); 45 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="viscosity_overshoot" type="', class(self.viscosity_overshoot),'" default="', convert2str(self.viscosity_overshoot),'">', ' <section name="stressbalance" />',' <help> over-shooting constant new=new+C*(new-old) </help>','</parameter>'); 46 46 fprintf(fid,'%s\n%s\n','</frame>'); 47 47 48 48 % boundary conditions 49 49 fprintf(fid,'%s\n%s\n%s\n','<frame key="2" label="Boundary conditions">','<section name="stressbalance" />'); 50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcvx" type="', class( obj.spcvx),'" default="', convert2str(obj.spcvx),'">', ' <section name="stressbalance" />',' <help> x-axis velocity constraint (NaN means no constraint) [m/yr] </help>','</parameter>');51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcvy" type="', class( obj.spcvy),'" default="', convert2str(obj.spcvy),'">', ' <section name="stressbalance" />',' <help> y-axis velocity constraint (NaN means no constraint) [m/yr] </help>','</parameter>');52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcvz" type="', class( obj.spcvz),'" default="', convert2str(obj.spcvz),'">', ' <section name="stressbalance" />',' <help> z-axis velocity constraint (NaN means no constraint) [m/yr] </help>','</parameter>');50 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcvx" type="', class(self.spcvx),'" default="', convert2str(self.spcvx),'">', ' <section name="stressbalance" />',' <help> x-axis velocity constraint (NaN means no constraint) [m/yr] </help>','</parameter>'); 51 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcvy" type="', class(self.spcvy),'" default="', convert2str(self.spcvy),'">', ' <section name="stressbalance" />',' <help> y-axis velocity constraint (NaN means no constraint) [m/yr] </help>','</parameter>'); 52 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="spcvz" type="', class(self.spcvz),'" default="', convert2str(self.spcvz),'">', ' <section name="stressbalance" />',' <help> z-axis velocity constraint (NaN means no constraint) [m/yr] </help>','</parameter>'); 53 53 fprintf(fid,'%s\n%s\n','</frame>'); 54 54 55 55 % Rift options 56 56 fprintf(fid,'%s\n%s\n%s\n','<frame key="3" label="Rift options">','<section name="stressbalance" />'); 57 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="rift_penalty_threshold" type="', class( obj.rift_penalty_threshold),'" default="', convert2str(obj.rift_penalty_threshold),'">', ' <section name="stressbalance" />',' <help> threshold for instability of mechanical constraints </help>','</parameter>');58 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="rift_penalty_lock" type="', class( obj.rift_penalty_lock),'" default="', convert2str(obj.rift_penalty_lock),'">', ' <section name="stressbalance" />',' <help> number of iterations before rift penalties are locked </help>','</parameter>');57 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="rift_penalty_threshold" type="', class(self.rift_penalty_threshold),'" default="', convert2str(self.rift_penalty_threshold),'">', ' <section name="stressbalance" />',' <help> threshold for instability of mechanical constraints </help>','</parameter>'); 58 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="rift_penalty_lock" type="', class(self.rift_penalty_lock),'" default="', convert2str(self.rift_penalty_lock),'">', ' <section name="stressbalance" />',' <help> number of iterations before rift penalties are locked </help>','</parameter>'); 59 59 fprintf(fid,'%s\n%s\n','</frame>'); 60 60 61 61 %others 62 62 fprintf(fid,'%s\n%s\n%s\n','<frame key="4" label="Other">','<section name="stressbalance" />'); 63 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="shelf_dampening" type="', class( obj.shelf_dampening),'" default="', convert2str(obj.shelf_dampening),'">', ' <section name="stressbalance" />',' <help> use dampening for floating ice ? Only for FS model </help>','</parameter>');64 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="FSreconditioning" type="', class( obj.FSreconditioning),'" default="', convert2str(obj.FSreconditioning),'">', ' <section name="stressbalance" />',' <help> multiplier for incompressibility equation. Only for FS model </help>','</parameter>');65 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="referential" type="', class( obj.referential),'" default="', convert2str(obj.referential),'">', ' <section name="stressbalance" />',' <help> local referential </help>','</parameter>');66 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="loadingforce" type="', class( obj.loadingforce),'" default="', convert2str(obj.loadingforce),'">', ' <section name="stressbalance" />',' <help> loading force applied on each point [N/m^3] </help>','</parameter>');67 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="requested_outputs" type="', class( obj.requested_outputs),'" default="', convert2str(obj.requested_outputs),'">', ' <section name="stressbalance" />',' <help> additional outputs requested </help>','</parameter>');63 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="shelf_dampening" type="', class(self.shelf_dampening),'" default="', convert2str(self.shelf_dampening),'">', ' <section name="stressbalance" />',' <help> use dampening for floating ice ? Only for FS model </help>','</parameter>'); 64 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="FSreconditioning" type="', class(self.FSreconditioning),'" default="', convert2str(self.FSreconditioning),'">', ' <section name="stressbalance" />',' <help> multiplier for incompressibility equation. Only for FS model </help>','</parameter>'); 65 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="referential" type="', class(self.referential),'" default="', convert2str(self.referential),'">', ' <section name="stressbalance" />',' <help> local referential </help>','</parameter>'); 66 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="loadingforce" type="', class(self.loadingforce),'" default="', convert2str(self.loadingforce),'">', ' <section name="stressbalance" />',' <help> loading force applied on each point [N/m^3] </help>','</parameter>'); 67 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="requested_outputs" type="', class(self.requested_outputs),'" default="', convert2str(self.requested_outputs),'">', ' <section name="stressbalance" />',' <help> additional outputs requested </help>','</parameter>'); 68 68 69 69 70 70 fprintf(fid,'%s\n%s\n','</frame>'); 71 71 end % }}} 72 function obj= stressbalance(varargin) % {{{72 function self = stressbalance(varargin) % {{{ 73 73 switch nargin 74 74 case 0 75 obj=setdefaultparameters(obj);75 self=setdefaultparameters(self); 76 76 case 1 77 77 inputstruct=varargin{1}; … … 81 81 fieldname = list1{i}; 82 82 if ismember(fieldname,list2), 83 obj.(fieldname) = inputstruct.(fieldname);83 self.(fieldname) = inputstruct.(fieldname); 84 84 end 85 85 end … … 88 88 end 89 89 end % }}} 90 function obj = setdefaultparameters(obj) % {{{90 function self = setdefaultparameters(self) % {{{ 91 91 92 92 %maximum of non-linear iterations. 93 obj.maxiter=100;93 self.maxiter=100; 94 94 95 95 %Convergence criterion: absolute, relative and residual 96 obj.restol=10^-4;97 obj.reltol=0.01;98 obj.abstol=10;99 100 obj.FSreconditioning=10^13;101 obj.shelf_dampening=0;96 self.restol=10^-4; 97 self.reltol=0.01; 98 self.abstol=10; 99 100 self.FSreconditioning=10^13; 101 self.shelf_dampening=0; 102 102 103 103 %Penalty factor applied kappa=max(stiffness matrix)*10^penalty_factor 104 obj.penalty_factor=3;104 self.penalty_factor=3; 105 105 106 106 %coefficient to update the viscosity between each iteration of 107 107 %a stressbalance according to the following formula 108 108 %viscosity(n)=viscosity(n)+viscosity_overshoot(viscosity(n)-viscosity(n-1)) 109 obj.viscosity_overshoot=0;109 self.viscosity_overshoot=0; 110 110 111 111 %Stop the iterations of rift if below a threshold 112 obj.rift_penalty_threshold=0;112 self.rift_penalty_threshold=0; 113 113 114 114 %in some solutions, it might be needed to stop a run when only 115 115 %a few constraints remain unstable. For thermal computation, this 116 116 %parameter is often used. 117 obj.rift_penalty_lock=10;117 self.rift_penalty_lock=10; 118 118 119 119 %output default: 120 obj.requested_outputs={'default'};121 122 end % }}} 123 function md = checkconsistency( obj,md,solution,analyses) % {{{120 self.requested_outputs={'default'}; 121 122 end % }}} 123 function md = checkconsistency(self,md,solution,analyses) % {{{ 124 124 125 125 %Early return … … 175 175 176 176 end % }}} 177 function disp( obj) % {{{177 function disp(self) % {{{ 178 178 179 179 disp(sprintf(' StressBalance solution parameters:')); 180 180 181 181 disp(sprintf('\n %s','Convergence criteria:')); 182 fielddisplay( obj,'restol','mechanical equilibrium residual convergence criterion');183 fielddisplay( obj,'reltol','velocity relative convergence criterion, NaN: not applied');184 fielddisplay( obj,'abstol','velocity absolute convergence criterion, NaN: not applied');185 fielddisplay( obj,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid');186 fielddisplay( obj,'maxiter','maximum number of nonlinear iterations');187 fielddisplay( obj,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)');182 fielddisplay(self,'restol','mechanical equilibrium residual convergence criterion'); 183 fielddisplay(self,'reltol','velocity relative convergence criterion, NaN: not applied'); 184 fielddisplay(self,'abstol','velocity absolute convergence criterion, NaN: not applied'); 185 fielddisplay(self,'isnewton','0: Picard''s fixed point, 1: Newton''s method, 2: hybrid'); 186 fielddisplay(self,'maxiter','maximum number of nonlinear iterations'); 187 fielddisplay(self,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'); 188 188 189 189 disp(sprintf('\n %s','boundary conditions:')); 190 fielddisplay( obj,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]');191 fielddisplay( obj,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]');192 fielddisplay( obj,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]');190 fielddisplay(self,'spcvx','x-axis velocity constraint (NaN means no constraint) [m/yr]'); 191 fielddisplay(self,'spcvy','y-axis velocity constraint (NaN means no constraint) [m/yr]'); 192 fielddisplay(self,'spcvz','z-axis velocity constraint (NaN means no constraint) [m/yr]'); 193 193 194 194 disp(sprintf('\n %s','Rift options:')); 195 fielddisplay( obj,'rift_penalty_threshold','threshold for instability of mechanical constraints');196 fielddisplay( obj,'rift_penalty_lock','number of iterations before rift penalties are locked');195 fielddisplay(self,'rift_penalty_threshold','threshold for instability of mechanical constraints'); 196 fielddisplay(self,'rift_penalty_lock','number of iterations before rift penalties are locked'); 197 197 198 198 disp(sprintf('\n %s','Penalty options:')); 199 fielddisplay( obj,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset');200 fielddisplay( obj,'vertex_pairing','pairs of vertices that are penalized');199 fielddisplay(self,'penalty_factor','offset used by penalties: penalty = Kmax*10^offset'); 200 fielddisplay(self,'vertex_pairing','pairs of vertices that are penalized'); 201 201 202 202 disp(sprintf('\n %s','Other:')); 203 fielddisplay( obj,'shelf_dampening','use dampening for floating ice ? Only for FS model');204 fielddisplay( obj,'FSreconditioning','multiplier for incompressibility equation. Only for FS model');205 fielddisplay( obj,'referential','local referential');206 fielddisplay( obj,'loadingforce','loading force applied on each point [N/m^3]');207 fielddisplay( obj,'requested_outputs','additional outputs requested');208 209 end % }}} 210 function marshall( obj,md,fid) % {{{211 212 WriteData(fid,'object', obj,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3);203 fielddisplay(self,'shelf_dampening','use dampening for floating ice ? Only for FS model'); 204 fielddisplay(self,'FSreconditioning','multiplier for incompressibility equation. Only for FS model'); 205 fielddisplay(self,'referential','local referential'); 206 fielddisplay(self,'loadingforce','loading force applied on each point [N/m^3]'); 207 fielddisplay(self,'requested_outputs','additional outputs requested'); 208 209 end % }}} 210 function marshall(self,md,fid) % {{{ 211 212 WriteData(fid,'object',self,'class','stressbalance','fieldname','vertex_pairing','format','DoubleMat','mattype',3); 213 213 214 214 if md.private.solution==SeaiceSolutionEnum, … … 218 218 yts=365.0*24.0*3600.0; 219 219 220 WriteData(fid,'object', obj,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);221 WriteData(fid,'object', obj,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);222 WriteData(fid,'object', obj,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1);223 WriteData(fid,'object', obj,'class','stressbalance','fieldname','restol','format','Double');224 WriteData(fid,'object', obj,'class','stressbalance','fieldname','reltol','format','Double');225 WriteData(fid,'object', obj,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts);226 WriteData(fid,'object', obj,'class','stressbalance','fieldname','isnewton','format','Integer');227 WriteData(fid,'object', obj,'class','stressbalance','fieldname','FSreconditioning','format','Double');228 WriteData(fid,'object', obj,'class','stressbalance','fieldname','viscosity_overshoot','format','Double');229 WriteData(fid,'object', obj,'class','stressbalance','fieldname','maxiter','format','Integer');230 WriteData(fid,'object', obj,'class','stressbalance','fieldname','shelf_dampening','format','Integer');231 WriteData(fid,'object', obj,'class','stressbalance','fieldname','penalty_factor','format','Double');232 WriteData(fid,'object', obj,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer');233 WriteData(fid,'object', obj,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer');234 WriteData(fid,'object', obj,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1);235 236 WriteData(fid,'data', obj.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum);237 WriteData(fid,'data', obj.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum);238 WriteData(fid,'data', obj.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum);220 WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvx','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 221 WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvy','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 222 WriteData(fid,'object',self,'class','stressbalance','fieldname','spcvz','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1); 223 WriteData(fid,'object',self,'class','stressbalance','fieldname','restol','format','Double'); 224 WriteData(fid,'object',self,'class','stressbalance','fieldname','reltol','format','Double'); 225 WriteData(fid,'object',self,'class','stressbalance','fieldname','abstol','format','Double','scale',1./yts); 226 WriteData(fid,'object',self,'class','stressbalance','fieldname','isnewton','format','Integer'); 227 WriteData(fid,'object',self,'class','stressbalance','fieldname','FSreconditioning','format','Double'); 228 WriteData(fid,'object',self,'class','stressbalance','fieldname','viscosity_overshoot','format','Double'); 229 WriteData(fid,'object',self,'class','stressbalance','fieldname','maxiter','format','Integer'); 230 WriteData(fid,'object',self,'class','stressbalance','fieldname','shelf_dampening','format','Integer'); 231 WriteData(fid,'object',self,'class','stressbalance','fieldname','penalty_factor','format','Double'); 232 WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_lock','format','Integer'); 233 WriteData(fid,'object',self,'class','stressbalance','fieldname','rift_penalty_threshold','format','Integer'); 234 WriteData(fid,'object',self,'class','stressbalance','fieldname','referential','format','DoubleMat','mattype',1); 235 236 WriteData(fid,'data',self.loadingforce(:,1),'format','DoubleMat','mattype',1,'enum',LoadingforceXEnum); 237 WriteData(fid,'data',self.loadingforce(:,2),'format','DoubleMat','mattype',1,'enum',LoadingforceYEnum); 238 WriteData(fid,'data',self.loadingforce(:,3),'format','DoubleMat','mattype',1,'enum',LoadingforceZEnum); 239 239 240 240 %process requested outputs 241 outputs = obj.requested_outputs;241 outputs = self.requested_outputs; 242 242 pos = find(ismember(outputs,'default')); 243 243 if ~isempty(pos), 244 244 outputs(pos) = []; %remove 'default' from outputs 245 outputs = [outputs defaultoutputs( obj,md)]; %add defaults245 outputs = [outputs defaultoutputs(self,md)]; %add defaults 246 246 end 247 247 WriteData(fid,'data',outputs,'enum',StressbalanceRequestedOutputsEnum,'format','StringArray'); -
issm/trunk-jpl/src/m/classes/taoinversion.m
r18994 r19040 29 29 end 30 30 methods 31 function obj= taoinversion(varargin) % {{{31 function self = taoinversion(varargin) % {{{ 32 32 switch nargin 33 33 case 0 34 obj=setdefaultparameters(obj);34 self=setdefaultparameters(self); 35 35 case 1 36 obj=structtoobj(taoinversion(),varargin{1});36 self=structtoobj(taoinversion(),varargin{1}); 37 37 otherwise 38 38 error('constructor not supported'); 39 39 end 40 40 end % }}} 41 function obj = setdefaultparameters(obj) % {{{41 function self = setdefaultparameters(self) % {{{ 42 42 43 43 %default is incomplete adjoint for now 44 obj.incomplete_adjoint=1;44 self.incomplete_adjoint=1; 45 45 46 46 %parameter to be inferred by control methods (only 47 47 %drag and B are supported yet) 48 obj.control_parameters={'FrictionCoefficient'};48 self.control_parameters={'FrictionCoefficient'}; 49 49 50 50 %number of iterations and steps 51 obj.maxsteps=20;52 obj.maxiter =30;51 self.maxsteps=20; 52 self.maxiter =30; 53 53 54 54 %default tolerances 55 obj.fatol = 0;56 obj.frtol = 0;57 obj.gatol = 0;58 obj.grtol = 0;59 obj.gttol = 1e-4;55 self.fatol = 0; 56 self.frtol = 0; 57 self.gatol = 0; 58 self.grtol = 0; 59 self.gttol = 1e-4; 60 60 61 61 %minimization algorithm … … 63 63 PETSCMINOR = IssmConfig('_PETSC_MINOR_'); 64 64 if(PETSCMAJOR>3 | (PETSCMAJOR==3 & PETSCMINOR>=5)) 65 obj.algorithm = 'blmvm';65 self.algorithm = 'blmvm'; 66 66 else 67 obj.algorithm = 'tao_blmvm';67 self.algorithm = 'tao_blmvm'; 68 68 end 69 69 70 70 %several responses can be used: 71 obj.cost_functions=101;71 self.cost_functions=101; 72 72 73 73 end % }}} 74 function md = checkconsistency( obj,md,solution,analyses) % {{{74 function md = checkconsistency(self,md,solution,analyses) % {{{ 75 75 76 76 %Early return 77 if ~ obj.iscontrol, return; end77 if ~self.iscontrol, return; end 78 78 79 79 if ~IssmConfig('_HAVE_TAO_'), … … 117 117 end 118 118 end % }}} 119 function disp( obj) % {{{119 function disp(self) % {{{ 120 120 disp(sprintf(' taoinversion parameters:')); 121 fielddisplay( obj,'iscontrol','is inversion activated?');122 fielddisplay( obj,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity');123 fielddisplay( obj,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}');124 fielddisplay( obj,'maxsteps','maximum number of iterations (gradient computation)');125 fielddisplay( obj,'maxiter','maximum number of Function evaluation (forward run)');126 fielddisplay( obj,'fatol','convergence criterion: f(X)-f(X*) (X: current iteration, X*: "true" solution, f: cost function)');127 fielddisplay( obj,'frtol','convergence criterion: |f(X)-f(X*)|/|f(X*)|');128 fielddisplay( obj,'gatol','convergence criterion: ||g(X)|| (g: gradient of the cost function)');129 fielddisplay( obj,'grtol','convergence criterion: ||g(X)||/|f(X)|');130 fielddisplay( obj,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)');131 fielddisplay( obj,'algorithm','minimization algorithm: ''tao_blmvm'', ''tao_cg'', ''tao_lmvm''');132 fielddisplay( obj,'cost_functions','indicate the type of response for each optimization step');133 fielddisplay( obj,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter');134 fielddisplay( obj,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex');135 fielddisplay( obj,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex');136 fielddisplay( obj,'vx_obs','observed velocity x component [m/yr]');137 fielddisplay( obj,'vy_obs','observed velocity y component [m/yr]');138 fielddisplay( obj,'vel_obs','observed velocity magnitude [m/yr]');139 fielddisplay( obj,'thickness_obs','observed thickness [m]');140 fielddisplay( obj,'surface_obs','observed surface elevation [m]');121 fielddisplay(self,'iscontrol','is inversion activated?'); 122 fielddisplay(self,'incomplete_adjoint','1: linear viscosity, 0: non-linear viscosity'); 123 fielddisplay(self,'control_parameters','ex: {''FrictionCoefficient''}, or {''MaterialsRheologyBbar''}'); 124 fielddisplay(self,'maxsteps','maximum number of iterations (gradient computation)'); 125 fielddisplay(self,'maxiter','maximum number of Function evaluation (forward run)'); 126 fielddisplay(self,'fatol','convergence criterion: f(X)-f(X*) (X: current iteration, X*: "true" solution, f: cost function)'); 127 fielddisplay(self,'frtol','convergence criterion: |f(X)-f(X*)|/|f(X*)|'); 128 fielddisplay(self,'gatol','convergence criterion: ||g(X)|| (g: gradient of the cost function)'); 129 fielddisplay(self,'grtol','convergence criterion: ||g(X)||/|f(X)|'); 130 fielddisplay(self,'gttol','convergence criterion: ||g(X)||/||g(X0)|| (g(X0): gradient at initial guess X0)'); 131 fielddisplay(self,'algorithm','minimization algorithm: ''tao_blmvm'', ''tao_cg'', ''tao_lmvm'''); 132 fielddisplay(self,'cost_functions','indicate the type of response for each optimization step'); 133 fielddisplay(self,'cost_functions_coefficients','cost_functions_coefficients applied to the misfit of each vertex and for each control_parameter'); 134 fielddisplay(self,'min_parameters','absolute minimum acceptable value of the inversed parameter on each vertex'); 135 fielddisplay(self,'max_parameters','absolute maximum acceptable value of the inversed parameter on each vertex'); 136 fielddisplay(self,'vx_obs','observed velocity x component [m/yr]'); 137 fielddisplay(self,'vy_obs','observed velocity y component [m/yr]'); 138 fielddisplay(self,'vel_obs','observed velocity magnitude [m/yr]'); 139 fielddisplay(self,'thickness_obs','observed thickness [m]'); 140 fielddisplay(self,'surface_obs','observed surface elevation [m]'); 141 141 disp('Available cost functions:'); 142 142 disp(' 101: SurfaceAbsVelMisfit'); … … 150 150 disp(' 503: ThicknessAbsGradient'); 151 151 end % }}} 152 function marshall( obj,md,fid) % {{{152 function marshall(self,md,fid) % {{{ 153 153 154 154 yts=365.0*24.0*3600.0; 155 155 156 WriteData(fid,'object', obj,'class','inversion','fieldname','iscontrol','format','Boolean');156 WriteData(fid,'object',self,'class','inversion','fieldname','iscontrol','format','Boolean'); 157 157 WriteData(fid,'enum',InversionTypeEnum(),'data',1,'format','Integer'); 158 if ~ obj.iscontrol, return; end159 WriteData(fid,'object', obj,'class','inversion','fieldname','incomplete_adjoint','format','Boolean');160 WriteData(fid,'object', obj,'class','inversion','fieldname','maxsteps','format','Integer');161 WriteData(fid,'object', obj,'class','inversion','fieldname','maxiter','format','Integer');162 WriteData(fid,'object', obj,'class','inversion','fieldname','fatol','format','Double');163 WriteData(fid,'object', obj,'class','inversion','fieldname','frtol','format','Double');164 WriteData(fid,'object', obj,'class','inversion','fieldname','gatol','format','Double');165 WriteData(fid,'object', obj,'class','inversion','fieldname','grtol','format','Double');166 WriteData(fid,'object', obj,'class','inversion','fieldname','gttol','format','Double');167 WriteData(fid,'object', obj,'class','inversion','fieldname','algorithm','format','String');168 WriteData(fid,'object', obj,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1);169 WriteData(fid,'object', obj,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3);170 WriteData(fid,'object', obj,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3);171 WriteData(fid,'object', obj,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts);172 WriteData(fid,'object', obj,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts);173 WriteData(fid,'object', obj,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts);174 WriteData(fid,'object', obj,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1);175 WriteData(fid,'object', obj,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1);158 if ~self.iscontrol, return; end 159 WriteData(fid,'object',self,'class','inversion','fieldname','incomplete_adjoint','format','Boolean'); 160 WriteData(fid,'object',self,'class','inversion','fieldname','maxsteps','format','Integer'); 161 WriteData(fid,'object',self,'class','inversion','fieldname','maxiter','format','Integer'); 162 WriteData(fid,'object',self,'class','inversion','fieldname','fatol','format','Double'); 163 WriteData(fid,'object',self,'class','inversion','fieldname','frtol','format','Double'); 164 WriteData(fid,'object',self,'class','inversion','fieldname','gatol','format','Double'); 165 WriteData(fid,'object',self,'class','inversion','fieldname','grtol','format','Double'); 166 WriteData(fid,'object',self,'class','inversion','fieldname','gttol','format','Double'); 167 WriteData(fid,'object',self,'class','inversion','fieldname','algorithm','format','String'); 168 WriteData(fid,'object',self,'class','inversion','fieldname','cost_functions_coefficients','format','DoubleMat','mattype',1); 169 WriteData(fid,'object',self,'class','inversion','fieldname','min_parameters','format','DoubleMat','mattype',3); 170 WriteData(fid,'object',self,'class','inversion','fieldname','max_parameters','format','DoubleMat','mattype',3); 171 WriteData(fid,'object',self,'class','inversion','fieldname','vx_obs','format','DoubleMat','mattype',1,'scale',1./yts); 172 WriteData(fid,'object',self,'class','inversion','fieldname','vy_obs','format','DoubleMat','mattype',1,'scale',1./yts); 173 WriteData(fid,'object',self,'class','inversion','fieldname','vz_obs','format','DoubleMat','mattype',1,'scale',1./yts); 174 WriteData(fid,'object',self,'class','inversion','fieldname','thickness_obs','format','DoubleMat','mattype',1); 175 WriteData(fid,'object',self,'class','inversion','fieldname','surface_obs','format','DoubleMat','mattype',1); 176 176 177 177 %process control parameters 178 num_control_parameters=numel( obj.control_parameters);178 num_control_parameters=numel(self.control_parameters); 179 179 data=zeros(1,num_control_parameters); 180 180 for i=1:num_control_parameters, 181 data(i)=StringToEnum( obj.control_parameters{i});181 data(i)=StringToEnum(self.control_parameters{i}); 182 182 end 183 183 WriteData(fid,'data',data,'enum',InversionControlParametersEnum(),'format','DoubleMat','mattype',3); … … 185 185 186 186 %process cost functions 187 num_cost_functions=size( obj.cost_functions,2);188 data=marshallcostfunctions( obj.cost_functions);187 num_cost_functions=size(self.cost_functions,2); 188 data=marshallcostfunctions(self.cost_functions); 189 189 WriteData(fid,'data',data,'enum',InversionCostFunctionsEnum(),'format','DoubleMat','mattype',3); 190 190 WriteData(fid,'data',num_cost_functions,'enum',InversionNumCostFunctionsEnum(),'format','Integer'); -
issm/trunk-jpl/src/m/classes/thermal.m
r19027 r19040 18 18 end 19 19 methods 20 function createxml( obj,fid) % {{{20 function createxml(self,fid) % {{{ 21 21 fprintf(fid, '<!-- thermal -->\n'); 22 22 23 23 % thermal solution parameters 24 24 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="Thermal solution parameters">','<section name="thermal" />'); 25 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="spctemperature" type="',class( obj.spctemperature),'" default="',convert2str(obj.spctemperature),'">',' <section name="thermal" />',' <help> temperature constraints (NaN means no constraint) [K] </help>',' </parameter>');25 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="spctemperature" type="',class(self.spctemperature),'" default="',convert2str(self.spctemperature),'">',' <section name="thermal" />',' <help> temperature constraints (NaN means no constraint) [K] </help>',' </parameter>'); 26 26 27 27 % penalty_threshold drop-down (0, 1, or 2) … … 31 31 fprintf(fid,'%s\n%s\n',' <option value="2" type="string" default="false"> </option>','</parameter>'); 32 32 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="stabilization" type="',class( obj.stabilization),'" default="',convert2str(obj.stabilization),'">',' <section name="thermal" />',' <help> maximum number of non linear iterations </help>',' </parameter>');34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="reltol" type="',class( obj.reltol),'" default="',convert2str(obj.reltol),'">',' <section name="steadystate" />',' <help> relative tolerance criterion [K] </help>',' </parameter>');35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="maxiter" type="',class( obj.maxiter),'" default="',convert2str(obj.maxiter),'">',' <section name="thermal" />',' <help> stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>',' </parameter>');36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="penalty_lock" type="',class( obj.penalty_lock),'" default="',convert2str(obj.penalty_lock),'">',' <section name="thermal" />',' <help> threshold to declare convergence of thermal solution (default is 0) </help>',' </parameter>');37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="penalty_factor" type="',class( obj.penalty_factor),'" default="',convert2str(obj.penalty_factor),'">',' <section name="thermal" />',' <help> scaling exponent (default is 3) </help>',' </parameter>');38 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isenthalpy" type="',class( obj.isenthalpy),'" default="',convert2str(obj.isenthalpy),'">',' <section name="thermal" />',' <help> use an enthalpy formulation to include temperate ice (default is 0) </help>',' </parameter>');39 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isdynamicbasalspc" type="',class( obj.isdynamicbasalspc),'" default="',convert2str(obj.isdynamicbasalspc),'">',' <section name="thermal" />',' <help> enable dynamic setting of basal forcing. recommended for enthalpy formulation (default is 0) </help>',' </parameter>');40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="requested_outputs" type="',class( obj.requested_outputs),'" default="',convert2str(obj.requested_outputs),'">',' <section name="thermal" />',' <help> additional outputs requested </help>',' </parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="stabilization" type="',class(self.stabilization),'" default="',convert2str(self.stabilization),'">',' <section name="thermal" />',' <help> maximum number of non linear iterations </help>',' </parameter>'); 34 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="reltol" type="',class(self.reltol),'" default="',convert2str(self.reltol),'">',' <section name="steadystate" />',' <help> relative tolerance criterion [K] </help>',' </parameter>'); 35 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="maxiter" type="',class(self.maxiter),'" default="',convert2str(self.maxiter),'">',' <section name="thermal" />',' <help> stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization) </help>',' </parameter>'); 36 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="penalty_lock" type="',class(self.penalty_lock),'" default="',convert2str(self.penalty_lock),'">',' <section name="thermal" />',' <help> threshold to declare convergence of thermal solution (default is 0) </help>',' </parameter>'); 37 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="penalty_factor" type="',class(self.penalty_factor),'" default="',convert2str(self.penalty_factor),'">',' <section name="thermal" />',' <help> scaling exponent (default is 3) </help>',' </parameter>'); 38 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isenthalpy" type="',class(self.isenthalpy),'" default="',convert2str(self.isenthalpy),'">',' <section name="thermal" />',' <help> use an enthalpy formulation to include temperate ice (default is 0) </help>',' </parameter>'); 39 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isdynamicbasalspc" type="',class(self.isdynamicbasalspc),'" default="',convert2str(self.isdynamicbasalspc),'">',' <section name="thermal" />',' <help> enable dynamic setting of basal forcing. recommended for enthalpy formulation (default is 0) </help>',' </parameter>'); 40 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="requested_outputs" type="',class(self.requested_outputs),'" default="',convert2str(self.requested_outputs),'">',' <section name="thermal" />',' <help> additional outputs requested </help>',' </parameter>'); 41 41 fprintf(fid,'%s\n%s\n','</frame>'); 42 42 43 43 end % }}} 44 function obj= thermal(varargin) % {{{44 function self = thermal(varargin) % {{{ 45 45 switch nargin 46 46 case 0 47 obj=setdefaultparameters(obj);47 self=setdefaultparameters(self); 48 48 otherwise 49 49 error('constructor not supported'); … … 59 59 60 60 end % }}} 61 function obj = setdefaultparameters(obj) % {{{61 function self = setdefaultparameters(self) % {{{ 62 62 63 63 %Number of unstable constraints acceptable 64 obj.penalty_threshold=0;64 self.penalty_threshold=0; 65 65 66 66 %Type of stabilization used 67 obj.stabilization=1;67 self.stabilization=1; 68 68 69 69 %Relative tolerance for the enthalpy convergence 70 obj.reltol=0.01;70 self.reltol=0.01; 71 71 72 72 %Maximum number of iterations 73 obj.maxiter=100;73 self.maxiter=100; 74 74 75 75 %factor used to compute the values of the penalties: kappa=max(stiffness matrix)*10^penalty_factor 76 obj.penalty_factor=3;76 self.penalty_factor=3; 77 77 78 78 %Should we use cold ice (default) or enthalpy formulation 79 obj.isenthalpy=0;79 self.isenthalpy=0; 80 80 81 81 %will basal boundary conditions be set dynamically 82 obj.isdynamicbasalspc=0;82 self.isdynamicbasalspc=0; 83 83 84 84 %default output 85 obj.requested_outputs={'default'};85 self.requested_outputs={'default'}; 86 86 end % }}} 87 function md = checkconsistency( obj,md,solution,analyses) % {{{87 function md = checkconsistency(self,md,solution,analyses) % {{{ 88 88 89 89 %Early return … … 108 108 md = checkfield(md,'fieldname','thermal.requested_outputs','stringrow',1); 109 109 end % }}} 110 function disp( obj) % {{{110 function disp(self) % {{{ 111 111 disp(sprintf(' Thermal solution parameters:')); 112 112 113 fielddisplay( obj,'spctemperature','temperature constraints (NaN means no constraint) [K]');114 fielddisplay( obj,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG');115 fielddisplay( obj,'reltol','relative tolerance convergence criterion for enthalpy');116 fielddisplay( obj,'maxiter','maximum number of non linear iterations');117 fielddisplay( obj,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)');118 fielddisplay( obj,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)');119 fielddisplay( obj,'penalty_factor','scaling exponent (default is 3)');120 fielddisplay( obj,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');121 fielddisplay( obj,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);122 fielddisplay( obj,'requested_outputs','additional outputs requested');113 fielddisplay(self,'spctemperature','temperature constraints (NaN means no constraint) [K]'); 114 fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: SUPG'); 115 fielddisplay(self,'reltol','relative tolerance convergence criterion for enthalpy'); 116 fielddisplay(self,'maxiter','maximum number of non linear iterations'); 117 fielddisplay(self,'penalty_lock','stabilize unstable thermal constraints that keep zigzagging after n iteration (default is 0, no stabilization)'); 118 fielddisplay(self,'penalty_threshold','threshold to declare convergence of thermal solution (default is 0)'); 119 fielddisplay(self,'penalty_factor','scaling exponent (default is 3)'); 120 fielddisplay(self,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)'); 121 fielddisplay(self,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']); 122 fielddisplay(self,'requested_outputs','additional outputs requested'); 123 123 124 124 end % }}} 125 function marshall( obj,md,fid) % {{{126 WriteData(fid,'object', obj,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);127 WriteData(fid,'object', obj,'fieldname','penalty_threshold','format','Integer');128 WriteData(fid,'object', obj,'fieldname','stabilization','format','Integer');129 WriteData(fid,'object', obj,'fieldname','reltol','format','Double');130 WriteData(fid,'object', obj,'fieldname','maxiter','format','Integer');131 WriteData(fid,'object', obj,'fieldname','penalty_lock','format','Integer');132 WriteData(fid,'object', obj,'fieldname','penalty_factor','format','Double');133 WriteData(fid,'object', obj,'fieldname','isenthalpy','format','Boolean');134 WriteData(fid,'object', obj,'fieldname','isdynamicbasalspc','format','Boolean');125 function marshall(self,md,fid) % {{{ 126 WriteData(fid,'object',self,'fieldname','spctemperature','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1); 127 WriteData(fid,'object',self,'fieldname','penalty_threshold','format','Integer'); 128 WriteData(fid,'object',self,'fieldname','stabilization','format','Integer'); 129 WriteData(fid,'object',self,'fieldname','reltol','format','Double'); 130 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer'); 131 WriteData(fid,'object',self,'fieldname','penalty_lock','format','Integer'); 132 WriteData(fid,'object',self,'fieldname','penalty_factor','format','Double'); 133 WriteData(fid,'object',self,'fieldname','isenthalpy','format','Boolean'); 134 WriteData(fid,'object',self,'fieldname','isdynamicbasalspc','format','Boolean'); 135 135 136 136 %process requested outputs 137 outputs = obj.requested_outputs;137 outputs = self.requested_outputs; 138 138 pos = find(ismember(outputs,'default')); 139 139 if ~isempty(pos), 140 140 outputs(pos) = []; %remove 'default' from outputs 141 outputs = [outputs defaultoutputs( obj,md)]; %add defaults141 outputs = [outputs defaultoutputs(self,md)]; %add defaults 142 142 end 143 143 WriteData(fid,'data',outputs,'enum',ThermalRequestedOutputsEnum(),'format','StringArray'); -
issm/trunk-jpl/src/m/classes/timestepping.m
r18537 r19040 15 15 end 16 16 methods 17 function createxml( obj,fid) % {{{17 function createxml(self,fid) % {{{ 18 18 fprintf(fid, '\n\n'); 19 19 fprintf(fid, '%s\n', '<!-- Timestepping -->'); 20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="start_time" type="', class( obj.start_time),'" default="', convert2str(obj.start_time),'">', ' <section name="timestepping" />',' <help> simulation starting time [yr] </help>','</parameter>');21 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="final_time" type="', class( obj.final_time),'" default="', convert2str(obj.final_time),'">', ' <section name="timestepping" />',' <help> final time to stop the simulation [yr] </help>','</parameter>');22 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="time_step" type="', class( obj.time_step),'" default="', convert2str(obj.time_step),'">', ' <section name="timestepping" />',' <help> length of time steps [yr] </help>','</parameter>');20 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="start_time" type="', class(self.start_time),'" default="', convert2str(self.start_time),'">', ' <section name="timestepping" />',' <help> simulation starting time [yr] </help>','</parameter>'); 21 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="final_time" type="', class(self.final_time),'" default="', convert2str(self.final_time),'">', ' <section name="timestepping" />',' <help> final time to stop the simulation [yr] </help>','</parameter>'); 22 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="time_step" type="', class(self.time_step),'" default="', convert2str(self.time_step),'">', ' <section name="timestepping" />',' <help> length of time steps [yr] </help>','</parameter>'); 23 23 % time_adapt 0 or 1 drop down 24 24 fprintf(fid,'%s\n%s\n%s\n%s\n','<parameter key ="time_adapt" type="alternative" optional="false">',' <section name="timestepping" />',' <help> use cfl condition to define time step ? (0 or 1) </help>'); 25 25 fprintf(fid, '%s\n', ' <option value="0" type="string" default="true"></option>'); 26 26 fprintf(fid, '%s\n%s\n', ' <option value="1" type="string" default="false"></option>','</parameter>'); 27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="cfl_coefficient" type="', class( obj.cfl_coefficient),'" default="', convert2str(obj.cfl_coefficient),'">', ' <section name="timestepping" />',' <help> coefficient applied to cfl condition </help>','</parameter>');27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n', '<parameter key ="cfl_coefficient" type="', class(self.cfl_coefficient),'" default="', convert2str(self.cfl_coefficient),'">', ' <section name="timestepping" />',' <help> coefficient applied to cfl condition </help>','</parameter>'); 28 28 29 29 end % }}} 30 30 31 function obj= timestepping(varargin) % {{{31 function self = timestepping(varargin) % {{{ 32 32 switch nargin 33 33 case 0 34 obj=setdefaultparameters(obj);34 self=setdefaultparameters(self); 35 35 otherwise 36 36 error('constructor not supported'); 37 37 end 38 38 end % }}} 39 function obj = setdefaultparameters(obj) % {{{39 function self = setdefaultparameters(self) % {{{ 40 40 41 41 %time between 2 time steps 42 obj.time_step=1./2.;42 self.time_step=1./2.; 43 43 44 44 %final time 45 obj.final_time=10.*obj.time_step;45 self.final_time=10.*self.time_step; 46 46 47 47 %time adaptation? 48 obj.time_adapt=0;49 obj.cfl_coefficient=0.5;48 self.time_adapt=0; 49 self.cfl_coefficient=0.5; 50 50 51 51 %should we interpolate forcings between timesteps? 52 obj.interp_forcings=1;52 self.interp_forcings=1; 53 53 54 54 %In years by default 55 obj.in_years = 1;55 self.in_years = 1; 56 56 end % }}} 57 function md = checkconsistency( obj,md,solution,analyses) % {{{57 function md = checkconsistency(self,md,solution,analyses) % {{{ 58 58 59 59 md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1); … … 63 63 md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1); 64 64 md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0 1]); 65 if obj.final_time-obj.start_time<0,65 if self.final_time-self.start_time<0, 66 66 md = checkmessage(md,'timestepping.final_time should be larger than timestepping.start_time'); 67 67 end 68 68 end % }}} 69 function disp( obj) % {{{69 function disp(self) % {{{ 70 70 disp(sprintf(' timestepping parameters:')); 71 71 72 if( obj.in_years)72 if(self.in_years) 73 73 unit = 'yr'; 74 74 else 75 75 unit = 's'; 76 76 end 77 fielddisplay( obj,'start_time',['simulation starting time [' unit ']']);78 fielddisplay( obj,'final_time',['final time to stop the simulation [' unit ']']);79 fielddisplay( obj,'time_step',['length of time steps [' unit ']']);80 fielddisplay( obj,'time_adapt','use cfl condition to define time step ? (0 or 1) ');81 fielddisplay( obj,'cfl_coefficient','coefficient applied to cfl condition');82 fielddisplay( obj,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)');83 fielddisplay( obj,'in_years','time unit, 1: years, 0: seconds');77 fielddisplay(self,'start_time',['simulation starting time [' unit ']']); 78 fielddisplay(self,'final_time',['final time to stop the simulation [' unit ']']); 79 fielddisplay(self,'time_step',['length of time steps [' unit ']']); 80 fielddisplay(self,'time_adapt','use cfl condition to define time step ? (0 or 1) '); 81 fielddisplay(self,'cfl_coefficient','coefficient applied to cfl condition'); 82 fielddisplay(self,'interp_forcings','interpolate in time between requested forcing values ? (0 or 1)'); 83 fielddisplay(self,'in_years','time unit, 1: years, 0: seconds'); 84 84 85 85 end % }}} 86 function marshall( obj,md,fid) % {{{86 function marshall(self,md,fid) % {{{ 87 87 88 if obj.in_years,88 if self.in_years, 89 89 scale = 365.0*24.0*3600.0; 90 90 else 91 91 scale = 1.; 92 92 end 93 WriteData(fid,'object', obj,'fieldname','start_time','format','Double','scale',scale);94 WriteData(fid,'object', obj,'fieldname','final_time','format','Double','scale',scale);95 WriteData(fid,'object', obj,'fieldname','time_step','format','Double','scale',scale);96 WriteData(fid,'object', obj,'fieldname','time_adapt','format','Boolean');97 WriteData(fid,'object', obj,'fieldname','cfl_coefficient','format','Double');98 WriteData(fid,'object', obj,'fieldname','interp_forcings','format','Boolean');93 WriteData(fid,'object',self,'fieldname','start_time','format','Double','scale',scale); 94 WriteData(fid,'object',self,'fieldname','final_time','format','Double','scale',scale); 95 WriteData(fid,'object',self,'fieldname','time_step','format','Double','scale',scale); 96 WriteData(fid,'object',self,'fieldname','time_adapt','format','Boolean'); 97 WriteData(fid,'object',self,'fieldname','cfl_coefficient','format','Double'); 98 WriteData(fid,'object',self,'fieldname','interp_forcings','format','Boolean'); 99 99 end % }}} 100 100 end -
issm/trunk-jpl/src/m/classes/toolkits.m
r16192 r19040 2 2 % 3 3 % Usage: 4 % obj=toolkits();4 % self=toolkits(); 5 5 6 6 classdef toolkits < dynamicprops … … 10 10 end 11 11 methods 12 function obj= toolkits(varargin) % {{{12 function self = toolkits(varargin) % {{{ 13 13 switch nargin 14 14 case 0 15 obj=setdefaultparameters(obj);15 self=setdefaultparameters(self); 16 16 case 1 17 obj=structtoobj(obj,varargin{1});17 self=structtoobj(self,varargin{1}); 18 18 otherwise 19 19 error('constructor not supported'); 20 20 end 21 21 end % }}} 22 function obj = addoptions(obj,analysis,varargin) % {{{22 function self = addoptions(self,analysis,varargin) % {{{ 23 23 % Usage example: 24 24 % md.toolkits=addoptions(md.toolkits,StressbalanceAnalysisEnum(),FSoptions()); … … 29 29 30 30 %Create dynamic property if property does not exist yet 31 if ~ismember(analysis,properties( obj)),32 obj.addprop(analysis);31 if ~ismember(analysis,properties(self)), 32 self.addprop(analysis); 33 33 end 34 34 35 35 %Add toolkits options to analysis 36 if nargin==3, obj.(analysis) = varargin{1}; end36 if nargin==3, self.(analysis) = varargin{1}; end 37 37 end 38 38 %}}} 39 function obj = setdefaultparameters(obj) % {{{39 function self = setdefaultparameters(self) % {{{ 40 40 41 41 %default toolkits: … … 43 43 %MUMPS is the default toolkits 44 44 if IssmConfig('_HAVE_MUMPS_'), 45 obj.DefaultAnalysis = mumpsoptions();45 self.DefaultAnalysis = mumpsoptions(); 46 46 else 47 obj.DefaultAnalysis = iluasmoptions();47 self.DefaultAnalysis = iluasmoptions(); 48 48 end 49 49 else 50 50 if IssmConfig('_HAVE_MUMPS_'), 51 obj.DefaultAnalysis = issmmumpssolver();51 self.DefaultAnalysis = issmmumpssolver(); 52 52 elseif IssmConfig('_HAVE_GSL_'), 53 obj.DefaultAnalysis = issmgslsolver();53 self.DefaultAnalysis = issmgslsolver(); 54 54 else 55 55 error('Need at least Mumps or Gsl to define an issm solver type'); … … 58 58 59 59 end % }}} 60 function disp( obj) % {{{61 analyses=properties( obj);60 function disp(self) % {{{ 61 analyses=properties(self); 62 62 disp(sprintf('List of toolkits options per analysis:\n')); 63 63 for i=1:numel(analyses), 64 64 analysis=analyses{i}; 65 65 disp([analysis ':']); 66 disp( obj.(analysis));66 disp(self.(analysis)); 67 67 end 68 68 end % }}} 69 function md = checkconsistency( obj,md,solution,analyses) % {{{70 analyses=properties( obj);69 function md = checkconsistency(self,md,solution,analyses) % {{{ 70 analyses=properties(self); 71 71 for i=1:numel(analyses), 72 if isempty(fieldnames( obj.(analyses{i})))72 if isempty(fieldnames(self.(analyses{i}))) 73 73 md = checkmessage(md,['md.toolkits.' analyses{i} ' is empty']); 74 74 end -
issm/trunk-jpl/src/m/classes/toolkits.py
r17480 r19040 12 12 13 13 Usage: 14 obj=toolkits();14 self=toolkits(); 15 15 """ 16 16 -
issm/trunk-jpl/src/m/classes/transient.m
r18757 r19040 18 18 end 19 19 methods 20 function createxml( obj,fid) % {{{20 function createxml(self,fid) % {{{ 21 21 fprintf(fid, '<!-- transient -->\n'); 22 22 23 23 % transient solution parameters 24 24 fprintf(fid,'%s\n%s\n%s\n','<frame key="1" label="transient solution parameters">','<section name="transient" />'); 25 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="ismasstransport" type="',class( obj.ismasstransport),'" default="',convert2str(obj.ismasstransport),'">',' <section name="transient" />',' <help> indicates whether a masstransport solution is used in the transient </help>',' </parameter>');26 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isstressbalance" type="',class( obj.isstressbalance),'" default="',convert2str(obj.isstressbalance),'">',' <section name="transient" />',' <help> indicates whether a stressbalance solution is used in the transient </help>',' </parameter>');27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isthermal" type="',class( obj.isthermal),'" default="',convert2str(obj.isthermal),'">',' <section name="transient" />',' <help> indicates whether a thermal solution is used in the transient </help>',' </parameter>');28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isgroundingline" type="',class( obj.isgroundingline),'" default="',convert2str(obj.isgroundingline),'">',' <section name="transient" />',' <help> indicates whether a groundingline migration is used in the transient </help>',' </parameter>');29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isgia" type="',class( obj.isgia),'" default="',convert2str(obj.isgia),'">',' <section name="transient" />',' <help> indicates whether a postglacial rebound model is used in the transient </help>',' </parameter>');30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isdamageevolution" type="',class( obj.isdamageevolution),'" default="',convert2str(obj.isdamageevolution),'">',' <section name="transient" />',' <help> indicates whether damage evolution is used in the transient </help>',' </parameter>');31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="islevelset" type="',class( obj.islevelset),'" default="',convert2str(obj.islevelset),'">',' <section name="transient" />',' <help> LEVEL SET DESCRIPTION... </help>',' </parameter>');32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="iscalving" type="',class( obj.iscalving),'" default="',convert2str(obj.iscalving),'">',' <section name="transient" />',' <help> indicates whether calving is used in the transient </help>',' </parameter>');33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="requested_outputs" type="',class( obj.requested_outputs),'" default="',convert2str(obj.requested_outputs),'">',' <section name="transient" />',' <help> list of additional outputs requested </help>',' </parameter>');25 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="ismasstransport" type="',class(self.ismasstransport),'" default="',convert2str(self.ismasstransport),'">',' <section name="transient" />',' <help> indicates whether a masstransport solution is used in the transient </help>',' </parameter>'); 26 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isstressbalance" type="',class(self.isstressbalance),'" default="',convert2str(self.isstressbalance),'">',' <section name="transient" />',' <help> indicates whether a stressbalance solution is used in the transient </help>',' </parameter>'); 27 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isthermal" type="',class(self.isthermal),'" default="',convert2str(self.isthermal),'">',' <section name="transient" />',' <help> indicates whether a thermal solution is used in the transient </help>',' </parameter>'); 28 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isgroundingline" type="',class(self.isgroundingline),'" default="',convert2str(self.isgroundingline),'">',' <section name="transient" />',' <help> indicates whether a groundingline migration is used in the transient </help>',' </parameter>'); 29 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isgia" type="',class(self.isgia),'" default="',convert2str(self.isgia),'">',' <section name="transient" />',' <help> indicates whether a postglacial rebound model is used in the transient </help>',' </parameter>'); 30 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="isdamageevolution" type="',class(self.isdamageevolution),'" default="',convert2str(self.isdamageevolution),'">',' <section name="transient" />',' <help> indicates whether damage evolution is used in the transient </help>',' </parameter>'); 31 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="islevelset" type="',class(self.islevelset),'" default="',convert2str(self.islevelset),'">',' <section name="transient" />',' <help> LEVEL SET DESCRIPTION... </help>',' </parameter>'); 32 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="iscalving" type="',class(self.iscalving),'" default="',convert2str(self.iscalving),'">',' <section name="transient" />',' <help> indicates whether calving is used in the transient </help>',' </parameter>'); 33 fprintf(fid,'%s%s%s%s%s\n%s\n%s\n%s\n',' <parameter key ="requested_outputs" type="',class(self.requested_outputs),'" default="',convert2str(self.requested_outputs),'">',' <section name="transient" />',' <help> list of additional outputs requested </help>',' </parameter>'); 34 34 fprintf(fid,'%s\n%s\n','</frame>'); 35 35 36 36 end % }}} 37 function obj= transient(varargin) % {{{37 function self = transient(varargin) % {{{ 38 38 switch nargin 39 39 case 0 40 obj=setdefaultparameters(obj);40 self = setdefaultparameters(self); 41 41 otherwise 42 42 error('constructor not supported'); 43 43 end 44 44 end % }}} 45 function obj = deactivateall(obj) % {{{45 function self = deactivateall(self) % {{{ 46 46 47 47 %full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now 48 obj.ismasstransport = 0;49 obj.isstressbalance = 0;50 obj.isthermal = 0;51 obj.isgroundingline = 0;52 obj.isgia = 0;53 obj.isdamageevolution = 0;54 obj.islevelset = 0;55 obj.iscalving =0;56 obj.ishydrology = 0;48 self.ismasstransport = 0; 49 self.isstressbalance = 0; 50 self.isthermal = 0; 51 self.isgroundingline = 0; 52 self.isgia = 0; 53 self.isdamageevolution = 0; 54 self.islevelset = 0; 55 self.iscalving =0; 56 self.ishydrology = 0; 57 57 58 58 %default output 59 obj.requested_outputs={};59 self.requested_outputs={}; 60 60 end % }}} 61 function obj = setdefaultparameters(obj) % {{{61 function self = setdefaultparameters(self) % {{{ 62 62 63 63 %full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now 64 obj.ismasstransport = 1;65 obj.isstressbalance = 1;66 obj.isthermal = 1;67 obj.isgroundingline = 0;68 obj.isgia = 0;69 obj.isdamageevolution = 0;70 obj.islevelset = 0;71 obj.iscalving = 0;72 obj.ishydrology = 0;64 self.ismasstransport = 1; 65 self.isstressbalance = 1; 66 self.isthermal = 1; 67 self.isgroundingline = 0; 68 self.isgia = 0; 69 self.isdamageevolution = 0; 70 self.islevelset = 0; 71 self.iscalving = 0; 72 self.ishydrology = 0; 73 73 74 74 %default output 75 obj.requested_outputs={'default'};75 self.requested_outputs={'default'}; 76 76 end % }}} 77 77 function list = defaultoutputs(self,md) % {{{ … … 82 82 end 83 83 end % }}} 84 function md = checkconsistency( obj,md,solution,analyses) % {{{84 function md = checkconsistency(self,md,solution,analyses) % {{{ 85 85 86 86 %Early return … … 99 99 100 100 end % }}} 101 function disp( obj) % {{{101 function disp(self) % {{{ 102 102 disp(sprintf(' transient solution parameters:')); 103 103 104 fielddisplay( obj,'ismasstransport','indicates whether a masstransport solution is used in the transient');105 fielddisplay( obj,'isstressbalance','indicates whether a stressbalance solution is used in the transient');106 fielddisplay( obj,'isthermal','indicates whether a thermal solution is used in the transient');107 fielddisplay( obj,'isgroundingline','indicates whether a groundingline migration is used in the transient');108 fielddisplay( obj,'isgia','indicates whether a postglacial rebound model is used in the transient');109 fielddisplay( obj,'isdamageevolution','indicates whether damage evolution is used in the transient');110 fielddisplay( obj,'islevelset','LEVEL SET DESCRIPTION...');111 fielddisplay( obj,'iscalving','indicates whether calving is used in the transient');112 fielddisplay( obj,'ishydrology','indicates whether an hydrology model is used');113 fielddisplay( obj,'requested_outputs','list of additional outputs requested');104 fielddisplay(self,'ismasstransport','indicates whether a masstransport solution is used in the transient'); 105 fielddisplay(self,'isstressbalance','indicates whether a stressbalance solution is used in the transient'); 106 fielddisplay(self,'isthermal','indicates whether a thermal solution is used in the transient'); 107 fielddisplay(self,'isgroundingline','indicates whether a groundingline migration is used in the transient'); 108 fielddisplay(self,'isgia','indicates whether a postglacial rebound model is used in the transient'); 109 fielddisplay(self,'isdamageevolution','indicates whether damage evolution is used in the transient'); 110 fielddisplay(self,'islevelset','LEVEL SET DESCRIPTION...'); 111 fielddisplay(self,'iscalving','indicates whether calving is used in the transient'); 112 fielddisplay(self,'ishydrology','indicates whether an hydrology model is used'); 113 fielddisplay(self,'requested_outputs','list of additional outputs requested'); 114 114 115 115 end % }}} 116 function marshall( obj,md,fid) % {{{117 WriteData(fid,'object', obj,'fieldname','ismasstransport','format','Boolean');118 WriteData(fid,'object', obj,'fieldname','isstressbalance','format','Boolean');119 WriteData(fid,'object', obj,'fieldname','isthermal','format','Boolean');120 WriteData(fid,'object', obj,'fieldname','isgroundingline','format','Boolean');121 WriteData(fid,'object', obj,'fieldname','isgia','format','Boolean');122 WriteData(fid,'object', obj,'fieldname','isdamageevolution','format','Boolean');123 WriteData(fid,'object', obj,'fieldname','ishydrology','format','Boolean');124 WriteData(fid,'object', obj,'fieldname','islevelset','format','Boolean');125 WriteData(fid,'object', obj,'fieldname','iscalving','format','Boolean');116 function marshall(self,md,fid) % {{{ 117 WriteData(fid,'object',self,'fieldname','ismasstransport','format','Boolean'); 118 WriteData(fid,'object',self,'fieldname','isstressbalance','format','Boolean'); 119 WriteData(fid,'object',self,'fieldname','isthermal','format','Boolean'); 120 WriteData(fid,'object',self,'fieldname','isgroundingline','format','Boolean'); 121 WriteData(fid,'object',self,'fieldname','isgia','format','Boolean'); 122 WriteData(fid,'object',self,'fieldname','isdamageevolution','format','Boolean'); 123 WriteData(fid,'object',self,'fieldname','ishydrology','format','Boolean'); 124 WriteData(fid,'object',self,'fieldname','islevelset','format','Boolean'); 125 WriteData(fid,'object',self,'fieldname','iscalving','format','Boolean'); 126 126 127 127 %process requested outputs 128 outputs = obj.requested_outputs;128 outputs = self.requested_outputs; 129 129 pos = find(ismember(outputs,'default')); 130 130 if ~isempty(pos), 131 131 outputs(pos) = []; %remove 'default' from outputs 132 outputs = [outputs defaultoutputs( obj,md)]; %add defaults132 outputs = [outputs defaultoutputs(self,md)]; %add defaults 133 133 end 134 134 WriteData(fid,'data',outputs,'enum',TransientRequestedOutputsEnum,'format','StringArray'); -
issm/trunk-jpl/src/m/classes/verbose.m
r17720 r19040 38 38 %}}} 39 39 methods 40 function createxml(obj,fid) % {{{41 42 43 44 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="mprocessor" type="', class(obj.mprocessor),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.mprocessor),'" type="string" default="true"></option>',' <help> </help>','</parameter>');45 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="module" type="', class(obj.module),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.module),'" type="string" default="true"></option>',' <help> </help>','</parameter>');46 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="solution" type="', class(obj.solution),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.solution),'" type="string" default="true"></option>',' <help> </help>','</parameter>');47 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="solver" type="', class(obj.solver),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.solver),'" type="string" default="true"></option>',' <help> </help>','</parameter>');48 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="convergence" type="', class(obj.convergence),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.convergence),'" type="string" default="true"></option>',' <help> </help>','</parameter>');49 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="control" type="', class(obj.control),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.control),'" type="string" default="true"></option>',' <help> </help>','</parameter>');50 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="qmu" type="', class(obj.qmu),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.qmu),'" type="string" default="true"></option>',' <help> </help>','</parameter>');51 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n', '<parameter key ="autodiff" type="', class(obj.autodiff),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(obj.autodiff),'" type="string" default="true"></option>',' <help> </help>','</parameter>');52 53 54 40 function createxml(self,fid) % {{{ 41 fprintf(fid, '\n\n'); 42 fprintf(fid, '%s\n', '<!-- verbose -->'); 43 44 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="mprocessor" type="', class(self.mprocessor),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.mprocessor),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 45 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="module" type="', class(self.module),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.module),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 46 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="solution" type="', class(self.solution),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.solution),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 47 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="solver" type="', class(self.solver),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.solver),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 48 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="convergence" type="', class(self.convergence),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.convergence),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 49 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="control" type="', class(self.control),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.control),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 50 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n%s\n', '<parameter key ="qmu" type="', class(self.qmu),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.qmu),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 51 fprintf(fid,'%s%s%s\n%s\n%s%s%s\n%s\n', '<parameter key ="autodiff" type="', class(self.autodiff),'" optional="false">', ' <section name="verbose" />',' <option value="',convert2str(self.autodiff),'" type="string" default="true"></option>',' <help> </help>','</parameter>'); 52 53 54 end % }}} 55 55 function verbose=verbose(varargin) % {{{ 56 56 … … 123 123 end 124 124 %}}} 125 function md = checkconsistency( obj,md,solution,analyses) % {{{125 function md = checkconsistency(self,md,solution,analyses) % {{{ 126 126 127 127 end % }}} … … 142 142 end 143 143 %}}} 144 function marshall( obj,md,fid) % {{{145 WriteData(fid,'data',VerboseToBinary( obj),'enum',VerboseEnum(),'format','Integer');144 function marshall(self,md,fid) % {{{ 145 WriteData(fid,'data',VerboseToBinary(self),'enum',VerboseEnum(),'format','Integer'); 146 146 end % }}} 147 147 end
Note:
See TracChangeset
for help on using the changeset viewer.