Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT > Class Template Reference

Minimal, GPU-compatible problem class. More...

#include <GpuFlowProblem.hpp>

Classes

struct  ModelView
 Trivial nested model() helper that satisfies the problem.model().linearizer().getLinearizationType() chain that BlackOilIntensiveQuantities walks. More...
 

Public Types

using Scalar = ScalarT
 
using EclMaterialLawManager = MaterialLawManagerT
 
using MaterialLawParams = typename EclMaterialLawManager::MaterialLawParams
 
using EclThermalLawManager = ThermalLawManagerT
 
using SolidEnergyLawParams = typename EclThermalLawManager::SolidEnergyLawParams
 
using ThermalConductionLawParams = typename EclThermalLawManager::ThermalConductionLawParams
 

Public Member Functions

 GpuFlowProblem ()=default
 
 GpuFlowProblem (EclMaterialLawManager materialLawManager, Storage< Scalar > porosity, Storage< Scalar > rockCompressibility, Storage< Scalar > rockReferencePressure, Storage< Scalar > maxOilSaturation, Storage< Scalar > maxOilVaporizationFactor, Storage< Scalar > maxGasDissolutionFactor, EclThermalLawManager thermalLawManager, Storage< Scalar > rockFraction, Storage< int > pvtRegionIndex, bool usesDefaultRockCompaction)
 
template<class CpuProblem , class StS = Storage<Scalar>, std::enable_if_t< std::is_same_v< StS, ::Opm::VectorWithDefaultAllocator< Scalar > >, int > = 0>
 GpuFlowProblem (const CpuProblem &cpu)
 Construct from any CPU FlowProblem (or FlowProblemBlackoil). More...
 
template<class CpuProblem , class StS = Storage<Scalar>, std::enable_if_t< std::is_same_v< StS, ::Opm::gpuistl::GpuBuffer< Scalar > >, int > = 0>
 GpuFlowProblem (const CpuProblem &cpu)
 Construct directly into device-resident GpuBuffer storage from any CPU FlowProblem (or FlowProblemBlackoil). More...
 
OPM_HOST_DEVICE ModelView model () const
 
OPM_HOST_DEVICE int satnumRegionIndex (std::size_t elemIdx) const
 
OPM_HOST_DEVICE MaterialLawParams materialLawParams (std::size_t elemIdx) const
 
OPM_HOST_DEVICE Scalar rockCompressibility (std::size_t elemIdx) const
 
OPM_HOST_DEVICE Scalar rockReferencePressure (std::size_t elemIdx) const
 
OPM_HOST_DEVICE Scalar porosity (std::size_t elemIdx, unsigned) const
 
OPM_HOST_DEVICE Scalar maxOilVaporizationFactor (unsigned, std::size_t elemIdx) const
 
OPM_HOST_DEVICE Scalar maxGasDissolutionFactor (unsigned, std::size_t elemIdx) const
 
OPM_HOST_DEVICE Scalar maxOilSaturation (std::size_t elemIdx) const
 
OPM_HOST_DEVICE unsigned pvtRegionIndex (std::size_t elemIdx) const
 Per-cell PVT region index. Returns 0 when the GpuFlowProblem instantiation has no thermal support. More...
 
OPM_HOST_DEVICE Scalar rockFraction (std::size_t elemIdx, unsigned) const
 Per-cell rock fraction (1 - effective porosity). Returns 0 when the GpuFlowProblem instantiation has no thermal support. More...
 
OPM_HOST_DEVICE SolidEnergyLawParams solidEnergyLawParams (std::size_t elemIdx, unsigned) const
 Solid-energy law parameters for a single cell. Forwards to the embedded thermal-law manager. More...
 
OPM_HOST_DEVICE ThermalConductionLawParams thermalConductionLawParams (std::size_t elemIdx, unsigned) const
 Thermal-conduction law parameters for a single cell. Forwards to the embedded thermal-law manager. More...
 
template<class Evaluation >
OPM_HOST_DEVICE Evaluation rockCompPoroMultiplier (const auto &, std::size_t) const
 Default rock-pore-volume multiplier (1 if no compressibility). More...
 
template<class Evaluation >
OPM_HOST_DEVICE Evaluation rockCompTransMultiplier (const auto &, std::size_t) const
 Default rock-trans multiplier (1 if no compressibility). More...
 
template<class FluidState , class... Args>
OPM_HOST_DEVICE void updateRelperms (auto &mobility, auto &, FluidState &fluidState, unsigned globalSpaceIdx) const
 Update the relative permeabilities of all phases for a single cell, in the same way as the CPU FlowProblem does. More...
 
Direct accessors for serialization to the GPU.
const EclMaterialLawManager & materialLawManager () const
 
EclMaterialLawManager & materialLawManager ()
 
const Storage< Scalar > & porosityStorage () const
 
Storage< Scalar > & porosityStorage ()
 
const Storage< Scalar > & rockCompressibilityStorage () const
 
Storage< Scalar > & rockCompressibilityStorage ()
 
const Storage< Scalar > & rockReferencePressureStorage () const
 
Storage< Scalar > & rockReferencePressureStorage ()
 
const Storage< Scalar > & maxOilSaturationStorage () const
 
Storage< Scalar > & maxOilSaturationStorage ()
 
const Storage< Scalar > & maxOilVaporizationFactorStorage () const
 
Storage< Scalar > & maxOilVaporizationFactorStorage ()
 
const Storage< Scalar > & maxGasDissolutionFactorStorage () const
 
Storage< Scalar > & maxGasDissolutionFactorStorage ()
 
const EclThermalLawManager & thermalLawManager () const
 
EclThermalLawManager & thermalLawManager ()
 
const Storage< Scalar > & rockFractionStorage () const
 
Storage< Scalar > & rockFractionStorage ()
 
const Storage< int > & pvtRegionIndexStorage () const
 
Storage< int > & pvtRegionIndexStorage ()
 

Static Public Attributes

static constexpr bool hasThermal = !std::is_same_v<typename EclThermalLawManager::FluidSystem, void>
 True iff the thermal-law manager carries a real fluid-system tag (anything other than void) and therefore the thermal-extraction code paths should be enabled. More...
 

Detailed Description

template<class ScalarT, class MaterialLawManagerT, template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
class Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >

Minimal, GPU-compatible problem class.

Provides exactly the interface required by BlackOilIntensiveQuantities to compute a primary-variable update on the device. All cell-wise rock / fluid bookkeeping data is kept in templated Storage so the same class can be used as a CPU object (default std::vector) or as a GPU object (GpuBuffer / GpuView).

The material law manager is held by value (so it is trivially copyable into a CUDA kernel together with the rest of the problem state).

Template Parameters
ScalarTFloating point type used for rock data.
MaterialLawManagerTGPU material law manager type (e.g. Opm::EclMaterialLaw::GpuManager).
StorageContainer template used for per-cell data.
ThermalLawManagerTGPU thermal-law manager type (e.g. Opm::EclThermalLaw::GpuManager). Defaults to NoThermalLawManager, a no-op stub used by non-thermal callers.

Member Typedef Documentation

◆ EclMaterialLawManager

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
using Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::EclMaterialLawManager = MaterialLawManagerT

◆ EclThermalLawManager

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
using Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::EclThermalLawManager = ThermalLawManagerT

◆ MaterialLawParams

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
using Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::MaterialLawParams = typename EclMaterialLawManager::MaterialLawParams

◆ Scalar

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
using Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::Scalar = ScalarT

◆ SolidEnergyLawParams

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
using Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::SolidEnergyLawParams = typename EclThermalLawManager::SolidEnergyLawParams

◆ ThermalConductionLawParams

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
using Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::ThermalConductionLawParams = typename EclThermalLawManager::ThermalConductionLawParams

Constructor & Destructor Documentation

◆ GpuFlowProblem() [1/4]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::GpuFlowProblem ( )
default

◆ GpuFlowProblem() [2/4]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::GpuFlowProblem ( EclMaterialLawManager  materialLawManager,
Storage< Scalar >  porosity,
Storage< Scalar >  rockCompressibility,
Storage< Scalar >  rockReferencePressure,
Storage< Scalar >  maxOilSaturation,
Storage< Scalar >  maxOilVaporizationFactor,
Storage< Scalar >  maxGasDissolutionFactor,
EclThermalLawManager  thermalLawManager,
Storage< Scalar >  rockFraction,
Storage< int >  pvtRegionIndex,
bool  usesDefaultRockCompaction 
)
inline

◆ GpuFlowProblem() [3/4]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
template<class CpuProblem , class StS = Storage<Scalar>, std::enable_if_t< std::is_same_v< StS, ::Opm::VectorWithDefaultAllocator< Scalar > >, int > = 0>
Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::GpuFlowProblem ( const CpuProblem &  cpu)
inlineexplicit

Construct from any CPU FlowProblem (or FlowProblemBlackoil).

Iterates over all grid degrees of freedom and copies the rock / mixing-control fields used by BlackOilIntensiveQuantities into local vectors. The inner material-law manager is constructed from *cpu.materialLawManager(), so the GPU manager type held by this problem must in turn be constructible from Opm::EclMaterialLaw::Manager (i.e. use CPU vector storage and piecewise-linear vector-storage two-phase laws).

Only enabled when this problem itself uses CPU vector storage.

References Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::hasThermal.

◆ GpuFlowProblem() [4/4]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
template<class CpuProblem , class StS = Storage<Scalar>, std::enable_if_t< std::is_same_v< StS, ::Opm::gpuistl::GpuBuffer< Scalar > >, int > = 0>
Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::GpuFlowProblem ( const CpuProblem &  cpu)
inlineexplicit

Construct directly into device-resident GpuBuffer storage from any CPU FlowProblem (or FlowProblemBlackoil).

Internally builds the per-cell rock/mixing data on the host as std::vector<Scalar>, then uploads each as a single GpuBuffer<Scalar>. The inner GPU material law manager is constructed from *cpu.materialLawManager() via its own GpuBuffer-storage constructor, which uploads the per-cell sample arrays.

Only enabled when this problem itself uses GpuBuffer storage.

Member Function Documentation

◆ materialLawManager() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
EclMaterialLawManager & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::materialLawManager ( )
inline

◆ materialLawManager() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const EclMaterialLawManager & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::materialLawManager ( ) const
inline

◆ materialLawParams()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE MaterialLawParams Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::materialLawParams ( std::size_t  elemIdx) const
inline

◆ maxGasDissolutionFactor()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE Scalar Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxGasDissolutionFactor ( unsigned  ,
std::size_t  elemIdx 
) const
inline

◆ maxGasDissolutionFactorStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxGasDissolutionFactorStorage ( )
inline

◆ maxGasDissolutionFactorStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxGasDissolutionFactorStorage ( ) const
inline

◆ maxOilSaturation()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE Scalar Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxOilSaturation ( std::size_t  elemIdx) const
inline

◆ maxOilSaturationStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxOilSaturationStorage ( )
inline

◆ maxOilSaturationStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxOilSaturationStorage ( ) const
inline

◆ maxOilVaporizationFactor()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE Scalar Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxOilVaporizationFactor ( unsigned  ,
std::size_t  elemIdx 
) const
inline

◆ maxOilVaporizationFactorStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxOilVaporizationFactorStorage ( )
inline

◆ maxOilVaporizationFactorStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::maxOilVaporizationFactorStorage ( ) const
inline

◆ model()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE ModelView Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::model ( ) const
inline

◆ porosity()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE Scalar Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::porosity ( std::size_t  elemIdx,
unsigned   
) const
inline

◆ porosityStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::porosityStorage ( )
inline

◆ porosityStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::porosityStorage ( ) const
inline

◆ pvtRegionIndex()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE unsigned Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::pvtRegionIndex ( std::size_t  elemIdx) const
inline

Per-cell PVT region index. Returns 0 when the GpuFlowProblem instantiation has no thermal support.

◆ pvtRegionIndexStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< int > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::pvtRegionIndexStorage ( )
inline

◆ pvtRegionIndexStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< int > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::pvtRegionIndexStorage ( ) const
inline

◆ rockCompPoroMultiplier()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
template<class Evaluation >
OPM_HOST_DEVICE Evaluation Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockCompPoroMultiplier ( const auto &  ,
std::size_t   
) const
inline

Default rock-pore-volume multiplier (1 if no compressibility).

◆ rockCompressibility()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE Scalar Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockCompressibility ( std::size_t  elemIdx) const
inline

◆ rockCompressibilityStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockCompressibilityStorage ( )
inline

◆ rockCompressibilityStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockCompressibilityStorage ( ) const
inline

◆ rockCompTransMultiplier()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
template<class Evaluation >
OPM_HOST_DEVICE Evaluation Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockCompTransMultiplier ( const auto &  ,
std::size_t   
) const
inline

Default rock-trans multiplier (1 if no compressibility).

◆ rockFraction()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE Scalar Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockFraction ( std::size_t  elemIdx,
unsigned   
) const
inline

Per-cell rock fraction (1 - effective porosity). Returns 0 when the GpuFlowProblem instantiation has no thermal support.

◆ rockFractionStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockFractionStorage ( )
inline

◆ rockFractionStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockFractionStorage ( ) const
inline

◆ rockReferencePressure()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE Scalar Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockReferencePressure ( std::size_t  elemIdx) const
inline

◆ rockReferencePressureStorage() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockReferencePressureStorage ( )
inline

◆ rockReferencePressureStorage() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const Storage< Scalar > & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::rockReferencePressureStorage ( ) const
inline

◆ satnumRegionIndex()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE int Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::satnumRegionIndex ( std::size_t  elemIdx) const
inline

◆ solidEnergyLawParams()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE SolidEnergyLawParams Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::solidEnergyLawParams ( std::size_t  elemIdx,
unsigned   
) const
inline

Solid-energy law parameters for a single cell. Forwards to the embedded thermal-law manager.

◆ thermalConductionLawParams()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
OPM_HOST_DEVICE ThermalConductionLawParams Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::thermalConductionLawParams ( std::size_t  elemIdx,
unsigned   
) const
inline

Thermal-conduction law parameters for a single cell. Forwards to the embedded thermal-law manager.

◆ thermalLawManager() [1/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
EclThermalLawManager & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::thermalLawManager ( )
inline

◆ thermalLawManager() [2/2]

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
const EclThermalLawManager & Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::thermalLawManager ( ) const
inline

◆ updateRelperms()

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
template<class FluidState , class... Args>
OPM_HOST_DEVICE void Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::updateRelperms ( auto &  mobility,
auto &  ,
FluidState &  fluidState,
unsigned  globalSpaceIdx 
) const
inline

Update the relative permeabilities of all phases for a single cell, in the same way as the CPU FlowProblem does.

Calls MaterialLaw::relativePermeabilities on the cell's MaterialLawParams. The BlackOilIntensiveQuantities later divides the result by the phase viscosity to obtain the mobility.

Directional relative permeabilities are not supported by the GPU problem, so the dirMob output is left untouched.

References Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::materialLawParams().

Member Data Documentation

◆ hasThermal

template<class ScalarT , class MaterialLawManagerT , template< class > class Storage = ::Opm::VectorWithDefaultAllocator, class ThermalLawManagerT = ::Opm::NoThermalLawManager>
constexpr bool Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::hasThermal = !std::is_same_v<typename EclThermalLawManager::FluidSystem, void>
staticconstexpr

True iff the thermal-law manager carries a real fluid-system tag (anything other than void) and therefore the thermal-extraction code paths should be enabled.

Referenced by Opm::GpuFlowProblem< ScalarT, MaterialLawManagerT, Storage, ThermalLawManagerT >::GpuFlowProblem().


The documentation for this class was generated from the following file: