BUG: potentialFoam/cylinder: indexing into non-existing patch in parallel
[OpenFOAM-2.0.x.git] / src / OpenFOAM / meshes / ProcessorTopology / ProcessorTopology.H
blob4a46bfcbd0f9f7b213ce2a3dbf3ee84d805bea2a
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::ProcessorTopology
27 Description
28     Determines processor-processor connection. After instantiation contains
29     on all processors the processor-processor connection table.
31     *this[procI] gives the list of neighbouring processors.
33     TODO: This does not currently correctly support multiple processor
34     patches connecting two processors.
36 SourceFiles
37     ProcessorTopology.C
39 \*---------------------------------------------------------------------------*/
41 #ifndef ProcessorTopology_H
42 #define ProcessorTopology_H
44 #include "labelList.H"
45 #include "lduSchedule.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 /*---------------------------------------------------------------------------*\
53                        Class ProcessorTopology Declaration
54 \*---------------------------------------------------------------------------*/
56 template<class Patch, class ProcPatch>
57 class ProcessorTopology
59     public labelListList
62 private:
64     // Private data
66         //- Local map from neighbour proc to patchI. Different per processor!
67         //  -1 or patchI for connection to procID
68         labelList procPatchMap_;
70         //- Order in which the patches should be initialised/evaluated
71         //  corresponding to the schedule
72         lduSchedule patchSchedule_;
75     // Private Member Functions
77         //- Return all neighbouring processors of this processor. Set
78         //  procPatchMap_.
79         labelList procNeighbours(const PtrList<Patch>&);
81 public:
83     // Constructors
85         //- Construct from boundaryMesh
86         ProcessorTopology(const PtrList<Patch>& patches);
89     // Member Functions
91         //- from neighbour processor to index in boundaryMesh. Local information
92         //  (so not same over all processors)
93         const labelList& procPatchMap() const
94         {
95             return procPatchMap_;
96         }
98         //- Order in which the patches should be initialised/evaluated
99         //  corresponding to the schedule
100         const lduSchedule& patchSchedule() const
101         {
102             return patchSchedule_;
103         }
107 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
109 } // End namespace Foam
111 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
113 #ifdef NoRepository
114 #   include "ProcessorTopology.C"
115 #endif
117 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
119 #endif
121 // ************************************************************************* //