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

Last change on this file since 24901 was 24901, checked in by jdquinn, 5 years ago

CHG: MATLAB -> Python translation; fixed syntax bug from previous commit.

File size: 2.7 KB
Line 
1import numpy as np
2
3from checkfield import checkfield
4from fielddisplay import fielddisplay
5from project3d import project3d
6from WriteData import WriteData
7
8
9class mask(object):
10 '''
11 MASK class definition
12
13 Usage:
14 mask = mask()
15 '''
16 def __init__(self): # {{{
17 self.ice_levelset = float('NaN')
18 self.ocean_levelset = float('NaN')
19
20 #set defaults
21 self.setdefaultparameters()
22 # }}}
23 def __repr__(self): # {{{
24 string = " masks:"
25
26 string = "%s\n%s" % (string, fielddisplay(self, "ocean_levelset", "presence of ocean if < 0, coastline/grounding line if = 0, no ocean 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 extrude(self, md): # {{{
34 self.ice_levelset = project3d(md, 'vector', self.ice_levelset, 'type', 'node')
35 self.ocean_levelset = project3d(md, 'vector', self.ocean_levelset, 'type', 'node')
36
37 return self
38 # }}}
39 def mask(self, *args): # {{{
40 nargin = len(args)
41 if nargin == 0:
42 self.setdefaultparameters()
43 else:
44 raise RuntimeError("constructor not supported")
45
46 return self
47 # }}}
48 def oceanset(self, *args): # {{{
49 if nargin == 2:
50 ocean = args[0]
51 index = args[1]
52 self.ocean_levelset[index] = -ocean
53 elif nargin == 1:
54 ocean = args[0]
55 self.ocean_levelset = -ocean
56 else:
57 raise RuntimeError("oceanset error message: not supported yet")
58
59 return self
60 # }}}
61 def iceset(self, *args): # {{{
62 if nargin == 2:
63 ice = args[0]
64 index = args[1]
65 self.ice_levelset[index] = -ice
66 elif nargin == 1:
67 ice = *args[0]
68 self.ocean_levelset = -ocean
69 else:
70 raise RuntimeError("iceset error message: not supported yet")
71
72 return self
73 # }}}
74 def checkconsistency(self, md, solution, analyses): # {{{
75 if solution == 'LoveSolution':
76 return
77
78 md = checkfield(md, 'fieldname', 'mask.ice_levelset', 'size', [md.mesh.numberofvertices])
79 isice = np.array(md.mask.ice_levelset <= 0, int)
80 if np.sum(isice) == 0:
81 raise TypeError("no ice present in the domain")
82
83 return md
84 # }}}
85 def marshall(self, prefix, md, fid): # {{{
86 WriteData(fid, prefix, 'object', self, 'fieldname', 'ocean_levelset', 'format', 'DoubleMat', 'mattype', 1)
87 WriteData(fid, prefix, 'object', self, 'fieldname', 'ice_levelset', 'format', 'DoubleMat', 'mattype', 1)
88 # }}}
Note: See TracBrowser for help on using the repository browser.