"""unit tests for one-dimensional flow with heat addition calculator"""
import unittest
import os
if os.environ.get('__USE_CUDA', '0') == '1':
import cupy as np
else:
import numpy as np
from g3d.calc.tests import CFlowTestCase
from g3d.calc.calculators.heat import G3DHeatCalculator
[docs]
class TestHeat(CFlowTestCase):
"""CFlow unit tests: one-dimensional flow with heat addition"""
def _setup(self) -> None:
super()._setup()
self.__heat = G3DHeatCalculator()
self.__M = 1.5
self.__T = 300.
self.__P = 1.e5
self.__RO = 1.2
self.__Po = 1.e5
self.__To = 300.
self.__Ts = 398.66898
self.__Ps = 172916.66667
self.__ROs = 1.56145
self.__Pos = 89162.69942
self.__Tos = 329.93295
self.__qs = 30067.64847
self.__M1 = 0.2
self.__T1 = 300.
self.__P1 = 1.e5
self.__M2 = 0.43358012983664473
self.__T2 = 985.3523804663998
self.__P2 = 83597.97974644964
[docs]
def test_heat_relations_kwargs(self) -> None:
"""CFlow unit tests: one-dimensional flow with heat addition (kwargs)"""
self._setup()
self.assertEqual(self.__heat.get_q_star(
M=self.__M,
To=self.__To,
precision=self._prec),
self.__qs)
self.assertEqual(self.__heat.get_T_star(
M=self.__M,
T=self.__T,
precision=self._prec),
self.__Ts)
self.assertEqual(self.__heat.get_P_star(
M=self.__M,
P=self.__P,
precision=self._prec),
self.__Ps)
self.assertEqual(self.__heat.get_RO_star(
M=self.__M,
RO=self.__RO,
precision=self._prec),
self.__ROs)
self.assertEqual(self.__heat.get_Po_star(
M=self.__M,
Po=self.__Po,
precision=self._prec),
self.__Pos)
self.assertEqual(self.__heat.get_To_star(
M=self.__M,
To=self.__To,
precision=self._prec),
self.__Tos)
self.assertEqual(self.__heat.get_T(
M=self.__M,
Ts=self.__Ts,
precision=self._prec),
self.__T)
self.assertEqual(self.__heat.get_P(
M=self.__M,
Ps=self.__Ps,
precision=self._prec),
self.__P)
self.assertEqual(self.__heat.get_RO(
M=self.__M,
ROs=self.__ROs,
precision=self._prec),
self.__RO)
self.assertEqual(self.__heat.get_Po(
M=self.__M,
Pos=self.__Pos,
precision=2),
self.__Po)
self.assertEqual(self.__heat.get_To(
M=self.__M,
Tos=self.__Tos,
precision=self._prec),
self.__T)
self.assertEqual(self.__heat.find_Mach_from_pressure_ratio(
P=self.__P,
Ps=self.__Ps,
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_temperature_ratio(
T=self.__T,
Ts=self.__Ts,
mode='supersonic',
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_total_temperature_ratio(
To=self.__To,
Tos=self.__Tos,
mode='supersonic',
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_q_star_and_To(
qs=self.__qs,
To=self.__To,
mode='supersonic',
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_q_star_and_Tos(
qs=self.__qs,
Tos=self.__Tos,
mode='supersonic',
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.get_downstream_pressure(
M1=self.__M1,
P1=self.__P1,
q=0.5,
add_mode='factor',
precision=self._prec),
np.round(self.__P2, self._prec))
self.assertEqual(self.__heat.get_upstream_pressure(
M2=self.__M2,
P2=self.__P2,
q=0.5,
add_mode='factor',
precision=self._prec),
self.__P1)
self.assertEqual(self.__heat.get_downstream_temperature(
M1=self.__M1,
T1=self.__T1,
q=0.5,
add_mode='factor',
precision=self._prec),
np.round(self.__T2, self._prec))
self.assertEqual(self.__heat.get_upstream_temperature(
M2=self.__M2,
T2=self.__T2,
q=0.5,
add_mode='factor',
precision=self._prec),
self.__T1)
self.assertEqual(self.__heat.get_downstream_flow_state(
M1=self.__M1,
T1=self.__T1,
P1=self.__P1,
q=0.5,
add_mode='factor',
precision=self._prec),
(np.round(self.__M2, self._prec),
np.round(self.__T2, self._prec),
np.round(self.__P2, self._prec)))
self.assertEqual(self.__heat.get_upstream_flow_state(
M2=self.__M2,
T2=self.__T2,
P2=self.__P2,
q=0.5,
add_mode='factor',
precision=self._prec),
(self.__M1, self.__T1, self.__P1))
[docs]
def test_heat_relations_args(self) -> None:
"""CFlow unit tests: one-dimensional flow with heat addition (args)"""
self._setup()
self.assertEqual(self.__heat.get_q_star(
self.__M,
self.__To,
precision=self._prec),
self.__qs)
self.assertEqual(self.__heat.get_T_star(
self.__M,
self.__T,
precision=self._prec),
self.__Ts)
self.assertEqual(self.__heat.get_P_star(
self.__M,
self.__P,
precision=self._prec),
self.__Ps)
self.assertEqual(self.__heat.get_RO_star(
self.__M,
self.__RO,
precision=self._prec),
self.__ROs)
self.assertEqual(self.__heat.get_Po_star(
self.__M,
self.__Po,
precision=self._prec),
self.__Pos)
self.assertEqual(self.__heat.get_To_star(
self.__M,
self.__To,
precision=self._prec),
self.__Tos)
self.assertEqual(self.__heat.get_T(
self.__M,
self.__Ts,
precision=self._prec),
self.__T)
self.assertEqual(self.__heat.get_P(
self.__M,
self.__Ps,
precision=self._prec),
self.__P)
self.assertEqual(self.__heat.get_RO(
self.__M,
self.__ROs,
precision=self._prec),
self.__RO)
self.assertEqual(self.__heat.get_Po(
self.__M,
self.__Pos,
precision=2),
self.__Po)
self.assertEqual(self.__heat.get_To(
self.__M,
self.__Tos,
precision=self._prec),
self.__T)
self.assertEqual(self.__heat.find_Mach_from_pressure_ratio(
self.__P,
self.__Ps,
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_temperature_ratio(
self.__T,
self.__Ts,
mode='supersonic',
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_total_temperature_ratio(
self.__To,
self.__Tos,
mode='supersonic',
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_q_star_and_To(
self.__qs,
self.__To,
mode='supersonic',
precision=self._prec),
self.__M)
self.assertEqual(self.__heat.find_Mach_from_q_star_and_Tos(
self.__qs,
self.__Tos,
mode='supersonic',
precision=self._prec),
self.__M)
if __name__ == '__main__':
unittest.main()