Source code for g3d.calc.tests.test_friction

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