接入test_mql P4节点局部闭合

This commit is contained in:
huojiarong committed 2026-07-17 09:51:54 +00:00
1 parent a071896834
commit fafce0af87
3 files changed
+647

No files matched your search

+95
View File
@@ -246,5 +246,100 @@ class TestMqlPn3NodeChamberSegmentTests(unittest.TestCase):
self.assertEqual([len(row) for row in solution.y], [3] * 10)
class TestMqlPn3P4NodeChamberSegmentTests(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_p4_pressure_boundary_with_real_node_and_lines(self) -> None:
closure = self.system.pn3_p4_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.node_orifice.name, "pn_morifice_9")
self.assertEqual(closure.components.p4_node.alias, "pnnode4_17")
self.assertEqual(closure.components.p4_primary_line.name, "pneumatic_68")
self.assertEqual(closure.components.p4_port1_line.name, "pneumatic_86")
self.assertEqual(closure.components.p4_port3_line.name, "pneumatic_83")
self.assertEqual(len(closure.initial_state_vector()), 16)
self.assertEqual(len(rhs), 16)
self.assertAlmostEqual(
snapshot.p4_balance.pressure_pa,
snapshot.p4_primary_line.p,
)
self.assertAlmostEqual(
snapshot.p4_balance.temperature_k,
snapshot.p4_primary_line.T,
)
def test_p4_node_flow_cancels_between_pnvo_pnl0002_and_primary_line(self) -> None:
closure = self.system.pn3_p4_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.assertGreater(snapshot.pnl0003_to_p4_flow, 0.0)
self.assertAlmostEqual(
snapshot.p4_balance.port_2_mass_flow_g_s,
(
-snapshot.p4_to_port1_line_flow
- snapshot.p4_to_port3_line_flow
+ snapshot.pnl0003_to_p4_flow
)
* 1.0e3,
)
self.assertAlmostEqual(
snapshot.p4_node_to_primary_line_flow,
snapshot.p4_balance.port_2_mass_flow_g_s * 1.0e-3,
)
self.assertAlmostEqual(
snapshot.p4_node_to_primary_line_flow
+ snapshot.p4_to_port1_line_flow
+ snapshot.p4_to_port3_line_flow
- snapshot.pnl0003_to_p4_flow,
0.0,
delta=1.0e-12,
)
mass_derivative_sum = sum(rhs[index] for index in range(0, 16, 2))
self.assertAlmostEqual(
mass_derivative_sum,
(
snapshot.inlet_node_to_line_flow
- snapshot.node_to_resistance_flow
+ snapshot.p4_boundary_to_primary_line_flow
+ snapshot.p4_port1_boundary_to_line_flow
+ snapshot.p4_port3_boundary_to_line_flow
),
delta=1.0e-12,
)
def test_simulates_sixteen_state_pn3_p4_node_chamber_segment(self) -> None:
solution = self.system.simulate_pn3_p4_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-10,
max_step=1.0e-11,
),
t_eval=[0.0, 5.0e-11, 1.0e-10],
)
self.assertTrue(solution.success)
self.assertEqual(len(solution.t), 3)
self.assertEqual(len(solution.y), 16)
self.assertEqual([len(row) for row in solution.y], [3] * 16)
if __name__ == "__main__":
unittest.main()