|
|
|
|
@@ -82,64 +82,68 @@ std::uint64_t directionalIsId(std::uint32_t elemIdx1, std::uint32_t elemIdx2)
|
|
|
|
|
|
|
|
|
|
namespace Opm {
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
EclTransmissibility(const EclipseState& eclState,
|
|
|
|
|
const GridView& gridView,
|
|
|
|
|
const Dune::CartesianIndexMapper<Grid>& cartMapper,
|
|
|
|
|
const Grid& grid,
|
|
|
|
|
const std::vector<double>& centroids)
|
|
|
|
|
const std::vector<double>& centroids,
|
|
|
|
|
bool enableEnergy,
|
|
|
|
|
bool enableDiffusivity)
|
|
|
|
|
: eclState_(eclState)
|
|
|
|
|
, gridView_(gridView)
|
|
|
|
|
, cartMapper_(cartMapper)
|
|
|
|
|
, grid_(grid)
|
|
|
|
|
, centroids_(centroids)
|
|
|
|
|
, enableEnergy_(enableEnergy)
|
|
|
|
|
, enableDiffusivity_(enableDiffusivity)
|
|
|
|
|
{
|
|
|
|
|
const UnitSystem& unitSystem = eclState_.getDeckUnitSystem();
|
|
|
|
|
transmissibilityThreshold_ = unitSystem.parse("Transmissibility").getSIScaling() * 1e-6;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
transmissibility(unsigned elemIdx1, unsigned elemIdx2) const
|
|
|
|
|
{
|
|
|
|
|
return trans_.at(isId(elemIdx1, elemIdx2));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
transmissibilityBoundary(unsigned elemIdx, unsigned boundaryFaceIdx) const
|
|
|
|
|
{
|
|
|
|
|
return transBoundary_.at(std::make_pair(elemIdx, boundaryFaceIdx));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
thermalHalfTrans(unsigned insideElemIdx, unsigned outsideElemIdx) const
|
|
|
|
|
{
|
|
|
|
|
return thermalHalfTrans_->at(directionalIsId(insideElemIdx, outsideElemIdx));
|
|
|
|
|
return thermalHalfTrans_.at(directionalIsId(insideElemIdx, outsideElemIdx));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
thermalHalfTransBoundary(unsigned insideElemIdx, unsigned boundaryFaceIdx) const
|
|
|
|
|
{
|
|
|
|
|
return thermalHalfTransBoundary_.at(std::make_pair(insideElemIdx, boundaryFaceIdx));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
Scalar EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
diffusivity(unsigned elemIdx1, unsigned elemIdx2) const
|
|
|
|
|
{
|
|
|
|
|
if(diffusivity_->empty())
|
|
|
|
|
if (diffusivity_.empty())
|
|
|
|
|
return 0.0;
|
|
|
|
|
|
|
|
|
|
return diffusivity_->at(isId(elemIdx1, elemIdx2));
|
|
|
|
|
return diffusivity_.at(isId(elemIdx1, elemIdx2));
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
update(bool global)
|
|
|
|
|
{
|
|
|
|
|
const auto& cartDims = cartMapper_.cartesianDimensions();
|
|
|
|
|
@@ -149,7 +153,7 @@ update(bool global)
|
|
|
|
|
|
|
|
|
|
// get the ntg values, the ntg values are modified for the cells merged with minpv
|
|
|
|
|
const std::vector<double>& ntg = eclState_.fieldProps().get_double("NTG");
|
|
|
|
|
const bool updateDiffusivity = eclState_.getSimulationConfig().isDiffusive() && enableDiffusion;
|
|
|
|
|
const bool updateDiffusivity = eclState_.getSimulationConfig().isDiffusive() && enableDiffusivity_;
|
|
|
|
|
unsigned numElements = elemMapper.size();
|
|
|
|
|
|
|
|
|
|
extractPermeability_();
|
|
|
|
|
@@ -195,17 +199,17 @@ update(bool global)
|
|
|
|
|
transBoundary_.clear();
|
|
|
|
|
|
|
|
|
|
// if energy is enabled, let's do the same for the "thermal half transmissibilities"
|
|
|
|
|
if constexpr (enableEnergy) {
|
|
|
|
|
thermalHalfTrans_->clear();
|
|
|
|
|
thermalHalfTrans_->reserve(numElements*6*1.05);
|
|
|
|
|
if (enableEnergy_) {
|
|
|
|
|
thermalHalfTrans_.clear();
|
|
|
|
|
thermalHalfTrans_.reserve(numElements*6*1.05);
|
|
|
|
|
|
|
|
|
|
thermalHalfTransBoundary_.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if diffusion is enabled, let's do the same for the "diffusivity"
|
|
|
|
|
if (updateDiffusivity) {
|
|
|
|
|
diffusivity_->clear();
|
|
|
|
|
diffusivity_->reserve(numElements*3*1.05);
|
|
|
|
|
diffusivity_.clear();
|
|
|
|
|
diffusivity_.reserve(numElements*3*1.05);
|
|
|
|
|
extractPorosity_();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -215,7 +219,7 @@ update(bool global)
|
|
|
|
|
bool useSmallestMultiplier;
|
|
|
|
|
if (comm.rank() == 0) {
|
|
|
|
|
const auto& eclGrid = eclState_.getInputGrid();
|
|
|
|
|
useSmallestMultiplier = eclGrid.getMultzOption() == Opm::PinchMode::ModeEnum::ALL;
|
|
|
|
|
useSmallestMultiplier = eclGrid.getMultzOption() == PinchMode::ModeEnum::ALL;
|
|
|
|
|
}
|
|
|
|
|
if (global && comm.size() > 1) {
|
|
|
|
|
comm.broadcast(&useSmallestMultiplier, 1, 0);
|
|
|
|
|
@@ -260,7 +264,7 @@ update(bool global)
|
|
|
|
|
|
|
|
|
|
// for boundary intersections we also need to compute the thermal
|
|
|
|
|
// half transmissibilities
|
|
|
|
|
if constexpr (enableEnergy) {
|
|
|
|
|
if (enableEnergy_) {
|
|
|
|
|
Scalar transBoundaryEnergyIs;
|
|
|
|
|
computeHalfDiffusivity_(transBoundaryEnergyIs,
|
|
|
|
|
faceAreaNormal,
|
|
|
|
|
@@ -402,7 +406,7 @@ update(bool global)
|
|
|
|
|
trans_[isId(elemIdx, outsideElemIdx)] = trans;
|
|
|
|
|
|
|
|
|
|
// update the "thermal half transmissibility" for the intersection
|
|
|
|
|
if constexpr (enableEnergy) {
|
|
|
|
|
if (enableEnergy_) {
|
|
|
|
|
|
|
|
|
|
Scalar halfDiffusivity1;
|
|
|
|
|
Scalar halfDiffusivity2;
|
|
|
|
|
@@ -422,8 +426,8 @@ update(bool global)
|
|
|
|
|
axisCentroids),
|
|
|
|
|
1.0);
|
|
|
|
|
//TODO Add support for multipliers
|
|
|
|
|
(*thermalHalfTrans_)[directionalIsId(elemIdx, outsideElemIdx)] = halfDiffusivity1;
|
|
|
|
|
(*thermalHalfTrans_)[directionalIsId(outsideElemIdx, elemIdx)] = halfDiffusivity2;
|
|
|
|
|
thermalHalfTrans_[directionalIsId(elemIdx, outsideElemIdx)] = halfDiffusivity1;
|
|
|
|
|
thermalHalfTrans_[directionalIsId(outsideElemIdx, elemIdx)] = halfDiffusivity2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// update the "diffusive half transmissibility" for the intersection
|
|
|
|
|
@@ -459,7 +463,7 @@ update(bool global)
|
|
|
|
|
diffusivity = 1.0 / (1.0/halfDiffusivity1 + 1.0/halfDiffusivity2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(*diffusivity_)[isId(elemIdx, outsideElemIdx)] = diffusivity;
|
|
|
|
|
diffusivity_[isId(elemIdx, outsideElemIdx)] = diffusivity;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -487,8 +491,8 @@ update(bool global)
|
|
|
|
|
removeSmallNonCartesianTransmissibilities_();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
extractPermeability_()
|
|
|
|
|
{
|
|
|
|
|
unsigned numElem = gridView_.size(/*codim=*/0);
|
|
|
|
|
@@ -529,8 +533,8 @@ extractPermeability_()
|
|
|
|
|
"(The PERM{X,Y,Z} keywords are missing)");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
extractPorosity_()
|
|
|
|
|
{
|
|
|
|
|
// read the intrinsic porosity from the eclState. Note that all arrays
|
|
|
|
|
@@ -546,8 +550,8 @@ extractPorosity_()
|
|
|
|
|
"(The PORO keywords are missing)");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
removeSmallNonCartesianTransmissibilities_()
|
|
|
|
|
{
|
|
|
|
|
const auto& cartDims = cartMapper_.cartesianDimensions();
|
|
|
|
|
@@ -568,8 +572,8 @@ removeSmallNonCartesianTransmissibilities_()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
applyAllZMultipliers_(Scalar& trans,
|
|
|
|
|
unsigned insideFaceIdx,
|
|
|
|
|
unsigned outsideFaceIdx,
|
|
|
|
|
@@ -607,8 +611,8 @@ applyAllZMultipliers_(Scalar& trans,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
updateFromEclState_(bool global)
|
|
|
|
|
{
|
|
|
|
|
const FieldPropsManager* fp =
|
|
|
|
|
@@ -639,9 +643,9 @@ updateFromEclState_(bool global)
|
|
|
|
|
resetTransmissibilityFromArrays_(is_tran, trans);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
std::array<std::vector<double>,3>
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
createTransmissibilityArrays_(const std::array<bool,3>& is_tran)
|
|
|
|
|
{
|
|
|
|
|
const auto& cartDims = cartMapper_.cartesianDimensions();
|
|
|
|
|
@@ -706,8 +710,8 @@ createTransmissibilityArrays_(const std::array<bool,3>& is_tran)
|
|
|
|
|
return trans;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
resetTransmissibilityFromArrays_(const std::array<bool,3>& is_tran,
|
|
|
|
|
const std::array<std::vector<double>,3>& trans)
|
|
|
|
|
{
|
|
|
|
|
@@ -764,9 +768,9 @@ resetTransmissibilityFromArrays_(const std::array<bool,3>& is_tran,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
template<class Intersection>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
computeFaceProperties(const Intersection& intersection,
|
|
|
|
|
const int,
|
|
|
|
|
const int,
|
|
|
|
|
@@ -787,9 +791,9 @@ computeFaceProperties(const Intersection& intersection,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
template<class Intersection>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
computeFaceProperties(const Intersection& intersection,
|
|
|
|
|
const int insideElemIdx,
|
|
|
|
|
const int insideFaceIdx,
|
|
|
|
|
@@ -806,9 +810,9 @@ computeFaceProperties(const Intersection& intersection,
|
|
|
|
|
faceAreaNormal = grid_.faceAreaNormalEcl(faceIdx);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
std::tuple<std::vector<NNCdata>, std::vector<NNCdata>>
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
applyNncToGridTrans_(const std::vector<int>& cartesianToCompressed)
|
|
|
|
|
{
|
|
|
|
|
// First scale NNCs with EDITNNC.
|
|
|
|
|
@@ -857,8 +861,8 @@ applyNncToGridTrans_(const std::vector<int>& cartesianToCompressed)
|
|
|
|
|
return std::make_tuple(processedNnc, unprocessedNnc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
applyEditNncToGridTrans_(const std::vector<int>& globalToLocal)
|
|
|
|
|
{
|
|
|
|
|
const auto& nnc_input = eclState_.getInputNNC();
|
|
|
|
|
@@ -920,8 +924,8 @@ applyEditNncToGridTrans_(const std::vector<int>& globalToLocal)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
computeHalfTrans_(Scalar& halfTrans,
|
|
|
|
|
const DimVector& areaNormal,
|
|
|
|
|
int faceIdx, // in the reference element that contains the intersection
|
|
|
|
|
@@ -941,8 +945,8 @@ computeHalfTrans_(Scalar& halfTrans,
|
|
|
|
|
halfTrans /= distance.two_norm2();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
computeHalfDiffusivity_(Scalar& halfDiff,
|
|
|
|
|
const DimVector& areaNormal,
|
|
|
|
|
const DimVector& distance,
|
|
|
|
|
@@ -957,9 +961,9 @@ computeHalfDiffusivity_(Scalar& halfDiff,
|
|
|
|
|
halfDiff /= distance.two_norm2();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
typename EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::DimVector
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
typename EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::DimVector
|
|
|
|
|
EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
distanceVector_(const DimVector& center,
|
|
|
|
|
int faceIdx, // in the reference element that contains the intersection
|
|
|
|
|
unsigned elemIdx,
|
|
|
|
|
@@ -974,8 +978,8 @@ distanceVector_(const DimVector& center,
|
|
|
|
|
return x;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
applyMultipliers_(Scalar& trans,
|
|
|
|
|
unsigned faceIdx,
|
|
|
|
|
unsigned cartElemIdx,
|
|
|
|
|
@@ -1008,8 +1012,8 @@ applyMultipliers_(Scalar& trans,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar, bool enableEnergy, bool enableDiffusion>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar,enableEnergy,enableDiffusion>::
|
|
|
|
|
template<class Grid, class GridView, class ElementMapper, class Scalar>
|
|
|
|
|
void EclTransmissibility<Grid,GridView,ElementMapper,Scalar>::
|
|
|
|
|
applyNtg_(Scalar& trans,
|
|
|
|
|
unsigned faceIdx,
|
|
|
|
|
unsigned elemIdx,
|
|
|
|
|
@@ -1041,35 +1045,17 @@ applyNtg_(Scalar& trans,
|
|
|
|
|
template class EclTransmissibility<Dune::CpGrid,
|
|
|
|
|
Dune::GridView<Dune::Fem::GridPart2GridViewTraits<Dune::Fem::AdaptiveLeafGridPart<Dune::CpGrid, Dune::PartitionIteratorType(4), false>>>,
|
|
|
|
|
Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::Fem::GridPart2GridViewTraits<Dune::Fem::AdaptiveLeafGridPart<Dune::CpGrid, Dune::PartitionIteratorType(4), false>>>>,
|
|
|
|
|
double,
|
|
|
|
|
true,
|
|
|
|
|
true>;
|
|
|
|
|
template class EclTransmissibility<Dune::CpGrid,
|
|
|
|
|
Dune::GridView<Dune::Fem::GridPart2GridViewTraits<Dune::Fem::AdaptiveLeafGridPart<Dune::CpGrid, Dune::PartitionIteratorType(4), false>>>,
|
|
|
|
|
Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::Fem::GridPart2GridViewTraits<Dune::Fem::AdaptiveLeafGridPart<Dune::CpGrid, Dune::PartitionIteratorType(4), false>>>>,
|
|
|
|
|
double,
|
|
|
|
|
false,
|
|
|
|
|
true>;
|
|
|
|
|
double>;
|
|
|
|
|
#else
|
|
|
|
|
template class EclTransmissibility<Dune::CpGrid,
|
|
|
|
|
Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::CpGrid>>,
|
|
|
|
|
Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::CpGrid>>, Dune::Impl::MCMGFailLayout>,
|
|
|
|
|
double,
|
|
|
|
|
true,
|
|
|
|
|
true>;
|
|
|
|
|
template class EclTransmissibility<Dune::CpGrid,
|
|
|
|
|
Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::CpGrid>>,
|
|
|
|
|
Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::DefaultLeafGridViewTraits<Dune::CpGrid>>, Dune::Impl::MCMGFailLayout>,
|
|
|
|
|
double,
|
|
|
|
|
false,
|
|
|
|
|
true>;
|
|
|
|
|
double>;
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
template class EclTransmissibility<Dune::PolyhedralGrid<3,3,double>,
|
|
|
|
|
Dune::GridView<Dune::PolyhedralGridViewTraits<3, 3, double, Dune::PartitionIteratorType(4)>>,
|
|
|
|
|
Dune::MultipleCodimMultipleGeomTypeMapper<Dune::GridView<Dune::PolyhedralGridViewTraits<3,3,double,Dune::PartitionIteratorType(4)>>, Dune::Impl::MCMGFailLayout>,
|
|
|
|
|
double,
|
|
|
|
|
false,
|
|
|
|
|
true>;
|
|
|
|
|
double>;
|
|
|
|
|
|
|
|
|
|
} // namespace Opm
|
|
|
|
|
|