From 8aab4f15932df7e4cac1a7061824856eab59e84c Mon Sep 17 00:00:00 2001 From: mattijs <mattijs> Date: Thu, 1 Jun 2017 17:17:50 +0100 Subject: [PATCH] Revert "sixDoFRigidBodyDisplacementPointPatchVectorField, uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField: removed" This reverts commit 942338b06cbf58c94ced9093192bf52d57d3bc8a. --- src/sixDoFRigidBodyMotion/Make/files | 3 + ...gidBodyDisplacementPointPatchVectorField.C | 290 ++++++++++++++++++ ...gidBodyDisplacementPointPatchVectorField.H | 196 ++++++++++++ ...gidBodyDisplacementPointPatchVectorField.C | 216 +++++++++++++ ...gidBodyDisplacementPointPatchVectorField.H | 171 +++++++++++ 5 files changed, 876 insertions(+) create mode 100644 src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C create mode 100644 src/sixDoFRigidBodyMotion/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H create mode 100644 src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.C create mode 100644 src/sixDoFRigidBodyMotion/pointPatchFields/derived/uncoupledSixDoFRigidBodyDisplacement/uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField.H diff --git a/src/sixDoFRigidBodyMotion/Make/files b/src/sixDoFRigidBodyMotion/Make/files index f5abd78686c..837d2df3fd1 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 00000000000..daeb9adf8d9 --- /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 <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#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<vector, pointMesh>& iF +) +: + fixedValuePointPatchField<vector>(p, iF), + motion_(), + initialPoints_(p.localPoints()), + rhoInf_(1.0), + rhoName_("rho"), + lookupGravity_(-1), + g_(Zero), + curTimeIndex_(-1) +{} + + +sixDoFRigidBodyDisplacementPointPatchVectorField:: +sixDoFRigidBodyDisplacementPointPatchVectorField +( + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF, + const dictionary& dict +) +: + fixedValuePointPatchField<vector>(p, iF, dict), + motion_(dict, dict), + rhoInf_(1.0), + rhoName_(dict.lookupOrDefault<word>("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<vector, pointMesh>& iF, + const pointPatchFieldMapper& mapper +) +: + fixedValuePointPatchField<vector>(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<vector, pointMesh>& iF +) +: + fixedValuePointPatchField<vector>(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<vector>::autoMap(m); + + initialPoints_.autoMap(m); +} + + +void sixDoFRigidBodyDisplacementPointPatchVectorField::rmap +( + const pointPatchField<vector>& ptf, + const labelList& addr +) +{ + const sixDoFRigidBodyDisplacementPointPatchVectorField& sDoFptf = + refCast<const sixDoFRigidBodyDisplacementPointPatchVectorField>(ptf); + + fixedValuePointPatchField<vector>::rmap(sDoFptf, addr); + + initialPoints_.rmap(sDoFptf.initialPoints_, addr); +} + + +void sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs() +{ + if (this->updated()) + { + return; + } + + if (lookupGravity_ < 0) + { + if (db().foundObject<uniformDimensionedVectorField>("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<uniformDimensionedVectorField>("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<vector>::operator= + ( + motion_.transform(initialPoints_) - initialPoints_ + ); + + fixedValuePointPatchField<vector>::updateCoeffs(); +} + + +void sixDoFRigidBodyDisplacementPointPatchVectorField::write(Ostream& os) const +{ + pointPatchField<vector>::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 00000000000..04b00170623 --- /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 <http://www.gnu.org/licenses/>. + +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<vector> +{ + // 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<vector, pointMesh>& + ); + + //- Construct from patch, internal field and dictionary + sixDoFRigidBodyDisplacementPointPatchVectorField + ( + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const dictionary& + ); + + //- Construct by mapping given patchField<vector> onto a new patch + sixDoFRigidBodyDisplacementPointPatchVectorField + ( + const sixDoFRigidBodyDisplacementPointPatchVectorField&, + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const pointPatchFieldMapper& + ); + + //- Construct and return a clone + virtual autoPtr<pointPatchField<vector>> clone() const + { + return autoPtr<pointPatchField<vector>> + ( + new sixDoFRigidBodyDisplacementPointPatchVectorField + ( + *this + ) + ); + } + + //- Construct as copy setting internal field reference + sixDoFRigidBodyDisplacementPointPatchVectorField + ( + const sixDoFRigidBodyDisplacementPointPatchVectorField&, + const DimensionedField<vector, pointMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual autoPtr<pointPatchField<vector>> clone + ( + const DimensionedField<vector, pointMesh>& iF + ) const + { + return autoPtr<pointPatchField<vector>> + ( + 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<vector>&, + 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 00000000000..123b128b923 --- /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 <http://www.gnu.org/licenses/>. + +\*---------------------------------------------------------------------------*/ + +#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<vector, pointMesh>& iF +) +: + fixedValuePointPatchField<vector>(p, iF), + motion_(), + initialPoints_(p.localPoints()), + curTimeIndex_(-1) +{} + + +uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField:: +uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField +( + const pointPatch& p, + const DimensionedField<vector, pointMesh>& iF, + const dictionary& dict +) +: + fixedValuePointPatchField<vector>(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<vector, pointMesh>& iF, + const pointPatchFieldMapper& mapper +) +: + fixedValuePointPatchField<vector>(ptf, p, iF, mapper), + motion_(ptf.motion_), + initialPoints_(ptf.initialPoints_, mapper), + curTimeIndex_(-1) +{} + + +uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField:: +uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField +( + const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField& ptf, + const DimensionedField<vector, pointMesh>& iF +) +: + fixedValuePointPatchField<vector>(ptf, iF), + motion_(ptf.motion_), + initialPoints_(ptf.initialPoints_), + curTimeIndex_(-1) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::autoMap +( + const pointPatchFieldMapper& m +) +{ + fixedValuePointPatchField<vector>::autoMap(m); + + initialPoints_.autoMap(m); +} + + +void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::rmap +( + const pointPatchField<vector>& ptf, + const labelList& addr +) +{ + const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField& uSDoFptf = + refCast + < + const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField + >(ptf); + + fixedValuePointPatchField<vector>::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<uniformDimensionedVectorField>("g")) + { + uniformDimensionedVectorField g = + db().lookupObject<uniformDimensionedVectorField>("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<vector>::operator= + ( + motion_.transform(initialPoints_) - initialPoints_ + ); + + fixedValuePointPatchField<vector>::updateCoeffs(); +} + + +void uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField::write +( + Ostream& os +) const +{ + pointPatchField<vector>::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 00000000000..b5025104db5 --- /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 <http://www.gnu.org/licenses/>. + +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<vector> +{ + // 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<vector, pointMesh>& + ); + + //- Construct from patch, internal field and dictionary + uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField + ( + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const dictionary& + ); + + //- Construct by mapping given patchField<vector> onto a new patch + uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField + ( + const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField&, + const pointPatch&, + const DimensionedField<vector, pointMesh>&, + const pointPatchFieldMapper& + ); + + //- Construct and return a clone + virtual autoPtr<pointPatchField<vector>> clone() const + { + return autoPtr<pointPatchField<vector>> + ( + new uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField + ( + *this + ) + ); + } + + //- Construct as copy setting internal field reference + uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField + ( + const uncoupledSixDoFRigidBodyDisplacementPointPatchVectorField&, + const DimensionedField<vector, pointMesh>& + ); + + //- Construct and return a clone setting internal field reference + virtual autoPtr<pointPatchField<vector>> clone + ( + const DimensionedField<vector, pointMesh>& iF + ) const + { + return autoPtr<pointPatchField<vector>> + ( + 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<vector>&, + 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 + +// ************************************************************************* // -- GitLab