Source code for g3d.calc.calculator_env

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