接入test_mql变容气室机械反馈
This commit is contained in:
1 parent
d4edf1ccb3
commit
958d813300
4 files changed
+109
-10
No files matched your search
@@ -91,6 +91,27 @@ class AmesimPneumaticComponentsTest(unittest.TestCase):
|
||||
volume.set_external_volume_m3(cm3_to_m3(34242.54636512914))
|
||||
self.assertAlmostEqual(volume.volume_cm3(), 49242.54636512914)
|
||||
|
||||
def test_variable_volume_boundary_work_uses_external_volume_rate(self) -> None:
|
||||
volume = AmesimVariablePneumaticVolume.from_liters(
|
||||
name="pn_c1_8",
|
||||
dead_volume_liters=15.0,
|
||||
p0=100000.0,
|
||||
T0=293.15,
|
||||
)
|
||||
props = volume.properties()
|
||||
volume.set_external_volume_m3(0.0, external_volume_rate_m3_s=2.0e-6)
|
||||
|
||||
derivative = volume.derivatives_from_two_connections(
|
||||
port_a_m_flow=0.0,
|
||||
connected_h_a=props.h,
|
||||
port_b_m_flow=0.0,
|
||||
connected_h_b=props.h,
|
||||
internal_h=props.h,
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(derivative.m, 0.0)
|
||||
self.assertAlmostEqual(derivative.U, -props.p * 2.0e-6)
|
||||
|
||||
def test_orifice_returns_signed_mass_flow(self) -> None:
|
||||
orifice = AmesimPneumaticOrifice.from_mm2(
|
||||
name="pn_orifice_18",
|
||||
|
||||
@@ -566,6 +566,43 @@ class TestMqlPn3P4NodeChamberSegmentTests(unittest.TestCase):
|
||||
)
|
||||
self.assertAlmostEqual(rhs[112], -0.8167936695810917)
|
||||
|
||||
def test_full_state_closure_feeds_piston_kinematics_to_variable_chambers(self) -> None:
|
||||
closure = self.system.full_state_closure_from_spec(
|
||||
self.spec,
|
||||
inlet_node_pressure_pa=15.31e6,
|
||||
resistance_boundary_pressure_pa=15.29e6,
|
||||
)
|
||||
state = closure.initial_state_vector()
|
||||
state[113] = 0.05
|
||||
|
||||
snapshot = closure.snapshot(state)
|
||||
chamber = closure.pneumatic_closure.components.p4_port3_remote_primary_chamber
|
||||
piston = closure.mechanical_closure.assembly.pistons["pn_brp2_8"]
|
||||
expected_external_volume = piston.geometry().chamber_volume_m3(0.0, 0.05)
|
||||
|
||||
self.assertAlmostEqual(
|
||||
chamber.volume,
|
||||
chamber.dead_volume + expected_external_volume,
|
||||
)
|
||||
self.assertLess(
|
||||
snapshot.pneumatic.p4_port3_remote_primary_chamber.p,
|
||||
self.system.pneumatic_assembly.variable_initial_absolute_pressure_pa,
|
||||
)
|
||||
|
||||
base_rhs = closure.rhs(closure.initial_state_vector())
|
||||
moving_state = closure.initial_state_vector()
|
||||
moving_state[112] = 0.1
|
||||
moving_snapshot = closure.snapshot(moving_state)
|
||||
rhs = closure.rhs(moving_state)
|
||||
expected_volume_rate = piston.geometry().chamber_volume_rate_m3_s(0.0, 0.1)
|
||||
|
||||
self.assertAlmostEqual(chamber.volume_rate_m3_s(), expected_volume_rate)
|
||||
self.assertAlmostEqual(
|
||||
rhs[47] - base_rhs[47],
|
||||
-moving_snapshot.pneumatic.p4_port3_remote_primary_chamber.p
|
||||
* expected_volume_rate,
|
||||
)
|
||||
|
||||
def test_full_state_closure_applies_elastic_endstop_force_to_small_masses(self) -> None:
|
||||
closure = self.system.full_state_closure_from_spec(
|
||||
self.spec,
|
||||
@@ -577,7 +614,6 @@ class TestMqlPn3P4NodeChamberSegmentTests(unittest.TestCase):
|
||||
|
||||
snapshot = closure.snapshot(state)
|
||||
rhs = closure.rhs(state)
|
||||
initial_rhs = closure.rhs(closure.initial_state_vector())
|
||||
endstop = closure.mechanical_closure.assembly.elastic_endstops[
|
||||
"elasticendstop_8"
|
||||
].endstop()
|
||||
@@ -585,10 +621,13 @@ class TestMqlPn3P4NodeChamberSegmentTests(unittest.TestCase):
|
||||
mass = closure.mechanical_closure.assembly.masses[
|
||||
"mass_friction_endstops_10"
|
||||
].mass_kg
|
||||
expected_piston_force = closure._piston_force_by_mass_alias(
|
||||
snapshot.pneumatic
|
||||
)["mass_friction_endstops_10"]
|
||||
|
||||
self.assertAlmostEqual(
|
||||
rhs[112],
|
||||
initial_rhs[112] - expected_contact_force / mass,
|
||||
(expected_piston_force - expected_contact_force) / mass,
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
snapshot.mechanical_node_total_force_by_alias[
|
||||
|
||||
Reference in new issue
Block a user