source: issm/trunk-jpl/src/m/classes/mask.py@ 17283

Last change on this file since 17283 was 17283, checked in by jbondzio, 11 years ago

BUG: in lsm, an element has ice only if at least one of its vertices has a negative levelset function value

File size: 1.8 KB
Line 
1import numpy
2from fielddisplay import fielddisplay
3from EnumDefinitions import *
4from checkfield import *
5from WriteData import *
6
7class mask(object):
8 """
9 MASK class definition
10
11 Usage:
12 mask=mask();
13 """
14
15 def __init__(self): # {{{
16 self.ice_levelset = float('NaN')
17 self.groundedice_levelset = float('NaN')
18
19 #set defaults
20 self.setdefaultparameters()
21
22 #}}}
23 def __repr__(self): # {{{
24 string=" masks:"
25
26 string="%s\n%s"%(string,fielddisplay(self,"groundedice_levelset","is ice grounded ? grounded ice if > 0, grounding line position if = 0, floating ice if < 0"))
27 string="%s\n%s"%(string,fielddisplay(self,"ice_levelset","presence of ice if < 0, icefront position if = 0, no ice if > 0"))
28 return string
29 #}}}
30 def setdefaultparameters(self): # {{{
31 return self
32 #}}}
33 def checkconsistency(self,md,solution,analyses): # {{{
34
35 md = checkfield(md,'fieldname','mask.ice_levelset' ,'size',[md.mesh.numberofvertices])
36 #isice=numpy.array(md.mask.ice_levelset<0,int)
37 #totallyicefree=(numpy.sum(isice[md.mesh.elements-1],axis=1)==0).astype(int)
38 #if any(totallyicefree):
39 # raise TypeError("elements with no ice not implemented yet, each element should have at least one vertex with md.mask.ice_levelset > 0")
40
41 return md
42 # }}}
43 def marshall(self,md,fid): # {{{
44 WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
45 WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1)
46
47 # get mask of vertices of elements with ice
48 isice=numpy.array(md.mask.ice_levelset<0.,int)
49 vlist = numpy.zeros((md.mesh.numberofvertices,1), dtype=int)
50 pos=numpy.nonzero(numpy.sum(isice[md.mesh.elements-1],axis=1))[0]
51 vlist[md.mesh.elements[pos,:]-1]=1
52 WriteData(fid,'data',vlist,'enum',IceMaskNodeActivationEnum(),'format','DoubleMat','mattype',1);
53 # }}}
Note: See TracBrowser for help on using the repository browser.