"""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;