dynamicMotionSolverListFvMesh: Ensure independence of zone-based motion

This commit is contained in:
Henry Weller 2016-12-09 14:19:07 +00:00
parent d2f6f7e391
commit 97a27dc172
3 changed files with 24 additions and 23 deletions

View File

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

View File

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

View File

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