blackoilmicpmodules.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_MICP_MODULE_HH
29#define OPM_BLACK_OIL_MICP_MODULE_HH
30
31#include <dune/common/fvector.hh>
32
33#include <opm/material/common/MathToolbox.hpp>
34
37
39
40#include <cmath>
41#include <memory>
42#include <numeric>
43#include <stdexcept>
44
45namespace Opm {
46
52template <class TypeTag, bool enableMICPV = getPropValue<TypeTag, Properties::EnableMICP>()>
54{
68
69 using Toolbox = MathToolbox<Evaluation>;
70
71 using TabulatedFunction = typename BlackOilMICPParams<Scalar>::TabulatedFunction;
72
73 enum { waterCompIdx = FluidSystem::waterCompIdx };
74
75 static constexpr unsigned microbialConcentrationIdx = Indices::microbialConcentrationIdx;
76 static constexpr unsigned oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
77 static constexpr unsigned ureaConcentrationIdx = Indices::ureaConcentrationIdx;
78 static constexpr unsigned biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
79 static constexpr unsigned calciteConcentrationIdx = Indices::calciteConcentrationIdx;
80 static constexpr unsigned contiMicrobialEqIdx = Indices::contiMicrobialEqIdx;
81 static constexpr unsigned contiOxygenEqIdx = Indices::contiOxygenEqIdx;
82 static constexpr unsigned contiUreaEqIdx = Indices::contiUreaEqIdx;
83 static constexpr unsigned contiBiofilmEqIdx = Indices::contiBiofilmEqIdx;
84 static constexpr unsigned contiCalciteEqIdx = Indices::contiCalciteEqIdx;
85 static constexpr unsigned waterPhaseIdx = FluidSystem::waterPhaseIdx;
86
87 static constexpr unsigned enableMICP = enableMICPV;
88
89 static constexpr unsigned numEq = getPropValue<TypeTag, Properties::NumEq>();
90
91public:
94 {
95 params_ = params;
96 }
97
101 static void registerParameters()
102 {
103 if constexpr (enableMICP) {
105 }
106 }
107
111 static void registerOutputModules(Model& model,
112 Simulator& simulator)
113 {
114 if constexpr (enableMICP) {
115 model.addOutputModule(std::make_unique<VtkBlackOilMICPModule<TypeTag>>(simulator));
116 }
117 }
118
119 static bool eqApplies(unsigned eqIdx)
120 {
121 if constexpr (enableMICP) {
122 return
123 eqIdx == contiMicrobialEqIdx
124 || eqIdx == contiOxygenEqIdx
125 || eqIdx == contiUreaEqIdx
126 || eqIdx == contiBiofilmEqIdx
127 || eqIdx == contiCalciteEqIdx;
128 }
129 else {
130 return false;
131 }
132 }
133
134 static Scalar eqWeight([[maybe_unused]] unsigned eqIdx)
135 {
136 assert(eqApplies(eqIdx));
137
138 // TODO: it may be beneficial to chose this differently.
139 return static_cast<Scalar>(1.0);
140 }
141
142 // must be called after water storage is computed
143 template <class LhsEval>
144 static void addStorage(Dune::FieldVector<LhsEval, numEq>& storage,
145 const IntensiveQuantities& intQuants)
146 {
147 if constexpr (enableMICP) {
148 const auto& fs = intQuants.fluidState();
149
150 // avoid singular matrix if no water is present
151 const LhsEval surfaceVolumeWater =
152 max(Toolbox::template decay<LhsEval>(fs.invB(waterPhaseIdx)) *
153 Toolbox::template decay<LhsEval>(intQuants.porosity()),
154 1e-10);
155
156 // suspended microbes in water phase
157 const LhsEval massMicrobes = surfaceVolumeWater *
158 Toolbox::template decay<LhsEval>(intQuants.microbialConcentration());
159 const LhsEval accumulationMicrobes = massMicrobes;
160 storage[contiMicrobialEqIdx] += accumulationMicrobes;
161
162 // oxygen in water phase
163 const LhsEval massOxygen = surfaceVolumeWater *
164 Toolbox::template decay<LhsEval>(intQuants.oxygenConcentration());
165 const LhsEval accumulationOxygen = massOxygen;
166 storage[contiOxygenEqIdx] += accumulationOxygen;
167
168 // urea in water phase (applying the scaling factor for the urea equation)
169 const LhsEval massUrea = surfaceVolumeWater *
170 Toolbox::template decay<LhsEval>(intQuants.ureaConcentration());
171 const LhsEval accumulationUrea = massUrea;
172 storage[contiUreaEqIdx] += accumulationUrea;
173 storage[contiUreaEqIdx] *= getPropValue<TypeTag, Properties::BlackOilUreaScalingFactor>();
174
175 // biofilm
176 const LhsEval massBiofilm = Toolbox::template decay<LhsEval>(intQuants.biofilmConcentration());
177 const LhsEval accumulationBiofilm = massBiofilm;
178 storage[contiBiofilmEqIdx] += accumulationBiofilm;
179
180 // calcite
181 const LhsEval massCalcite = Toolbox::template decay<LhsEval>(intQuants.calciteConcentration());
182 const LhsEval accumulationCalcite = massCalcite;
183 storage[contiCalciteEqIdx] += accumulationCalcite;
184 }
185 }
186
187 template <class UpEval, class Eval, class IntensiveQuantities>
188 static void addMICPFluxes_(RateVector& flux,
189 const Eval& volumeFlux,
190 const IntensiveQuantities& upFs)
191 {
192 if constexpr (enableMICP) {
193 flux[contiMicrobialEqIdx] += decay<UpEval>(upFs.microbialConcentration()) * volumeFlux;
194 flux[contiOxygenEqIdx] += decay<UpEval>(upFs.oxygenConcentration()) * volumeFlux;
195 flux[contiUreaEqIdx] += decay<UpEval>(upFs.ureaConcentration()) * volumeFlux;
196 }
197 }
198
199 // since the urea concentration can be much larger than 1, then we apply a scaling factor
200 static void applyScaling(RateVector& flux)
201 {
202 if constexpr (enableMICP) {
203 flux[contiUreaEqIdx] *= getPropValue<TypeTag, Properties::BlackOilUreaScalingFactor>();
204 }
205 }
206
207 static void computeFlux([[maybe_unused]] RateVector& flux,
208 [[maybe_unused]] const ElementContext& elemCtx,
209 [[maybe_unused]] unsigned scvfIdx,
210 [[maybe_unused]] unsigned timeIdx)
211 {
212 if constexpr (enableMICP) {
213 flux[contiMicrobialEqIdx] = 0.0;
214 flux[contiOxygenEqIdx] = 0.0;
215 flux[contiUreaEqIdx] = 0.0;
216 const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
217 const unsigned focusIdx = elemCtx.focusDofIndex();
218 const unsigned upIdx = extQuants.upstreamIndex(waterPhaseIdx);
219 if (upIdx == focusIdx) {
220 addMICPFluxes_<Evaluation>(flux, elemCtx, scvfIdx, timeIdx);
221 }
222 else {
223 addMICPFluxes_<Scalar>(flux, elemCtx, scvfIdx, timeIdx);
224 }
225 }
226 }
227
228 template <class UpstreamEval>
229 static void addMICPFluxes_(RateVector& flux,
230 const ElementContext& elemCtx,
231 unsigned scvfIdx,
232 unsigned timeIdx)
233 {
234 const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
235 const unsigned upIdx = extQuants.upstreamIndex(waterPhaseIdx);
236 const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
237 const auto& fs = up.fluidState();
238 const auto& volFlux = extQuants.volumeFlux(waterPhaseIdx);
239 addMICPFluxes_<UpstreamEval>(flux, volFlux, fs);
240 }
241
242 // see https://doi.org/10.1016/j.ijggc.2021.103256 for the MICP processes in the model
243 static void addSource(RateVector& source,
244 const Problem& problem,
245 const IntensiveQuantities& intQuants,
246 unsigned globalSpaceIdex)
247 {
248 if constexpr (enableMICP) {
249 const auto& velocityInf = problem.model().linearizer().getVelocityInfo();
250 const auto& velocityInfos = velocityInf[globalSpaceIdex];
251 const Scalar normVelocityCell =
252 std::accumulate(velocityInfos.begin(), velocityInfos.end(), 0.0,
253 [](const auto acc, const auto& info)
254 { return max(acc, std::abs(info.velocity[waterPhaseIdx])); });
255
256 // get the model parameters
257 const auto b = intQuants.fluidState().invB(waterPhaseIdx);
258 const unsigned satnumIdx = problem.satnumRegionIndex(globalSpaceIdex);
259 const Scalar k_a = microbialAttachmentRate(satnumIdx);
260 const Scalar k_d = microbialDeathRate(satnumIdx);
261 const Scalar rho_b = densityBiofilm(satnumIdx);
262 const Scalar rho_c = densityCalcite(satnumIdx);
263 const Scalar k_str = detachmentRate(satnumIdx);
264 const Scalar eta = detachmentExponent(satnumIdx);
265 const Scalar k_o = halfVelocityOxygen(satnumIdx);
266 const Scalar k_u = halfVelocityUrea(satnumIdx);
267 const Scalar mu = maximumGrowthRate(satnumIdx);
268 const Scalar mu_u = maximumUreaUtilization(satnumIdx);
269 const Scalar Y_sb = yieldGrowthCoefficient(satnumIdx);
270 const Scalar F = oxygenConsumptionFactor(satnumIdx);
271 const Scalar Y_uc = yieldUreaToCalciteCoefficient(satnumIdx);
272
273 // compute Monod terms (the negative region is replaced by a straight line)
274 // Schäfer et al (1998) https://doi.org/10.1016/S0169-7722(97)00060-0
275 const Evaluation k_g =
276 intQuants.oxygenConcentration() < 0
277 ? mu * intQuants.oxygenConcentration() / k_o
278 : mu * intQuants.oxygenConcentration() / (k_o + intQuants.oxygenConcentration());
279 const Evaluation k_c =
280 intQuants.ureaConcentration() < 0
281 ? mu_u * intQuants.ureaConcentration() / k_u
282 : mu_u * intQuants.ureaConcentration() / (k_u + intQuants.ureaConcentration());
283
284 // compute the processes
285 source[Indices::contiMicrobialEqIdx] += intQuants.microbialConcentration() * intQuants.porosity() *
286 b * (Y_sb * k_g - k_d - k_a) +
287 rho_b * intQuants.biofilmConcentration() * k_str * pow(normVelocityCell, eta);
288
289 source[Indices::contiOxygenEqIdx] -= (intQuants.microbialConcentration() * intQuants.porosity() *
290 b + rho_b * intQuants.biofilmConcentration()) * F * k_g;
291
292 source[Indices::contiUreaEqIdx] -= rho_b * intQuants.biofilmConcentration() * k_c;
293
294 source[Indices::contiBiofilmEqIdx] += intQuants.biofilmConcentration() * (Y_sb * k_g - k_d -
295 k_str * pow(normVelocityCell, eta) - Y_uc * (rho_b / rho_c) *
296 intQuants.biofilmConcentration() * k_c / (intQuants.porosity() +
297 intQuants.biofilmConcentration())) + k_a * intQuants.microbialConcentration() *
298 intQuants.porosity() * b / rho_b;
299
300 source[Indices::contiCalciteEqIdx] += (rho_b / rho_c) * intQuants.biofilmConcentration() * Y_uc * k_c;
301
302 // since the urea concentration can be much larger than 1, then we apply a scaling factor
303 source[Indices::contiUreaEqIdx] *= getPropValue<TypeTag, Properties::BlackOilUreaScalingFactor>();
304 }
305 }
306
307 static void addSource([[maybe_unused]] RateVector& source,
308 [[maybe_unused]] const ElementContext& elemCtx,
309 [[maybe_unused]] unsigned dofIdx,
310 [[maybe_unused]] unsigned timeIdx)
311 {
312 if constexpr (enableMICP) {
313 const auto& problem = elemCtx.problem();
314 const auto& intQuants = elemCtx.intensiveQuantities(dofIdx, timeIdx);
315 addSource(source, problem, intQuants, dofIdx);
316 }
317 }
318
319 static Scalar densityBiofilm(unsigned satnumRegionIdx)
320 { return params_.densityBiofilm_[satnumRegionIdx]; }
321
322 static Scalar densityCalcite(unsigned satnumRegionIdx)
323 { return params_.densityCalcite_[satnumRegionIdx]; }
324
325 static Scalar detachmentRate(unsigned satnumRegionIdx)
326 { return params_.detachmentRate_[satnumRegionIdx]; }
327
328 static Scalar detachmentExponent(unsigned satnumRegionIdx)
329 { return params_.detachmentExponent_[satnumRegionIdx]; }
330
331 static Scalar halfVelocityOxygen(unsigned satnumRegionIdx)
332 { return params_.halfVelocityOxygen_[satnumRegionIdx]; }
333
334 static Scalar halfVelocityUrea(unsigned satnumRegionIdx)
335 { return params_.halfVelocityUrea_[satnumRegionIdx]; }
336
337 static Scalar maximumGrowthRate(unsigned satnumRegionIdx)
338 { return params_.maximumGrowthRate_[satnumRegionIdx]; }
339
340 static Scalar maximumUreaUtilization(unsigned satnumRegionIdx)
341 { return params_.maximumUreaUtilization_[satnumRegionIdx]; }
342
343 static Scalar microbialAttachmentRate(unsigned satnumRegionIdx)
344 { return params_.microbialAttachmentRate_[satnumRegionIdx]; }
345
346 static Scalar microbialDeathRate(unsigned satnumRegionIdx)
347 { return params_.microbialDeathRate_[satnumRegionIdx]; }
348
349 static Scalar oxygenConsumptionFactor(unsigned satnumRegionIdx)
350 { return params_.oxygenConsumptionFactor_[satnumRegionIdx]; }
351
352 static Scalar yieldGrowthCoefficient(unsigned satnumRegionIdx)
353 { return params_.yieldGrowthCoefficient_[satnumRegionIdx]; }
354
355 static Scalar yieldUreaToCalciteCoefficient(unsigned satnumRegionIdx)
356 { return params_.yieldUreaToCalciteCoefficient_[satnumRegionIdx]; }
357
358 static Scalar microbialDiffusion(unsigned pvtRegionIdx)
359 { return params_.microbialDiffusion_[pvtRegionIdx]; }
360
361 static Scalar oxygenDiffusion(unsigned pvtRegionIdx)
362 { return params_.oxygenDiffusion_[pvtRegionIdx]; }
363
364 static Scalar ureaDiffusion(unsigned pvtRegionIdx)
365 { return params_.ureaDiffusion_[pvtRegionIdx]; }
366
367 static const TabulatedFunction& permfactTable(const ElementContext& elemCtx,
368 unsigned scvIdx,
369 unsigned timeIdx)
370 {
371 const unsigned satnumRegionIdx = elemCtx.problem().satnumRegionIndex(elemCtx, scvIdx, timeIdx);
372 return params_.permfactTable_[satnumRegionIdx];
373 }
374
375 static const TabulatedFunction& permfactTable(unsigned satnumRegionIdx)
376 { return params_.permfactTable_[satnumRegionIdx]; }
377
378private:
379 static BlackOilMICPParams<Scalar> params_;
380};
381
382template <class TypeTag, bool enableMICPV>
383BlackOilMICPParams<typename BlackOilMICPModule<TypeTag, enableMICPV>::Scalar>
384BlackOilMICPModule<TypeTag, enableMICPV>::params_;
385
386template <class TypeTag, bool enableMICPV>
388
396template <class TypeTag>
397class BlackOilMICPIntensiveQuantities<TypeTag, /*enableMICPV=*/true>
398{
400
407
409
410 static constexpr int microbialConcentrationIdx = Indices::microbialConcentrationIdx;
411 static constexpr int oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
412 static constexpr int ureaConcentrationIdx = Indices::ureaConcentrationIdx;
413 static constexpr int biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
414 static constexpr int calciteConcentrationIdx = Indices::calciteConcentrationIdx;
415 static constexpr int waterPhaseIdx = FluidSystem::waterPhaseIdx;
416
417public:
423 void MICPPropertiesUpdate_(const ElementContext& elemCtx,
424 unsigned dofIdx,
425 unsigned timeIdx)
426 {
427 const auto linearizationType = elemCtx.linearizationType();
428 const PrimaryVariables& priVars = elemCtx.primaryVars(dofIdx, timeIdx);
429 const Scalar referencePorosity_ = elemCtx.problem().referencePorosity(dofIdx, timeIdx);
430
431 microbialConcentration_ = priVars.makeEvaluation(microbialConcentrationIdx, timeIdx, linearizationType);
432 oxygenConcentration_ = priVars.makeEvaluation(oxygenConcentrationIdx, timeIdx, linearizationType);
433 ureaConcentration_ = priVars.makeEvaluation(ureaConcentrationIdx, timeIdx, linearizationType);
434 biofilmConcentration_ = priVars.makeEvaluation(biofilmConcentrationIdx, timeIdx, linearizationType);
435 calciteConcentration_ = priVars.makeEvaluation(calciteConcentrationIdx, timeIdx, linearizationType);
436
437 const Evaluation porosityFactor = min(1.0 - (biofilmConcentration_ + calciteConcentration_) /
438 (referencePorosity_ + 1e-8),
439 1.0); // phi / phi_0
440 const unsigned satnumRegionIdx = elemCtx.problem().satnumRegionIndex(elemCtx, dofIdx, timeIdx);
441 const auto& permfactTable = MICPModule::permfactTable(satnumRegionIdx);
442 permFactor_ = permfactTable.eval(porosityFactor, /*extrapolation=*/true);
443
444 biofilmMass_ = referencePorosity_*biofilmConcentration_*MICPModule::densityBiofilm(satnumRegionIdx);
445 calciteMass_ = referencePorosity_*calciteConcentration_*MICPModule::densityCalcite(satnumRegionIdx);
446 }
447
448 const Evaluation& microbialConcentration() const
449 { return microbialConcentration_; }
450
451 const Evaluation& oxygenConcentration() const
452 { return oxygenConcentration_; }
453
454 const Evaluation& ureaConcentration() const
455 { return ureaConcentration_; }
456
457 const Evaluation& biofilmConcentration() const
458 { return biofilmConcentration_; }
459
460 const Evaluation& calciteConcentration() const
461 { return calciteConcentration_; }
462
463 const Evaluation biofilmMass() const
464 { return biofilmMass_; }
465
466 const Evaluation calciteMass() const
467 { return calciteMass_; }
468
469 const Evaluation& permFactor() const
470 { return permFactor_; }
471
472protected:
478 Evaluation biofilmMass_;
479 Evaluation calciteMass_;
480 Evaluation permFactor_;
481};
482
483template <class TypeTag>
485{
489
490public:
491 void MICPPropertiesUpdate_(const ElementContext&,
492 unsigned,
493 unsigned)
494 {}
495
496 const Evaluation& microbialConcentration() const
497 { throw std::logic_error("microbialConcentration() called but MICP is disabled"); }
498
499 const Evaluation& oxygenConcentration() const
500 { throw std::logic_error("oxygenConcentration() called but MICP is disabled"); }
501
502 const Evaluation& ureaConcentration() const
503 { throw std::logic_error("ureaConcentration() called but MICP is disabled"); }
504
505 const Evaluation& biofilmConcentration() const
506 { throw std::logic_error("biofilmConcentration() called but MICP is disabled"); }
507
508 const Evaluation& calciteConcentration() const
509 { throw std::logic_error("calciteConcentration() called but MICP is disabled"); }
510
511 const Evaluation& biofilmMass() const
512 { throw std::logic_error("biofilmMass() called but MICP is disabled"); }
513
514 const Evaluation& calciteMass() const
515 { throw std::logic_error("calciteMass() called but MICP is disabled"); }
516
517 const Evaluation& permFactor() const
518 { throw std::logic_error("permFactor() called but MICP is disabled"); }
519};
520
521template <class TypeTag, bool enableMICPV>
523
531template <class TypeTag>
532class BlackOilMICPExtensiveQuantities<TypeTag, /*enableMICPV=*/true>
533{
535};
536
537template <class TypeTag>
538class BlackOilMICPExtensiveQuantities<TypeTag, false>{};
539
540} // namespace Opm
541
542#endif
Contains the parameters required to extend the black-oil model by MICP.
Declares the properties required by the black oil model.
Provides the MICP specific extensive quantities to the generic black-oil module's extensive quantitie...
Definition: blackoilmicpmodules.hh:522
const Evaluation & biofilmMass() const
Definition: blackoilmicpmodules.hh:511
const Evaluation & calciteMass() const
Definition: blackoilmicpmodules.hh:514
const Evaluation & permFactor() const
Definition: blackoilmicpmodules.hh:517
void MICPPropertiesUpdate_(const ElementContext &, unsigned, unsigned)
Definition: blackoilmicpmodules.hh:491
const Evaluation & ureaConcentration() const
Definition: blackoilmicpmodules.hh:502
const Evaluation & oxygenConcentration() const
Definition: blackoilmicpmodules.hh:499
const Evaluation & microbialConcentration() const
Definition: blackoilmicpmodules.hh:496
const Evaluation & calciteConcentration() const
Definition: blackoilmicpmodules.hh:508
const Evaluation & biofilmConcentration() const
Definition: blackoilmicpmodules.hh:505
const Evaluation & permFactor() const
Definition: blackoilmicpmodules.hh:469
Evaluation oxygenConcentration_
Definition: blackoilmicpmodules.hh:474
const Evaluation & microbialConcentration() const
Definition: blackoilmicpmodules.hh:448
const Evaluation & calciteConcentration() const
Definition: blackoilmicpmodules.hh:460
const Evaluation biofilmMass() const
Definition: blackoilmicpmodules.hh:463
void MICPPropertiesUpdate_(const ElementContext &elemCtx, unsigned dofIdx, unsigned timeIdx)
Update the intensive properties needed to handle MICP from the primary variables.
Definition: blackoilmicpmodules.hh:423
const Evaluation & oxygenConcentration() const
Definition: blackoilmicpmodules.hh:451
const Evaluation & ureaConcentration() const
Definition: blackoilmicpmodules.hh:454
Evaluation microbialConcentration_
Definition: blackoilmicpmodules.hh:473
Evaluation calciteConcentration_
Definition: blackoilmicpmodules.hh:477
Evaluation calciteMass_
Definition: blackoilmicpmodules.hh:479
const Evaluation & biofilmConcentration() const
Definition: blackoilmicpmodules.hh:457
const Evaluation calciteMass() const
Definition: blackoilmicpmodules.hh:466
Evaluation ureaConcentration_
Definition: blackoilmicpmodules.hh:475
Evaluation biofilmConcentration_
Definition: blackoilmicpmodules.hh:476
Evaluation biofilmMass_
Definition: blackoilmicpmodules.hh:478
Evaluation permFactor_
Definition: blackoilmicpmodules.hh:480
Provides the volumetric quantities required for the equations needed by the MICP extension of the bla...
Definition: blackoilmicpmodules.hh:387
Contains the high level supplements required to extend the black oil model by MICP.
Definition: blackoilmicpmodules.hh:54
static void registerParameters()
Register all run-time parameters for the black-oil MICP module.
Definition: blackoilmicpmodules.hh:101
static void applyScaling(RateVector &flux)
Definition: blackoilmicpmodules.hh:200
static Scalar microbialDeathRate(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:346
static Scalar eqWeight(unsigned eqIdx)
Definition: blackoilmicpmodules.hh:134
static Scalar detachmentExponent(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:328
static void computeFlux(RateVector &flux, const ElementContext &elemCtx, unsigned scvfIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:207
static void addSource(RateVector &source, const ElementContext &elemCtx, unsigned dofIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:307
static Scalar yieldGrowthCoefficient(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:352
static Scalar oxygenConsumptionFactor(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:349
static bool eqApplies(unsigned eqIdx)
Definition: blackoilmicpmodules.hh:119
static Scalar ureaDiffusion(unsigned pvtRegionIdx)
Definition: blackoilmicpmodules.hh:364
static Scalar microbialAttachmentRate(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:343
static void addSource(RateVector &source, const Problem &problem, const IntensiveQuantities &intQuants, unsigned globalSpaceIdex)
Definition: blackoilmicpmodules.hh:243
static Scalar densityBiofilm(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:319
static void registerOutputModules(Model &model, Simulator &simulator)
Register all MICP specific VTK and ECL output modules.
Definition: blackoilmicpmodules.hh:111
static Scalar maximumGrowthRate(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:337
static const TabulatedFunction & permfactTable(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:375
static void addStorage(Dune::FieldVector< LhsEval, numEq > &storage, const IntensiveQuantities &intQuants)
Definition: blackoilmicpmodules.hh:144
static Scalar microbialDiffusion(unsigned pvtRegionIdx)
Definition: blackoilmicpmodules.hh:358
static Scalar detachmentRate(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:325
static void addMICPFluxes_(RateVector &flux, const ElementContext &elemCtx, unsigned scvfIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:229
static void addMICPFluxes_(RateVector &flux, const Eval &volumeFlux, const IntensiveQuantities &upFs)
Definition: blackoilmicpmodules.hh:188
static void setParams(BlackOilMICPParams< Scalar > &&params)
Set parameters.
Definition: blackoilmicpmodules.hh:93
static Scalar yieldUreaToCalciteCoefficient(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:355
static Scalar densityCalcite(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:322
static const TabulatedFunction & permfactTable(const ElementContext &elemCtx, unsigned scvIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:367
static Scalar oxygenDiffusion(unsigned pvtRegionIdx)
Definition: blackoilmicpmodules.hh:361
static Scalar maximumUreaUtilization(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:340
static Scalar halfVelocityOxygen(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:331
static Scalar halfVelocityUrea(unsigned satnumRegionIdx)
Definition: blackoilmicpmodules.hh:334
VTK output module for the MICP model's related quantities.
Definition: vtkblackoilmicpmodule.hpp:54
static void registerParameters()
Register all run-time parameters for the multi-phase VTK output module.
Definition: vtkblackoilmicpmodule.hpp:84
Definition: blackoilboundaryratevector.hh:39
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
Struct holding the parameters for the BlackOilMICPModule class.
Definition: blackoilmicpparams.hpp:44
Tabulated1DFunction< Scalar > TabulatedFunction
Definition: blackoilmicpparams.hpp:50