Source code for g3d.flow.solver.rhs.tvd

"""TVD limiters (density, turbulence model variables, generic)"""
from typing import Union

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


[docs] class TVD: """ """ def __init__(self) -> None: pass
[docs] def evaluate(self, ev, r, val_r, val_l): """ :param ev: :param r: :param val_r: :param val_l: """ pass
[docs] class TVDGeneric(TVD): """ """ def __init__(self) -> None: super().__init__() self.__alpha = 0. self.__beta = 0. self.__div = 0. self.reset()
[docs] def reset(self) -> None: """ """ self.__alpha = 0. self.__beta = 0. self.__div = 0.
def _limit_check(self) -> Union[float, None]: if np.abs(self.__div) < 1.e-10: if self.__div == 0.: return 1.e-10 return 1.e-10 * np.sign(self.__div) return None def _update_beta(self) -> None: self.__beta = np.max([self.__beta, self.__alpha]) if 0. <= self.__alpha < 1.0: if self.__alpha < 0.1: self.__beta = np.min([self.__beta, 10. * self.__alpha]) else: self.__beta = np.min([self.__beta, 1.]) else: self.__beta = np.min([self.__beta, self.__alpha])
[docs] def evaluate(self, ev: float, r: Union[ndarray, list[float]], val_r: float, val_l: float) -> float: """ :param ev: :param r: :param val_r: :param val_l: :return: """ if ev < 0.: self.__div = r[1] - r[3] self._limit_check() self.__alpha = (r[2] - r[3]) / self.__div self.__beta = (val_r - r[3]) / self.__div self._update_beta() return r[3] + self.__beta * self.__div else: self.__div = r[2] - r[0] self._limit_check() self.__alpha = (r[1] - r[0]) / self.__div self.__beta = (val_l - r[0]) / self.__div self._update_beta() return r[0] + self.__beta * self.__div
[docs] class TVDro(TVDGeneric): """ """ def __init__(self) -> None: super().__init__()
[docs] def evaluate(self, ev: float, r: Union[ndarray, list[float]], val_r: float, val_l: float) -> float: """ :param ev: :param r: :param val_r: :param val_l: """ pass
[docs] class TVDTurb(TVDGeneric): """ """ def __init__(self): super().__init__()
[docs] def evaluate(self, ev: float, r: Union[ndarray, list[float]], val_r: float, val_l: float) -> float: """ :param ev: :param r: :param val_r: :param val_l: """ pass