/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2015-2021 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . Class Foam::cyclicPeriodicAMIPolyPatch Description Cyclic patch for periodic Arbitrary Mesh Interface (AMI) Uses automated matching to fill all of the faces on owner and neighbour. Can be used for translational periodic matching as well. Uses the transforms from a specified periodic patch to transform the geometry. SourceFiles cyclicPeriodicAMIPolyPatch.C \*---------------------------------------------------------------------------*/ #ifndef cyclicPeriodicAMIPolyPatch_H #define cyclicPeriodicAMIPolyPatch_H #include "cyclicAMIPolyPatch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // Forward Declarations class OBJstream; /*---------------------------------------------------------------------------*\ Class cyclicPeriodicAMIPolyPatch Declaration \*---------------------------------------------------------------------------*/ class cyclicPeriodicAMIPolyPatch : public cyclicAMIPolyPatch { private: // Private data //- Current number of transformations (+ve forward, -ve backward). //- Used internally to stores the last state that gave a starting //- match. Speeds up the automatic matching. mutable label nTransforms_; //- Number of sectors in a rotationally periodic geometry (optional) const label nSectors_; //- Maximum number of attempts to match the AMI geometry const label maxIter_; // Private Member Functions //- Synchronise the periodic transformations void syncTransforms() const; //- Debug: write obj files of patch (collected on master) void writeOBJ(const primitivePatch& p, OBJstream& str) const; //- Reset the AMI interpolator virtual void resetAMI() const; public: //- Runtime type information TypeName("cyclicPeriodicAMI"); // Constructors //- Construct from (base coupled patch) components cyclicPeriodicAMIPolyPatch ( const word& name, const label size, const label start, const label index, const polyBoundaryMesh& bm, const word& patchType, const transformType transform = UNKNOWN ); //- Construct from dictionary cyclicPeriodicAMIPolyPatch ( const word& name, const dictionary& dict, const label index, const polyBoundaryMesh& bm, const word& patchType ); //- Construct as copy, resetting the boundary mesh cyclicPeriodicAMIPolyPatch ( const cyclicPeriodicAMIPolyPatch&, const polyBoundaryMesh& ); //- Construct given the original patch and resetting the // face list and boundary mesh information cyclicPeriodicAMIPolyPatch ( const cyclicPeriodicAMIPolyPatch& pp, const polyBoundaryMesh& bm, const label index, const label newSize, const label newStart, const word& nbrPatchName ); //- Construct given the original patch and a map cyclicPeriodicAMIPolyPatch ( const cyclicPeriodicAMIPolyPatch& pp, const polyBoundaryMesh& bm, const label index, const labelUList& mapAddressing, const label newStart ); //- Construct and return a clone, resetting the boundary mesh virtual autoPtr clone(const polyBoundaryMesh& bm) const { return autoPtr ( new cyclicPeriodicAMIPolyPatch(*this, bm) ); } //- Construct and return a clone, resetting the face list // and boundary mesh virtual autoPtr clone ( const polyBoundaryMesh& bm, const label index, const label newSize, const label newStart ) const { return autoPtr ( new cyclicPeriodicAMIPolyPatch ( *this, bm, index, newSize, newStart, nbrPatchName_ ) ); } //- Construct and return a clone, resetting the face list // and boundary mesh virtual autoPtr clone ( const polyBoundaryMesh& bm, const label index, const labelUList& mapAddressing, const label newStart ) const { return autoPtr ( new cyclicPeriodicAMIPolyPatch ( *this, bm, index, mapAddressing, newStart ) ); } //- Destructor virtual ~cyclicPeriodicAMIPolyPatch(); // Member Functions //- Write the polyPatch data as a dictionary virtual void write(Ostream&) const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //