28 #ifndef EWOMS_DISCRETE_FRACTURE_PROBLEM_HH
29 #define EWOMS_DISCRETE_FRACTURE_PROBLEM_HH
35 #include <opm/material/common/Means.hpp>
36 #include <opm/common/Unused.hpp>
37 #include <opm/common/ErrorMacros.hpp>
38 #include <opm/common/Exceptions.hpp>
40 #include <dune/common/fvector.hh>
41 #include <dune/common/fmatrix.hh>
44 namespace Properties {
55 template<
class TypeTag>
61 typedef typename GET_PROP_TYPE(TypeTag, Problem) Implementation;
62 typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
63 typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
66 enum { dimWorld = GridView::dimensionworld };
67 typedef Dune::FieldMatrix<Scalar, dimWorld, dimWorld> DimMatrix;
86 template <
class Context>
88 const Context& context,
89 unsigned localFaceIdx,
90 unsigned timeIdx)
const
92 const auto& scvf = context.stencil(timeIdx).interiorFace(localFaceIdx);
93 unsigned interiorElemIdx = scvf.interiorIndex();
94 unsigned exteriorElemIdx = scvf.exteriorIndex();
95 const DimMatrix& K1 = asImp_().fractureIntrinsicPermeability(context, interiorElemIdx, timeIdx);
96 const DimMatrix& K2 = asImp_().fractureIntrinsicPermeability(context, exteriorElemIdx, timeIdx);
100 for (
unsigned i = 0; i < dimWorld; ++i)
101 for (
unsigned j = 0; j < dimWorld; ++j)
102 result[i][j] = Opm::harmonicMean(K1[i][j], K2[i][j]);
112 template <
class Context>
114 unsigned spaceIdx OPM_UNUSED,
115 unsigned timeIdx OPM_UNUSED)
const
117 OPM_THROW(std::logic_error,
118 "Not implemented: Problem::fractureIntrinsicPermeability()");
129 template <
class Context>
131 unsigned spaceIdx OPM_UNUSED,
132 unsigned timeIdx OPM_UNUSED)
const
134 OPM_THROW(std::logic_error,
135 "Not implemented: Problem::fracturePorosity()");
140 Implementation& asImp_()
141 {
return *
static_cast<Implementation *
>(
this); }
143 const Implementation& asImp_()
const
144 {
return *
static_cast<const Implementation *
>(
this); }
Defines the properties required for the immiscible multi-phase model which considers discrete fractur...
Scalar fracturePorosity(const Context &context OPM_UNUSED, unsigned spaceIdx OPM_UNUSED, unsigned timeIdx OPM_UNUSED) const
Returns the porosity [] inside fractures for a given control volume.
Definition: discretefractureproblem.hh:130
const DimMatrix & fractureIntrinsicPermeability(const Context &context OPM_UNUSED, unsigned spaceIdx OPM_UNUSED, unsigned timeIdx OPM_UNUSED) const
Returns the intrinsic permeability tensor at a given position due to a fracture. ...
Definition: discretefractureproblem.hh:113
void fractureFaceIntrinsicPermeability(DimMatrix &result, const Context &context, unsigned localFaceIdx, unsigned timeIdx) const
Returns the intrinsic permeability of a face due to a fracture.
Definition: discretefractureproblem.hh:87
The base class for the problems of ECFV discretizations which deal with a multi-phase flow through a ...
Definition: discretefractureproblem.hh:56
Simulator & simulator()
Returns Simulator object used by the simulation.
Definition: fvbaseproblem.hh:526
Manages the initializing and running of time dependent problems.
Definition: simulator.hh:75
#define NEW_PROP_TAG(PTagName)
Define a property tag.
Definition: propertysystem.hh:247
The base class for the problems of ECFV discretizations which deal with a multi-phase flow through a ...
Definition: multiphasebaseproblem.hh:59
DiscreteFractureProblem(Simulator &simulator)
Definition: discretefractureproblem.hh:73
The base class for the problems of ECFV discretizations which deal with a multi-phase flow through a ...