source: issm/trunk/src/m/classes/timesteppingadaptive.py@ 22758

Last change on this file since 22758 was 22758, checked in by Mathieu Morlighem, 7 years ago

merged trunk-jpl and trunk for revision 22757

File size: 3.9 KB
Line 
1from fielddisplay import fielddisplay
2from checkfield import checkfield
3from WriteData import WriteData
4
5class timesteppingadaptive(object):
6 """
7 TIMESTEPPINGADAPTIVE Class definition
8
9 Usage:
10 timesteppingadaptive=timesteppingadaptive();
11 """
12
13 def __init__(self,*args): # {{{
14 if not len(args):
15 self.start_time = 0.
16 self.final_time = 0.
17 self.time_step_min = 0.
18 self.time_step_max = 0.
19 self.cfl_coefficient = 0.
20 self.interp_forcings = 1
21 self.coupling_time = 0.
22
23 #set defaults
24 self.setdefaultparameters()
25
26 elif len(args)==1 and args[0].__module__=='timestepping':
27 old=args[0]
28 #first call setdefaultparameters:
29 self.setdefaultparameters()
30 self.start_time = old.start_time
31 self.final_time = old.final_time
32 self.interp_forcings = old.interp_forcings
33 self.coupling_time = old.coupling_time
34
35 else:
36 raise Exception('constructor not supported')
37 #}}}
38 def __repr__(self): # {{{
39 string=" timesteppingadaptive parameters:"
40 string="%s\n%s"%(string,fielddisplay(self,"start_time","simulation starting time [yr]"))
41 string="%s\n%s"%(string,fielddisplay(self,"final_time","final time to stop the simulation [yr]"))
42 string="%s\n%s"%(string,fielddisplay(self,"time_step_min","minimum length of time steps [yr]"))
43 string="%s\n%s"%(string,fielddisplay(self,"time_step_max","maximum length of time steps [yr]"))
44 string="%s\n%s"%(string,fielddisplay(self,"cfl_coefficient","coefficient applied to cfl condition"))
45 string="%s\n%s"%(string,fielddisplay(self,"interp_forcings","interpolate in time between requested forcing values ? (0 or 1)"))
46 string="%s\n%s"%(string,fielddisplay(self,"coupling_time","coupling time steps with ocean model [yr]"))
47 return string
48 #}}}
49 def setdefaultparameters(self): # {{{
50
51 #time between 2 time steps
52 self.time_step_min=0.01
53 self.time_step_max=10.
54
55 #final time
56 self.final_time=10.*self.time_step_max
57
58 #time adaptation?
59 self.cfl_coefficient=0.5
60
61 #should we interpolate forcings between timesteps?
62 self.interp_forcings=1
63
64 return self
65 #}}}
66 def checkconsistency(self,md,solution,analyses): # {{{
67
68 md = checkfield(md,'fieldname','timestepping.start_time','numel',[1],'NaN',1,'Inf',1)
69 md = checkfield(md,'fieldname','timestepping.final_time','numel',[1],'NaN',1,'Inf',1)
70 md = checkfield(md,'fieldname','timestepping.time_step_min','numel',[1],'>=',0,'NaN',1,'Inf',1)
71 md = checkfield(md,'fieldname','timestepping.time_step_max','numel',[1],'>=',md.timestepping.time_step_min,'NaN',1,'Inf',1)
72 md = checkfield(md,'fieldname','timestepping.cfl_coefficient','numel',[1],'>',0,'<=',1)
73 if self.final_time-self.start_time<0:
74 md.checkmessage("timestepping.final_time should be larger than timestepping.start_time")
75 md = checkfield(md,'fieldname','timestepping.interp_forcings','numel',[1],'values',[0,1])
76 md = checkfield(md,'fieldname','timestepping.coupling_time','numel',[1],'>=',0,'NaN',1,'Inf',1)
77
78 return md
79 # }}}
80 def marshall(self,prefix,md,fid): # {{{
81
82 yts=md.constants.yts
83 WriteData(fid,prefix,'name','md.timestepping.type','data',2,'format','Integer');
84 WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','start_time','format','Double','scale',yts)
85 WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','final_time','format','Double','scale',yts)
86 WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_min','format','Double','scale',yts)
87 WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','time_step_max','format','Double','scale',yts)
88 WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','cfl_coefficient','format','Double')
89 WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','interp_forcings','format','Boolean')
90 WriteData(fid,prefix,'object',self,'class','timestepping','fieldname','coupling_time','format','Double','scale',yts)
91 # }}}
Note: See TracBrowser for help on using the repository browser.