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 EWOMS_BLACK_OIL_MODEL_HH
29#define EWOMS_BLACK_OIL_MODEL_HH
30
31#include <opm/material/densead/Math.hpp>
32
33#include "blackoilproblem.hh"
34#include "blackoilindices.hh"
39#include "blackoilratevector.hh"
43#include "blackoilproperties.hh"
51
58
59#include <opm/material/fluidsystems/BlackOilFluidSystem.hpp>
60
61#include <sstream>
62#include <string>
63
64namespace Opm {
65template <class TypeTag>
66class BlackOilModel;
67
68template <class TypeTag>
70}
71
72namespace Opm::Properties {
73
74namespace TTag {
76struct BlackOilModel { using InheritsFrom = std::tuple<VtkComposition,
84} // namespace TTag
85
87template<class TypeTag>
89
91template<class TypeTag>
93
95template<class TypeTag>
96struct Model<TypeTag, TTag::BlackOilModel> { using type = BlackOilModel<TypeTag>; };
97
99template<class TypeTag>
100struct BaseProblem<TypeTag, TTag::BlackOilModel> { using type = BlackOilProblem<TypeTag>; };
101
103template<class TypeTag>
104struct RateVector<TypeTag, TTag::BlackOilModel> { using type = BlackOilRateVector<TypeTag>; };
105
107template<class TypeTag>
109
111template<class TypeTag>
113
115template<class TypeTag>
117
119template<class TypeTag>
121
124template<class TypeTag>
126
128template<class TypeTag>
129struct Indices<TypeTag, TTag::BlackOilModel>
131 getPropValue<TypeTag, Properties::EnableExtbo>(),
132 getPropValue<TypeTag, Properties::EnablePolymer>(),
133 getPropValue<TypeTag, Properties::EnableEnergy>(),
134 getPropValue<TypeTag, Properties::EnableFoam>(),
135 getPropValue<TypeTag, Properties::EnableBrine>(),
136 /*PVOffset=*/0,
137 getPropValue<TypeTag, Properties::EnableMICP>()>; };
138
140template<class TypeTag>
141struct FluidSystem<TypeTag, TTag::BlackOilModel>
142{
143public:
146 using type = BlackOilFluidSystem<Scalar>;
147};
148
149// by default, all ECL extension modules are disabled
150template<class TypeTag>
151struct EnableSolvent<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
152template<class TypeTag>
153struct EnableExtbo<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
154template<class TypeTag>
155struct EnablePolymer<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
156template<class TypeTag>
157struct EnablePolymerMW<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
158template<class TypeTag>
159struct EnableFoam<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
160template<class TypeTag>
161struct EnableBrine<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
162template<class TypeTag>
163struct EnableVapwat<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
164template<class TypeTag>
165struct EnableDisgasInWater<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
166template<class TypeTag>
167struct EnableSaltPrecipitation<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
168template<class TypeTag>
169struct EnableMICP<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
170
172template<class TypeTag>
173struct EnableTemperature<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
174template<class TypeTag>
175struct EnableEnergy<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
176
178template<class TypeTag>
179struct EnableDiffusion<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
180
182template<class TypeTag>
183struct EnableDispersion<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
184
191template<class TypeTag>
193{
194private:
196 static constexpr Scalar alpha = getPropValue<TypeTag, Properties::BlackoilConserveSurfaceVolume>() ? 1000.0 : 1.0;
197
198public:
199 using type = Scalar;
200 static constexpr Scalar value = 1.0/(30.0*4184.0*alpha);
201};
202
203// by default, ebos formulates the conservation equations in terms of mass not surface
204// volumes
205template<class TypeTag>
206struct BlackoilConserveSurfaceVolume<TypeTag, TTag::BlackOilModel> { static constexpr bool value = false; };
207
208} // namespace Opm::Properties
209
210namespace Opm {
211
275template<class TypeTag >
277 : public MultiPhaseBaseModel<TypeTag>
278{
279public:
283private:
284 using Implementation = GetPropType<TypeTag, Properties::Model>;
286
291
292 enum { numPhases = getPropValue<TypeTag, Properties::NumPhases>() };
293 enum { numComponents = FluidSystem::numComponents };
294 enum { numEq = getPropValue<TypeTag, Properties::NumEq>() };
295 enum { enableDiffusion = getPropValue<TypeTag, Properties::EnableDiffusion>() };
296 enum { enableDispersion = getPropValue<TypeTag, Properties::EnableDispersion>() };
297
298 static constexpr bool compositionSwitchEnabled = Indices::compositionSwitchIdx >= 0;
299 static constexpr bool waterEnabled = Indices::waterEnabled;
300
301 using SolventModule = BlackOilSolventModule<TypeTag>;
302 using ExtboModule = BlackOilExtboModule<TypeTag>;
303 using PolymerModule = BlackOilPolymerModule<TypeTag>;
304 using EnergyModule = BlackOilEnergyModule<TypeTag>;
305 using DiffusionModule = BlackOilDiffusionModule<TypeTag, enableDiffusion>;
306 using DispersionModule = BlackOilDispersionModule<TypeTag, enableDispersion>;
307 using MICPModule = BlackOilMICPModule<TypeTag>;
308
309public:
310
312
313 BlackOilModel(Simulator& simulator)
314 : ParentType(simulator)
315 {
316 eqWeights_.resize(numEq, 1.0);
317 }
318
322 static void registerParameters()
323 {
325
330 DiffusionModule::registerParameters();
332
333 // register runtime parameters of the VTK output modules
337 }
338
342 static std::string name()
343 { return "blackoil"; }
344
348 std::string primaryVarName(int pvIdx) const
349 {
350 std::ostringstream oss;
351
352 if (pvIdx == Indices::waterSwitchIdx)
353 oss << "water_switching";
354 else if (pvIdx == Indices::pressureSwitchIdx)
355 oss << "pressure_switching";
356 else if (static_cast<int>(pvIdx) == Indices::compositionSwitchIdx)
357 oss << "composition_switching";
358 else if (SolventModule::primaryVarApplies(pvIdx))
359 return SolventModule::primaryVarName(pvIdx);
360 else if (ExtboModule::primaryVarApplies(pvIdx))
361 return ExtboModule::primaryVarName(pvIdx);
362 else if (PolymerModule::primaryVarApplies(pvIdx))
363 return PolymerModule::primaryVarName(pvIdx);
364 else if (EnergyModule::primaryVarApplies(pvIdx))
365 return EnergyModule::primaryVarName(pvIdx);
366 else
367 assert(false);
368
369 return oss.str();
370 }
371
375 std::string eqName(int eqIdx) const
376 {
377 std::ostringstream oss;
378
379 if (Indices::conti0EqIdx <= eqIdx && eqIdx < Indices::conti0EqIdx + numComponents)
380 oss << "conti_" << FluidSystem::phaseName(eqIdx - Indices::conti0EqIdx);
381 else if (SolventModule::eqApplies(eqIdx))
382 return SolventModule::eqName(eqIdx);
383 else if (ExtboModule::eqApplies(eqIdx))
384 return ExtboModule::eqName(eqIdx);
385 else if (PolymerModule::eqApplies(eqIdx))
386 return PolymerModule::eqName(eqIdx);
387 else if (EnergyModule::eqApplies(eqIdx))
388 return EnergyModule::eqName(eqIdx);
389 else
390 assert(false);
391
392 return oss.str();
393 }
394
398 Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
399 {
400 // do not care about the auxiliary equations as they are supposed to scale
401 // themselves
402 if (globalDofIdx >= this->numGridDof())
403 return 1.0;
404
405 // saturations are always in the range [0, 1]!
406 if (int(Indices::waterSwitchIdx) == int(pvIdx))
407 return 1.0;
408
409 // oil pressures usually are in the range of 100 to 500 bars for typical oil
410 // reservoirs (which is the only relevant application for the black-oil model).
411 else if (int(Indices::pressureSwitchIdx) == int(pvIdx))
412 return 1.0/300e5;
413
414 // deal with primary variables stemming from the solvent module
415 else if (SolventModule::primaryVarApplies(pvIdx))
417
418 // deal with primary variables stemming from the extBO module
419 else if (ExtboModule::primaryVarApplies(pvIdx))
420 return ExtboModule::primaryVarWeight(pvIdx);
421
422 // deal with primary variables stemming from the polymer module
423 else if (PolymerModule::primaryVarApplies(pvIdx))
425
426 // deal with primary variables stemming from the energy module
427 else if (EnergyModule::primaryVarApplies(pvIdx))
428 return EnergyModule::primaryVarWeight(pvIdx);
429
430 // if the primary variable is either the gas saturation, Rs or Rv
431 assert(int(Indices::compositionSwitchIdx) == int(pvIdx));
432
433 auto pvMeaning = this->solution(0)[globalDofIdx].primaryVarsMeaningGas();
434 if (pvMeaning == PrimaryVariables::GasMeaning::Sg)
435 return 1.0; // gas saturation
436 else if (pvMeaning == PrimaryVariables::GasMeaning::Rs)
437 return 1.0/250.; // gas dissolution factor
438 else {
439 assert(pvMeaning == PrimaryVariables::GasMeaning::Rv);
440 return 1.0/0.025; // oil vaporization factor
441 }
442
443 }
444
448 Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
449 {
450 // do not care about the auxiliary equations as they are supposed to scale
451 // themselves
452 if (globalDofIdx >= this->numGridDof())
453 return 1.0;
454
455 return eqWeights_[eqIdx];
456 }
457
458 void setEqWeight(unsigned eqIdx, Scalar value) {
459 eqWeights_[eqIdx] = value;
460 }
461
470 template <class DofEntity>
471 void serializeEntity(std::ostream& outstream, const DofEntity& dof)
472 {
473 unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
474
475 // write phase state
476 if (!outstream.good())
477 throw std::runtime_error("Could not serialize degree of freedom "+std::to_string(dofIdx));
478
479 // write the primary variables
480 const auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
481 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx)
482 outstream << priVars[eqIdx] << " ";
483
484 // write the pseudo primary variables
485 outstream << static_cast<int>(priVars.primaryVarsMeaningGas()) << " ";
486 outstream << static_cast<int>(priVars.primaryVarsMeaningWater()) << " ";
487 outstream << static_cast<int>(priVars.primaryVarsMeaningPressure()) << " ";
488
489 outstream << priVars.pvtRegionIndex() << " ";
490
491 SolventModule::serializeEntity(asImp_(), outstream, dof);
492 ExtboModule::serializeEntity(asImp_(), outstream, dof);
493 PolymerModule::serializeEntity(asImp_(), outstream, dof);
494 EnergyModule::serializeEntity(asImp_(), outstream, dof);
495 }
496
505 template <class DofEntity>
506 void deserializeEntity(std::istream& instream,
507 const DofEntity& dof)
508 {
509 unsigned dofIdx = static_cast<unsigned>(asImp_().dofMapper().index(dof));
510
511 // read in the "real" primary variables of the DOF
512 auto& priVars = this->solution(/*timeIdx=*/0)[dofIdx];
513 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
514 if (!instream.good())
515 throw std::runtime_error("Could not deserialize degree of freedom "+std::to_string(dofIdx));
516 instream >> priVars[eqIdx];
517 }
518
519 // read the pseudo primary variables
520 unsigned primaryVarsMeaningGas;
521 instream >> primaryVarsMeaningGas;
522
523 unsigned primaryVarsMeaningWater;
524 instream >> primaryVarsMeaningWater;
525
526 unsigned primaryVarsMeaningPressure;
527 instream >> primaryVarsMeaningPressure;
528
529 unsigned pvtRegionIdx;
530 instream >> pvtRegionIdx;
531
532 if (!instream.good())
533 throw std::runtime_error("Could not deserialize degree of freedom "+std::to_string(dofIdx));
534
535 SolventModule::deserializeEntity(asImp_(), instream, dof);
536 ExtboModule::deserializeEntity(asImp_(), instream, dof);
537 PolymerModule::deserializeEntity(asImp_(), instream, dof);
538 EnergyModule::deserializeEntity(asImp_(), instream, dof);
539
540 using PVM_G = typename PrimaryVariables::GasMeaning;
541 using PVM_W = typename PrimaryVariables::WaterMeaning;
542 using PVM_P = typename PrimaryVariables::PressureMeaning;
543 priVars.setPrimaryVarsMeaningGas(static_cast<PVM_G>(primaryVarsMeaningGas));
544 priVars.setPrimaryVarsMeaningWater(static_cast<PVM_W>(primaryVarsMeaningWater));
545 priVars.setPrimaryVarsMeaningPressure(static_cast<PVM_P>(primaryVarsMeaningPressure));
546
547 priVars.setPvtRegionIndex(pvtRegionIdx);
548 }
549
557 template <class Restarter>
558 void deserialize(Restarter& res)
559 {
560 ParentType::deserialize(res);
561
562 // set the PVT indices of the primary variables. This is also done by writing
563 // them into the restart file and re-reading them, but it is better to calculate
564 // them from scratch because the input could have been changed in this regard...
565 ElementContext elemCtx(this->simulator_);
566 for (const auto& elem : elements(this->gridView())) {
567 elemCtx.updateStencil(elem);
568 for (unsigned dofIdx = 0; dofIdx < elemCtx.numPrimaryDof(/*timIdx=*/0); ++dofIdx) {
569 unsigned globalDofIdx = elemCtx.globalSpaceIndex(dofIdx, /*timIdx=*/0);
570 updatePvtRegionIndex_(this->solution(/*timeIdx=*/0)[globalDofIdx],
571 elemCtx,
572 dofIdx,
573 /*timeIdx=*/0);
574 }
575 }
576
577 this->solution(/*timeIdx=*/1) = this->solution(/*timeIdx=*/0);
578 }
579
580/*
581 // hack: this interferes with the static polymorphism trick
582protected:
583 friend ParentType;
584 friend Discretization;
585*/
586
587 template <class Context>
589 const Context& context,
590 unsigned dofIdx,
591 unsigned timeIdx)
592 { updatePvtRegionIndex_(priVars, context, dofIdx, timeIdx); }
593
595 {
597
598 // add the VTK output modules which make sense for the blackoil model
599 SolventModule::registerOutputModules(asImp_(), this->simulator_);
600 PolymerModule::registerOutputModules(asImp_(), this->simulator_);
601 EnergyModule::registerOutputModules(asImp_(), this->simulator_);
602 MICPModule::registerOutputModules(asImp_(), this->simulator_);
603
604 this->addOutputModule(new VtkBlackOilModule<TypeTag>(this->simulator_));
605 this->addOutputModule(new VtkCompositionModule<TypeTag>(this->simulator_));
606
607 if constexpr (enableDiffusion)
608 this->addOutputModule(new VtkDiffusionModule<TypeTag>(this->simulator_));
609 }
610
611private:
612
613 std::vector<Scalar> eqWeights_;
614 Implementation& asImp_()
615 { return *static_cast<Implementation*>(this); }
616 const Implementation& asImp_() const
617 { return *static_cast<const Implementation*>(this); }
618
619 template <class Context>
620 void updatePvtRegionIndex_(PrimaryVariables& priVars,
621 const Context& context,
622 unsigned dofIdx,
623 unsigned timeIdx)
624 {
625 unsigned regionIdx = context.problem().pvtRegionIndex(context, dofIdx, timeIdx);
626 priVars.setPvtRegionIndex(regionIdx);
627 }
628};
629} // namespace Opm
630
631#endif
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 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 MICP.
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.
Implements a boundary vector for the fully implicit black-oil model.
Definition: blackoilboundaryratevector.hh:46
static void registerParameters()
Register all run-time parameters for the black-oil energy module.
Definition: blackoilenergymodules.hh:77
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilenergymodules.hh:309
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilenergymodules.hh:93
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilenergymodules.hh:102
static std::string eqName(unsigned eqIdx)
Definition: blackoilenergymodules.hh:125
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilenergymodules.hh:299
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilenergymodules.hh:109
static void registerOutputModules(Model &model, Simulator &simulator)
Register all energy specific VTK and ECL output modules.
Definition: blackoilenergymodules.hh:86
static bool eqApplies(unsigned eqIdx)
Definition: blackoilenergymodules.hh:117
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilextbomodules.hh:273
static std::string eqName(unsigned eqIdx)
Definition: blackoilextbomodules.hh:304
static bool eqApplies(unsigned eqIdx)
Definition: blackoilextbomodules.hh:296
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilextbomodules.hh:288
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilextbomodules.hh:451
static void registerParameters()
Register all run-time parameters for the black-oil solvent module.
Definition: blackoilextbomodules.hh:261
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilextbomodules.hh:462
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilextbomodules.hh:281
This template class contains the data which is required to calculate the fluxes of the fluid phases o...
Definition: blackoilextensivequantities.hh:60
Contains the quantities which are are constant within a finite volume in the black-oil model.
Definition: blackoilintensivequantities.hh:82
Calculates the local residual of the black oil model.
Definition: blackoillocalresidual.hh:50
static void registerParameters()
Register all run-time parameters for the black-oil MICP module.
Definition: blackoilmicpmodules.hh:193
static void registerOutputModules(Model &model, Simulator &simulator)
Register all MICP specific VTK and ECL output modules.
Definition: blackoilmicpmodules.hh:205
A fully-implicit black-oil flow model.
Definition: blackoilmodel.hh:278
GetPropType< TypeTag, Properties::PrimaryVariables > PrimaryVariables
Definition: blackoilmodel.hh:282
BlackOilModel(Simulator &simulator)
Definition: blackoilmodel.hh:313
std::string primaryVarName(int pvIdx) const
Given an primary variable index, return a human readable name.
Definition: blackoilmodel.hh:348
Scalar primaryVarWeight(unsigned globalDofIdx, unsigned pvIdx) const
Returns the relative weight of a primary variable for calculating relative errors.
Definition: blackoilmodel.hh:398
Scalar eqWeight(unsigned globalDofIdx, unsigned eqIdx) const
Returns the relative weight of an equation.
Definition: blackoilmodel.hh:448
void supplementInitialSolution_(PrimaryVariables &priVars, const Context &context, unsigned dofIdx, unsigned timeIdx)
Definition: blackoilmodel.hh:588
void serializeEntity(std::ostream &outstream, const DofEntity &dof)
Write the current solution for a degree of freedom to a restart file.
Definition: blackoilmodel.hh:471
void registerOutputModules_()
Definition: blackoilmodel.hh:594
std::string eqName(int eqIdx) const
Given an equation index, return a human readable name.
Definition: blackoilmodel.hh:375
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: blackoilmodel.hh:281
static std::string name()
Definition: blackoilmodel.hh:342
GetPropType< TypeTag, Properties::Indices > Indices
Definition: blackoilmodel.hh:280
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:506
GetPropType< TypeTag, Properties::LocalResidual > LocalResidual
Definition: blackoilmodel.hh:311
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: blackoilmodel.hh:322
void setEqWeight(unsigned eqIdx, Scalar value)
Definition: blackoilmodel.hh:458
void deserialize(Restarter &res)
Deserializes the state of the model.
Definition: blackoilmodel.hh:558
A newton solver which is specific to the black oil model.
Definition: blackoilnewtonmethod.hh:139
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilpolymermodules.hh:421
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilpolymermodules.hh:576
static void registerParameters()
Register all run-time parameters for the black-oil polymer module.
Definition: blackoilpolymermodules.hh:393
static bool eqApplies(unsigned eqIdx)
Definition: blackoilpolymermodules.hh:441
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilpolymermodules.hh:433
static void registerOutputModules(Model &model, Simulator &simulator)
Register all polymer specific VTK and ECL output modules.
Definition: blackoilpolymermodules.hh:402
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilpolymermodules.hh:409
static std::string eqName(unsigned eqIdx)
Definition: blackoilpolymermodules.hh:453
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilpolymermodules.hh:587
Represents the primary variables used by the black-oil model.
Definition: blackoilprimaryvariables.hh:75
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:53
static Scalar primaryVarWeight(unsigned pvIdx)
Definition: blackoilsolventmodules.hh:398
static std::string eqName(unsigned eqIdx)
Definition: blackoilsolventmodules.hh:414
static void serializeEntity(const Model &model, std::ostream &outstream, const DofEntity &dof)
Definition: blackoilsolventmodules.hh:581
static void registerOutputModules(Model &model, Simulator &simulator)
Register all solvent specific VTK and ECL output modules.
Definition: blackoilsolventmodules.hh:376
static void registerParameters()
Register all run-time parameters for the black-oil solvent module.
Definition: blackoilsolventmodules.hh:367
static std::string primaryVarName(unsigned pvIdx)
Definition: blackoilsolventmodules.hh:391
static bool eqApplies(unsigned eqIdx)
Definition: blackoilsolventmodules.hh:406
static void deserializeEntity(Model &model, std::istream &instream, const DofEntity &dof)
Definition: blackoilsolventmodules.hh:592
static bool primaryVarApplies(unsigned pvIdx)
Definition: blackoilsolventmodules.hh:383
Definition: blackoilmodel.hh:69
A base class for fully-implicit multi-phase porous-media flow models which assume multiple fluid phas...
Definition: multiphasebasemodel.hh:153
static void registerParameters()
Register all run-time parameters for the immiscible model.
Definition: multiphasebasemodel.hh:179
void registerOutputModules_()
Definition: multiphasebasemodel.hh:254
VTK output module for the black oil model's parameters.
Definition: vtkblackoilmodule.hh:109
static void registerParameters()
Register all run-time parameters for the multi-phase VTK output module.
Definition: vtkblackoilmodule.hh:142
VTK output module for the fluid composition.
Definition: vtkcompositionmodule.hh:97
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkcompositionmodule.hh:124
VTK output module for quantities which make sense for models which incorperate molecular diffusion.
Definition: vtkdiffusionmodule.hh:82
static void registerParameters()
Register all run-time parameters for the Vtk output module.
Definition: vtkdiffusionmodule.hh:109
Definition: blackoilmodel.hh:72
Definition: blackoilboundaryratevector.hh:37
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:242
Provides a Darcy flux module for the blackoil model.
Definition: blackoildarcyfluxmodule.hh:49
The primary variable and equation indices for the black-oil model.
Definition: blackoilindices.hh:40
The type of the base class for all problems which use this model.
Definition: fvbaseproperties.hh:101
Definition: blackoilproperties.hh:91
Enable surface volume scaling.
Definition: blackoilproperties.hh:54
Type of object for specifying boundary conditions.
Definition: fvbaseproperties.hh:136
Enable the ECL-blackoil extension for salt.
Definition: blackoilproperties.hh:60
Enable diffusive fluxes?
Definition: multiphasebaseproperties.hh:82
Enable the ECL-blackoil extension for disolution of gas into water.
Definition: blackoilproperties.hh:69
Enable dispersive fluxes?
Definition: multiphasebaseproperties.hh:85
Specify whether energy should be considered as a conservation quantity or not.
Definition: multiphasebaseproperties.hh:76
Enable the ECL-blackoil extension for extended BO. ("Second gas" - alternative approach)
Definition: blackoilproperties.hh:45
Enable the ECL-blackoil extension for foam.
Definition: blackoilproperties.hh:57
Enable the ECL-blackoil extension for MICP.
Definition: blackoilproperties.hh:72
Enable the tracking polymer molecular weight tracking and related functionalities.
Definition: blackoilproperties.hh:51
Enable the ECL-blackoil extension for polymer.
Definition: blackoilproperties.hh:48
Enable the ECL-blackoil extension for salt precipitation.
Definition: blackoilproperties.hh:63
Enable the ECL-blackoil extension for solvents. ("Second gas")
Definition: blackoilproperties.hh:42
Definition: blackoilproperties.hh:78
Enable the ECL-blackoil extension for water evaporation.
Definition: blackoilproperties.hh:66
Data required to calculate a flux over a face.
Definition: fvbaseproperties.hh:166
GetPropType< TypeTag, Properties::Evaluation > Evaluation
Definition: blackoilmodel.hh:145
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: blackoilmodel.hh:144
BlackOilFluidSystem< Scalar > type
Definition: blackoilmodel.hh:146
The fluid systems including the information about the phases.
Definition: multiphasebaseproperties.hh:69
Specifies the relation used for velocity.
Definition: multiphasebaseproperties.hh:72
Enumerations used by the model.
Definition: multiphasebaseproperties.hh:48
The secondary variables within a sub-control volume.
Definition: fvbaseproperties.hh:150
The type of the local residual function.
Definition: fvbaseproperties.hh:111
The type of the model.
Definition: basicproperties.hh:81
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:147
Vector containing volumetric or areal rates of quantities.
Definition: fvbaseproperties.hh:133
The type tag for the black-oil problems.
Definition: blackoilmodel.hh:76
std::tuple< VtkComposition, VtkBlackOilEnergy, VtkDiffusion, VtkBlackOilPolymer, VtkBlackOilSolvent, VtkBlackOil, MultiPhaseBaseModel, VtkBlackOilMICP > InheritsFrom
Definition: blackoilmodel.hh:83
Definition: multiphasebasemodel.hh:57
Definition: vtkblackoilenergymodule.hh:48
Definition: vtkblackoilmicpmodule.hh:48
Definition: vtkblackoilmodule.hh:48
Definition: vtkblackoilpolymermodule.hh:48
Definition: vtkblackoilsolventmodule.hh:48
Definition: vtkcompositionmodule.hh:43
Definition: vtkdiffusionmodule.hh:46