# double_rigid_pendulum.mbd
begin: data;
problem: initial value;
end: data;
begin: initial value;
initial time: 0.;
final time: 5.;
time step: 1.e-3;
max iterations: 10;
tolerance: 1.e-6;
end: initial value;
begin: control data;
structural nodes: 2;
rigid bodies: 2;
joints: 2;
gravity;
end: control data;
# Design Variables
set: real M = 1.; # Mass of Link1 and Link2
set: real L = 1.; # Length of Link1 and Link2
# Node Labels
set: integer Node_Link1 = 1;
set: integer Node_Link2 = 2;
# Body Labels
set: integer Body_Link1 = 1;
set: integer Body_Link2 = 2;
# Joint Labels
set: integer JoRevp_Link1 = 1;
set: integer JoRevh_Link1_Link2 = 2;
begin: nodes;
structural: Node_Link1, dynamic,
1./2.*L, 0., 0., # absolute position
eye, # absolute orientation
null, # absolute velocity
null; # absolute angular velocity
structural: Node_Link2, dynamic,
L, 0., 1./2.*L, # absolute position
euler, 0., -pi/2., 0., # absolute orientation
null, # absolute velocity
null; # absolute angular velocity
end: nodes;
begin: elements;
body: Body_Link1, Node_Link1,
M, # mass
null, # relative center of mass
diag, 0., M*L^2./12., M*L^2./12.; # inertia matrix
body: Body_Link2, Node_Link2,
M, # mass
null, # relative center of mass
diag, 0., M*L^2./12., M*L^2./12.; # inertia matrix
joint: JoRevp_Link1,
revolute pin,
Node_Link1,
-1./2.*L, 0., 0., # relative offset
hinge, 1, 1., 0., 0., 3, 0., 1., 0., # relative axis orientation
null, # absolute pin position
hinge, 1, 1., 0., 0., 3, 0., 1., 0.; # absolute pin orientation
joint: JoRevh_Link1_Link2,
revolute hinge,
Node_Link1,
1./2.*L, 0., 0., # relative offset
hinge, 1, 1., 0., 0., 3, 0., 1., 0., # relative axis orientation
Node_Link2,
-1./2.*L, 0., 0., # relative offset
hinge, 1, 1., 0., 0., 3, 0., 1., 0.; # relative axis orientation
gravity: 0., 0., -1., const, 9.81;
end: elements;