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 params_.phi_ = eclState.fieldProps().get_double("PORO");
131 }
132#endif
133
141 static void checkCloggingMICP(const Model& model, const Scalar phi, unsigned dofIdx)
142 {
143 const PrimaryVariables& priVars = model.solution(/*timeIdx=*/1)[dofIdx];
144 if (phi - priVars[biofilmConcentrationIdx] - priVars[calciteConcentrationIdx] < toleranceBeforeClogging())
145 throw std::logic_error("Clogging has been (almost) reached in at least one cell\n");
146 }
147
153 static void setMICPpara(const Scalar& densityBiofilm,
154 const Scalar& densityCalcite,
155 const Scalar& detachmentRate,
156 const Scalar& criticalPorosity,
157 const Scalar& fittingFactor,
158 const Scalar& halfVelocityOxygen,
159 const Scalar& halfVelocityUrea,
160 const Scalar& maximumGrowthRate,
161 const Scalar& maximumUreaUtilization,
162 const Scalar& microbialAttachmentRate,
163 const Scalar& microbialDeathRate,
164 const Scalar& minimumPermeability,
165 const Scalar& oxygenConsumptionFactor,
166 const Scalar& yieldGrowthCoefficient,
167 const Scalar& maximumOxygenConcentration,
168 const Scalar& maximumUreaConcentration,
169 const Scalar& toleranceBeforeClogging)
170 {
171 params_.densityBiofilm_ = densityBiofilm;
172 params_.densityCalcite_ = densityCalcite;
173 params_.detachmentRate_ = detachmentRate;
174 params_.criticalPorosity_ = criticalPorosity;
175 params_.fittingFactor_ = fittingFactor;
176 params_.halfVelocityOxygen_ = halfVelocityOxygen;
177 params_.halfVelocityUrea_ = halfVelocityUrea;
178 params_.maximumGrowthRate_ = maximumGrowthRate;
179 params_.maximumUreaUtilization_ = maximumUreaUtilization;
180 params_.microbialAttachmentRate_ = microbialAttachmentRate;
181 params_.microbialDeathRate_ = microbialDeathRate;
182 params_.minimumPermeability_ = minimumPermeability;
183 params_.oxygenConsumptionFactor_ = oxygenConsumptionFactor;
184 params_.yieldGrowthCoefficient_ = yieldGrowthCoefficient;
185 params_.maximumOxygenConcentration_ = maximumOxygenConcentration;
186 params_.maximumUreaConcentration_ = maximumUreaConcentration;
187 params_.toleranceBeforeClogging_ = toleranceBeforeClogging;
188 }
189
193 static void registerParameters()
194 {
195 if (!enableMICP)
196 // MICP has been disabled at compile time
197 return;
198
200 }
201
205 static void registerOutputModules(Model& model,
206 Simulator& simulator)
207 {
208 if (!enableMICP)
209 // MICP has been disabled at compile time
210 return;
211
212 model.addOutputModule(new VtkBlackOilMICPModule<TypeTag>(simulator));
213 }
214
215 static bool eqApplies(unsigned eqIdx)
216 {
217 if (!enableMICP)
218 return false;
219
220 // All MICP components are true here
221 return eqIdx == contiMicrobialEqIdx || eqIdx == contiOxygenEqIdx || eqIdx == contiUreaEqIdx || eqIdx == contiBiofilmEqIdx || eqIdx == contiCalciteEqIdx;
222 }
223
224 static Scalar eqWeight([[maybe_unused]] unsigned eqIdx)
225 {
226 assert(eqApplies(eqIdx));
227
228 // TODO: it may be beneficial to chose this differently.
229 return static_cast<Scalar>(1.0);
230 }
231
232 // must be called after water storage is computed
233 template <class LhsEval>
234 static void addStorage(Dune::FieldVector<LhsEval, numEq>& storage,
235 const IntensiveQuantities& intQuants)
236 {
237 if (!enableMICP)
238 return;
239
240 LhsEval surfaceVolumeWater = Toolbox::template decay<LhsEval>(intQuants.porosity());
241 // avoid singular matrix if no water is present.
242 surfaceVolumeWater = max(surfaceVolumeWater, 1e-10);
243 // Suspended microbes in water phase
244 const LhsEval massMicrobes = surfaceVolumeWater * Toolbox::template decay<LhsEval>(intQuants.microbialConcentration());
245 LhsEval accumulationMicrobes = massMicrobes;
246 storage[contiMicrobialEqIdx] += accumulationMicrobes;
247 // Oxygen in water phase
248 const LhsEval massOxygen = surfaceVolumeWater * Toolbox::template decay<LhsEval>(intQuants.oxygenConcentration());
249 LhsEval accumulationOxygen = massOxygen;
250 storage[contiOxygenEqIdx] += accumulationOxygen;
251 // Urea in water phase
252 const LhsEval massUrea = surfaceVolumeWater * Toolbox::template decay<LhsEval>(intQuants.ureaConcentration());
253 LhsEval accumulationUrea = massUrea;
254 storage[contiUreaEqIdx] += accumulationUrea;
255 // Biofilm
256 const LhsEval massBiofilm = Toolbox::template decay<LhsEval>(intQuants.biofilmConcentration());
257 LhsEval accumulationBiofilm = massBiofilm;
258 storage[contiBiofilmEqIdx] += accumulationBiofilm;
259 // Calcite
260 const LhsEval massCalcite = Toolbox::template decay<LhsEval>(intQuants.calciteConcentration());
261 LhsEval accumulationCalcite = massCalcite;
262 storage[contiCalciteEqIdx] += accumulationCalcite;
263 }
264
265 static void computeFlux(RateVector& flux,
266 const ElementContext& elemCtx,
267 unsigned scvfIdx,
268 unsigned timeIdx)
269
270 {
271 if (!enableMICP)
272 return;
273
274 const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
275
276 const unsigned upIdx = extQuants.upstreamIndex(waterPhaseIdx);
277 const unsigned inIdx = extQuants.interiorIndex();
278 const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
279
280
281 if (upIdx == inIdx) {
282 flux[contiMicrobialEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * up.microbialConcentration();
283 flux[contiOxygenEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * up.oxygenConcentration();
284 flux[contiUreaEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * up.ureaConcentration();
285 }
286 else {
287 flux[contiMicrobialEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * decay<Scalar>(up.microbialConcentration());
288 flux[contiOxygenEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * decay<Scalar>(up.oxygenConcentration());
289 flux[contiUreaEqIdx] = extQuants.volumeFlux(waterPhaseIdx) * decay<Scalar>(up.ureaConcentration());
290 }
291 }
292
293 // See https://doi.org/10.1016/j.ijggc.2021.103256 for the micp processes in the model.
294 static void addSource(RateVector& source,
295 const ElementContext& elemCtx,
296 unsigned dofIdx,
297 unsigned timeIdx)
298
299 {
300 if (!enableMICP)
301 return;
302
303 // compute dpW (max norm of the pressure gradient in the cell center)
304 const IntensiveQuantities& intQuants = elemCtx.intensiveQuantities(dofIdx, timeIdx);
305 const auto& K = elemCtx.problem().intrinsicPermeability(elemCtx, dofIdx, 0);
306 size_t numInteriorFaces = elemCtx.numInteriorFaces(timeIdx);
307 Evaluation dpW = 0;
308 for (unsigned scvfIdx = 0; scvfIdx < numInteriorFaces; scvfIdx++) {
309 const auto& extQuants = elemCtx.extensiveQuantities(scvfIdx, timeIdx);
310 unsigned upIdx = extQuants.upstreamIndex(waterPhaseIdx);
311 const auto& up = elemCtx.intensiveQuantities(upIdx, timeIdx);
312 const Evaluation& mobWater = up.mobility(waterPhaseIdx);
313
314 // compute water velocity from flux
315 Evaluation waterVolumeVelocity = extQuants.volumeFlux(waterPhaseIdx) / (K[0][0] * mobWater);
316 dpW = std::max(dpW, abs(waterVolumeVelocity));
317 }
318
319 // get the model parameters
320 Scalar k_a = microbialAttachmentRate();
321 Scalar k_d = microbialDeathRate();
322 Scalar rho_b = densityBiofilm();
323 Scalar rho_c = densityCalcite();
324 Scalar k_str = detachmentRate();
325 Scalar k_o = halfVelocityOxygen();
326 Scalar k_u = halfVelocityUrea() / 10.0;//Dividing by scaling factor 10 (see WellInterface_impl.hpp)
327 Scalar mu = maximumGrowthRate();
328 Scalar mu_u = maximumUreaUtilization() / 10.0;//Dividing by scaling factor 10 (see WellInterface_impl.hpp)
329 Scalar Y_sb = yieldGrowthCoefficient();
330 Scalar F = oxygenConsumptionFactor();
331 Scalar Y_uc = 1.67 * 10; //Multiplying by scaling factor 10 (see WellInterface_impl.hpp)
332
333 // compute the processes
334 source[Indices::contiMicrobialEqIdx] += intQuants.microbialConcentration() * intQuants.porosity() *
335 (Y_sb * mu * intQuants.oxygenConcentration() / (k_o + intQuants.oxygenConcentration()) - k_d - k_a)
336 + rho_b * intQuants.biofilmConcentration() * k_str * pow(intQuants.porosity() * dpW, 0.58);
337
338 source[Indices::contiOxygenEqIdx] -= (intQuants.microbialConcentration() * intQuants.porosity() + rho_b * intQuants.biofilmConcentration()) *
339 F * mu * intQuants.oxygenConcentration() / (k_o + intQuants.oxygenConcentration());
340
341 source[Indices::contiUreaEqIdx] -= rho_b * intQuants.biofilmConcentration() * mu_u * intQuants.ureaConcentration() / (k_u + intQuants.ureaConcentration());
342
343 source[Indices::contiBiofilmEqIdx] += intQuants.biofilmConcentration() * (Y_sb * mu * intQuants.oxygenConcentration() / (k_o + intQuants.oxygenConcentration()) - k_d
344 - k_str * pow(intQuants.porosity() * dpW, 0.58) - Y_uc * (rho_b / rho_c) * intQuants.biofilmConcentration() * mu_u *
345 (intQuants.ureaConcentration() / (k_u + intQuants.ureaConcentration())) / (intQuants.porosity() + intQuants.biofilmConcentration()))
346 + k_a * intQuants.microbialConcentration() * intQuants.porosity() / rho_b;
347
348 source[Indices::contiCalciteEqIdx] += (rho_b / rho_c) * intQuants.biofilmConcentration() * Y_uc * mu_u * intQuants.ureaConcentration() / (k_u + intQuants.ureaConcentration());
349 }
350
351 static const Scalar densityBiofilm()
352 {
353 return params_.densityBiofilm_;
354 }
355
356 static const Scalar densityCalcite()
357 {
358 return params_.densityCalcite_;
359 }
360
361 static const Scalar detachmentRate()
362 {
363 return params_.detachmentRate_;
364 }
365
366 static const Scalar criticalPorosity()
367 {
368 return params_.criticalPorosity_;
369 }
370
371 static const Scalar fittingFactor()
372 {
373 return params_.fittingFactor_;
374 }
375
376 static const Scalar halfVelocityOxygen()
377 {
378 return params_.halfVelocityOxygen_;
379 }
380
381 static const Scalar halfVelocityUrea()
382 {
383 return params_.halfVelocityUrea_;
384 }
385
386 static const Scalar maximumGrowthRate()
387 {
388 return params_.maximumGrowthRate_;
389 }
390
391 static const Scalar maximumOxygenConcentration()
392 {
393 return params_.maximumOxygenConcentration_;
394 }
395
396 static const Scalar maximumUreaConcentration()
397 {
398 return params_.maximumUreaConcentration_ / 10.0;//Dividing by scaling factor 10 (see WellInterface_impl.hpp);
399 }
400
401 static const Scalar maximumUreaUtilization()
402 {
403 return params_.maximumUreaUtilization_;
404 }
405
406 static const Scalar microbialAttachmentRate()
407 {
408 return params_.microbialAttachmentRate_;
409 }
410
411 static const Scalar microbialDeathRate()
412 {
413 return params_.microbialDeathRate_;
414 }
415
416 static const Scalar minimumPermeability()
417 {
418 return params_.minimumPermeability_;
419 }
420
421 static const Scalar oxygenConsumptionFactor()
422 {
423 return params_.oxygenConsumptionFactor_;
424 }
425
426 static const Scalar toleranceBeforeClogging()
427 {
428 return params_.toleranceBeforeClogging_;
429 }
430
431 static const Scalar yieldGrowthCoefficient()
432 {
433 return params_.yieldGrowthCoefficient_;
434 }
435
436 static const std::vector<Scalar> phi()
437 {
438 return params_.phi_;
439 }
440
441private:
442 static BlackOilMICPParams<Scalar> params_;
443};
444
445
446template <class TypeTag, bool enableMICPV>
447BlackOilMICPParams<typename BlackOilMICPModule<TypeTag, enableMICPV>::Scalar>
448BlackOilMICPModule<TypeTag, enableMICPV>::params_;
449
457template <class TypeTag, bool enableMICPV = getPropValue<TypeTag, Properties::EnableMICP>()>
459{
461
468
470
471 static constexpr int microbialConcentrationIdx = Indices::microbialConcentrationIdx;
472 static constexpr int oxygenConcentrationIdx = Indices::oxygenConcentrationIdx;
473 static constexpr int ureaConcentrationIdx = Indices::ureaConcentrationIdx;
474 static constexpr int biofilmConcentrationIdx = Indices::biofilmConcentrationIdx;
475 static constexpr int calciteConcentrationIdx = Indices::calciteConcentrationIdx;
476 static constexpr int waterPhaseIdx = FluidSystem::waterPhaseIdx;
477
478
479public:
480
486 void MICPPropertiesUpdate_(const ElementContext& elemCtx,
487 unsigned dofIdx,
488 unsigned timeIdx)
489 {
490 const auto linearizationType = elemCtx.linearizationType();
491 const PrimaryVariables& priVars = elemCtx.primaryVars(dofIdx, timeIdx);
492 const auto& intQuants = elemCtx.intensiveQuantities(dofIdx, timeIdx);
493 const auto& K = elemCtx.problem().intrinsicPermeability(elemCtx, dofIdx, timeIdx);
494 Scalar referencePorosity_ = elemCtx.problem().porosity(elemCtx, dofIdx, timeIdx);
495 Scalar eta = MICPModule::fittingFactor();
496 Scalar k_min = MICPModule::minimumPermeability();
497 Scalar phi_crit = MICPModule::criticalPorosity();
498
499 microbialConcentration_ = priVars.makeEvaluation(microbialConcentrationIdx, timeIdx, linearizationType);
500 oxygenConcentration_ = priVars.makeEvaluation(oxygenConcentrationIdx, timeIdx, linearizationType);
501 ureaConcentration_ = priVars.makeEvaluation(ureaConcentrationIdx, timeIdx, linearizationType);
502 biofilmConcentration_ = priVars.makeEvaluation(biofilmConcentrationIdx, timeIdx, linearizationType);
503 calciteConcentration_ = priVars.makeEvaluation(calciteConcentrationIdx, timeIdx, linearizationType);
504
505 // Permeability reduction due to MICP, by adjusting the water mobility
506 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]);
507
508 }
509
510 const Evaluation& microbialConcentration() const
511 { return microbialConcentration_; }
512
513 const Evaluation& oxygenConcentration() const
514 { return oxygenConcentration_; }
515
516 const Evaluation& ureaConcentration() const
517 { return ureaConcentration_; }
518
519 const Evaluation& biofilmConcentration() const
520 { return biofilmConcentration_; }
521
522 const Evaluation& calciteConcentration() const
523 { return calciteConcentration_; }
524
525
526protected:
527 Implementation& asImp_()
528 { return *static_cast<Implementation*>(this); }
529
535
536};
537
538template <class TypeTag>
540{
544
545public:
546 void MICPPropertiesUpdate_(const ElementContext&,
547 unsigned,
548 unsigned)
549 { }
550
551 const Evaluation& microbialConcentration() const
552 { throw std::logic_error("microbialConcentration() called but MICP is disabled"); }
553
554 const Evaluation& oxygenConcentration() const
555 { throw std::logic_error("oxygenConcentration() called but MICP is disabled"); }
556
557 const Evaluation& ureaConcentration() const
558 { throw std::logic_error("ureaConcentration() called but MICP is disabled"); }
559
560 const Evaluation& biofilmConcentration() const
561 { throw std::logic_error("biofilmConcentration() called but MICP is disabled"); }
562
563 const Evaluation& calciteConcentration() const
564 { throw std::logic_error("calciteConcentration() called but MICP is disabled"); }
565};
566
574template <class TypeTag, bool enableMICPV = getPropValue<TypeTag, Properties::EnableMICP>()>
576{
578
579private:
580 Implementation& asImp_()
581 { return *static_cast<Implementation*>(this); }
582
583};
584
585template <class TypeTag>
586class BlackOilMICPExtensiveQuantities<TypeTag, false>{};
587
588} // namespace Opm
589
590#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:576
void MICPPropertiesUpdate_(const ElementContext &, unsigned, unsigned)
Definition: blackoilmicpmodules.hh:546
const Evaluation & ureaConcentration() const
Definition: blackoilmicpmodules.hh:557
const Evaluation & oxygenConcentration() const
Definition: blackoilmicpmodules.hh:554
const Evaluation & microbialConcentration() const
Definition: blackoilmicpmodules.hh:551
const Evaluation & calciteConcentration() const
Definition: blackoilmicpmodules.hh:563
const Evaluation & biofilmConcentration() const
Definition: blackoilmicpmodules.hh:560
Provides the volumetric quantities required for the equations needed by the MICP extension of the bla...
Definition: blackoilmicpmodules.hh:459
void MICPPropertiesUpdate_(const ElementContext &elemCtx, unsigned dofIdx, unsigned timeIdx)
Update the intensive properties needed to handle MICP from the primary variables.
Definition: blackoilmicpmodules.hh:486
Evaluation biofilmConcentration_
Definition: blackoilmicpmodules.hh:533
const Evaluation & biofilmConcentration() const
Definition: blackoilmicpmodules.hh:519
Implementation & asImp_()
Definition: blackoilmicpmodules.hh:527
Evaluation oxygenConcentration_
Definition: blackoilmicpmodules.hh:531
const Evaluation & calciteConcentration() const
Definition: blackoilmicpmodules.hh:522
Evaluation ureaConcentration_
Definition: blackoilmicpmodules.hh:532
const Evaluation & microbialConcentration() const
Definition: blackoilmicpmodules.hh:510
const Evaluation & ureaConcentration() const
Definition: blackoilmicpmodules.hh:516
Evaluation microbialConcentration_
Definition: blackoilmicpmodules.hh:530
Evaluation calciteConcentration_
Definition: blackoilmicpmodules.hh:534
const Evaluation & oxygenConcentration() const
Definition: blackoilmicpmodules.hh:513
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:141
static void registerParameters()
Register all run-time parameters for the black-oil MICP module.
Definition: blackoilmicpmodules.hh:193
static const Scalar maximumGrowthRate()
Definition: blackoilmicpmodules.hh:386
static const Scalar yieldGrowthCoefficient()
Definition: blackoilmicpmodules.hh:431
static const Scalar detachmentRate()
Definition: blackoilmicpmodules.hh:361
static Scalar eqWeight(unsigned eqIdx)
Definition: blackoilmicpmodules.hh:224
static void computeFlux(RateVector &flux, const ElementContext &elemCtx, unsigned scvfIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:265
static void addSource(RateVector &source, const ElementContext &elemCtx, unsigned dofIdx, unsigned timeIdx)
Definition: blackoilmicpmodules.hh:294
static const Scalar halfVelocityOxygen()
Definition: blackoilmicpmodules.hh:376
static const Scalar densityBiofilm()
Definition: blackoilmicpmodules.hh:351
static bool eqApplies(unsigned eqIdx)
Definition: blackoilmicpmodules.hh:215
static const Scalar toleranceBeforeClogging()
Definition: blackoilmicpmodules.hh:426
static const Scalar fittingFactor()
Definition: blackoilmicpmodules.hh:371
static const Scalar microbialDeathRate()
Definition: blackoilmicpmodules.hh:411
static const Scalar maximumUreaConcentration()
Definition: blackoilmicpmodules.hh:396
static void registerOutputModules(Model &model, Simulator &simulator)
Register all MICP specific VTK and ECL output modules.
Definition: blackoilmicpmodules.hh:205
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:153
static const Scalar maximumUreaUtilization()
Definition: blackoilmicpmodules.hh:401
static const std::vector< Scalar > phi()
Definition: blackoilmicpmodules.hh:436
static const Scalar densityCalcite()
Definition: blackoilmicpmodules.hh:356
static void addStorage(Dune::FieldVector< LhsEval, numEq > &storage, const IntensiveQuantities &intQuants)
Definition: blackoilmicpmodules.hh:234
static const Scalar minimumPermeability()
Definition: blackoilmicpmodules.hh:416
static const Scalar microbialAttachmentRate()
Definition: blackoilmicpmodules.hh:406
static const Scalar criticalPorosity()
Definition: blackoilmicpmodules.hh:366
static const Scalar maximumOxygenConcentration()
Definition: blackoilmicpmodules.hh:391
static const Scalar oxygenConsumptionFactor()
Definition: blackoilmicpmodules.hh:421
static const Scalar halfVelocityUrea()
Definition: blackoilmicpmodules.hh:381
VTK output module for the MICP model's related quantities.
Definition: vtkblackoilmicpmodule.hh:86
static void registerParameters()
Register all run-time parameters for the multi-phase VTK output module.
Definition: vtkblackoilmicpmodule.hh:111
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
Struct holding the parameters for the BlackOilMICPModule class.
Definition: blackoilmicpparams.hh:37