Restructuring sixDOFODE class

Separation of I/O and core functionality was necessary in order to enable
correct simulation restart because of combined run-time selection and automatic
read/write operations provided by regIOobject (IOdictionary)
This commit is contained in:
Vuko Vukcevic 2017-02-27 16:56:17 +01:00 committed by Hrvoje Jasak
parent ed31562fe8
commit b3118e18a4
8 changed files with 228 additions and 65 deletions

View file

@ -13,6 +13,7 @@ sixDOF = sixDOF
$(sixDOF)/finiteRotation/finiteRotation.C
$(sixDOF)/sixDOFqODE/sixDOFqODE.C
$(sixDOF)/sixDOFODE/sixDOFODEIO.C
$(sixDOF)/sixDOFODE/sixDOFODE.C
$(sixDOF)/sixDOFODE/newSixDOFODE.C
$(sixDOF)/quaternionSixDOF/quaternionSixDOF.C

View file

@ -29,7 +29,7 @@ Description
Author
Dubravko Matijasevic, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Vuko Vukcevic, FSB Zagreb. All rights reserved.
SourceFiles
@ -38,6 +38,7 @@ SourceFiles
\*---------------------------------------------------------------------------*/
#include "quaternionSixDOF.H"
#include "sixDOFODEIO.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -226,29 +227,29 @@ Foam::quaternionSixDOF::quaternionSixDOF(const IOobject& io)
:
sixDOFODE(io),
Xrel_(lookup("Xrel")),
U_(lookup("U")),
Xrel_(dict().lookup("Xrel")),
U_(dict().lookup("U")),
Uaverage_(U_),
rotation_
(
vector(lookup("rotationVector")),
dimensionedScalar(lookup("rotationAngle")).value()
vector(dict().lookup("rotationVector")),
dimensionedScalar(dict().lookup("rotationAngle")).value()
),
omega_(lookup("omega")),
omega_(dict().lookup("omega")),
omegaAverage_(omega_),
omegaAverageAbsolute_(omega_),
coeffs_(13, 0.0),
fixedSurge_(lookup("fixedSurge")),
fixedSway_(lookup("fixedSway")),
fixedHeave_(lookup("fixedHeave")),
fixedRoll_(lookup("fixedRoll")),
fixedPitch_(lookup("fixedPitch")),
fixedYaw_(lookup("fixedYaw")),
fixedSurge_(dict().lookup("fixedSurge")),
fixedSway_(dict().lookup("fixedSway")),
fixedHeave_(dict().lookup("fixedHeave")),
fixedRoll_(dict().lookup("fixedRoll")),
fixedPitch_(dict().lookup("fixedPitch")),
fixedYaw_(dict().lookup("fixedYaw")),
referentMotionConstraints_
(
lookupOrDefault<Switch>
dict().lookupOrDefault<Switch>
(
"referentMotionConstraints",
false
@ -271,9 +272,9 @@ Foam::quaternionSixDOF::quaternionSixDOF
IOobject
(
name,
qsd.instance(),
qsd.local(),
qsd.db(),
qsd.dict().instance(),
qsd.dict().local(),
qsd.dict().db(),
IOobject::NO_READ,
IOobject::NO_WRITE
)
@ -658,18 +659,18 @@ bool Foam::quaternionSixDOF::writeData(Ostream& os) const
os.writeKeyword("omega") << tab << this->omega()
<< token::END_STATEMENT << nl << nl;
os.writeKeyword("fixedSurge") << tab << this->fixedSurge_ <<
token::END_STATEMENT << endl;
os.writeKeyword("fixedSway") << tab << this->fixedSway_ <<
token::END_STATEMENT << endl;
os.writeKeyword("fixedHeave") << tab << this->fixedHeave_ <<
token::END_STATEMENT << endl;
os.writeKeyword("fixedRoll") << tab << this->fixedRoll_ <<
token::END_STATEMENT << endl;
os.writeKeyword("fixedPitch") << tab << this->fixedPitch_ <<
token::END_STATEMENT << endl;
os.writeKeyword("fixedYaw") << tab << this->fixedYaw_ <<
token::END_STATEMENT << endl;
os.writeKeyword("fixedSurge") << tab << fixedSurge_ <<
token::END_STATEMENT << nl;
os.writeKeyword("fixedSway") << tab << fixedSway_ <<
token::END_STATEMENT << nl;
os.writeKeyword("fixedHeave") << tab << fixedHeave_ <<
token::END_STATEMENT << nl;
os.writeKeyword("fixedRoll") << tab << fixedRoll_ <<
token::END_STATEMENT << nl;
os.writeKeyword("fixedPitch") << tab << fixedPitch_ <<
token::END_STATEMENT << nl;
os.writeKeyword("fixedYaw") << tab << fixedYaw_ <<
token::END_STATEMENT << nl << endl;
return os.good();
}

View file

@ -29,7 +29,7 @@ Description
Author
Dubravko Matijasevic, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Vuko Vukcevic, FSB Zagreb. All rights reserved.
SourceFiles

View file

@ -83,11 +83,7 @@ void Foam::sixDOFBodies::setBodies()
solvers_.set
(
bodyI,
ODESolver::New
(
lookup("solver"),
odes_[bodyI]
)
ODESolver::New(lookup("solver"), odes_[bodyI])
);
}
}

View file

@ -30,7 +30,7 @@ Description
Author
Dubravko Matijasevic, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Vuko Vukcevic, FSB Zagreb. All rights reserved.
\*---------------------------------------------------------------------------*/
@ -123,14 +123,15 @@ void Foam::sixDOFODE::aitkensRelaxation
Foam::sixDOFODE::sixDOFODE(const IOobject& io)
:
IOdictionary(io),
ODE(),
dict_(io, *this),
mass_(lookup("mass")),
momentOfInertia_(lookup("momentOfInertia")),
mass_(dict_.lookup("mass")),
momentOfInertia_(dict_.lookup("momentOfInertia")),
Xequilibrium_(lookup("equilibriumPosition")),
linSpringCoeffs_(lookup("linearSpring")),
linDampingCoeffs_(lookup("linearDamping")),
Xequilibrium_(dict_.lookup("equilibriumPosition")),
linSpringCoeffs_(dict_.lookup("linearSpring")),
linDampingCoeffs_(dict_.lookup("linearDamping")),
relaxFactorT_(1.0),
relaxFactorR_(1.0),
@ -142,10 +143,10 @@ Foam::sixDOFODE::sixDOFODE(const IOobject& io)
An_(3, vector::zero),
OmegaDotn_(3, vector::zero),
force_(lookup("force")),
moment_(lookup("moment")),
forceRelative_(lookup("forceRelative")),
momentRelative_(lookup("momentRelative"))
force_(dict_.lookup("force")),
moment_(dict_.lookup("moment")),
forceRelative_(dict_.lookup("forceRelative")),
momentRelative_(dict_.lookup("momentRelative"))
{}
@ -157,6 +158,11 @@ Foam::sixDOFODE::~sixDOFODE()
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
const Foam::sixDOFODEIO& Foam::sixDOFODE::dict() const
{
return dict_;
}
void Foam::sixDOFODE::relaxAcceleration
(
@ -255,16 +261,4 @@ bool Foam::sixDOFODE::writeData(Ostream& os) const
}
// * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * * //
Foam::Ostream& Foam::operator<<(Ostream& os, const sixDOFODE& sds)
{
sds.writeData(os);
os.check("Ostream& operator<<(Ostream&, const sixDOFODE");
return os;
}
// ************************************************************************* //

View file

@ -31,7 +31,7 @@ Description
Author
Dubravko Matijasevic, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Hrvoje Jasak, FSB Zagreb. All rights reserved.
Vuko Vukcevic, FSB Zagreb. All rights reserved.
SourceFiles
@ -45,7 +45,7 @@ SourceFiles
#define sixDOFODE_H
#include "ODE.H"
#include "IOdictionary.H"
#include "sixDOFODEIO.H"
#include "dimensionedTypes.H"
#include "autoPtr.H"
#include "runTimeSelectionTables.H"
@ -55,6 +55,9 @@ SourceFiles
namespace Foam
{
// Forward declarations of classes
class IOobject;
class finiteRotation;
class HamiltonRodriguezRot;
@ -64,11 +67,14 @@ class HamiltonRodriguezRot;
class sixDOFODE
:
public IOdictionary,
public ODE
{
// Private data
//- Dictionary object controlling I/O for sixDOFODE
const sixDOFODEIO dict_;
// Body data
//- Mass
@ -191,6 +197,9 @@ public:
// Access to common data
//- Return sixDOFODEIO (IOdictionary)
const sixDOFODEIO& dict() const;
//- Return mass
inline const dimensionedScalar& mass() const;
@ -377,11 +386,6 @@ public:
//- writeData member function required by regIOobject
virtual bool writeData(Ostream&) const;
// Ostream operator
friend Ostream& operator<<(Ostream&, const sixDOFODE&);
};

View file

@ -0,0 +1,65 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.0
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Class
sixDOFODEIO
Description
Class used to control input/output for sixDOFODEIO. Need separate classes in
order to be able to have run-time selection and automatic I/O.
Author
Vuko Vukcevic, FSB Zagreb. All rights reserved.
\*---------------------------------------------------------------------------*/
#include "sixDOFODEIO.H"
#include "sixDOFODE.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::sixDOFODEIO::sixDOFODEIO(const IOobject& io, const sixDOFODE& sixDOF)
:
IOdictionary(io),
sixDOF_(sixDOF)
{
// Note: parameter sixDOF is incomplete here, must not call its member
// functions here.
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::sixDOFODEIO::~sixDOFODEIO()
{}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
bool Foam::sixDOFODEIO::writeData(Ostream& os) const
{
return sixDOF_.writeData(os);
}
// ************************************************************************* //

View file

@ -0,0 +1,102 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | foam-extend: Open Source CFD
\\ / O peration | Version: 4.0
\\ / A nd | Web: http://www.foam-extend.org
\\/ M anipulation | For copyright notice see file Copyright
-------------------------------------------------------------------------------
License
This file is part of foam-extend.
foam-extend 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.
foam-extend 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 foam-extend. If not, see <http://www.gnu.org/licenses/>.
Class
sixDOFODEIO
Description
Class used to control input/output for sixDOFODEIO. Need separate classes in
order to be able to have run-time selection and automatic I/O.
Author
Vuko Vukcevic, FSB Zagreb. All rights reserved.
SourceFiles
sixDOFODEIO.C
\*---------------------------------------------------------------------------*/
#ifndef sixDOFODEIO_H
#define sixDOFODEIO_H
#include "IOdictionary.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
class sixDOFODE;
/*---------------------------------------------------------------------------*\
Class sixDOFODEIO Declaration
\*---------------------------------------------------------------------------*/
class sixDOFODEIO
:
public IOdictionary
{
// Private data
//- Const reference to the underlying sixDOFODE object
const sixDOFODE& sixDOF_;
// Private Member Functions
//- Disallow default bitwise copy construct
sixDOFODEIO(const sixDOFODEIO&);
//- Disallow default bitwise assignment
void operator=(const sixDOFODEIO&);
public:
// Constructors
//- Construct from dictionary and sixDOFODE object
sixDOFODEIO(const IOobject& io, const sixDOFODE& sixDOF);
// Destructor
virtual ~sixDOFODEIO();
// Write control
//- writeData member function controlling output
virtual bool writeData(Ostream& os) const;
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //