diff --git a/src/sixDoFRigidBodyMotion/Make/files b/src/sixDoFRigidBodyMotion/Make/files
index f5abd78686..837d2df3fd 100644
--- a/src/sixDoFRigidBodyMotion/Make/files
+++ b/src/sixDoFRigidBodyMotion/Make/files
@@ -24,6 +24,9 @@ $(constraints)/orientation/sixDoFRigidBodyMotionOrientationConstraint.C
$(constraints)/plane/sixDoFRigidBodyMotionPlaneConstraint.C
$(constraints)/point/sixDoFRigidBodyMotionPointConstraint.C
+pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C
+pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C
+
sixDoFRigidBodyMotionSolver/sixDoFRigidBodyMotionSolver.C
sixDoFSolvers/sixDoFSolver/sixDoFSolver.C
diff --git a/src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C
new file mode 100644
index 0000000000..daeb9adf8d
--- /dev/null
+++ b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C
@@ -0,0 +1,290 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "sixDoFRigidBodyDisplacementPointPatchVectorField.H"
+#include "pointPatchFields.H"
+#include "addToRunTimeSelectionTable.H"
+#include "Time.H"
+#include "fvMesh.H"
+#include "volFields.H"
+#include "uniformDimensionedFields.H"
+#include "forces.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+sixDoFRigidBodyDisplacementPointPatchVectorField::
+sixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const pointPatch& p,
+ const DimensionedField& iF
+)
+:
+ fixedValuePointPatchField(p, iF),
+ motion_(),
+ initialPoints_(p.localPoints()),
+ rhoInf_(1.0),
+ rhoName_("rho"),
+ lookupGravity_(-1),
+ g_(Zero),
+ curTimeIndex_(-1)
+{}
+
+
+sixDoFRigidBodyDisplacementPointPatchVectorField::
+sixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const pointPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ fixedValuePointPatchField(p, iF, dict),
+ motion_(dict, dict),
+ rhoInf_(1.0),
+ rhoName_(dict.lookupOrDefault("rho", "rho")),
+ lookupGravity_(-1),
+ g_(Zero),
+ curTimeIndex_(-1)
+{
+ if (rhoName_ == "rhoInf")
+ {
+ rhoInf_ = readScalar(dict.lookup("rhoInf"));
+ }
+
+ if (dict.readIfPresent("g", g_))
+ {
+ lookupGravity_ = -2;
+ }
+
+ if (!dict.found("value"))
+ {
+ updateCoeffs();
+ }
+
+ if (dict.found("initialPoints"))
+ {
+ initialPoints_ = vectorField("initialPoints", dict , p.size());
+ }
+ else
+ {
+ initialPoints_ = p.localPoints();
+ }
+}
+
+
+sixDoFRigidBodyDisplacementPointPatchVectorField::
+sixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const sixDoFRigidBodyDisplacementPointPatchVectorField& ptf,
+ const pointPatch& p,
+ const DimensionedField& iF,
+ const pointPatchFieldMapper& mapper
+)
+:
+ fixedValuePointPatchField(ptf, p, iF, mapper),
+ motion_(ptf.motion_),
+ initialPoints_(ptf.initialPoints_, mapper),
+ rhoInf_(ptf.rhoInf_),
+ rhoName_(ptf.rhoName_),
+ lookupGravity_(ptf.lookupGravity_),
+ g_(ptf.g_),
+ curTimeIndex_(-1)
+{}
+
+
+sixDoFRigidBodyDisplacementPointPatchVectorField::
+sixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const sixDoFRigidBodyDisplacementPointPatchVectorField& ptf,
+ const DimensionedField& iF
+)
+:
+ fixedValuePointPatchField(ptf, iF),
+ motion_(ptf.motion_),
+ initialPoints_(ptf.initialPoints_),
+ rhoInf_(ptf.rhoInf_),
+ rhoName_(ptf.rhoName_),
+ lookupGravity_(ptf.lookupGravity_),
+ g_(ptf.g_),
+ curTimeIndex_(-1)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void sixDoFRigidBodyDisplacementPointPatchVectorField::autoMap
+(
+ const pointPatchFieldMapper& m
+)
+{
+ fixedValuePointPatchField::autoMap(m);
+
+ initialPoints_.autoMap(m);
+}
+
+
+void sixDoFRigidBodyDisplacementPointPatchVectorField::rmap
+(
+ const pointPatchField& ptf,
+ const labelList& addr
+)
+{
+ const sixDoFRigidBodyDisplacementPointPatchVectorField& sDoFptf =
+ refCast(ptf);
+
+ fixedValuePointPatchField::rmap(sDoFptf, addr);
+
+ initialPoints_.rmap(sDoFptf.initialPoints_, addr);
+}
+
+
+void sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
+{
+ if (this->updated())
+ {
+ return;
+ }
+
+ if (lookupGravity_ < 0)
+ {
+ if (db().foundObject("g"))
+ {
+ if (lookupGravity_ == -2)
+ {
+ FatalErrorInFunction
+ << "Specifying the value of g in this boundary condition "
+ << "when g is available from the database is considered "
+ << "a fatal error to avoid the possibility of inconsistency"
+ << exit(FatalError);
+ }
+ else
+ {
+ lookupGravity_ = 1;
+ }
+ }
+ else
+ {
+ lookupGravity_ = 0;
+ }
+ }
+
+ const polyMesh& mesh = this->internalField().mesh()();
+ const Time& t = mesh.time();
+ const pointPatch& ptPatch = this->patch();
+
+ // Store the motion state at the beginning of the time-step
+ bool firstIter = false;
+ if (curTimeIndex_ != t.timeIndex())
+ {
+ motion_.newTime();
+ curTimeIndex_ = t.timeIndex();
+ firstIter = true;
+ }
+
+ dictionary forcesDict;
+
+ forcesDict.add("type", functionObjects::forces::typeName);
+ forcesDict.add("patches", wordList(1, ptPatch.name()));
+ forcesDict.add("rhoInf", rhoInf_);
+ forcesDict.add("rho", rhoName_);
+ forcesDict.add("CofR", motion_.centreOfRotation());
+
+ functionObjects::forces f("forces", db(), forcesDict);
+
+ f.calcForcesMoment();
+
+ // Get the forces on the patch faces at the current positions
+
+ if (lookupGravity_ == 1)
+ {
+ uniformDimensionedVectorField g =
+ db().lookupObject("g");
+
+ g_ = g.value();
+ }
+
+ // scalar ramp = min(max((t.value() - 5)/10, 0), 1);
+ scalar ramp = 1.0;
+
+ motion_.update
+ (
+ firstIter,
+ ramp*(f.forceEff() + motion_.mass()*g_),
+ ramp*(f.momentEff() + motion_.mass()*(motion_.momentArm() ^ g_)),
+ t.deltaTValue(),
+ t.deltaT0Value()
+ );
+
+ Field::operator=
+ (
+ motion_.transform(initialPoints_) - initialPoints_
+ );
+
+ fixedValuePointPatchField::updateCoeffs();
+}
+
+
+void sixDoFRigidBodyDisplacementPointPatchVectorField::write(Ostream& os) const
+{
+ pointPatchField::write(os);
+
+ os.writeKeyword("rho") << rhoName_ << token::END_STATEMENT << nl;
+
+ if (rhoName_ == "rhoInf")
+ {
+ os.writeKeyword("rhoInf") << rhoInf_ << token::END_STATEMENT << nl;
+ }
+
+ if (lookupGravity_ == 0 || lookupGravity_ == -2)
+ {
+ os.writeKeyword("g") << g_ << token::END_STATEMENT << nl;
+ }
+
+ motion_.write(os);
+
+ initialPoints_.writeEntry("initialPoints", os);
+
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makePointPatchTypeField
+(
+ pointPatchVectorField,
+ sixDoFRigidBodyDisplacementPointPatchVectorField
+);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H
new file mode 100644
index 0000000000..04b0017062
--- /dev/null
+++ b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H
@@ -0,0 +1,196 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-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 .
+
+Class
+ Foam::sixDoFRigidBodyDisplacementPointPatchVectorField
+
+Description
+ Foam::sixDoFRigidBodyDisplacementPointPatchVectorField
+
+SourceFiles
+ sixDoFRigidBodyDisplacementPointPatchVectorField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef sixDoFRigidBodyDisplacementPointPatchVectorField_H
+#define sixDoFRigidBodyDisplacementPointPatchVectorField_H
+
+#include "fixedValuePointPatchField.H"
+#include "sixDoFRigidBodyMotion.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class sixDoFRigidBodyDisplacementPointPatchVectorField Declaration
+\*---------------------------------------------------------------------------*/
+
+class sixDoFRigidBodyDisplacementPointPatchVectorField
+:
+ public fixedValuePointPatchField
+{
+ // Private data
+
+ //- Six dof motion object
+ sixDoFRigidBodyMotion motion_;
+
+ //- Initial positions of points on the patch
+ pointField initialPoints_;
+
+ //- Reference density required by the forces object for
+ // incompressible calculations, required if rho == rhoInf
+ scalar rhoInf_;
+
+ //- Name of density field, optional unless used for an
+ // incompressible simulation, when this needs to be specified
+ // as rhoInf
+ word rhoName_;
+
+ //- State of gravity lookup:
+ // -1 = not determined yet, as the BC may be instantiated before g has
+ // been read into the db yet. Determination deferred until first
+ // call to updateCoeffs. A g keyword was not supplied to the
+ // dictionary.
+ // -2 = as for -1, but a gravity value was specified in the dictionary,
+ // specifying a value in the dictionary is considered a fatal
+ // error if g is available from the db.
+ // 0 = Use this boundary condition's own value of gravity, as not
+ // available from the db.
+ // 1 = Lookup gravity from db.
+ label lookupGravity_;
+
+ //- Gravity vector to store when not available from the db
+ vector g_;
+
+ //- Current time index (used for updating)
+ label curTimeIndex_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("sixDoFRigidBodyDisplacement");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ sixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const pointPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ sixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const pointPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given patchField onto a new patch
+ sixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const sixDoFRigidBodyDisplacementPointPatchVectorField&,
+ const pointPatch&,
+ const DimensionedField&,
+ const pointPatchFieldMapper&
+ );
+
+ //- Construct and return a clone
+ virtual autoPtr> clone() const
+ {
+ return autoPtr>
+ (
+ new sixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ *this
+ )
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ sixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const sixDoFRigidBodyDisplacementPointPatchVectorField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual autoPtr> clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return autoPtr>
+ (
+ new sixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ *this,
+ iF
+ )
+ );
+ }
+
+
+ // Member functions
+
+ // Mapping functions
+
+ //- Map (and resize as needed) from self given a mapping object
+ virtual void autoMap
+ (
+ const pointPatchFieldMapper&
+ );
+
+ //- Reverse map the given pointPatchField onto this pointPatchField
+ virtual void rmap
+ (
+ const pointPatchField&,
+ const labelList&
+ );
+
+
+ // Evaluation functions
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+
+ //- Write
+ virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //
diff --git a/src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C
new file mode 100644
index 0000000000..123b128b92
--- /dev/null
+++ b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C
@@ -0,0 +1,216 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-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 .
+
+\*---------------------------------------------------------------------------*/
+
+#include "uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H"
+#include "pointPatchFields.H"
+#include "addToRunTimeSelectionTable.H"
+#include "Time.H"
+#include "fvMesh.H"
+#include "volFields.H"
+#include "uniformDimensionedFields.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
+
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const pointPatch& p,
+ const DimensionedField& iF
+)
+:
+ fixedValuePointPatchField(p, iF),
+ motion_(),
+ initialPoints_(p.localPoints()),
+ curTimeIndex_(-1)
+{}
+
+
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const pointPatch& p,
+ const DimensionedField& iF,
+ const dictionary& dict
+)
+:
+ fixedValuePointPatchField(p, iF, dict),
+ motion_(dict, dict),
+ curTimeIndex_(-1)
+{
+ if (!dict.found("value"))
+ {
+ updateCoeffs();
+ }
+
+ if (dict.found("initialPoints"))
+ {
+ initialPoints_ = vectorField("initialPoints", dict , p.size());
+ }
+ else
+ {
+ initialPoints_ = p.localPoints();
+ }
+}
+
+
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField& ptf,
+ const pointPatch& p,
+ const DimensionedField& iF,
+ const pointPatchFieldMapper& mapper
+)
+:
+ fixedValuePointPatchField(ptf, p, iF, mapper),
+ motion_(ptf.motion_),
+ initialPoints_(ptf.initialPoints_, mapper),
+ curTimeIndex_(-1)
+{}
+
+
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::
+uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+(
+ const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField& ptf,
+ const DimensionedField& iF
+)
+:
+ fixedValuePointPatchField(ptf, iF),
+ motion_(ptf.motion_),
+ initialPoints_(ptf.initialPoints_),
+ curTimeIndex_(-1)
+{}
+
+
+// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
+
+void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::autoMap
+(
+ const pointPatchFieldMapper& m
+)
+{
+ fixedValuePointPatchField::autoMap(m);
+
+ initialPoints_.autoMap(m);
+}
+
+
+void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::rmap
+(
+ const pointPatchField& ptf,
+ const labelList& addr
+)
+{
+ const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField& uSDoFptf =
+ refCast
+ <
+ const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+ >(ptf);
+
+ fixedValuePointPatchField::rmap(uSDoFptf, addr);
+
+ initialPoints_.rmap(uSDoFptf.initialPoints_, addr);
+}
+
+
+void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs()
+{
+ if (this->updated())
+ {
+ return;
+ }
+
+ const polyMesh& mesh = this->internalField().mesh()();
+ const Time& t = mesh.time();
+
+ // Store the motion state at the beginning of the time-step
+ bool firstIter = false;
+ if (curTimeIndex_ != t.timeIndex())
+ {
+ motion_.newTime();
+ curTimeIndex_ = t.timeIndex();
+ firstIter = true;
+ }
+
+ vector gravity = Zero;
+
+ if (db().foundObject("g"))
+ {
+ uniformDimensionedVectorField g =
+ db().lookupObject("g");
+
+ gravity = g.value();
+ }
+
+ // Do not modify the accelerations, except with gravity, where available
+ motion_.update
+ (
+ firstIter,
+ gravity*motion_.mass(),
+ Zero,
+ t.deltaTValue(),
+ t.deltaT0Value()
+ );
+
+ Field::operator=
+ (
+ motion_.transform(initialPoints_) - initialPoints_
+ );
+
+ fixedValuePointPatchField::updateCoeffs();
+}
+
+
+void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::write
+(
+ Ostream& os
+) const
+{
+ pointPatchField::write(os);
+ motion_.write(os);
+ initialPoints_.writeEntry("initialPoints", os);
+ writeEntry("value", os);
+}
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+makePointPatchTypeField
+(
+ pointPatchVectorField,
+ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+);
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// ************************************************************************* //
diff --git a/src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H
new file mode 100644
index 0000000000..b5025104db
--- /dev/null
+++ b/src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H
@@ -0,0 +1,171 @@
+/*---------------------------------------------------------------------------*\
+ ========= |
+ \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
+ \\ / O peration |
+ \\ / A nd | Copyright (C) 2011-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 .
+
+Class
+ Foam::uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+
+Description
+ Foam::uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+
+SourceFiles
+ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C
+
+\*---------------------------------------------------------------------------*/
+
+#ifndef uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField_H
+#define uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField_H
+
+#include "fixedValuePointPatchField.H"
+#include "sixDoFRigidBodyMotion.H"
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+namespace Foam
+{
+
+/*---------------------------------------------------------------------------*\
+ Class uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField Declaration
+\*---------------------------------------------------------------------------*/
+
+class uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+:
+ public fixedValuePointPatchField
+{
+ // Private data
+
+ //- Six dof motion object
+ sixDoFRigidBodyMotion motion_;
+
+ //- Initial positions of points on the patch
+ pointField initialPoints_;
+
+ //- Current time index (used for updating)
+ label curTimeIndex_;
+
+
+public:
+
+ //- Runtime type information
+ TypeName("uncoupledSixDoFRigidBodyDisplacement");
+
+
+ // Constructors
+
+ //- Construct from patch and internal field
+ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const pointPatch&,
+ const DimensionedField&
+ );
+
+ //- Construct from patch, internal field and dictionary
+ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const pointPatch&,
+ const DimensionedField&,
+ const dictionary&
+ );
+
+ //- Construct by mapping given patchField onto a new patch
+ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField&,
+ const pointPatch&,
+ const DimensionedField&,
+ const pointPatchFieldMapper&
+ );
+
+ //- Construct and return a clone
+ virtual autoPtr> clone() const
+ {
+ return autoPtr>
+ (
+ new uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ *this
+ )
+ );
+ }
+
+ //- Construct as copy setting internal field reference
+ uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField&,
+ const DimensionedField&
+ );
+
+ //- Construct and return a clone setting internal field reference
+ virtual autoPtr> clone
+ (
+ const DimensionedField& iF
+ ) const
+ {
+ return autoPtr>
+ (
+ new uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField
+ (
+ *this,
+ iF
+ )
+ );
+ }
+
+
+ // Member functions
+
+ // Mapping functions
+
+ //- Map (and resize as needed) from self given a mapping object
+ virtual void autoMap
+ (
+ const pointPatchFieldMapper&
+ );
+
+ //- Reverse map the given pointPatchField onto this pointPatchField
+ virtual void rmap
+ (
+ const pointPatchField&,
+ const labelList&
+ );
+
+
+ // Evaluation functions
+
+ //- Update the coefficients associated with the patch field
+ virtual void updateCoeffs();
+
+
+ //- Write
+ virtual void write(Ostream&) const;
+};
+
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+} // End namespace Foam
+
+// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
+
+#endif
+
+// ************************************************************************* //