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 "dynamicMotionSolverListFvMesh.H"
#include "addToRunTimeSelectionTable.H" #include "addToRunTimeSelectionTable.H"
#include "motionSolver.H" #include "motionSolver.H"
#include "pointMesh.H"
#include "volFields.H" #include "volFields.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -78,16 +79,23 @@ Foam::dynamicMotionSolverListFvMesh::~dynamicMotionSolverListFvMesh()
bool Foam::dynamicMotionSolverListFvMesh::update() 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")) for (label i = 1; i < motionSolvers_.size(); i++)
{ {
volVectorField& U = disp += motionSolvers_[i].newPoints() - fvMesh::points();
const_cast<volVectorField&>(lookupObject<volVectorField>("U")); }
U.correctBoundaryConditions();
fvMesh::movePoints(points() + disp);
if (foundObject<volVectorField>("U"))
{
const_cast<volVectorField&>(lookupObject<volVectorField>("U"))
.correctBoundaryConditions();
}
} }
return true; return true;

View File

@ -139,22 +139,18 @@ Foam::multiSolidBodyMotionSolver::~multiSolidBodyMotionSolver()
Foam::tmp<Foam::pointField> Foam::multiSolidBodyMotionSolver::curPoints() const Foam::tmp<Foam::pointField> Foam::multiSolidBodyMotionSolver::curPoints() const
{ {
tmp<pointField> ttransformedPts tmp<pointField> ttransformedPts(new pointField(mesh().points()));
(
new pointField(points0_)
);
pointField& transformedPts = ttransformedPts.ref(); pointField& transformedPts = ttransformedPts.ref();
forAll(zoneIDs_, i) forAll(zoneIDs_, i)
{ {
const labelList& zonePoints = pointIDs_[i]; const labelList& zonePoints = pointIDs_[i];
UIndirectList<point>(transformedPts, zonePoints) = UIndirectList<point>(transformedPts, zonePoints) = transformPoints
transformPoints (
( SBMFs_[i].transformation(),
SBMFs_[i].transformation(), pointField(points0_, zonePoints)
pointField(transformedPts, zonePoints) );
);
} }
return ttransformedPts; return ttransformedPts;

View File

@ -162,16 +162,13 @@ Foam::tmp<Foam::pointField> Foam::solidBodyMotionSolver::curPoints() const
} }
else else
{ {
tmp<pointField> ttransformedPts tmp<pointField> ttransformedPts(new pointField(mesh().points()));
(
new pointField(points0_)
);
pointField& transformedPts = ttransformedPts.ref(); pointField& transformedPts = ttransformedPts.ref();
UIndirectList<point>(transformedPts, pointIDs_) = transformPoints UIndirectList<point>(transformedPts, pointIDs_) = transformPoints
( (
SBMFPtr_().transformation(), SBMFPtr_().transformation(),
pointField(transformedPts, pointIDs_) pointField(points0_, pointIDs_)
); );
return ttransformedPts; return ttransformedPts;