接入test_mql PN3节点管路闭合

This commit is contained in:
huojiarong committed 2026-07-17 09:05:51 +00:00
1 parent 568be2e632
commit 78013b25c9
3 files changed
+511 -1

No files matched your search

+89
View File
@@ -149,5 +149,94 @@ class TestMqlPnl0001PairChamberSegmentTests(unittest.TestCase):
self.assertEqual([len(row) for row in solution.y], [3, 3, 3, 3, 3, 3])
class TestMqlPn3NodeChamberSegmentTests(unittest.TestCase):
def setUp(self) -> None:
self.system = TestMqlSystem()
self.spec = self.system.discover_pneumatic_branch_topology().chamber_segment_specs[0]
def test_closure_replaces_outlet_boundary_with_real_pn3_node(self) -> None:
closure = self.system.pn3_node_chamber_segment_closure_from_spec(
self.spec,
inlet_node_pressure_pa=15.31e6,
resistance_boundary_pressure_pa=15.29e6,
)
snapshot = closure.snapshot()
rhs = closure.rhs(closure.initial_state_vector())
self.assertEqual(closure.components.inlet_line.name, "pneumatic_96")
self.assertEqual(closure.components.outlet_line.name, "pneumatic_97")
self.assertEqual(closure.components.node_line.name, "pneumatic_88")
self.assertEqual(closure.components.node_resistance.name, "pneumatic_100")
self.assertEqual(closure.components.node.alias, "pn_node3_9")
self.assertEqual(len(closure.initial_state_vector()), 10)
self.assertEqual(len(rhs), 10)
self.assertAlmostEqual(
snapshot.node_balance.pressure_pa,
snapshot.node_line_port_1.p,
)
self.assertAlmostEqual(
snapshot.node_balance.temperature_k,
snapshot.node_line_port_1.T,
)
def test_pn3_node_flow_cancels_between_adjacent_lines(self) -> None:
closure = self.system.pn3_node_chamber_segment_closure_from_spec(
self.spec,
inlet_node_pressure_pa=15.3e6,
resistance_boundary_pressure_pa=15.0e6,
)
state = closure.initial_state_vector()
state[4] *= 0.99
state[5] *= 0.99
snapshot = closure.snapshot(state)
rhs = closure.rhs(state)
self.assertGreater(snapshot.outlet_node_to_line_flow, 0.0)
self.assertGreater(snapshot.node_to_resistance_flow, 0.0)
self.assertAlmostEqual(
snapshot.node_balance.port_2_mass_flow_g_s,
(snapshot.outlet_node_to_line_flow + snapshot.node_to_resistance_flow)
* 1.0e3,
)
self.assertAlmostEqual(
snapshot.node_to_pnl0003_flow,
-(snapshot.outlet_node_to_line_flow + snapshot.node_to_resistance_flow),
)
self.assertAlmostEqual(
closure.components.node_line.port_1.m_flow,
snapshot.node_to_pnl0003_flow,
)
mass_derivative_sum = rhs[0] + rhs[2] + rhs[4] + rhs[6] + rhs[8]
self.assertAlmostEqual(
mass_derivative_sum,
(
snapshot.inlet_node_to_line_flow
+ snapshot.pnl0003_port_2_flow
- snapshot.node_to_resistance_flow
),
delta=1.0e-12,
)
def test_simulates_ten_state_pn3_node_chamber_segment(self) -> None:
solution = self.system.simulate_pn3_node_chamber_segment_from_spec(
self.spec,
inlet_node_pressure_pa=15.31e6,
resistance_boundary_pressure_pa=15.29e6,
config=SolveIVPConfig(
t_start=0.0,
t_stop=1.0e-8,
max_step=1.0e-9,
),
t_eval=[0.0, 5.0e-9, 1.0e-8],
)
self.assertTrue(solution.success)
self.assertEqual(len(solution.t), 3)
self.assertEqual(len(solution.y), 10)
self.assertEqual([len(row) for row in solution.y], [3] * 10)
if __name__ == "__main__":
unittest.main()