Changeset 20407


Ignore:
Timestamp:
03/31/16 11:33:33 (9 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added some checks to thermal and changed cosmetics in other files

Location:
issm/trunk-jpl/src/m/classes
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/classes/SMBgemb.m

    r19897 r20407  
    141141
    142142                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 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);
     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);
    196196
    197197                end % }}}
     
    273273                        WriteData(fid,'object',self,'class','smb','fieldname','isgraingrowth','format','Boolean');
    274274                       
    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');
    297297                        WriteData(fid,'object',self,'class','smb','fieldname','InitDensityScaling','format','Double');
    298298
    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');
    306306
    307307                        %figure out dt from forcings:
     
    321321                end % }}}
    322322        end
    323 end             
     323end
  • issm/trunk-jpl/src/m/classes/stressbalance.m

    r20091 r20407  
    107107                        %singular solution
    108108                        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!']);
    110109                                disp(sprintf('\n !!! Warning: no spc applied, model might not be well posed if no basal friction is applied, check for solution crash\n'));
    111110                        end
  • issm/trunk-jpl/src/m/classes/thermal.m

    r19958 r20407  
    7575
    7676                        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);
    7878                        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,:);
    8082                                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
    8288                                md = checkfield(md,'fieldname','thermal.isenthalpy','numel',[1],'values',[0 1]);
    8389                                md = checkfield(md,'fieldname','thermal.isdynamicbasalspc','numel', [1],'values',[0 1]);
Note: See TracChangeset for help on using the changeset viewer.