diff --git a/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C b/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C index 2814638b37..2b75caa5fc 100644 --- a/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C +++ b/src/dynamicFvMesh/dynamicMotionSolverListFvMesh/dynamicMotionSolverListFvMesh.C @@ -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("U")) - { - volVectorField& U = - const_cast(lookupObject("U")); - U.correctBoundaryConditions(); + for (label i = 1; i < motionSolvers_.size(); i++) + { + disp += motionSolvers_[i].newPoints() - fvMesh::points(); + } + + fvMesh::movePoints(points() + disp); + + if (foundObject("U")) + { + const_cast(lookupObject("U")) + .correctBoundaryConditions(); + } } return true; diff --git a/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C index 625f8cfad4..6992db05b0 100644 --- a/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/multiSolidBodyMotionSolver.C @@ -139,22 +139,18 @@ Foam::multiSolidBodyMotionSolver::~multiSolidBodyMotionSolver() Foam::tmp Foam::multiSolidBodyMotionSolver::curPoints() const { - tmp ttransformedPts - ( - new pointField(points0_) - ); + tmp ttransformedPts(new pointField(mesh().points())); pointField& transformedPts = ttransformedPts.ref(); forAll(zoneIDs_, i) { const labelList& zonePoints = pointIDs_[i]; - UIndirectList(transformedPts, zonePoints) = - transformPoints - ( - SBMFs_[i].transformation(), - pointField(transformedPts, zonePoints) - ); + UIndirectList(transformedPts, zonePoints) = transformPoints + ( + SBMFs_[i].transformation(), + pointField(points0_, zonePoints) + ); } return ttransformedPts; diff --git a/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.C b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.C index ee2f7e65ac..d14e87ce9c 100644 --- a/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.C +++ b/src/dynamicMesh/motionSolvers/displacement/solidBody/solidBodyMotionSolver.C @@ -162,16 +162,13 @@ Foam::tmp Foam::solidBodyMotionSolver::curPoints() const } else { - tmp ttransformedPts - ( - new pointField(points0_) - ); + tmp ttransformedPts(new pointField(mesh().points())); pointField& transformedPts = ttransformedPts.ref(); UIndirectList(transformedPts, pointIDs_) = transformPoints ( SBMFPtr_().transformation(), - pointField(transformedPts, pointIDs_) + pointField(points0_, pointIDs_) ); return ttransformedPts;