Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""Time stepping (:mod:`fluidsim.base.dedalus.time_stepping`)
==============================================================
Provides:
.. autoclass:: TimeSteppingDedalus
:members:
:private-members:
"""
from dedalus.extras import flow_tools
from fluidsim.base.time_stepping.base import TimeSteppingBase0
class TimeSteppingDedalus(TimeSteppingBase0):
"""Time stepping class to handle Dedalus's event loop and FluidSim output."""
@staticmethod
def _complete_params_with_default(params):
"""This static method is used to complete the *params* container."""
TimeSteppingBase0._complete_params_with_default(params)
def __init__(self, sim):
if sim.params.time_stepping.USE_CFL:
self.init_dedalus_cfl(sim)
super().__init__(sim)
def init_dedalus_cfl(self, sim):
initial_dt = sim.params.time_stepping.deltat0
if sim.params.ONLY_COARSE_OPER:
self.CFL = None
return
self.CFL = flow_tools.CFL(
sim.dedalus_solver,
initial_dt=initial_dt,
cadence=10,
safety=1,
max_change=1.5,
min_change=0.5,
max_dt=0.125,
threshold=0.05,
)
self.CFL.add_velocities(("vx", "vz"))
def start(self):
self.deltat = self.params.time_stepping.deltat0
super().start()
def compute_time_increment_CLF(self):
if self.CFL is None:
self.deltat = None
else:
self.deltat = self.CFL.compute_dt()
def one_time_step_computation(self):
self.deltat = self.sim.dedalus_solver.step(self.deltat)