diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C index 34b2b091de9b35583c6184e5f303116ee6e138d6..b26b225690fb3c5e9e80c286cbac290e62a655ac 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -30,9 +30,24 @@ License // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // -defineTypeNameAndDebug(Foam::coupledPolyPatch, 0); +namespace Foam +{ + defineTypeNameAndDebug(coupledPolyPatch, 0); + + scalar coupledPolyPatch::matchTol = 1E-3; -Foam::scalar Foam::coupledPolyPatch::matchTol = 1E-3; + template<> + const char* NamedEnum<coupledPolyPatch::transformType, 4>::names[] = + { + "unknown", + "rotational", + "translational", + "noOrdering" + }; + + const NamedEnum<coupledPolyPatch::transformType, 4> + coupledPolyPatch::transformTypeNames; +} // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * // @@ -204,12 +219,14 @@ void Foam::coupledPolyPatch::calcTransformTensors const vectorField& nf, const vectorField& nr, const scalarField& smallDist, - const scalar absTol + const scalar absTol, + const transformType transform ) const { if (debug) { Pout<< "coupledPolyPatch::calcTransformTensors : " << name() << endl + << " transform:" << transformTypeNames[transform] << nl << " (half)size:" << Cf.size() << nl << " absTol:" << absTol << nl << " smallDist min:" << min(smallDist) << nl @@ -242,9 +259,16 @@ void Foam::coupledPolyPatch::calcTransformTensors Pout<< " error:" << error << endl; } - if (sum(mag(nf & nr)) < Cf.size()-error) + if + ( + transform == ROTATIONAL + || ( + transform != TRANSLATIONAL + && (sum(mag(nf & nr)) < Cf.size()-error) + ) + ) { - // Rotation, no separation + // Type is rotation or unknown and normals not aligned // Assume per-face differing transformation, correct later @@ -284,7 +308,7 @@ void Foam::coupledPolyPatch::calcTransformTensors } else { - // No rotation, possible separation + // Translational or (unknown and normals aligned) forwardT_.setSize(0); reverseT_.setSize(0); diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H index 31fc9bcb1baf1099805c10127a3c9e1154228293..682e9962b62c3aeafa2c35a0576b69d2e7cafe41 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/basic/coupled/coupledPolyPatch.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2004-2010 OpenCFD Ltd. + \\ / A nd | Copyright (C) 2004-2011 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -53,6 +53,20 @@ class coupledPolyPatch : public polyPatch { +public: + + enum transformType + { + UNKNOWN, // unspecified; automatic ordering + ROTATIONAL, // rotation along coordinate axis + TRANSLATIONAL, // translation + NOORDERING // unspecified, no automatic ordering + }; + static const NamedEnum<transformType, 4> transformTypeNames; + + +private: + // Private data //- offset (distance) vector from one side of the couple to the other @@ -82,6 +96,8 @@ protected: //- Calculate the transformation tensors // smallDist : matching distance per face // absTol : absolute error in normal + // if transformType = unknown it first tries rotational, then + // translational transform void calcTransformTensors ( const vectorField& Cf, @@ -89,7 +105,8 @@ protected: const vectorField& nf, const vectorField& nr, const scalarField& smallDist, - const scalar absTol = matchTol + const scalar absTol = matchTol, + const transformType = UNKNOWN ) const; //- Initialise the calculation of the patch geometry diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C index a5039132f9f47c92e7c6171e378c9445ebe02953..03032fbb53780bd860f8b2039d7c3f40ab5cd65b 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.C @@ -44,24 +44,8 @@ namespace Foam addToRunTimeSelectionTable(polyPatch, cyclicPolyPatch, word); addToRunTimeSelectionTable(polyPatch, cyclicPolyPatch, dictionary); - - template<> - const char* Foam::NamedEnum - < - Foam::cyclicPolyPatch::transformType, - 4 - >::names[] = - { - "unknown", - "rotational", - "translational", - "noOrdering" - }; } -const Foam::NamedEnum<Foam::cyclicPolyPatch::transformType, 4> - Foam::cyclicPolyPatch::transformTypeNames; - // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -271,7 +255,9 @@ void Foam::cyclicPolyPatch::calcTransforms static_cast<const pointField&>(half1Ctrs), half0Normals, half1Normals, - half0Tols + half0Tols, + matchTol, + transform_ ); if (transform_ == ROTATIONAL && !parallel() && forwardT().size() > 1) diff --git a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H index dd0d14db86e6e53a3d036da906f5bcaee2ba2b34..68a008bdedd606dde76b16bf6cf162e180be8a4a 100644 --- a/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H +++ b/src/OpenFOAM/meshes/polyMesh/polyPatches/constraint/cyclic/cyclicPolyPatch.H @@ -64,20 +64,6 @@ class cyclicPolyPatch : public coupledPolyPatch { -public: - - enum transformType - { - UNKNOWN, // unspecified; automatic ordering - ROTATIONAL, // rotation along coordinate axis - TRANSLATIONAL, // translation - NOORDERING // unspecified, no automatic ordering - }; - static const NamedEnum<transformType, 4> transformTypeNames; - - -private: - // Private data //- Name of other half