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::EnergyModuleType>() == EnergyModules::SequentialImplicitThermal,
149 getPropValue<TypeTag, Properties::EnableFoam>(),
150 getPropValue<TypeTag, Properties::EnableBrine>(),
151 /*PVOffset=*/0,
152 getPropValue<TypeTag, Properties::EnableBioeffects>()>;
153};
154
156template<class TypeTag>
157struct FluidSystem<TypeTag, TTag::BlackOilModel>
158{
159public:
162 using type = BlackOilFluidSystem<Scalar>;
163};
164
165// by default, all ECL extension modules are disabled
166template<class TypeTag>
167struct EnableSolvent<TypeTag, TTag::BlackOilModel>
168{ static constexpr bool value = false; };
169
170template<class TypeTag>
171struct EnableExtbo<TypeTag, TTag::BlackOilModel>
172{ static constexpr bool value = false; };
173
174template<class TypeTag>
175struct EnablePolymer<TypeTag, TTag::BlackOilModel>
176{ static constexpr bool value = false; };
177
178template<class TypeTag>
179struct EnablePolymerMW<TypeTag, TTag::BlackOilModel>
180{ static constexpr bool value = false; };
181
182template<class TypeTag>
183struct EnableFoam<TypeTag, TTag::BlackOilModel>
184{ static constexpr bool value = false; };
185
186template<class TypeTag>
187struct EnableBrine<TypeTag, TTag::BlackOilModel>
188{ static constexpr bool value = false; };
189
190template<class TypeTag>
191struct EnableVapwat<TypeTag, TTag::BlackOilModel>
192{ static constexpr bool value = false; };
193
194template<class TypeTag>
195struct EnableDisgasInWater<TypeTag, TTag::BlackOilModel>
196{ static constexpr bool value = false; };
197
198template<class TypeTag>
200{ static constexpr bool value = false; };
201
202template<class TypeTag>
203struct EnableBioeffects<TypeTag, TTag::BlackOilModel>
204{ static constexpr bool value = false; };
205
206template<class TypeTag>
207struct EnergyModuleType<TypeTag, TTag::BlackOilModel>
208{ static constexpr EnergyModules value = EnergyModules::NoTemperature; };
209
211template<class TypeTag>
212struct EnableDiffusion<TypeTag, TTag::BlackOilModel>
213{ static constexpr bool value = false; };
214
216template<class TypeTag>
217struct EnableDispersion<TypeTag, TTag::BlackOilModel>
218{ static constexpr bool value = false; };
219
220template<class TypeTag>
222{ static constexpr bool value = false; };
223
230template<class TypeTag>
232{
233private:
235 static constexpr Scalar alpha =
236 getPropValue<TypeTag, Properties::BlackoilConserveSurfaceVolume>() ? 1000.0 : 1.0;
237
238public:
239 using type = Scalar;
240 static constexpr Scalar value = 1.0/(30.0*4184.0*alpha);
241};
242
244template<class TypeTag>
246{
247private:
249 static constexpr Scalar alpha =
250 getPropValue<TypeTag, Properties::BlackoilConserveSurfaceVolume>() ? 1000.0 : 1.0;
251
252public:
253 using type = Scalar;
254 static constexpr Scalar value = 1.0/(10.0*alpha);
255};
256
257// by default, ebos formulates the conservation equations in terms of mass not surface
258// volumes
259template<class TypeTag>
261{ static constexpr bool value = false; };
262
263} // namespace Opm::Properties
264
265namespace Opm {
266
330template<class TypeTag >
332 : public MultiPhaseBaseModel<TypeTag>
333{
334public:
338
339private:
340 using Implementation = GetPropType<TypeTag, Properties::Model>;
342
347
348 enum { numComponents = FluidSystem::numComponents };
349 enum { numEq = getPropValue<TypeTag, Properties::NumEq>() };
350 enum { enableDiffusion = getPropValue<TypeTag, Properties::EnableDiffusion>() };
351 enum { enableDispersion = getPropValue<TypeTag, Properties::EnableDispersion>() };
352
353 static constexpr bool compositionSwitchEnabled = Indices::compositionSwitchIdx >= 0;
354 static constexpr bool waterEnabled = Indices::waterEnabled;
355
356 using SolventModule = BlackOilSolventModule<TypeTag>;
357 using ExtboModule = BlackOilExtboModule<TypeTag>;
358 using PolymerModule = BlackOilPolymerModule<TypeTag>;
359 using EnergyModule = BlackOilEnergyModule<TypeTag>;
360 using DiffusionModule = BlackOilDiffusionModule<TypeTag, enableDiffusion>;
361 using DispersionModule = BlackOilDispersionModule<TypeTag, enableDispersion>;
362 using BioeffectsModule = BlackOilBioeffectsModule<TypeTag>;
363
364public:
366
367 explicit BlackOilModel(Simulator& simulator)
368 : ParentType(simulator)
369 {
370 eqWeights_.resize(numEq, 1.0);
371 }
372
376 static void registerParameters()
377 {
379
384 DiffusionModule::registerParameters();
386
387 // register runtime parameters of the VTK output modules
391 }
392
396 static std::string name()
397 { return "blackoil"; }
398
402 std::string primaryVarName(int pvIdx) const
403 {
404 if (pvIdx == Indices::waterSwitchIdx) {
405 return "water_switching";
406 }
407 else if (pvIdx == Indices::pressureSwitchIdx) {
408 return "pressure_switching";
409 }
410 else if (static_cast<int>(pvIdx) == Indices::compositionSwitchIdx) {
411 return "composition_switching";
412 }
413 else if (SolventModule::primaryVarApplies(pvIdx)) {
414 return SolventModule::primaryVarName(pvIdx);
415 }
416 else if (ExtboModule::primaryVarApplies(pvIdx)) {
417 return ExtboModule::primaryVarName(pvIdx);
418 }
419 else if (PolymerModule::primaryVarApplies(pvIdx)) {
420 return PolymerModule::primaryVarName(pvIdx);
421 }
422 else if (EnergyModule::primaryVarApplies(pvIdx)) {
423 return EnergyModule::primaryVarName(pvIdx);
424 }
425 else {
426 throw std::logic_error("Invalid primary variable index");
427 }
428 }
429
433 std::string eqName(int eqIdx) const
434 {
435 if (Indices::conti0EqIdx <= eqIdx && eqIdx < Indices::conti0EqIdx + numComponents) {
436 std::ostringstream oss;
437 oss << "conti_" << FluidSystem::phaseName(eqIdx - Indices::conti0EqIdx);
438 return oss.str();
439 }
440 else if (SolventModule::eqApplies(eqIdx)) {
441 return SolventModule::eqName(eqIdx);
442 }
443 else if (ExtboModule::eqApplies(eqIdx)) {
444 return ExtboModule::eqName(eqIdx);
445 }
446 else if (PolymerModule::eqApplies(eqIdx)) {
447 return PolymerModule::eqName(eqIdx);
448 }
449 else if (EnergyModule::eqApplies(eqIdx)) {
450 return EnergyModule::eqName(eqIdx);
451 }
452 else {
453 throw std::logic_error("Invalid equation index");
454 }
455 }
456
460 Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
461 {
462 // do not care about the auxiliary equations as they are supposed to scale
463 // themselves
464 if (globalDofIdx >= this->numGridDof()) {
465 return 1.0;
466 }
467
468 // saturations are always in the range [0, 1]!
469 if (int(Indices::waterSwitchIdx) == int(pvIdx)) {
470 return 1.0;
471 }
472
473 // oil pressures usually are in the range of 100 to 500 bars for typical oil
474 // reservoirs (which is the only relevant application for the black-oil model).
475 else if (int(Indices::pressureSwitchIdx) == int(pvIdx)) {
476 return 1.0 / 300e5;
477 }
478
479 // deal with primary variables stemming from the solvent module
480 else if (SolventModule::primaryVarApplies(pvIdx)) {
482 }
483
484 // deal with primary variables stemming from the extBO module
485 else if (ExtboModule::primaryVarApplies(pvIdx)) {
486 return ExtboModule::primaryVarWeight(pvIdx);
487 }
488
489 // deal with primary variables stemming from the polymer module
490 else if (PolymerModule::primaryVarApplies(pvIdx)) {
492 }
493
494 // deal with primary variables stemming from the energy module
495 else if (EnergyModule::primaryVarApplies(pvIdx)) {
496 return EnergyModule::primaryVarWeight(pvIdx);
497 }
498
499 // if the primary variable is either the gas saturation, Rs or Rv
500 assert(int(Indices::compositionSwitchIdx) == int(pvIdx));
501
502 switch (this->solution(0)[globalDofIdx].primaryVarsMeaningGas()) {
503 case PrimaryVariables::GasMeaning::Sg: return 1.0; // gas saturation
504 case PrimaryVariables::GasMeaning::Rs: return 1.0 / 250.; // gas dissolution factor
505 case PrimaryVariables::GasMeaning::Rv: return 1.0 / 0.025; // oil vaporization factor
506 default: throw std::logic_error("Invalid primary variable meaning flag for gas");
507 }
508 }
509
516 Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
517 {
518 // do not care about the auxiliary equations as they are supposed to scale
519 // themselves
520 if (globalDofIdx >= this->numGridDof()) {
521 return 1.0;
522 }
523
524 return eqWeights_[eqIdx];
525 }
526
527 void setEqWeight(unsigned eqIdx, Scalar value)
528 { eqWeights_[eqIdx] = value; }
529
538 template <class DofEntity>
539 void serializeEntity(std::ostream& outstream, const DofEntity& dof)
540 {
541 const unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
542
543 // write phase state
544 if (!outstream.good()) {
545 throw std::runtime_error("Could not serialize degree of freedom " + std::to_string(dofIdx));
546 }
547
548 // write the primary variables
549 const auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
550 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
551 outstream << priVars[eqIdx] << " ";
552 }
553
554 // write the pseudo primary variables
555 outstream << static_cast<int>(priVars.primaryVarsMeaningGas()) << " ";
556 outstream << static_cast<int>(priVars.primaryVarsMeaningWater()) << " ";
557 outstream << static_cast<int>(priVars.primaryVarsMeaningPressure()) << " ";
558
559 outstream << priVars.pvtRegionIndex() << " ";
560
561 SolventModule::serializeEntity(asImp_(), outstream, dof);
562 ExtboModule::serializeEntity(asImp_(), outstream, dof);
563 PolymerModule::serializeEntity(asImp_(), outstream, dof);
564 EnergyModule::serializeEntity(asImp_(), outstream, dof);
565 }
566
575 template <class DofEntity>
576 void deserializeEntity(std::istream& instream,
577 const DofEntity& dof)
578 {
579 const unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
580
581 // read in the "real" primary variables of the DOF
582 auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
583 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
584 if (!instream.good()) {
585 throw std::runtime_error("Could not deserialize degree of freedom " + std::to_string(dofIdx));
586 }
587 instream >> priVars[eqIdx];
588 }
589
590 // read the pseudo primary variables
591 unsigned primaryVarsMeaningGas;
592 instream >> primaryVarsMeaningGas;
593
594 unsigned primaryVarsMeaningWater;
595 instream >> primaryVarsMeaningWater;
596
597 unsigned primaryVarsMeaningPressure;
598 instream >> primaryVarsMeaningPressure;
599
600 unsigned pvtRegionIdx;
601 instream >> pvtRegionIdx;
602
603 if (!instream.good()) {
604 throw std::runtime_error("Could not deserialize degree of freedom " + std::to_string(dofIdx));
605 }
606
607 SolventModule::deserializeEntity(asImp_(), instream, dof);
608 ExtboModule::deserializeEntity(asImp_(), instream, dof);
609 PolymerModule::deserializeEntity(asImp_(), instream, dof);
610 EnergyModule::deserializeEntity(asImp_(), instream, dof);
611
612 using PVM_G = typename PrimaryVariables::GasMeaning;
613 using PVM_W = typename PrimaryVariables::WaterMeaning;
614 using PVM_P = typename PrimaryVariables::PressureMeaning;
615 priVars.setPrimaryVarsMeaningGas(static_cast<PVM_G>(primaryVarsMeaningGas));
616 priVars.setPrimaryVarsMeaningWater(static_cast<PVM_W>(primaryVarsMeaningWater));
617 priVars.setPrimaryVarsMeaningPressure(static_cast<PVM_P>(primaryVarsMeaningPressure));
618
619 priVars.setPvtRegionIndex(pvtRegionIdx);
620 }
621
629 template <class Restarter>
630 void deserialize(Restarter& res)
631 {
632 ParentType::deserialize(res);
633
634 // set the PVT indices of the primary variables. This is also done by writing
635 // them into the restart file and re-reading them, but it is better to calculate
636 // them from scratch because the input could have been changed in this regard...
637 ElementContext elemCtx(this->simulator_);
638 for (const auto& elem : elements(this->gridView())) {
639 elemCtx.updateStencil(elem);
640 for (unsigned dofIdx = 0; dofIdx < elemCtx.numPrimaryDof(/*timIdx=*/0); ++dofIdx) {
641 const unsigned globalDofIdx = elemCtx.globalSpaceIndex(dofIdx, /*timIdx=*/0);
642 updatePvtRegionIndex_(this->solution(/*timeIdx=*/0)[globalDofIdx],
643 elemCtx,
644 dofIdx,
645 /*timeIdx=*/0);
646 }
647 }
648
649 this->solution(/*timeIdx=*/1) = this->solution(/*timeIdx=*/0);
650 }
651
652/*
653 // hack: this interferes with the static polymorphism trick
654protected:
655 friend ParentType;
656 friend Discretization;
657*/
658
659 template <class Context>
661 const Context& context,
662 unsigned dofIdx,
663 unsigned timeIdx)
664 { updatePvtRegionIndex_(priVars, context, dofIdx, timeIdx); }
665
667 {
669
670 // add the VTK output modules which make sense for the blackoil model
671 SolventModule::registerOutputModules(asImp_(), this->simulator_);
672 PolymerModule::registerOutputModules(asImp_(), this->simulator_);
673 EnergyModule::registerOutputModules(asImp_(), this->simulator_);
674 BioeffectsModule::registerOutputModules(asImp_(), this->simulator_);
675
676 this->addOutputModule(std::make_unique<VtkBlackOilModule<TypeTag>>(this->simulator_));
677 this->addOutputModule(std::make_unique<VtkCompositionModule<TypeTag>>(this->simulator_));
678
679 if constexpr (enableDiffusion) {
680 this->addOutputModule(std::make_unique<VtkDiffusionModule<TypeTag>>(this->simulator_));
681 }
682 }
683
684private:
685 std::vector<Scalar> eqWeights_;
686
687 Implementation& asImp_()
688 { return *static_cast<Implementation*>(this); }
689
690 const Implementation& asImp_() const
691 { return *static_cast<const Implementation*>(this); }
692
693 template <class Context>
694 void updatePvtRegionIndex_(PrimaryVariables& priVars,
695 const Context& context,
696 unsigned dofIdx,
697 unsigned timeIdx)
698 {
699 const unsigned regionIdx = context.problem().pvtRegionIndex(context, dofIdx, timeIdx);
700 priVars.setPvtRegionIndex(regionIdx);
701 }
702};
703
704} // namespace Opm
705
706#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:333
GetPropType< TypeTag, Properties::PrimaryVariables > PrimaryVariables
Definition: blackoilmodel.hh:337
BlackOilModel(Simulator &simulator)
Definition: blackoilmodel.hh:367
std::string primaryVarName(int pvIdx) const
Given an primary variable index, return a human readable name.
Definition: blackoilmodel.hh:402
Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
Returns the relative weight of a primary variable for calculating relative errors.
Definition: blackoilmodel.hh:460
Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
Returns the relative weight of an equation.
Definition: blackoilmodel.hh:516
void supplementInitialSolution_(PrimaryVariables &priVars, const Context &context, unsigned dofIdx, unsigned timeIdx)
Definition: blackoilmodel.hh:660
void serializeEntity(std::ostream &outstream, const DofEntity &dof)
Write the current solution for a degree of freedom to a restart file.
Definition: blackoilmodel.hh:539
void registerOutputModules_()
Definition: blackoilmodel.hh:666
std::string eqName(int eqIdx) const
Given an equation index, return a human readable name.
Definition: blackoilmodel.hh:433
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: blackoilmodel.hh:336
static std::string name()
Definition: blackoilmodel.hh:396
GetPropType< TypeTag, Properties::Indices > Indices
Definition: blackoilmodel.hh:335
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:576
GetPropType< TypeTag, Properties::LocalResidual > LocalResidual
Definition: blackoilmodel.hh:365
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: blackoilmodel.hh:376
void setEqWeight(unsigned eqIdx, Scalar value)
Definition: blackoilmodel.hh:527
void deserialize(Restarter &res)
Deserializes the state of the model.
Definition: blackoilmodel.hh:630
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:175
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: multiphasebasemodel.hh:197
void registerOutputModules_()
Definition: multiphasebasemodel.hh:273
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:48
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:161
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: blackoilmodel.hh:160
BlackOilFluidSystem< Scalar > type
Definition: blackoilmodel.hh:162
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: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: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