My Project
ZoltanPartition.hpp
1 /*
2  Copyright 2015 Dr. Blatt - HPC-Simulation-Software & Services.
3  Copyright 2015 Statoil AS
4 
5  This file is part of The Open Porous Media project (OPM).
6 
7  OPM is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  OPM is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with OPM. If not, see <http://www.gnu.org/licenses/>.
19 */
20 #ifndef DUNE_CPGRID_ZOLTANPARTITION_HEADER
21 #define DUNE_CPGRID_ZOLTANPARTITION_HEADER
22 
23 #include <unordered_set>
24 
25 #include <opm/grid/CpGrid.hpp>
26 #include <opm/grid/common/ZoltanGraphFunctions.hpp>
27 #include <opm/grid/common/WellConnections.hpp>
28 
29 #if HAVE_MPI
30 namespace Dune
31 {
32 namespace cpgrid
33 {
64 template<class Id>
65 std::tuple<std::vector<int>, std::vector<std::pair<std::string,bool>>,
66  std::vector<std::tuple<int,int,char> >,
67  std::vector<std::tuple<int,int,char,int> >,
68  WellConnections>
69 makeImportAndExportLists(const Dune::CpGrid& cpgrid,
70  const Dune::CollectiveCommunication<MPI_Comm>& cc,
71  const std::vector<Dune::cpgrid::OpmWellType> * wells,
72  const Dune::cpgrid::CombinedGridWellGraph* gridAndWells,
73  int root,
74  int numExport,
75  int numImport,
76  const Id* exportLocalGids,
77  const Id* exportGlobalGids,
78  const int* exportToPart,
79  const Id* importGlobalGids,
80  bool allowDistributedWells = false);
81 
82 template<class Id>
83 std::tuple<int, std::vector<Id> >
84 scatterExportInformation(int numExport, const Id* exportGlobalGids,
85  const int* exportToPart, int root,
86  const Dune::CollectiveCommunication<MPI_Comm>& cc);
87 } // end namespace cpgrid
88 } // end namespace Dune
89 #endif //HAVE_MPI
90 #if defined(HAVE_ZOLTAN) && defined(HAVE_MPI)
91 namespace Dune
92 {
93 namespace cpgrid
94 {
124 
125 std::tuple<std::vector<int>,std::vector<std::pair<std::string,bool>>,
126  std::vector<std::tuple<int,int,char> >,
127  std::vector<std::tuple<int,int,char,int> >,
128  WellConnections>
129 zoltanGraphPartitionGridOnRoot(const CpGrid& grid,
130  const std::vector<OpmWellType> * wells,
131  const double* transmissibilities,
132  const CollectiveCommunication<MPI_Comm>& cc,
133  EdgeWeightMethod edgeWeightsMethod, int root,
134  const double zoltanImbalanceTol,
135  bool allowDistributedWells);
136 
167 std::tuple<std::vector<int>, std::vector<std::pair<std::string,bool>>,
168  std::vector<std::tuple<int,int,char> >,
169  std::vector<std::tuple<int,int,char,int> >,
170  WellConnections>
171 zoltanSerialGraphPartitionGridOnRoot(const CpGrid& grid,
172  const std::vector<OpmWellType> * wells,
173  const double* transmissibilities,
174  const CollectiveCommunication<MPI_Comm>& cc,
175  EdgeWeightMethod edgeWeightsMethod, int root,
176  const double zoltanImbalanceTol,
177  bool allowDistributedWells);
178 
198 std::vector<int>
199 zoltanGraphPartitionGridForJac(const CpGrid& cpgrid,
200  const std::vector<OpmWellType> * wells,
201  const double* transmissibilities,
202  const CollectiveCommunication<MPI_Comm>& cc,
203  EdgeWeightMethod edgeWeightsMethod, int root,
204  int numParts, const double zoltanImbalanceTol);
205 
206 }
207 }
208 
209 
210 #endif // HAVE_ZOLTAN
211 #endif // header guard
[ provides Dune::Grid ]
Definition: CpGrid.hpp:207
A graph repesenting a grid together with the well completions.
Definition: ZoltanGraphFunctions.hpp:131
Copyright 2019 Equinor AS.
Definition: CartesianIndexMapper.hpp:10
EdgeWeightMethod
enum for choosing Methods for weighting graph-edges correspoding to cell interfaces in Zoltan's graph...
Definition: GridEnums.hpp:34