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