From f1ab9882c7d4feeee59c0e7e86f4614e13239622 Mon Sep 17 00:00:00 2001 From: Will Bainbridge Date: Tue, 30 Jan 2024 08:26:43 +0000 Subject: [PATCH] solvers: Split moveMesh from motionCorrector This is so that stitching is complete across all regions before any FV operations are attempted. --- applications/modules/VoFSolver/VoFSolver.H | 3 +++ applications/modules/VoFSolver/moveMesh.C | 7 +++++++ .../incompressibleDenseParticleFluid.H | 3 +++ .../incompressibleDenseParticleFluid/moveMesh.C | 7 +++++++ .../modules/incompressibleFluid/incompressibleFluid.H | 3 +++ applications/modules/incompressibleFluid/moveMesh.C | 7 +++++++ applications/modules/isothermalFilm/isothermalFilm.C | 4 ++++ applications/modules/isothermalFilm/isothermalFilm.H | 3 +++ .../modules/isothermalFluid/isothermalFluid.H | 3 +++ applications/modules/isothermalFluid/moveMesh.C | 8 +++++++- applications/modules/movingMesh/movingMesh.C | 4 ++++ applications/modules/movingMesh/movingMesh.H | 3 +++ applications/modules/multiphaseEuler/moveMesh.C | 11 +++++++++++ .../modules/multiphaseEuler/multiphaseEuler.H | 3 +++ applications/modules/shockFluid/moveMesh.C | 8 ++++++++ applications/modules/shockFluid/shockFluid.H | 3 +++ applications/modules/solid/solid.C | 4 ++++ applications/modules/solid/solid.H | 3 +++ applications/solvers/foamMultiRun/foamMultiRun.C | 5 +++++ applications/solvers/foamRun/foamRun.C | 1 + src/finiteVolume/solver/solver.H | 3 +++ 21 files changed, 95 insertions(+), 1 deletion(-) diff --git a/applications/modules/VoFSolver/VoFSolver.H b/applications/modules/VoFSolver/VoFSolver.H index 46b1f4441d..2f977c014b 100644 --- a/applications/modules/VoFSolver/VoFSolver.H +++ b/applications/modules/VoFSolver/VoFSolver.H @@ -241,6 +241,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the start of the PIMPLE loop virtual void prePredictor() = 0; diff --git a/applications/modules/VoFSolver/moveMesh.C b/applications/modules/VoFSolver/moveMesh.C index ec26ac7b07..5012210c2c 100644 --- a/applications/modules/VoFSolver/moveMesh.C +++ b/applications/modules/VoFSolver/moveMesh.C @@ -51,7 +51,14 @@ void Foam::solvers::VoFSolver::moveMesh() // Move the mesh mesh_.move(); + } +} + +void Foam::solvers::VoFSolver::motionCorrector() +{ + if (pimple.firstIter() || pimple.moveMeshOuterCorrectors()) + { if (mesh.changing()) { buoyancy.moveMesh(); diff --git a/applications/modules/incompressibleDenseParticleFluid/incompressibleDenseParticleFluid.H b/applications/modules/incompressibleDenseParticleFluid/incompressibleDenseParticleFluid.H index 889d6f3ea8..14a330e517 100644 --- a/applications/modules/incompressibleDenseParticleFluid/incompressibleDenseParticleFluid.H +++ b/applications/modules/incompressibleDenseParticleFluid/incompressibleDenseParticleFluid.H @@ -225,6 +225,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the start of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/modules/incompressibleDenseParticleFluid/moveMesh.C b/applications/modules/incompressibleDenseParticleFluid/moveMesh.C index e467437ee8..d39c4bb724 100644 --- a/applications/modules/incompressibleDenseParticleFluid/moveMesh.C +++ b/applications/modules/incompressibleDenseParticleFluid/moveMesh.C @@ -36,7 +36,14 @@ void Foam::solvers::incompressibleDenseParticleFluid::moveMesh() { // Move the mesh mesh_.move(); + } +} + +void Foam::solvers::incompressibleDenseParticleFluid::motionCorrector() +{ + if (pimple.firstIter() || pimple.moveMeshOuterCorrectors()) + { if (mesh.changing()) { if (correctPhi || mesh.topoChanged()) diff --git a/applications/modules/incompressibleFluid/incompressibleFluid.H b/applications/modules/incompressibleFluid/incompressibleFluid.H index e3dc0acc1a..7b3af202ed 100644 --- a/applications/modules/incompressibleFluid/incompressibleFluid.H +++ b/applications/modules/incompressibleFluid/incompressibleFluid.H @@ -180,6 +180,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the start of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/modules/incompressibleFluid/moveMesh.C b/applications/modules/incompressibleFluid/moveMesh.C index ec9d2d0bef..4cb514c9ed 100644 --- a/applications/modules/incompressibleFluid/moveMesh.C +++ b/applications/modules/incompressibleFluid/moveMesh.C @@ -35,7 +35,14 @@ void Foam::solvers::incompressibleFluid::moveMesh() { // Move the mesh mesh_.move(); + } +} + +void Foam::solvers::incompressibleFluid::motionCorrector() +{ + if (pimple.firstIter() || pimple.moveMeshOuterCorrectors()) + { if (mesh.changing()) { MRF.update(); diff --git a/applications/modules/isothermalFilm/isothermalFilm.C b/applications/modules/isothermalFilm/isothermalFilm.C index e42b9f6fae..332aafa63f 100644 --- a/applications/modules/isothermalFilm/isothermalFilm.C +++ b/applications/modules/isothermalFilm/isothermalFilm.C @@ -466,6 +466,10 @@ void Foam::solvers::isothermalFilm::moveMesh() {} +void Foam::solvers::isothermalFilm::motionCorrector() +{} + + void Foam::solvers::isothermalFilm::thermophysicalPredictor() { thermo_.correct(); diff --git a/applications/modules/isothermalFilm/isothermalFilm.H b/applications/modules/isothermalFilm/isothermalFilm.H index 96bf6fbda2..4d8e2f01ca 100644 --- a/applications/modules/isothermalFilm/isothermalFilm.H +++ b/applications/modules/isothermalFilm/isothermalFilm.H @@ -338,6 +338,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the start of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/modules/isothermalFluid/isothermalFluid.H b/applications/modules/isothermalFluid/isothermalFluid.H index 7ad3945fd5..6a76dc3cc3 100644 --- a/applications/modules/isothermalFluid/isothermalFluid.H +++ b/applications/modules/isothermalFluid/isothermalFluid.H @@ -255,6 +255,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the start of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/modules/isothermalFluid/moveMesh.C b/applications/modules/isothermalFluid/moveMesh.C index ec9289ba78..626b4e87d0 100644 --- a/applications/modules/isothermalFluid/moveMesh.C +++ b/applications/modules/isothermalFluid/moveMesh.C @@ -35,9 +35,15 @@ void Foam::solvers::isothermalFluid::moveMesh() { // Move the mesh mesh_.move(); + } +} + +void Foam::solvers::isothermalFluid::motionCorrector() +{ + if (pimple.firstIter() || pimple.moveMeshOuterCorrectors()) + { // The rhoU field can be cleared following mesh-motion - // now the mesh has been re-stitched as necessary rhoU.clear(); if (mesh.changing()) diff --git a/applications/modules/movingMesh/movingMesh.C b/applications/modules/movingMesh/movingMesh.C index 8a32a0d968..90eab62302 100644 --- a/applications/modules/movingMesh/movingMesh.C +++ b/applications/modules/movingMesh/movingMesh.C @@ -85,6 +85,10 @@ void Foam::solvers::movingMesh::moveMesh() } +void Foam::solvers::movingMesh::motionCorrector() +{} + + void Foam::solvers::movingMesh::prePredictor() {} diff --git a/applications/modules/movingMesh/movingMesh.H b/applications/modules/movingMesh/movingMesh.H index a6ef22536b..89f02c7041 100644 --- a/applications/modules/movingMesh/movingMesh.H +++ b/applications/modules/movingMesh/movingMesh.H @@ -91,6 +91,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the beginning of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/modules/multiphaseEuler/moveMesh.C b/applications/modules/multiphaseEuler/moveMesh.C index 6182bd8e1d..6352907a6b 100644 --- a/applications/modules/multiphaseEuler/moveMesh.C +++ b/applications/modules/multiphaseEuler/moveMesh.C @@ -57,7 +57,18 @@ void Foam::solvers::multiphaseEuler::moveMesh() // Move the mesh mesh_.move(); + } +} + +void Foam::solvers::multiphaseEuler::motionCorrector() +{ + if + ( + pimple.flow() + && (pimple.firstIter() || pimple.moveMeshOuterCorrectors()) + ) + { if (mesh.changing()) { buoyancy.moveMesh(); diff --git a/applications/modules/multiphaseEuler/multiphaseEuler.H b/applications/modules/multiphaseEuler/multiphaseEuler.H index 22b5d75264..405893720c 100644 --- a/applications/modules/multiphaseEuler/multiphaseEuler.H +++ b/applications/modules/multiphaseEuler/multiphaseEuler.H @@ -239,6 +239,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the start of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/modules/shockFluid/moveMesh.C b/applications/modules/shockFluid/moveMesh.C index 55bae6e8bd..f04c3106ab 100644 --- a/applications/modules/shockFluid/moveMesh.C +++ b/applications/modules/shockFluid/moveMesh.C @@ -33,11 +33,19 @@ void Foam::solvers::shockFluid::moveMesh() { // Move the mesh mesh_.move(); + } +} + +void Foam::solvers::shockFluid::motionCorrector() +{ + if (pimple.firstIter() || pimple.moveMeshOuterCorrectors()) + { if (mesh.changing()) { if (mesh.topoChanged()) { + // ... } meshCourantNo(); diff --git a/applications/modules/shockFluid/shockFluid.H b/applications/modules/shockFluid/shockFluid.H index 2636351c9f..4441830a70 100644 --- a/applications/modules/shockFluid/shockFluid.H +++ b/applications/modules/shockFluid/shockFluid.H @@ -244,6 +244,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the start of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/modules/solid/solid.C b/applications/modules/solid/solid.C index 9307899b70..c2add7c2d2 100644 --- a/applications/modules/solid/solid.C +++ b/applications/modules/solid/solid.C @@ -201,6 +201,10 @@ void Foam::solvers::solid::moveMesh() } +void Foam::solvers::solid::motionCorrector() +{} + + void Foam::solvers::solid::prePredictor() { if (pimple.predictTransport()) diff --git a/applications/modules/solid/solid.H b/applications/modules/solid/solid.H index 52d553877c..a4236e93a7 100644 --- a/applications/modules/solid/solid.H +++ b/applications/modules/solid/solid.H @@ -144,6 +144,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh(); + //- Corrections that follow mesh motion + virtual void motionCorrector(); + //- Called at the beginning of the PIMPLE loop virtual void prePredictor(); diff --git a/applications/solvers/foamMultiRun/foamMultiRun.C b/applications/solvers/foamMultiRun/foamMultiRun.C index ae009fcbf0..4231080d98 100644 --- a/applications/solvers/foamMultiRun/foamMultiRun.C +++ b/applications/solvers/foamMultiRun/foamMultiRun.C @@ -134,6 +134,11 @@ int main(int argc, char *argv[]) solvers[i].moveMesh(); } + forAll(solvers, i) + { + solvers[i].motionCorrector(); + } + forAll(solvers, i) { solvers[i].fvModels().correct(); diff --git a/applications/solvers/foamRun/foamRun.C b/applications/solvers/foamRun/foamRun.C index 340faa0fe0..f74c2562ce 100644 --- a/applications/solvers/foamRun/foamRun.C +++ b/applications/solvers/foamRun/foamRun.C @@ -139,6 +139,7 @@ int main(int argc, char *argv[]) while (pimple.loop()) { solver.moveMesh(); + solver.motionCorrector(); solver.fvModels().correct(); solver.prePredictor(); solver.momentumPredictor(); diff --git a/src/finiteVolume/solver/solver.H b/src/finiteVolume/solver/solver.H index 92d5d89012..4a689cdacd 100644 --- a/src/finiteVolume/solver/solver.H +++ b/src/finiteVolume/solver/solver.H @@ -175,6 +175,9 @@ public: //- Called at the start of the PIMPLE loop to move the mesh virtual void moveMesh() = 0; + //- Corrections that follow mesh motion + virtual void motionCorrector() = 0; + //- Called at the start of the PIMPLE loop virtual void prePredictor() = 0;