"""limiter base class"""
from typing import Any
import os
if os.environ.get('__USE_CUDA', '0') == '1':
import cupy as np
from cupy import ndarray
else:
import numpy as np
from numpy import ndarray
from g3d.defs import G3DEntity
from g3d.defs import FunctionByPass
from g3d.flow.domain import Domain
[docs]
class Limiter(G3DEntity):
def __init__(self, *args: Any, **kwargs: Any) -> None:
super().__init__(*args, **kwargs)
self._limit = None
def _set_default(self) -> None:
super()._set_default()
self._tag = 'g3d_limiter'
def _set_from_args(self, *args: Any, **kwargs: Any) -> ndarray:
bps = self._get_function_evaluate_status(**kwargs)
if bps is FunctionByPass.SELF:
args_stat = np.ones(len(args))
else:
args_stat = super()._set_from_args(*args)
if bps in [FunctionByPass.EVALUATE, FunctionByPass.SELF]:
if np.sum(args_stat) > 0:
for i in range(len(args)):
if args_stat[i] == 1:
arg = args[i]
if type(arg) in [float, np.float64, np.float32, int, np.int64, np.int32]:
self._limit = np.float64(arg)
args_stat[i] = 0
return args_stat
[docs]
def set_from_key_value(self, key: str, value: Any) -> bool:
if super().set_from_key_value(key, value):
return True
elif key == 'limit':
self._limit = value
return True
return False
[docs]
def evaluate(self, dom: Domain) -> None:
"""
:param dom:
"""
pass