Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions opm/common/utility/VectorWithDefaultAllocator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

#ifndef OPM_COMMON_VECTOR_WITH_DEFAULT_ALLOCATOR_HPP
#define OPM_COMMON_VECTOR_WITH_DEFAULT_ALLOCATOR_HPP

#include <vector>
namespace Opm
{
// NVCC being weird about std::vector, so we need this workaround.
Expand Down
169 changes: 129 additions & 40 deletions opm/material/fluidmatrixinteractions/EclMaterialLawManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,14 +37,29 @@

namespace Opm {

template<class TraitsT>
EclMaterialLawManager<TraitsT>::EclMaterialLawManager() = default;

template<class TraitsT>
EclMaterialLawManager<TraitsT>::~EclMaterialLawManager() = default;

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::EclMaterialLawManager() = default;

template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::~EclMaterialLawManager() = default;

template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
initFromState(const EclipseState& eclState)
{
// get the number of saturation regions and the number of cells in the deck
Expand Down Expand Up @@ -134,10 +149,15 @@ initFromState(const EclipseState& eclState)
}
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
initParamsForElements(const EclipseState& eclState, size_t numCompressedElems,
const std::function<std::vector<int>(const FieldPropsManager&, const std::string&, bool)>& fieldPropIntOnLeafAssigner,
const std::function<Storage<int>(const FieldPropsManager&, const std::string&, bool)>& fieldPropIntOnLeafAssigner,
const std::function<unsigned(unsigned)>& lookupIdxOnLevelZeroAssigner)
{
InitParams initParams {*this, eclState, numCompressedElems};
Expand All @@ -146,8 +166,13 @@ initParamsForElements(const EclipseState& eclState, size_t numCompressedElems,

// TODO: Better (proper?) handling of mixed wettability systems - see ecl kw OPTIONS switch 74
// Note: Without OPTIONS[74] the negative part of the Pcow curve is not scaled
template<class TraitsT>
std::pair<typename TraitsT::Scalar, bool> EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
std::pair<typename Traits::Scalar, bool> EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
applySwatinit(unsigned elemIdx,
Scalar pcow,
Scalar Sw)
Expand Down Expand Up @@ -220,9 +245,14 @@ applySwatinit(unsigned elemIdx,
return {Sw, newSwatInit};
}

template<class TraitsT>
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void
EclMaterialLawManager<TraitsT>::applyRestartSwatInit(const unsigned elemIdx,
EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::applyRestartSwatInit(const unsigned elemIdx,
const Scalar maxPcow)
{
// Maximum capillary pressure adjusted from SWATINIT data.
Expand All @@ -238,9 +268,14 @@ EclMaterialLawManager<TraitsT>::applyRestartSwatInit(const unsigned elemIdx,
EclTwoPhaseSystemType::OilWater);
}

template<class TraitsT>
const typename EclMaterialLawManager<TraitsT>::MaterialLawParams&
EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
const typename EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::MaterialLawParams&
EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
connectionMaterialLawParams(unsigned satRegionIdx, unsigned elemIdx) const
{
MaterialLawParams& mlp = const_cast<MaterialLawParams&>(materialLawParams_[elemIdx]);
Expand Down Expand Up @@ -328,12 +363,17 @@ connectionMaterialLawParams(unsigned satRegionIdx, unsigned elemIdx) const
return mlp;
}

template<class TraitsT>
int EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
int EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
getKrnumSatIdx(unsigned elemIdx, FaceDir::DirEnum facedir) const
{
using Dir = FaceDir::DirEnum;
const std::vector<int>* array = nullptr;
const Storage<int>* array = nullptr;
switch(facedir) {
case Dir::XPlus:
array = &krnumXArray_;
Expand All @@ -355,8 +395,13 @@ getKrnumSatIdx(unsigned elemIdx, FaceDir::DirEnum facedir) const
}
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
oilWaterHysteresisParams(Scalar& soMax,
Scalar& swMax,
Scalar& swMin,
Expand All @@ -369,8 +414,13 @@ oilWaterHysteresisParams(Scalar& soMax,
MaterialLaw::oilWaterHysteresisParams(soMax, swMax, swMin, params);
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
setOilWaterHysteresisParams(const Scalar& soMax,
const Scalar& swMax,
const Scalar& swMin,
Expand All @@ -383,8 +433,13 @@ setOilWaterHysteresisParams(const Scalar& soMax,
MaterialLaw::setOilWaterHysteresisParams(soMax, swMax, swMin, params);
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
gasOilHysteresisParams(Scalar& sgmax,
Scalar& shmax,
Scalar& somin,
Expand All @@ -397,8 +452,13 @@ gasOilHysteresisParams(Scalar& sgmax,
MaterialLaw::gasOilHysteresisParams(sgmax, shmax, somin, params);
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
setGasOilHysteresisParams(const Scalar& sgmax,
const Scalar& shmax,
const Scalar& somin,
Expand All @@ -411,11 +471,17 @@ setGasOilHysteresisParams(const Scalar& sgmax,
MaterialLaw::setGasOilHysteresisParams(sgmax, shmax, somin, params);
}

template<class TraitsT>
EclEpsScalingPoints<typename TraitsT::Scalar>&
EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
EclEpsScalingPoints<typename Traits::Scalar>&
EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
oilWaterScaledEpsPointsDrainage(unsigned elemIdx)
{
#if !HAVE_CUDA
auto& materialParams = materialLawParams_[elemIdx];
switch (materialParams.approach()) {
case EclMultiplexerApproach::Stone1: {
Expand All @@ -440,10 +506,18 @@ oilWaterScaledEpsPointsDrainage(unsigned elemIdx)
default:
throw std::logic_error("Enum value for material approach unknown!");
}
#else
OPM_THROW(NotImplementedError, "CUDA support is not available");
#endif
}

template<class TraitsT>
const typename EclMaterialLawManager<TraitsT>::MaterialLawParams& EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
const typename EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::MaterialLawParams& EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
materialLawParamsFunc_(unsigned elemIdx, FaceDir::DirEnum facedir) const
{
using Dir = FaceDir::DirEnum;
Expand All @@ -467,8 +541,13 @@ materialLawParamsFunc_(unsigned elemIdx, FaceDir::DirEnum facedir) const
}
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
readGlobalEpsOptions_(const EclipseState& eclState)
{
oilWaterEclEpsConfig_ = std::make_shared<EclEpsConfig>();
Expand All @@ -477,16 +556,26 @@ readGlobalEpsOptions_(const EclipseState& eclState)
enableEndPointScaling_ = eclState.getTableManager().hasTables("ENKRVD");
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
readGlobalHysteresisOptions_(const EclipseState& state)
{
hysteresisConfig_ = std::make_shared<EclHysteresisConfig>();
hysteresisConfig_->initFromState(state.runspec());
}

template<class TraitsT>
void EclMaterialLawManager<TraitsT>::
template<
class Traits,
template<class> class Storage,
template<typename> typename SharedPtr,
template<typename, typename...> typename UniquePtr
>
void EclMaterialLawManager<Traits, Storage, SharedPtr, UniquePtr>::
readGlobalThreePhaseOptions_(const Runspec& runspec)
{
bool gasEnabled = runspec.phases().active(Phase::GAS);
Expand Down
Loading