Source code for g3d.calc.tests.test_heat

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