mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
dynamicMotionSolverListFvMesh: Ensure independence of zone-based motion
This commit is contained in:
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user