Changeset 20407
- Timestamp:
- 03/31/16 11:33:33 (9 years ago)
- Location:
- issm/trunk-jpl/src/m/classes
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/SMBgemb.m
r19897 r20407 141 141 142 142 end % }}} 143 function md = checkconsistency(self,md,solution,analyses) % {{{144 145 146 md = checkfield(md,'fieldname','smb.isgraingrowth','values',[0 1]);147 md = checkfield(md,'fieldname','smb.isalbedo','values',[0 1]);148 md = checkfield(md,'fieldname','smb.isshortwave','values',[0 1]);149 md = checkfield(md,'fieldname','smb.isthermal','values',[0 1]);150 md = checkfield(md,'fieldname','smb.isaccumulation','values',[0 1]);151 md = checkfield(md,'fieldname','smb.ismelt','values',[0 1]);152 md = checkfield(md,'fieldname','smb.isdensification','values',[0 1]);153 md = checkfield(md,'fieldname','smb.isturbulentflux','values',[0 1]);154 155 md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'Inf',1,'>',273-60,'<',273+60); %60 celsius max value156 md = checkfield(md,'fieldname','smb.V','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<',45); %max 500 km/h157 md = checkfield(md,'fieldname','smb.dswrf','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1400);158 md = checkfield(md,'fieldname','smb.dlwrf','timeseries',1,'NaN',1,'Inf',1,'>=',0);159 md = checkfield(md,'fieldname','smb.P','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',100);160 md = checkfield(md,'fieldname','smb.eAir','timeseries',1,'NaN',1,'Inf',1);161 162 md = checkfield(md,'fieldname','smb.Tmean','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>',273-60,'<',273+60); %60 celsius max value163 md = checkfield(md,'fieldname','smb.C','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0);164 md = checkfield(md,'fieldname','smb.Tz','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0,'<=',5000);165 md = checkfield(md,'fieldname','smb.Vz','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0,'<=',5000);166 167 md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[1,2,3,4]);168 md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1]);169 md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5]);170 171 md = checkfield(md,'fieldname','smb.zTop','NaN',1,'Inf',1,'>=',0);172 md = checkfield(md,'fieldname','smb.dzTop','NaN',1,'Inf',1,'>',0);173 md = checkfield(md,'fieldname','smb.dzMin','NaN',1,'Inf',1,'>',0);174 md = checkfield(md,'fieldname','smb.zY','NaN',1,'Inf',1,'>=',1);175 md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'Inf',1,'>',0,'<',10*365); %10 years max176 md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'>=',0,'<=',1);177 178 switch self.aIdx,179 case {1 2}180 md = checkfield(md,'fieldname','smb.aSnow','NaN',1,'Inf',1,'>=',.64,'<=',.89);181 md = checkfield(md,'fieldname','smb.aIce','NaN',1,'Inf',1,'>=',.27,'<=',.58);182 case 3183 md = checkfield(md,'fieldname','smb.cldFrac','NaN',1,'Inf',1,'>=',0,'<=',1);184 case 4185 md = checkfield(md,'fieldname','smb.t0wet','NaN',1,'Inf',1,'>=',15,'<=',21.9);186 md = checkfield(md,'fieldname','smb.t0dry','NaN',1,'Inf',1,'>=',30,'<=',30);187 md = checkfield(md,'fieldname','smb.K','NaN',1,'Inf',1,'>=',7,'<=',7);188 end189 190 %check zTop is < local thickness:191 he=sum(md.geometry.thickness(md.mesh.elements),2)/size(md.mesh.elements,2);192 if any(he<self.zTop),193 error('SMBgemb consistency check error: zTop should be smaller than local ice thickness');194 end195 md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1);143 function md = checkconsistency(self,md,solution,analyses) % {{{ 144 145 146 md = checkfield(md,'fieldname','smb.isgraingrowth','values',[0 1]); 147 md = checkfield(md,'fieldname','smb.isalbedo','values',[0 1]); 148 md = checkfield(md,'fieldname','smb.isshortwave','values',[0 1]); 149 md = checkfield(md,'fieldname','smb.isthermal','values',[0 1]); 150 md = checkfield(md,'fieldname','smb.isaccumulation','values',[0 1]); 151 md = checkfield(md,'fieldname','smb.ismelt','values',[0 1]); 152 md = checkfield(md,'fieldname','smb.isdensification','values',[0 1]); 153 md = checkfield(md,'fieldname','smb.isturbulentflux','values',[0 1]); 154 155 md = checkfield(md,'fieldname','smb.Ta','timeseries',1,'NaN',1,'Inf',1,'>',273-60,'<',273+60); %60 celsius max value 156 md = checkfield(md,'fieldname','smb.V','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<',45); %max 500 km/h 157 md = checkfield(md,'fieldname','smb.dswrf','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',1400); 158 md = checkfield(md,'fieldname','smb.dlwrf','timeseries',1,'NaN',1,'Inf',1,'>=',0); 159 md = checkfield(md,'fieldname','smb.P','timeseries',1,'NaN',1,'Inf',1,'>=',0,'<=',100); 160 md = checkfield(md,'fieldname','smb.eAir','timeseries',1,'NaN',1,'Inf',1); 161 162 md = checkfield(md,'fieldname','smb.Tmean','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>',273-60,'<',273+60); %60 celsius max value 163 md = checkfield(md,'fieldname','smb.C','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0); 164 md = checkfield(md,'fieldname','smb.Tz','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0,'<=',5000); 165 md = checkfield(md,'fieldname','smb.Vz','size',[md.mesh.numberofelements 1],'NaN',1,'Inf',1,'>=',0,'<=',5000); 166 167 md = checkfield(md,'fieldname','smb.aIdx','NaN',1,'Inf',1,'values',[1,2,3,4]); 168 md = checkfield(md,'fieldname','smb.swIdx','NaN',1,'Inf',1,'values',[0,1]); 169 md = checkfield(md,'fieldname','smb.denIdx','NaN',1,'Inf',1,'values',[1,2,3,4,5]); 170 171 md = checkfield(md,'fieldname','smb.zTop','NaN',1,'Inf',1,'>=',0); 172 md = checkfield(md,'fieldname','smb.dzTop','NaN',1,'Inf',1,'>',0); 173 md = checkfield(md,'fieldname','smb.dzMin','NaN',1,'Inf',1,'>',0); 174 md = checkfield(md,'fieldname','smb.zY','NaN',1,'Inf',1,'>=',1); 175 md = checkfield(md,'fieldname','smb.outputFreq','NaN',1,'Inf',1,'>',0,'<',10*365); %10 years max 176 md = checkfield(md,'fieldname','smb.InitDensityScaling','NaN',1,'Inf',1,'>=',0,'<=',1); 177 178 switch self.aIdx, 179 case {1 2} 180 md = checkfield(md,'fieldname','smb.aSnow','NaN',1,'Inf',1,'>=',.64,'<=',.89); 181 md = checkfield(md,'fieldname','smb.aIce','NaN',1,'Inf',1,'>=',.27,'<=',.58); 182 case 3 183 md = checkfield(md,'fieldname','smb.cldFrac','NaN',1,'Inf',1,'>=',0,'<=',1); 184 case 4 185 md = checkfield(md,'fieldname','smb.t0wet','NaN',1,'Inf',1,'>=',15,'<=',21.9); 186 md = checkfield(md,'fieldname','smb.t0dry','NaN',1,'Inf',1,'>=',30,'<=',30); 187 md = checkfield(md,'fieldname','smb.K','NaN',1,'Inf',1,'>=',7,'<=',7); 188 end 189 190 %check zTop is < local thickness: 191 he=sum(md.geometry.thickness(md.mesh.elements),2)/size(md.mesh.elements,2); 192 if any(he<self.zTop), 193 error('SMBgemb consistency check error: zTop should be smaller than local ice thickness'); 194 end 195 md = checkfield(md,'fieldname','smb.requested_outputs','stringrow',1); 196 196 197 197 end % }}} … … 273 273 WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean'); 274 274 275 WriteData(fid,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,' scale',1,'timeserieslength',md.mesh.numberofelements+1);276 WriteData(fid,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',2,' scale',1,'timeserieslength',md.mesh.numberofelements+1);277 WriteData(fid,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',2,' scale',1,'timeserieslength',md.mesh.numberofelements+1);278 WriteData(fid,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',2,' scale',1,'timeserieslength',md.mesh.numberofelements+1);279 WriteData(fid,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',2,' scale',1,'timeserieslength',md.mesh.numberofelements+1);280 WriteData(fid,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',2,' scale',1,'timeserieslength',md.mesh.numberofelements+1);281 WriteData(fid,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',2,' scale',1,'timeserieslength',md.mesh.numberofelements+1);282 283 WriteData(fid,'object',self,'class','smb','fieldname','Tmean','format','DoubleMat','mattype',2 ,'scale',1);284 WriteData(fid,'object',self,'class','smb','fieldname','C','format','DoubleMat','mattype',2 ,'scale',1);285 WriteData(fid,'object',self,'class','smb','fieldname','Tz','format','DoubleMat','mattype',2 ,'scale',1);286 WriteData(fid,'object',self,'class','smb','fieldname','Vz','format','DoubleMat','mattype',2 ,'scale',1);287 WriteData(fid,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',2 ,'scale',1);288 WriteData(fid,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',2 ,'scale',1);289 WriteData(fid,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',2 ,'scale',1);290 WriteData(fid,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',2 ,'scale',1);291 WriteData(fid,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',2 ,'scale',1);292 WriteData(fid,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',2 ,'scale',1);293 294 WriteData(fid,'object',self,'class','smb','fieldname','aIdx','format','Integer' ,'scale',1);295 WriteData(fid,'object',self,'class','smb','fieldname','swIdx','format','Integer' ,'scale',1);296 WriteData(fid,'object',self,'class','smb','fieldname','denIdx','format','Integer' ,'scale',1);275 WriteData(fid,'object',self,'class','smb','fieldname','Ta','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1); 276 WriteData(fid,'object',self,'class','smb','fieldname','V','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1); 277 WriteData(fid,'object',self,'class','smb','fieldname','dswrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1); 278 WriteData(fid,'object',self,'class','smb','fieldname','dlwrf','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1); 279 WriteData(fid,'object',self,'class','smb','fieldname','P','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1); 280 WriteData(fid,'object',self,'class','smb','fieldname','eAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1); 281 WriteData(fid,'object',self,'class','smb','fieldname','pAir','format','DoubleMat','mattype',2,'timeserieslength',md.mesh.numberofelements+1); 282 283 WriteData(fid,'object',self,'class','smb','fieldname','Tmean','format','DoubleMat','mattype',2); 284 WriteData(fid,'object',self,'class','smb','fieldname','C','format','DoubleMat','mattype',2); 285 WriteData(fid,'object',self,'class','smb','fieldname','Tz','format','DoubleMat','mattype',2); 286 WriteData(fid,'object',self,'class','smb','fieldname','Vz','format','DoubleMat','mattype',2); 287 WriteData(fid,'object',self,'class','smb','fieldname','zTop','format','DoubleMat','mattype',2); 288 WriteData(fid,'object',self,'class','smb','fieldname','dzTop','format','DoubleMat','mattype',2); 289 WriteData(fid,'object',self,'class','smb','fieldname','dzMin','format','DoubleMat','mattype',2); 290 WriteData(fid,'object',self,'class','smb','fieldname','zY','format','DoubleMat','mattype',2); 291 WriteData(fid,'object',self,'class','smb','fieldname','zMax','format','DoubleMat','mattype',2); 292 WriteData(fid,'object',self,'class','smb','fieldname','zMin','format','DoubleMat','mattype',2); 293 294 WriteData(fid,'object',self,'class','smb','fieldname','aIdx','format','Integer'); 295 WriteData(fid,'object',self,'class','smb','fieldname','swIdx','format','Integer'); 296 WriteData(fid,'object',self,'class','smb','fieldname','denIdx','format','Integer'); 297 297 WriteData(fid,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double'); 298 298 299 WriteData(fid,'object',self,'class','smb','fieldname','outputFreq','format','Double' ,'scale',1);300 WriteData(fid,'object',self,'class','smb','fieldname','aSnow','format','Double' ,'scale',1);301 WriteData(fid,'object',self,'class','smb','fieldname','aIce','format','Double' ,'scale',1);302 WriteData(fid,'object',self,'class','smb','fieldname','cldFrac','format','Double' ,'scale',1);303 WriteData(fid,'object',self,'class','smb','fieldname','t0wet','format','Double' ,'scale',1);304 WriteData(fid,'object',self,'class','smb','fieldname','t0dry','format','Double' ,'scale',1);305 WriteData(fid,'object',self,'class','smb','fieldname','K','format','Double' ,'scale',1);299 WriteData(fid,'object',self,'class','smb','fieldname','outputFreq','format','Double'); 300 WriteData(fid,'object',self,'class','smb','fieldname','aSnow','format','Double'); 301 WriteData(fid,'object',self,'class','smb','fieldname','aIce','format','Double'); 302 WriteData(fid,'object',self,'class','smb','fieldname','cldFrac','format','Double'); 303 WriteData(fid,'object',self,'class','smb','fieldname','t0wet','format','Double'); 304 WriteData(fid,'object',self,'class','smb','fieldname','t0dry','format','Double'); 305 WriteData(fid,'object',self,'class','smb','fieldname','K','format','Double'); 306 306 307 307 %figure out dt from forcings: … … 321 321 end % }}} 322 322 end 323 end 323 end -
issm/trunk-jpl/src/m/classes/stressbalance.m
r20091 r20407 107 107 %singular solution 108 108 if ((~(any(~isnan(md.stressbalance.spcvx)) | any(~isnan(md.stressbalance.spcvy)))) & ~any(md.mask.groundedice_levelset>0)), 109 md = checkmessage(md,['model is not well posed (singular). You need at least one node with fixed velocity!']);110 109 disp(sprintf('\n !!! Warning: no spc applied, model might not be well posed if no basal friction is applied, check for solution crash\n')); 111 110 end -
issm/trunk-jpl/src/m/classes/thermal.m
r19958 r20407 75 75 76 76 md = checkfield(md,'fieldname','thermal.stabilization','numel',[1],'values',[0 1 2]); 77 md = checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1 );77 md = checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1,'>=',0); 78 78 if (ismember(EnthalpyAnalysisEnum(),analyses) & md.thermal.isenthalpy & dimension(md.mesh)==3), 79 pos=find(md.thermal.spctemperature(1:md.mesh.numberofvertices,:)~=NaN); 79 80 %Make sure the spc are less than melting point 81 TEMP=md.thermal.spctemperature(1:md.mesh.numberofvertices,:); 80 82 replicate=repmat(md.geometry.surface-md.mesh.z,1,size(md.thermal.spctemperature,2)); 81 md = checkfield(md,'fieldname','thermal.spctemperature(find(md.thermal.spctemperature(1:md.mesh.numberofvertices,:)~=NaN))','<=',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate(pos)+10^-5,'message','spctemperature should be less or equal than the adjusted melting point'); 83 pos=find(~isnan(TEMP)); 84 md = checkfield(md,'fieldname','thermal.spctemperature','field',TEMP(pos)',... 85 '<=',md.materials.meltingpoint-md.materials.beta*md.materials.rho_ice*md.constants.g*replicate(pos)+10^-5,... 86 'message','spctemperature should be less or equal than the adjusted melting point'); 87 82 88 md = checkfield(md,'fieldname','thermal.isenthalpy','numel',[1],'values',[0 1]); 83 89 md = checkfield(md,'fieldname','thermal.isdynamicbasalspc','numel', [1],'values',[0 1]);
Note:
See TracChangeset
for help on using the changeset viewer.