"""unit tests for one-dimensional flow with friction 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.friction import G3DFrictionCalculator
[docs]
class TestFriction(CFlowTestCase):
"""CFlow unit tests: one-dimensional flow with friction"""
def _setup(self) -> None:
super()._setup()
self.__friction = G3DFrictionCalculator()
self.__D = 0.1
self.__f = 0.005
self.__M_sub = 0.5
self.__M_sup = 1.5
self.__Ls_sub = 5.3453
self.__Ls_sup = 0.68025
self.__T = 300.
self.__P = 1.e5
self.__RO = 1.2
self.__Po = 1.e5
self.__M1 = 0.2
self.__M2 = 0.8
self.__Ts = 362.5
self.__Ps = 164886.32448
self.__ROs = 1.63749
self.__Pos = 85021.93612
self.__PR = 0.23633
self.__RR = 0.26446
self.__TR = 0.89362
self.__PoR = 0.1784
self.__mp = 4.7505466
self.__M_shock = 1.49371
self.__P2b = 75008.02672547355
self.__T2b = 298.1856865249006
self.__M2b = 0.26583063226766973
[docs]
def test_friction_relations_kwargs(self) -> None:
"""CFlow unit tests: one-dimensional flow with friction (kwargs)"""
self._setup()
self.assertEqual(self.__friction.get_L_star(
M=self.__M_sub,
f=self.__f,
D=self.__D,
precision=self._prec),
self.__Ls_sub)
self.assertEqual(self.__friction.get_T_star(
M=self.__M_sup,
T=self.__T,
precision=self._prec),
self.__Ts)
self.assertEqual(self.__friction.get_P_star(
M=self.__M_sup,
P=self.__P,
precision=self._prec),
self.__Ps)
self.assertEqual(self.__friction.get_RO_star(
M=self.__M_sup,
RO=self.__RO,
precision=self._prec),
self.__ROs)
self.assertEqual(self.__friction.get_Po_star(
M=self.__M_sup,
Po=self.__Po,
precision=self._prec),
self.__Pos)
self.assertEqual(self.__friction.get_T(
M=self.__M_sup,
Ts=self.__Ts,
precision=self._prec),
self.__T)
self.assertEqual(self.__friction.get_P(
M=self.__M_sup,
Ps=self.__Ps,
precision=self._prec),
self.__P)
self.assertEqual(self.__friction.get_RO(
M=self.__M_sup,
ROs=self.__ROs,
precision=self._prec),
self.__RO)
self.assertEqual(self.__friction.get_P0(
M=self.__M_sup,
Pos=self.__Pos,
precision=self._prec),
self.__Po)
self.assertEqual(self.__friction.get_Po(
M=self.__M_sup,
Pos=self.__Pos,
precision=self._prec),
self.__Po)
self.assertEqual(self.__friction.find_Mach_from_temperature_ratio(
T=self.__T,
Ts=self.__Ts,
mode='supersonic',
precision=self._prec),
self.__M_sup)
self.assertEqual(self.__friction.find_Mach_from_L_star(
Ls=self.__Ls_sub,
f=self.__f,
D=self.__D,
mode='subsonic',
precision=self._prec),
self.__M_sub)
self.assertEqual(self.__friction.find_Mach_from_pressure_ratio(
P=self.__P,
Ps=self.__Ps,
mode='supersonic',
precision=self._prec),
self.__M_sup)
self.assertEqual(self.__friction.find_Mach_from_total_pressure_ratio(
Po=self.__Po,
Pos=self.__Pos,
mode='supersonic',
precision=self._prec),
self.__M_sup)
self.assertEqual(self.__friction.get_TR_from_Mach(
M1=self.__M1,
M2=self.__M2,
precision=self._prec),
self.__TR)
self.assertEqual(self.__friction.get_PR_from_Mach(
M1=self.__M1,
M2=self.__M2,
precision=self._prec),
self.__PR)
self.assertEqual(self.__friction.get_RR_from_Mach(
M1=self.__M1,
M2=self.__M2,
precision=self._prec),
self.__RR)
self.assertEqual(self.__friction.get_PoR_from_Mach(
M1=self.__M1,
M2=self.__M2,
precision=self._prec),
self.__PoR)
self.assertEqual(self.__friction.get_downstream_Mach_from_PR(
PR=self.__PR,
M1=self.__M1,
precision=2),
self.__M2)
self.assertEqual(self.__friction.get_upstream_Mach_from_PR(
PR=self.__PR,
M2=self.__M2,
precision=2),
self.__M1)
self.assertEqual(self.__friction.get_downstream_Mach_from_TR(
TR=self.__TR,
M1=self.__M1,
precision=2),
self.__M2)
self.assertEqual(self.__friction.get_upstream_Mach_from_TR(
TR=self.__TR,
M2=self.__M2,
precision=2),
self.__M1)
self.assertEqual(self.__friction.get_downstream_Mach_from_RR(
RR=self.__RR,
M1=self.__M1,
precision=2),
self.__M2)
self.assertEqual(self.__friction.get_upstream_Mach_from_RR(
RR=self.__RR,
M2=self.__M2,
precision=2),
self.__M1)
self.assertEqual(self.__friction.choked_supersonic_find_shock_Mach(
M1=self.__M_sup,
T1=self.__T,
L=1.5,
f=self.__f,
D=self.__D,
add_mode='factor',
precision=self._prec),
self.__M_shock)
self.assertEqual(self.__friction.get_L_star_from_diameter_and_massflow(
D=self.__D,
mp=self.__mp,
P1=self.__P,
T1=self.__T,
f=self.__f,
precision=self._prec),
self.__Ls_sup)
self.assertEqual(self.__friction.find_pipe_diameter_from_massflow(
T1=self.__T,
P1=self.__P,
L=self.__Ls_sup,
mp=self.__mp,
f=self.__f,
precision=self._prec),
self.__D)
self.assertEqual(self.__friction.get_downstream_pressure(
M1=self.__M1,
P1=self.__P,
L=0.5,
D=self.__D,
f=self.__f,
add_mode='factor',
precision=self._prec),
np.round(self.__P2b, self._prec))
self.assertEqual(self.__friction.get_upstream_pressure(
M2=self.__M2b,
P2=self.__P2b,
L=0.5,
D=self.__D,
f=self.__f,
add_mode='factor',
precision=self._prec),
self.__P)
self.assertEqual(self.__friction.get_downstream_temperature(
M1=self.__M1,
T1=self.__T,
L=0.5,
D=self.__D,
f=self.__f,
add_mode='factor',
precision=self._prec),
np.round(self.__T2b, self._prec))
self.assertEqual(self.__friction.get_upstream_temperature(
M2=self.__M2b,
T2=self.__T2b,
L=0.5,
D=self.__D,
f=self.__f,
add_mode='factor',
precision=self._prec),
self.__T)
self.assertEqual(self.__friction.get_downstream_flow_state(
M1=self.__M1,
T1=self.__T,
P1=self.__P,
L=0.5,
D=self.__D,
f=self.__f,
add_mode='factor',
precision=self._prec),
(np.round(self.__M2b, self._prec),
np.round(self.__T2b, self._prec),
np.round(self.__P2b, self._prec)))
self.assertEqual(self.__friction.get_upstream_flow_state(
M2=self.__M2b,
T2=self.__T2b,
P2=self.__P2b,
L=0.5,
D=self.__D,
f=self.__f,
add_mode='factor',
precision=self._prec),
(self.__M1, self.__T, self.__P))
self.assertEqual(self.__friction.get_upstream_flow_state_after_overchoking_2(
M1=self.__M1,
T1=self.__T,
P1=self.__P,
L=1.5,
D=self.__D,
f=self.__f,
add_mode='factor',
precision=self._prec),
(np.round(0.16751173744966905, self._prec),
np.round(300.71239110416184, self._prec),
np.round(100833.59290402685, self._prec)))
[docs]
def test_friction_relations_args(self) -> None:
"""CFlow unit tests: one-dimensional flow with friction (args)"""
self._setup()
self.assertEqual(self.__friction.get_L_star(
self.__M_sub,
self.__f,
self.__D,
precision=self._prec),
self.__Ls_sub)
self.assertEqual(self.__friction.get_T_star(
self.__M_sup,
self.__T,
precision=self._prec),
self.__Ts)
self.assertEqual(self.__friction.get_P_star(
self.__M_sup,
self.__P,
precision=self._prec),
self.__Ps)
self.assertEqual(self.__friction.get_RO_star(
self.__M_sup,
self.__RO,
precision=self._prec),
self.__ROs)
self.assertEqual(self.__friction.get_Po_star(
self.__M_sup,
self.__Po,
precision=self._prec),
self.__Pos)
self.assertEqual(self.__friction.get_T(
self.__M_sup,
self.__Ts,
precision=self._prec),
self.__T)
self.assertEqual(self.__friction.get_P(
self.__M_sup,
self.__Ps,
precision=self._prec),
self.__P)
self.assertEqual(self.__friction.get_RO(
self.__M_sup,
self.__ROs,
precision=self._prec),
self.__RO)
self.assertEqual(self.__friction.get_P0(
self.__M_sup,
self.__Pos,
precision=self._prec),
self.__Po)
self.assertEqual(self.__friction.get_Po(
self.__M_sup,
self.__Pos,
precision=self._prec),
self.__Po)
self.assertEqual(self.__friction.find_Mach_from_temperature_ratio(
self.__T,
self.__Ts,
mode='supersonic',
precision=self._prec),
self.__M_sup)
self.assertEqual(self.__friction.find_Mach_from_L_star(
self.__Ls_sub,
self.__f,
self.__D,
mode='subsonic',
precision=self._prec),
self.__M_sub)
self.assertEqual(self.__friction.find_Mach_from_pressure_ratio(
self.__P,
self.__Ps,
mode='supersonic',
precision=self._prec),
self.__M_sup)
self.assertEqual(self.__friction.find_Mach_from_total_pressure_ratio(
self.__Po,
self.__Pos,
mode='supersonic',
precision=self._prec),
self.__M_sup)
self.assertEqual(self.__friction.get_TR_from_Mach(
self.__M1,
self.__M2,
precision=self._prec),
self.__TR)
self.assertEqual(self.__friction.get_PR_from_Mach(
self.__M1,
self.__M2,
precision=self._prec),
self.__PR)
self.assertEqual(self.__friction.get_RR_from_Mach(
self.__M1,
self.__M2,
precision=self._prec),
self.__RR)
self.assertEqual(self.__friction.get_PoR_from_Mach(
self.__M1,
self.__M2,
precision=self._prec),
self.__PoR)
self.assertEqual(self.__friction.get_downstream_Mach_from_PR(
self.__PR,
self.__M1,
precision=2),
self.__M2)
self.assertEqual(self.__friction.get_upstream_Mach_from_PR(
self.__PR,
self.__M2,
precision=2),
self.__M1)
self.assertEqual(self.__friction.get_downstream_Mach_from_TR(
self.__TR,
self.__M1,
precision=2),
self.__M2)
self.assertEqual(self.__friction.get_upstream_Mach_from_TR(
self.__TR,
self.__M2,
precision=2),
self.__M1)
self.assertEqual(self.__friction.get_downstream_Mach_from_RR(
self.__RR,
self.__M1,
precision=2),
self.__M2)
self.assertEqual(self.__friction.get_upstream_Mach_from_RR(
self.__RR,
self.__M2,
precision=2),
self.__M1)
self.assertEqual(self.__friction.choked_supersonic_find_shock_Mach(
self.__M_sup,
self.__T,
1.5 * self.__Ls_sup,
self.__f,
self.__D,
precision=self._prec),
self.__M_shock)
self.assertEqual(self.__friction.get_L_star_from_diameter_and_massflow(
self.__D,
self.__mp,
self.__P,
self.__T,
self.__f,
precision=self._prec),
self.__Ls_sup)
self.assertEqual(self.__friction.find_pipe_diameter_from_massflow(
self.__T,
self.__P,
self.__Ls_sup,
self.__mp,
self.__f,
precision=self._prec),
self.__D)
if __name__ == '__main__':
unittest.main()