mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
ebos: introduce a mapper from compressed to cartesian cell indices of the EQUIL grid
this is because the nice opm-core code which does the equil initialization cannot cope with parallel grids and thus needs to get a special treatment.
This commit is contained in:
@@ -66,10 +66,8 @@ public:
|
||||
private:
|
||||
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
|
||||
|
||||
typedef Grid* GridPointer;
|
||||
typedef EquilGrid* EquilGridPointer;
|
||||
typedef Ewoms::AluCartesianIndexMapper<Grid> CartesianIndexMapper;
|
||||
typedef CartesianIndexMapper* CartesianIndexMapperPointer;
|
||||
typedef Dune::CartesianIndexMapper<EquilGrid> EquilCartesianIndexMapper;
|
||||
|
||||
static const int dimension = Grid::dimension;
|
||||
|
||||
@@ -82,6 +80,7 @@ public:
|
||||
~EclAluGridManager()
|
||||
{
|
||||
delete cartesianIndexMapper_;
|
||||
delete equilCartesianIndexMapper_;
|
||||
delete grid_;
|
||||
delete equilGrid_;
|
||||
}
|
||||
@@ -119,6 +118,9 @@ public:
|
||||
*/
|
||||
void releaseEquilGrid()
|
||||
{
|
||||
delete equilCartesianIndexMapper_;
|
||||
equilCartesianIndexMapper_ = 0;
|
||||
|
||||
delete equilGrid_;
|
||||
equilGrid_ = 0;
|
||||
}
|
||||
@@ -147,6 +149,12 @@ public:
|
||||
const CartesianIndexMapper& cartesianIndexMapper() const
|
||||
{ return *cartesianIndexMapper_; }
|
||||
|
||||
/*!
|
||||
* \brief Returns mapper from compressed to cartesian indices for the EQUIL grid
|
||||
*/
|
||||
const EquilCartesianIndexMapper& equilCartesianIndexMapper() const
|
||||
{ return *equilCartesianIndexMapper_; }
|
||||
|
||||
protected:
|
||||
void createGrids_()
|
||||
{
|
||||
@@ -167,14 +175,16 @@ protected:
|
||||
/*clipZ=*/false,
|
||||
porv);
|
||||
|
||||
/////
|
||||
// create the simulation grid
|
||||
/////
|
||||
cartesianCellId_ = equilGrid_->globalCell();
|
||||
|
||||
for (unsigned i = 0; i < dimension; ++i)
|
||||
cartesianDimension_[i] = equilGrid_->logicalCartesianSize()[i];
|
||||
|
||||
equilCartesianIndexMapper_ = new EquilCartesianIndexMapper(*equilGrid_);
|
||||
|
||||
/////
|
||||
// create the simulation grid
|
||||
/////
|
||||
Dune::FromToGridFactory<Grid> factory;
|
||||
grid_ = factory.convert(*equilGrid_, cartesianCellId_);
|
||||
|
||||
@@ -182,11 +192,12 @@ protected:
|
||||
new CartesianIndexMapper(*grid_, cartesianDimension_, cartesianCellId_);
|
||||
}
|
||||
|
||||
GridPointer grid_;
|
||||
EquilGridPointer equilGrid_;
|
||||
Grid* grid_;
|
||||
EquilGrid* equilGrid_;
|
||||
std::vector<int> cartesianCellId_;
|
||||
std::array<int,dimension> cartesianDimension_;
|
||||
CartesianIndexMapperPointer cartesianIndexMapper_;
|
||||
CartesianIndexMapper* cartesianIndexMapper_;
|
||||
EquilCartesianIndexMapper* equilCartesianIndexMapper_;
|
||||
};
|
||||
|
||||
} // namespace Ewoms
|
||||
|
||||
@@ -212,6 +212,21 @@ public:
|
||||
void cartesianCoordinate(unsigned cellIdx, std::array<int,3>& ijk) const
|
||||
{ return asImp_().cartesianIndexMapper().cartesianCoordinate(cellIdx, ijk); }
|
||||
|
||||
/*!
|
||||
* \brief Returns the Cartesian cell id given an element index for the grid used for equilibration
|
||||
*/
|
||||
unsigned equilCartesianIndex(unsigned compressedEquilCellIdx) const
|
||||
{ return asImp_().equilCartesianIndexMapper().cartesianIndex(compressedEquilCellIdx); }
|
||||
|
||||
/*!
|
||||
* \brief Extract Cartesian index triplet (i,j,k) of an active cell of the grid used for EQUIL.
|
||||
*
|
||||
* \param [in] cellIdx Active cell index.
|
||||
* \param [out] ijk Cartesian index triplet
|
||||
*/
|
||||
void equilCartesianCoordinate(unsigned cellIdx, std::array<int,3>& ijk) const
|
||||
{ return asImp_().equilCartesianIndexMapper().cartesianCoordinate(cellIdx, ijk); }
|
||||
|
||||
private:
|
||||
Implementation& asImp_()
|
||||
{ return *static_cast<Implementation*>(this); }
|
||||
|
||||
@@ -62,11 +62,7 @@ public:
|
||||
|
||||
private:
|
||||
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
|
||||
|
||||
typedef Grid* GridPointer;
|
||||
typedef EquilGrid* EquilGridPointer;
|
||||
typedef Dune::CartesianIndexMapper<Grid> CartesianIndexMapper;
|
||||
typedef CartesianIndexMapper* CartesianIndexMapperPointer;
|
||||
|
||||
public:
|
||||
/*!
|
||||
@@ -77,6 +73,7 @@ public:
|
||||
~EclCpGridManager()
|
||||
{
|
||||
delete cartesianIndexMapper_;
|
||||
delete equilCartesianIndexMapper_;
|
||||
delete grid_;
|
||||
delete equilGrid_;
|
||||
}
|
||||
@@ -116,6 +113,9 @@ public:
|
||||
{
|
||||
delete equilGrid_;
|
||||
equilGrid_ = 0;
|
||||
|
||||
delete equilCartesianIndexMapper_;
|
||||
equilCartesianIndexMapper_ = 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -138,6 +138,12 @@ public:
|
||||
const CartesianIndexMapper& cartesianIndexMapper() const
|
||||
{ return *cartesianIndexMapper_; }
|
||||
|
||||
/*!
|
||||
* \brief Returns mapper from compressed to cartesian indices for the EQUIL grid
|
||||
*/
|
||||
const CartesianIndexMapper& equilCartesianIndexMapper() const
|
||||
{ return *equilCartesianIndexMapper_; }
|
||||
|
||||
protected:
|
||||
void createGrids_()
|
||||
{
|
||||
@@ -160,11 +166,13 @@ protected:
|
||||
/*flipNormals=*/false,
|
||||
/*clipZ=*/false,
|
||||
porv);
|
||||
equilCartesianIndexMapper_ = new CartesianIndexMapper(*equilGrid_);
|
||||
}
|
||||
|
||||
GridPointer grid_;
|
||||
EquilGridPointer equilGrid_;
|
||||
CartesianIndexMapperPointer cartesianIndexMapper_;
|
||||
Grid* grid_;
|
||||
EquilGrid* equilGrid_;
|
||||
CartesianIndexMapper* cartesianIndexMapper_;
|
||||
CartesianIndexMapper* equilCartesianIndexMapper_;
|
||||
};
|
||||
|
||||
} // namespace Ewoms
|
||||
|
||||
@@ -730,8 +730,9 @@ private:
|
||||
|
||||
const std::vector<int>& pvtnumData =
|
||||
eclState->getIntGridProperty("PVTNUM")->getData();
|
||||
rockTableIdx_.resize(gridManager.gridView().size(/*codim=*/0));
|
||||
for (size_t elemIdx = 0; elemIdx < rockTableIdx_.size(); ++ elemIdx) {
|
||||
unsigned numElem = gridManager.gridView().size(0);
|
||||
rockTableIdx_.resize(numElem);
|
||||
for (size_t elemIdx = 0; elemIdx < numElem; ++ elemIdx) {
|
||||
unsigned cartElemIdx = gridManager.cartesianIndex(elemIdx);
|
||||
|
||||
// reminder: Eclipse uses FORTRAN-style indices
|
||||
|
||||
Reference in New Issue
Block a user