Beispiel #1
0
def test_apply_loads_on_multi_degree_freedom_holonomic_system():
    """Example based on: https://pydy.readthedocs.io/en/latest/examples/multidof-holonomic.html"""
    W = Body('W')  #Wall
    B = Body('B')  #Block
    P = Body('P')  #Pendulum
    b = Body('b')  #bob
    q1, q2 = dynamicsymbols('q1 q2')  #generalized coordinates
    k, c, g, kT = symbols('k c g kT')  #constants
    F, T = dynamicsymbols('F T')  #Specified forces

    #Applying forces
    B.apply_force(F * W.x)
    W.apply_force(k * q1 * W.x, reaction_body=B)  #Spring force
    W.apply_force(c * q1.diff() * W.x, reaction_body=B)  #dampner
    P.apply_force(P.mass * g * W.y)
    b.apply_force(b.mass * g * W.y)

    #Applying torques
    P.apply_torque(kT * q2 * W.z, reaction_body=b)
    P.apply_torque(T * W.z)

    assert B.loads == [(B.masscenter, (F - k * q1 - c * q1.diff()) * W.x)]
    assert P.loads == [(P.masscenter, P.mass * g * W.y),
                       (P.frame, (T + kT * q2) * W.z)]
    assert b.loads == [(b.masscenter, b.mass * g * W.y),
                       (b.frame, -kT * q2 * W.z)]
    assert W.loads == [(W.masscenter, (c * q1.diff() + k * q1) * W.x)]
Beispiel #2
0
def test_body_add_torque():
    body = Body('body')
    torque_vector = body.frame.x
    body.apply_torque(torque_vector)

    assert len(body.loads) == 1
    assert body.loads[0] == (body.frame, torque_vector)
    raises(TypeError, lambda: body.apply_torque(0))
Beispiel #3
0
def test_body_add_torque():
    body = Body('body')
    torque_vector = body.frame.x
    body.apply_torque(torque_vector)

    assert len(body.loads) == 1
    assert body.loads[0] == (body.frame, torque_vector)
    raises(TypeError, lambda: body.apply_torque(0))
Beispiel #4
0
def test_remove_load():
    P1 = Point('P1')
    P2 = Point('P2')
    B = Body('B')
    f1 = B.x
    f2 = B.y
    B.apply_force(f1, P1)
    B.apply_force(f2, P2)
    B.loads == [(P1, f1), (P2, f2)]
    B.remove_load(P2)
    B.loads == [(P1, f1)]
    B.apply_torque(f1.cross(f2))
    B.loads == [(P1, f1), (B.frame, f1.cross(f2))]
    B.remove_load()
    B.loads == [(P1, f1)]
Beispiel #5
0
def test_apply_torque():
    t = symbols('t')
    q = dynamicsymbols('q')
    B1 = Body('B1')
    B2 = Body('B2')
    N = ReferenceFrame('N')
    torque = t * q * N.x

    B1.apply_torque(torque, B2)  #Applying equal and opposite torque
    assert B1.loads == [(B1.frame, torque)]
    assert B2.loads == [(B2.frame, -torque)]

    torque2 = t * N.y
    B1.apply_torque(torque2)
    assert B1.loads == [(B1.frame, torque + torque2)]