dynamicMotionSolverListFvMesh: Ensure independence of zone-based motion
This commit is contained in:
parent
d2f6f7e391
commit
97a27dc172
@ -26,6 +26,7 @@ License
|
||||
#include "dynamicMotionSolverListFvMesh.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "motionSolver.H"
|
||||
#include "pointMesh.H"
|
||||
#include "volFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
@ -78,16 +79,23 @@ Foam::dynamicMotionSolverListFvMesh::~dynamicMotionSolverListFvMesh()
|
||||
|
||||
bool Foam::dynamicMotionSolverListFvMesh::update()
|
||||
{
|
||||
forAll(motionSolvers_, i)
|
||||
if (motionSolvers_.size())
|
||||
{
|
||||
fvMesh::movePoints(motionSolvers_[i].newPoints());
|
||||
}
|
||||
// Accumulated displacement
|
||||
pointField disp(motionSolvers_[0].newPoints() - fvMesh::points());
|
||||
|
||||
if (foundObject<volVectorField>("U"))
|
||||
{
|
||||
volVectorField& U =
|
||||
const_cast<volVectorField&>(lookupObject<volVectorField>("U"));
|
||||
U.correctBoundaryConditions();
|
||||
for (label i = 1; i < motionSolvers_.size(); i++)
|
||||
{
|
||||
disp += motionSolvers_[i].newPoints() - fvMesh::points();
|
||||
}
|
||||
|
||||
fvMesh::movePoints(points() + disp);
|
||||
|
||||
if (foundObject<volVectorField>("U"))
|
||||
{
|
||||
const_cast<volVectorField&>(lookupObject<volVectorField>("U"))
|
||||
.correctBoundaryConditions();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -139,22 +139,18 @@ Foam::multiSolidBodyMotionSolver::~multiSolidBodyMotionSolver()
|
||||
|
||||
Foam::tmp<Foam::pointField> Foam::multiSolidBodyMotionSolver::curPoints() const
|
||||
{
|
||||
tmp<pointField> ttransformedPts
|
||||
(
|
||||
new pointField(points0_)
|
||||
);
|
||||
tmp<pointField> ttransformedPts(new pointField(mesh().points()));
|
||||
pointField& transformedPts = ttransformedPts.ref();
|
||||
|
||||
forAll(zoneIDs_, i)
|
||||
{
|
||||
const labelList& zonePoints = pointIDs_[i];
|
||||
|
||||
UIndirectList<point>(transformedPts, zonePoints) =
|
||||
transformPoints
|
||||
(
|
||||
SBMFs_[i].transformation(),
|
||||
pointField(transformedPts, zonePoints)
|
||||
);
|
||||
UIndirectList<point>(transformedPts, zonePoints) = transformPoints
|
||||
(
|
||||
SBMFs_[i].transformation(),
|
||||
pointField(points0_, zonePoints)
|
||||
);
|
||||
}
|
||||
|
||||
return ttransformedPts;
|
||||
|
@ -162,16 +162,13 @@ Foam::tmp<Foam::pointField> Foam::solidBodyMotionSolver::curPoints() const
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp<pointField> ttransformedPts
|
||||
(
|
||||
new pointField(points0_)
|
||||
);
|
||||
tmp<pointField> ttransformedPts(new pointField(mesh().points()));
|
||||
pointField& transformedPts = ttransformedPts.ref();
|
||||
|
||||
UIndirectList<point>(transformedPts, pointIDs_) = transformPoints
|
||||
(
|
||||
SBMFPtr_().transformation(),
|
||||
pointField(transformedPts, pointIDs_)
|
||||
pointField(points0_, pointIDs_)
|
||||
);
|
||||
|
||||
return ttransformedPts;
|
||||
|
Loading…
Reference in New Issue
Block a user