Source code for g3d.calc.tests.test_nozzle

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