diff --git a/src/lagrangian/basic/InteractionLists/globalIndexAndTransform/globalIndexAndTransform.C b/src/lagrangian/basic/InteractionLists/globalIndexAndTransform/globalIndexAndTransform.C index 3bcd500d04..e132849598 100644 --- a/src/lagrangian/basic/InteractionLists/globalIndexAndTransform/globalIndexAndTransform.C +++ b/src/lagrangian/basic/InteractionLists/globalIndexAndTransform/globalIndexAndTransform.C @@ -34,15 +34,16 @@ const Foam::label Foam::globalIndexAndTransform::base_ = 32; // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -bool Foam::globalIndexAndTransform::matchTransform +Foam::label Foam::globalIndexAndTransform::matchTransform ( const List& refTransforms, + label& matchedRefTransformI, const vectorTensorTransform& testTransform, scalar tolerance, - bool bothSigns + bool checkBothSigns ) const { - // return min(mag(transforms_ - sepVec)) > tol + matchedRefTransformI = -1; forAll(refTransforms, i) { @@ -82,10 +83,12 @@ bool Foam::globalIndexAndTransform::matchTransform if (vectorDiff < 1 && tensorDiff < 1) { - return true; + matchedRefTransformI = i; + + return +1; } - if (bothSigns) + if (checkBothSigns) { // Test the inverse transform differences too @@ -106,12 +109,14 @@ bool Foam::globalIndexAndTransform::matchTransform if (vectorDiff < 1 && tensorDiff < 1) { - return true; + matchedRefTransformI = i; + + return -1; } } } - return false; + return 0; } @@ -123,6 +128,8 @@ void Foam::globalIndexAndTransform::determineTransforms() label nextTrans = 0; + label dummyMatch = -1; + forAll(patches, patchI) { const polyPatch& pp = patches[patchI]; @@ -145,7 +152,17 @@ void Foam::globalIndexAndTransform::determineTransforms() vectorTensorTransform transform(sepVec); - if (!matchTransform(transforms_, transform, tol, false)) + if + ( + matchTransform + ( + transforms_, + dummyMatch, + transform, + tol, + false + ) == 0 + ) { transforms_[nextTrans++] = transform; } @@ -166,7 +183,7 @@ void Foam::globalIndexAndTransform::determineTransforms() } else if (!cpp.parallel()) { - const tensorField& transTensors = cpp.forwardT(); + const tensorField& transTensors = cpp.reverseT(); forAll(transTensors, tTI) { @@ -178,7 +195,17 @@ void Foam::globalIndexAndTransform::determineTransforms() vectorTensorTransform transform(transT); - if (!matchTransform(transforms_, transform, tol, false)) + if + ( + matchTransform + ( + transforms_, + dummyMatch, + transform, + tol, + false + ) == 0 + ) { transforms_[nextTrans++] = transform; } @@ -225,7 +252,17 @@ void Foam::globalIndexAndTransform::determineTransforms() { scalar tol = coupledPolyPatch::matchTol; - if (!matchTransform(transforms_, transform, tol, true)) + if + ( + matchTransform + ( + transforms_, + dummyMatch, + transform, + tol, + true + ) == 0 + ) { transforms_[nextTrans++] = transform; } @@ -290,6 +327,123 @@ void Foam::globalIndexAndTransform::determineTransformPermutations() } +void Foam::globalIndexAndTransform::determinePatchTransformSign() +{ + const polyBoundaryMesh& patches = mesh_.boundaryMesh(); + + patchTransformSign_.setSize(patches.size(), Pair