/*---------------------------------------------------------------------------*\ ========= | \\ / 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::GAMGInterface Description Abstract base class for GAMG agglomerated interfaces. SourceFiles GAMGInterface.C newAmgInterface.C \*---------------------------------------------------------------------------*/ #ifndef GAMGInterface_H #define GAMGInterface_H #include "autoPtr.H" #include "lduInterfacePtrsList.H" #include "GAMGAgglomeration.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { /*---------------------------------------------------------------------------*\ Class GAMGInterface Declaration \*---------------------------------------------------------------------------*/ class GAMGInterface : public lduInterface { protected: // Protected data //- My index in coarseInterfaces const label index_; //- All interfaces const lduInterfacePtrsList& coarseInterfaces_; //- Face-cell addressing labelList faceCells_; //- Face restrict addressing labelList faceRestrictAddressing_; // Protected Member Functions //- No copy construct GAMGInterface(const GAMGInterface&) = delete; //- No copy assignment void operator=(const GAMGInterface&) = delete; public: //- Runtime type information TypeName("GAMGInterface"); // Declare run-time constructor selection tables declareRunTimeSelectionTable ( autoPtr, GAMGInterface, lduInterface, ( const label index, const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing, const label fineLevelIndex, const label coarseComm ), ( index, coarseInterfaces, fineInterface, localRestrictAddressing, neighbourRestrictAddressing, fineLevelIndex, coarseComm ) ); declareRunTimeSelectionTable ( autoPtr, GAMGInterface, Istream, ( const label index, const lduInterfacePtrsList& coarseInterfaces, Istream& is ), ( index, coarseInterfaces, is ) ); // Selectors //- Return a pointer to a new interface created on freestore given // the fine interface static autoPtr New ( const label index, const lduInterfacePtrsList& coarseInterfaces, const lduInterface& fineInterface, const labelField& localRestrictAddressing, const labelField& neighbourRestrictAddressing, const label fineLevelIndex, const label coarseComm ); //- Return a pointer to a new interface created on freestore given // the fine interface static autoPtr New ( const word& coupleType, const label index, const lduInterfacePtrsList& coarseInterfaces, Istream& is ); // Constructors //- Construct from interfaces, restrict addressing set later on GAMGInterface ( const label index, const lduInterfacePtrsList& coarseInterfaces ) : index_(index), coarseInterfaces_(coarseInterfaces) {} //- Construct from interfaces and restrict addressing GAMGInterface ( const label index, const lduInterfacePtrsList& coarseInterfaces, const labelUList& faceCells, const labelUList& faceRestrictAddressing ) : index_(index), coarseInterfaces_(coarseInterfaces), faceCells_(faceCells), faceRestrictAddressing_(faceRestrictAddressing) {} //- Construct from Istream GAMGInterface ( const label index, const lduInterfacePtrsList& coarseInterfaces, Istream& is ); //- Construct by assembling and return a clone. virtual autoPtr clone ( const label index, const lduInterfacePtrsList& coarseInterfaces, const labelList& interfaceMap, // current to fine interface const labelUList& faceCells, const labelUList& faceRestrictAddresssing, const labelUList& faceOffsets, const lduInterfacePtrsList& allInterfaces, const label coarseComm, const label myProcNo, const labelList& procAgglomMap ) const { NotImplemented; return nullptr; } // Member Functions // Access //- Return size virtual label size() const { return faceCells_.size(); } virtual label index() const { return index_; } virtual const lduInterfacePtrsList& coarseInterfaces() const { return coarseInterfaces_; } //- Return faceCell addressing virtual const labelUList& faceCells() const { return faceCells_; } //- Return (local)face restrict addressing virtual const labelList& faceRestrictAddressing() const { return faceRestrictAddressing_; } //- Return non-const access to face restrict addressing virtual labelList& faceRestrictAddressing() { return faceRestrictAddressing_; } //- Return the interface internal field of the given field template tmp> interfaceInternalField ( const UList& internalData ) const; //- Return the interface internal field of the given field //- using faceCell mapping template tmp> interfaceInternalField ( const UList& internalData, const labelUList& faceCells ) const; //- Get the interface internal field of the given field template void interfaceInternalField ( const UList& internalData, List& ) const; //- 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 faceCell mapping virtual tmp interfaceInternalField ( const labelUList& internalData, const labelUList& faceCells ) const; // Agglomeration //- Merge the next level with this level // combining the face-restrict addressing // and copying the face-cell addressing void combine(const GAMGInterface&); //- Agglomerating the given fine-level coefficients and return virtual tmp agglomerateCoeffs ( const scalarField& fineCoeffs ) const; // I/O //- Write to stream virtual void write(Ostream&) const = 0; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository #include "GAMGInterfaceTemplates.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //