Source code for g3d.calc.tests.test_oblique_shock

"""unit tests for oblique-shock 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.oblique_shock import G3DObliqueShockCalculator
from g3d.defs import AngleType


[docs] class TestObliqueShock(CFlowTestCase): """CFlow unit tests: oblique shock waves""" def _setup(self) -> None: super()._setup() self.__oblique_shock = G3DObliqueShockCalculator() self.__M = 2.5 self.__M2 = 1.39485 self.__mu = 23.57818 self.__beta = 50. self.__theta = 24.85436 self.__theta_max = 29.79744 self.__PR = 4.11226 self.__RR = 2.53885 self.__TR = 1.61973 self.__Mn1 = 1.91511 self.__Mn2 = 0.5927
[docs] def test_oblique_shock_relations_kwargs(self) -> None: """CFlow unit tests: oblique shock waves (kwargs)""" self._setup() self.assertEqual(self.__oblique_shock.get_Mach_angle( M=self.__M, angle_type=AngleType.DEGREES, precision=self._prec), self.__mu) self.assertEqual(self.__oblique_shock.get_theta( beta=self.__beta, M=self.__M, angle_type=AngleType.DEGREES, precision=self._prec), self.__theta) self.assertEqual(self.__oblique_shock.get_normal_Mach_1( M1=self.__M, beta=self.__beta, angle_type=AngleType.DEGREES, precision=self._prec), self.__Mn1) self.assertEqual(self.__oblique_shock.get_normal_Mach_2( Mn1=self.__Mn1, precision=self._prec), self.__Mn2) self.assertEqual(self.__oblique_shock.get_density_ratio( M1=self.__M, beta=self.__beta, angle_type=AngleType.DEGREES, precision=self._prec), self.__RR) self.assertEqual(self.__oblique_shock.get_pressure_ratio( M1=self.__M, beta=self.__beta, angle_type=AngleType.DEGREES, precision=self._prec), self.__PR) self.assertEqual(self.__oblique_shock.get_temperature_ratio( M1=self.__M, beta=self.__beta, angle_type=AngleType.DEGREES, precision=self._prec), self.__TR) self.assertEqual(self.__oblique_shock.get_downstream_Mach( M1=self.__M, beta=self.__beta, theta=self.__theta, angle_type=AngleType.DEGREES, precision=self._prec), self.__M2) self.assertEqual(self.__oblique_shock.get_theta_max( M=self.__M, angle_type=AngleType.DEGREES, precision=self._prec), self.__theta_max) self.assertEqual(self.__oblique_shock.find_beta( theta=self.__theta, M=self.__M, angle_type=AngleType.DEGREES, precision=2), self.__beta) self.assertEqual(self.__oblique_shock.get_Mach( theta=self.__theta, beta=self.__beta, angle_type=AngleType.DEGREES, precision=self._prec), self.__M) self.assertEqual(self.__oblique_shock.get_angles_from_PR_and_M1( PR=self.__PR, M1=self.__M, angle_type=AngleType.DEGREES, precision=(2, self._prec)), (self.__beta, self.__theta)) self.assertEqual(self.__oblique_shock.analyze_oblique_shock( M1=self.__M, theta=self.__theta, angle_type=AngleType.DEGREES, precision=(2, self._prec, self._prec, self._prec)), (self.__beta, self.__M2, self.__PR, self.__TR)) self.assertEqual(self.__oblique_shock.find_M1_from_theta_and_M2( theta=self.__theta, M2=self.__M2, angle_type=AngleType.DEGREES, precision=self._prec), self.__M)
[docs] def test_oblique_shock_relations_args(self) -> None: """CFlow unit tests: oblique shock waves (args)""" self._setup() self.__mu *= (np.pi / 180.) self.__beta *= (np.pi / 180.) self.__theta *= (np.pi / 180.) self.__theta_max *= (np.pi / 180.) mu = np.round(self.__mu, self._prec) beta = np.round(self.__beta, self._prec) theta = np.round(self.__theta, self._prec) theta_max = np.round(self.__theta_max, self._prec) self.assertEqual(self.__oblique_shock.get_Mach_angle( self.__M, precision=self._prec), mu) self.assertEqual(self.__oblique_shock.get_theta( self.__beta, self.__M, precision=self._prec), theta) self.assertEqual(self.__oblique_shock.get_normal_Mach_1( self.__M, self.__beta, precision=self._prec), self.__Mn1) self.assertEqual(self.__oblique_shock.get_normal_Mach_2( self.__Mn1, precision=self._prec), self.__Mn2) self.assertEqual(self.__oblique_shock.get_density_ratio( self.__M, self.__beta, precision=self._prec), self.__RR) self.assertEqual(self.__oblique_shock.get_pressure_ratio( self.__M, self.__beta, precision=self._prec), self.__PR) self.assertEqual(self.__oblique_shock.get_temperature_ratio( self.__M, self.__beta, precision=self._prec), self.__TR) self.assertEqual(self.__oblique_shock.get_downstream_Mach( self.__M, self.__beta, self.__theta, precision=self._prec), self.__M2) self.assertEqual(self.__oblique_shock.get_theta_max( self.__M, precision=self._prec), theta_max) self.assertEqual(self.__oblique_shock.find_beta( self.__theta, self.__M, precision=self._prec), beta) self.assertEqual(self.__oblique_shock.get_Mach( self.__theta, self.__beta, precision=2), self.__M) self.assertEqual(self.__oblique_shock.get_angles_from_PR_and_M1( self.__PR, self.__M, precision=self._prec), (beta, theta)) self.assertEqual(self.__oblique_shock.analyze_oblique_shock( self.__M, self.__theta, precision=self._prec), (beta, self.__M2, self.__PR, self.__TR)) self.assertEqual(self.__oblique_shock.find_M1_from_theta_and_M2( self.__theta, self.__M2, precision=self._prec), self.__M)
if __name__ == '__main__': unittest.main()