Files
pipe-system-simulation-test/tests/test_gas_cylinder.py
T

76 lines
2.2 KiB
Python

import numpy as np
import pytest
from gas_cylinder import (
DEFAULT_FLUID,
DEFAULT_P_INIT,
DEFAULT_T_INIT,
DEFAULT_VOLUME,
HighPressureGasCylinder,
)
def test_default_high_pressure_cylinder_state_matches_inputs():
cylinder = HighPressureGasCylinder()
assert cylinder.fluid == DEFAULT_FLUID
assert cylinder.V == DEFAULT_VOLUME
assert abs(cylinder.P - DEFAULT_P_INIT) / DEFAULT_P_INIT < 1e-8
assert abs(cylinder.T - DEFAULT_T_INIT) < 1e-8
assert cylinder.mass > 0
assert cylinder.U > 0
assert cylinder.gamma > 1.0
assert cylinder.compressibility_factor > 0.0
def test_cylinder_accepts_configurable_fluid_pressure_volume_temperature():
cylinder = HighPressureGasCylinder(
fluid="Nitrogen",
P_init=2.0e6,
V=50e-3,
T_init=300.0,
)
assert cylinder.fluid == "Nitrogen"
assert abs(cylinder.P - 2.0e6) / 2.0e6 < 1e-8
assert abs(cylinder.T - 300.0) < 1e-8
assert abs(cylinder.V - 50e-3) < 1e-15
assert cylinder.mass > 0
def test_cylinder_ghost_state_is_stagnant_conservative_vector():
cylinder = HighPressureGasCylinder()
ghost = cylinder.ghost_state()
assert ghost.shape == (3,)
assert abs(ghost[0] - cylinder.rho) < 1e-12
assert ghost[1] == 0.0
assert abs(ghost[2] - cylinder.rho * cylinder.specific_internal_energy) < 1e-6
def test_cylinder_apply_flux_outflow_reduces_mass_energy_and_pressure():
cylinder = HighPressureGasCylinder()
mass_before = cylinder.mass
U_before = cylinder.U
P_before = cylinder.P
mdot = 1e-3
edot = mdot * cylinder.h
dt = 1.0
cylinder.apply_flux(mdot=mdot, edot=edot, dt=dt, sign=-1)
assert abs(cylinder.mass - (mass_before - mdot * dt)) < 1e-12
assert abs(cylinder.U - (U_before - edot * dt)) < 1e-6
assert cylinder.P < P_before
def test_cylinder_rejects_invalid_inputs():
with pytest.raises(ValueError):
HighPressureGasCylinder(fluid="")
with pytest.raises(ValueError):
HighPressureGasCylinder(P_init=0.0)
with pytest.raises(ValueError):
HighPressureGasCylinder(V=0.0)
with pytest.raises(ValueError):
HighPressureGasCylinder(T_init=0.0)