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());
for (label i = 1; i < motionSolvers_.size(); i++)
{
disp += motionSolvers_[i].newPoints() - fvMesh::points();
} }
fvMesh::movePoints(points() + disp);
if (foundObject<volVectorField>("U")) if (foundObject<volVectorField>("U"))
{ {
volVectorField& U = const_cast<volVectorField&>(lookupObject<volVectorField>("U"))
const_cast<volVectorField&>(lookupObject<volVectorField>("U")); .correctBoundaryConditions();
U.correctBoundaryConditions(); }
} }
return true; return true;

View File

@ -139,21 +139,17 @@ 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(transformedPts, zonePoints) pointField(points0_, zonePoints)
); );
} }

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;