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

Last change on this file since 18649 was 18649, checked in by seroussi, 10 years ago

NEW: added check consistency of front (not all vertices on the front)

File size: 2.0 KB
Line 
1import numpy
2from fielddisplay import fielddisplay
3from EnumDefinitions import *
4from checkfield import checkfield
5from WriteData import WriteData
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 if numpy.sum(isice)==0:
38 raise TypeError("no ice present in the domain")
39
40 icefront=numpy.sum(md.mask.ice_levelset[md.mesh.elements]==0,2)
41 if (max(icefront)==3 and m.strcmp(md.mesh.elementtype(),'Tria')) or (max(icefront==6) and m.strcmp(md.mesh.elementtype(),'Penta')):
42 raise TypeError("At least one element has all nodes on ice front, change md.mask.ice_levelset to fix it")
43
44 return md
45 # }}}
46 def marshall(self,md,fid): # {{{
47 WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
48 WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1)
49
50 # get mask of vertices of elements with ice
51 isice=numpy.array(md.mask.ice_levelset<0.,int)
52 vlist = numpy.zeros((md.mesh.numberofvertices,1), dtype=int)
53 pos=numpy.nonzero(numpy.sum(isice[md.mesh.elements-1],axis=1))[0]
54 vlist[md.mesh.elements[pos,:]-1]=1
55 WriteData(fid,'data',vlist,'enum',IceMaskNodeActivationEnum(),'format','DoubleMat','mattype',1);
56 # }}}
Note: See TracBrowser for help on using the repository browser.