补充test_mql质量端止动原语
This commit is contained in:
1 parent
a63fda313b
commit
f6dda509a2
5 files changed
+142
No files matched your search
@@ -5,6 +5,7 @@ from pathlib import Path
|
||||
|
||||
from PythonModels.components.amesim_mechanical import (
|
||||
AmesimElasticEndstop,
|
||||
AmesimMassFrictionEndstops,
|
||||
AmesimPistonGeometry,
|
||||
circular_area,
|
||||
m_to_mm,
|
||||
@@ -76,6 +77,22 @@ class AmesimMechanicalComponentsTest(unittest.TestCase):
|
||||
self.assertEqual(endstop.static_contact_force(0.1), 0.0)
|
||||
self.assertEqual(endstop.penetration_m_from_gap_mm(0.1), 0.0)
|
||||
|
||||
def test_mass_endstop_penetration_and_viscous_friction(self) -> None:
|
||||
mass = AmesimMassFrictionEndstops(
|
||||
mass_kg=50.0,
|
||||
lower_limit_m=-1.0,
|
||||
upper_limit_m=0.8,
|
||||
lower_stiffness_n_per_m=1.0e9,
|
||||
upper_stiffness_n_per_m=1.0e9,
|
||||
viscous_friction_n_per_m_per_s=12.0,
|
||||
)
|
||||
|
||||
self.assertEqual(mass.lower_penetration_m(0.0), 0.0)
|
||||
self.assertEqual(mass.upper_penetration_m(0.0), 0.0)
|
||||
self.assertAlmostEqual(mass.lower_static_force_magnitude(-1.001), 1.0e6, delta=1.0e-6)
|
||||
self.assertAlmostEqual(mass.upper_static_force_magnitude(0.801), 1.0e6, delta=1.0e-6)
|
||||
self.assertAlmostEqual(mass.viscous_friction_force(0.25), -3.0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -61,7 +61,16 @@ class TestMqlMechanicalAssemblyTests(unittest.TestCase):
|
||||
self.assertEqual(mass.max_damping_n_per_m_per_s, 1.0e4)
|
||||
self.assertAlmostEqual(mass.min_penetration_m, 1.0e-4)
|
||||
self.assertAlmostEqual(mass.max_penetration_m, 1.0e-4)
|
||||
self.assertEqual(mass.stiction_force_n, 0.0)
|
||||
self.assertEqual(mass.coulomb_friction_n, 0.0)
|
||||
self.assertEqual(mass.viscous_friction_n_per_m_per_s, 0.0)
|
||||
self.assertEqual(mass.windage_n_per_m2_per_s2, 0.0)
|
||||
self.assertEqual(mass.stick_velocity_threshold_m_s, 1.0e-6)
|
||||
self.assertEqual(mass.reset_velocity_threshold_m_s, 1.0e-6)
|
||||
self.assertEqual(mass.rest_coeff, 0.65)
|
||||
self.assertEqual(mass.stribeck_constant_m_s, 1.0e-3)
|
||||
self.assertTrue(mass.use_friction)
|
||||
self.assertEqual(mass.stop_type, 4)
|
||||
self.assertIn("v1@mass_friction_endstops_10", mass.data_paths)
|
||||
self.assertIn("x1@mass_friction_endstops_10", mass.data_paths)
|
||||
|
||||
@@ -131,6 +140,32 @@ class TestMqlMechanicalAssemblyTests(unittest.TestCase):
|
||||
delta=1.0e-3,
|
||||
)
|
||||
|
||||
def test_mass_endstop_second_port_observables_are_opposite_sign(self) -> None:
|
||||
for alias in self.assembly.masses:
|
||||
with self.subTest(alias=alias):
|
||||
for signal in ("x1", "v1", "acc1"):
|
||||
primary = self.amesim_results.series(f"{signal}@{alias}")
|
||||
second_port = self.amesim_results.series(f"{signal}dup@{alias}")
|
||||
for index in (0, len(primary) // 2, -1):
|
||||
self.assertAlmostEqual(primary[index], -second_port[index])
|
||||
|
||||
def test_mass_endstop_force_observables_match_inactive_amesim_contacts(self) -> None:
|
||||
for alias, mass_spec in self.assembly.masses.items():
|
||||
endstop = mass_spec.endstop()
|
||||
with self.subTest(alias=alias):
|
||||
x1 = self.amesim_results.series(f"x1@{alias}")[-1]
|
||||
v1 = self.amesim_results.series(f"v1@{alias}")[-1]
|
||||
|
||||
self.assertAlmostEqual(
|
||||
endstop.viscous_friction_force(v1),
|
||||
self.amesim_results.series(f"Fvisc@{alias}")[-1],
|
||||
)
|
||||
self.assertAlmostEqual(self.amesim_results.series(f"Ffric@{alias}")[-1], 0.0)
|
||||
self.assertAlmostEqual(self.amesim_results.series(f"Fmin@{alias}")[-1], 0.0)
|
||||
self.assertAlmostEqual(self.amesim_results.series(f"Fmax@{alias}")[-1], 0.0)
|
||||
self.assertLessEqual(endstop.lower_penetration_m(x1), 1.0e-12)
|
||||
self.assertLessEqual(endstop.upper_penetration_m(x1), 1.0e-12)
|
||||
|
||||
def test_unit_helpers(self) -> None:
|
||||
self.assertAlmostEqual(mm_to_m(20.0), 0.02)
|
||||
self.assertAlmostEqual(n_per_mm_to_n_per_m(1.0e6), 1.0e9)
|
||||
|
||||
Reference in new issue
Block a user