"""G3DTime static class"""
from typing import Any
from g3d.defs import TIMESTEPTypes
from g3d.defs import TimeStepperMode
[docs]
class G3DTime:
"""G3D time placeholder"""
__time_mode = TIMESTEPTypes.LOCAL_TIME_STEPPING
__time_stepper_mode = TimeStepperMode.EXPLICIT_RUNGE_KUTTA
__cfl = 0.9
__n_sub_iter = 10
__dtime = 1.e-5
# time mode
@property
def time_mode(self) -> Any:
"""
solver time mode (Enum, default value = TIMESTEPTypes.LOCAL_TIME_STEPPING)
valid options: LOCAL_TIME_STEPPING, TIME_ACCURATE_CFL, TIME_ACCURATE_CONSTANT_TIME_STEP
"""
return type(self).__time_mode
@time_mode.setter
def time_mode(self, m: Any) -> None:
if type(m) is TIMESTEPTypes:
type(self).__time_mode = m
# time stepper mode
@property
def time_stepper_mode(self) -> Any:
"""
solver time stepper mode (Enum, default value = TimeStepperMode.EXPLICIT_RUNGE_KUTTA)
valid options: EXPLICIT_RUNGE_KUTTA, BACKWARD_EULER_DUAL_TIME_STEPPER,
CRANK_NICOLSON_DUAL_TIME_STEPPER, TURKEL_BACKWARD_EULER_DUAL_TIME_STEPPER
"""
return type(self).__time_stepper_mode
@time_stepper_mode.setter
def time_stepper_mode(self, m: Any) -> None:
if type(m) is TimeStepperMode:
type(self).__time_stepper_mode = m
# CFL number
@property
def cfl(self) -> float:
"""solver CFL number (default value = 0.9)"""
return type(self).__cfl
@cfl.setter
def cfl(self, val: float) -> None:
type(self).__cfl = val
# time step (for time accurate simulations)
@property
def dtime(self) -> float:
"""solver time step (used in combination with time-accurate time mode)"""
return type(self).__dtime
@dtime.setter
def dtime(self, dt: float) -> None:
type(self).__dtime = dt
# subiterations (dual-time-stepper)
@property
def n_sub_iter(self) -> int:
"""maximum number of subiterations (used in combination with dual time stepping time mode)"""
return type(self).__n_sub_iter
@n_sub_iter.setter
def n_sub_iter(self, N: int) -> None:
type(self).__n_sub_iter = N