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

Last change on this file since 16764 was 16764, checked in by Eric.Larour, 11 years ago

CHG: checkfield could not run for massatfluggate or misfit classes, because these classes do not
have access to their own fields through the model! So we modified checkfield.m and checkfield.py to accept
either directly a field, or indirectly a fieldname which then is used to retrieve from the model.

File size: 2.2 KB
Line 
1import numpy
2from fielddisplay import fielddisplay
3from EnumDefinitions import *
4from checkfield import *
5from WriteData import *
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 def defaultoutputs(self,md): # {{{
32
33 return md.stressbalance.defaultoutputs(md)+md.thermal.defaultoutputs(md)
34
35 #}}}
36 def setdefaultparameters(self): # {{{
37
38 #maximum of steady state iterations
39 self.maxiter=100
40
41 #Relative tolerance for the steadystate convertgence
42 self.reltol=0.01
43
44 #default output
45 self.requested_outputs=['default']
46 return self
47 #}}}
48 def checkconsistency(self,md,solution,analyses): # {{{
49
50 #Early return
51 if not solution==SteadystateSolutionEnum():
52 return md
53
54 if not md.timestepping.time_step==0:
55 md.checkmessage("for a steadystate computation, timestepping.time_step must be zero.")
56
57 if numpy.isnan(md.stressbalance.reltol):
58 md.checkmessage("for a steadystate computation, stressbalance.reltol (relative convergence criterion) must be defined!")
59
60 md = checkfield(md,'fieldname','steadystate.requested_outputs','stringrow',1)
61
62 return md
63 # }}}
64 def marshall(self,md,fid): # {{{
65 WriteData(fid,'object',self,'fieldname','reltol','format','Double')
66 WriteData(fid,'object',self,'fieldname','maxiter','format','Integer')
67
68 #process requested outputs
69 outputs = self.requested_outputs
70 indices = [i for i, x in enumerate(outputs) if x == 'default']
71 if len(indices) > 0:
72 outputscopy=outputs[0:max(0,indices[0]-1)]+self.defaultoutputs(md)+outputs[indices[0]+1:]
73 outputs =outputscopy
74 WriteData(fid,'data',outputs,'enum',SteadystateRequestedOutputsEnum(),'format','StringArray')
75 # }}}
Note: See TracBrowser for help on using the repository browser.