100 using ElementMapper = GetPropType<TypeTag, Properties::ElementMapper>;
101 using Scalar = GetPropType<TypeTag, Properties::Scalar>;
102 using Simulator = GetPropType<TypeTag, Properties::Simulator>;
105 using Grid = GetPropType<TypeTag, Properties::Grid>;
106 using EquilGrid = GetPropType<TypeTag, Properties::EquilGrid>;
107 using GridView = GetPropType<TypeTag, Properties::GridView>;
111 using Factory = Dune::FromToGridFactory<Grid>;
113 static constexpr int dimension = Grid::dimension;
114 static constexpr int dimensionworld = Grid::dimensionworld;
120 this->callImplementationInit();
145 {
return *equilGrid_; }
156 delete equilCartesianIndexMapper_;
157 equilCartesianIndexMapper_ =
nullptr;
160 equilGrid_ =
nullptr;
170 auto gridView =
grid().leafGridView();
171 auto dataHandle = cartesianIndexMapper_->dataHandle(gridView);
172 grid().loadBalance(*dataHandle);
175 grid().communicate(*dataHandle,
176 Dune::InteriorBorder_All_Interface,
177 Dune::ForwardCommunication );
181 globalTrans_ = std::make_unique<TransmissibilityType>(this->
eclState(),
186 getPropValue<TypeTag,
187 Properties::EnableEnergy>(),
188 getPropValue<TypeTag,
189 Properties::EnableDiffusion>(),
190 getPropValue<TypeTag,
191 Properties::EnableDispersion>());
193 globalTrans_->update(
false, [&](
unsigned int i) {
return gridEquilIdxToGridIdx(i);});
198 template<
class DataHandle>
199 void scatterData(DataHandle& )
const
204 template<
class DataHandle>
205 void gatherData(DataHandle& )
const
210 template<
class DataHandle,
class InterfaceType,
class CommunicationDirection>
211 void communicate (DataHandle& , InterfaceType ,
212 CommunicationDirection )
const
224 globalTrans_.reset();
232 {
return *cartesianIndexMapper_; }
238 {
return *equilCartesianIndexMapper_; }
247 std::function<std::array<double,dimensionworld>(
int)>
253 const TransmissibilityType& globalTransmissibility()
const
255 assert( globalTrans_ !=
nullptr );
256 return *globalTrans_;
259 void releaseGlobalTransmissibility()
261 globalTrans_.reset();
264 const std::vector<int>& globalCell()
266 return cartesianCellId_;
269 std::vector<int> cellPartition()
const
275 unsigned int gridEquilIdxToGridIdx(
unsigned int elemIndex)
const {
276 return equilGridToGrid_[elemIndex];
279 unsigned int gridIdxToEquilGridIdx(
unsigned int elemIndex)
const {
280 return ordering_[elemIndex];
294 const EclipseGrid* input_grid =
nullptr;
295 std::vector<double> global_porv;
301 input_grid = &this->
eclState().getInputGrid();
302 global_porv = this->
eclState().fieldProps().porv(
true);
303 OpmLog::info(
"\nProcessing grid");
309 this->equilGrid_ = std::make_unique<Dune::CpGrid>();
313 this->equilGrid_->processEclipseFormat(input_grid,
319 cartesianCellId_ = this->equilGrid_->globalCell();
321 for (
unsigned i = 0; i < dimension; ++i)
322 cartesianDimension_[i] = this->equilGrid_->logicalCartesianSize()[i];
324 equilCartesianIndexMapper_ = std::make_unique<EquilCartesianIndexMapper>(*equilGrid_);
330 factory_ = std::make_unique<Factory>();
331 grid_ = factory_->convert(*equilGrid_, cartesianCellId_, ordering_);
332 OpmLog::warning(
"Space Filling Curve Ordering is not yet supported: DISABLE_ALUGRID_SFC_ORDERING is enabled");
333 equilGridToGrid_.resize(ordering_.size());
334 for (std::size_t index = 0; index < ordering_.size(); ++index) {
335 equilGridToGrid_[ordering_[index]] = index;
338 cartesianIndexMapper_ = std::make_unique<CartesianIndexMapper>(*grid_, cartesianDimension_, cartesianCellId_);
339 this->updateGridView_();
340 this->updateCartesianToCompressedMapping_();
341 this->updateCellDepths_();
342 this->updateCellThickness_();
345 void filterConnections_()
350 std::unique_ptr<Grid> grid_;
351 std::unique_ptr<EquilGrid> equilGrid_;
352 std::vector<int> cartesianCellId_;
353 std::vector<unsigned int> ordering_;
354 std::vector<unsigned int> equilGridToGrid_;
355 std::array<int,dimension> cartesianDimension_;
356 std::unique_ptr<CartesianIndexMapper> cartesianIndexMapper_;
357 std::unique_ptr<EquilCartesianIndexMapper> equilCartesianIndexMapper_;
358 std::unique_ptr<Factory> factory_;
359 std::unique_ptr<TransmissibilityType> globalTrans_;
std::function< std::array< double, dimensionworld >(int)> cellCentroids_(const CartMapper &cartMapper, const bool &isCpGrid) const
Get function to query cell centroids for a distributed grid.
Definition FlowBaseVanguard.hpp:496