公开更多 AMESim 组件并接入信号机械闭环
This commit is contained in:
1 parent
db4bdb4b70
commit
3f51a124d6
28 files changed
+3397
-58
No files matched your search
@@ -0,0 +1,120 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from app.simulation.components.amesim.storage.chambers import AmesimPnch012
|
||||
from app.simulation.core.medium import IdealGasMedium
|
||||
from app.simulation.registry import COMPONENT_MODEL_REGISTRY
|
||||
|
||||
|
||||
class AmesimPnch012ComponentTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.medium = IdealGasMedium()
|
||||
|
||||
def test_default_create_preserves_parameterized_volume_contract(self) -> None:
|
||||
chamber = COMPONENT_MODEL_REGISTRY["amesim_pnch012"].create(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
{},
|
||||
)
|
||||
|
||||
self.assertIsInstance(chamber, AmesimPnch012)
|
||||
self.assertEqual(set(chamber.ports), {"port_1", "port_2", "port_3", "port_4"})
|
||||
self.assertEqual(len(chamber.get_state_vector()), 2)
|
||||
self.assertEqual(chamber.parameter_values["cvol0"], 0.015)
|
||||
self.assertAlmostEqual(chamber.total_volume(), 0.015)
|
||||
|
||||
def test_total_volume_adds_four_external_volume_parameters(self) -> None:
|
||||
chamber = AmesimPnch012(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
cvol0=0.015,
|
||||
vol1=0.001,
|
||||
vol2=0.002,
|
||||
vol3=0.003,
|
||||
vol4=0.004,
|
||||
dvol1=1.0e-6,
|
||||
dvol2=2.0e-6,
|
||||
dvol3=-1.0e-6,
|
||||
dvol4=0.0,
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(chamber.total_volume(), 0.025)
|
||||
self.assertAlmostEqual(chamber.total_volume_rate(), 2.0e-6)
|
||||
|
||||
def test_initial_state_uses_total_volume_pressure_and_temperature(self) -> None:
|
||||
chamber = AmesimPnch012(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
cvol0=0.015,
|
||||
vol1=0.010,
|
||||
p0=200000.0,
|
||||
T0=300.0,
|
||||
)
|
||||
props = chamber.properties()
|
||||
|
||||
self.assertAlmostEqual(props.p, 200000.0, delta=1.0e-8)
|
||||
self.assertAlmostEqual(props.T, 300.0)
|
||||
self.assertAlmostEqual(chamber.port_1.p, props.p)
|
||||
self.assertAlmostEqual(chamber.port_4.p, props.p)
|
||||
|
||||
def test_pressure_flow_residuals_bind_all_ports_to_chamber_state(self) -> None:
|
||||
chamber = AmesimPnch012("chamber_1", self.medium)
|
||||
chamber.properties()
|
||||
|
||||
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",
|
||||
"port_3_pressure_state",
|
||||
"port_4_pressure_state",
|
||||
},
|
||||
)
|
||||
self.assertTrue(all(abs(residual.value) < 1.0e-9 for residual in residuals.values()))
|
||||
|
||||
def test_derivative_sums_four_mass_flows_and_boundary_work(self) -> None:
|
||||
chamber = AmesimPnch012(
|
||||
"chamber_1",
|
||||
self.medium,
|
||||
dvol1=1.0e-6,
|
||||
kth=2.0,
|
||||
sth=0.5,
|
||||
extemp=310.0,
|
||||
)
|
||||
props = chamber.properties()
|
||||
chamber.port_1.m_flow = 0.2
|
||||
chamber.port_2.m_flow = -0.1
|
||||
chamber.port_3.m_flow = 0.05
|
||||
chamber.port_4.m_flow = 0.0
|
||||
|
||||
derivative = chamber.state_derivative_from_ports(
|
||||
{
|
||||
"port_1": props.h + 1000.0,
|
||||
"port_2": props.h - 1000.0,
|
||||
"port_3": props.h + 500.0,
|
||||
"port_4": props.h,
|
||||
}
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(derivative[0], 0.15)
|
||||
self.assertLess(derivative[1], 0.2 * (props.h + 1000.0) + 0.05 * (props.h + 500.0))
|
||||
|
||||
def test_results_include_total_volume_and_volume_rate(self) -> None:
|
||||
chamber = AmesimPnch012("chamber_1", self.medium, vol1=0.001, dvol1=1.0e-6)
|
||||
|
||||
values = chamber.component_result_values()
|
||||
|
||||
self.assertIn("vol", values)
|
||||
self.assertIn("dvol", values)
|
||||
self.assertAlmostEqual(values["vol"], 0.016)
|
||||
self.assertAlmostEqual(values["dvol"], 1.0e-6)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user