ENC: sixDoFRigidBodyMotion. Adding writing of restraints and

constraints to dictionary.
This commit is contained in:
graham
2010-01-29 20:27:29 +00:00
parent 8f44357555
commit 6cecf20555
7 changed files with 146 additions and 5 deletions

View File

@ -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;
}

View File

@ -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<scalar>
(
"relaxationFactor",
1
);
sDoFRBMCCoeffs_ = sDoFRBMCDict.subDict(type() + "Coeffs");
return true;

View File

@ -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_;
}
};

View File

@ -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

View File

@ -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_;

View File

@ -39,6 +39,7 @@ Foam::sixDoFRigidBodyMotionRestraint::sixDoFRigidBodyMotionRestraint
const dictionary& sDoFRBMRDict
)
:
name_(fileName(sDoFRBMRDict.name().name()).components(token::COLON).last()),
sDoFRBMRCoeffs_
(
sDoFRBMRDict.subDict

View File

@ -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_;
}
};