修正test_mql气室压力约定
This commit is contained in:
1 parent
f6dda509a2
commit
2199f1c11e
5 files changed
+215
-15
No files matched your search
@@ -6,9 +6,13 @@ from PythonModels.components.amesim_pneumatic import (
|
||||
HELIUM_PNEUMATIC_GAS,
|
||||
AmesimPneumaticOrifice,
|
||||
AmesimPneumaticVolume,
|
||||
AmesimVariablePneumaticVolume,
|
||||
cm3_to_m3,
|
||||
compressible_orifice_mass_flow,
|
||||
diameter_mm_to_area_m2,
|
||||
kg_to_g,
|
||||
liters_to_m3,
|
||||
m3_to_cm3,
|
||||
mm2_to_m2,
|
||||
)
|
||||
|
||||
@@ -16,6 +20,9 @@ from PythonModels.components.amesim_pneumatic import (
|
||||
class AmesimPneumaticComponentsTest(unittest.TestCase):
|
||||
def test_unit_conversions(self) -> None:
|
||||
self.assertAlmostEqual(liters_to_m3(15.0), 0.015)
|
||||
self.assertAlmostEqual(m3_to_cm3(0.015), 15000.0)
|
||||
self.assertAlmostEqual(cm3_to_m3(15000.0), 0.015)
|
||||
self.assertAlmostEqual(kg_to_g(1.25), 1250.0)
|
||||
self.assertAlmostEqual(mm2_to_m2(78.5), 78.5e-6)
|
||||
self.assertAlmostEqual(diameter_mm_to_area_m2(10.0), 7.853981633974483e-5)
|
||||
|
||||
@@ -33,6 +40,33 @@ class AmesimPneumaticComponentsTest(unittest.TestCase):
|
||||
self.assertGreater(props.rho, 20.0)
|
||||
self.assertLess(props.rho, 30.0)
|
||||
|
||||
def test_volume_reports_amesim_style_observables(self) -> None:
|
||||
volume = AmesimPneumaticVolume.from_liters(
|
||||
name="pn_general_chamber",
|
||||
volume_liters=57.0,
|
||||
p0=15.3e6,
|
||||
T0=293.15,
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(volume.volume_cm3(), 57000.0)
|
||||
self.assertAlmostEqual(
|
||||
volume.pressure_gauge_pa(reference_pressure_pa=101_300.0),
|
||||
15198700.0,
|
||||
)
|
||||
self.assertGreater(volume.gas_mass_g(), 1300.0)
|
||||
|
||||
def test_variable_volume_tracks_external_volume(self) -> None:
|
||||
volume = AmesimVariablePneumaticVolume.from_liters(
|
||||
name="pn_c1_8",
|
||||
dead_volume_liters=15.0,
|
||||
p0=100000.0,
|
||||
T0=293.15,
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(volume.volume_cm3(), 15000.0)
|
||||
volume.set_external_volume_m3(cm3_to_m3(34242.54636512914))
|
||||
self.assertAlmostEqual(volume.volume_cm3(), 49242.54636512914)
|
||||
|
||||
def test_orifice_returns_signed_mass_flow(self) -> None:
|
||||
orifice = AmesimPneumaticOrifice.from_mm2(
|
||||
name="pn_orifice_18",
|
||||
|
||||
@@ -1,15 +1,27 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from PythonModels.components.amesim_pneumatic import HELIUM_PNEUMATIC_GAS
|
||||
from PythonModels.components.amesim_pneumatic import HELIUM_PNEUMATIC_GAS, cm3_to_m3
|
||||
from PythonModels.reporting.amesim_results import load_test_mql_amesim_results
|
||||
from PythonModels.systems.test_mql_pneumatic import (
|
||||
absolute_pressure_from_amesim_bar_parameter,
|
||||
build_test_mql_pneumatic_assembly,
|
||||
pressure_from_amesim_bar_parameter,
|
||||
pressure_to_amesim_gauge_pa,
|
||||
)
|
||||
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[1]
|
||||
TEST_MQL_AME = REPO_ROOT / "AmesimModels" / "test_mql.ame"
|
||||
|
||||
|
||||
class TestMqlPneumaticAssemblyTests(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls) -> None:
|
||||
cls.amesim_results = load_test_mql_amesim_results(TEST_MQL_AME)
|
||||
|
||||
def test_assembles_expected_amesim_pneumatic_component_counts(self) -> None:
|
||||
assembly = build_test_mql_pneumatic_assembly()
|
||||
|
||||
@@ -23,13 +35,16 @@ class TestMqlPneumaticAssemblyTests(unittest.TestCase):
|
||||
self.assertIn("pn_orifice_18", assembly.aliases)
|
||||
self.assertIn("pn_morifice_11", assembly.aliases)
|
||||
|
||||
def test_uses_amesim_global_initial_pressure_convention(self) -> None:
|
||||
def test_uses_amesim_pressure_conventions(self) -> None:
|
||||
assembly = build_test_mql_pneumatic_assembly()
|
||||
|
||||
self.assertAlmostEqual(
|
||||
pressure_from_amesim_bar_parameter(153.0),
|
||||
15198700.0,
|
||||
)
|
||||
self.assertAlmostEqual(absolute_pressure_from_amesim_bar_parameter(153.0), 15300000.0)
|
||||
self.assertAlmostEqual(pressure_from_amesim_bar_parameter(153.0), 15198700.0)
|
||||
self.assertAlmostEqual(pressure_to_amesim_gauge_pa(100000.0), -1300.0)
|
||||
self.assertAlmostEqual(assembly.fixed_initial_absolute_pressure_pa, 15300000.0)
|
||||
self.assertAlmostEqual(assembly.fixed_initial_gauge_pressure_pa, 15198700.0)
|
||||
self.assertAlmostEqual(assembly.variable_initial_absolute_pressure_pa, 100000.0)
|
||||
self.assertAlmostEqual(assembly.variable_initial_gauge_pressure_pa, -1300.0)
|
||||
self.assertAlmostEqual(assembly.initial_pressure_pa, 15198700.0)
|
||||
|
||||
def test_chamber_parameters_are_resolved_in_si_units(self) -> None:
|
||||
@@ -38,6 +53,7 @@ class TestMqlPneumaticAssemblyTests(unittest.TestCase):
|
||||
variable_chamber = assembly.variable_chambers["pn_c1_8"]
|
||||
|
||||
self.assertAlmostEqual(fixed_chamber.volume, 0.057)
|
||||
self.assertAlmostEqual(variable_chamber.dead_volume, 0.015)
|
||||
self.assertAlmostEqual(variable_chamber.volume, 0.015)
|
||||
self.assertIs(fixed_chamber.gas, HELIUM_PNEUMATIC_GAS)
|
||||
self.assertIs(variable_chamber.gas, HELIUM_PNEUMATIC_GAS)
|
||||
@@ -55,6 +71,44 @@ class TestMqlPneumaticAssemblyTests(unittest.TestCase):
|
||||
self.assertAlmostEqual(variable_orifice.flow_coefficient, 0.45)
|
||||
self.assertAlmostEqual(variable_orifice.opening, 1.0)
|
||||
|
||||
def test_chamber_initial_observables_match_amesim_results(self) -> None:
|
||||
assembly = build_test_mql_pneumatic_assembly()
|
||||
fixed_chamber = assembly.fixed_chambers["pn_general_chamber"]
|
||||
variable_chamber = assembly.variable_chambers["pn_c1_8"]
|
||||
|
||||
self.assertAlmostEqual(
|
||||
fixed_chamber.pressure_gauge_pa(),
|
||||
self.amesim_results.series("press@pn_general_chamber")[0],
|
||||
delta=1.0e-8,
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
variable_chamber.pressure_gauge_pa(),
|
||||
self.amesim_results.series("press@pn_c1_8")[0],
|
||||
delta=1.0e-8,
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
variable_chamber.volume_cm3(),
|
||||
self.amesim_results.series("vol@pn_c1_8")[0],
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
variable_chamber.gas_mass_g(),
|
||||
self.amesim_results.series("mgas1@pn_c1_8")[0],
|
||||
delta=1.0e-4,
|
||||
)
|
||||
|
||||
def test_variable_chamber_volume_matches_piston_volume_observable(self) -> None:
|
||||
assembly = build_test_mql_pneumatic_assembly()
|
||||
for chamber_alias, chamber in assembly.variable_chambers.items():
|
||||
piston_alias = chamber_alias.replace("pn_c1", "pn_brp2")
|
||||
with self.subTest(alias=chamber_alias):
|
||||
piston_volume_cm3 = self.amesim_results.series(f"vol1@{piston_alias}")[-1]
|
||||
chamber.set_external_volume_m3(cm3_to_m3(piston_volume_cm3))
|
||||
self.assertAlmostEqual(
|
||||
chamber.volume_cm3(),
|
||||
self.amesim_results.series(f"vol@{chamber_alias}")[-1],
|
||||
delta=1.0e-6,
|
||||
)
|
||||
|
||||
def test_assembled_orifice_can_compute_helium_mass_flow(self) -> None:
|
||||
assembly = build_test_mql_pneumatic_assembly()
|
||||
fixed_orifice = assembly.fixed_orifices["pn_orifice_18"]
|
||||
|
||||
Reference in new issue
Block a user