21 #ifndef DUNE_CPGRID_ZOLTAN_GRAPH_FUNCTIONS_HEADER
22 #define DUNE_CPGRID_ZOLTAN_GRAPH_FUNCTIONS_HEADER
24 #include <opm/grid/utility/OpmParserIncludes.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)
52 return grid.numCells();
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 void getCpGridNumEdgesList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
64 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
65 int *numEdges,
int *err);
68 void getCpGridEdgeList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
69 int numCells, ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
71 ZOLTAN_ID_PTR nborGID,
int *nborProc,
72 int wgt_dim,
float *ewgts,
int *err);
75 void getNullVertexList(
void* cpGridPointer,
int numGlobalIds,
76 int numLocalIds, ZOLTAN_ID_PTR gids,
77 ZOLTAN_ID_PTR lids,
int wgtDim,
78 float *objWgts,
int *err);
81 void getNullNumEdgesList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
83 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
84 int *numEdges,
int *err);
87 void getNullEdgeList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
88 int numCells, ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
90 ZOLTAN_ID_PTR nborGID,
int *nborProc,
91 int wgt_dim,
float *ewgts,
int *err);
96 inline int getNullNumCells(
void* cpGridPointer,
int* err)
104 void getCpGridWellsNumEdgesList(
void *cpGridWellsPointer,
int sizeGID,
int sizeLID,
106 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
107 int *numEdges,
int *err);
110 void getCpGridWellsEdgeList(
void *cpGridWellsPointer,
int sizeGID,
int sizeLID,
111 int numCells, ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
113 ZOLTAN_ID_PTR nborGID,
int *nborProc,
114 int wgt_dim,
float *ewgts,
int *err);
133 typedef std::vector<std::set<int> > GraphType;
142 const std::vector<OpmWellType> * wells,
143 const double* transmissibilities,
144 bool pretendEmptyGrid,
153 const GraphType& getWellsGraph()
const
158 double transmissibility(
int face_index)
const
160 return transmissibilities_ ? (1.0e18*transmissibilities_[face_index]) : 1;
163 double logTransmissibilityWeights(
int face_index)
const
165 double trans = transmissibilities_ ? transmissibilities_[face_index] : 1;
166 return trans == 0.0 ? 0.0 : 1.0 + std::log(trans) - log_min_;
169 const WellConnections& getWellConnections()
const
171 return well_indices_;
174 double edgeWeight(
int face_index)
const
179 return transmissibility(face_index);
181 return logTransmissibilityWeights(face_index);
187 void addCompletionSetToGraph()
189 for(
const auto& well_indices: well_indices_)
191 for(
auto well_idx = well_indices.begin(); well_idx != well_indices.end();
194 auto well_idx2 = well_idx;
195 for( ++well_idx2; well_idx2 != well_indices.end();
198 wellsGraph_[*well_idx].insert(*well_idx2);
199 wellsGraph_[*well_idx2].insert(*well_idx);
205 void findMaxMinTrans()
207 double min_val = std::numeric_limits<float>::max();
209 if (transmissibilities_) {
212 double trans = transmissibilities_[face];
219 log_min_ = std::log(min_val);
227 GraphType wellsGraph_;
228 const double* transmissibilities_;
229 int edgeWeightsMethod_;
230 WellConnections well_indices_;
239 void setCpGridZoltanGraphFunctions(Zoltan_Struct *zz,
const Dune::CpGrid& grid,
240 bool pretendNull=
false);
242 void setCpGridZoltanGraphFunctions(Zoltan_Struct *zz,
243 const CombinedGridWellGraph& graph,
[ provides Dune::Grid ]
Definition: CpGrid.hpp:210
int numFaces() const
Get the number of faces.
Definition: CpGrid.hpp:967
A graph repesenting a grid together with the well completions.
Definition: ZoltanGraphFunctions.hpp:131
const Dune::CpGrid & getGrid() const
Access the grid.
Definition: ZoltanGraphFunctions.hpp:148
CombinedGridWellGraph(const Dune::CpGrid &grid, const std::vector< OpmWellType > *wells, const double *transmissibilities, bool pretendEmptyGrid, EdgeWeightMethod edgeWeightsMethod)
Create a graph representing a grid together with the wells.
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
@ defaultTransEdgeWgt
Use the transmissibilities as edge weights.
Definition: GridEnums.hpp:38
@ logTransEdgeWgt
Use the log of the transmissibilities as edge weights.
Definition: GridEnums.hpp:40
@ uniformEdgeWgt
All edge have a uniform weight of 1.
Definition: GridEnums.hpp:36