同步仿真框架并接入AMESim气动组件
This commit is contained in:
1 parent
420bafeb4e
commit
db4bdb4b70
109 files changed
+26920
-420
No files matched your search
@@ -0,0 +1,96 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from app.simulation.components.amesim.storage.chambers import AmesimPnch023
|
||||
from app.simulation.core.medium import IdealGasMedium
|
||||
from app.simulation.registry import COMPONENT_MODEL_REGISTRY
|
||||
|
||||
|
||||
class AmesimPnch023ComponentTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.medium = IdealGasMedium()
|
||||
|
||||
def test_default_create_preserves_amesim_parameter_contract(self) -> None:
|
||||
chamber = COMPONENT_MODEL_REGISTRY["amesim_pnch023"].create(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
{},
|
||||
)
|
||||
|
||||
self.assertIsInstance(chamber, AmesimPnch023)
|
||||
self.assertEqual(set(chamber.ports), {"port_1", "port_2"})
|
||||
self.assertEqual(
|
||||
set(chamber.parameter_values),
|
||||
{"cvol", "kth", "sth", "extemp", "gi", "p0", "T0"},
|
||||
)
|
||||
self.assertEqual(chamber.parameter_values["cvol"], 0.057)
|
||||
self.assertEqual(chamber.gi, 1)
|
||||
|
||||
def test_rejects_fractional_gas_index(self) -> None:
|
||||
with self.assertRaisesRegex(ValueError, "gi must be an integer"):
|
||||
COMPONENT_MODEL_REGISTRY["amesim_pnch023"].create(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
{"gi": 1.5},
|
||||
)
|
||||
|
||||
def test_initial_state_matches_requested_pressure_temperature(self) -> None:
|
||||
chamber = AmesimPnch023(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
cvol=0.057,
|
||||
p0=15300000.0,
|
||||
T0=293.15,
|
||||
)
|
||||
|
||||
props = chamber.properties()
|
||||
|
||||
self.assertAlmostEqual(props.p, 15300000.0)
|
||||
self.assertAlmostEqual(props.T, 293.15)
|
||||
self.assertAlmostEqual(chamber.port_1.p, props.p)
|
||||
self.assertAlmostEqual(chamber.port_2.p, props.p)
|
||||
|
||||
def test_two_port_derivative_conserves_mass_and_adds_heat_transfer(self) -> None:
|
||||
chamber = AmesimPnch023(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
kth=10.0,
|
||||
sth=2.0,
|
||||
extemp=310.0,
|
||||
T0=300.0,
|
||||
)
|
||||
props = chamber.properties()
|
||||
chamber.port_1.m_flow = 0.2
|
||||
chamber.port_2.m_flow = -0.1
|
||||
|
||||
derivative = chamber.state_derivative_from_ports(
|
||||
{
|
||||
"port_1": props.h + 1000.0,
|
||||
"port_2": props.h - 1000.0,
|
||||
}
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(derivative[0], 0.1)
|
||||
self.assertAlmostEqual(
|
||||
derivative[1],
|
||||
0.2 * (props.h + 1000.0) - 0.1 * props.h + 10.0 * 2.0 * 10.0,
|
||||
)
|
||||
|
||||
def test_pressure_residuals_bind_both_ports_to_state(self) -> None:
|
||||
chamber = AmesimPnch023("chamber_1", self.medium, p0=200000.0, T0=300.0)
|
||||
chamber.port_1.p = 200100.0
|
||||
chamber.port_2.p = 199900.0
|
||||
|
||||
residuals = {
|
||||
residual.id.rsplit(":", 1)[1]: residual
|
||||
for residual in chamber.pressure_flow_equation_residuals()
|
||||
}
|
||||
|
||||
self.assertEqual(set(residuals), {"port_1_pressure_state", "port_2_pressure_state"})
|
||||
self.assertAlmostEqual(residuals["port_1_pressure_state"].value, 100.0)
|
||||
self.assertAlmostEqual(residuals["port_2_pressure_state"].value, -100.0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user