source: issm/trunk-jpl/src/py3/classes/calvinglevermann.py@ 20465

Last change on this file since 20465 was 20465, checked in by jbondzio, 9 years ago

CHG: renaming SpcLevelset to Spclevelset for naming consistency

File size: 2.6 KB
Line 
1from fielddisplay import fielddisplay
2from EnumDefinitions import *
3from StringToEnum import StringToEnum
4from checkfield import checkfield
5from WriteData import WriteData
6
7class 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
55 md = checkfield(md,'fieldname','calving.spclevelset','Inf',1,'timeseries',1)
56 md = checkfield(md,'fieldname','calving.stabilization','values',[0,1,2]);
57 md = checkfield(md,'fieldname','calving.coeff','size',[md.mesh.numberofvertices],'>',0)
58 md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'Inf',1,'size',[md.mesh.numberofvertices],'>=',0)
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 # }}}
Note: See TracBrowser for help on using the repository browser.