21 #ifndef DUNE_CPGRID_ZOLTAN_GRAPH_FUNCTIONS_HEADER 22 #define DUNE_CPGRID_ZOLTAN_GRAPH_FUNCTIONS_HEADER 24 #include <opm/grid/utility/OpmWellType.hpp> 26 #include <opm/grid/CpGrid.hpp> 27 #include <opm/grid/common/WellConnections.hpp> 29 #if defined(HAVE_ZOLTAN) && defined(HAVE_MPI) 48 inline int getCpGridNumCells(
void* cpGridPointer,
int* err)
56 void getCpGridVertexList(
void* cpGridPointer,
int numGlobalIds,
57 int numLocalIds, ZOLTAN_ID_PTR gids,
58 ZOLTAN_ID_PTR lids,
int wgtDim,
59 float *objWgts,
int *err);
62 int getNumberOfEdgesForSpecificCell(
const Dune::CpGrid& grid,
int localCellId);
65 void getCpGridNumEdgesList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
67 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
68 int *numEdges,
int *err);
71 template <
typename ID>
72 void fillNBORGIDForSpecificCellAndIncrementNeighborCounter(
const Dune::CpGrid& grid,
int localCellId, ID globalID,
int& neighborCounter, ID& nborGID);
75 void getCpGridEdgeList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
76 int numCells, ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
78 ZOLTAN_ID_PTR nborGID,
int *nborProc,
79 int wgt_dim,
float *ewgts,
int *err);
82 void getNullVertexList(
void* cpGridPointer,
int numGlobalIds,
83 int numLocalIds, ZOLTAN_ID_PTR gids,
84 ZOLTAN_ID_PTR lids,
int wgtDim,
85 float *objWgts,
int *err);
88 void getNullNumEdgesList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
90 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
91 int *numEdges,
int *err);
94 void getNullEdgeList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
95 int numCells, ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
97 ZOLTAN_ID_PTR nborGID,
int *nborProc,
98 int wgt_dim,
float *ewgts,
int *err);
103 inline int getNullNumCells(
void* cpGridPointer,
int* err)
105 (void) cpGridPointer;
111 void getCpGridWellsNumEdgesList(
void *cpGridWellsPointer,
int sizeGID,
int sizeLID,
113 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
114 int *numEdges,
int *err);
117 void getCpGridWellsEdgeList(
void *cpGridWellsPointer,
int sizeGID,
int sizeLID,
118 int numCells, ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
120 ZOLTAN_ID_PTR nborGID,
int *nborProc,
121 int wgt_dim,
float *ewgts,
int *err);
125 #endif // HAVE_ZOLTAN 140 typedef std::vector<std::set<int> > GraphType;
152 const std::vector<OpmWellType> * wells,
153 const std::unordered_map<std::string, std::set<int>>& possibleFutureConnections,
154 const double* transmissibilities,
155 bool pretendEmptyGrid,
164 const GraphType& getWellsGraph()
const 169 double transmissibility(
int face_index)
const 171 return transmissibilities_ ? (1.0e18*transmissibilities_[face_index]) : 1;
174 double logTransmissibilityWeights(
int face_index)
const 176 double trans = transmissibilities_ ? transmissibilities_[face_index] : 1;
177 return trans == 0.0 ? 0.0 : 1.0 + std::log(trans) - log_min_;
180 const WellConnections& getWellConnections()
const 182 return well_indices_;
185 double edgeWeight(
int face_index)
const 190 return transmissibility(face_index);
192 return logTransmissibilityWeights(face_index);
198 void addCompletionSetToGraph()
200 for(
const auto& well_indices: well_indices_)
202 for(
auto well_idx = well_indices.begin(); well_idx != well_indices.end();
205 auto well_idx2 = well_idx;
206 for( ++well_idx2; well_idx2 != well_indices.end();
209 wellsGraph_[*well_idx].insert(*well_idx2);
210 wellsGraph_[*well_idx2].insert(*well_idx);
216 void findMaxMinTrans()
218 if (transmissibilities_) {
219 double min_val = std::numeric_limits<float>::max();
222 double trans = transmissibilities_[face];
229 log_min_ = std::log(min_val);
237 GraphType wellsGraph_;
238 const double* transmissibilities_;
239 int edgeWeightsMethod_;
240 WellConnections well_indices_;
248 template<
typename ID,
typename weightType>
252 void setCpGridZoltanGraphFunctions(Zoltan_Struct *zz,
const Dune::CpGrid& grid,
257 bool pretendNull=
false);
259 void setCpGridZoltanGraphFunctions(Zoltan_Struct *zz,
260 const CombinedGridWellGraph& graph,
262 #endif // HAVE_ZOLTAN 266 #endif // header guard Use the log of the transmissibilities as edge weights.
Definition: GridEnums.hpp:40
A graph repesenting a grid together with the well completions.
Definition: ZoltanGraphFunctions.hpp:137
The namespace Dune is the main namespace for all Dune code.
Definition: CartesianIndexMapper.hpp:9
[ provides Dune::Grid ]
Definition: CpGrid.hpp:201
Use the transmissibilities as edge weights.
Definition: GridEnums.hpp:38
int numCells(int level=-1) const
Get the number of cells.
Definition: CpGrid.cpp:1148
int numFaces(int level=-1) const
Get the number of faces.
Definition: CpGrid.cpp:1154
void fillNBORGIDAndWeightsForSpecificCellAndIncrementNeighborCounterForGridWithWells(const CombinedGridWellGraph &graph, const int localCellId, ID globalID, int &neighborCounter, ID &nborGID, weightType *ewgts)
Get the list of edges and weights for one cell of a grid with wells.
int getNumberOfEdgesForSpecificCellForGridWithWells(const CombinedGridWellGraph &graph, int localCellId)
Get the number of edges of the graph of the grid and the wells for one cell.
const Dune::CpGrid & getGrid() const
Access the grid.
Definition: ZoltanGraphFunctions.hpp:159
All edge have a uniform weight of 1.
Definition: GridEnums.hpp:36
CombinedGridWellGraph(const Dune::CpGrid &grid, const std::vector< OpmWellType > *wells, const std::unordered_map< std::string, std::set< int >> &possibleFutureConnections, const double *transmissibilities, bool pretendEmptyGrid, EdgeWeightMethod edgeWeightsMethod)
Create a graph representing a grid together with the wells.
EdgeWeightMethod
enum for choosing Methods for weighting graph-edges correspoding to cell interfaces in Zoltan's or Me...
Definition: GridEnums.hpp:34