21#ifndef DUNE_CPGRID_ZOLTAN_GRAPH_FUNCTIONS_HEADER
22#define DUNE_CPGRID_ZOLTAN_GRAPH_FUNCTIONS_HEADER
29#if defined(HAVE_ZOLTAN) && defined(HAVE_MPI)
48inline int getCpGridNumCells(
void* cpGridPointer,
int* err)
56void getCpGridVertexList(
void* cpGridPointer,
int numGlobalIds,
57 int numLocalIds, ZOLTAN_ID_PTR gids,
58 ZOLTAN_ID_PTR lids,
int wgtDim,
59 float *objWgts,
int *err);
62void getCpGridNumEdgesList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
64 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
65 int *numEdges,
int *err);
68void 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);
75void getNullVertexList(
void* cpGridPointer,
int numGlobalIds,
76 int numLocalIds, ZOLTAN_ID_PTR gids,
77 ZOLTAN_ID_PTR lids,
int wgtDim,
78 float *objWgts,
int *err);
81void getNullNumEdgesList(
void *cpGridPointer,
int sizeGID,
int sizeLID,
83 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
84 int *numEdges,
int *err);
87void 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);
96inline int getNullNumCells(
void* cpGridPointer,
int* err)
104void getCpGridWellsNumEdgesList(
void *cpGridWellsPointer,
int sizeGID,
int sizeLID,
106 ZOLTAN_ID_PTR globalID, ZOLTAN_ID_PTR localID,
107 int *numEdges,
int *err);
110void 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);
142 const std::vector<OpmWellType> * wells,
143 const double* transmissibilities,
144 bool pretendEmptyGrid,
160 return transmissibilities_ ? (1.0e18*transmissibilities_[face_index]) : 1;
165 double trans = transmissibilities_ ? transmissibilities_[face_index] : 1;
166 return trans == 0.0 ? 0.0 : 1.0 + std::log(trans) - log_min_;
171 return well_indices_;
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);
228 const double* transmissibilities_;
229 int edgeWeightsMethod_;
230 WellConnections well_indices_;
239void setCpGridZoltanGraphFunctions(Zoltan_Struct *zz,
const Dune::CpGrid& grid,
240 bool pretendNull=
false);
242void setCpGridZoltanGraphFunctions(Zoltan_Struct *zz,
243 const CombinedGridWellGraph& graph,
[ provides Dune::Grid ]
Definition: CpGrid.hpp:238
int numCells() const
Get the number of cells.
int numFaces() const
Get the number of faces.
A graph repesenting a grid together with the well completions.
Definition: ZoltanGraphFunctions.hpp:131
const WellConnections & getWellConnections() const
Definition: ZoltanGraphFunctions.hpp:169
const GraphType & getWellsGraph() const
Definition: ZoltanGraphFunctions.hpp:153
double transmissibility(int face_index) const
Definition: ZoltanGraphFunctions.hpp:158
std::vector< std::set< int > > GraphType
Definition: ZoltanGraphFunctions.hpp:133
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.
double logTransmissibilityWeights(int face_index) const
Definition: ZoltanGraphFunctions.hpp:163
double edgeWeight(int face_index) const
Definition: ZoltanGraphFunctions.hpp:174
A class calculating and representing all connections of wells.
Definition: WellConnections.hpp:51
The namespace Dune is the main namespace for all Dune code.
Definition: common/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
int numCells(const Dune::CpGrid &grid)
Get the number of cells of a grid.