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 EWOMS_BLACK_OIL_MICP_MODULE_HH
29#define EWOMS_BLACK_OIL_MICP_MODULE_HH
30
31#include "blackoilproperties.hh"
32
35
36#if HAVE_ECL_INPUT
37#include <opm/input/eclipse/EclipseState/EclipseState.hpp>
38#include <opm/input/eclipse/EclipseState/MICPpara.hpp>
39#endif
40
41#include <dune/common/fvector.hh>
42
43#include <cmath>
44#include <cstddef>
45#include <stdexcept>
46#include <string>
47
48namespace Opm {
54template <class TypeTag, bool enableMICPV = getPropValue<TypeTag, Properties::EnableMICP>()>
56{
69
70 using Toolbox = MathToolbox<Evaluation>;
71
72 static constexpr unsigned microbialConcentrationIdx = Indices::microbialConcentrationIdx;
73 static constexpr unsigned oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
74 static constexpr unsigned ureaConcentrationIdx = Indices::ureaConcentrationIdx;
75 static constexpr unsigned biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
76 static constexpr unsigned calciteConcentrationIdx = Indices::calciteConcentrationIdx;
77 static constexpr unsigned contiMicrobialEqIdx = Indices::contiMicrobialEqIdx;
78 static constexpr unsigned contiOxygenEqIdx = Indices::contiOxygenEqIdx;
79 static constexpr unsigned contiUreaEqIdx = Indices::contiUreaEqIdx;
80 static constexpr unsigned contiBiofilmEqIdx = Indices::contiBiofilmEqIdx;
81 static constexpr unsigned contiCalciteEqIdx = Indices::contiCalciteEqIdx;
82 static constexpr unsigned waterPhaseIdx = FluidSystem::waterPhaseIdx;
83
84 static constexpr unsigned enableMICP = enableMICPV;
85
86 static constexpr unsigned numEq = getPropValue<TypeTag, Properties::NumEq>();
87
88public:
89
90#if HAVE_ECL_INPUT
91 //
92 //* \brief Initialize all internal data structures needed by the MICP module
93 //
94 static void initFromState(const EclipseState& eclState)
95 {
96 // some sanity checks: if MICP is enabled, the MICP keyword must be
97 // present, if MICP is disabled the keyword must not be present.
98 if (enableMICP && !eclState.runspec().micp()) {
99 throw std::runtime_error("Non-trivial MICP treatment requested at compile time, but "
100 "the deck does not contain the MICP keyword");
101 }
102 else if (!enableMICP && eclState.runspec().micp()) {
103 throw std::runtime_error("MICP treatment disabled at compile time, but the deck "
104 "contains the MICP keyword");
105 }
106
107 if (!eclState.runspec().micp())
108 return; // MICP treatment is supposed to be disabled*/
109
110 // initialize the objects which deal with the MICPpara keyword
111 const auto& MICPpara = eclState.getMICPpara();
112 setMICPpara(MICPpara.getDensityBiofilm(),
113 MICPpara.getDensityCalcite(),
114 MICPpara.getDetachmentRate(),
115 MICPpara.getCriticalPorosity(),
116 MICPpara.getFittingFactor(),
117 MICPpara.getHalfVelocityOxygen(),
118 MICPpara.getHalfVelocityUrea(),
119 MICPpara.getMaximumGrowthRate(),
120 MICPpara.getMaximumUreaUtilization(),
121 MICPpara.getMicrobialAttachmentRate(),
122 MICPpara.getMicrobialDeathRate(),
123 MICPpara.getMinimumPermeability(),
124 MICPpara.getOxygenConsumptionFactor(),
125 MICPpara.getYieldGrowthCoefficient(),
126 MICPpara.getMaximumOxygenConcentration(),
127 MICPpara.getMaximumUreaConcentration(),
128 MICPpara.getToleranceBeforeClogging());
129 // obtain the porosity for the clamp in the blackoilnewtonmethod
130 if constexpr (std::is_same_v<Scalar, float>) {
131 const auto phi = eclState.fieldProps().get_double("PORO");
132 params_.phi_.resize(phi.size());
133 std::copy(phi.begin(), phi.end(), params_.phi_.begin());
134 } else {
135 params_.phi_ = eclState.fieldProps().get_double("PORO");
136 }
137 }
138#endif
139
147 static void checkCloggingMICP(const Model& model, const Scalar phi, unsigned dofIdx)
148 {
149 const PrimaryVariables& priVars = model.solution(/*timeIdx=*/1)[dofIdx];
150 if (phi - priVars[biofilmConcentrationIdx] - priVars[calciteConcentrationIdx] < toleranceBeforeClogging())
151 throw std::logic_error("Clogging has been (almost) reached in at least one cell\n");
152 }
153
159 static void setMICPpara(const Scalar& densityBiofilm,
160 const Scalar& densityCalcite,
161 const Scalar& detachmentRate,
162 const Scalar& criticalPorosity,
163 const Scalar& fittingFactor,
164 const Scalar& halfVelocityOxygen,
165 const Scalar& halfVelocityUrea,
166 const Scalar& maximumGrowthRate,
167 const Scalar& maximumUreaUtilization,
168 const Scalar& microbialAttachmentRate,
169 const Scalar& microbialDeathRate,
170 const Scalar& minimumPermeability,
171 const Scalar& oxygenConsumptionFactor,
172 const Scalar& yieldGrowthCoefficient,
173 const Scalar& maximumOxygenConcentration,
174 const Scalar& maximumUreaConcentration,
175 const Scalar& toleranceBeforeClogging)
176 {
177 params_.densityBiofilm_ = densityBiofilm;
178 params_.densityCalcite_ = densityCalcite;
179 params_.detachmentRate_ = detachmentRate;
180 params_.criticalPorosity_ = criticalPorosity;
181 params_.fittingFactor_ = fittingFactor;
182 params_.halfVelocityOxygen_ = halfVelocityOxygen;
183 params_.halfVelocityUrea_ = halfVelocityUrea;
184 params_.maximumGrowthRate_ = maximumGrowthRate;
185 params_.maximumUreaUtilization_ = maximumUreaUtilization;
186 params_.microbialAttachmentRate_ = microbialAttachmentRate;
187 params_.microbialDeathRate_ = microbialDeathRate;
188 params_.minimumPermeability_ = minimumPermeability;
189 params_.oxygenConsumptionFactor_ = oxygenConsumptionFactor;
190 params_.yieldGrowthCoefficient_ = yieldGrowthCoefficient;
191 params_.maximumOxygenConcentration_ = maximumOxygenConcentration;
192 params_.maximumUreaConcentration_ = maximumUreaConcentration;
193 params_.toleranceBeforeClogging_ = toleranceBeforeClogging;
194 }
195
199 static void registerParameters()
200 {
201 if (!enableMICP)
202 // MICP has been disabled at compile time
203 return;
204
206 }
207
211 static void registerOutputModules(Model& model,
212 Simulator& simulator)
213 {
214 if (!enableMICP)
215 // MICP has been disabled at compile time
216 return;
217
218 model.addOutputModule(new VtkBlackOilMICPModule<TypeTag>(simulator));
219 }
220
221 static bool eqApplies(unsigned eqIdx)
222 {
223 if (!enableMICP)
224 return false;
225
226 // All MICP components are true here
227 return eqIdx == contiMicrobialEqIdx || eqIdx == contiOxygenEqIdx || eqIdx == contiUreaEqIdx || eqIdx == contiBiofilmEqIdx || eqIdx == contiCalciteEqIdx;
228 }
229
230 static Scalar eqWeight([[maybe_unused]] unsigned eqIdx)
231 {
232 assert(eqApplies(eqIdx));
233
234 // TODO: it may be beneficial to chose this differently.
235 return static_cast<Scalar>(1.0);
236 }
237
238 // must be called after water storage is computed
239 template <class LhsEval>
240 static void addStorage(Dune::FieldVector<LhsEval, numEq>& storage,
241 const IntensiveQuantities& intQuants)
242 {
243 if (!enableMICP)
244 return;
245
246 LhsEval surfaceVolumeWater = Toolbox::template decay<LhsEval>(intQuants.porosity());
247 // avoid singular matrix if no water is present.
248 surfaceVolumeWater = max(surfaceVolumeWater, 1e-10);
249 // Suspended microbes in water phase
250 const LhsEval massMicrobes = surfaceVolumeWater * Toolbox::template decay<LhsEval>(intQuants.microbialConcentration());
251 LhsEval accumulationMicrobes = massMicrobes;
252 storage[contiMicrobialEqIdx] += accumulationMicrobes;
253 // Oxygen in water phase
254 const LhsEval massOxygen = surfaceVolumeWater * Toolbox::template decay<LhsEval>(intQuants.oxygenConcentration());
255 LhsEval accumulationOxygen = massOxygen;
256 storage[contiOxygenEqIdx] += accumulationOxygen;
257 // Urea in water phase
258 const LhsEval massUrea = surfaceVolumeWater * Toolbox::template decay<LhsEval>(intQuants.ureaConcentration());
259 LhsEval accumulationUrea = massUrea;
260 storage[contiUreaEqIdx] += accumulationUrea;
261 // Biofilm
262 const LhsEval massBiofilm = Toolbox::template decay<LhsEval>(intQuants.biofilmConcentration());
263 LhsEval accumulationBiofilm = massBiofilm;
264 storage[contiBiofilmEqIdx] += accumulationBiofilm;
265 // Calcite
266 const LhsEval massCalcite = Toolbox::template decay<LhsEval>(intQuants.calciteConcentration());
267 LhsEval accumulationCalcite = massCalcite;
268 storage[contiCalciteEqIdx] += accumulationCalcite;
269 }
270
271 static void computeFlux(RateVector& flux,
272 const ElementContext& elemCtx,
273 unsigned scvfIdx,
274 unsigned timeIdx)
275
276 {
277 if (!enableMICP)
278 return;
279
280 const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
281
282 const unsigned upIdx = extQuants.upstreamIndex(waterPhaseIdx);
283 const unsigned inIdx = extQuants.interiorIndex();
284 const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
285
286
287 if (upIdx == inIdx) {
288 flux[contiMicrobialEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * up.microbialConcentration();
289 flux[contiOxygenEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * up.oxygenConcentration();
290 flux[contiUreaEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * up.ureaConcentration();
291 }
292 else {
293 flux[contiMicrobialEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * decay<Scalar>(up.microbialConcentration());
294 flux[contiOxygenEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * decay<Scalar>(up.oxygenConcentration());
295 flux[contiUreaEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * decay<Scalar>(up.ureaConcentration());
296 }
297 }
298
299 // See https://doi.org/10.1016/j.ijggc.2021.103256 for the micp processes in the model.
300 static void addSource(RateVector& source,
301 const ElementContext& elemCtx,
302 unsigned dofIdx,
303 unsigned timeIdx)
304
305 {
306 if (!enableMICP)
307 return;
308
309 // compute dpW (max norm of the pressure gradient in the cell center)
310 const IntensiveQuantities& intQuants = elemCtx.intensiveQuantities(dofIdx, timeIdx);
311 const auto& K = elemCtx.problem().intrinsicPermeability(elemCtx, dofIdx, 0);
312 size_t numInteriorFaces = elemCtx.numInteriorFaces(timeIdx);
313 Evaluation dpW = 0;
314 for (unsigned scvfIdx = 0; scvfIdx < numInteriorFaces; scvfIdx++) {
315 const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
316 unsigned upIdx = extQuants.upstreamIndex(waterPhaseIdx);
317 const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
318 const Evaluation& mobWater = up.mobility(waterPhaseIdx);
319
320 // compute water velocity from flux
321 Evaluation waterVolumeVelocity = extQuants.volumeFlux(waterPhaseIdx) / (K[0][0] * mobWater);
322 dpW = std::max(dpW, abs(waterVolumeVelocity));
323 }
324
325 // get the model parameters
326 Scalar k_a = microbialAttachmentRate();
327 Scalar k_d = microbialDeathRate();
328 Scalar rho_b = densityBiofilm();
329 Scalar rho_c = densityCalcite();
330 Scalar k_str = detachmentRate();
331 Scalar k_o = halfVelocityOxygen();
332 Scalar k_u = halfVelocityUrea() / 10.0;//Dividing by scaling factor 10 (see WellInterface_impl.hpp)
333 Scalar mu = maximumGrowthRate();
334 Scalar mu_u = maximumUreaUtilization() / 10.0;//Dividing by scaling factor 10 (see WellInterface_impl.hpp)
335 Scalar Y_sb = yieldGrowthCoefficient();
336 Scalar F = oxygenConsumptionFactor();
337 Scalar Y_uc = 1.67 * 10; //Multiplying by scaling factor 10 (see WellInterface_impl.hpp)
338
339 // compute the processes
340 source[Indices::contiMicrobialEqIdx] += intQuants.microbialConcentration() * intQuants.porosity() *
341 (Y_sb * mu * intQuants.oxygenConcentration() / (k_o + intQuants.oxygenConcentration()) - k_d - k_a)
342 + rho_b * intQuants.biofilmConcentration() * k_str * pow(intQuants.porosity() * dpW, 0.58);
343
344 source[Indices::contiOxygenEqIdx] -= (intQuants.microbialConcentration() * intQuants.porosity() + rho_b * intQuants.biofilmConcentration()) *
345 F * mu * intQuants.oxygenConcentration() / (k_o + intQuants.oxygenConcentration());
346
347 source[Indices::contiUreaEqIdx] -= rho_b * intQuants.biofilmConcentration() * mu_u * intQuants.ureaConcentration() / (k_u + intQuants.ureaConcentration());
348
349 source[Indices::contiBiofilmEqIdx] += intQuants.biofilmConcentration() * (Y_sb * mu * intQuants.oxygenConcentration() / (k_o + intQuants.oxygenConcentration()) - k_d
350 - k_str * pow(intQuants.porosity() * dpW, 0.58) - Y_uc * (rho_b / rho_c) * intQuants.biofilmConcentration() * mu_u *
351 (intQuants.ureaConcentration() / (k_u + intQuants.ureaConcentration())) / (intQuants.porosity() + intQuants.biofilmConcentration()))
352 + k_a * intQuants.microbialConcentration() * intQuants.porosity() / rho_b;
353
354 source[Indices::contiCalciteEqIdx] += (rho_b / rho_c) * intQuants.biofilmConcentration() * Y_uc * mu_u * intQuants.ureaConcentration() / (k_u + intQuants.ureaConcentration());
355 }
356
357 static const Scalar densityBiofilm()
358 {
359 return params_.densityBiofilm_;
360 }
361
362 static const Scalar densityCalcite()
363 {
364 return params_.densityCalcite_;
365 }
366
367 static const Scalar detachmentRate()
368 {
369 return params_.detachmentRate_;
370 }
371
372 static const Scalar criticalPorosity()
373 {
374 return params_.criticalPorosity_;
375 }
376
377 static const Scalar fittingFactor()
378 {
379 return params_.fittingFactor_;
380 }
381
382 static const Scalar halfVelocityOxygen()
383 {
384 return params_.halfVelocityOxygen_;
385 }
386
387 static const Scalar halfVelocityUrea()
388 {
389 return params_.halfVelocityUrea_;
390 }
391
392 static const Scalar maximumGrowthRate()
393 {
394 return params_.maximumGrowthRate_;
395 }
396
397 static const Scalar maximumOxygenConcentration()
398 {
399 return params_.maximumOxygenConcentration_;
400 }
401
402 static const Scalar maximumUreaConcentration()
403 {
404 return params_.maximumUreaConcentration_ / 10.0;//Dividing by scaling factor 10 (see WellInterface_impl.hpp);
405 }
406
407 static const Scalar maximumUreaUtilization()
408 {
409 return params_.maximumUreaUtilization_;
410 }
411
412 static const Scalar microbialAttachmentRate()
413 {
414 return params_.microbialAttachmentRate_;
415 }
416
417 static const Scalar microbialDeathRate()
418 {
419 return params_.microbialDeathRate_;
420 }
421
422 static const Scalar minimumPermeability()
423 {
424 return params_.minimumPermeability_;
425 }
426
427 static const Scalar oxygenConsumptionFactor()
428 {
429 return params_.oxygenConsumptionFactor_;
430 }
431
432 static const Scalar toleranceBeforeClogging()
433 {
434 return params_.toleranceBeforeClogging_;
435 }
436
437 static const Scalar yieldGrowthCoefficient()
438 {
439 return params_.yieldGrowthCoefficient_;
440 }
441
442 static const std::vector<Scalar> phi()
443 {
444 return params_.phi_;
445 }
446
447private:
448 static BlackOilMICPParams<Scalar> params_;
449};
450
451
452template <class TypeTag, bool enableMICPV>
453BlackOilMICPParams<typename BlackOilMICPModule<TypeTag, enableMICPV>::Scalar>
454BlackOilMICPModule<TypeTag, enableMICPV>::params_;
455
463template <class TypeTag, bool enableMICPV = getPropValue<TypeTag, Properties::EnableMICP>()>
465{
467
474
476
477 static constexpr int microbialConcentrationIdx = Indices::microbialConcentrationIdx;
478 static constexpr int oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
479 static constexpr int ureaConcentrationIdx = Indices::ureaConcentrationIdx;
480 static constexpr int biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
481 static constexpr int calciteConcentrationIdx = Indices::calciteConcentrationIdx;
482 static constexpr int waterPhaseIdx = FluidSystem::waterPhaseIdx;
483
484
485public:
486
492 void MICPPropertiesUpdate_(const ElementContext& elemCtx,
493 unsigned dofIdx,
494 unsigned timeIdx)
495 {
496 const auto linearizationType = elemCtx.linearizationType();
497 const PrimaryVariables& priVars = elemCtx.primaryVars(dofIdx, timeIdx);
498 const auto& intQuants = elemCtx.intensiveQuantities(dofIdx, timeIdx);
499 const auto& K = elemCtx.problem().intrinsicPermeability(elemCtx, dofIdx, timeIdx);
500 Scalar referencePorosity_ = elemCtx.problem().porosity(elemCtx, dofIdx, timeIdx);
501 Scalar eta = MICPModule::fittingFactor();
502 Scalar k_min = MICPModule::minimumPermeability();
503 Scalar phi_crit = MICPModule::criticalPorosity();
504
505 microbialConcentration_ = priVars.makeEvaluation(microbialConcentrationIdx, timeIdx, linearizationType);
506 oxygenConcentration_ = priVars.makeEvaluation(oxygenConcentrationIdx, timeIdx, linearizationType);
507 ureaConcentration_ = priVars.makeEvaluation(ureaConcentrationIdx, timeIdx, linearizationType);
508 biofilmConcentration_ = priVars.makeEvaluation(biofilmConcentrationIdx, timeIdx, linearizationType);
509 calciteConcentration_ = priVars.makeEvaluation(calciteConcentrationIdx, timeIdx, linearizationType);
510
511 // Permeability reduction due to MICP, by adjusting the water mobility
512 asImp_().mobility_[waterPhaseIdx] *= max((pow((intQuants.porosity() - phi_crit) / (referencePorosity_ - phi_crit), eta) + k_min / K[0][0])/(1. + k_min / K[0][0]), k_min / K[0][0]);
513
514 }
515
516 const Evaluation& microbialConcentration() const
517 { return microbialConcentration_; }
518
519 const Evaluation& oxygenConcentration() const
520 { return oxygenConcentration_; }
521
522 const Evaluation& ureaConcentration() const
523 { return ureaConcentration_; }
524
525 const Evaluation& biofilmConcentration() const
526 { return biofilmConcentration_; }
527
528 const Evaluation& calciteConcentration() const
529 { return calciteConcentration_; }
530
531
532protected:
533 Implementation& asImp_()
534 { return *static_cast<Implementation*>(this); }
535
541
542};
543
544template <class TypeTag>
546{
550
551public:
552 void MICPPropertiesUpdate_(const ElementContext&,
553 unsigned,
554 unsigned)
555 { }
556
557 const Evaluation& microbialConcentration() const
558 { throw std::logic_error("microbialConcentration() called but MICP is disabled"); }
559
560 const Evaluation& oxygenConcentration() const
561 { throw std::logic_error("oxygenConcentration() called but MICP is disabled"); }
562
563 const Evaluation& ureaConcentration() const
564 { throw std::logic_error("ureaConcentration() called but MICP is disabled"); }
565
566 const Evaluation& biofilmConcentration() const
567 { throw std::logic_error("biofilmConcentration() called but MICP is disabled"); }
568
569 const Evaluation& calciteConcentration() const
570 { throw std::logic_error("calciteConcentration() called but MICP is disabled"); }
571};
572
580template <class TypeTag, bool enableMICPV = getPropValue<TypeTag, Properties::EnableMICP>()>
582{
584
585private:
586 Implementation& asImp_()
587 { return *static_cast<Implementation*>(this); }
588
589};
590
591template <class TypeTag>
592class BlackOilMICPExtensiveQuantities<TypeTag, false>{};
593
594} // namespace Opm
595
596#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:582
void MICPPropertiesUpdate_(const ElementContext &, unsigned, unsigned)
Definition: blackoilmicpmodules.hh:552
const Evaluation & ureaConcentration() const
Definition: blackoilmicpmodules.hh:563
const Evaluation & oxygenConcentration() const
Definition: blackoilmicpmodules.hh:560
const Evaluation & microbialConcentration() const
Definition: blackoilmicpmodules.hh:557
const Evaluation & calciteConcentration() const
Definition: blackoilmicpmodules.hh:569
const Evaluation & biofilmConcentration() const
Definition: blackoilmicpmodules.hh:566
Provides the volumetric quantities required for the equations needed by the MICP extension of the bla...
Definition: blackoilmicpmodules.hh:465
void MICPPropertiesUpdate_(const ElementContext &elemCtx, unsigned dofIdx, unsigned timeIdx)
Update the intensive properties needed to handle MICP from the primary variables.
Definition: blackoilmicpmodules.hh:492
Evaluation biofilmConcentration_
Definition: blackoilmicpmodules.hh:539
const Evaluation & biofilmConcentration() const
Definition: blackoilmicpmodules.hh:525
Implementation & asImp_()
Definition: blackoilmicpmodules.hh:533
Evaluation oxygenConcentration_
Definition: blackoilmicpmodules.hh:537
const Evaluation & calciteConcentration() const
Definition: blackoilmicpmodules.hh:528
Evaluation ureaConcentration_
Definition: blackoilmicpmodules.hh:538
const Evaluation & microbialConcentration() const
Definition: blackoilmicpmodules.hh:516
const Evaluation & ureaConcentration() const
Definition: blackoilmicpmodules.hh:522
Evaluation microbialConcentration_
Definition: blackoilmicpmodules.hh:536
Evaluation calciteConcentration_
Definition: blackoilmicpmodules.hh:540
const Evaluation & oxygenConcentration() const
Definition: blackoilmicpmodules.hh:519
Contains the high level supplements required to extend the black oil model by MICP.
Definition: blackoilmicpmodules.hh:56
static void checkCloggingMICP(const Model &model, const Scalar phi, unsigned dofIdx)
The simulator stops if "clogging" has been (almost) reached in any of the cells.
Definition: blackoilmicpmodules.hh:147
static void registerParameters()
Register all run-time parameters for the black-oil MICP module.
Definition: blackoilmicpmodules.hh:199
static const Scalar maximumGrowthRate()
Definition: blackoilmicpmodules.hh:392
static const Scalar yieldGrowthCoefficient()
Definition: blackoilmicpmodules.hh:437
static const Scalar detachmentRate()
Definition: blackoilmicpmodules.hh:367
static Scalar eqWeight(unsigned eqIdx)
Definition: blackoilmicpmodules.hh:230
static void computeFlux(RateVector &flux, const ElementContext &elemCtx, unsigned scvfIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:271
static void addSource(RateVector &source, const ElementContext &elemCtx, unsigned dofIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:300
static const Scalar halfVelocityOxygen()
Definition: blackoilmicpmodules.hh:382
static const Scalar densityBiofilm()
Definition: blackoilmicpmodules.hh:357
static bool eqApplies(unsigned eqIdx)
Definition: blackoilmicpmodules.hh:221
static const Scalar toleranceBeforeClogging()
Definition: blackoilmicpmodules.hh:432
static const Scalar fittingFactor()
Definition: blackoilmicpmodules.hh:377
static const Scalar microbialDeathRate()
Definition: blackoilmicpmodules.hh:417
static const Scalar maximumUreaConcentration()
Definition: blackoilmicpmodules.hh:402
static void registerOutputModules(Model &model, Simulator &simulator)
Register all MICP specific VTK and ECL output modules.
Definition: blackoilmicpmodules.hh:211
static void setMICPpara(const Scalar &densityBiofilm, const Scalar &densityCalcite, const Scalar &detachmentRate, const Scalar &criticalPorosity, const Scalar &fittingFactor, const Scalar &halfVelocityOxygen, const Scalar &halfVelocityUrea, const Scalar &maximumGrowthRate, const Scalar &maximumUreaUtilization, const Scalar &microbialAttachmentRate, const Scalar &microbialDeathRate, const Scalar &minimumPermeability, const Scalar &oxygenConsumptionFactor, const Scalar &yieldGrowthCoefficient, const Scalar &maximumOxygenConcentration, const Scalar &maximumUreaConcentration, const Scalar &toleranceBeforeClogging)
Specify the MICP properties a single region.
Definition: blackoilmicpmodules.hh:159
static const Scalar maximumUreaUtilization()
Definition: blackoilmicpmodules.hh:407
static const std::vector< Scalar > phi()
Definition: blackoilmicpmodules.hh:442
static const Scalar densityCalcite()
Definition: blackoilmicpmodules.hh:362
static void addStorage(Dune::FieldVector< LhsEval, numEq > &storage, const IntensiveQuantities &intQuants)
Definition: blackoilmicpmodules.hh:240
static const Scalar minimumPermeability()
Definition: blackoilmicpmodules.hh:422
static const Scalar microbialAttachmentRate()
Definition: blackoilmicpmodules.hh:412
static const Scalar criticalPorosity()
Definition: blackoilmicpmodules.hh:372
static const Scalar maximumOxygenConcentration()
Definition: blackoilmicpmodules.hh:397
static const Scalar oxygenConsumptionFactor()
Definition: blackoilmicpmodules.hh:427
static const Scalar halfVelocityUrea()
Definition: blackoilmicpmodules.hh:387
VTK output module for the MICP model's related quantities.
Definition: vtkblackoilmicpmodule.hh:63
static void registerParameters()
Register all run-time parameters for the multi-phase VTK output module.
Definition: vtkblackoilmicpmodule.hh:88
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:235
Struct holding the parameters for the BlackOilMICPModule class.
Definition: blackoilmicpparams.hh:37