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;
    }
This commit is contained in:
Andrew Heather 2023-06-25 18:58:12 +01:00
parent b264d2e913
commit c9645e61a6
2 changed files with 75 additions and 12 deletions

View File

@ -40,6 +40,14 @@ namespace Foam
defineTypeNameAndDebug(advancingFrontAMI, 0);
}
const Foam::Enum<Foam::advancingFrontAMI::areaNormalisationMode>
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<face>& 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_)
{}

View File

@ -57,6 +57,17 @@ class advancingFrontAMI
:
public AMIInterpolation
{
public:
//- Area normalisation mode
enum class areaNormalisationMode
{
project,
mag
};
static const Enum<areaNormalisationMode> areaNormalisationModeNames_;
private:
@ -143,6 +154,9 @@ protected:
//- Face triangulation mode
const faceAreaIntersect::triangulationMode triMode_;
//- Area normalisation mode; default = project
areaNormalisationMode areaNormalisationMode_;
// Protected Member Functions