[19895] | 1 | from fielddisplay import fielddisplay
|
---|
| 2 | from EnumDefinitions import *
|
---|
| 3 | from StringToEnum import StringToEnum
|
---|
| 4 | from checkfield import checkfield
|
---|
| 5 | from WriteData import WriteData
|
---|
| 6 |
|
---|
| 7 | class calvinglevermann(object):
|
---|
| 8 | """
|
---|
| 9 | CALVINGLEVERMANN class definition
|
---|
| 10 |
|
---|
| 11 | Usage:
|
---|
| 12 | calvinglevermann=calvinglevermann();
|
---|
| 13 | """
|
---|
| 14 |
|
---|
| 15 | def __init__(self): # {{{
|
---|
| 16 |
|
---|
| 17 | self.stabilization = 0
|
---|
| 18 | self.spclevelset = float('NaN')
|
---|
| 19 | self.coeff = float('NaN')
|
---|
| 20 | self.meltingrate = float('NaN')
|
---|
| 21 |
|
---|
| 22 | #set defaults
|
---|
| 23 | self.setdefaultparameters()
|
---|
| 24 |
|
---|
| 25 | #}}}
|
---|
| 26 | def __repr__(self): # {{{
|
---|
| 27 | string=' Calving Levermann parameters:'
|
---|
| 28 | string="%s\n%s"%(string,fielddisplay(self,'spclevelset','levelset constraints (NaN means no constraint)'))
|
---|
| 29 | string="%s\n%s"%(string,fielddisplay(self,'stabilization','0: no, 1: artificial_diffusivity, 2: streamline upwinding'))
|
---|
| 30 | string="%s\n%s"%(string,fielddisplay(self,'coeff','proportionality coefficient in Levermann model'))
|
---|
| 31 | string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]'))
|
---|
| 32 |
|
---|
| 33 | return string
|
---|
| 34 | #}}}
|
---|
| 35 | def extrude(self,md): # {{{
|
---|
| 36 | self.spclevelset=project3d(md,'vector',self.spclevelset,'type','node')
|
---|
| 37 | self.coeff=project3d(md,'vector',self.coeff,'type','node')
|
---|
| 38 | self.meltingrate=project3d(md,'vector',self.meltingrate,'type','node')
|
---|
| 39 | return self
|
---|
| 40 | #}}}
|
---|
| 41 | def setdefaultparameters(self): # {{{
|
---|
| 42 |
|
---|
| 43 | #stabilization = 2 by default
|
---|
| 44 | self.stabilization = 2
|
---|
| 45 |
|
---|
| 46 | #Proportionality coefficient in Levermann model
|
---|
| 47 | self.coeff=2e13;
|
---|
| 48 | #}}}
|
---|
| 49 | def checkconsistency(self,md,solution,analyses): # {{{
|
---|
| 50 |
|
---|
| 51 | #Early return
|
---|
| 52 | if (solution!=TransientSolutionEnum()) or (not md.transient.iscalving):
|
---|
| 53 | return md
|
---|
| 54 |
|
---|
[19903] | 55 | md = checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1)
|
---|
[19895] | 56 | md = checkfield(md,'fieldname','calving.stabilization','values',[0,1,2]);
|
---|
| 57 | md = checkfield(md,'fieldname','calving.coeff','size',[md.mesh.numberofvertices],'>',0)
|
---|
[19898] | 58 | md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>=',0)
|
---|
[19895] | 59 | return md
|
---|
| 60 | # }}}
|
---|
| 61 | def marshall(self,md,fid): # {{{
|
---|
| 62 | yts=365.*24.*3600.
|
---|
| 63 | WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer');
|
---|
| 64 | WriteData(fid,'enum',LevelsetStabilizationEnum(),'data',self.stabilization,'format','Integer');
|
---|
| 65 | WriteData(fid,'enum',SpcLevelsetEnum(),'data',self.spclevelset,'format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1);
|
---|
| 66 | WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1)
|
---|
| 67 | WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'scale',1./yts)
|
---|
| 68 | # }}}
|
---|