rigidBodyDynamics: Ported tests to general RBD application
This commit is contained in:
@ -3,9 +3,6 @@ solver
|
||||
type Newmark;
|
||||
}
|
||||
|
||||
// It is necessary to iterate for the Newmark solver
|
||||
nIter 2;
|
||||
|
||||
bodies
|
||||
{
|
||||
weight
|
||||
@ -36,3 +33,12 @@ restraints
|
||||
restLength 0.4;
|
||||
}
|
||||
}
|
||||
|
||||
g (0 0 0);
|
||||
|
||||
deltaT 0.002;
|
||||
|
||||
// It is necessary to iterate for the Newmark solver
|
||||
nIter 2;
|
||||
|
||||
endTime 4;
|
||||
@ -1,3 +0,0 @@
|
||||
spring.C
|
||||
|
||||
EXE = $(FOAM_USER_APPBIN)/Test-spring
|
||||
@ -1,5 +0,0 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/rigidBodyDynamics/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-lrigidBodyDynamics
|
||||
@ -1,89 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2016-2017 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
|
||||
spring
|
||||
|
||||
Description
|
||||
Simple weight and damped-spring simulation with 1-DoF.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "rigidBodyMotion.H"
|
||||
#include "masslessBody.H"
|
||||
#include "sphere.H"
|
||||
#include "joints.H"
|
||||
#include "rigidBodyRestraint.H"
|
||||
#include "rigidBodyModelState.H"
|
||||
#include "IFstream.H"
|
||||
#include "OFstream.H"
|
||||
|
||||
using namespace Foam;
|
||||
using namespace RBD;
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
dictionary springDict(IFstream("spring")());
|
||||
|
||||
// Create the spring model from dictionary
|
||||
rigidBodyMotion spring(springDict);
|
||||
|
||||
label nIter(readLabel(springDict.lookup("nIter")));
|
||||
|
||||
Info<< spring << endl;
|
||||
|
||||
// Create the joint-space force field
|
||||
scalarField tau(spring.nDoF(), Zero);
|
||||
|
||||
// Create the external body force field
|
||||
Field<spatialVector> fx(spring.nBodies(), Zero);
|
||||
|
||||
OFstream qFile("qVsTime");
|
||||
OFstream qDotFile("qDotVsTime");
|
||||
|
||||
// Integrate the motion of the spring for 4s
|
||||
scalar deltaT = 0.002;
|
||||
for (scalar t=0; t<4; t+=deltaT)
|
||||
{
|
||||
spring.newTime();
|
||||
|
||||
for (label i=0; i<nIter; i++)
|
||||
{
|
||||
spring.solve(t + deltaT, deltaT, tau, fx);
|
||||
}
|
||||
|
||||
// Write the results for graph generation
|
||||
// using 'gnuplot spring.gnuplot'
|
||||
qFile << t << " " << spring.state().q()[0] << endl;
|
||||
qDotFile << t << " " << spring.state().qDot()[0] << endl;
|
||||
}
|
||||
|
||||
Info<< "\nEnd\n" << endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,76 +0,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
|
||||
# spring.gnuplot
|
||||
#
|
||||
# Description
|
||||
# Creates an PostScript graph file of Test-spring results vs
|
||||
# the analytical solution.
|
||||
#
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
reset
|
||||
|
||||
set samples 2000
|
||||
|
||||
k = 5000.0
|
||||
m = 9.6
|
||||
c = 50.0
|
||||
a = -0.1
|
||||
|
||||
omega = sqrt(k/m)
|
||||
zeta = c/(2.0*m*omega)
|
||||
|
||||
phi = atan((sqrt(1.0 - zeta**2))/zeta)
|
||||
A = a/sin(phi)
|
||||
|
||||
pos(A, t, omega, phi, zeta) = A*exp(-zeta*omega*t)*sin(sqrt(1-zeta**2)*omega*t + phi)
|
||||
vel(A, t, omega, phi, zeta) = \
|
||||
A*exp(-zeta*omega*t)*\
|
||||
( \
|
||||
sqrt(1-zeta**2)*omega*cos(sqrt(1-zeta**2)*omega*t + phi) \
|
||||
- zeta*omega*sin(sqrt(1-zeta**2)*omega*t + phi) \
|
||||
)
|
||||
|
||||
set xlabel "Time/[s]"
|
||||
set ylabel "Position"
|
||||
|
||||
set ytics nomirror
|
||||
set y2tics
|
||||
|
||||
set yrange [-0.1:0.1]
|
||||
set y2range [-2:2]
|
||||
|
||||
set xzeroaxis
|
||||
|
||||
set terminal postscript eps color enhanced solid
|
||||
set output "spring.eps"
|
||||
|
||||
plot \
|
||||
"qVsTime" u 1:($2 - 0.1) w l t "Simulation, centre of mass relative to start", \
|
||||
pos(A, x, omega, phi, zeta) w l t "Analytical solution, centre of mass", \
|
||||
"qDotVsTime" u 1:2 w l axes x1y2 t "Simulation, vertical velocity", \
|
||||
vel(A, x, omega, phi, zeta) w l axes x1y2 t "Analytical solution, vertical velocity"
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
Reference in New Issue
Block a user