Files
SystemSimulationApp/tests/test_amesim_pneumatic_node_components.py
T

95 lines
3.1 KiB
Python

from __future__ import annotations
import unittest
from app.simulation.components.amesim.junctions.nodes import (
AmesimP4Node2,
AmesimPn3Node2,
)
from app.simulation.core.medium import IdealGasMedium
class AmesimPneumaticNodeComponentTests(unittest.TestCase):
def test_pn3node2_declares_bidirectional_pneumatic_ports(self) -> None:
node = AmesimPn3Node2.create(
name="pn3_1",
medium=IdealGasMedium(),
parameters={},
)
self.assertEqual(set(node.ports), {"port_1", "port_2", "port_3"})
self.assertTrue(
all(
definition.domain == "pneumatic"
and definition.nominal_role == "bidirectional"
for definition in node.port_definitions
)
)
self.assertEqual(node.parameter_values, {})
def test_pn3node2_residuals_use_port_2_as_pressure_reference(self) -> None:
node = AmesimPn3Node2("pn3_1")
node.port_1.p = 101000.0
node.port_2.p = 100000.0
node.port_3.p = 99000.0
node.port_1.m_flow = 0.2
node.port_2.m_flow = -0.3
node.port_3.m_flow = 0.1
residuals = {residual.id.rsplit(":", 1)[1]: residual for residual in node.pressure_flow_equation_residuals()}
self.assertEqual(set(residuals), {"port_1_pressure_reference", "port_3_pressure_reference", "mass_flow_balance"})
self.assertEqual(residuals["port_1_pressure_reference"].value, 1000.0)
self.assertEqual(residuals["port_3_pressure_reference"].value, -1000.0)
self.assertAlmostEqual(residuals["mass_flow_balance"].value, 0.0)
def test_p4node2_residuals_cover_four_ports(self) -> None:
node = AmesimP4Node2("p4_1")
node.port_1.p = 100000.0
node.port_2.p = 100000.0
node.port_3.p = 100000.0
node.port_4.p = 100000.0
node.port_1.m_flow = 0.1
node.port_2.m_flow = 0.2
node.port_3.m_flow = -0.4
node.port_4.m_flow = 0.1
residuals = node.pressure_flow_equation_residuals()
self.assertEqual(len(residuals), 4)
self.assertTrue(all(residual.value == 0.0 for residual in residuals))
self.assertEqual(
residuals[-1].variables,
(
"p4_1.port_1.m_flow",
"p4_1.port_2.m_flow",
"p4_1.port_3.m_flow",
"p4_1.port_4.m_flow",
),
)
def test_node_stream_outflow_uses_incoming_weighted_mix(self) -> None:
node = AmesimP4Node2("p4_1")
node.port_1.m_flow = 0.25
node.port_2.m_flow = 0.75
node.port_3.m_flow = -0.5
node.port_4.m_flow = -0.5
node.update_stream_outflows(
{
"port_1": 100.0,
"port_2": 300.0,
"port_3": 900.0,
"port_4": 1200.0,
}
)
self.assertEqual(node.port_1.h_outflow, 250.0)
self.assertEqual(node.port_2.h_outflow, 250.0)
self.assertEqual(node.port_3.h_outflow, 250.0)
self.assertEqual(node.port_4.h_outflow, 250.0)
if __name__ == "__main__":
unittest.main()