"""unit tests for quasi-one-dimensional flow calculator (nozzles and diffusers)"""
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.nozzle import G3DNozzleCalculator
[docs]
class TestNozzle(CFlowTestCase):
"""CFlow unit tests: one-dimensional flow with area changes (nozzles, diffusers, ...)"""
def _setup(self) -> None:
super()._setup()
self.__nozzle = G3DNozzleCalculator()
self.__M = 1.5
self.__AR = 3.0
self.__Po = 1.e5
self.__To = 300.
self.__At = 0.25
self.__Ae = self.__At * self.__AR
self.__mp = 58.338964
self.__Pb = 1.e5
self.__Pe = 1.e5
self.__Po_shock = 1.5e5
self.__M1_shock = 2.032032815656054
self.__Me = 0.286998
self.__AR_M15 = 1.176167
self.__M_AR3_sup = 2.637416
self.__M_AR3_sub = 0.197449
self._prec = 6
[docs]
def test_nozzle_relations_kwargs(self) -> None:
"""CFlow unit tests: one-dimensional flow with area changes (nozzles, diffusers, ...) (kwargs)"""
self._setup()
self.assertEqual(self.__nozzle.area_ratio(
M=self.__M,
precision=self._prec),
self.__AR_M15)
self.assertEqual(self.__nozzle.find_Mach_from_area_ratio(
AR=self.__AR,
mode='supersonic',
precision=self._prec),
self.__M_AR3_sup)
self.assertEqual(self.__nozzle.find_Mach_from_area_ratio(
AR=self.__AR,
mode='subsonic',
precision=self._prec),
self.__M_AR3_sub)
self.assertEqual(self.__nozzle.get_choked_mass_flow(
Po=self.__Po,
At=self.__At,
To=self.__To,
precision=self._prec),
self.__mp)
self.assertEqual(self.__nozzle.get_choked_area(
mp=self.__mp,
Po=self.__Po,
To=self.__To,
precision=self._prec),
self.__At)
self.assertEqual(self.__nozzle.internal_shock_get_exit_Mach_number(
Po=self.__Po_shock,
Pb=self.__Pb,
AR=self.__AR,
precision=self._prec),
self.__Me)
self.assertEqual(self.__nozzle.internal_shock_get_exit_conditions(
M1=self.__M1_shock,
Po=self.__Po_shock,
At=self.__At,
Ae=self.__Ae,
precision=self._prec),
(self.__Me, self.__Pe))
self.assertEqual(self.__nozzle.internal_shock_get_exit_pressure(
M1=self.__M1_shock,
Po=self.__Po_shock,
At=self.__At,
Ae=self.__Ae,
precision=self._prec),
self.__Pe)
self.assertEqual(self.__nozzle.find_Mach_internal_shock(
Po=self.__Po_shock,
At=self.__At,
Ae=self.__Ae,
Pe=self.__Pe,
precision=self._prec),
np.round(self.__M1_shock, self._prec))
[docs]
def test_nozzle_relations_args(self) -> None:
"""CFlow unit tests: one-dimensional flow with area changes (nozzles, diffusers, ...) (args)"""
self._setup()
self.assertEqual(self.__nozzle.area_ratio(
self.__M,
precision=self._prec),
self.__AR_M15)
self.assertEqual(self.__nozzle.find_Mach_from_area_ratio(
self.__AR,
mode='supersonic',
precision=self._prec),
self.__M_AR3_sup)
self.assertEqual(self.__nozzle.find_Mach_from_area_ratio(
self.__AR,
mode='subsonic',
precision=self._prec),
self.__M_AR3_sub)
self.assertEqual(self.__nozzle.get_choked_mass_flow(
self.__Po,
self.__At,
self.__To,
precision=self._prec),
self.__mp)
self.assertEqual(self.__nozzle.get_choked_area(
self.__mp,
self.__Po,
self.__To,
precision=self._prec),
self.__At)
self.assertEqual(self.__nozzle.internal_shock_get_exit_Mach_number(
self.__Po_shock,
self.__Pb,
self.__AR,
precision=self._prec),
self.__Me)
self.assertEqual(self.__nozzle.internal_shock_get_exit_conditions(
self.__M1_shock,
self.__Po_shock,
self.__At,
self.__Ae,
precision=self._prec),
(self.__Me, self.__Pe))
self.assertEqual(self.__nozzle.internal_shock_get_exit_pressure(
self.__M1_shock,
self.__Po_shock,
self.__At,
self.__Ae,
precision=self._prec),
self.__Pe)
self.assertEqual(self.__nozzle.find_Mach_internal_shock(
self.__Po_shock,
self.__At,
self.__Ae,
self.__Pe,
precision=self._prec),
np.round(self.__M1_shock, self._prec))
if __name__ == '__main__':
unittest.main()