28#ifndef EWOMS_MULTI_PHASE_BASE_MODEL_HH
29#define EWOMS_MULTI_PHASE_BASE_MODEL_HH
31#include <opm/material/densead/Math.hpp>
33#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
34#include <opm/material/fluidmatrixinteractions/NullMaterial.hpp>
36#include <opm/material/thermal/NullSolidEnergyLaw.hpp>
37#include <opm/material/thermal/NullThermalConductionLaw.hpp>
56template <
class TypeTag>
60namespace Opm::Properties {
71template<
class TypeTag>
74 using type = std::tuple<GetSplicePropType<TypeTag,
82template<
class TypeTag>
87template<
class TypeTag>
92template<
class TypeTag>
97template<
class TypeTag>
102template<
class TypeTag>
107template<
class TypeTag>
114template<
class TypeTag>
120 using Traits = NullMaterialTraits<Scalar, FluidSystem::numPhases>;
123 using type = NullMaterial<Traits>;
130template<
class TypeTag>
136template<
class TypeTag>
138{
using type = NullSolidEnergyLaw<GetPropType<TypeTag, Properties::Scalar>>; };
142template<
class TypeTag>
147template<
class TypeTag>
149{
using type = NullThermalConductionLaw<GetPropType<TypeTag, Properties::Scalar>>; };
153template<
class TypeTag>
166template <
class TypeTag>
167class MultiPhaseBaseModel :
public GetPropType<TypeTag, Properties::Discretization>
177 using ElementIterator =
typename GridView::template Codim<0>::Iterator;
178 using Element =
typename GridView::template Codim<0>::Entity;
183 explicit MultiPhaseBaseModel(Simulator& simulator)
184 : ParentType(simulator)
192 ParentType::registerParameters();
216 assert(phaseIdx < numPhases);
229 ElementContext elemCtx(this->simulator_);
230 ElementIterator elemIt = threadedElemIt.beginParallel();
233 for (; !threadedElemIt.isFinished(elemIt); elemIt = threadedElemIt.increment()) {
234 const Element& elem = *elemIt;
235 if (elem.partitionType() != Dune::InteriorEntity) {
239 elemCtx.updateStencil(elem);
240 elemCtx.updateIntensiveQuantities(0);
242 const auto& stencil = elemCtx.stencil(0);
244 for (
unsigned dofIdx = 0; dofIdx < elemCtx.numDof(0); ++dofIdx) {
245 const auto& scv = stencil.subControlVolume(dofIdx);
246 const auto& intQuants = elemCtx.intensiveQuantities(dofIdx, 0);
249 this->localResidual(threadId).addPhaseStorage(tmp,
254 tmp *= scv.volume() * intQuants.extrusionFactor();
263 storage = this->gridView_.comm().sum(storage);
266 void registerOutputModules_()
268 ParentType::registerOutputModules_();
276 const Implementation& asImp_()
const
277 {
return *
static_cast<const Implementation*
>(
this); }
A base class for fully-implicit multi-phase porous-media flow models which assume multiple fluid phas...
Definition multiphasebasemodel.hh:168
void globalPhaseStorage(EqVector &storage, unsigned phaseIdx)
Compute the total storage inside one phase of all conservation quantities.
Definition multiphasebasemodel.hh:214
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition multiphasebasemodel.hh:190
bool phaseIsConsidered(unsigned) const
Returns true iff a fluid phase is used by the model.
Definition multiphasebasemodel.hh:204
The base class for the problems of ECFV discretizations which deal with a multi-phase flow through a ...
Definition multiphasebaseproblem.hh:65
static unsigned threadId()
Return the index of the current OpenMP thread.
Definition threadmanager.cpp:84
Provides an STL-iterator like interface to iterate over the enties of a GridView in OpenMP threaded a...
Definition threadedentityiterator.hh:42
VTK output module for quantities which make sense for all models which deal with multiple fluid phase...
Definition vtkmultiphasemodule.hpp:73
static void registerParameters()
Register all run-time parameters for the multi-phase VTK output module.
Definition vtkmultiphasemodule.hpp:110
VTK output module for the temperature in which assume thermal equilibrium.
Definition vtktemperaturemodule.hpp:51
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition vtktemperaturemodule.hpp:75
This file contains the necessary classes to calculate the velocity out of a pressure potential gradie...
This class calculates the pressure potential gradients and the filter velocities for multi-phase flow...
Defines the common parameters for the porous medium multi-phase models.
The base class for the problems of ECFV discretizations which deal with a multi-phase flow through a ...
Defines the common properties required by the porous medium multi-phase models.
The generic type tag for problems using the immiscible multi-phase model.
Definition blackoilmodel.hh:81
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilbioeffectsmodules.hh:43
typename Properties::Detail::GetPropImpl< TypeTag, Property >::type::type GetPropType
get the type alias defined in the property (equivalent to old macro GET_PROP_TYPE(....
Definition propertysystem.hh:233
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:240
Specifies a flux module which uses the Darcy relation.
Definition darcyfluxmodule.hh:67
The type of the base class for all problems which use this model.
Definition fvbaseproperties.hh:84
Specifies the relation used for velocity.
Definition multiphasebaseproperties.hh:83
The context material law (extracted from the spatial parameters).
Definition multiphasebaseproperties.hh:59
The material law which ought to be used (extracted from the spatial parameters).
Definition multiphasebaseproperties.hh:55
Number of chemical species in the system.
Definition multiphasebaseproperties.hh:47
Number of equations in the system of PDEs.
Definition basicproperties.hh:80
Number of fluid phases in the system.
Definition multiphasebaseproperties.hh:43
The parameters of the material law for energy storage of the solid.
Definition multiphasebaseproperties.hh:67
The material law for the energy stored in the solid matrix.
Definition multiphasebaseproperties.hh:63
The splice to be used for the spatial discretization.
Definition multiphasebaseproperties.hh:39
Definition propertysystem.hh:42
Definition multiphasebasemodel.hh:66
Definition vcfvproperties.hh:41
The parameters of the material law for thermal conduction.
Definition multiphasebaseproperties.hh:75
The material law for thermal conduction.
Definition multiphasebaseproperties.hh:71
The base class for the vertex centered finite volume discretization scheme.
VTK output module for quantities which make sense for all models which deal with multiple fluid phase...
VTK output module for the temperature in which assume thermal equilibrium.