perfectInterface: Factored out DynamicID clutter

This commit is contained in:
Henry Weller
2023-12-14 18:54:39 +00:00
parent 99f872337e
commit 6275ea08b2
3 changed files with 44 additions and 81 deletions

View File

@ -30,10 +30,8 @@ Description
#include "perfectInterface.H"
#include "polyMesh.H"
#include "polyTopoChange.H"
#include "addToRunTimeSelectionTable.H"
#include "polyTopoChangeMap.H"
#include "matchPoints.H"
#include "indirectPrimitivePatch.H"
#include "addToRunTimeSelectionTable.H"
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
@ -42,7 +40,6 @@ namespace Foam
defineTypeNameAndDebug(perfectInterface, 0);
}
const Foam::scalar Foam::perfectInterface::tol_ = 1e-3;
@ -78,9 +75,9 @@ Foam::perfectInterface::perfectInterface
)
:
polyMeshModifier(name, mesh),
faceZoneID_(faceZoneName, mesh.faceZones()),
masterPatchID_(masterPatchName, mesh.boundaryMesh()),
slavePatchID_(slavePatchName, mesh.boundaryMesh())
faceZoneID_(mesh.faceZones().findIndex(faceZoneName)),
masterPatchID_(mesh.boundaryMesh().findIndex(masterPatchName)),
slavePatchID_(mesh.boundaryMesh().findIndex(slavePatchName))
{}
@ -146,7 +143,7 @@ void Foam::perfectInterface::setRefinement
{
labelList from1To0Points(pts1.size());
bool matchOk = matchPoints
const bool matchOk = matchPoints
(
pts1,
pts0,
@ -174,7 +171,7 @@ void Foam::perfectInterface::setRefinement
labelList from0To1Faces(pp1.size());
bool matchOk = matchPoints
const bool matchOk = matchPoints
(
calcFaceCentres(pp0),
calcFaceCentres(pp1),
@ -201,7 +198,7 @@ void Foam::perfectInterface::setRefinement
labelHashSet affectedFaces(2*pp1.size());
forAll(meshPts1, i)
{
label meshPointi = meshPts1[i];
const label meshPointi = meshPts1[i];
if (meshPointi != renumberPoints[meshPointi])
{
@ -223,7 +220,7 @@ void Foam::perfectInterface::setRefinement
// never be sure what the user is doing.
forAll(pp0, i)
{
label facei = pp0.addressing()[i];
const label facei = pp0.addressing()[i];
if (affectedFaces.erase(facei))
{
@ -261,14 +258,13 @@ void Foam::perfectInterface::setRefinement
patchi = patches.whichPatch(facei);
}
label zoneID = mesh.faceZones().whichZone(facei);
const label zoneID = mesh.faceZones().whichZone(facei);
bool zoneFlip = false;
if (zoneID >= 0)
{
const faceZone& fZone = mesh.faceZones()[zoneID];
zoneFlip = fZone.flipMap()[fZone.whichFace(facei)];
}
@ -289,7 +285,7 @@ void Foam::perfectInterface::setRefinement
// 3. Remove patch1 points
forAll(meshPts1, i)
{
label meshPointi = meshPts1[i];
const label meshPointi = meshPts1[i];
if (meshPointi != renumberPoints[meshPointi])
{
@ -301,7 +297,7 @@ void Foam::perfectInterface::setRefinement
// 4. Remove patch1 faces
forAll(pp1, i)
{
label facei = pp1.addressing()[i];
const label facei = pp1.addressing()[i];
ref.removeFace(facei, -1);
}
@ -310,12 +306,11 @@ void Foam::perfectInterface::setRefinement
// comment above about patch1 and patch0 never sharing points) and
// becoming internal.
const boolList& mfFlip =
mesh.faceZones()[faceZoneID_.index()].flipMap();
mesh.faceZones()[faceZoneID_].flipMap();
forAll(pp0, i)
{
label facei = pp0.addressing()[i];
const label facei = pp0.addressing()[i];
const face& f = mesh.faces()[facei];
face newFace(f.size());
@ -325,11 +320,9 @@ void Foam::perfectInterface::setRefinement
newFace[fp] = renumberPoints[f[fp]];
}
label own = mesh.faceOwner()[facei];
label pp1Facei = pp1.addressing()[from0To1Faces[i]];
label nbr = mesh.faceOwner()[pp1Facei];
const label own = mesh.faceOwner()[facei];
const label pp1Facei = pp1.addressing()[from0To1Faces[i]];
const label nbr = mesh.faceOwner()[pp1Facei];
if (own < nbr)
{
@ -341,7 +334,7 @@ void Foam::perfectInterface::setRefinement
nbr, // neighbour
false, // face flip
-1, // patch for face
faceZoneID_.index(), // zone for face
faceZoneID_, // zone for face
mfFlip[i] // face flip in zone
);
}
@ -355,7 +348,7 @@ void Foam::perfectInterface::setRefinement
own, // neighbour
true, // face flip
-1, // patch for face
faceZoneID_.index(), // zone for face
faceZoneID_, // zone for face
!mfFlip[i] // face flip in zone
);
}
@ -374,54 +367,27 @@ void Foam::perfectInterface::setRefinement(polyTopoChange& ref) const
<< " faceZoneID_:" << faceZoneID_ << endl;
}
if
(
masterPatchID_.active()
&& slavePatchID_.active()
&& faceZoneID_.active()
)
{
const polyMesh& mesh = this->mesh();
const polyBoundaryMesh& patches = mesh.boundaryMesh();
const polyPatch& patch0 = patches[masterPatchID_.index()];
const polyPatch& patch1 = patches[slavePatchID_.index()];
labelList pp0Labels(identityMap(patch0.size())+patch0.start());
indirectPrimitivePatch pp0
(
IndirectList<face>(mesh.faces(), pp0Labels),
mesh.points()
);
labelList pp1Labels(identityMap(patch1.size())+patch1.start());
indirectPrimitivePatch pp1
(
IndirectList<face>(mesh.faces(), pp1Labels),
mesh.points()
);
setRefinement(pp0, pp1, ref);
}
}
void Foam::perfectInterface::modifyMotionPoints(pointField& motionPoints) const
{
// Update only my points. Nothing to be done here as points already
// shared by now.
}
void Foam::perfectInterface::topoChange(const polyTopoChangeMap& map)
{
// Mesh has changed topologically. Update local topological data
const polyMesh& mesh = this->mesh();
faceZoneID_.update(mesh.faceZones());
masterPatchID_.update(mesh.boundaryMesh());
slavePatchID_.update(mesh.boundaryMesh());
const polyBoundaryMesh& patches = mesh.boundaryMesh();
const polyPatch& patch0 = patches[masterPatchID_];
const polyPatch& patch1 = patches[slavePatchID_];
labelList pp0Labels(identityMap(patch0.size())+patch0.start());
indirectPrimitivePatch pp0
(
IndirectList<face>(mesh.faces(), pp0Labels),
mesh.points()
);
labelList pp1Labels(identityMap(patch1.size())+patch1.start());
indirectPrimitivePatch pp1
(
IndirectList<face>(mesh.faces(), pp1Labels),
mesh.points()
);
setRefinement(pp0, pp1, ref);
}

View File

@ -37,8 +37,6 @@ SourceFiles
#define perfectInterface_H
#include "polyMeshModifier.H"
#include "polyPatchDynamicID.H"
#include "ZoneDynamicIDs.H"
#include "indirectPrimitivePatch.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -46,9 +44,6 @@ SourceFiles
namespace Foam
{
// Forward declaration of classes
class Time;
/*---------------------------------------------------------------------------*\
Class perfectInterface Declaration
\*---------------------------------------------------------------------------*/
@ -60,13 +55,13 @@ class perfectInterface
// Private Data
//- Master face zone ID
faceZoneDynamicID faceZoneID_;
label faceZoneID_;
//- Master patch ID
polyPatchDynamicID masterPatchID_;
label masterPatchID_;
//- Slave patch ID
polyPatchDynamicID slavePatchID_;
label slavePatchID_;
//- Tolerance used for distance comparison
// (fraction of minimum edge length)
@ -125,10 +120,12 @@ public:
) const;
//- Modify motion points to comply with the topological change
virtual void modifyMotionPoints(pointField& motionPoints) const;
virtual void modifyMotionPoints(pointField& motionPoints) const
{}
//- Force recalculation of locally stored data on topological change
virtual void topoChange(const polyTopoChangeMap&);
virtual void topoChange(const polyTopoChangeMap&)
{}
// Member Operators