实现test_mql P4节点代数契约

This commit is contained in:
huojiarong committed 2026-07-17 09:25:35 +00:00
1 parent 5c3ad50090
commit 7569917924
3 files changed
+196 -1

No files matched your search

+87 -1
View File
@@ -5,7 +5,10 @@ from pathlib import Path
from PythonModels.reporting.amesim_results import load_test_mql_amesim_results
from PythonModels.systems.test_mql import TestMqlSystem
from PythonModels.systems.test_mql_nodes import build_test_mql_node3_assembly
from PythonModels.systems.test_mql_nodes import (
build_test_mql_node3_assembly,
build_test_mql_node4_assembly,
)
REPO_ROOT = Path(__file__).resolve().parents[1]
@@ -83,5 +86,88 @@ class TestMqlPneumaticNode3Tests(unittest.TestCase):
)
class TestMqlPneumaticNode4Tests(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.nodes = build_test_mql_node4_assembly()
cls.results = load_test_mql_amesim_results(TEST_MQL_AME)
def test_builds_all_eight_p4node2_instances(self) -> None:
self.assertEqual(len(self.nodes), 8)
self.assertIn("pnnode4_17", self.nodes)
system = TestMqlSystem()
self.assertEqual(system.typed_node4_count, 8)
self.assertEqual(system.node4_assembly["pnnode4_17"].alias, "pnnode4_17")
def test_port_two_flow_is_exact_sum_of_ports_one_three_and_four(self) -> None:
balance = self.nodes["pnnode4_17"].balance(
port_2_temperature_k=281.0,
port_2_pressure_pa=4.4e6,
port_1_enthalpy_flow_w=2.0,
port_1_mass_flow_g_s=3.0,
port_3_enthalpy_flow_w=-0.5,
port_3_mass_flow_g_s=-1.0,
port_4_enthalpy_flow_w=4.0,
port_4_mass_flow_g_s=5.0,
port_1_volume_derivative_l_min=4.0,
port_1_volume_cm3=5.0,
port_3_volume_derivative_l_min=-1.0,
port_3_volume_cm3=6.0,
port_4_volume_derivative_l_min=2.0,
port_4_volume_cm3=7.0,
)
self.assertEqual(balance.temperature_k, 281.0)
self.assertEqual(balance.pressure_pa, 4.4e6)
self.assertEqual(balance.port_2_enthalpy_flow_w, 5.5)
self.assertEqual(balance.port_2_mass_flow_g_s, 7.0)
self.assertEqual(balance.port_2_volume_derivative_l_min, 5.0)
self.assertEqual(balance.port_2_volume_cm3, 18.0)
def test_pnnode4_17_baseline_matches_adjacent_flow_sum(self) -> None:
index = 500
balance = self.nodes["pnnode4_17"].balance(
port_2_temperature_k=self.results.series("temp1@pnnode4_17")[index],
port_2_pressure_pa=(
self.results.series("press1@pnnode4_17")[index] + 101_300.0
),
port_1_enthalpy_flow_w=self.results.series("dh1@pneumatic_86")[index],
port_1_mass_flow_g_s=self.results.series("dm1@pneumatic_86")[index],
port_3_enthalpy_flow_w=self.results.series("dh2@pneumatic_83")[index],
port_3_mass_flow_g_s=self.results.series("dm2@pneumatic_83")[index],
port_4_enthalpy_flow_w=self.results.series("dh2@pn_morifice_9")[index],
port_4_mass_flow_g_s=self.results.series("dm2@pn_morifice_9")[index],
)
self.assertAlmostEqual(
balance.port_2_mass_flow_g_s,
self.results.series("dm2@pnnode4_17")[index],
)
self.assertAlmostEqual(
balance.port_2_enthalpy_flow_w,
self.results.series("dh2@pnnode4_17")[index],
)
self.assertEqual(self.results.series("vol2@pnnode4_17")[index], 0.0)
self.assertEqual(self.results.series("dvol2@pnnode4_17")[index], 0.0)
self.assertAlmostEqual(
self.results.series("press1@pnnode4_17")[index],
self.results.series("p2@pneumatic_68")[index],
)
def test_rejects_nonphysical_primary_pressure_or_temperature(self) -> None:
node = self.nodes["pnnode4_17"]
with self.assertRaises(ValueError):
node.balance(
port_2_temperature_k=0.0,
port_2_pressure_pa=1.0e5,
port_1_enthalpy_flow_w=0.0,
port_1_mass_flow_g_s=0.0,
port_3_enthalpy_flow_w=0.0,
port_3_mass_flow_g_s=0.0,
port_4_enthalpy_flow_w=0.0,
port_4_mass_flow_g_s=0.0,
)
if __name__ == "__main__":
unittest.main()