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

Last change on this file since 20453 was 20453, checked in by Mathieu Morlighem, 9 years ago

CHG: do not marshall NodeActivationMask, this is now done automatically by FemModel->InitFromFile. We also now alow positive levelsets for every solutions (presumably...)

File size: 1.9 KB
RevLine 
[17222]1import numpy
[12038]2from fielddisplay import fielddisplay
[19048]3from project3d import project3d
[12949]4from EnumDefinitions import *
[17497]5from checkfield import checkfield
6from WriteData import WriteData
[19443]7import MatlabFuncs as m
[12038]8
[12958]9class mask(object):
10 """
11 MASK class definition
12
13 Usage:
14 mask=mask();
15 """
16
[14640]17 def __init__(self): # {{{
[15961]18 self.ice_levelset = float('NaN')
19 self.groundedice_levelset = float('NaN')
[12123]20
21 #set defaults
22 self.setdefaultparameters()
23
[12038]24 #}}}
[14640]25 def __repr__(self): # {{{
[14141]26 string=" masks:"
[12038]27
[15942]28 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"))
[17214]29 string="%s\n%s"%(string,fielddisplay(self,"ice_levelset","presence of ice if < 0, icefront position if = 0, no ice if > 0"))
[12038]30 return string
31 #}}}
[19048]32 def extrude(self,md): # {{{
33 self.ice_levelset=project3d(md,'vector',self.ice_levelset,'type','node')
34 self.groundedice_levelset=project3d(md,'vector',self.groundedice_levelset,'type','node')
35 return self
36 #}}}
[14640]37 def setdefaultparameters(self): # {{{
[12958]38 return self
[12123]39 #}}}
[12949]40 def checkconsistency(self,md,solution,analyses): # {{{
41
[16764]42 md = checkfield(md,'fieldname','mask.ice_levelset' ,'size',[md.mesh.numberofvertices])
[18068]43 isice=numpy.array(md.mask.ice_levelset<=0,int)
44 if numpy.sum(isice)==0:
45 raise TypeError("no ice present in the domain")
[12949]46
[18652]47 icefront=numpy.sum(md.mask.ice_levelset[md.mesh.elements-1]==0,axis=1)
[18649]48 if (max(icefront)==3 and m.strcmp(md.mesh.elementtype(),'Tria')) or (max(icefront==6) and m.strcmp(md.mesh.elementtype(),'Penta')):
49 raise TypeError("At least one element has all nodes on ice front, change md.mask.ice_levelset to fix it")
50
[12949]51 return md
52 # }}}
[15131]53 def marshall(self,md,fid): # {{{
[15942]54 WriteData(fid,'object',self,'fieldname','groundedice_levelset','format','DoubleMat','mattype',1)
55 WriteData(fid,'object',self,'fieldname','ice_levelset','format','DoubleMat','mattype',1)
[12949]56 # }}}
Note: See TracBrowser for help on using the repository browser.