对齐AMESim管阻孔口与储气耦合
This commit is contained in:
1 parent
7671418582
commit
6abcc220de
14 files changed
+817
-65
No files matched your search
@@ -6,11 +6,15 @@ from unittest.mock import patch
|
||||
|
||||
from app.simulation.components.amesim.boundary.sources import AmesimPnpl01
|
||||
from app.simulation.components.amesim.flow.orifices import (
|
||||
AmesimPnor001,
|
||||
AmesimPnvo001SignalOpening,
|
||||
)
|
||||
from app.simulation.components.amesim.flow.pipes import AmesimPnl00r
|
||||
from app.simulation.components.amesim.flow.pipes import AmesimPnl0001
|
||||
from app.simulation.components.amesim.media.mediums import (
|
||||
AmesimHeliumPengRobinsonMedium,
|
||||
)
|
||||
from app.simulation.components.amesim.storage.chambers import AmesimPnch023
|
||||
from app.simulation.components.experimental.storage.cylinder import Cylinder
|
||||
from app.simulation.components.experimental.storage.tank import Tank
|
||||
from app.simulation.core.medium import IdealGasMedium
|
||||
@@ -21,6 +25,50 @@ from app.simulation.systems.network import SimulationNetwork
|
||||
|
||||
|
||||
class PressureFlowSolverInitializationTests(unittest.TestCase):
|
||||
def test_pnor_pnl0001_series_pressure_is_seeded_by_flow_balance(self) -> None:
|
||||
medium = IdealGasMedium()
|
||||
chamber = AmesimPnch023("source", medium, p0=15.3e6)
|
||||
source_plug = AmesimPnpl01("source_closed")
|
||||
orifice = AmesimPnor001("orifice", medium)
|
||||
pipe = AmesimPnl0001("pipe", medium, p0=14.0e6)
|
||||
storage_plug = AmesimPnpl01("storage_closed")
|
||||
network = SimulationNetwork("pnor-pnl0001-series")
|
||||
for component in (chamber, source_plug, orifice, pipe, storage_plug):
|
||||
network.add_component(component)
|
||||
network.connect("source_closed", "port_1", "source", "port_1")
|
||||
network.connect("source", "port_2", "orifice", "port_1")
|
||||
network.connect("orifice", "port_2", "pipe", "port_1")
|
||||
network.connect("pipe", "port_2", "storage_closed", "port_1")
|
||||
chamber.refresh_thermodynamic_ports()
|
||||
pipe.refresh_thermodynamic_ports()
|
||||
|
||||
result = PressureFlowSolver(network).solve()
|
||||
|
||||
self.assertTrue(result.success)
|
||||
self.assertGreater(orifice.port_2.p, pipe.port_2.p)
|
||||
self.assertLess(orifice.port_2.p, chamber.port_2.p)
|
||||
self.assertAlmostEqual(orifice.port_2.p, pipe.port_1.p)
|
||||
self.assertAlmostEqual(-orifice.port_2.m_flow, pipe.port_1.m_flow)
|
||||
|
||||
def test_dead_ended_pnl00r_is_seeded_at_zero_flow_pressure(self) -> None:
|
||||
medium = IdealGasMedium()
|
||||
pipe = AmesimPnl00r("resistance", medium)
|
||||
plug = AmesimPnpl01("closed")
|
||||
pipe.port_1.p = 15.3e6
|
||||
pipe.port_2.p = 100_000.0
|
||||
network = SimulationNetwork("dead-ended-resistance")
|
||||
network.add_component(pipe)
|
||||
network.add_component(plug)
|
||||
network.connect("resistance", "port_2", "closed", "port_1")
|
||||
|
||||
result = PressureFlowSolver(network).solve()
|
||||
|
||||
self.assertTrue(result.success)
|
||||
self.assertEqual(result.evaluations, 0)
|
||||
self.assertAlmostEqual(pipe.port_2.p, pipe.port_1.p)
|
||||
self.assertEqual(pipe.port_1.m_flow, 0.0)
|
||||
self.assertEqual(pipe.port_2.m_flow, 0.0)
|
||||
|
||||
@staticmethod
|
||||
def _near_equal_pressure_network() -> tuple[
|
||||
SimulationNetwork,
|
||||
|
||||
Reference in new issue
Block a user