Skip to content
Snippets Groups Projects
Commit 76e22b44 authored by Henry Weller's avatar Henry Weller
Browse files

applications/test/rigidBodyDynamics/pendulumAndSpring: Another slightly more complex test

parent 189c6c68
Branches
Tags
1 merge request!33Merge foundation
pendulumAndSpring.C
EXE = $(FOAM_USER_APPBIN)/Test-pendulumAndSpring
EXE_INC = \
-I$(LIB_SRC)/rigidBodyDynamics/lnInclude
EXE_LIBS = \
-lrigidBodyDynamics
solver
{
type Newmark;
}
// It is necessary to iterate for the Newmark solver
nIter 2;
bodies
{
M
{
type sphere;
parent root;
mass 6e4;
radius 0.01;
transform (1 0 0 0 1 0 0 0 1) (0 0 0);
joint
{
type composite;
joints
(
{
type Px;
}
{
type Rz;
}
);
}
}
m
{
type sphere;
parent M;
mass 6e3;
radius 0.01;
transform (1 0 0 0 1 0 0 0 1) (0 -5 0);
mergeWith M;
}
}
restraints
{
spring
{
type linearSpring;
body M;
anchor (0 0 0);
refAttachmentPt (0 0 0);
stiffness 1e5;
damping 0;
restLength 0;
}
}
// Set the gravitational acceleration
g (0 -9.81 0);
// Set the initial offset of the pendulum to 1.5m
// and the angle of the pendulum to 30deg
q (1.5 0.5235987);
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
Application
pendulumAndSpring
Description
Simple 2-DoF pendulum and spring simulation.
\*---------------------------------------------------------------------------*/
#include "rigidBodyMotion.H"
#include "masslessBody.H"
#include "sphere.H"
#include "joints.H"
#include "rigidBodyRestraint.H"
#include "rigidBodyModelState.H"
#include "IFstream.H"
#include "OFstream.H"
#include "constants.H"
using namespace Foam;
using namespace RBD;
using namespace Foam::constant::mathematical;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
int main(int argc, char *argv[])
{
dictionary pendulumAndSpringDict(IFstream("pendulumAndSpring")());
// Create the pendulumAndSpring model from dictionary
rigidBodyMotion pendulumAndSpring(pendulumAndSpringDict);
label nIter(readLabel(pendulumAndSpringDict.lookup("nIter")));
Info<< pendulumAndSpring << endl;
Info<< "// Joint state " << endl;
pendulumAndSpring.state().write(Info);
// Create the joint-space force field
scalarField tau(pendulumAndSpring.nDoF(), Zero);
// Create the external body force field
Field<spatialVector> fx(pendulumAndSpring.nBodies(), Zero);
OFstream xFile("xVsTime");
OFstream omegaFile("omegaVsTime");
// Integrate the motion of the pendulumAndSpring for 100s
scalar deltaT = 0.01;
for (scalar t=0; t<20; t+=deltaT)
{
pendulumAndSpring.newTime();
for (label i=0; i<nIter; i++)
{
pendulumAndSpring.solve(deltaT, tau, fx);
}
// Write the results for graph generation
xFile << t << " " << pendulumAndSpring.state().q()[0] << endl;
omegaFile << t << " " << pendulumAndSpring.state().q()[1] << endl;
}
Info<< "\nEnd\n" << endl;
return 0;
}
// ************************************************************************* //
#------------------------------------------------------------------------------
# ========= |
# \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
# \\ / O peration |
# \\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
# \\/ M anipulation |
#-------------------------------------------------------------------------------
# License
# This file is part of OpenFOAM.
#
# OpenFOAM is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
#
# Script
# pendulumAndSpring.gnuplot
#
# Description
# Creates an PostScript graph file of Test-pendulumAndSpring results
#
#------------------------------------------------------------------------------
reset
set xlabel "Time/[s]"
set ylabel "x"
set y2label "omega"
set ytics nomirror
set y2tics
set yrange [-1.5:1.5]
set y2range [-35:35]
set xzeroaxis
set terminal postscript eps color enhanced solid
set output "pendulumAndSpring.eps"
plot \
"xVsTime" u 1:2 w l t "x", \
"omegaVsTime" u 1:(57.29578*$2) w l axes x1y2 t "omega"
#------------------------------------------------------------------------------
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment