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 |
|
---|
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 | # }}}
|
---|