rigidBodyDynamics: Ported tests to general RBD application

This commit is contained in:
Will Bainbridge
2018-05-08 09:08:46 +01:00
parent d501e87ec2
commit 59be3e7113
24 changed files with 307 additions and 618 deletions

View File

@ -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;

View File

@ -1,3 +0,0 @@
spring.C
EXE = $(FOAM_USER_APPBIN)/Test-spring

View File

@ -1,5 +0,0 @@
EXE_INC = \
-I$(LIB_SRC)/rigidBodyDynamics/lnInclude
EXE_LIBS = \
-lrigidBodyDynamics

View File

@ -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;
}
// ************************************************************************* //

View File

@ -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"
#------------------------------------------------------------------------------