diff --git a/opm/material/fluidmatrixinteractions/EclTwoPhaseMaterialParams.hpp b/opm/material/fluidmatrixinteractions/EclTwoPhaseMaterialParams.hpp index 5c0255826b8..a6376576e57 100644 --- a/opm/material/fluidmatrixinteractions/EclTwoPhaseMaterialParams.hpp +++ b/opm/material/fluidmatrixinteractions/EclTwoPhaseMaterialParams.hpp @@ -29,15 +29,13 @@ #include +#include #include -namespace Opm { +namespace Opm +{ -enum class EclTwoPhaseApproach { - GasOil, - OilWater, - GasWater -}; +enum class EclTwoPhaseApproach { GasOil, OilWater, GasWater }; /*! * \brief Implementation for the parameters required by the material law for two-phase @@ -45,87 +43,128 @@ enum class EclTwoPhaseApproach { * * Essentially, this class just stores the two parameter objects for * the twophase capillary pressure laws. + * + * The \c StoragePolicy template parameter selects how the per-sub-law + * parameter objects are stored. By default they are heap-allocated and + * referenced through std::shared_ptr; instantiations targeting the GPU may + * pass an inline-storage policy such as \c Opm::gpuistl::ValueAsPointer so + * that the resulting object is trivially copyable to the device. */ -template +template class StoragePolicy = std::shared_ptr> class EclTwoPhaseMaterialParams : public EnsureFinalized { using Scalar = typename Traits::Scalar; enum { numPhases = 3 }; + public: - using EnsureFinalized :: finalize; + using EnsureFinalized::finalize; using GasOilParams = GasOilParamsT; using OilWaterParams = OilWaterParamsT; using GasWaterParams = GasWaterParamsT; + using GasOilParamsStorage = StoragePolicy; + using OilWaterParamsStorage = StoragePolicy; + using GasWaterParamsStorage = StoragePolicy; + /*! * \brief The default constructor. */ - EclTwoPhaseMaterialParams() + OPM_HOST_DEVICE EclTwoPhaseMaterialParams() = default; + + OPM_HOST_DEVICE void setApproach(EclTwoPhaseApproach newApproach) { + approach_ = newApproach; } - void setApproach(EclTwoPhaseApproach newApproach) - { approach_ = newApproach; } - - EclTwoPhaseApproach approach() const - { return approach_; } + OPM_HOST_DEVICE EclTwoPhaseApproach approach() const + { + return approach_; + } /*! * \brief The parameter object for the gas-oil twophase law. */ - const GasOilParams& gasOilParams() const - { EnsureFinalized::check(); return *gasOilParams_; } + OPM_HOST_DEVICE const GasOilParams& gasOilParams() const + { + EnsureFinalized::check(); + return *gasOilParams_; + } /*! * \brief The parameter object for the gas-oil twophase law. */ - GasOilParams& gasOilParams() - { EnsureFinalized::check(); return *gasOilParams_; } + OPM_HOST_DEVICE GasOilParams& gasOilParams() + { + EnsureFinalized::check(); + return *gasOilParams_; + } /*! * \brief Set the parameter object for the gas-oil twophase law. */ - void setGasOilParams(std::shared_ptr val) - { gasOilParams_ = val; } + OPM_HOST_DEVICE void setGasOilParams(GasOilParamsStorage val) + { + gasOilParams_ = val; + } /*! * \brief The parameter object for the oil-water twophase law. */ - const OilWaterParams& oilWaterParams() const - { EnsureFinalized::check(); return *oilWaterParams_; } + OPM_HOST_DEVICE const OilWaterParams& oilWaterParams() const + { + EnsureFinalized::check(); + return *oilWaterParams_; + } /*! * \brief The parameter object for the oil-water twophase law. */ - OilWaterParams& oilWaterParams() - { EnsureFinalized::check(); return *oilWaterParams_; } + OPM_HOST_DEVICE OilWaterParams& oilWaterParams() + { + EnsureFinalized::check(); + return *oilWaterParams_; + } /*! * \brief Set the parameter object for the oil-water twophase law. */ - void setOilWaterParams(std::shared_ptr val) - { oilWaterParams_ = val; } + OPM_HOST_DEVICE void setOilWaterParams(OilWaterParamsStorage val) + { + oilWaterParams_ = val; + } - /*! + /*! * \brief The parameter object for the gas-water twophase law. */ - const GasWaterParams& gasWaterParams() const - { EnsureFinalized::check(); return *gasWaterParams_; } + OPM_HOST_DEVICE const GasWaterParams& gasWaterParams() const + { + EnsureFinalized::check(); + return *gasWaterParams_; + } /*! * \brief The parameter object for the gas-water twophase law. */ - GasWaterParams& gasWaterParams() - { EnsureFinalized::check(); return *gasWaterParams_; } + OPM_HOST_DEVICE GasWaterParams& gasWaterParams() + { + EnsureFinalized::check(); + return *gasWaterParams_; + } /*! * \brief Set the parameter object for the gas-water twophase law. */ - void setGasWaterParams(std::shared_ptr val) - { gasWaterParams_ = val; } + OPM_HOST_DEVICE void setGasWaterParams(GasWaterParamsStorage val) + { + gasWaterParams_ = val; + } - template + template void serializeOp(Serializer& serializer) { // This is for restart serialization. @@ -135,14 +174,16 @@ class EclTwoPhaseMaterialParams : public EnsureFinalized serializer(*gasWaterParams_); } - void setSwl(Scalar) {} + void setSwl(Scalar) + { + } private: - EclTwoPhaseApproach approach_{EclTwoPhaseApproach::GasOil}; + EclTwoPhaseApproach approach_ {EclTwoPhaseApproach::GasOil}; - std::shared_ptr gasOilParams_; - std::shared_ptr oilWaterParams_; - std::shared_ptr gasWaterParams_; + GasOilParamsStorage gasOilParams_ {}; + OilWaterParamsStorage oilWaterParams_ {}; + GasWaterParamsStorage gasWaterParams_ {}; }; } // namespace Opm diff --git a/opm/material/thermal/EclThconrLawParams.hpp b/opm/material/thermal/EclThconrLawParams.hpp index 93e66a1c962..a1ef483301a 100644 --- a/opm/material/thermal/EclThconrLawParams.hpp +++ b/opm/material/thermal/EclThconrLawParams.hpp @@ -27,6 +27,7 @@ #ifndef OPM_ECL_THCONR_LAW_PARAMS_HPP #define OPM_ECL_THCONR_LAW_PARAMS_HPP +#include #include namespace Opm { @@ -41,9 +42,9 @@ class EclThconrLawParams : public EnsureFinalized public: using Scalar = ScalarT; - EclThconrLawParams(const EclThconrLawParams&) = default; + OPM_HOST_DEVICE EclThconrLawParams(const EclThconrLawParams&) = default; - EclThconrLawParams() + OPM_HOST_DEVICE EclThconrLawParams() { } /*! @@ -55,7 +56,7 @@ class EclThconrLawParams : public EnsureFinalized /*! * \brief The total thermal conductivity [J/m^2 / (K/m)] of at Sg = 0 */ - Scalar referenceTotalThermalConductivity() const + OPM_HOST_DEVICE Scalar referenceTotalThermalConductivity() const { EnsureFinalized::check(); return referenceTotalThermalConductivity_; } /*! @@ -67,7 +68,7 @@ class EclThconrLawParams : public EnsureFinalized /*! * \brief The gas saturation dependence of thermal conductivity [-] */ - Scalar dTotalThermalConductivity_dSg() const + OPM_HOST_DEVICE Scalar dTotalThermalConductivity_dSg() const { EnsureFinalized::check(); return dTotalThermalConductivity_dSg_; } private: