From 86de68de766deab76adbf588214f5ccb43f56cba Mon Sep 17 00:00:00 2001 From: graham Date: Mon, 8 Feb 2010 19:10:04 +0000 Subject: [PATCH] ENH: sixDoFRigidBodyMotion. Variable renaming and addition of initialOrientation. Rename of IO to more understandable terms. Rename ref to initial where correct - ref is to do with the object being in Q = I state, inital is to do with where things are when the motion starts and pointDisplacement and value are zero. Adding initialOrientation so that non Q = I initial states are correct. --- ...gidBodyDisplacementPointPatchVectorField.C | 23 ++++---- ...gidBodyDisplacementPointPatchVectorField.H | 4 +- .../sixDoFRigidBodyMotion.C | 35 ++++++++---- .../sixDoFRigidBodyMotion.H | 55 +++++++++++-------- .../sixDoFRigidBodyMotionI.H | 36 ++++++++---- .../sixDoFRigidBodyMotionIO.C | 12 ++-- .../sixDoFRigidBodyMotionState.C | 10 ++-- .../sixDoFRigidBodyMotionStateIO.C | 10 ++-- 8 files changed, 117 insertions(+), 68 deletions(-) diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C index a9d95a7396..59ae40b2b5 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.C @@ -49,7 +49,7 @@ sixDoFRigidBodyDisplacementPointPatchVectorField : fixedValuePointPatchField(p, iF), motion_(), - p0_(p.localPoints()), + initialPoints_(p.localPoints()), rhoInf_(1.0) {} @@ -71,13 +71,13 @@ sixDoFRigidBodyDisplacementPointPatchVectorField updateCoeffs(); } - if (dict.found("p0")) + if (dict.found("initialPoints")) { - p0_ = vectorField("p0", dict , p.size()); + initialPoints_ = vectorField("initialPoints", dict , p.size()); } else { - p0_ = p.localPoints(); + initialPoints_ = p.localPoints(); } } @@ -93,7 +93,7 @@ sixDoFRigidBodyDisplacementPointPatchVectorField : fixedValuePointPatchField(ptf, p, iF, mapper), motion_(ptf.motion_), - p0_(ptf.p0_, mapper), + initialPoints_(ptf.initialPoints_, mapper), rhoInf_(ptf.rhoInf_) {} @@ -107,7 +107,7 @@ sixDoFRigidBodyDisplacementPointPatchVectorField : fixedValuePointPatchField(ptf, iF), motion_(ptf.motion_), - p0_(ptf.p0_), + initialPoints_(ptf.initialPoints_), rhoInf_(ptf.rhoInf_) {} @@ -121,7 +121,7 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::autoMap { fixedValuePointPatchField::autoMap(m); - p0_.autoMap(m); + initialPoints_.autoMap(m); } @@ -136,7 +136,7 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::rmap fixedValuePointPatchField::rmap(sDoFptf, addr); - p0_.rmap(sDoFptf.p0_, addr); + initialPoints_.rmap(sDoFptf.initialPoints_, addr); } @@ -186,7 +186,10 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::updateCoeffs() t.deltaTValue() ); - Field::operator=(motion_.currentPosition(p0_) - p0_); + Field::operator= + ( + motion_.currentPosition(initialPoints_) - initialPoints_ + ); fixedValuePointPatchField::updateCoeffs(); } @@ -198,7 +201,7 @@ void sixDoFRigidBodyDisplacementPointPatchVectorField::write(Ostream& os) const motion_.write(os); os.writeKeyword("rhoInf") << rhoInf_ << token::END_STATEMENT << nl; - p0_.writeEntry("p0", os); + initialPoints_.writeEntry("initialPoints", os); writeEntry("value", os); } diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H index 4cfa63becc..fee0c157f7 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyDisplacement/sixDoFRigidBodyDisplacementPointPatchVectorField.H @@ -57,8 +57,8 @@ class sixDoFRigidBodyDisplacementPointPatchVectorField //- Six dof motion object sixDoFRigidBodyMotion motion_; - //- Reference positions of points on the patch - pointField p0_; + //- Initial positions of points on the patch + pointField initialPoints_; //- Reference density required by the forces object for // incompressible calculations diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C index 2e9abddf5f..d8d2baaddd 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C @@ -15,7 +15,7 @@ License 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 + FITNESS FOR A PARTICLUAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License @@ -169,7 +169,8 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion() constraints_(), constraintNames_(), maxConstraintIterations_(0), - refCentreOfMass_(vector::zero), + initialCentreOfMass_(vector::zero), + initialQ_(I), momentOfInertia_(diagTensor::one*VSMALL), mass_(VSMALL), report_(false) @@ -185,7 +186,8 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion const vector& pi, const vector& tau, scalar mass, - const point& refCentreOfMass, + const point& initialCentreOfMass, + const tensor& initialQ, const diagTensor& momentOfInertia, bool report ) @@ -204,7 +206,8 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion constraints_(), constraintNames_(), maxConstraintIterations_(0), - refCentreOfMass_(refCentreOfMass), + initialCentreOfMass_(initialCentreOfMass), + initialQ_(initialQ), momentOfInertia_(momentOfInertia), mass_(mass), report_(report) @@ -219,7 +222,14 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion(const dictionary& dict) constraints_(), constraintNames_(), maxConstraintIterations_(0), - refCentreOfMass_(dict.lookupOrDefault("refCentreOfMass", centreOfMass())), + initialCentreOfMass_ + ( + dict.lookupOrDefault("initialCentreOfMass", centreOfMass()) + ), + initialQ_ + ( + dict.lookupOrDefault("initialOrientation", Q()) + ), momentOfInertia_(dict.lookup("momentOfInertia")), mass_(readScalar(dict.lookup("mass"))), report_(dict.lookupOrDefault("report", false)) @@ -241,7 +251,8 @@ Foam::sixDoFRigidBodyMotion::sixDoFRigidBodyMotion constraints_(sDoFRBM.constraints()), constraintNames_(sDoFRBM.constraintNames()), maxConstraintIterations_(sDoFRBM.maxConstraintIterations()), - refCentreOfMass_(sDoFRBM.refCentreOfMass()), + initialCentreOfMass_(sDoFRBM.initialCentreOfMass()), + initialQ_(sDoFRBM.initialQ()), momentOfInertia_(sDoFRBM.momentOfInertia()), mass_(sDoFRBM.mass()), report_(sDoFRBM.report()) @@ -433,7 +444,7 @@ void Foam::sixDoFRigidBodyMotion::updateForce Foam::point Foam::sixDoFRigidBodyMotion::predictedPosition ( - const point& pt, + const point& p0, const vector& deltaForce, const vector& deltaMoment, scalar deltaT @@ -449,13 +460,17 @@ Foam::point Foam::sixDoFRigidBodyMotion::predictedPosition rotate(QTemp, piTemp, deltaT); - return (centreOfMassTemp + (QTemp & (pt - refCentreOfMass_))); + return + ( + centreOfMassTemp + + (QTemp & initialQ_.T() & (p0 - initialCentreOfMass_)) + ); } Foam::vector Foam::sixDoFRigidBodyMotion::predictedOrientation ( - const vector& v, + const vector& v0, const vector& deltaMoment, scalar deltaT ) const @@ -466,7 +481,7 @@ Foam::vector Foam::sixDoFRigidBodyMotion::predictedOrientation rotate(QTemp, piTemp, deltaT); - return (QTemp & v); + return (QTemp & initialQ_.T() & v0); } diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H index 70107dc19c..aee340a81a 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.H @@ -104,10 +104,14 @@ class sixDoFRigidBodyMotion // constraints label maxConstraintIterations_; - //- Centre of mass of reference state - point refCentreOfMass_; + //- Centre of mass of initial state + point initialCentreOfMass_; + + //- Orientation of initial state + tensor initialQ_; //- Moment of inertia of the body in reference configuration + // (Q = I) diagTensor momentOfInertia_; //- Mass of the body @@ -166,8 +170,11 @@ class sixDoFRigidBodyMotion // constraint iterations inline label maxConstraintIterations() const; - //- Return access to the centre of mass - inline const point& refCentreOfMass() const; + //- Return access to the initial centre of mass + inline const point& initialCentreOfMass() const; + + //- Return access to the initial orientation + inline const tensor& initialQ() const; //- Return access to the orientation inline const tensor& Q() const; @@ -188,7 +195,10 @@ class sixDoFRigidBodyMotion // Edit //- Return access to the centre of mass - inline point& refCentreOfMass(); + inline point& initialCentreOfMass(); + + //- Return access to the centre of mass + inline tensor& initialQ(); //- Return non-const access to the orientation inline tensor& Q(); @@ -223,7 +233,8 @@ public: const vector& pi, const vector& tau, scalar mass, - const point& refCentreOfMass, + const point& initialCentreOfMass, + const tensor& initialQ, const diagTensor& momentOfInertia, bool report = false ); @@ -274,40 +285,40 @@ public: scalar deltaT ); - //- Transform the given reference state pointField by the - // current motion state - inline tmp currentPosition(const pointField& refPts) const; - - //- Transform the given reference state point by the current + //- Transform the given initial state pointField by the current // motion state - inline point currentPosition(const point& refPt) const; + inline tmp currentPosition(const pointField& p0) const; - //- Transform the given reference state direction by the current + //- Transform the given initial state point by the current motion + // state + inline point currentPosition(const point& p0) const; + + //- Transform the given initial state direction by the current // motion state - inline vector currentOrientation(const vector& refDir) const; + inline vector currentOrientation(const vector& dir0) const; //- Access the orientation tensor, Q. // globalVector = Q & bodyLocalVector // bodyLocalVector = Q.T() & globalVector inline const tensor& currentOrientation() const; - //- Predict the position of the supplied point after deltaT - // given the current motion state and the additional supplied - // force and moment + //- Predict the position of the supplied initial state point + // after deltaT given the current motion state and the + // additional supplied force and moment point predictedPosition ( - const point& pt, + const point& p0, const vector& deltaForce, const vector& deltaMoment, scalar deltaT ) const; - //- Predict the orientation of the supplied vector after deltaT - // given the current motion state and the additional supplied - // moment + //- Predict the orientation of the supplied initial state + // vector after deltaT given the current motion state and the + // additional supplied moment vector predictedOrientation ( - const vector& v, + const vector& v0, const vector& deltaMoment, scalar deltaT ) const; diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionI.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionI.H index 4dea5d4688..abf8a5d31c 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionI.H +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionI.H @@ -133,9 +133,17 @@ inline Foam::label Foam::sixDoFRigidBodyMotion::maxConstraintIterations() const } -inline const Foam::point& Foam::sixDoFRigidBodyMotion::refCentreOfMass() const +inline const Foam::point& +Foam::sixDoFRigidBodyMotion::initialCentreOfMass() const { - return refCentreOfMass_; + return initialCentreOfMass_; +} + + +inline const Foam::tensor& +Foam::sixDoFRigidBodyMotion::initialQ() const +{ + return initialQ_; } @@ -169,9 +177,15 @@ inline const Foam::vector& Foam::sixDoFRigidBodyMotion::tau() const } -inline Foam::point& Foam::sixDoFRigidBodyMotion::refCentreOfMass() +inline Foam::point& Foam::sixDoFRigidBodyMotion::initialCentreOfMass() { - return refCentreOfMass_; + return initialCentreOfMass_; +} + + +inline Foam::tensor& Foam::sixDoFRigidBodyMotion::initialQ() +{ + return initialQ_; } @@ -208,27 +222,29 @@ inline Foam::vector& Foam::sixDoFRigidBodyMotion::tau() // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // inline Foam::tmp -Foam::sixDoFRigidBodyMotion::currentPosition(const pointField& refPts) const +Foam::sixDoFRigidBodyMotion::currentPosition(const pointField& p0) const { - return (centreOfMass() + (Q() & (refPts - refCentreOfMass_))); + return + (centreOfMass() + (Q() & initialQ_.T() & (p0 - initialCentreOfMass_))); } inline Foam::point Foam::sixDoFRigidBodyMotion::currentPosition ( - const point& refPt + const point& p0 ) const { - return (centreOfMass() + (Q() & (refPt - refCentreOfMass_))); + return + (centreOfMass() + (Q() & initialQ_.T() & (p0 - initialCentreOfMass_))); } inline Foam::vector Foam::sixDoFRigidBodyMotion::currentOrientation ( - const vector& refDir + const vector& dir0 ) const { - return (Q() & refDir); + return (Q() & initialQ_.T() & dir0); } diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C index ab76faa033..68865c69cb 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C @@ -33,8 +33,10 @@ void Foam::sixDoFRigidBodyMotion::write(Ostream& os) const { motionState_.write(os); - os.writeKeyword("refCentreOfMass") - << refCentreOfMass_ << token::END_STATEMENT << nl; + os.writeKeyword("initialCentreOfMass") + << initialCentreOfMass_ << token::END_STATEMENT << nl; + os.writeKeyword("initialOrientation") + << initialQ_ << token::END_STATEMENT << nl; os.writeKeyword("momentOfInertia") << momentOfInertia_ << token::END_STATEMENT << nl; os.writeKeyword("mass") @@ -112,7 +114,8 @@ void Foam::sixDoFRigidBodyMotion::write(Ostream& os) const Foam::Istream& Foam::operator>>(Istream& is, sixDoFRigidBodyMotion& sDoFRBM) { is >> sDoFRBM.motionState_ - >> sDoFRBM.refCentreOfMass_ + >> sDoFRBM.initialCentreOfMass_ + >> sDoFRBM.initialQ_ >> sDoFRBM.momentOfInertia_ >> sDoFRBM.mass_; @@ -134,7 +137,8 @@ Foam::Ostream& Foam::operator<< ) { os << sDoFRBM.motionState() - << token::SPACE << sDoFRBM.refCentreOfMass() + << token::SPACE << sDoFRBM.initialCentreOfMass() + << token::SPACE << sDoFRBM.initialQ() << token::SPACE << sDoFRBM.momentOfInertia() << token::SPACE << sDoFRBM.mass(); diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionState.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionState.C index cd52b1d142..efdb0c5c22 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionState.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionState.C @@ -64,11 +64,11 @@ Foam::sixDoFRigidBodyMotionState::sixDoFRigidBodyMotionState ) : centreOfMass_(dict.lookup("centreOfMass")), - Q_(dict.lookupOrDefault("Q", tensor(I))), - v_(dict.lookupOrDefault("v", vector::zero)), - a_(dict.lookupOrDefault("a", vector::zero)), - pi_(dict.lookupOrDefault("pi", vector::zero)), - tau_(dict.lookupOrDefault("tau", vector::zero)) + Q_(dict.lookupOrDefault("orientation", tensor(I))), + v_(dict.lookupOrDefault("velocity", vector::zero)), + a_(dict.lookupOrDefault("acceleration", vector::zero)), + pi_(dict.lookupOrDefault("angularMomentum", vector::zero)), + tau_(dict.lookupOrDefault("torque", vector::zero)) {} diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionStateIO.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionStateIO.C index 650a359991..fb70e1a28c 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionStateIO.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionStateIO.C @@ -33,15 +33,15 @@ void Foam::sixDoFRigidBodyMotionState::write(Ostream& os) const { os.writeKeyword("centreOfMass") << centreOfMass_ << token::END_STATEMENT << nl; - os.writeKeyword("Q") + os.writeKeyword("orientation") << Q_ << token::END_STATEMENT << nl; - os.writeKeyword("v") + os.writeKeyword("velocity") << v_ << token::END_STATEMENT << nl; - os.writeKeyword("a") + os.writeKeyword("acceleration") << a_ << token::END_STATEMENT << nl; - os.writeKeyword("pi") + os.writeKeyword("angularMomentum") << pi_ << token::END_STATEMENT << nl; - os.writeKeyword("tau") + os.writeKeyword("torque") << tau_ << token::END_STATEMENT << nl; }