Bugfix: New way of handling constraints in 6-DOF
Conflicts: src/ODE/sixDOF/sixDOFqODE/sixDOFqODE.H
This commit is contained in:
parent
64df538263
commit
efd87cca73
2 changed files with 20 additions and 14 deletions
|
@ -76,10 +76,9 @@ Foam::dimensionedVector Foam::sixDOFqODE::A
|
||||||
{
|
{
|
||||||
// Fix the global force for global rotation constraints
|
// Fix the global force for global rotation constraints
|
||||||
dimensionedVector fAbs = force();
|
dimensionedVector fAbs = force();
|
||||||
vector& fAbsVal = fAbs.value();
|
|
||||||
|
|
||||||
// Constrain rotation
|
// Constrain translation
|
||||||
fAbsVal = constrainTranslation(fAbsVal);
|
constrainTranslation(fAbs.value());
|
||||||
|
|
||||||
return
|
return
|
||||||
(
|
(
|
||||||
|
@ -100,9 +99,9 @@ Foam::dimensionedVector Foam::sixDOFqODE::OmegaDot
|
||||||
{
|
{
|
||||||
// Fix the global moment for global rotation constraints
|
// Fix the global moment for global rotation constraints
|
||||||
dimensionedVector mAbs = moment();
|
dimensionedVector mAbs = moment();
|
||||||
vector& mAbsVal = mAbs.value();
|
|
||||||
|
|
||||||
mAbsVal = constrainRotation(mAbsVal);
|
// Constrain rotation
|
||||||
|
constrainRotation(mAbs.value());
|
||||||
|
|
||||||
return
|
return
|
||||||
inv(momentOfInertia_)
|
inv(momentOfInertia_)
|
||||||
|
@ -124,7 +123,7 @@ Foam::dimensionedVector Foam::sixDOFqODE::E
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::vector Foam::sixDOFqODE::constrainRotation(vector& vec) const
|
void Foam::sixDOFqODE::constrainRotation(vector& vec) const
|
||||||
{
|
{
|
||||||
vector consVec(vector::zero);
|
vector consVec(vector::zero);
|
||||||
|
|
||||||
|
@ -165,12 +164,10 @@ Foam::vector Foam::sixDOFqODE::constrainRotation(vector& vec) const
|
||||||
consVec.z() = 0;
|
consVec.z() = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return consVec;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Foam::vector Foam::sixDOFqODE::constrainTranslation(vector& vec) const
|
void Foam::sixDOFqODE::constrainTranslation(vector& vec) const
|
||||||
{
|
{
|
||||||
vector consVec(vector::zero);
|
vector consVec(vector::zero);
|
||||||
|
|
||||||
|
@ -211,8 +208,6 @@ Foam::vector Foam::sixDOFqODE::constrainTranslation(vector& vec) const
|
||||||
consVec.z() = 0;
|
consVec.z() = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return consVec;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -263,7 +258,7 @@ Foam::sixDOFqODE::sixDOFqODE(const IOobject& io)
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
referentRotation_(vector::zero, 0)
|
referentRotation_(vector(1, 0, 0), 0)
|
||||||
{
|
{
|
||||||
setCoeffs();
|
setCoeffs();
|
||||||
}
|
}
|
||||||
|
@ -502,7 +497,7 @@ void Foam::sixDOFqODE::update(const scalar delta)
|
||||||
Uval.z() = coeffs_[5];
|
Uval.z() = coeffs_[5];
|
||||||
|
|
||||||
// Constrain velocity
|
// Constrain velocity
|
||||||
Uval = constrainTranslation(Uval);
|
constrainTranslation(Uval);
|
||||||
coeffs_[3] = Uval.x();
|
coeffs_[3] = Uval.x();
|
||||||
coeffs_[4] = Uval.y();
|
coeffs_[4] = Uval.y();
|
||||||
coeffs_[5] = Uval.z();
|
coeffs_[5] = Uval.z();
|
||||||
|
@ -515,7 +510,7 @@ void Foam::sixDOFqODE::update(const scalar delta)
|
||||||
omegaVal.z() = coeffs_[8];
|
omegaVal.z() = coeffs_[8];
|
||||||
|
|
||||||
// Constrain omega
|
// Constrain omega
|
||||||
omegaVal = constrainRotation(omegaVal);
|
constrainRotation(omegaVal);
|
||||||
coeffs_[6] = omegaVal.x();
|
coeffs_[6] = omegaVal.x();
|
||||||
coeffs_[7] = omegaVal.y();
|
coeffs_[7] = omegaVal.y();
|
||||||
coeffs_[8] = omegaVal.z();
|
coeffs_[8] = omegaVal.z();
|
||||||
|
|
|
@ -197,6 +197,14 @@ class sixDOFqODE
|
||||||
const dimensionedVector& omega
|
const dimensionedVector& omega
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
//- Constrain rotation vector in referent or global coordinate
|
||||||
|
// system
|
||||||
|
void constrainRotation(vector& vec) const;
|
||||||
|
|
||||||
|
//- Constrain translation vector in referent or global coordinate
|
||||||
|
// system
|
||||||
|
void constrainTranslation(vector& vec) const;
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -292,6 +300,9 @@ public:
|
||||||
// coordinate system
|
// coordinate system
|
||||||
inline void setOmega(const vector& omega);
|
inline void setOmega(const vector& omega);
|
||||||
|
|
||||||
|
//- Set referent coordinate system to apply constraints
|
||||||
|
inline void setReferentRotation(const HamiltonRodriguezRot& rot);
|
||||||
|
|
||||||
|
|
||||||
// Average motion per time-step
|
// Average motion per time-step
|
||||||
|
|
||||||
|
|
Reference in a new issue