Source code for g3d.flow.solver.rhs.fluxmodifiers.aximod

"""axisymmetric solver flux modifier"""
import os

if os.environ.get('__USE_CUDA', '0') == '1':
    import cupy as np
else:
    import numpy as np

from g3d.defs import G3DWorld
from g3d.defs import EQNMode
from g3d.flow.solver.rhs.fluxmodifiers import FluxModifier


[docs] class AxiMod(FluxModifier): """ axisymmetric flux correction functionality (class definition) """ def __init__(self) -> None: """initialize axisymmetric flux modifier""" super().__init__()
[docs] def evaluate(self) -> None: """ evaluate axisymmetric flux modifier """ g3d_world = G3DWorld() area = self._domain.get_area() u, v, w = self._domain.get_auxv_velocity_arrays() ro = self._domain.get_cons_array('ro') p = self._domain.get_auxv_array('p') drv = self._dcons.get_array('rv') drw = self._dcons.get_array('rw') idx1, idx2 = self._get_range() # convective flux correction drv[idx1:idx2] += (ro[idx1:idx2] * np.power(w[idx1:idx2], 2) + p[idx1:idx2]) * area[idx1:idx2] drw[idx1:idx2] -= ro[idx1:idx2] * v[idx1:idx2] * w[idx1:idx2] * area[idx1:idx2] if g3d_world.options.eqn_mode != EQNMode.EULER: # diffusive flux correction dudx = self._domain.get_vgrad_Array('dudx') dvdy = self._domain.get_vgrad_Array('dvdy') dwdz = self._domain.get_vgrad_Array('dwdz') dwdy = self._domain.get_vgrad_Array('dwdy') dvdz = self._domain.get_vgrad_Array('dvdz') drv[idx1:idx2] -= self._gas.viscosity * (-2.0 * dudx[idx1:idx2] - 2.0 * dvdy[idx1:idx2] + 4.0 * dwdz[idx1:idx2]) / 3.0 * area[idx1:idx2] drw[idx1:idx2] += self._gas.viscosity * (dwdy[idx1:idx2] + dvdz[idx1:idx2]) * area[idx1:idx2]
# double ReynoldsStress=dom->turb->ReynoldsStress(ic); # double ViscTot=dom->gas->visc(ic)+dom->turb->ViscT(ic); # double tau_yz=ViscTot*(dom->grad->dwdy[ic]+dom->grad->dvdz[ic]); # double tau_zz=ViscTot*(-2.*dom->grad->dudx[ic]-2.*dom->grad->dvdy[ic]+ # 4.*dom->grad->dwdz[ic])/3.-ReynoldsStress;