/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | www.openfoam.com \\/ M anipulation | ------------------------------------------------------------------------------- Copyright (C) 2011-2016 OpenFOAM Foundation Copyright (C) 2019 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::cyclicAMIFvPatch Description Cyclic patch for Arbitrary Mesh Interface (AMI) SourceFiles cyclicAMIFvPatch.C \*---------------------------------------------------------------------------*/ #ifndef Foam_cyclicAMIFvPatch_H #define Foam_cyclicAMIFvPatch_H #include "cyclicAMIPolyPatch.H" #include "coupledFvPatch.H" #include "cyclicAMILduInterface.H" #include "fvBoundaryMesh.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ Class cyclicAMIFvPatch Declaration \*---------------------------------------------------------------------------*/ class cyclicAMIFvPatch : public coupledFvPatch, public cyclicAMILduInterface { // Private Data const cyclicAMIPolyPatch& cyclicAMIPolyPatch_; protected: // Protected Member functions //- Make patch weighting factors void makeWeights(scalarField&) const; //- Correct patch deltaCoeffs virtual void makeDeltaCoeffs(scalarField&) const; //- Correct patch non-ortho deltaCoeffs virtual void makeNonOrthoDeltaCoeffs(scalarField&) const; //- Correct patch non-ortho correction vectors virtual void makeNonOrthoCorrVectors(vectorField&) const; //- Correct patches after moving points virtual void movePoints(); public: //- Runtime type information TypeName(cyclicAMIPolyPatch::typeName_()); // Constructors //- Construct from polyPatch cyclicAMIFvPatch(const polyPatch& patch, const fvBoundaryMesh& bm) : coupledFvPatch(patch, bm), cyclicAMILduInterface(), cyclicAMIPolyPatch_(refCast(patch)) {} // Member functions // Access // // Implicit treatment functions // // //- Return number of new internal of this polyPatch faces // virtual void newInternalProcFaces(label&, label&) const; // // //- Return nbrCells // virtual const labelUList& nbrCells() const // { // return cyclicAMIPolyPatch_.neighbPatch().faceCells(); // } // // //- Return nbr patch ID // virtual label neighbPolyPatchID() const // { // return neighbPatchID(); // } // // //- Return collocated faces map // virtual refPtr mapCollocatedFaces() const // { // const labelListList& sourceFaces = // cyclicAMIPolyPatch_.AMI().srcAddress(); // return refPtr // ( // new labelListList(sourceFaces) // ); // } // // //- Return implicit master // virtual bool masterImplicit() const // { // return owner(); // } //- Return local reference cast into the cyclic patch const cyclicAMIPolyPatch& cyclicAMIPatch() const { return cyclicAMIPolyPatch_; } //- Does this side own the patch? virtual bool owner() const { return cyclicAMIPolyPatch_.owner(); } //- Return neighbour patch ID virtual label neighbPatchID() const { return cyclicAMIPolyPatch_.neighbPatchID(); } //- Return a reference to the neighbour patch virtual const cyclicAMIFvPatch& neighbPatch() const { return refCast ( this->boundaryMesh()[cyclicAMIPolyPatch_.neighbPatchID()] ); } //- Return a reference to the AMI interpolator virtual const AMIPatchToPatchInterpolation& AMI() const { return cyclicAMIPolyPatch_.AMI(); } //- Return true if applying the low weight correction virtual bool applyLowWeightCorrection() const { return cyclicAMIPolyPatch_.applyLowWeightCorrection(); } //- Are the cyclic planes parallel virtual bool parallel() const { return cyclicAMIPolyPatch_.parallel(); } //- Return face transformation tensor virtual const tensorField& forwardT() const { return cyclicAMIPolyPatch_.forwardT(); } //- Return neighbour-cell transformation tensor virtual const tensorField& reverseT() const { return cyclicAMIPolyPatch_.reverseT(); } const cyclicAMIFvPatch& neighbFvPatch() const { return refCast ( this->boundaryMesh()[cyclicAMIPolyPatch_.neighbPatchID()] ); } //- Return true if this patch is coupled. This is equivalent //- to the coupledPolyPatch::coupled() if parallel running or //- both sides present, false otherwise virtual bool coupled() const; //- Return delta (P to N) vectors across coupled patch virtual tmp delta() const; template tmp> interpolate ( const Field& fld, const UList& defaultValues = UList() ) const { return cyclicAMIPolyPatch_.interpolate(fld, defaultValues); } template tmp> interpolate ( const tmp>& tFld, const UList& defaultValues = UList() ) const { return cyclicAMIPolyPatch_.interpolate(tFld, defaultValues); } // Interface transfer functions //- Return the values of the given internal data adjacent to //- the interface as a field virtual tmp interfaceInternalField ( const labelUList& internalData ) const; //- Return the values of the given internal data adjacent to //- the interface as a field using a mapping faceCell virtual tmp interfaceInternalField ( const labelUList& internalData, const labelUList& faceCells ) const; //- Return neighbour field virtual tmp internalFieldTransfer ( const Pstream::commsTypes commsType, const labelUList& internalData ) const; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //