Changeset 23833
- Timestamp:
- 04/08/19 16:35:05 (6 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/classes/SMBcomponents.py
r23814 r23833 5 5 6 6 class SMBcomponents(object): 7 8 7 """ 8 SMBcomponents Class definition 9 9 10 11 12 10 Usage: 11 SMBcomponents=SMBcomponents(); 12 """ 13 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 14 def __init__(self): # {{{ 15 self.accumulation = float('NaN') 16 self.runoff = float('NaN') 17 self.evaporation = float('NaN') 18 self.isclimatology = 0 19 self.requested_outputs = [] 20 #}}} 21 def __repr__(self): # {{{ 22 string=" surface forcings parameters (SMB=accumulation-runoff-evaporation) :" 23 string="%s\n%s"%(string,fielddisplay(self,'accumulation','accumulated snow [m/yr ice eq]')) 24 string="%s\n%s"%(string,fielddisplay(self,'runoff','amount of ice melt lost from the ice column [m/yr ice eq]')) 25 string="%s\n%s"%(string,fielddisplay(self,'evaporation','mount of ice lost to evaporative processes [m/yr ice eq]')) 26 string="%s\n%s"%(string,fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)')) 27 string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested')) 28 return string 29 #}}} 30 def extrude(self,md): # {{{ 31 31 32 33 34 35 36 37 38 39 40 32 self.mass_balance=project3d(md,'vector',self.accumulation,'type','node'); 33 self.mass_balance=project3d(md,'vector',self.runoff,'type','node'); 34 self.mass_balance=project3d(md,'vector',self.evaporation,'type','node'); 35 return self 36 #}}} 37 def defaultoutputs(self,md): # {{{ 38 return [] 39 #}}} 40 def initialize(self,md): # {{{ 41 41 42 43 44 42 if np.all(np.isnan(self.accumulation)): 43 self.accumulation=np.zeros((md.mesh.numberofvertices)) 44 print(" no SMB.accumulation specified: values set as zero") 45 45 46 47 48 46 if np.all(np.isnan(self.runoff)): 47 self.runoff=np.zeros((md.mesh.numberofvertices)) 48 print(" no SMB.runoff specified: values set as zero") 49 49 50 51 52 50 if np.all(np.isnan(self.evaporation)): 51 self.evaporation=np.zeros((md.mesh.numberofvertices)) 52 print(" no SMB.evaporation specified: values set as zero") 53 53 54 55 56 54 return self 55 #}}} 56 def checkconsistency(self,md,solution,analyses): # {{{ 57 57 58 59 58 if 'MasstransportAnalysis' in analyses: 59 md = checkfield(md,'fieldname','smb.accumulation','timeseries',1,'NaN',1,'Inf',1) 60 60 61 62 61 if 'BalancethicknessAnalysis' in analyses: 62 md = checkfield(md,'fieldname','smb.accumulation','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 63 63 64 65 64 if 'MasstransportAnalysis' in analyses: 65 md = checkfield(md,'fieldname','smb.runoff','timeseries',1,'NaN',1,'Inf',1) 66 66 67 68 67 if 'BalancethicknessAnalysis' in analyses: 68 md = checkfield(md,'fieldname','smb.runoff','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 69 69 70 71 70 if 'MasstransportAnalysis' in analyses: 71 md = checkfield(md,'fieldname','smb.evaporation','timeseries',1,'NaN',1,'Inf',1) 72 72 73 74 75 76 77 73 if 'BalancethicknessAnalysis' in analyses: 74 md = checkfield(md,'fieldname','smb.evaporation','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 75 76 md = checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1) 77 md = checkfield(md,'fieldname','smb.isclimatology','values',[0,1]) 78 78 79 80 81 79 return md 80 # }}} 81 def marshall(self,prefix,md,fid): # {{{ 82 82 83 83 yts=md.constants.yts 84 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 85 WriteData(fid,prefix,'name','md.smb.model','data',2,'format','Integer'); 86 WriteData(fid,prefix,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 87 WriteData(fid,prefix,'object',self,'class','smb','fieldname','runoff','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 88 WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 89 90 #process requested outputs 91 outputs = self.requested_outputs 92 indices = [i for i, x in enumerate(outputs) if x == 'default'] 93 if len(indices) > 0: 94 outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:] 95 outputs =outputscopy 96 WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray') 97 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean') 98 if (self.isclimatology>0): 99 md = checkfield(md,'fieldname', 'smb.accumulation', 'size',[md.mesh.numberofvertices+1],'message','accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology') 100 md = checkfield(md,'fieldname', 'smb.runoff', 'size',[md.mesh.numberofvertices+1],'message','runoff must have md.mesh.numberofvertices+1 rows in order to force a climatology') 101 md = checkfield(md,'fieldname', 'smb.evaporation', 'size',[md.mesh.numberofvertices+1],'message','evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology') 102 102 103 103 # }}} -
issm/trunk-jpl/src/m/classes/SMBforcing.py
r23814 r23833 6 6 7 7 class SMBforcing(object): 8 9 8 """ 9 SMBforcing Class definition 10 10 11 12 13 11 Usage: 12 SMB=SMBforcing(); 13 """ 14 14 15 16 17 18 19 20 21 22 23 24 25 26 27 15 def __init__(self): # {{{ 16 self.mass_balance = float('NaN') 17 self.requested_outputs = [] 18 self.isclimatology = 0 19 #}}} 20 def __repr__(self): # {{{ 21 string=" surface forcings parameters:" 22 string="%s\n%s"%(string,fielddisplay(self,'mass_balance','surface mass balance [m/yr ice eq]')) 23 string="%s\n%s"%(string,fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)')) 24 string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested')) 25 return string 26 #}}} 27 def extrude(self,md): # {{{ 28 28 29 30 31 32 33 34 35 29 self.mass_balance=project3d(md,'vector',self.mass_balance,'type','node'); 30 return self 31 #}}} 32 def defaultoutputs(self,md): # {{{ 33 return [] 34 #}}} 35 def initialize(self,md): # {{{ 36 36 37 38 39 37 if np.all(np.isnan(self.mass_balance)): 38 self.mass_balance=np.zeros((md.mesh.numberofvertices)) 39 print(" no SMBforcing.mass_balance specified: values set as zero") 40 40 41 42 43 41 return self 42 #}}} 43 def checkconsistency(self,md,solution,analyses): # {{{ 44 44 45 46 45 if 'MasstransportAnalysis' in analyses: 46 md = checkfield(md,'fieldname','smb.mass_balance','timeseries',1,'NaN',1,'Inf',1) 47 47 48 49 48 if 'BalancethicknessAnalysis' in analyses: 49 md = checkfield(md,'fieldname','smb.mass_balance','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 50 50 51 52 53 54 51 md = checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1) 52 md = checkfield(md,'fieldname','smb.isclimatology','values',[0,1]) 53 if (self.isclimatology>0): 54 md = checkfield(md,'fieldname', 'smb.mass_balance', 'size',[md.mesh.numberofvertices+1],'message','mass_balance must have md.mesh.numberofvertices+1 rows in order to force a climatology') 55 55 56 57 58 56 return md 57 # }}} 58 def marshall(self,prefix,md,fid): # {{{ 59 59 60 60 yts=md.constants.yts 61 61 62 63 64 65 66 67 68 69 70 71 72 73 62 WriteData(fid,prefix,'name','md.smb.model','data',1,'format','Integer'); 63 WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 64 #WriteData(fid,prefix,'object',self,'class','smb','fieldname','mass_balance','format','CompressedMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts); 65 66 #process requested outputs 67 outputs = self.requested_outputs 68 indices = [i for i, x in enumerate(outputs) if x == 'default'] 69 if len(indices) > 0: 70 outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:] 71 outputs =outputscopy 72 WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray') 73 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean') 74 74 75 75 # }}} -
issm/trunk-jpl/src/m/classes/SMBmeltcomponents.py
r23814 r23833 5 5 6 6 class SMBmeltcomponents(object): 7 8 7 """ 8 SMBmeltcomponents Class definition 9 9 10 11 12 10 Usage: 11 SMBmeltcomponents=SMBmeltcomponents(); 12 """ 13 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 14 def __init__(self): # {{{ 15 self.accumulation = float('NaN') 16 self.runoff = float('NaN') 17 self.evaporation = float('NaN') 18 self.isclimatology = 0 19 self.requested_outputs = [] 20 #}}} 21 def __repr__(self): # {{{ 22 string=" surface forcings parameters with melt (SMB=accumulation-evaporation-melt+refreeze) :" 23 string="%s\n%s"%(string,fielddisplay(self,'accumulation','accumulated snow [m/yr ice eq]')) 24 string="%s\n%s"%(string,fielddisplay(self,'evaporation','mount of ice lost to evaporative processes [m/yr ice eq]')) 25 string="%s\n%s"%(string,fielddisplay(self,'melt','amount of ice melt in the ice column [m/yr ice eq]')) 26 string="%s\n%s"%(string,fielddisplay(self,'refreeze','amount of ice melt refrozen in the ice column [m/yr ice eq]')) 27 string="%s\n%s"%(string,fielddisplay(self,'isclimatology','repeat all forcings when past last forcing time (default false)')) 28 string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','additional outputs requested')) 29 return string 30 #}}} 31 def extrude(self,md): # {{{ 32 32 33 34 35 36 37 38 39 40 41 42 33 self.accumulation=project3d(md,'vector',self.accumulation,'type','node'); 34 self.evaporation=project3d(md,'vector',self.evaporation,'type','node'); 35 self.melt=project3d(md,'vector',self.melt,'type','node'); 36 self.refreeze=project3d(md,'vector',self.refreeze,'type','node'); 37 return self 38 #}}} 39 def defaultoutputs(self,md): # {{{ 40 return [] 41 #}}} 42 def initialize(self,md): # {{{ 43 43 44 45 46 44 if np.all(np.isnan(self.accumulation)): 45 self.accumulation=np.zeros((md.mesh.numberofvertices)) 46 print(" no SMB.accumulation specified: values set as zero") 47 47 48 49 50 48 if np.all(np.isnan(self.evaporation)): 49 self.evaporation=np.zeros((md.mesh.numberofvertices)) 50 print(" no SMB.evaporation specified: values set as zero") 51 51 52 53 54 52 if np.all(np.isnan(self.melt)): 53 self.melt=np.zeros((md.mesh.numberofvertices)) 54 print(" no SMB.melt specified: values set as zero") 55 55 56 57 58 56 if np.all(np.isnan(self.refreeze)): 57 self.refreeze=np.zeros((md.mesh.numberofvertices)) 58 print(" no SMB.refreeze specified: values set as zero") 59 59 60 61 62 60 return self 61 #}}} 62 def checkconsistency(self,md,solution,analyses): # {{{ 63 63 64 65 64 if 'MasstransportAnalysis' in analyses: 65 md = checkfield(md,'fieldname','smb.accumulation','timeseries',1,'NaN',1,'Inf',1) 66 66 67 68 67 if 'BalancethicknessAnalysis' in analyses: 68 md = checkfield(md,'fieldname','smb.accumulation','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 69 69 70 71 70 if 'MasstransportAnalysis' in analyses: 71 md = checkfield(md,'fieldname','smb.melt','timeseries',1,'NaN',1,'Inf',1) 72 72 73 74 73 if 'BalancethicknessAnalysis' in analyses: 74 md = checkfield(md,'fieldname','smb.melt','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 75 75 76 77 76 if 'MasstransportAnalysis' in analyses: 77 md = checkfield(md,'fieldname','smb.refreeze','timeseries',1,'NaN',1,'Inf',1) 78 78 79 80 79 if 'BalancethicknessAnalysis' in analyses: 80 md = checkfield(md,'fieldname','smb.refreeze','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 81 81 82 83 82 if 'MasstransportAnalysis' in analyses: 83 md = checkfield(md,'fieldname','smb.evaporation','timeseries',1,'NaN',1,'Inf',1) 84 84 85 86 85 if 'BalancethicknessAnalysis' in analyses: 86 md = checkfield(md,'fieldname','smb.evaporation','size',[md.mesh.numberofvertices],'NaN',1,'Inf',1) 87 87 88 89 90 91 92 88 md = checkfield(md,'fieldname','masstransport.requested_outputs','stringrow',1) 89 md = checkfield(md,'fieldname','smb.isclimatology','values',[0,1]) 90 return md 91 # }}} 92 def marshall(self,prefix,md,fid): # {{{ 93 93 94 94 yts=md.constants.yts 95 95 96 97 98 99 100 96 WriteData(fid,prefix,'name','md.smb.model','data',3,'format','Integer'); 97 WriteData(fid,prefix,'object',self,'class','smb','fieldname','accumulation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 98 WriteData(fid,prefix,'object',self,'class','smb','fieldname','evaporation','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 99 WriteData(fid,prefix,'object',self,'class','smb','fieldname','melt','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 100 WriteData(fid,prefix,'object',self,'class','smb','fieldname','refreeze','format','DoubleMat','mattype',1,'scale',1./yts,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts) 101 101 102 103 104 105 106 107 108 109 110 111 112 113 114 102 #process requested outputs 103 outputs = self.requested_outputs 104 indices = [i for i, x in enumerate(outputs) if x == 'default'] 105 if len(indices) > 0: 106 outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:] 107 outputs =outputscopy 108 WriteData(fid,prefix,'data',outputs,'name','md.smb.requested_outputs','format','StringArray') 109 WriteData(fid,prefix,'object',self,'class','smb','fieldname','isclimatology','format','Boolean') 110 if (self.isclimatology>0): 111 md = checkfield(md,'fieldname', 'smb.accumulation', 'size',[md.mesh.numberofvertices+1],'message','accumulation must have md.mesh.numberofvertices+1 rows in order to force a climatology') 112 md = checkfield(md,'fieldname', 'smb.melt', 'size',[md.mesh.numberofvertices+1],'message','melt must have md.mesh.numberofvertices+1 rows in order to force a climatology') 113 md = checkfield(md,'fieldname', 'smb.refreeze', 'size',[md.mesh.numberofvertices+1],'message','refreeze must have md.mesh.numberofvertices+1 rows in order to force a climatology') 114 md = checkfield(md,'fieldname', 'smb.evaporation', 'size',[md.mesh.numberofvertices+1],'message','evaporation must have md.mesh.numberofvertices+1 rows in order to force a climatology') 115 115 116 116 # }}} -
issm/trunk-jpl/src/m/classes/geometry.py
r23831 r23833 60 60 md.checkmessage('base<bed on one or more vertex') 61 61 pos = np.where(md.mask.groundedice_levelset > 0) 62 if np.any(np.abs(self.bed[pos]-self.base[pos] >10**-9):62 if np.any(np.abs(self.bed[pos]-self.base[pos])>10**-9): 63 63 md.checkmessage('equality base=bed on grounded ice violated') 64 64 md = checkfield(md,'fieldname','geometry.bed','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) -
issm/trunk-jpl/src/m/classes/initialization.py
r23812 r23833 7 7 8 8 class initialization(object): 9 10 11 12 13 14 9 """ 10 INITIALIZATION class definition 11 12 Usage: 13 initialization=initialization(); 14 """ 15 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 16 def __init__(self): # {{{ 17 18 self.vx = float('NaN') 19 self.vy = float('NaN') 20 self.vz = float('NaN') 21 self.vel = float('NaN') 22 self.enthalpy = float('NaN') 23 self.pressure = float('NaN') 24 self.temperature = float('NaN') 25 self.waterfraction = float('NaN') 26 self.watercolumn = float('NaN') 27 self.sediment_head = float('NaN') 28 self.epl_head = float('NaN') 29 self.epl_thickness = float('NaN') 30 30 31 32 31 #set defaults 32 self.setdefaultparameters() 33 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 34 #}}} 35 def __repr__(self): # {{{ 36 string=' initial field values:' 37 string="%s\n%s"%(string,fielddisplay(self,'vx','x component of velocity [m/yr]')) 38 string="%s\n%s"%(string,fielddisplay(self,'vy','y component of velocity [m/yr]')) 39 string="%s\n%s"%(string,fielddisplay(self,'vz','z component of velocity [m/yr]')) 40 string="%s\n%s"%(string,fielddisplay(self,'vel','velocity norm [m/yr]')) 41 string="%s\n%s"%(string,fielddisplay(self,'pressure','pressure [Pa]')) 42 string="%s\n%s"%(string,fielddisplay(self,'temperature','temperature [K]')) 43 string="%s\n%s"%(string,fielddisplay(self,'enthalpy','enthalpy [J]')) 44 string="%s\n%s"%(string,fielddisplay(self,'waterfraction','fraction of water in the ice')) 45 string="%s\n%s"%(string,fielddisplay(self,'watercolumn','thickness of subglacial water [m]')) 46 string="%s\n%s"%(string,fielddisplay(self,'sediment_head','sediment water head of subglacial system [m]')) 47 string="%s\n%s"%(string,fielddisplay(self,'epl_head','epl water head of subglacial system [m]')) 48 string="%s\n%s"%(string,fielddisplay(self,'epl_thickness','thickness of the epl [m]')) 49 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 50 return string 51 #}}} 52 def extrude(self,md): # {{{ 53 self.vx=project3d(md,'vector',self.vx,'type','node') 54 self.vy=project3d(md,'vector',self.vy,'type','node') 55 self.vz=project3d(md,'vector',self.vz,'type','node') 56 self.vel=project3d(md,'vector',self.vel,'type','node') 57 self.temperature=project3d(md,'vector',self.temperature,'type','node') 58 self.enthalpy=project3d(md,'vector',self.enthalpy,'type','node') 59 self.waterfraction=project3d(md,'vector',self.waterfraction,'type','node') 60 self.watercolumn=project3d(md,'vector',self.watercolumn,'type','node') 61 self.sediment_head=project3d(md,'vector',self.sediment_head,'type','node','layer',1) 62 self.epl_head=project3d(md,'vector',self.epl_head,'type','node','layer',1) 63 self.epl_thickness=project3d(md,'vector',self.epl_thickness,'type','node','layer',1) 64 64 65 66 #self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface[:,0]-md.mesh.z)67 65 #Lithostatic pressure by default 66 # self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface[:,0]-md.mesh.z) 67 #self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z.reshape(-1,)) 68 68 69 70 71 72 73 69 if np.ndim(md.geometry.surface)==2: 70 print('Reshaping md.geometry.surface for you convenience but you should fix it in you files') 71 self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface.reshape(-1,)-md.mesh.z) 72 else: 73 self.pressure=md.constants.g*md.materials.rho_ice*(md.geometry.surface-md.mesh.z) 74 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 md = checkfield(md,'fieldname', 'delta Tpmp', 'field', np.absolute(md.initialization.temperature[pos]-(md.materials.meltingpoint-md.materials.beta*md.initialization.pressure[pos])),'<',1e-11,'message','set temperature to pressure melting point at locations with waterfraction>0');108 109 110 111 112 113 114 115 116 117 118 75 return self 76 #}}} 77 def setdefaultparameters(self): # {{{ 78 return self 79 #}}} 80 def checkconsistency(self,md,solution,analyses): # {{{ 81 if 'StressbalanceAnalysis' in analyses: 82 if not np.any(np.logical_or(np.isnan(md.initialization.vx),np.isnan(md.initialization.vy))): 83 md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 84 md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 85 if 'MasstransportAnalysis' in analyses: 86 md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 87 md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 88 if 'BalancethicknessAnalysis' in analyses: 89 md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 90 md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 91 #Triangle with zero velocity 92 if np.any(np.logical_and(np.sum(np.abs(md.initialization.vx[md.mesh.elements-1]),axis=1)==0,\ 93 np.sum(np.abs(md.initialization.vy[md.mesh.elements-1]),axis=1)==0)): 94 md.checkmessage("at least one triangle has all its vertices with a zero velocity") 95 if 'ThermalAnalysis' in analyses: 96 md = checkfield(md,'fieldname','initialization.vx','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 97 md = checkfield(md,'fieldname','initialization.vy','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 98 md = checkfield(md,'fieldname','initialization.temperature','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 99 if md.mesh.dimension()==3: 100 md = checkfield(md,'fieldname','initialization.vz','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 101 md = checkfield(md,'fieldname','initialization.pressure','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 102 if ('EnthalpyAnalysis' in analyses and md.thermal.isenthalpy): 103 md = checkfield(md,'fieldname','initialization.waterfraction','>=',0,'size',[md.mesh.numberofvertices]) 104 md = checkfield(md,'fieldname','initialization.watercolumn' ,'>=',0,'size',[md.mesh.numberofvertices]) 105 pos = np.nonzero(md.initialization.waterfraction > 0.)[0] 106 if(pos.size): 107 md = checkfield(md,'fieldname', 'delta Tpmp', 'field', np.absolute(md.initialization.temperature[pos]-(md.materials.meltingpoint-md.materials.beta*md.initialization.pressure[pos])),'<',1e-11, 'message','set temperature to pressure melting point at locations with waterfraction>0'); 108 if 'HydrologyShreveAnalysis' in analyses: 109 if hasattr(md.hydrology,'hydrologyshreve'): 110 md = checkfield(md,'fieldname','initialization.watercolumn','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 111 if 'HydrologyDCInefficientAnalysis' in analyses: 112 if hasattr(md.hydrology,'hydrologydc'): 113 md = checkfield(md,'fieldname','initialization.sediment_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 114 if 'HydrologyDCEfficientAnalysis' in analyses: 115 if hasattr(md.hydrology,'hydrologydc'): 116 if md.hydrology.isefficientlayer==1: 117 md = checkfield(md,'fieldname','initialization.epl_head','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 118 md = checkfield(md,'fieldname','initialization.epl_thickness','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices]) 119 119 120 121 122 120 return md 121 # }}} 122 def marshall(self,prefix,md,fid): # {{{ 123 123 124 124 yts=md.constants.yts 125 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 126 WriteData(fid,prefix,'object',self,'fieldname','vx','format','DoubleMat','mattype',1,'scale',1./yts) 127 WriteData(fid,prefix,'object',self,'fieldname','vy','format','DoubleMat','mattype',1,'scale',1./yts) 128 WriteData(fid,prefix,'object',self,'fieldname','vz','format','DoubleMat','mattype',1,'scale',1./yts) 129 WriteData(fid,prefix,'object',self,'fieldname','pressure','format','DoubleMat','mattype',1) 130 WriteData(fid,prefix,'object',self,'fieldname','temperature','format','DoubleMat','mattype',1) 131 WriteData(fid,prefix,'object',self,'fieldname','waterfraction','format','DoubleMat','mattype',1) 132 WriteData(fid,prefix,'object',self,'fieldname','sediment_head','format','DoubleMat','mattype',1) 133 WriteData(fid,prefix,'object',self,'fieldname','epl_head','format','DoubleMat','mattype',1) 134 WriteData(fid,prefix,'object',self,'fieldname','epl_thickness','format','DoubleMat','mattype',1) 135 WriteData(fid,prefix,'object',self,'fieldname','watercolumn','format','DoubleMat','mattype',1) 136 137 if md.thermal.isenthalpy: 138 if (np.size(self.enthalpy)<=1): 139 tpmp = md.materials.meltingpoint - md.materials.beta*md.initialization.pressure; 140 pos = np.nonzero(md.initialization.waterfraction > 0.)[0] 141 self.enthalpy = md.materials.heatcapacity*(md.initialization.temperature-md.constants.referencetemperature); 142 self.enthalpy[pos] = md.materials.heatcapacity*(tpmp[pos].reshape(-1,) - md.constants.referencetemperature) + md.materials.latentheat*md.initialization.waterfraction[pos].reshape(-1,) 143 143 144 144 WriteData(fid,prefix,'data',self.enthalpy,'format','DoubleMat','mattype',1,'name','md.initialization.enthalpy'); 145 145 146 146 # }}} -
issm/trunk-jpl/test/NightlyRun/runme.py
r23831 r23833 229 229 230 230 if __name__ == '__main__': 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 231 if 'PYTHONSTARTUP' in os.environ: 232 PYTHONSTARTUP = os.environ['PYTHONSTARTUP'] 233 #print 'PYTHONSTARTUP =', PYTHONSTARTUP 234 if os.path.exists(PYTHONSTARTUP): 235 try: 236 exec(compile(open(PYTHONSTARTUP).read(), PYTHONSTARTUP, 'exec')) 237 except Exception as e: 238 print("PYTHONSTARTUP error: ", e) 239 else: 240 print(("PYTHONSTARTUP file '{}' does not exist.".format(PYTHONSTARTUP))) 241 242 parser = argparse.ArgumentParser(description='RUNME - test deck for ISSM nightly runs') 243 parser.add_argument('-i', '--id', nargs='*', type=int, help='followed by the list of ids requested', default=[]) 244 parser.add_argument('-in', '--include_name', nargs='*', type=str, help='followed by the list of test names requested', default=[]) 245 parser.add_argument('-e', '--exclude', nargs='+', type=int, help='ids to be excluded from the test', default=[]) 246 parser.add_argument('-en', '--exclude_name', nargs='+', type=str, help='test names to be excluded from the test', default=[]) 247 parser.add_argument('-b', '--benchmark', help='nightly/ismip/eismint/thermal/mesh/...', default='nightly') 248 parser.add_argument('-p', '--procedure', help='check/update', default='check') 249 parser.add_argument('-o', '--output', help='nightly/daily/none', default='none') 250 parser.add_argument('-r', '--rank', type=int, help='rank', default=1) 251 parser.add_argument('-n', '--numprocs', type=int, help='numprocs', default=1) 252 args = parser.parse_args() 253 254 md = runme([args.id, args.include_name], [args.exclude, args.exclude_name], args.benchmark, args.procedure, args.output, args.rank, args.numprocs) 255 256 exit(md) 257 257 else: 258 258 print("PYTHONSTARTUP not defined in environment")
Note:
See TracChangeset
for help on using the changeset viewer.