接入test_mql真实固定气室拓扑
This commit is contained in:
1 parent
c0f28520b4
commit
2d33a8f4bc
8 files changed
+747
-5
No files matched your search
@@ -0,0 +1,92 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from PythonModels.core.solver import SolveIVPConfig
|
||||
from PythonModels.systems.test_mql import TestMqlSystem
|
||||
|
||||
|
||||
class TestMqlPneumaticChamberSegmentTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.system = TestMqlSystem()
|
||||
self.discovery = self.system.discover_pneumatic_branch_topology()
|
||||
self.spec = self.discovery.chamber_segment_specs[0]
|
||||
|
||||
def test_discovers_four_fixed_chamber_segments_from_real_topology(self) -> None:
|
||||
self.assertEqual(len(self.discovery.chamber_segment_specs), 4)
|
||||
self.assertEqual(self.spec.volume_alias, "pn_general_chamber")
|
||||
self.assertEqual(self.spec.inlet_node_alias, "pn_node3_8")
|
||||
self.assertEqual(self.spec.inlet_line_alias, "pneumatic_96")
|
||||
self.assertEqual(self.spec.inlet_orifice_alias, "pn_orifice_18")
|
||||
self.assertEqual(self.spec.volume_inlet_port, "port_2")
|
||||
self.assertEqual(self.spec.outlet_orifice_alias, "pn_orifice_19")
|
||||
self.assertEqual(self.spec.outlet_line_alias, "pneumatic_97")
|
||||
self.assertEqual(self.spec.outlet_node_alias, "pn_node3_9")
|
||||
self.assertEqual(self.spec.source, "amesim-cir-topology")
|
||||
|
||||
def test_segment_closure_writes_real_amesim_port_directions(self) -> None:
|
||||
closure = self.system.pneumatic_chamber_segment_closure_from_spec(
|
||||
self.spec,
|
||||
inlet_pressure_pa=16.0e6,
|
||||
outlet_pressure_pa=1.0e6,
|
||||
)
|
||||
|
||||
snapshot = closure.snapshot()
|
||||
rhs = closure.rhs(closure.initial_state_vector())
|
||||
|
||||
self.assertGreater(snapshot.inlet_flow, 0.0)
|
||||
self.assertGreater(snapshot.outlet_flow, 0.0)
|
||||
self.assertAlmostEqual(
|
||||
closure.components.volume.port_b.m_flow,
|
||||
snapshot.inlet_flow,
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
closure.components.volume.port_a.m_flow,
|
||||
-snapshot.outlet_flow,
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
closure.components.inlet_orifice.port_b.m_flow,
|
||||
snapshot.inlet_flow,
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
closure.components.outlet_orifice.port_a.m_flow,
|
||||
-snapshot.outlet_flow,
|
||||
)
|
||||
self.assertEqual(len(rhs), 2)
|
||||
self.assertAlmostEqual(rhs[0], snapshot.inlet_flow - snapshot.outlet_flow)
|
||||
|
||||
def test_segment_closure_handles_reverse_boundary_pressures(self) -> None:
|
||||
closure = self.system.pneumatic_chamber_segment_closure_from_spec(
|
||||
self.spec,
|
||||
inlet_pressure_pa=1.0e6,
|
||||
outlet_pressure_pa=16.0e6,
|
||||
)
|
||||
|
||||
snapshot = closure.snapshot()
|
||||
rhs = closure.rhs(closure.initial_state_vector())
|
||||
|
||||
self.assertLess(snapshot.inlet_flow, 0.0)
|
||||
self.assertLess(snapshot.outlet_flow, 0.0)
|
||||
self.assertAlmostEqual(rhs[0], snapshot.inlet_flow - snapshot.outlet_flow)
|
||||
|
||||
def test_simulates_topology_derived_segment_with_prescribed_boundaries(self) -> None:
|
||||
solution = self.system.simulate_pneumatic_chamber_segment_from_spec(
|
||||
self.spec,
|
||||
inlet_pressure_pa=16.0e6,
|
||||
outlet_pressure_pa=14.0e6,
|
||||
config=SolveIVPConfig(
|
||||
t_start=0.0,
|
||||
t_stop=1.0e-5,
|
||||
max_step=1.0e-6,
|
||||
),
|
||||
t_eval=[0.0, 5.0e-6, 1.0e-5],
|
||||
)
|
||||
|
||||
self.assertTrue(solution.success)
|
||||
self.assertEqual(len(solution.t), 3)
|
||||
self.assertEqual(len(solution.y), 2)
|
||||
self.assertEqual([len(row) for row in solution.y], [3, 3])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user