Skip to content
LIBRARY
PlanarMechanics.RelativeForceTest.md

PlanarMechanics.RelativeForceTest

Test for RelativeForce: a damped pendulum with an applied sinusoidal relative force.

Topology: Fixed → Revolute → FixedTranslation → Body A RelativeForce applies a sinusoidal force between the fixed frame and the body, resolved in frame_a (default). A Damper stabilizes the revolute joint.

Translated from PlanarMechanicsTest.Sources.RelativeForce.

Usage

MultibodyComponents.PlanarMechanics.RelativeForceTest()

Behavior

Source

dyad
"""
Test for RelativeForce: a damped pendulum with an applied sinusoidal relative force.

Topology: Fixed → Revolute → FixedTranslation → Body
A RelativeForce applies a sinusoidal force between the fixed frame and the body,
resolved in frame_a (default).
A Damper stabilizes the revolute joint.

Translated from PlanarMechanicsTest.Sources.RelativeForce.
"""
test component RelativeForceTest
  world = World() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 50, "y1": 840, "x2": 150, "y2": 940, "rot": 0}
      },
      "tags": []
    }
  }
  revolute = Revolute(phi(initial = 0), w(initial = 0)) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 280, "y1": 560, "x2": 380, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
  rod = FixedTranslation(r = [0, -1]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 400, "y1": 560, "x2": 500, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
  body = Body(m = 1, I = 0.1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 540, "y1": 560, "x2": 640, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
  rel_force = RelativeForce(resolve_in_frame = MultibodyComponents.ResolveInFrame.FrameA(), scale = 0.5) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 155, "y1": 335, "x2": 255, "y2": 435, "rot": 0}
      },
      "tags": []
    }
  }
  sine_x = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 260, "x2": 120, "y2": 360, "rot": 0}
      },
      "tags": []
    }
  }
  zero_y = BlockComponents.Sources.Constant(k = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 140, "x2": 120, "y2": 240, "rot": 0}
      },
      "tags": []
    }
  }
  zero_tau = BlockComponents.Sources.Constant(k = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 0, "x2": 120, "y2": 100, "rot": 0}
      },
      "tags": []
    }
  }
  fixed = MultibodyComponents.PlanarMechanics.Fixed() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 30, "y1": 560, "x2": 130, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
relations
  connect(revolute.frame_b, rod.frame_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(body.frame_a, rod.frame_b, rel_force.frame_b) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [{"x": 520, "y": 385}], "E": -1}
      ],
      "junctions": [{"x": 520, "y": 610}],
      "renderStyle": "standard"
    }
  }
  connect(rel_force.force_y, zero_y.y) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 205, "y": 190}], "E": 2}]
    }
  }
  connect(zero_tau.y, rel_force.torque) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 241, "y": 50}], "E": 2}]
    }
  }
  connect(sine_x.y, rel_force.force_x) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 169, "y": 310}], "E": 2}]
    }
  }
  connect(fixed.frame_b, revolute.frame_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(fixed.frame_b, rel_force.frame_a) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 80, "y": 385}], "E": 2}]
    }
  }
metadata {"Dyad": {"tests": {"case1": {"stop": 3}}}}
end
Flattened Source
dyad
"""
Test for RelativeForce: a damped pendulum with an applied sinusoidal relative force.

Topology: Fixed → Revolute → FixedTranslation → Body
A RelativeForce applies a sinusoidal force between the fixed frame and the body,
resolved in frame_a (default).
A Damper stabilizes the revolute joint.

Translated from PlanarMechanicsTest.Sources.RelativeForce.
"""
test component RelativeForceTest
  world = World() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 50, "y1": 840, "x2": 150, "y2": 940, "rot": 0}
      },
      "tags": []
    }
  }
  revolute = Revolute(phi(initial = 0), w(initial = 0)) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 280, "y1": 560, "x2": 380, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
  rod = FixedTranslation(r = [0, -1]) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 400, "y1": 560, "x2": 500, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
  body = Body(m = 1, I = 0.1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 540, "y1": 560, "x2": 640, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
  rel_force = RelativeForce(resolve_in_frame = MultibodyComponents.ResolveInFrame.FrameA(), scale = 0.5) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 155, "y1": 335, "x2": 255, "y2": 435, "rot": 0}
      },
      "tags": []
    }
  }
  sine_x = BlockComponents.Sources.Sine(amplitude = 1, frequency = 1) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 260, "x2": 120, "y2": 360, "rot": 0}
      },
      "tags": []
    }
  }
  zero_y = BlockComponents.Sources.Constant(k = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 140, "x2": 120, "y2": 240, "rot": 0}
      },
      "tags": []
    }
  }
  zero_tau = BlockComponents.Sources.Constant(k = 0) {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 20, "y1": 0, "x2": 120, "y2": 100, "rot": 0}
      },
      "tags": []
    }
  }
  fixed = MultibodyComponents.PlanarMechanics.Fixed() {
    "Dyad": {
      "placement": {
        "diagram": {"iconName": "default", "x1": 30, "y1": 560, "x2": 130, "y2": 660, "rot": 0}
      },
      "tags": []
    }
  }
relations
  connect(revolute.frame_b, rod.frame_a) {"Dyad": {"edges": [{"S": 1, "M": [], "E": 2}], "renderStyle": "standard"}}
  connect(body.frame_a, rod.frame_b, rel_force.frame_b) {
    "Dyad": {
      "edges": [
        {"S": 1, "M": [], "E": -1},
        {"S": -1, "M": [], "E": 2},
        {"S": 3, "M": [{"x": 520, "y": 385}], "E": -1}
      ],
      "junctions": [{"x": 520, "y": 610}],
      "renderStyle": "standard"
    }
  }
  connect(rel_force.force_y, zero_y.y) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 205, "y": 190}], "E": 2}]
    }
  }
  connect(zero_tau.y, rel_force.torque) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 241, "y": 50}], "E": 2}]
    }
  }
  connect(sine_x.y, rel_force.force_x) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 169, "y": 310}], "E": 2}]
    }
  }
  connect(fixed.frame_b, revolute.frame_a) {"Dyad": {"renderStyle": "standard", "edges": [{"S": 1, "E": 2, "M": []}]}}
  connect(fixed.frame_b, rel_force.frame_a) {
    "Dyad": {
      "renderStyle": "standard",
      "edges": [{"S": 1, "M": [{"x": 80, "y": 385}], "E": 2}]
    }
  }
metadata {"Dyad": {"tests": {"case1": {"stop": 3}}}}
end


Test Cases

Test Case case1