28#ifndef EWOMS_MULTI_PHASE_BASE_PROBLEM_HH
29#define EWOMS_MULTI_PHASE_BASE_PROBLEM_HH
31#include <dune/common/fmatrix.hh>
32#include <dune/common/fvector.hh>
34#include <dune/grid/common/partitionset.hh>
36#include <opm/material/fluidmatrixinteractions/NullMaterial.hpp>
37#include <opm/material/common/Means.hpp>
38#include <opm/material/densead/Evaluation.hpp>
47#include <opm/utility/CopyablePtr.hpp>
61template<
class TypeTag>
64 ,
public GetPropType<TypeTag, Properties::FluxModule>::FluxBaseProblem
78 using DirectionalMobilityPtr = Utility::CopyablePtr<DirectionalMobility<TypeTag>>;
80 enum { dimWorld = GridView::dimensionworld };
82 using DimVector = Dune::FieldVector<Scalar, dimWorld>;
83 using DimMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>;
99 ParentType::registerParameters();
101 Parameters::Register<Parameters::EnableGravity>
102 (
"Use the gravity correction for the pressure gradients.");
114 template <
class Context>
116 const Context& context,
122 const DimMatrix&
K1 = asImp_().intrinsicPermeability(context,
scvf.interiorIndex(),
timeIdx);
123 const DimMatrix&
K2 = asImp_().intrinsicPermeability(context,
scvf.exteriorIndex(),
timeIdx);
127 for (
unsigned i = 0; i < dimWorld; ++i) {
128 for (
unsigned j = 0; j < dimWorld; ++j) {
147 template <
class Context>
152 throw std::logic_error(
"Not implemented: Problem::intrinsicPermeability()");
164 template <
class Context>
169 throw std::logic_error(
"Not implemented: Problem::porosity()");
181 template <
class Context>
182 const SolidEnergyLawParams&
187 throw std::logic_error(
"Not implemented: Problem::solidEnergyParams()");
199 template <
class Context>
200 const ThermalConductionLawParams&
205 throw std::logic_error(
"Not implemented: Problem::thermalConductionParams()");
216 template <
class Context>
221 throw std::logic_error(
"Not implemented: Problem::tortuosity()");
232 template <
class Context>
237 throw std::logic_error(
"Not implemented: Problem::dispersivity()");
253 template <
class Context>
254 const MaterialLawParams &
259 static MaterialLawParams
dummy;
263 template <
class Flu
idState>
264 void updateRelperms([[
maybe_unused]] std::array<Evaluation,numPhases>& mobility,
278 template <
class Context>
282 {
return asImp_().temperature(); }
292 {
throw std::logic_error(
"Not implemented:temperature() method not implemented by the actual problem"); }
303 template <
class Context>
307 {
return asImp_().gravity(); }
331 ElementContext elemCtx( this->
simulator() );
333 auto& grid = this->
simulator().vanguard().grid();
334 for (
const auto& element :
elements(
gridView, Dune::Partitions::interior)) {
335 elemCtx.updateAll(element);
341 size_t nDofs = elemCtx.numDof(0);
342 for (
unsigned dofIdx = 0; dofIdx <
nDofs; ++dofIdx) {
343 const auto&
intQuant = elemCtx.intensiveQuantities( dofIdx, 0);
352 if (
indicator > 0.2 && element.level() < 2) {
353 grid.mark(1, element);
357 grid.mark(-1, element);
361 grid.mark(0, element);
367 return this->
simulator().vanguard().grid().comm().sum(numMarked);
386 for (
unsigned i = 0; i < DimMatrix::rows; ++i) {
396 Implementation& asImp_()
397 {
return *
static_cast<Implementation *
>(
this); }
400 const Implementation& asImp_()
const
401 {
return *
static_cast<const Implementation *
>(
this); }
406 if (Parameters::Get<Parameters::EnableGravity>()) {
407 gravity_[dimWorld-1] = -9.81;
Base class for all problems which use a finite volume spatial discretization.
Definition fvbaseproblem.hh:69
Simulator & simulator()
Returns Simulator object used by the simulation.
Definition fvbaseproblem.hh:692
const GridView & gridView() const
The GridView which used by the problem.
Definition fvbaseproblem.hh:660
The base class for the problems of ECFV discretizations which deal with a multi-phase flow through a ...
Definition multiphasebaseproblem.hh:65
void intersectionIntrinsicPermeability(DimMatrix &result, const Context &context, unsigned intersectionIdx, unsigned timeIdx) const
Returns the intrinsic permeability of an intersection.
Definition multiphasebaseproblem.hh:115
const ThermalConductionLawParams & thermalConductionParams(const Context &, unsigned, unsigned) const
Returns the parameter object for the thermal conductivity law in a sub-control volume.
Definition multiphasebaseproblem.hh:201
const MaterialLawParams & materialLawParams(const Context &, unsigned, unsigned) const
Returns the material law parameters within a control volume.
Definition multiphasebaseproblem.hh:255
DimMatrix toDimMatrix_(Scalar val) const
Converts a Scalar value to an isotropic Tensor.
Definition multiphasebaseproblem.hh:383
Scalar temperature() const
Returns the temperature for an isothermal problem.
Definition multiphasebaseproblem.hh:291
Scalar tortuosity(const Context &, unsigned, unsigned) const
Define the tortuosity.
Definition multiphasebaseproblem.hh:217
Scalar temperature(const Context &, unsigned, unsigned) const
Returns the temperature within a control volume.
Definition multiphasebaseproblem.hh:279
const DimVector & gravity() const
Returns the acceleration due to gravity .
Definition multiphasebaseproblem.hh:318
const DimVector & gravity(const Context &, unsigned, unsigned) const
Returns the acceleration due to gravity .
Definition multiphasebaseproblem.hh:304
Scalar porosity(const Context &, unsigned, unsigned) const
Returns the porosity [] of the porous medium for a given control volume.
Definition multiphasebaseproblem.hh:165
MultiPhaseBaseProblem(Simulator &simulator)
Definition multiphasebaseproblem.hh:90
const SolidEnergyLawParams & solidEnergyParams(const Context &, unsigned, unsigned) const
Returns the parameter object for the energy storage law of the solid in a sub-control volume.
Definition multiphasebaseproblem.hh:183
Scalar dispersivity(const Context &, unsigned, unsigned) const
Define the dispersivity.
Definition multiphasebaseproblem.hh:233
const DimMatrix & intrinsicPermeability(const Context &, unsigned, unsigned) const
Returns the intrinsic permeability tensor at a given position.
Definition multiphasebaseproblem.hh:148
unsigned markForGridAdaptation()
Mark grid cells for refinement or coarsening.
Definition multiphasebaseproblem.hh:326
static void registerParameters()
Register all run-time parameters for the problem and the model.
Definition multiphasebaseproblem.hh:97
This file contains definitions related to directional mobilities.
Base class for all problems which use a finite volume spatial discretization.
Declare the properties used by the infrastructure code of the finite volume discretizations.
Defines the common parameters for the porous medium multi-phase models.
Defines the common properties required by the porous medium multi-phase models.
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition blackoilbioeffectsmodules.hh:43
constexpr auto getPropValue()
get the value data member of a property
Definition propertysystem.hh:240
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