优化求解器重试并校正AMESim机械端口

This commit is contained in:
huojiarong committed 2026-08-03 09:54:46 +00:00
1 parent 971e8f2336
commit 18d9802f03
15 files changed
+383 -166

No files matched your search

@@ -17,6 +17,12 @@ class AmesimMechanicalPublicComponentTests(unittest.TestCase):
def setUp(self) -> None:
self.medium = IdealGasMedium()
def test_mecmas21_catalog_ports_follow_amesim_icon_sides(self) -> None:
self.assertEqual(
tuple((port.name, port.side) for port in AmesimMecmas21.DISPLAY.ports),
(("port_2", "left"), ("port_1", "right")),
)
def test_f000_constrains_mechanical_port_force_to_zero(self) -> None:
source = AmesimF000("zero_1")
source.port_1.f = 12.5
@@ -38,6 +44,14 @@ class AmesimMechanicalPublicComponentTests(unittest.TestCase):
self.assertAlmostEqual(residuals[0].value, 0.0)
self.assertEqual(converter.component_result_values(), {"force": 20.0})
converter.apply_layout_transform(rotation=180, mirrored=False)
converter.port_2.f = 20.0
self.assertAlmostEqual(
converter.pressure_flow_equation_residuals()[0].value,
0.0,
)
self.assertEqual(converter.component_result_values(), {"force": 20.0})
def test_mecmas21_acceleration_uses_connected_port_forces(self) -> None:
mass = AmesimMecmas21(
"mass_1",
@@ -96,12 +110,12 @@ class AmesimMechanicalPublicComponentTests(unittest.TestCase):
kcont=1000.0,
rcont=10.0,
)
contact.port_1.x = 0.0
contact.port_2.x = 0.002
contact.port_1.v = 0.0
contact.port_2.v = 0.1
contact.port_1.f = -3.0
contact.port_2.f = 3.0
contact.port_1.x = 0.002
contact.port_2.x = 0.0
contact.port_1.v = 0.1
contact.port_2.v = 0.0
contact.port_1.f = 3.0
contact.port_2.f = -3.0
self.assertAlmostEqual(contact.gap, -0.002)
self.assertAlmostEqual(contact.penetration, 0.002)
@@ -116,8 +130,8 @@ class AmesimMechanicalPublicComponentTests(unittest.TestCase):
def test_lstp00a_returns_zero_before_contact(self) -> None:
contact = AmesimLstp00a("contact_1", self.medium, gap0=0.001, kcont=1000.0)
contact.port_1.x = 0.0
contact.port_2.x = 0.0005
contact.port_1.x = 0.0005
contact.port_2.x = 0.0
self.assertAlmostEqual(contact.gap, 0.0005)
self.assertAlmostEqual(contact.contact_force, 0.0)