Newmark.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2016 OpenFOAM Foundation
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "Newmark.H"
30 
31 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32 
33 namespace Foam
34 {
35 namespace RBD
36 {
37 namespace rigidBodySolvers
38 {
39  defineTypeNameAndDebug(Newmark, 0);
40  addToRunTimeSelectionTable(rigidBodySolver, Newmark, dictionary);
41 }
42 }
43 }
44 
45 
46 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
47 
49 (
50  rigidBodyMotion& body,
51  const dictionary& dict
52 )
53 :
54  rigidBodySolver(body),
55  gamma_(dict.lookupOrDefault<scalar>("gamma", 0.5)),
56  beta_
57  (
58  max
59  (
60  0.25*sqr(gamma_ + 0.5),
61  dict.lookupOrDefault<scalar>("beta", 0.25)
62  )
63  )
64 {}
65 
66 
67 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
68 
70 {}
71 
72 
73 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
74 
76 (
77  const scalarField& tau,
78  const Field<spatialVector>& fx
79 )
80 {
81  // Accumulate the restraint forces
82  scalarField rtau(tau);
83  Field<spatialVector> rfx(fx);
84  model_.applyRestraints(rtau, rfx, state());
85 
86  // Calculate the accelerations for the given state and forces
87  model_.forwardDynamics(state(), rtau, rfx);
88 
89  // Correct velocity
90  qDot() = qDot0()
91  + deltaT()*(gamma_*qDdot() + (1 - gamma_)*qDdot0());
92 
93  // Correct position
94  q() = q0()
95  + deltaT()*qDot0()
96  + sqr(deltaT())*(beta_*qDdot() + (0.5 - beta_)*qDdot0());
97 
98  correctQuaternionJoints();
99 }
100 
101 
102 // ************************************************************************* //
Foam::RBD::rigidBodySolvers::defineTypeNameAndDebug
defineTypeNameAndDebug(CrankNicolson, 0)
Foam::RBD::rigidBodySolvers::addToRunTimeSelectionTable
addToRunTimeSelectionTable(rigidBodySolver, CrankNicolson, dictionary)
Foam::RBD::rigidBodySolvers::Newmark::solve
virtual void solve(const scalarField &tau, const Field< spatialVector > &fx)
Integrate the rigid-body motion for one time-step.
Definition: Newmark.C:76
Foam::RBD::rigidBodyMotion
Six degree of freedom motion for a rigid body.
Definition: rigidBodyMotion.H:73
Foam::Field< scalar >
Foam::RBD::rigidBodySolvers::Newmark::~Newmark
virtual ~Newmark()
Destructor.
Definition: Newmark.C:69
Foam::max
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Definition: hashSets.C:47
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:121
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam
Namespace for OpenFOAM.
Definition: atmBoundaryLayer.C:33
Newmark.H
Foam::sqr
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Definition: dimensionedSymmTensor.C:51
Foam::RBD::rigidBodySolver
Definition: rigidBodySolver.H:53
Foam::RBD::rigidBodySolvers::Newmark::Newmark
Newmark(rigidBodyMotion &body, const dictionary &dict)
Construct for the given body from dictionary.
Definition: Newmark.C:49