# reduction_gear.mbd
#-----------------------------------------------------------------------------
# [Data Block]
begin: data;
problem: initial value;
end: data;
#-----------------------------------------------------------------------------
# [<Problem> Block]
begin: initial value;
initial time: 0.;
final time: 5.;
time step: 1.e-4;
max iterations: 10;
tolerance: 1.e-7;
end: initial value;
#-----------------------------------------------------------------------------
# [Control Data Block]
begin: control data;
output frequency: 100;
structural nodes: 2;
rigid bodies: 2;
joints: 3;
forces: 3;
end: control data;
#-----------------------------------------------------------------------------
# Design Variables
set: real M_Gear1 = 0.1; #[kg] Mass of Gear1
set: real M_Gear2 = 0.1; #[kg] Mass of Gear2
set: real R_Gear1 = 0.1; #[m] Radius of Gear1
set: real R_Gear2 = 0.3; #[m] Radius of Gear2
set: real K_GroundSpring = 5; #[Nm/rad] Stiffnes Coefficient of Ground Spring
# attached to Gear2
set: real K_Gear1_Gear2 = 100000.; #[N/m] Stiffness Coefficient of Contact
set: real C_Gear1_Gear2 = 100.; #[Ns/m] Damping Coefficient of Contact
#-----------------------------------------------------------------------------
# Intermediate Variables
set: real I_Gear1 = M_Gear1*R_Gear1^2./2.; #[kgm^2] Moment of Inertia of Gear1
set: real I_Gear2 = M_Gear2*R_Gear2^2./2.; #[kgm^2] Moment of Inertia of Gear2
#-----------------------------------------------------------------------------
# Reference Labels
set: integer Ref_Gear1 = 1;
set: integer Ref_Gear2 = 2;
# Node Labels
set: integer Node_Gear1 = 1;
set: integer Node_Gear2 = 2;
# Body Labels
set: integer Body_Gear1 = 1;
set: integer Body_Gear2 = 2;
# Joint Labels
set: integer JoRevp_Gear1 = 1;
set: integer JoRevp_Gear2 = 2;
set: integer JoTotp_Gear1_Input = 3;
# Force Labels
set: integer CoStr_Gear1 = 1;
set: integer CoStr_Gear2 = 2;
set: integer CoStr_Gear2_GroundSpring = 3;
#-----------------------------------------------------------------------------
# Scalar Functions
scalar function: "cubstep",
cubicspline, do not extrapolate,
-0.03, 0.00,
-0.02, 0.00,
-0.01, 0.00,
0.00, 0.00,
1.00, 1.00,
1.01, 1.00,
1.02, 1.00,
1.03, 1.00;
#-----------------------------------------------------------------------------
# References
reference: Ref_Gear1,
null, # absolute position
euler, pi/2., 0., 0., # absolute orientation
null, # absolute velocity
null; # absolute angular velocity
reference: Ref_Gear2,
0., 0., -R_Gear1-R_Gear2, # absolute position
euler, pi/2., 0., 0., # absolute orientation
null, # absolute velocity
null; # absolute angular velocity
#-----------------------------------------------------------------------------
# [Nodes Block]
begin: nodes;
#-----------------------------------------------------------------------------
# Nodes
structural: Node_Gear1, dynamic,
reference, Ref_Gear1, null, # absolute position
reference, Ref_Gear1, eye, # absolute orientation
reference, Ref_Gear1, null, # absolute velocity
reference, Ref_Gear1, null; # absolute angular velocity
structural: Node_Gear2, dynamic,
reference, Ref_Gear2, null, # absolute position
reference, Ref_Gear2, eye, # absolute orientation
reference, Ref_Gear2, null, # absolute velocity
reference, Ref_Gear2, null; # absolute angular velocity
end: nodes;
#-----------------------------------------------------------------------------
# [Elements Block]
begin: elements;
#-----------------------------------------------------------------------------
# Bodies
body: Body_Gear1, Node_Gear1,
M_Gear1, # mass
null, # relative center of mass
diag, 1., 1., I_Gear1; # inertia matrix
body: Body_Gear2, Node_Gear2,
M_Gear2, # mass
null, # relative center of mass
diag, 1., 1., I_Gear2; # inertia matrix
#-----------------------------------------------------------------------------
# Joints
joint: JoRevp_Gear1,
revolute pin,
Node_Gear1,
null, # relative offset
hinge, eye, # relative orientation
reference, Ref_Gear1, null, # absolute pin position
hinge, reference, Ref_Gear1, eye; # absolute pin orientation
joint: JoRevp_Gear2,
revolute pin,
Node_Gear2,
null, # relative offset
hinge, eye, # relative orientation
reference, Ref_Gear2, null, # absolute pin position
hinge, reference, Ref_Gear2, eye; # absolute pin orientation
joint: JoTotp_Gear1_Input,
total pin joint,
Node_Gear1,
position, null, # relative offset
position, reference, Ref_Gear1, null, # absolute position
rotation orientation, reference, Ref_Gear1, eye, # absolute rotation orientation
position constraint,
inactive, inactive, inactive,
null,
orientation constraint,
inactive, inactive, active,
single, 0., 0., 1., string, "2.*pi*3.*sin(2.*pi*Time/4.)*model::sf::cubstep(Time)";
#-----------------------------------------------------------------------------
# Plugin Variables
set: [element, AZ_Gear1, JoRevp_Gear1, joint, string="rz"];
set: [element, WZ_Gear1, JoRevp_Gear1, joint, string="wz"];
set: [element, AZ_Gear2, JoRevp_Gear2, joint, string="rz"];
set: [element, WZ_Gear2, JoRevp_Gear2, joint, string="wz"];
#-----------------------------------------------------------------------------
# Forces
couple: CoStr_Gear1,
follower,
Node_Gear1,
single, 0., 0., 1.,
string, "-K_Gear1_Gear2*(AZ_Gear1*R_Gear1+AZ_Gear2*R_Gear2)*R_Gear1\
-C_Gear1_Gear2*(WZ_Gear1*R_Gear1+WZ_Gear2*R_Gear2)*R_Gear1";
couple: CoStr_Gear2,
follower,
Node_Gear2,
single, 0., 0., 1.,
string, "-K_Gear1_Gear2*(AZ_Gear1*R_Gear1+AZ_Gear2*R_Gear2)*R_Gear2\
-C_Gear1_Gear2*(WZ_Gear1*R_Gear1+WZ_Gear2*R_Gear2)*R_Gear2";
couple: CoStr_Gear2_GroundSpring,
follower,
Node_Gear2,
single, 0., 0., 1.,
string, "-K_GroundSpring*AZ_Gear2";
end: elements;