from fielddisplay import fielddisplay
from checkfield import checkfield
from WriteData import WriteData
[docs]class transient(object):
"""
TRANSIENT class definition
Usage:
transient=transient();
"""
def __init__(self): # {{{
self.issmb = False
self.ismasstransport = False
self.isstressbalance = False
self.isthermal = False
self.isgroundingline = False
self.isgia = False
self.isesa = False
self.isdamageevolution = False
self.ismovingfront = False
self.ishydrology = False
self.isslr = False
self.isoceancoupling = False
self.iscoupler = False
amr_frequency = 0
self.requested_outputs = []
#set defaults
self.setdefaultparameters()
#}}}
def __repr__(self): # {{{
string=' transient solution parameters:'
string="%s\n%s"%(string,fielddisplay(self,'issmb','indicates if a surface mass balance solution is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'ismasstransport','indicates if a masstransport solution is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'isstressbalance','indicates if a stressbalance solution is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'isthermal','indicates if a thermal solution is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'isgroundingline','indicates if a groundingline migration is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'isgia','indicates if a postglacial rebound is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'isesa','indicates whether an elastic adjustment model is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'isdamageevolution','indicates whether damage evolution is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'ismovingfront','indicates whether a moving front capability is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'ishydrology','indicates whether an hydrology model is used'))
string="%s\n%s"%(string,fielddisplay(self,'isslr','indicates if a sea level rise solution is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'isoceancoupling','indicates whether coupling with an ocean model is used in the transient'))
string="%s\n%s"%(string,fielddisplay(self,'iscoupler','indicates whether different models are being run with need for coupling'))
string="%s\n%s"%(string,fielddisplay(self,'amr_frequency','frequency at which mesh is refined in simulations with multiple time_steps'))
string="%s\n%s"%(string,fielddisplay(self,'requested_outputs','list of additional outputs requested'))
return string
#}}}
[docs] def defaultoutputs(self,md): # {{{
if self.issmb:
return ['SmbMassBalance']
else:
return []
#}}}
[docs] def setallnullparameters(self): # {{{
#Nothing done
self.issmb = False
self.ismasstransport = False
self.isstressbalance = False
self.isthermal = False
self.isgroundingline = False
self.isgia = False
self.isesa = False
self.isdamageevolution = False
self.ismovingfront = False
self.ishydrology = False
self.isoceancoupling = False
self.isslr = False
self.iscoupler = False
self.amr_frequency = 0
#default output
self.requested_outputs=[]
return self
#}}}
[docs] def setdefaultparameters(self): # {{{
#full analysis: Stressbalance, Masstransport and Thermal but no groundingline migration for now
self.issmb = True
self.ismasstransport = True
self.isstressbalance = True
self.isthermal = True
self.isgroundingline = False
self.isgia = False
self.isesa = False
self.isdamageevolution = False
self.ismovingfront = False
self.ishydrology = False
self.isslr = False
self.isoceancoupling = False
self.iscoupler = False
self.amr_frequency = 1
#default output
self.requested_outputs=['default']
return self
#}}}
[docs] def checkconsistency(self,md,solution,analyses): # {{{
#Early return
if not solution=='TransientSolution':
return md
md = checkfield(md,'fieldname','transient.issmb','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.ismasstransport','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.isstressbalance','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.isthermal','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.isgroundingline','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.isgia','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.isesa','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.isdamageevolution','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.ishydrology','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.ismovingfront','numel',[1],'values',[0,1]);
md = checkfield(md,'fieldname','transient.isslr','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.isoceancoupling','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.iscoupler','numel',[1],'values',[0,1])
md = checkfield(md,'fieldname','transient.amr_frequency','numel',[1],'>=',0,'NaN',1,'Inf',1)
md = checkfield(md,'fieldname','transient.requested_outputs','stringrow',1)
if (solution!='TransientSolution') and (md.transient.iscoupling):
md.checkmessage("Coupling with ocean can only be done in transient simulations!")
return md
# }}}
[docs] def marshall(self,prefix,md,fid): # {{{
WriteData(fid,prefix,'object',self,'fieldname','issmb','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','ismasstransport','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isstressbalance','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isthermal','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isgroundingline','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isgia','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isesa','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isdamageevolution','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','ishydrology','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','ismovingfront','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isslr','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','isoceancoupling','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','iscoupler','format','Boolean')
WriteData(fid,prefix,'object',self,'fieldname','amr_frequency','format','Integer')
#process requested outputs
outputs = self.requested_outputs
indices = [i for i, x in enumerate(outputs) if x == 'default']
if len(indices) > 0:
outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
outputs =outputscopy
WriteData(fid,prefix,'data',outputs,'name','md.transient.requested_outputs','format','StringArray')
# }}}