/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- 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::fvFieldDecomposer Description Finite Volume volume and surface field decomposer. SourceFiles fvFieldDecomposer.C fvFieldDecomposerDecomposeFields.C \*---------------------------------------------------------------------------*/ #ifndef fvFieldDecomposer_H #define fvFieldDecomposer_H #include "fvMesh.H" #include "directFvPatchFieldMapper.H" #include "surfaceFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { class IOobjectList; /*---------------------------------------------------------------------------*\ Class fvFieldDecomposer Declaration \*---------------------------------------------------------------------------*/ class fvFieldDecomposer { public: // Public Classes //- Patch field decomposer class class patchFieldDecomposer : public labelList, public directFvPatchFieldMapper { // Private Member Functions labelList alignAddressing ( const labelUList& addressingSlice, const label addressingOffset ) const; public: // Constructors //- Construct given addressing patchFieldDecomposer ( const labelUList& addressingSlice, const label addressingOffset ); }; //- Processor patch field decomposer class. Maps either owner or // neighbour data (no interpolate anymore - processorFvPatchField // holds neighbour data) class processorVolPatchFieldDecomposer : public labelList, public directFvPatchFieldMapper { // Private Member Functions labelList alignAddressing ( const fvMesh& mesh, const labelUList& addressingSlice ) const; public: //- Construct given addressing processorVolPatchFieldDecomposer ( const fvMesh& mesh, const labelUList& addressingSlice ); }; private: // Private Data //- Reference to complete mesh const fvMesh& completeMesh_; //- Reference to processor mesh const fvMesh& procMesh_; //- Reference to face addressing const labelList& faceAddressing_; //- Reference to cell addressing const labelList& cellAddressing_; //- List of patch field decomposers PtrList patchFieldDecomposers_; //- ... PtrList processorVolPatchFieldDecomposers_; // Private Member Functions //- Helper: map & optionally flip a (face) field template static tmp> mapField ( const Field& field, const labelUList& mapAndSign, const bool applyFlip ); public: // Constructors //- Construct from components fvFieldDecomposer ( const fvMesh& completeMesh, const fvMesh& procMesh, const labelList& faceAddressing, const labelList& cellAddressing ); //- Disallow default bitwise copy construction fvFieldDecomposer(const fvFieldDecomposer&) = delete; //- Destructor ~fvFieldDecomposer(); // Member Functions //- Decompose volume field template tmp> decomposeField ( const GeometricField& field, const bool allowUnknownPatchFields = false ) const; //- Decompose surface field template tmp> decomposeField ( const GeometricField& field ) const; //- Decompose a list of fields template void decomposeFields(const PtrList& fields) const; // Member Operators //- Disallow default bitwise assignment void operator=(const fvFieldDecomposer&) = delete; }; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // } // End namespace Foam // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #ifdef NoRepository #include "fvFieldDecomposerDecomposeFields.C" #endif // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #endif // ************************************************************************* //