同步仿真框架并接入AMESim气动组件

This commit is contained in:
huojiarong committed 2026-07-30 03:53:10 +00:00
1 parent 420bafeb4e
commit db4bdb4b70
109 files changed
+26920 -420

No files matched your search

@@ -0,0 +1,66 @@
from __future__ import annotations
import unittest
from app.simulation.components.amesim.flow.orifices import AmesimPnvo001FixedOpening
from app.simulation.core.medium import IdealGasMedium
from app.simulation.registry import COMPONENT_MODEL_REGISTRY
class AmesimPnvo001FixedOpeningComponentTests(unittest.TestCase):
def setUp(self) -> None:
self.medium = IdealGasMedium()
def test_default_create_preserves_fixed_opening_contract(self) -> None:
valve = COMPONENT_MODEL_REGISTRY["amesim_pnvo001_fixed"].create(
"valve_1",
self.medium,
{},
)
self.assertIsInstance(valve, AmesimPnvo001FixedOpening)
self.assertEqual(set(valve.ports), {"port_2", "port_3"})
self.assertEqual(
set(valve.parameter_values),
{"cq", "area0", "Cv", "Kv", "gi", "flowset", "opening"},
)
self.assertEqual(valve.opening, 1.0)
def test_rejects_fractional_flowset(self) -> None:
with self.assertRaisesRegex(ValueError, "flowset must be an integer"):
COMPONENT_MODEL_REGISTRY["amesim_pnvo001_fixed"].create(
"valve_1",
self.medium,
{"flowset": 1.5},
)
def test_opening_scales_effective_area(self) -> None:
valve = AmesimPnvo001FixedOpening(
"valve_1",
self.medium,
area0=2.0e-6,
opening=0.25,
)
self.assertAlmostEqual(valve.maximum_area, 2.0e-6)
self.assertAlmostEqual(valve.effective_area, 0.5e-6)
self.assertEqual(valve.component_result_values()["xv"], 0.25)
def test_zero_opening_blocks_flow(self) -> None:
valve = AmesimPnvo001FixedOpening("valve_1", self.medium, opening=0.0)
self.assertEqual(valve.mass_flow(500000.0, 100000.0), 0.0)
def test_mass_flow_is_bidirectional_by_pressure_order(self) -> None:
valve = AmesimPnvo001FixedOpening("valve_1", self.medium, opening=0.5)
forward = valve.mass_flow(500000.0, 100000.0)
reverse = valve.mass_flow(100000.0, 500000.0)
self.assertGreater(forward, 0.0)
self.assertLess(reverse, 0.0)
self.assertAlmostEqual(forward, -reverse)
if __name__ == "__main__":
unittest.main()