remove template parameters for enableEnergy/Diffusion in transmissibility

- the diffusion one is basically done on runtime anyways
- the energy one gives some small code elimination gains
  however, it complicates the writing of downstream templates.
This commit is contained in:
Arne Morten Kvarving
2021-05-15 13:35:21 +02:00
parent 91dae1aa6f
commit 86fc165af6
5 changed files with 88 additions and 102 deletions

View File

@@ -50,7 +50,7 @@ struct EclCpGridVanguard {
// declare the properties // declare the properties
template<class TypeTag> template<class TypeTag>
struct Vanguard<TypeTag, TTag::EclCpGridVanguard> { struct Vanguard<TypeTag, TTag::EclCpGridVanguard> {
using type = Opm::EclCpGridVanguard<TypeTag>; using type = EclCpGridVanguard<TypeTag>;
}; };
template<class TypeTag> template<class TypeTag>
struct Grid<TypeTag, TTag::EclCpGridVanguard> { struct Grid<TypeTag, TTag::EclCpGridVanguard> {
@@ -89,9 +89,8 @@ public:
using Grid = GetPropType<TypeTag, Properties::Grid>; using Grid = GetPropType<TypeTag, Properties::Grid>;
using EquilGrid = GetPropType<TypeTag, Properties::EquilGrid>; using EquilGrid = GetPropType<TypeTag, Properties::EquilGrid>;
using GridView = GetPropType<TypeTag, Properties::GridView>; using GridView = GetPropType<TypeTag, Properties::GridView>;
using TransmissibilityType = EclTransmissibility<Grid, GridView, ElementMapper, Scalar, using TransmissibilityType = EclTransmissibility<Grid, GridView, ElementMapper, Scalar>;
getPropValue<TypeTag, Properties::EnableEnergy>(),
getPropValue<TypeTag, Properties::EnableDiffusion>()>;
private: private:
typedef Dune::CartesianIndexMapper<Grid> CartesianIndexMapper; typedef Dune::CartesianIndexMapper<Grid> CartesianIndexMapper;
using Element = typename GridView::template Codim<0>::Entity; using Element = typename GridView::template Codim<0>::Entity;
@@ -163,7 +162,9 @@ protected:
this->gridView(), this->gridView(),
this->cartesianIndexMapper(), this->cartesianIndexMapper(),
this->grid(), this->grid(),
this->cellCentroids())); this->cellCentroids(),
getPropValue<TypeTag, Properties::EnableEnergy>(),
getPropValue<TypeTag, Properties::EnableDiffusion>()));
globalTrans_->update(false); globalTrans_->update(false);
} }

View File

@@ -86,9 +86,7 @@ public:
using Grid = GetPropType<TypeTag, Properties::Grid>; using Grid = GetPropType<TypeTag, Properties::Grid>;
using EquilGrid = GetPropType<TypeTag, Properties::EquilGrid>; using EquilGrid = GetPropType<TypeTag, Properties::EquilGrid>;
using GridView = GetPropType<TypeTag, Properties::GridView>; using GridView = GetPropType<TypeTag, Properties::GridView>;
using TransmissibilityType = EclTransmissibility<Grid, GridView, ElementMapper, Scalar, using TransmissibilityType = EclTransmissibility<Grid, GridView, ElementMapper, Scalar>;
getPropValue<TypeTag, Properties::EnableEnergy>(),
getPropValue<TypeTag, Properties::EnableDiffusion>()>;
private: private:
typedef Grid* GridPointer; typedef Grid* GridPointer;

View File

@@ -819,7 +819,9 @@ public:
simulator.vanguard().gridView(), simulator.vanguard().gridView(),
simulator.vanguard().cartesianIndexMapper(), simulator.vanguard().cartesianIndexMapper(),
simulator.vanguard().grid(), simulator.vanguard().grid(),
simulator.vanguard().cellCentroids()) simulator.vanguard().cellCentroids(),
enableEnergy,
enableDiffusion)
, thresholdPressures_(simulator) , thresholdPressures_(simulator)
, wellModel_(simulator) , wellModel_(simulator)
, aquiferModel_(simulator) , aquiferModel_(simulator)

View File

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

View File

@@ -30,8 +30,6 @@
#include <opm/grid/common/CartesianIndexMapper.hpp> #include <opm/grid/common/CartesianIndexMapper.hpp>
#include <opm/material/common/ConditionalStorage.hpp>
#include <dune/common/fvector.hh> #include <dune/common/fvector.hh>
#include <dune/common/fmatrix.hh> #include <dune/common/fmatrix.hh>
@@ -47,8 +45,7 @@ class EclipseState;
struct NNCdata; struct NNCdata;
class TransMult; class TransMult;
template<class Grid, class GridView, class ElementMapper, template<class Grid, class GridView, class ElementMapper, class Scalar>
class Scalar, bool enableEnergy, bool enableDiffusion>
class EclTransmissibility { class EclTransmissibility {
// Grid and world dimension // Grid and world dimension
enum { dimWorld = GridView::dimensionworld }; enum { dimWorld = GridView::dimensionworld };
@@ -61,7 +58,9 @@ public:
const GridView& gridView, const GridView& gridView,
const Dune::CartesianIndexMapper<Grid>& cartMapper, const Dune::CartesianIndexMapper<Grid>& cartMapper,
const Grid& grid, const Grid& grid,
const std::vector<double>& centroids); const std::vector<double>& centroids,
bool enableEnergy,
bool enableDiffusivity);
/*! /*!
* \brief Return the permeability for an element. * \brief Return the permeability for an element.
@@ -241,10 +240,10 @@ protected:
Scalar transmissibilityThreshold_; Scalar transmissibilityThreshold_;
std::map<std::pair<unsigned, unsigned>, Scalar> transBoundary_; std::map<std::pair<unsigned, unsigned>, Scalar> transBoundary_;
std::map<std::pair<unsigned, unsigned>, Scalar> thermalHalfTransBoundary_; std::map<std::pair<unsigned, unsigned>, Scalar> thermalHalfTransBoundary_;
Opm::ConditionalStorage<enableEnergy, bool enableEnergy_;
std::unordered_map<std::uint64_t, Scalar> > thermalHalfTrans_; bool enableDiffusivity_;
Opm::ConditionalStorage<enableDiffusion, std::unordered_map<std::uint64_t, Scalar> thermalHalfTrans_;
std::unordered_map<std::uint64_t, Scalar> > diffusivity_; std::unordered_map<std::uint64_t, Scalar> diffusivity_;
}; };
} // namespace Opm } // namespace Opm