同步仿真框架并接入AMESim气动组件
This commit is contained in:
1 parent
420bafeb4e
commit
db4bdb4b70
109 files changed
+26920
-420
No files matched your search
@@ -0,0 +1,94 @@
|
||||
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()
|
||||
Reference in new issue
Block a user