From 4267bb6c37ef72967d24fa0bbdbd7e9820d72341 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Fri, 24 Dec 2021 11:32:06 +0000 Subject: [PATCH] fvConstraints: Added support for mesh redistribution and load-balancing --- .../cfdTools/general/fvConstraints/fvConstraint.C | 14 -------------- .../cfdTools/general/fvConstraints/fvConstraint.H | 6 +++--- src/finiteVolume/fvMesh/fvCellSet/fvCellSet.C | 7 +++++++ src/finiteVolume/fvMesh/fvCellSet/fvCellSet.H | 4 ++++ .../fixedTemperatureConstraint.C | 13 +++++++++++-- .../fixedTemperatureConstraint.H | 3 +++ .../fixedValueConstraint/fixedValueConstraint.C | 13 +++++++++++-- .../fixedValueConstraint/fixedValueConstraint.H | 3 +++ src/fvConstraints/limitPressure/limitPressure.C | 15 +++++++++++++++ src/fvConstraints/limitPressure/limitPressure.H | 9 +++++++++ .../limitTemperature/limitTemperature.C | 10 ++++++++-- .../limitTemperature/limitTemperature.H | 3 +++ src/fvConstraints/limitVelocity/limitVelocity.C | 10 ++++++++-- src/fvConstraints/limitVelocity/limitVelocity.H | 3 +++ .../meanVelocityForce/meanVelocityForce.C | 10 ++++++++-- .../meanVelocityForce/meanVelocityForce.H | 3 +++ 16 files changed, 99 insertions(+), 27 deletions(-) diff --git a/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.C b/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.C index eeb9e5d793..886b03326e 100644 --- a/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.C +++ b/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.C @@ -148,18 +148,4 @@ bool Foam::fvConstraint::read(const dictionary& dict) } -void Foam::fvConstraint::updateMesh(const mapPolyMesh&) -{} - - -void Foam::fvConstraint::distribute(const mapDistributePolyMesh&) -{} - - -bool Foam::fvConstraint::movePoints() -{ - return true; -} - - // ************************************************************************* // diff --git a/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.H b/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.H index 3142129489..e4977e3ef6 100644 --- a/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.H +++ b/src/finiteVolume/cfdTools/general/fvConstraints/fvConstraint.H @@ -213,13 +213,13 @@ public: // Mesh changes //- Update for mesh changes - virtual void updateMesh(const mapPolyMesh&); + virtual void updateMesh(const mapPolyMesh&) = 0; //- Update mesh corresponding to the given distribution map - virtual void distribute(const mapDistributePolyMesh&); + virtual void distribute(const mapDistributePolyMesh&) = 0; //- Update for mesh motion - virtual bool movePoints(); + virtual bool movePoints() = 0; // IO diff --git a/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.C b/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.C index 3a4c370e97..c9b9526ac3 100644 --- a/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.C +++ b/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.C @@ -174,6 +174,13 @@ void Foam::fvCellSet::updateMesh(const mapPolyMesh&) } +void Foam::fvCellSet::distribute(const mapDistributePolyMesh&) +{ + setCells(); + setV(); +} + + void Foam::fvCellSet::movePoints() { if (selectionMode_ == selectionModeType::points) diff --git a/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.H b/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.H index 6725f5fd5d..ad57c6ba41 100644 --- a/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.H +++ b/src/finiteVolume/fvMesh/fvCellSet/fvCellSet.H @@ -70,6 +70,7 @@ namespace Foam { class fvMesh; +class mapDistributePolyMesh; /*---------------------------------------------------------------------------*\ Class fvCellSet Declaration @@ -168,6 +169,9 @@ public: //- Update for mesh changes void updateMesh(const mapPolyMesh&); + //- Update mesh corresponding to the given distribution map + void distribute(const mapDistributePolyMesh&); + //- Update for mesh motion void movePoints(); diff --git a/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.C b/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.C index 3b3d03d574..e713501abf 100644 --- a/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.C +++ b/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.C @@ -156,9 +156,18 @@ bool Foam::fv::fixedTemperatureConstraint::constrain } -void Foam::fv::fixedTemperatureConstraint::updateMesh(const mapPolyMesh& mpm) +void Foam::fv::fixedTemperatureConstraint::updateMesh(const mapPolyMesh& map) { - set_.updateMesh(mpm); + set_.updateMesh(map); +} + + +void Foam::fv::fixedTemperatureConstraint::distribute +( + const mapDistributePolyMesh& map +) +{ + set_.distribute(map); } diff --git a/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.H b/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.H index d82ca482cb..11a8f3d195 100644 --- a/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.H +++ b/src/fvConstraints/fixedTemperatureConstraint/fixedTemperatureConstraint.H @@ -158,6 +158,9 @@ public: //- Update for mesh changes virtual void updateMesh(const mapPolyMesh&); + //- Update mesh corresponding to the given distribution map + virtual void distribute(const mapDistributePolyMesh&); + //- Update for mesh motion virtual bool movePoints(); diff --git a/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.C b/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.C index 9971360c4b..2d0d3e5608 100644 --- a/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.C +++ b/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.C @@ -117,9 +117,18 @@ FOR_ALL_FIELD_TYPES ); -void Foam::fv::fixedValueConstraint::updateMesh(const mapPolyMesh& mpm) +void Foam::fv::fixedValueConstraint::updateMesh(const mapPolyMesh& map) { - set_.updateMesh(mpm); + set_.updateMesh(map); +} + + +void Foam::fv::fixedValueConstraint::distribute +( + const mapDistributePolyMesh& map +) +{ + set_.distribute(map); } diff --git a/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.H b/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.H index ace70e4dcd..bec8b2b0db 100644 --- a/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.H +++ b/src/fvConstraints/fixedValueConstraint/fixedValueConstraint.H @@ -121,6 +121,9 @@ public: //- Update for mesh changes virtual void updateMesh(const mapPolyMesh&); + //- Update mesh corresponding to the given distribution map + virtual void distribute(const mapDistributePolyMesh&); + //- Update for mesh motion virtual bool movePoints(); diff --git a/src/fvConstraints/limitPressure/limitPressure.C b/src/fvConstraints/limitPressure/limitPressure.C index e0461429f7..aea7acbe9a 100644 --- a/src/fvConstraints/limitPressure/limitPressure.C +++ b/src/fvConstraints/limitPressure/limitPressure.C @@ -219,6 +219,21 @@ bool Foam::fv::limitPressure::constrain(volScalarField& p) const } +void Foam::fv::limitPressure::updateMesh(const mapPolyMesh&) +{} + + +void Foam::fv::limitPressure::distribute(const mapDistributePolyMesh&) +{} + + +bool Foam::fv::limitPressure::movePoints() +{ + return true; +} + + + bool Foam::fv::limitPressure::read(const dictionary& dict) { if (fvConstraint::read(dict)) diff --git a/src/fvConstraints/limitPressure/limitPressure.H b/src/fvConstraints/limitPressure/limitPressure.H index 19f4c1c7ca..e83ad60110 100644 --- a/src/fvConstraints/limitPressure/limitPressure.H +++ b/src/fvConstraints/limitPressure/limitPressure.H @@ -126,6 +126,15 @@ public: //- Constrain the energy field virtual bool constrain(volScalarField& he) const; + //- Update for mesh changes + virtual void updateMesh(const mapPolyMesh&); + + //- Update mesh corresponding to the given distribution map + virtual void distribute(const mapDistributePolyMesh&); + + //- Update for mesh motion + virtual bool movePoints(); + //- Read dictionary virtual bool read(const dictionary& dict); diff --git a/src/fvConstraints/limitTemperature/limitTemperature.C b/src/fvConstraints/limitTemperature/limitTemperature.C index 7a7a73feaa..ff4a1511dd 100644 --- a/src/fvConstraints/limitTemperature/limitTemperature.C +++ b/src/fvConstraints/limitTemperature/limitTemperature.C @@ -183,9 +183,15 @@ bool Foam::fv::limitTemperature::constrain(volScalarField& he) const } -void Foam::fv::limitTemperature::updateMesh(const mapPolyMesh& mpm) +void Foam::fv::limitTemperature::updateMesh(const mapPolyMesh& map) { - set_.updateMesh(mpm); + set_.updateMesh(map); +} + + +void Foam::fv::limitTemperature::distribute(const mapDistributePolyMesh& map) +{ + set_.distribute(map); } diff --git a/src/fvConstraints/limitTemperature/limitTemperature.H b/src/fvConstraints/limitTemperature/limitTemperature.H index ee53d73e4c..03b04b270d 100644 --- a/src/fvConstraints/limitTemperature/limitTemperature.H +++ b/src/fvConstraints/limitTemperature/limitTemperature.H @@ -133,6 +133,9 @@ public: //- Update for mesh changes virtual void updateMesh(const mapPolyMesh&); + //- Update mesh corresponding to the given distribution map + virtual void distribute(const mapDistributePolyMesh&); + //- Update for mesh motion virtual bool movePoints(); diff --git a/src/fvConstraints/limitVelocity/limitVelocity.C b/src/fvConstraints/limitVelocity/limitVelocity.C index e1ab94a2ac..24049a4ee8 100644 --- a/src/fvConstraints/limitVelocity/limitVelocity.C +++ b/src/fvConstraints/limitVelocity/limitVelocity.C @@ -128,9 +128,15 @@ bool Foam::fv::limitVelocity::constrain(volVectorField& U) const } -void Foam::fv::limitVelocity::updateMesh(const mapPolyMesh& mpm) +void Foam::fv::limitVelocity::updateMesh(const mapPolyMesh& map) { - set_.updateMesh(mpm); + set_.updateMesh(map); +} + + +void Foam::fv::limitVelocity::distribute(const mapDistributePolyMesh& map) +{ + set_.distribute(map); } diff --git a/src/fvConstraints/limitVelocity/limitVelocity.H b/src/fvConstraints/limitVelocity/limitVelocity.H index ac963a49ea..d3315d3e5b 100644 --- a/src/fvConstraints/limitVelocity/limitVelocity.H +++ b/src/fvConstraints/limitVelocity/limitVelocity.H @@ -121,6 +121,9 @@ public: //- Update for mesh changes virtual void updateMesh(const mapPolyMesh&); + //- Update mesh corresponding to the given distribution map + virtual void distribute(const mapDistributePolyMesh&); + //- Update for mesh motion virtual bool movePoints(); diff --git a/src/fvConstraints/meanVelocityForce/meanVelocityForce.C b/src/fvConstraints/meanVelocityForce/meanVelocityForce.C index 2cf4e771da..6a0eab257e 100644 --- a/src/fvConstraints/meanVelocityForce/meanVelocityForce.C +++ b/src/fvConstraints/meanVelocityForce/meanVelocityForce.C @@ -248,9 +248,15 @@ bool Foam::fv::meanVelocityForce::constrain(volVectorField& U) const } -void Foam::fv::meanVelocityForce::updateMesh(const mapPolyMesh& mpm) +void Foam::fv::meanVelocityForce::updateMesh(const mapPolyMesh& map) { - set_.updateMesh(mpm); + set_.updateMesh(map); +} + + +void Foam::fv::meanVelocityForce::distribute(const mapDistributePolyMesh& map) +{ + set_.distribute(map); } diff --git a/src/fvConstraints/meanVelocityForce/meanVelocityForce.H b/src/fvConstraints/meanVelocityForce/meanVelocityForce.H index 1280d9971e..2c4c6faeb4 100644 --- a/src/fvConstraints/meanVelocityForce/meanVelocityForce.H +++ b/src/fvConstraints/meanVelocityForce/meanVelocityForce.H @@ -158,6 +158,9 @@ public: //- Update for mesh changes virtual void updateMesh(const mapPolyMesh&); + //- Update mesh corresponding to the given distribution map + virtual void distribute(const mapDistributePolyMesh&); + //- Update for mesh motion virtual bool movePoints();