OpenFOAM: API Guide
v2112
The open source CFD toolbox
symplectic.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) 2015-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 "
symplectic.H
"
29
#include "
addToRunTimeSelectionTable.H
"
30
31
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
32
33
namespace
Foam
34
{
35
namespace
sixDoFSolvers
36
{
37
defineTypeNameAndDebug
(symplectic, 0);
38
addToRunTimeSelectionTable
(sixDoFSolver, symplectic, dictionary);
39
}
40
}
41
42
43
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
44
45
Foam::sixDoFSolvers::symplectic::symplectic
46
(
47
const
dictionary
&
dict
,
48
sixDoFRigidBodyMotion
& body
49
)
50
:
51
sixDoFSolver
(
dict
, body)
52
{}
53
54
55
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
56
57
Foam::sixDoFSolvers::symplectic::~symplectic
()
58
{}
59
60
61
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
62
63
void
Foam::sixDoFSolvers::symplectic::solve
64
(
65
bool
firstIter,
66
const
vector
& fGlobal,
67
const
vector
& tauGlobal,
68
scalar deltaT,
69
scalar deltaT0
70
)
71
{
72
// First simplectic step:
73
// Half-step for linear and angular velocities
74
// Update position and orientation
75
76
v() = tConstraints() & (v0() + aDamp()*0.5*deltaT0*
a0
());
77
pi
() = rConstraints() & (pi0() + aDamp()*0.5*deltaT0*tau0());
78
79
centreOfRotation() = centreOfRotation0() + deltaT*v();
80
81
Tuple2<tensor, vector>
Qpi = rotate(Q0(),
pi
(), deltaT);
82
Q() = Qpi.
first
();
83
pi
() = rConstraints() & Qpi.
second
();
84
85
// Update the linear acceleration and torque
86
updateAcceleration(fGlobal, tauGlobal);
87
88
// Second simplectic step:
89
// Complete update of linear and angular velocities
90
91
v() += tConstraints() & aDamp()*0.5*deltaT*a();
92
pi
() += rConstraints() & aDamp()*0.5*deltaT*tau();
93
}
94
95
// ************************************************************************* //
Foam::sixDoFSolver
Definition:
sixDoFSolver.H:54
Foam::sixDoFSolvers::symplectic::~symplectic
virtual ~symplectic()
Destructor.
Definition:
symplectic.C:57
Foam::sixDoFSolvers::defineTypeNameAndDebug
defineTypeNameAndDebug(CrankNicolson, 0)
Foam::sixDoFSolvers::addToRunTimeSelectionTable
addToRunTimeSelectionTable(sixDoFSolver, CrankNicolson, dictionary)
Foam::sixDoFSolvers::symplectic::symplectic
symplectic(const dictionary &dict, sixDoFRigidBodyMotion &body)
Construct from a dictionary and the body.
Definition:
symplectic.C:46
dict
dictionary dict
Definition:
searchingEngine.H:14
Foam::sixDoFSolvers::symplectic::solve
virtual void solve(bool firstIter, const vector &fGlobal, const vector &tauGlobal, scalar deltaT, scalar deltaT0)
Drag coefficient.
Definition:
symplectic.C:64
Foam::dictionary
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition:
dictionary.H:123
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam
Namespace for OpenFOAM.
Definition:
atmBoundaryLayer.C:33
Foam::constant::atomic::a0
const dimensionedScalar a0
Bohr radius: default SI units: [m].
Foam::sixDoFRigidBodyMotion
Six degree of freedom motion for a rigid body.
Definition:
sixDoFRigidBodyMotion.H:69
Foam::constant::mathematical::pi
constexpr scalar pi(M_PI)
Foam::Vector< scalar >
Foam::Tuple2::second
const T2 & second() const noexcept
Return second.
Definition:
Tuple2.H:130
symplectic.H
Foam::Tuple2
A 2-tuple for storing two objects of dissimilar types. The container is similar in purpose to std::pa...
Definition:
stringOps.H:60
Foam::Tuple2::first
const T1 & first() const noexcept
Return first.
Definition:
Tuple2.H:118
src
sixDoFRigidBodyMotion
sixDoFSolvers
symplectic
symplectic.C
Generated by
1.8.17
OPENFOAM® is a registered
trademark
of OpenCFD Ltd.