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
56
58
62
63#include <cassert>
64#include <istream>
65#include <memory>
66#include <ostream>
67#include <sstream>
68#include <stdexcept>
69#include <string>
70#include <tuple>
71#include <vector>
72
73namespace Opm {
74
75template <class TypeTag>
76class BlackOilModel;
77
78}
79
80namespace Opm::Properties {
81
82namespace TTag {
83
86{ using InheritsFrom = std::tuple<VtkBlackOilPolymer, MultiPhaseBaseModel>; };
87} // namespace TTag
88
90template<class TypeTag>
91struct LocalResidual<TypeTag, TTag::BlackOilModel>
93
95template<class TypeTag>
96struct NewtonMethod<TypeTag, TTag::BlackOilModel>
98
100template<class TypeTag>
101struct Model<TypeTag, TTag::BlackOilModel>
103
105template<class TypeTag>
106struct BaseProblem<TypeTag, TTag::BlackOilModel>
108
110template<class TypeTag>
111struct RateVector<TypeTag, TTag::BlackOilModel>
113
115template<class TypeTag>
116struct BoundaryRateVector<TypeTag, TTag::BlackOilModel>
118
120template<class TypeTag>
121struct PrimaryVariables<TypeTag, TTag::BlackOilModel>
123
125template<class TypeTag>
126struct IntensiveQuantities<TypeTag, TTag::BlackOilModel>
128
130template<class TypeTag>
131struct ExtensiveQuantities<TypeTag, TTag::BlackOilModel>
133
136template<class TypeTag>
137struct FluxModule<TypeTag, TTag::BlackOilModel>
139
141template<class TypeTag>
142struct Indices<TypeTag, TTag::BlackOilModel>
143{
145 getPropValue<TypeTag, Properties::EnableExtbo>(),
146 getPropValue<TypeTag, Properties::EnablePolymer>(),
147 getPropValue<TypeTag, Properties::EnergyModuleType>() == EnergyModules::FullyImplicitThermal,
148 getPropValue<TypeTag, Properties::EnableFoam>(),
149 getPropValue<TypeTag, Properties::EnableBrine>(),
150 /*PVOffset=*/0,
151 getPropValue<TypeTag, Properties::EnableBioeffects>()>;
152};
153
155template<class TypeTag>
156struct FluidSystem<TypeTag, TTag::BlackOilModel>
157{
158public:
161 using type = BlackOilFluidSystem<Scalar>;
162};
163
164// by default, all ECL extension modules are disabled
165template<class TypeTag>
166struct EnableSolvent<TypeTag, TTag::BlackOilModel>
167{ static constexpr bool value = false; };
168
169template<class TypeTag>
170struct EnableExtbo<TypeTag, TTag::BlackOilModel>
171{ static constexpr bool value = false; };
172
173template<class TypeTag>
174struct EnablePolymer<TypeTag, TTag::BlackOilModel>
175{ static constexpr bool value = false; };
176
177template<class TypeTag>
178struct EnablePolymerMW<TypeTag, TTag::BlackOilModel>
179{ static constexpr bool value = false; };
180
181template<class TypeTag>
182struct EnableFoam<TypeTag, TTag::BlackOilModel>
183{ static constexpr bool value = false; };
184
185template<class TypeTag>
186struct EnableBrine<TypeTag, TTag::BlackOilModel>
187{ static constexpr bool value = false; };
188
189template<class TypeTag>
190struct EnableVapwat<TypeTag, TTag::BlackOilModel>
191{ static constexpr bool value = false; };
192
193template<class TypeTag>
194struct EnableDisgasInWater<TypeTag, TTag::BlackOilModel>
195{ static constexpr bool value = false; };
196
197template<class TypeTag>
199{ static constexpr bool value = false; };
200
201template<class TypeTag>
202struct EnableBioeffects<TypeTag, TTag::BlackOilModel>
203{ static constexpr bool value = false; };
204
205template<class TypeTag>
206struct EnergyModuleType<TypeTag, TTag::BlackOilModel>
207{ static constexpr EnergyModules value = EnergyModules::NoTemperature; };
208
210template<class TypeTag>
211struct EnableDiffusion<TypeTag, TTag::BlackOilModel>
212{ static constexpr bool value = false; };
213
215template<class TypeTag>
216struct EnableDispersion<TypeTag, TTag::BlackOilModel>
217{ static constexpr bool value = false; };
218
219template<class TypeTag>
221{ static constexpr bool value = false; };
222
229template<class TypeTag>
231{
232private:
234 static constexpr Scalar alpha =
235 getPropValue<TypeTag, Properties::BlackoilConserveSurfaceVolume>() ? 1000.0 : 1.0;
236
237public:
238 using type = Scalar;
239 static constexpr Scalar value = 1.0/(30.0*4184.0*alpha);
240};
241
243template<class TypeTag>
245{
246private:
248 static constexpr Scalar alpha =
249 getPropValue<TypeTag, Properties::BlackoilConserveSurfaceVolume>() ? 1000.0 : 1.0;
250
251public:
252 using type = Scalar;
253 static constexpr Scalar value = 1.0/(10.0*alpha);
254};
255
256// by default, ebos formulates the conservation equations in terms of mass not surface
257// volumes
258template<class TypeTag>
260{ static constexpr bool value = false; };
261
262} // namespace Opm::Properties
263
264namespace Opm {
265
329template<class TypeTag >
331 : public MultiPhaseBaseModel<TypeTag>
332{
333public:
337
338private:
339 using Implementation = GetPropType<TypeTag, Properties::Model>;
341
346
347 enum { numComponents = FluidSystem::numComponents };
348 enum { numEq = getPropValue<TypeTag, Properties::NumEq>() };
349 enum { enableDiffusion = getPropValue<TypeTag, Properties::EnableDiffusion>() };
350 enum { enableDispersion = getPropValue<TypeTag, Properties::EnableDispersion>() };
351
352 static constexpr bool compositionSwitchEnabled = Indices::compositionSwitchIdx >= 0;
353 static constexpr bool waterEnabled = Indices::waterEnabled;
354
355 using SolventModule = BlackOilSolventModule<TypeTag>;
356 using ExtboModule = BlackOilExtboModule<TypeTag>;
357 using PolymerModule = BlackOilPolymerModule<TypeTag>;
358 using EnergyModule = BlackOilEnergyModule<TypeTag>;
359 using DiffusionModule = BlackOilDiffusionModule<TypeTag, enableDiffusion>;
360 using DispersionModule = BlackOilDispersionModule<TypeTag, enableDispersion>;
361 using BioeffectsModule = BlackOilBioeffectsModule<TypeTag>;
362
363public:
365
366 explicit BlackOilModel(Simulator& simulator)
367 : ParentType(simulator)
368 {
369 eqWeights_.resize(numEq, 1.0);
370 }
371
375 static void registerParameters()
376 {
378
383 DiffusionModule::registerParameters();
385
386 // register runtime parameters of the VTK output modules
390 }
391
395 static std::string name()
396 { return "blackoil"; }
397
401 std::string primaryVarName(int pvIdx) const
402 {
403 if (pvIdx == Indices::waterSwitchIdx) {
404 return "water_switching";
405 }
406 else if (pvIdx == Indices::pressureSwitchIdx) {
407 return "pressure_switching";
408 }
409 else if (static_cast<int>(pvIdx) == Indices::compositionSwitchIdx) {
410 return "composition_switching";
411 }
412 else if (SolventModule::primaryVarApplies(pvIdx)) {
413 return SolventModule::primaryVarName(pvIdx);
414 }
415 else if (ExtboModule::primaryVarApplies(pvIdx)) {
416 return ExtboModule::primaryVarName(pvIdx);
417 }
418 else if (PolymerModule::primaryVarApplies(pvIdx)) {
419 return PolymerModule::primaryVarName(pvIdx);
420 }
421 else if (EnergyModule::primaryVarApplies(pvIdx)) {
422 return EnergyModule::primaryVarName(pvIdx);
423 }
424 else {
425 throw std::logic_error("Invalid primary variable index");
426 }
427 }
428
432 std::string eqName(int eqIdx) const
433 {
434 if (Indices::conti0EqIdx <= eqIdx && eqIdx < Indices::conti0EqIdx + numComponents) {
435 std::ostringstream oss;
436 oss << "conti_" << FluidSystem::phaseName(eqIdx - Indices::conti0EqIdx);
437 return oss.str();
438 }
439 else if (SolventModule::eqApplies(eqIdx)) {
440 return SolventModule::eqName(eqIdx);
441 }
442 else if (ExtboModule::eqApplies(eqIdx)) {
443 return ExtboModule::eqName(eqIdx);
444 }
445 else if (PolymerModule::eqApplies(eqIdx)) {
446 return PolymerModule::eqName(eqIdx);
447 }
448 else if (EnergyModule::eqApplies(eqIdx)) {
449 return EnergyModule::eqName(eqIdx);
450 }
451 else {
452 throw std::logic_error("Invalid equation index");
453 }
454 }
455
459 Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
460 {
461 // do not care about the auxiliary equations as they are supposed to scale
462 // themselves
463 if (globalDofIdx >= this->numGridDof()) {
464 return 1.0;
465 }
466
467 // saturations are always in the range [0, 1]!
468 if (int(Indices::waterSwitchIdx) == int(pvIdx)) {
469 return 1.0;
470 }
471
472 // oil pressures usually are in the range of 100 to 500 bars for typical oil
473 // reservoirs (which is the only relevant application for the black-oil model).
474 else if (int(Indices::pressureSwitchIdx) == int(pvIdx)) {
475 return 1.0 / 300e5;
476 }
477
478 // deal with primary variables stemming from the solvent module
479 else if (SolventModule::primaryVarApplies(pvIdx)) {
481 }
482
483 // deal with primary variables stemming from the extBO module
484 else if (ExtboModule::primaryVarApplies(pvIdx)) {
485 return ExtboModule::primaryVarWeight(pvIdx);
486 }
487
488 // deal with primary variables stemming from the polymer module
489 else if (PolymerModule::primaryVarApplies(pvIdx)) {
491 }
492
493 // deal with primary variables stemming from the energy module
494 else if (EnergyModule::primaryVarApplies(pvIdx)) {
495 return EnergyModule::primaryVarWeight(pvIdx);
496 }
497
498 // if the primary variable is either the gas saturation, Rs or Rv
499 assert(int(Indices::compositionSwitchIdx) == int(pvIdx));
500
501 switch (this->solution(0)[globalDofIdx].primaryVarsMeaningGas()) {
502 case PrimaryVariables::GasMeaning::Sg: return 1.0; // gas saturation
503 case PrimaryVariables::GasMeaning::Rs: return 1.0 / 250.; // gas dissolution factor
504 case PrimaryVariables::GasMeaning::Rv: return 1.0 / 0.025; // oil vaporization factor
505 default: throw std::logic_error("Invalid primary variable meaning flag for gas");
506 }
507 }
508
515 Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
516 {
517 // do not care about the auxiliary equations as they are supposed to scale
518 // themselves
519 if (globalDofIdx >= this->numGridDof()) {
520 return 1.0;
521 }
522
523 return eqWeights_[eqIdx];
524 }
525
526 void setEqWeight(unsigned eqIdx, Scalar value)
527 { eqWeights_[eqIdx] = value; }
528
537 template <class DofEntity>
538 void serializeEntity(std::ostream& outstream, const DofEntity& dof)
539 {
540 const unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
541
542 // write phase state
543 if (!outstream.good()) {
544 throw std::runtime_error("Could not serialize degree of freedom " + std::to_string(dofIdx));
545 }
546
547 // write the primary variables
548 const auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
549 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
550 outstream << priVars[eqIdx] << " ";
551 }
552
553 // write the pseudo primary variables
554 outstream << static_cast<int>(priVars.primaryVarsMeaningGas()) << " ";
555 outstream << static_cast<int>(priVars.primaryVarsMeaningWater()) << " ";
556 outstream << static_cast<int>(priVars.primaryVarsMeaningPressure()) << " ";
557
558 outstream << priVars.pvtRegionIndex() << " ";
559
560 SolventModule::serializeEntity(asImp_(), outstream, dof);
561 ExtboModule::serializeEntity(asImp_(), outstream, dof);
562 PolymerModule::serializeEntity(asImp_(), outstream, dof);
563 EnergyModule::serializeEntity(asImp_(), outstream, dof);
564 }
565
574 template <class DofEntity>
575 void deserializeEntity(std::istream& instream,
576 const DofEntity& dof)
577 {
578 const unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
579
580 // read in the "real" primary variables of the DOF
581 auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
582 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
583 if (!instream.good()) {
584 throw std::runtime_error("Could not deserialize degree of freedom " + std::to_string(dofIdx));
585 }
586 instream >> priVars[eqIdx];
587 }
588
589 // read the pseudo primary variables
590 unsigned primaryVarsMeaningGas;
591 instream >> primaryVarsMeaningGas;
592
593 unsigned primaryVarsMeaningWater;
594 instream >> primaryVarsMeaningWater;
595
596 unsigned primaryVarsMeaningPressure;
597 instream >> primaryVarsMeaningPressure;
598
599 unsigned pvtRegionIdx;
600 instream >> pvtRegionIdx;
601
602 if (!instream.good()) {
603 throw std::runtime_error("Could not deserialize degree of freedom " + std::to_string(dofIdx));
604 }
605
606 SolventModule::deserializeEntity(asImp_(), instream, dof);
607 ExtboModule::deserializeEntity(asImp_(), instream, dof);
608 PolymerModule::deserializeEntity(asImp_(), instream, dof);
609 EnergyModule::deserializeEntity(asImp_(), instream, dof);
610
611 using PVM_G = typename PrimaryVariables::GasMeaning;
612 using PVM_W = typename PrimaryVariables::WaterMeaning;
613 using PVM_P = typename PrimaryVariables::PressureMeaning;
614 priVars.setPrimaryVarsMeaningGas(static_cast<PVM_G>(primaryVarsMeaningGas));
615 priVars.setPrimaryVarsMeaningWater(static_cast<PVM_W>(primaryVarsMeaningWater));
616 priVars.setPrimaryVarsMeaningPressure(static_cast<PVM_P>(primaryVarsMeaningPressure));
617
618 priVars.setPvtRegionIndex(pvtRegionIdx);
619 }
620
628 template <class Restarter>
629 void deserialize(Restarter& res)
630 {
631 ParentType::deserialize(res);
632
633 // set the PVT indices of the primary variables. This is also done by writing
634 // them into the restart file and re-reading them, but it is better to calculate
635 // them from scratch because the input could have been changed in this regard...
636 ElementContext elemCtx(this->simulator_);
637 for (const auto& elem : elements(this->gridView())) {
638 elemCtx.updateStencil(elem);
639 for (unsigned dofIdx = 0; dofIdx < elemCtx.numPrimaryDof(/*timIdx=*/0); ++dofIdx) {
640 const unsigned globalDofIdx = elemCtx.globalSpaceIndex(dofIdx, /*timIdx=*/0);
641 updatePvtRegionIndex_(this->solution(/*timeIdx=*/0)[globalDofIdx],
642 elemCtx,
643 dofIdx,
644 /*timeIdx=*/0);
645 }
646 }
647
648 this->solution(/*timeIdx=*/1) = this->solution(/*timeIdx=*/0);
649 }
650
651/*
652 // hack: this interferes with the static polymorphism trick
653protected:
654 friend ParentType;
655 friend Discretization;
656*/
657
658 template <class Context>
660 const Context& context,
661 unsigned dofIdx,
662 unsigned timeIdx)
663 { updatePvtRegionIndex_(priVars, context, dofIdx, timeIdx); }
664
666 {
668
669 // add the VTK output modules which make sense for the blackoil model
670 SolventModule::registerOutputModules(asImp_(), this->simulator_);
671 PolymerModule::registerOutputModules(asImp_(), this->simulator_);
672 EnergyModule::registerOutputModules(asImp_(), this->simulator_);
673 BioeffectsModule::registerOutputModules(asImp_(), this->simulator_);
674
675 this->addOutputModule(std::make_unique<VtkBlackOilModule<TypeTag>>(this->simulator_));
676 this->addOutputModule(std::make_unique<VtkCompositionModule<TypeTag>>(this->simulator_));
677
678 if constexpr (enableDiffusion) {
679 this->addOutputModule(std::make_unique<VtkDiffusionModule<TypeTag>>(this->simulator_));
680 }
681 }
682
683private:
684 std::vector<Scalar> eqWeights_;
685
686 Implementation& asImp_()
687 { return *static_cast<Implementation*>(this); }
688
689 const Implementation& asImp_() const
690 { return *static_cast<const Implementation*>(this); }
691
692 template <class Context>
693 void updatePvtRegionIndex_(PrimaryVariables& priVars,
694 const Context& context,
695 unsigned dofIdx,
696 unsigned timeIdx)
697 {
698 const unsigned regionIdx = context.problem().pvtRegionIndex(context, dofIdx, timeIdx);
699 priVars.setPvtRegionIndex(regionIdx);
700 }
701};
702
703} // namespace Opm
704
705#endif // OPM_BLACK_OIL_MODEL_HPP
Contains the classes required to extend the black-oil model by bioeffects.
Contains the classes required to extend the black-oil model by brine.
This file contains the default flux module of the blackoil model.
Classes required for molecular diffusion.
Classes required for mechanical dispersion.
Contains the classes required to extend the black-oil model by energy.
Contains the classes required to extend the black-oil model by solvent component. For details,...
Contains the classes required to extend the black-oil model to include the effects of foam.
Contains the classes required to extend the black-oil model by polymer.
Declares the properties required by the black oil model.
Contains the classes required to extend the black-oil model by solvents.
static void registerParameters()
Register all run-time parameters for the black-oil bioeffects module.
Definition: blackoilbioeffectsmodules.hh:139
static void registerOutputModules(Model &model, Simulator &simulator)
Register all bioeffects specific VTK and ECL output modules.
Definition: blackoilbioeffectsmodules.hh:148
Implements a boundary vector for the fully implicit black-oil model.
Definition: blackoilboundaryratevector.hh:48
static std::string eqName(unsigned eqIdx)
Definition: blackoilenergymodules.hh:139
static bool eqApplies(unsigned eqIdx)
Definition: blackoilenergymodules.hh:129
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilenergymodules.hh:114
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilenergymodules.hh:308
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilenergymodules.hh:121
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilenergymodules.hh:318
static void registerOutputModules(Model &model, Simulator &simulator)
Register all energy specific VTK and ECL output modules.
Definition: blackoilenergymodules.hh:96
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilenergymodules.hh:104
static void registerParameters()
Register all run-time parameters for the black-oil energy module.
Definition: blackoilenergymodules.hh:86
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilextbomodules.hh:105
static std::string eqName(unsigned eqIdx)
Definition: blackoilextbomodules.hh:140
static bool eqApplies(unsigned eqIdx)
Definition: blackoilextbomodules.hh:130
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilextbomodules.hh:122
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilextbomodules.hh:289
static void registerParameters()
Register all run-time parameters for the black-oil solvent module.
Definition: blackoilextbomodules.hh:95
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilextbomodules.hh:300
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilextbomodules.hh:115
This template class contains the data which is required to calculate the fluxes of the fluid phases o...
Definition: blackoilextensivequantities.hh:59
Contains the quantities which are are constant within a finite volume in the black-oil model.
Definition: blackoilintensivequantities.hh:85
Calculates the local residual of the black oil model.
Definition: blackoillocalresidual.hh:56
A fully-implicit black-oil flow model.
Definition: blackoilmodel.hh:332
GetPropType< TypeTag, Properties::PrimaryVariables > PrimaryVariables
Definition: blackoilmodel.hh:336
BlackOilModel(Simulator &simulator)
Definition: blackoilmodel.hh:366
std::string primaryVarName(int pvIdx) const
Given an primary variable index, return a human readable name.
Definition: blackoilmodel.hh:401
Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
Returns the relative weight of a primary variable for calculating relative errors.
Definition: blackoilmodel.hh:459
Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
Returns the relative weight of an equation.
Definition: blackoilmodel.hh:515
void supplementInitialSolution_(PrimaryVariables &priVars, const Context &context, unsigned dofIdx, unsigned timeIdx)
Definition: blackoilmodel.hh:659
void serializeEntity(std::ostream &outstream, const DofEntity &dof)
Write the current solution for a degree of freedom to a restart file.
Definition: blackoilmodel.hh:538
void registerOutputModules_()
Definition: blackoilmodel.hh:665
std::string eqName(int eqIdx) const
Given an equation index, return a human readable name.
Definition: blackoilmodel.hh:432
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: blackoilmodel.hh:335
static std::string name()
Definition: blackoilmodel.hh:395
GetPropType< TypeTag, Properties::Indices > Indices
Definition: blackoilmodel.hh:334
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:575
GetPropType< TypeTag, Properties::LocalResidual > LocalResidual
Definition: blackoilmodel.hh:364
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: blackoilmodel.hh:375
void setEqWeight(unsigned eqIdx, Scalar value)
Definition: blackoilmodel.hh:526
void deserialize(Restarter &res)
Deserializes the state of the model.
Definition: blackoilmodel.hh:629
A newton solver which is specific to the black oil model.
Definition: blackoilnewtonmethod.hpp:61
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilpolymermodules.hh:179
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilpolymermodules.hh:339
static void registerParameters()
Register all run-time parameters for the black-oil polymer module.
Definition: blackoilpolymermodules.hh:146
static bool eqApplies(unsigned eqIdx)
Definition: blackoilpolymermodules.hh:199
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilpolymermodules.hh:191
static void registerOutputModules(Model &model, Simulator &simulator)
Register all polymer specific VTK and ECL output modules.
Definition: blackoilpolymermodules.hh:156
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilpolymermodules.hh:164
static std::string eqName(unsigned eqIdx)
Definition: blackoilpolymermodules.hh:214
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilpolymermodules.hh:350
Represents the primary variables used by the black-oil model.
Definition: blackoilprimaryvariables.hh:72
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:62
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilsolventmodules.hh:149
static std::string eqName(unsigned eqIdx)
Definition: blackoilsolventmodules.hh:167
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilsolventmodules.hh:337
static void registerOutputModules(Model &model, Simulator &simulator)
Register all solvent specific VTK and ECL output modules.
Definition: blackoilsolventmodules.hh:124
static void registerParameters()
Register all run-time parameters for the black-oil solvent module.
Definition: blackoilsolventmodules.hh:114
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilsolventmodules.hh:142
static bool eqApplies(unsigned eqIdx)
Definition: blackoilsolventmodules.hh:157
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilsolventmodules.hh:348
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilsolventmodules.hh:132
A base class for fully-implicit multi-phase porous-media flow models which assume multiple fluid phas...
Definition: multiphasebasemodel.hh:168
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: multiphasebasemodel.hh:190
void registerOutputModules_()
Definition: multiphasebasemodel.hh:266
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:80
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
std::string to_string(const ConvergenceReport::ReservoirFailure::Type t)
Provides a Darcy flux module for the blackoil model.
Definition: blackoildarcyfluxmodule.hh:49
The primary variable and equation indices for the three-phase black-oil model.
Definition: blackoilvariableandequationindices.hh:47
The type of the base class for all problems which use this model.
Definition: fvbaseproperties.hh:84
Definition: blackoilproperties.hh:96
Similarly to the energy equation, a scaling is applied to the urea equation in MICP.
Definition: blackoilproperties.hh:100
Enable surface volume scaling.
Definition: blackoilproperties.hh:59
Type of object for specifying boundary conditions.
Definition: fvbaseproperties.hh:119
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
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:104
Data required to calculate a flux over a face.
Definition: fvbaseproperties.hh:149
GetPropType< TypeTag, Properties::Evaluation > Evaluation
Definition: blackoilmodel.hh:160
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: blackoilmodel.hh:159
BlackOilFluidSystem< Scalar > type
Definition: blackoilmodel.hh:161
The fluid systems including the information about the phases.
Definition: multiphasebaseproperties.hh:79
Specifies the relation used for velocity.
Definition: multiphasebaseproperties.hh:83
Enumerations used by the model.
Definition: multiphasebaseproperties.hh:51
The secondary variables within a sub-control volume.
Definition: fvbaseproperties.hh:133
The type of the local residual function.
Definition: fvbaseproperties.hh:94
The type of the model.
Definition: basicproperties.hh:88
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:130
Vector containing volumetric or areal rates of quantities.
Definition: fvbaseproperties.hh:116
The type tag for the black-oil problems.
Definition: blackoilmodel.hh:86
std::tuple< VtkBlackOilPolymer, MultiPhaseBaseModel > InheritsFrom
Definition: blackoilmodel.hh:86