blackoilmodel.hh
Go to the documentation of this file.
1// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2// vi: set et ts=4 sw=4 sts=4:
3/*
4 This file is part of the Open Porous Media project (OPM).
5
6 OPM is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 2 of the License, or
9 (at your option) any later version.
10
11 OPM is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with OPM. If not, see <http://www.gnu.org/licenses/>.
18
19 Consult the COPYING file in the top-level source directory of this
20 module for the precise wording of the license and the list of
21 copyright holders.
22*/
28#ifndef OPM_BLACK_OIL_MODEL_HPP
29#define OPM_BLACK_OIL_MODEL_HPP
30
31#include <opm/material/densead/Math.hpp>
32
33#include <opm/material/fluidsystems/BlackOilFluidSystem.hpp>
34
47
49
53
55
56#include <cassert>
57#include <istream>
58#include <limits>
59#include <memory>
60#include <ostream>
61#include <sstream>
62#include <stdexcept>
63#include <string>
64#include <tuple>
65#include <vector>
66
67namespace Opm {
68
69template <class TypeTag>
70class BlackOilModel;
71
72}
73
74namespace Opm::Properties {
75
76namespace TTag {
77
80{ using InheritsFrom = std::tuple<MultiPhaseBaseModel>; };
81
82} // namespace TTag
83
85template<class TypeTag>
86struct LocalResidual<TypeTag, TTag::BlackOilModel>
88
90template<class TypeTag>
91struct NewtonMethod<TypeTag, TTag::BlackOilModel>
93
95template<class TypeTag>
96struct Model<TypeTag, TTag::BlackOilModel>
98
100template<class TypeTag>
101struct BaseProblem<TypeTag, TTag::BlackOilModel>
103
105template<class TypeTag>
106struct RateVector<TypeTag, TTag::BlackOilModel>
108
110template<class TypeTag>
111struct BoundaryRateVector<TypeTag, TTag::BlackOilModel>
113
115template<class TypeTag>
116struct PrimaryVariables<TypeTag, TTag::BlackOilModel>
118
120template<class TypeTag>
121struct IntensiveQuantities<TypeTag, TTag::BlackOilModel>
123
125template<class TypeTag>
126struct ExtensiveQuantities<TypeTag, TTag::BlackOilModel>
128
130template<class TypeTag>
131struct Indices<TypeTag, TTag::BlackOilModel>
132{
134 getPropValue<TypeTag, Properties::EnableExtbo>(),
135 getPropValue<TypeTag, Properties::EnablePolymer>(),
136 getPropValue<TypeTag, Properties::EnergyModuleType>() == EnergyModules::FullyImplicitThermal,
137 getPropValue<TypeTag, Properties::EnableFoam>(),
138 getPropValue<TypeTag, Properties::EnableBrine>(),
139 /*PVOffset=*/0,
140 getPropValue<TypeTag, Properties::EnableBioeffects>()>;
141};
142
144template<class TypeTag>
145struct FluidSystem<TypeTag, TTag::BlackOilModel>
146{
147public:
150 using type = BlackOilFluidSystem<Scalar>;
151};
152
153// by default, all ECL extension modules are disabled
154template<class TypeTag>
155struct EnableSolvent<TypeTag, TTag::BlackOilModel>
156{ static constexpr bool value = false; };
157
158template<class TypeTag>
159struct EnableExtbo<TypeTag, TTag::BlackOilModel>
160{ static constexpr bool value = false; };
161
162template<class TypeTag>
163struct EnablePolymer<TypeTag, TTag::BlackOilModel>
164{ static constexpr bool value = false; };
165
166template<class TypeTag>
167struct EnablePolymerMW<TypeTag, TTag::BlackOilModel>
168{ static constexpr bool value = false; };
169
170template<class TypeTag>
171struct EnableFoam<TypeTag, TTag::BlackOilModel>
172{ static constexpr bool value = false; };
173
174template<class TypeTag>
175struct EnableBrine<TypeTag, TTag::BlackOilModel>
176{ static constexpr bool value = false; };
177
178template<class TypeTag>
179struct EnableVapwat<TypeTag, TTag::BlackOilModel>
180{ static constexpr bool value = false; };
181
182template<class TypeTag>
183struct EnableDisgasInWater<TypeTag, TTag::BlackOilModel>
184{ static constexpr bool value = false; };
185
186template<class TypeTag>
188{ static constexpr bool value = false; };
189
190template<class TypeTag>
191struct EnableBioeffects<TypeTag, TTag::BlackOilModel>
192{ static constexpr bool value = false; };
193
194template<class TypeTag>
195struct EnergyModuleType<TypeTag, TTag::BlackOilModel>
196{ static constexpr EnergyModules value = EnergyModules::NoTemperature; };
197
199template<class TypeTag>
200struct EnableDiffusion<TypeTag, TTag::BlackOilModel>
201{ static constexpr bool value = false; };
202
204template<class TypeTag>
205struct EnableDispersion<TypeTag, TTag::BlackOilModel>
206{ static constexpr bool value = false; };
207
208template<class TypeTag>
210{ static constexpr bool value = false; };
211
212template<class TypeTag>
213struct EnableMech<TypeTag, TTag::BlackOilModel>
214{ static constexpr bool value = false; };
215
216template<class TypeTag>
217struct RunAssemblyOnGpu<TypeTag, TTag::BlackOilModel>
218{ static constexpr bool value = false; };
219
226template<class TypeTag>
228{
229private:
231 static constexpr Scalar alpha =
232 getPropValue<TypeTag, Properties::BlackoilConserveSurfaceVolume>() ? 1000.0 : 1.0;
233
234public:
235 using type = Scalar;
236 static constexpr Scalar value = 1.0/(30.0*4184.0*alpha);
237};
238
240template<class TypeTag>
242{
243private:
245 static constexpr Scalar alpha =
246 getPropValue<TypeTag, Properties::BlackoilConserveSurfaceVolume>() ? 1000.0 : 1.0;
247
248public:
249 using type = Scalar;
250 static constexpr Scalar value = 1.0/(10.0*alpha);
251};
252
253// by default, ebos formulates the conservation equations in terms of mass not surface
254// volumes
255template<class TypeTag>
257{ static constexpr bool value = false; };
258
259} // namespace Opm::Properties
260
261namespace Opm {
262
326template<class TypeTag >
328 : public MultiPhaseBaseModel<TypeTag>
329{
330public:
334
335private:
336 using Implementation = GetPropType<TypeTag, Properties::Model>;
338
343
344 enum { numComponents = FluidSystem::numComponents };
345 enum { numEq = getPropValue<TypeTag, Properties::NumEq>() };
346
347 static constexpr bool compositionSwitchEnabled =
348 Indices::compositionSwitchIdx != std::numeric_limits<unsigned>::max();
349 static constexpr bool enableBioeffects = getPropValue<TypeTag, Properties::EnableBioeffects>();
350 static constexpr bool enableDiffusion = getPropValue<TypeTag, Properties::EnableDiffusion>();
351 static constexpr bool enableDispersion = getPropValue<TypeTag, Properties::EnableDispersion>();
352 static constexpr bool enableExtbo = getPropValue<TypeTag, Properties::EnableExtbo>();
353 static constexpr bool enablePolymer = getPropValue<TypeTag, Properties::EnablePolymer>();
354 static constexpr bool enableSolvent = getPropValue<TypeTag, Properties::EnableSolvent>();
355 static constexpr EnergyModules energyModuleType = getPropValue<TypeTag, Properties::EnergyModuleType>();
356 static constexpr bool enableFullyImplicitThermal = energyModuleType == EnergyModules::FullyImplicitThermal;
357 static constexpr bool waterEnabled = Indices::waterEnabled;
358
359 using BioeffectsModule = BlackOilBioeffectsModule<TypeTag, enableBioeffects>;
362 using EnergyModule = BlackOilEnergyModule<TypeTag, energyModuleType>;
363 using ExtboModule = BlackOilExtboModule<TypeTag, enableExtbo>;
364 using PolymerModule = BlackOilPolymerModule<TypeTag, enablePolymer>;
365 using SolventModule = BlackOilSolventModule<TypeTag, enableSolvent>;
366
367public:
369
370 explicit BlackOilModel(Simulator& simulator)
371 : ParentType(simulator)
372 {
373 eqWeights_.resize(numEq, 1.0);
374 }
375
379 static void registerParameters()
380 {
382
383 if constexpr (enableSolvent) {
384 SolventModule::registerParameters();
385 }
386 if constexpr (enableExtbo) {
387 ExtboModule::registerParameters();
388 }
389 if constexpr (enablePolymer) {
390 PolymerModule::registerParameters();
391 }
392 if constexpr (enableFullyImplicitThermal) {
393 EnergyModule::registerParameters();
394 }
395 if constexpr (enableDiffusion) {
396 DiffusionModule::registerParameters();
397 }
398 if constexpr (enableBioeffects) {
399 BioeffectsModule::registerParameters();
400 }
401
402 // register runtime parameters of the VTK output modules
405 if constexpr (enableDiffusion) {
407 }
408 }
409
413 static std::string name()
414 { return "blackoil"; }
415
419 std::string primaryVarName(unsigned pvIdx) const
420 {
421 if (pvIdx == Indices::waterSwitchIdx) {
422 return "water_switching";
423 }
424 else if (pvIdx == Indices::pressureSwitchIdx) {
425 return "pressure_switching";
426 }
427 else if (pvIdx == Indices::compositionSwitchIdx) {
428 return "composition_switching";
429 }
430
431 if constexpr (enableSolvent) {
432 if (SolventModule::primaryVarApplies(pvIdx)) {
433 return SolventModule::primaryVarName(pvIdx);
434 }
435 }
436
437 if constexpr (enableExtbo) {
438 if (ExtboModule::primaryVarApplies(pvIdx)) {
439 return ExtboModule::primaryVarName(pvIdx);
440 }
441 }
442
443 if constexpr (enablePolymer) {
444 if (PolymerModule::primaryVarApplies(pvIdx)) {
445 return PolymerModule::primaryVarName(pvIdx);
446 }
447 }
448
449 if constexpr (enableFullyImplicitThermal) {
450 if (EnergyModule::primaryVarApplies(pvIdx)) {
451 return EnergyModule::primaryVarName(pvIdx);
452 }
453 }
454
455 throw std::logic_error("Invalid primary variable index");
456 }
457
461 std::string eqName(int eqIdx) const
462 {
463 if (Indices::conti0EqIdx <= eqIdx && eqIdx < Indices::conti0EqIdx + numComponents) {
464 std::ostringstream oss;
465 oss << "conti_" << FluidSystem::phaseName(eqIdx - Indices::conti0EqIdx);
466 return oss.str();
467 }
468
469 if constexpr (enableSolvent) {
470 if (SolventModule::eqApplies(eqIdx)) {
471 return SolventModule::eqName(eqIdx);
472 }
473 }
474
475 if constexpr (enableExtbo) {
476 if (ExtboModule::eqApplies(eqIdx)) {
477 return ExtboModule::eqName(eqIdx);
478 }
479 }
480
481 if constexpr (enablePolymer) {
482 if (PolymerModule::eqApplies(eqIdx)) {
483 return PolymerModule::eqName(eqIdx);
484 }
485 }
486
487 if constexpr (enableFullyImplicitThermal) {
488 if (EnergyModule::eqApplies(eqIdx)) {
489 return EnergyModule::eqName(eqIdx);
490 }
491 }
492
493 throw std::logic_error("Invalid equation index");
494 }
495
499 Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
500 {
501 // do not care about the auxiliary equations as they are supposed to scale
502 // themselves
503 if (globalDofIdx >= this->numGridDof()) {
504 return 1.0;
505 }
506
507 // saturations are always in the range [0, 1]!
508 if (Indices::waterSwitchIdx == pvIdx) {
509 return 1.0;
510 }
511
512 // oil pressures usually are in the range of 100 to 500 bars for typical oil
513 // reservoirs (which is the only relevant application for the black-oil model).
514 else if (int(Indices::pressureSwitchIdx) == int(pvIdx)) {
515 return 1.0 / 300e5;
516 }
517
518 // deal with primary variables stemming from the solvent module
519 if constexpr (enableSolvent) {
520 if (SolventModule::primaryVarApplies(pvIdx)) {
521 return SolventModule::primaryVarWeight(pvIdx);
522 }
523 }
524
525 // deal with primary variables stemming from the extBO module
526 if constexpr (enableExtbo) {
527 if (ExtboModule::primaryVarApplies(pvIdx)) {
528 return ExtboModule::primaryVarWeight(pvIdx);
529 }
530 }
531
532 // deal with primary variables stemming from the polymer module
533 if constexpr (enablePolymer) {
534 if (PolymerModule::primaryVarApplies(pvIdx)) {
535 return PolymerModule::primaryVarWeight(pvIdx);
536 }
537 }
538
539 // deal with primary variables stemming from the energy module
540 if constexpr (enableFullyImplicitThermal) {
541 if (EnergyModule::primaryVarApplies(pvIdx)) {
542 return EnergyModule::primaryVarWeight(pvIdx);
543 }
544 }
545
546 // if the primary variable is either the gas saturation, Rs or Rv
547 assert(Indices::compositionSwitchIdx == pvIdx);
548
549 switch (this->solution(0)[globalDofIdx].primaryVarsMeaningGas()) {
550 case PrimaryVariables::GasMeaning::Sg: return 1.0; // gas saturation
551 case PrimaryVariables::GasMeaning::Rs: return 1.0 / 250.; // gas dissolution factor
552 case PrimaryVariables::GasMeaning::Rv: return 1.0 / 0.025; // oil vaporization factor
553 default: throw std::logic_error("Invalid primary variable meaning flag for gas");
554 }
555 }
556
563 Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
564 {
565 // do not care about the auxiliary equations as they are supposed to scale
566 // themselves
567 if (globalDofIdx >= this->numGridDof()) {
568 return 1.0;
569 }
570
571 return eqWeights_[eqIdx];
572 }
573
574 void setEqWeight(unsigned eqIdx, Scalar value)
575 { eqWeights_[eqIdx] = value; }
576
585 template <class DofEntity>
586 void serializeEntity(std::ostream& outstream, const DofEntity& dof)
587 {
588 const unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
589
590 // write phase state
591 if (!outstream.good()) {
592 throw std::runtime_error("Could not serialize degree of freedom " + std::to_string(dofIdx));
593 }
594
595 // write the primary variables
596 const auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
597 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
598 outstream << priVars[eqIdx] << " ";
599 }
600
601 // write the pseudo primary variables
602 outstream << static_cast<int>(priVars.primaryVarsMeaningGas()) << " ";
603 outstream << static_cast<int>(priVars.primaryVarsMeaningWater()) << " ";
604 outstream << static_cast<int>(priVars.primaryVarsMeaningPressure()) << " ";
605
606 outstream << priVars.pvtRegionIndex() << " ";
607
608 if constexpr (enableSolvent) {
609 SolventModule::serializeEntity(asImp_(), outstream, dof);
610 }
611 if constexpr (enableExtbo) {
612 ExtboModule::serializeEntity(asImp_(), outstream, dof);
613 }
614 if constexpr (enablePolymer) {
615 PolymerModule::serializeEntity(asImp_(), outstream, dof);
616 }
617 if constexpr (enableFullyImplicitThermal) {
618 EnergyModule::serializeEntity(asImp_(), outstream, dof);
619 }
620 }
621
630 template <class DofEntity>
631 void deserializeEntity(std::istream& instream,
632 const DofEntity& dof)
633 {
634 const unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
635
636 // read in the "real" primary variables of the DOF
637 auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
638 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
639 if (!instream.good()) {
640 throw std::runtime_error("Could not deserialize degree of freedom " + std::to_string(dofIdx));
641 }
642 instream >> priVars[eqIdx];
643 }
644
645 // read the pseudo primary variables
646 unsigned primaryVarsMeaningGas;
647 instream >> primaryVarsMeaningGas;
648
649 unsigned primaryVarsMeaningWater;
650 instream >> primaryVarsMeaningWater;
651
652 unsigned primaryVarsMeaningPressure;
653 instream >> primaryVarsMeaningPressure;
654
655 unsigned pvtRegionIdx;
656 instream >> pvtRegionIdx;
657
658 if (!instream.good()) {
659 throw std::runtime_error("Could not deserialize degree of freedom " + std::to_string(dofIdx));
660 }
661
662 if constexpr (enableSolvent) {
663 SolventModule::deserializeEntity(asImp_(), instream, dof);
664 }
665 if constexpr (enableExtbo) {
666 ExtboModule::deserializeEntity(asImp_(), instream, dof);
667 }
668 if constexpr (enablePolymer) {
669 PolymerModule::deserializeEntity(asImp_(), instream, dof);
670 }
671 if constexpr (enableFullyImplicitThermal) {
672 EnergyModule::deserializeEntity(asImp_(), instream, dof);
673 }
674
675 using PVM_G = typename PrimaryVariables::GasMeaning;
676 using PVM_W = typename PrimaryVariables::WaterMeaning;
677 using PVM_P = typename PrimaryVariables::PressureMeaning;
678 priVars.setPrimaryVarsMeaningGas(static_cast<PVM_G>(primaryVarsMeaningGas));
679 priVars.setPrimaryVarsMeaningWater(static_cast<PVM_W>(primaryVarsMeaningWater));
680 priVars.setPrimaryVarsMeaningPressure(static_cast<PVM_P>(primaryVarsMeaningPressure));
681
682 priVars.setPvtRegionIndex(pvtRegionIdx);
683 }
684
692 template <class Restarter>
693 void deserialize(Restarter& res)
694 {
695 ParentType::deserialize(res);
696
697 // set the PVT indices of the primary variables. This is also done by writing
698 // them into the restart file and re-reading them, but it is better to calculate
699 // them from scratch because the input could have been changed in this regard...
700 ElementContext elemCtx(this->simulator_);
701 for (const auto& elem : elements(this->gridView())) {
702 elemCtx.updateStencil(elem);
703 for (unsigned dofIdx = 0; dofIdx < elemCtx.numPrimaryDof(/*timIdx=*/0); ++dofIdx) {
704 const unsigned globalDofIdx = elemCtx.globalSpaceIndex(dofIdx, /*timIdx=*/0);
705 updatePvtRegionIndex_(this->solution(/*timeIdx=*/0)[globalDofIdx],
706 elemCtx,
707 dofIdx,
708 /*timeIdx=*/0);
709 }
710 }
711
712 this->solution(/*timeIdx=*/1) = this->solution(/*timeIdx=*/0);
713 }
714
715/*
716 // hack: this interferes with the static polymorphism trick
717protected:
718 friend ParentType;
719 friend Discretization;
720*/
721
722 template <class Context>
724 const Context& context,
725 unsigned dofIdx,
726 unsigned timeIdx)
727 { updatePvtRegionIndex_(priVars, context, dofIdx, timeIdx); }
728
730 {
732
733 // add the VTK output modules which make sense for the blackoil model
734 if constexpr (enableSolvent) {
735 SolventModule::registerOutputModules(asImp_(), this->simulator_);
736 }
737 if constexpr (enablePolymer) {
738 PolymerModule::registerOutputModules(asImp_(), this->simulator_);
739 }
740 if constexpr (enableFullyImplicitThermal) {
741 EnergyModule::registerOutputModules(asImp_(), this->simulator_);
742 }
743 if constexpr (enableBioeffects) {
744 BioeffectsModule::registerOutputModules(asImp_(), this->simulator_);
745 }
746
747 this->addOutputModule(std::make_unique<VtkBlackOilModule<TypeTag>>(this->simulator_));
748 this->addOutputModule(std::make_unique<VtkCompositionModule<TypeTag>>(this->simulator_));
749
750 if constexpr (enableDiffusion) {
751 this->addOutputModule(std::make_unique<VtkDiffusionModule<TypeTag>>(this->simulator_));
752 }
753 }
754
755private:
756 std::vector<Scalar> eqWeights_;
757
758 Implementation& asImp_()
759 { return *static_cast<Implementation*>(this); }
760
761 const Implementation& asImp_() const
762 { return *static_cast<const Implementation*>(this); }
763
764 template <class Context>
765 void updatePvtRegionIndex_(PrimaryVariables& priVars,
766 const Context& context,
767 unsigned dofIdx,
768 unsigned timeIdx)
769 {
770 const unsigned regionIdx = context.problem().pvtRegionIndex(context, dofIdx, timeIdx);
771 priVars.setPvtRegionIndex(regionIdx);
772 }
773};
774
775} // namespace Opm
776
777#endif // OPM_BLACK_OIL_MODEL_HPP
Contains classes extending the black-oil model. \detail This file holds dummy definitions,...
Declares the properties required by the black oil model.
Implements a boundary vector for the fully implicit black-oil model.
Definition: blackoilboundaryratevector.hh:55
Provides the auxiliary methods required for consideration of the diffusion equation.
Provides the auxiliary methods required for consideration of the dispersion equation.
This template class contains the data which is required to calculate the fluxes of the fluid phases o...
Definition: blackoilextensivequantities.hh:57
Contains the quantities which are are constant within a finite volume in the black-oil model.
Definition: blackoilintensivequantities.hh:80
Calculates the local residual of the black oil model.
Definition: blackoillocalresidual.hh:51
A fully-implicit black-oil flow model.
Definition: blackoilmodel.hh:329
GetPropType< TypeTag, Properties::PrimaryVariables > PrimaryVariables
Definition: blackoilmodel.hh:333
BlackOilModel(Simulator &simulator)
Definition: blackoilmodel.hh:370
Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
Returns the relative weight of a primary variable for calculating relative errors.
Definition: blackoilmodel.hh:499
Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
Returns the relative weight of an equation.
Definition: blackoilmodel.hh:563
void supplementInitialSolution_(PrimaryVariables &priVars, const Context &context, unsigned dofIdx, unsigned timeIdx)
Definition: blackoilmodel.hh:723
void serializeEntity(std::ostream &outstream, const DofEntity &dof)
Write the current solution for a degree of freedom to a restart file.
Definition: blackoilmodel.hh:586
void registerOutputModules_()
Definition: blackoilmodel.hh:729
std::string eqName(int eqIdx) const
Given an equation index, return a human readable name.
Definition: blackoilmodel.hh:461
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: blackoilmodel.hh:332
static std::string name()
Definition: blackoilmodel.hh:413
std::string primaryVarName(unsigned pvIdx) const
Given an primary variable index, return a human readable name.
Definition: blackoilmodel.hh:419
GetPropType< TypeTag, Properties::Indices > Indices
Definition: blackoilmodel.hh:331
void deserializeEntity(std::istream &instream, const DofEntity &dof)
Reads the current solution variables for a degree of freedom from a restart file.
Definition: blackoilmodel.hh:631
GetPropType< TypeTag, Properties::LocalResidual > LocalResidual
Definition: blackoilmodel.hh:368
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: blackoilmodel.hh:379
void setEqWeight(unsigned eqIdx, Scalar value)
Definition: blackoilmodel.hh:574
void deserialize(Restarter &res)
Deserializes the state of the model.
Definition: blackoilmodel.hh:693
A newton solver which is specific to the black oil model.
Definition: blackoilnewtonmethod.hpp:64
Represents the primary variables used by the black-oil model.
Definition: blackoilprimaryvariables.hh:70
Base class for all problems which use the black-oil model.
Definition: blackoilproblem.hh:43
Implements a vector representing mass, molar or volumetric rates for the black oil model.
Definition: blackoilratevector.hh:59
A base class for fully-implicit multi-phase porous-media flow models which assume multiple fluid phas...
Definition: multiphasebasemodel.hh:161
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: multiphasebasemodel.hh:183
void registerOutputModules_()
Definition: multiphasebasemodel.hh:259
VTK output module for the black oil model's parameters.
Definition: vtkblackoilmodule.hpp:57
static void registerParameters()
Register all run-time parameters for the multi-phase VTK output module.
Definition: vtkblackoilmodule.hpp:93
VTK output module for the fluid composition.
Definition: vtkcompositionmodule.hpp:57
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkcompositionmodule.hpp:87
VTK output module for quantities which make sense for models which incorperate molecular diffusion.
Definition: vtkdiffusionmodule.hpp:58
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkdiffusionmodule.hpp:88
PressureMeaning
Definition: blackoilmeanings.hh:29
WaterMeaning
Definition: blackoilmeanings.hh:22
GasMeaning
Definition: blackoilmeanings.hh:35
Definition: blackoilmodel.hh:74
Definition: blackoilbioeffectsmodules.hh:45
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
std::string to_string(const ConvergenceReport::ReservoirFailure::Type t)
The Opm property system, traits with inheritance.
The primary variable and equation indices for the three-phase black-oil model.
Definition: blackoilvariableandequationindices.hh:49
The type of the base class for all problems which use this model.
Definition: fvbaseproperties.hh:89
Definition: blackoilproperties.hh:100
Similarly to the energy equation, a scaling is applied to the urea equation in MICP.
Definition: blackoilproperties.hh:104
Enable surface volume scaling.
Definition: blackoilproperties.hh:59
Type of object for specifying boundary conditions.
Definition: fvbaseproperties.hh:124
Enable the ECL-blackoil extension for bioeffects (biofilm/MICP)
Definition: blackoilproperties.hh:83
Enable the ECL-blackoil extension for salt.
Definition: blackoilproperties.hh:67
Enable convective mixing?
Definition: multiphasebaseproperties.hh:99
Enable diffusive fluxes?
Definition: multiphasebaseproperties.hh:91
Enable the ECL-blackoil extension for disolution of gas into water.
Definition: blackoilproperties.hh:79
Enable dispersive fluxes?
Definition: multiphasebaseproperties.hh:95
Enable the ECL-blackoil extension for extended BO. ("Second gas" - alternative approach)
Definition: blackoilproperties.hh:47
Enable the ECL-blackoil extension for foam.
Definition: blackoilproperties.hh:63
Definition: blackoilproperties.hh:86
Enable the tracking polymer molecular weight tracking and related functionalities.
Definition: blackoilproperties.hh:55
Enable the ECL-blackoil extension for polymer.
Definition: blackoilproperties.hh:51
Enable the ECL-blackoil extension for salt precipitation.
Definition: blackoilproperties.hh:71
Enable the ECL-blackoil extension for solvents. ("Second gas")
Definition: blackoilproperties.hh:43
Enable the ECL-blackoil extension for water evaporation.
Definition: blackoilproperties.hh:75
Specifies who temperature is modeled by the simulator.
Definition: blackoilproperties.hh:108
Data required to calculate a flux over a face.
Definition: fvbaseproperties.hh:163
GetPropType< TypeTag, Properties::Evaluation > Evaluation
Definition: blackoilmodel.hh:149
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: blackoilmodel.hh:148
BlackOilFluidSystem< Scalar > type
Definition: blackoilmodel.hh:150
The fluid systems including the information about the phases.
Definition: multiphasebaseproperties.hh:79
Enumerations used by the model.
Definition: multiphasebaseproperties.hh:51
The secondary variables within a sub-control volume.
Definition: fvbaseproperties.hh:138
The type of the local residual function.
Definition: fvbaseproperties.hh:99
The type of the model.
Definition: basicproperties.hh:92
Specifies the type of the actual Newton method.
Definition: newtonmethodproperties.hh:32
A vector of primary variables within a sub-control volume.
Definition: fvbaseproperties.hh:135
Vector containing volumetric or areal rates of quantities.
Definition: fvbaseproperties.hh:121
The discretization specific part of the intensive quantities.
Definition: fvbaseproperties.hh:147
The type tag for the black-oil problems.
Definition: blackoilmodel.hh:80
std::tuple< MultiPhaseBaseModel > InheritsFrom
Definition: blackoilmodel.hh:80