source: issm/trunk-jpl/src/m/classes/steadystate.py

Last change on this file was 27458, checked in by jdquinn, 2 years ago

CHG: MATLAB > Python translation; cleanup

File size: 2.5 KB
Line 
1import numpy as np
2from fielddisplay import fielddisplay
3from checkfield import checkfield
4from WriteData import WriteData
5
6
7class steadystate(object):
8 """
9 STEADYSTATE class definition
10
11 Usage:
12 steadystate = steadystate()
13 """
14
15 def __init__(self): # {{{
16 self.reltol = 0
17 self.maxiter = 0
18 self.requested_outputs = []
19
20 #set defaults
21 self.setdefaultparameters()
22
23 # }}}
24 def __repr__(self): # {{{
25 string = ' steadystate solution parameters:'
26 string = "%s\n%s" % (string, fielddisplay(self, 'reltol', 'relative tolerance criterion'))
27 string = "%s\n%s" % (string, fielddisplay(self, 'maxiter', 'maximum number of iterations'))
28 string = "%s\n%s" % (string, fielddisplay(self, 'requested_outputs', 'additional requested outputs'))
29 return string
30 # }}}
31
32 def defaultoutputs(self, md): # {{{
33 return md.stressbalance.defaultoutputs(md) + md.thermal.defaultoutputs(md)
34
35 # }}}
36 def setdefaultparameters(self): # {{{
37 #maximum of steady state iterations
38 self.maxiter = 100
39 #Relative tolerance for the steadystate convertgence
40 self.reltol = 0.01
41 #default output
42 self.requested_outputs = ['default']
43 return self
44 # }}}
45
46 def checkconsistency(self, md, solution, analyses): # {{{
47 #Early return
48 if not solution == 'SteadystateSolution':
49 return md
50
51 if not md.timestepping.time_step == 0:
52 md.checkmessage("for a steadystate computation, timestepping.time_step must be zero.")
53
54 if np.isnan(md.stressbalance.reltol):
55 md.checkmessage("for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!")
56
57 md = checkfield(md, 'fieldname', 'steadystate.requested_outputs', 'stringrow', 1)
58
59 return md
60 # }}}
61
62 def marshall(self, prefix, md, fid): # {{{
63 WriteData(fid, prefix, 'object', self, 'fieldname', 'reltol', 'format', 'Double')
64 WriteData(fid, prefix, 'object', self, 'fieldname', 'maxiter', 'format', 'Integer')
65
66 #process requested outputs
67 outputs = self.requested_outputs
68 indices = [i for i, x in enumerate(outputs) if x == 'default']
69 if len(indices) > 0:
70 outputscopy = outputs[0:max(0, indices[0] - 1)] + self.defaultoutputs(md) + outputs[indices[0] + 1:]
71 outputs = outputscopy
72 WriteData(fid, prefix, 'data', outputs, 'name', 'md.steadystate.requested_outputs', 'format', 'StringArray')
73 # }}}
Note: See TracBrowser for help on using the repository browser.