mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
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:
@ -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,6 +392,11 @@ void Foam::advancingFrontAMI::triangulatePatch
|
||||
|
||||
const DynamicList<face>& triFaces = tris[facei];
|
||||
magSf[facei] = 0;
|
||||
|
||||
switch (areaNormalisationMode_)
|
||||
{
|
||||
case areaNormalisationMode::project:
|
||||
{
|
||||
for (const face& f : triFaces)
|
||||
{
|
||||
magSf[facei] +=
|
||||
@ -395,6 +408,23 @@ void Foam::advancingFrontAMI::triangulatePatch
|
||||
).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_)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user