source: issm/trunk-jpl/src/py3/classes/geometry.py@ 19895

Last change on this file since 19895 was 19895, checked in by bdef, 9 years ago

NEW:Adding directory to hold the python 3 implementation of the interface

File size: 2.6 KB
Line 
1from project3d import project3d
2from fielddisplay import fielddisplay
3from EnumDefinitions import *
4from checkfield import checkfield
5from WriteData import WriteData
6
7class geometry(object):
8 """
9 GEOMETRY class definition
10
11 Usage:
12 geometry=geometry();
13 """
14
15 def __init__(self): # {{{
16 self.surface = float('NaN')
17 self.thickness = float('NaN')
18 self.base = float('NaN')
19 self.bed = float('NaN')
20 self.hydrostatic_ratio = float('NaN')
21
22 #set defaults
23 self.setdefaultparameters()
24
25 #}}}
26 def __repr__(self): # {{{
27
28 string=" geometry parameters:"
29 string="%s\n%s"%(string,fielddisplay(self,'surface','ice upper surface elevation [m]'))
30 string="%s\n%s"%(string,fielddisplay(self,'thickness','ice thickness [m]'))
31 string="%s\n%s"%(string,fielddisplay(self,'base','ice base elevation [m]'))
32 string="%s\n%s"%(string,fielddisplay(self,'bed','bed elevation [m]'))
33 return string
34 #}}}
35 def extrude(self,md): # {{{
36 self.surface=project3d(md,'vector',self.surface,'type','node')
37 self.thickness=project3d(md,'vector',self.thickness,'type','node')
38 self.hydrostatic_ratio=project3d(md,'vector',self.hydrostatic_ratio,'type','node')
39 self.base=project3d(md,'vector',self.base,'type','node')
40 self.bed=project3d(md,'vector',self.bed,'type','node')
41 return self
42 #}}}
43 def setdefaultparameters(self): # {{{
44 return self
45 #}}}
46 def checkconsistency(self,md,solution,analyses): # {{{
47
48 md = checkfield(md,'fieldname','geometry.surface' ,'NaN',1,'size',[md.mesh.numberofvertices])
49 md = checkfield(md,'fieldname','geometry.base' ,'NaN',1,'size',[md.mesh.numberofvertices])
50 md = checkfield(md,'fieldname','geometry.thickness','NaN',1,'size',[md.mesh.numberofvertices],'>',0,'timeseries',1)
51 if any(abs(self.thickness-self.surface+self.base)>10**-9):
52 md.checkmessage("equality thickness=surface-base violated")
53 if solution==TransientSolutionEnum() and md.transient.isgroundingline:
54 md = checkfield(md,'fieldname','geometry.bed','NaN',1,'size',[md.mesh.numberofvertices])
55
56 return md
57 # }}}
58 def marshall(self,md,fid): # {{{
59 WriteData(fid,'data',self.surface,'format','DoubleMat','mattype',1,'enum',SurfaceEnum())
60 WriteData(fid,'data',self.thickness,'format','DoubleMat','mattype',1,'enum',ThicknessEnum(),'timeserieslength',md.mesh.numberofvertices+1)
61 WriteData(fid,'data',self.base,'format','DoubleMat','mattype',1,'enum',BaseEnum())
62 WriteData(fid,'data',self.bed,'format','DoubleMat','mattype',1,'enum',BedEnum())
63 WriteData(fid,'object',self,'fieldname','hydrostatic_ratio','format','DoubleMat','mattype',1)
64 # }}}
Note: See TracBrowser for help on using the repository browser.