Replace Python numerical kernels with native C execution
This commit is contained in:
1 parent
48da6be21c
commit
3b38f73fe0
227 files changed
+16801
-75499
No files matched your search
@@ -27,132 +27,10 @@ class AmesimPneumaticNodeComponentTests(unittest.TestCase):
|
||||
)
|
||||
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_uses_port_2_temperature_for_non_reference_outlets(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.temperature_reference_h, 300.0)
|
||||
self.assertEqual(node.port_1.h_outflow, 300.0)
|
||||
self.assertEqual(node.port_2.h_outflow, 250.0)
|
||||
self.assertEqual(node.port_3.h_outflow, 300.0)
|
||||
self.assertEqual(node.port_4.h_outflow, 300.0)
|
||||
|
||||
def test_port_2_outlet_closes_node_energy_balance(self) -> None:
|
||||
node = AmesimP4Node2("p4_1")
|
||||
node.port_1.m_flow = -0.01823
|
||||
node.port_2.m_flow = -2.56077
|
||||
node.port_3.m_flow = 2.579
|
||||
node.port_4.m_flow = 0.0
|
||||
|
||||
node.update_stream_outflows(
|
||||
{
|
||||
"port_1": 2_630_000.0,
|
||||
"port_2": 140_900.0,
|
||||
"port_3": 63_960.0,
|
||||
"port_4": 0.0,
|
||||
}
|
||||
)
|
||||
|
||||
self.assertEqual(node.port_1.h_outflow, 140_900.0)
|
||||
energy_flow = sum(
|
||||
port.m_flow
|
||||
* (
|
||||
{
|
||||
"port_1": 2_630_000.0,
|
||||
"port_2": 140_900.0,
|
||||
"port_3": 63_960.0,
|
||||
"port_4": 0.0,
|
||||
}[name]
|
||||
if port.m_flow > 0.0
|
||||
else port.h_outflow
|
||||
)
|
||||
for name, port in node.ports.items()
|
||||
)
|
||||
self.assertAlmostEqual(energy_flow, 0.0, places=10)
|
||||
|
||||
def test_port_2_outflow_enthalpy_remains_finite_through_flow_reversal(self) -> None:
|
||||
node = AmesimP4Node2("p4_1")
|
||||
connected_h = {
|
||||
"port_1": 300.0,
|
||||
"port_2": 300.0,
|
||||
"port_3": 200.0,
|
||||
"port_4": 100.0,
|
||||
}
|
||||
|
||||
outflow_enthalpies: list[float] = []
|
||||
for reference_flow in (-1.0e-6, 0.0, 1.0e-6):
|
||||
node.port_1.m_flow = -1.0
|
||||
node.port_2.m_flow = reference_flow
|
||||
node.port_3.m_flow = -reference_flow
|
||||
node.port_4.m_flow = 1.0
|
||||
|
||||
node.update_stream_outflows(connected_h)
|
||||
|
||||
self.assertAlmostEqual(
|
||||
sum(port.m_flow for port in node.ports.values()),
|
||||
0.0,
|
||||
places=15,
|
||||
)
|
||||
outflow_enthalpies.append(node.port_2.h_outflow)
|
||||
|
||||
self.assertTrue(all(abs(value) < 1.0e4 for value in outflow_enthalpies))
|
||||
self.assertLess(
|
||||
max(outflow_enthalpies) - min(outflow_enthalpies),
|
||||
1.0,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in new issue
Block a user