From c9645e61a645f2c685ddaf7e8ae146ae94c46d09 Mon Sep 17 00:00:00 2001 From: Andrew Heather <> Date: Sun, 25 Jun 2023 18:58:12 +0100 Subject: [PATCH] ENH: AMI - added option to control area normailisation mode The optional areaNormalisationMode entry determines how the area normalisation is performed. Options are: - `project`: tri face area dotted with patch face normal; same as v2212 (default) - `mag`: tri face area magnitude (v2206 and earlier) Example usage: AMI1 { type cyclicAMI; ... areaNormalisationMode mag; //areaNormalisationMode project; } --- .../advancingFrontAMI/advancingFrontAMI.C | 73 ++++++++++++++++--- .../advancingFrontAMI/advancingFrontAMI.H | 14 ++++ 2 files changed, 75 insertions(+), 12 deletions(-) diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.C b/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.C index ca25ff1160..f835c6c70e 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.C +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.C @@ -40,6 +40,14 @@ namespace Foam defineTypeNameAndDebug(advancingFrontAMI, 0); } + +const Foam::Enum +Foam::advancingFrontAMI::areaNormalisationModeNames_ +{ + { areaNormalisationMode::project, "project" }, + { areaNormalisationMode::mag, "mag" }, +}; + // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // void Foam::advancingFrontAMI::checkPatches() const @@ -384,16 +392,38 @@ void Foam::advancingFrontAMI::triangulatePatch const DynamicList& triFaces = tris[facei]; magSf[facei] = 0; - for (const face& f : triFaces) + + switch (areaNormalisationMode_) { - magSf[facei] += - triPointRef - ( - points[f[0]], - points[f[1]], - points[f[2]] - ).areaNormal() - & faceNormals[facei]; + case areaNormalisationMode::project: + { + for (const face& f : triFaces) + { + magSf[facei] += + triPointRef + ( + points[f[0]], + points[f[1]], + points[f[2]] + ).areaNormal() + & faceNormals[facei]; + } + break; + } + case areaNormalisationMode::mag: + { + for (const face& f : triFaces) + { + magSf[facei] += + triPointRef + ( + points[f[0]], + points[f[1]], + points[f[2]] + ).mag(); + } + break; + } } } } @@ -447,8 +477,25 @@ Foam::advancingFrontAMI::advancingFrontAMI dict, faceAreaIntersect::tmMesh ) + ), + areaNormalisationMode_ + ( + areaNormalisationModeNames_.getOrDefault + ( + "areaNormalisationMode", + dict, + areaNormalisationMode::project + ) ) -{} +{ + DebugInfo + << "AMI: maxDistance2:" << maxDistance2_ + << " minCosAngle:" << minCosAngle_ + << " triMode:" << faceAreaIntersect::triangulationModeNames_[triMode_] + << " areaNormalisationMode:" + << areaNormalisationModeNames_[areaNormalisationMode_] + << endl; +} Foam::advancingFrontAMI::advancingFrontAMI @@ -470,7 +517,8 @@ Foam::advancingFrontAMI::advancingFrontAMI extendedTgtFaceIDs_(), extendedTgtMapPtr_(nullptr), srcNonOverlap_(), - triMode_(triMode) + triMode_(triMode), + areaNormalisationMode_(areaNormalisationMode::project) {} @@ -487,7 +535,8 @@ Foam::advancingFrontAMI::advancingFrontAMI(const advancingFrontAMI& ami) extendedTgtFaceIDs_(), extendedTgtMapPtr_(nullptr), srcNonOverlap_(), - triMode_(ami.triMode_) + triMode_(ami.triMode_), + areaNormalisationMode_(ami.areaNormalisationMode_) {} diff --git a/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.H b/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.H index 5cfec3e12d..368d61fe2a 100644 --- a/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.H +++ b/src/meshTools/AMIInterpolation/AMIInterpolation/advancingFrontAMI/advancingFrontAMI.H @@ -57,6 +57,17 @@ class advancingFrontAMI : public AMIInterpolation { +public: + + //- Area normalisation mode + enum class areaNormalisationMode + { + project, + mag + }; + + static const Enum areaNormalisationModeNames_; + private: @@ -143,6 +154,9 @@ protected: //- Face triangulation mode const faceAreaIntersect::triangulationMode triMode_; + //- Area normalisation mode; default = project + areaNormalisationMode areaNormalisationMode_; + // Protected Member Functions