"""G3DIRSM static class"""
from .time import G3DTime
[docs]
class G3DIRSM:
"""G3D Implicit Residual Smoothing (IRSM) placeholder"""
__irsm_lambda = 1.0
__lambda_min = 1.0
__lambda_max = 0.0
__lambda_factor = 0.25
__relax = 0.9
__cfl_crit = 1.2
__cfl_max = 0.0
__cfl_activate = 1.0
__lambda_specified_by_user = False
@property
def irsm_lambda(self) -> float:
"""IRMS lambda value (default lambda = 1.0)"""
return type(self).__irsm_lambda
@irsm_lambda.setter
def irsm_lambda(self, val: float) -> None:
type(self).__irsm_lambda = val
type(self).__lambda_specified_by_user = True
@property
def lambda_specified_by_user(self) -> bool:
"""IRSM lambda has been specified by user (default = False)"""
return type(self).__lambda_specified_by_user
@lambda_specified_by_user.setter
def lambda_specified_by_user(self, b: bool = True) -> None:
type(self).__lambda_specified_by_user = b
@property
def lambda_min(self) -> float:
"""IRSM lambda min value (default 1.0)"""
return type(self).__lambda_min
@lambda_min.setter
def lambda_min(self, val: float) -> None:
type(self).__lambda_min = val
@property
def lambda_max(self) -> float:
"""IRSM lambda max value (default 0.0)"""
return type(self).__lambda_max
@lambda_max.setter
def lambda_max(self, val: float) -> None:
type(self).__lambda_max = val
@property
def lambda_factor(self) -> float:
"""IRSM lambda factor (default 0.25)"""
return type(self).__lambda_factor
@lambda_factor.setter
def lambda_factor(self, val: float) -> None:
type(self).__lambda_factor = val
@property
def relax(self) -> float:
"""IRSM under relaxation factor (default 0.9)"""
return type(self).__relax
@relax.setter
def relax(self, val: float) -> None:
type(self).__relax = val
@property
def cfl_crit(self) -> float:
"""IRSM critical CFL value (default 1.2)"""
return type(self).__cfl_crit
@cfl_crit.setter
def cfl_crit(self, val: float) -> None:
type(self).__cfl_crit = val
@property
def cfl_max(self) -> float:
"""IRSM critical CFL max (default 0.0)"""
return type(self).__cfl_max
@cfl_max.setter
def cfl_max(self, val: float) -> None:
type(self).__cfl_max = val
@property
def cfl_activate(self) -> float:
"""IRSM activation CFL value (default 1.0)"""
return type(self).__cfl_activate
@cfl_activate.setter
def cfl_activate(self, val: float) -> None:
type(self).__cfl_activate = val
[docs]
def update_lambda(self) -> None:
"""
update IRSM lambda value
input: no input needed
example: update_lambda()
"""
if type(self).__lambda_specified_by_user:
return
g3d_time = G3DTime()
alfa = g3d_time.cfl / type(self).__cfl_crit
type(self).__irsm_lambda = max(type(self).__lambda_factor * (alfa ** 2 - 1.0), type(self).__lambda_min)