From 6cecf20555fd0ef11b19c3bf5ebd47cd2a45d16d Mon Sep 17 00:00:00 2001 From: graham Date: Fri, 29 Jan 2010 20:27:29 +0000 Subject: [PATCH] ENC: sixDoFRigidBodyMotion. Adding writing of restraints and constraints to dictionary. --- .../sixDoFRigidBodyMotion.C | 10 +-- .../sixDoFRigidBodyMotionConstraint.C | 7 ++ .../sixDoFRigidBodyMotionConstraint.H | 29 ++++++++ .../sixDoFRigidBodyMotionIO.C | 66 ++++++++++++++++++- .../linearSphericalAngularSpring.C | 20 ++++++ .../sixDoFRigidBodyMotionRestraint.C | 1 + .../sixDoFRigidBodyMotionRestraint.H | 18 +++++ 7 files changed, 146 insertions(+), 5 deletions(-) diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C index 66e76833bf..d2c414b055 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotion.C @@ -45,7 +45,9 @@ void Foam::sixDoFRigidBodyMotion::applyRestraints() restraints_[rI].restrain(*this, rP, rF, rM); - // Info<< "Restraint " << rI << " force " << rF << endl; + // Info<< "Restraint " << rI << " force " << rF << nl + // << "Restraint " << rI << " moment " << rM + // << endl; a() += rF/mass_; @@ -122,9 +124,9 @@ void Foam::sixDoFRigidBodyMotion::applyConstraints(scalar deltaT) else { Info<< "sixDoFRigidBodyMotion constraints converged in " - << iter << " iterations" << nl - // << "Constraint force: " << cFA << nl - // << "Constraint moment: " << cMA + << iter << " iterations" + // << nl << "Constraint force: " << cFA << nl + // << "Constraint moment: " << cMA << endl; } diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.C index 7c22078878..082bbb34af 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.C @@ -39,6 +39,7 @@ Foam::sixDoFRigidBodyMotionConstraint::sixDoFRigidBodyMotionConstraint const dictionary& sDoFRBMCDict ) : + name_(fileName(sDoFRBMCDict.name().name()).components(token::COLON).last()), sDoFRBMCCoeffs_ ( sDoFRBMCDict.subDict @@ -70,6 +71,12 @@ bool Foam::sixDoFRigidBodyMotionConstraint::read { tolerance_ = (readScalar(sDoFRBMCDict.lookup("tolerance"))); + relaxationFactor_ = sDoFRBMCDict.lookupOrDefault + ( + "relaxationFactor", + 1 + ); + sDoFRBMCCoeffs_ = sDoFRBMCDict.subDict(type() + "Coeffs"); return true; diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.H index 0b5fa0bc79..22e5770202 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.H +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint/sixDoFRigidBodyMotionConstraint.H @@ -70,6 +70,9 @@ protected: // Protected data + //- Name of the constraint in dictionary + word name_; + //- Constraint model specific coefficient dictionary dictionary sDoFRBMCCoeffs_; @@ -143,6 +146,32 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& sDoFRBMCDict) = 0; + + // Access + + //- Return access to the name of the restraint + inline const word& name() const + { + return name_; + } + + // Return access to sDoFRBMCCoeffs + inline const dictionary& coeffDict() const + { + return sDoFRBMCCoeffs_; + } + + //- Return access to the tolerance + inline scalar tolerance() const + { + return tolerance_; + } + + //- Return access to the relaxationFactor + inline scalar relaxationFactor() const + { + return relaxationFactor_; + } }; diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C index 005cbbe6aa..e8172f4183 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionIO.C @@ -39,6 +39,70 @@ void Foam::sixDoFRigidBodyMotion::write(Ostream& os) const << momentOfInertia_ << token::END_STATEMENT << nl; os.writeKeyword("mass") << mass_ << token::END_STATEMENT << nl; + + if (restraints_.size()) + { + dictionary restraintsDict; + + forAll(restraints_, rI) + { + word restraintType = restraints_[rI].type(); + + dictionary restraintDict; + + restraintDict.add("sixDoFRigidBodyMotionRestraint", restraintType); + + restraintDict.add + ( + word(restraintType + "Coeffs"), restraints_[rI].coeffDict() + ); + + restraintsDict.add(restraints_[rI].name(), restraintDict); + } + + os.writeKeyword("restraints") << restraintsDict; + } + + if (constraints_.size()) + { + dictionary constraintsDict; + + constraintsDict.add("maxIterations", maxConstraintIters_); + + forAll(constraints_, rI) + { + word constraintType = constraints_[rI].type(); + + dictionary constraintDict; + + constraintDict.add + ( + "sixDoFRigidBodyMotionConstraint", + constraintType + ); + + constraintDict.add + ( + "tolerance", + constraints_[rI].tolerance() + ); + + constraintDict.add + ( + "relaxationFactor", + constraints_[rI].relaxationFactor() + ); + + constraintDict.add + ( + word(constraintType + "Coeffs"), constraints_[rI].coeffDict() + ); + + constraintsDict.add(constraints_[rI].name(), constraintDict); + } + + os.writeKeyword("constraints") << constraintsDict; + } } @@ -71,7 +135,7 @@ Foam::Ostream& Foam::operator<< os << sDoFRBM.motionState() << token::SPACE << sDoFRBM.refCentreOfMass() << token::SPACE << sDoFRBM.momentOfInertia() - << token::SPACE << sDoFRBM.mass() ; + << token::SPACE << sDoFRBM.mass(); // Check state of Ostream os.check diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/linearSphericalAngularSpring/linearSphericalAngularSpring.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/linearSphericalAngularSpring/linearSphericalAngularSpring.C index 0d7d2bddca..2672d2d26e 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/linearSphericalAngularSpring/linearSphericalAngularSpring.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/linearSphericalAngularSpring/linearSphericalAngularSpring.C @@ -118,6 +118,26 @@ bool Foam::sixDoFRigidBodyMotionRestraints::linearSphericalAngularSpring ::read sDoFRBMRCoeffs_.lookup("referenceDirection") >> refDir_; + scalar magRefDir(mag(refDir_)); + + if (magRefDir > VSMALL) + { + refDir_ /= magRefDir; + } + else + { + FatalErrorIn + ( + "bool Foam::sixDoFRigidBodyMotionRestraints::" + "linearSphericalAngularSpring ::read" + "(" + "const dictionary& sDoFRBMRDict" + ")" + ) + << "referenceDirection has zero length" + << abort(FatalError); + } + sDoFRBMRCoeffs_.lookup("stiffness") >> stiffness_; sDoFRBMRCoeffs_.lookup("damping") >> damping_; diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.C b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.C index 2d17503421..7cfe723c01 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.C +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.C @@ -39,6 +39,7 @@ Foam::sixDoFRigidBodyMotionRestraint::sixDoFRigidBodyMotionRestraint const dictionary& sDoFRBMRDict ) : + name_(fileName(sDoFRBMRDict.name().name()).components(token::COLON).last()), sDoFRBMRCoeffs_ ( sDoFRBMRDict.subDict diff --git a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.H b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.H index b9e0d5f0f1..1bdabb57e3 100644 --- a/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.H +++ b/src/postProcessing/functionObjects/forces/pointPatchFields/derived/sixDoFRigidBodyMotion/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint/sixDoFRigidBodyMotionRestraint.H @@ -70,6 +70,10 @@ protected: // Protected data + //- Name of the constraint in dictionary + word name_; + + //- Restraint model specific coefficient dictionary dictionary sDoFRBMRCoeffs_; @@ -131,6 +135,20 @@ public: //- Update properties from given dictionary virtual bool read(const dictionary& sDoFRBMRDict) = 0; + + // Access + + //- Return access to the name of the restraint + inline const word& name() const + { + return name_; + } + + // Return access to sDoFRBMRCoeffs + inline const dictionary& coeffDict() const + { + return sDoFRBMRCoeffs_; + } };