"""G3D calculator environment"""
from typing import Any
from g3d.gas import Gas
from .calculators import G3DGenericCalculator
from .calculators import G3DIdealGasCalculator
from .calculators import G3DStagnationCalculator
from .calculators import G3DAcousticsCalculator
from .calculators import G3DExpansionWaveCalculator
from .calculators import G3DFrictionCalculator
from .calculators import G3DHeatCalculator
from .calculators import G3DMovingExpansionCalculator
from .calculators import G3DMovingShockCalculator
from .calculators import G3DNormalShockCalculator
from .calculators import G3DNozzleCalculator
from .calculators import G3DObliqueShockCalculator
from .calculators import G3DShockTubeCalculator
from .calculators import G3DChannelFlowCalculator
from .calculators import Q1DODESolver
[docs]
class CalculatorEnv(G3DGenericCalculator):
def __init__(self, *args: Any, **kwargs: Any) -> None:
"""initialize calculator environment"""
super().__init__(*args, **kwargs)
def _set_default(self) -> None:
super()._set_default()
self._gas = Gas()
self._ideal_gas = G3DIdealGasCalculator(update_code_type=False)
self._stagnation = G3DStagnationCalculator(update_code_type=False)
self._acoustics = G3DAcousticsCalculator(update_code_type=False)
self._expansion = G3DExpansionWaveCalculator(update_code_type=False)
self._friction = G3DFrictionCalculator(update_code_type=False)
self._heat = G3DHeatCalculator(update_code_type=False)
self._moving_expansion = G3DMovingExpansionCalculator(update_code_type=False)
self._moving_shock = G3DMovingShockCalculator(update_code_type=False)
self._normal_shock = G3DNormalShockCalculator(update_code_type=False)
self._nozzle = G3DNozzleCalculator(update_code_type=False)
self._oblique_shock = G3DObliqueShockCalculator(update_code_type=False)
self._shock_tube = G3DShockTubeCalculator(update_code_type=False)
self._channel_flow = G3DChannelFlowCalculator(update_code_type=False)
self._q1d_ode = Q1DODESolver(update_code_type=False)
self.__associate_gas()
def __associate_gas(self) -> None:
self._ideal_gas.gas = self._gas
self._stagnation.gas = self._gas
self._acoustics.gas = self._gas
self._expansion.gas = self._gas
self._friction.gas = self._gas
self._heat.gas = self._gas
self._moving_expansion.gas = self._gas
self._moving_shock.gas = self._gas
self._normal_shock.gas = self._gas
self._nozzle.gas = self._gas
self._oblique_shock.gas = self._gas
self._shock_tube.gas = self._gas
self._channel_flow.gas = self._gas
self._q1d_ode.gas = self._gas
@property
def gas(self) -> Gas:
"""gas relations"""
return self._gas
@gas.setter
def gas(self, g: Gas) -> None:
self._gas = g
self.__associate_gas()
[docs]
def get_gas_data(self):
"""gets gas constants"""
return self._gas.get_gas_data()
@property
def ideal_gas(self) -> G3DIdealGasCalculator:
"""ideal gas calculator"""
return self._ideal_gas
@property
def stagnation(self) -> G3DStagnationCalculator:
"""reference flow state calculator (stagnation, sonic flow)"""
return self._stagnation
@property
def acoustics(self) -> G3DAcousticsCalculator:
"""acoustic properties calculator"""
return self._acoustics
@property
def expansion(self) -> G3DExpansionWaveCalculator:
"""Prandtl-Meyer expansion calculator"""
return self._expansion
@property
def friction(self) -> G3DFrictionCalculator:
"""one-dimensional flow with friction calculator"""
return self._friction
@property
def heat(self) -> G3DHeatCalculator:
"""one-dimensional flow with heat addition calculator"""
return self._heat
@property
def moving_expansion(self) -> G3DMovingExpansionCalculator:
"""moving expansion regions calculator"""
return self._moving_expansion
@property
def moving_shock(self) -> G3DMovingShockCalculator:
"""moving shock wave calculator"""
return self._moving_shock
@property
def normal_shock(self) -> G3DNormalShockCalculator:
"""normal shock wave calculator"""
return self._normal_shock
@property
def nozzle(self) -> G3DNozzleCalculator:
"""one-dimensional flow with area changes (nozzle, diffuser) calculator"""
return self._nozzle
@property
def oblique_shock(self) -> G3DObliqueShockCalculator:
"""oblique shock wave calculator"""
return self._oblique_shock
@property
def shock_tube(self) -> G3DShockTubeCalculator:
"""shock-tube relations calculator"""
return self._shock_tube
@property
def channel_flow(self) -> G3DChannelFlowCalculator:
"""compressible channel flow calculator"""
return self._channel_flow
@property
def q1d_ode(self) -> Q1DODESolver:
"""quasi-one dimensional ODE solver (area changes, friction & heat addition)"""
return self._q1d_ode