28 #ifndef EWOMS_IMMISCIBLE_MODEL_HH 29 #define EWOMS_IMMISCIBLE_MODEL_HH 31 #include <opm/material/densead/Math.hpp> 44 #include <opm/material/components/NullComponent.hpp> 45 #include <opm/material/fluidsystems/GasPhase.hpp> 46 #include <opm/material/fluidsystems/LiquidPhase.hpp> 47 #include <opm/material/fluidsystems/SinglePhaseFluidSystem.hpp> 48 #include <opm/material/fluidsystems/TwoPhaseImmiscibleFluidSystem.hpp> 54 template <
class TypeTag>
73 template<
class TypeTag>
77 template<
class TypeTag>
81 template<
class TypeTag>
85 template<
class TypeTag>
89 template<
class TypeTag>
93 template<
class TypeTag>
97 template<
class TypeTag>
101 template<
class TypeTag>
105 template<
class TypeTag>
113 template<
class TypeTag>
119 using type = Opm::SinglePhaseFluidSystem<Scalar , Fluid>;
122 template<
class TypeTag>
123 struct Fluid<TypeTag, TTag::ImmiscibleSinglePhaseModel>
129 using type = Opm::LiquidPhase<Scalar, Opm::NullComponent<Scalar> >;
135 template<
class TypeTag>
142 using type = Opm::LiquidPhase<Scalar, Opm::NullComponent<Scalar> >;
145 template<
class TypeTag>
152 using type = Opm::LiquidPhase<Scalar, Opm::NullComponent<Scalar> >;
155 template<
class TypeTag>
164 using type = Opm::TwoPhaseImmiscibleFluidSystem<Scalar, WettingPhase, NonwettingPhase>;
208 template <
class TypeTag>
220 enum { numComponents = FluidSystem::numComponents };
224 enum { numPhases = getPropValue<TypeTag, Properties::NumPhases>() };
225 enum { enableEnergy = getPropValue<TypeTag, Properties::EnableEnergy>() };
229 explicit ImmiscibleModel(Simulator& simulator)
230 : ParentType(simulator)
243 Parameters::SetDefault<Parameters::VtkWriteSaturations>(
false);
244 Parameters::SetDefault<Parameters::VtkWriteMobilities>(
false);
245 Parameters::SetDefault<Parameters::VtkWriteRelativePermeabilities>(
false);
252 {
return "immiscible"; }
260 if (!(s = EnergyModule::primaryVarName(pvIdx)).empty())
263 std::ostringstream oss;
265 if (pvIdx == Indices::pressure0Idx) {
266 oss <<
"pressure_" << FluidSystem::phaseName(0);
268 else if (Indices::saturation0Idx <= pvIdx
269 && pvIdx < Indices::saturation0Idx + numPhases - 1) {
270 unsigned phaseIdx = pvIdx - Indices::saturation0Idx;
271 oss <<
"saturation_" << FluidSystem::phaseName(phaseIdx);
285 if (!(s = EnergyModule::eqName(eqIdx)).empty())
288 std::ostringstream oss;
290 if (Indices::conti0EqIdx <= eqIdx && eqIdx < Indices::conti0EqIdx + numComponents)
291 oss <<
"conti_" << FluidSystem::phaseName(eqIdx - Indices::conti0EqIdx);
303 ParentType::updateBegin();
308 size_t nDof = this->numTotalDof();
309 for (
unsigned dofIdx = 0; dofIdx < nDof; ++ dofIdx) {
310 if (this->isLocalDof(dofIdx)) {
312 this->solution(0)[dofIdx][Indices::pressure0Idx];
323 assert(referencePressure_ > 0);
325 Scalar tmp = EnergyModule::primaryVarWeight(asImp_(), globalDofIdx, pvIdx);
329 if (Indices::pressure0Idx == pvIdx) {
330 return 10 / referencePressure_;
341 Scalar
eqWeight(
unsigned globalDofIdx,
unsigned eqIdx)
const 343 Scalar tmp = EnergyModule::eqWeight(asImp_(), globalDofIdx, eqIdx);
349 unsigned compIdx = eqIdx - Indices::conti0EqIdx;
350 assert(compIdx <= numPhases);
357 void registerOutputModules_()
359 ParentType::registerOutputModules_();
366 const Implementation& asImp_()
const 367 {
return *
static_cast<const Implementation *
>(
this); }
369 mutable Scalar referencePressure_;
The type tag for two-phase immiscible problems.
Definition: immisciblemodel.hh:69
std::string eqName(unsigned eqIdx) const
Given an equation index, return a human readable name.
Definition: immisciblemodel.hh:282
Contains the quantities which are are constant within a finite volume for the immiscible multi-phase ...
A fully-implicit multi-phase flow model which assumes immiscibility of the phases.
Definition: immisciblemodel.hh:55
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
The type of the local residual function.
Definition: fvbaseproperties.hh:94
VTK output module for quantities which make sense for models which assume thermal equilibrium...
Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
Definition: immisciblemodel.hh:321
Enumerations used by the model.
Definition: multiphasebaseproperties.hh:51
Implements a vector representing rates of conserved quantities.
The wetting phase for two-phase models.
Definition: immiscibleproperties.hh:41
The generic type tag for problems using the immiscible multi-phase model.
Definition: immisciblemodel.hh:63
Contains the classes required to consider energy as a conservation quantity in a multi-phase module...
The indices for the isothermal multi-phase model.
The type tag for single-phase immiscible problems.
Definition: immisciblemodel.hh:66
std::string primaryVarName(unsigned pvIdx) const
Given an primary variable index, return a human readable name.
Definition: immisciblemodel.hh:257
This file contains a set of helper functions used by VFPProd / VFPInj.
Definition: blackoilbioeffectsmodules.hh:45
Vector containing volumetric or areal rates of quantities.
Definition: fvbaseproperties.hh:116
Type of object for specifying boundary conditions.
Definition: fvbaseproperties.hh:119
The fluid systems including the information about the phases.
Definition: multiphasebaseproperties.hh:79
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: multiphasebasemodel.hh:197
The fluid used by the model.
Definition: immiscibleproperties.hh:49
Data required to calculate a flux over a face.
Definition: fvbaseproperties.hh:153
Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
Definition: immisciblemodel.hh:341
This class provides the data all quantities that are required to calculate the fluxes of the fluid ph...
Definition: immiscibleextensivequantities.hh:50
Specify whether energy should be considered as a conservation quantity or not.
Definition: multiphasebaseproperties.hh:87
The indices for the isothermal multi-phase model.
Definition: immiscibleindices.hh:42
static std::string name()
Definition: immisciblemodel.hh:251
The secondary variables within a sub-control volume.
Definition: fvbaseproperties.hh:133
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkenergymodule.hpp:87
Implements a vector representing rates of conserved quantities.
Definition: immiscibleratevector.hh:48
The type of the model.
Definition: basicproperties.hh:92
Calculates the local residual of the immiscible multi-phase model.
Definition: immisciblelocalresidual.hh:45
This class provides the data all quantities that are required to calculate the fluxes of the fluid ph...
The non-wetting phase for two-phase models.
Definition: immiscibleproperties.hh:44
Represents the primary variables used by the immiscible multi-phase, model.
Definition: immiscibleprimaryvariables.hh:53
Defines the properties required for the immiscible multi-phase model.
Provides the auxiliary methods required for consideration of the energy equation. ...
Definition: energymodule.hh:54
void updateBegin()
Called by the update() method before it tries to apply the newton method.
Definition: immisciblemodel.hh:301
A base class for fully-implicit multi-phase porous-media flow models which assume multiple fluid phas...
Implements a boundary vector for the fully implicit multi-phase model which assumes immiscibility...
Definition: immiscibleboundaryratevector.hh:49
Contains the quantities which are are constant within a finite volume for the immiscible multi-phase ...
Definition: immiscibleintensivequantities.hh:50
Manages the initializing and running of time dependent problems.
Definition: simulator.hh:83
Definition: blackoilmodel.hh:80
Represents the primary variables used by the immiscible multi-phase, model.
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: immisciblemodel.hh:236
VTK output module for quantities which make sense for models which assume thermal equilibrium...
Definition: vtkenergymodule.hpp:57
A vector of primary variables within a sub-control volume.
Definition: fvbaseproperties.hh:130
Implements a boundary vector for the fully implicit multi-phase model which assumes immiscibility...
Calculates the local residual of the immiscible multi-phase model.
A base class for fully-implicit multi-phase porous-media flow models which assume multiple fluid phas...
Definition: multiphasebasemodel.hh:57