FlowProblemTPSA.hpp
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 Copyright 2025 NORCE AS
5
6 This file is part of the Open Porous Media project (OPM).
7
8 OPM is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 2 of the License, or
11 (at your option) any later version.
12
13 OPM is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with OPM. If not, see <http://www.gnu.org/licenses/>.
20
21 Consult the COPYING file in the top-level source directory of this
22 module for the precise wording of the license and the list of
23 copyright holders.
24*/
25#ifndef FLOW_PROBLEM_TPSA_HPP
26#define FLOW_PROBLEM_TPSA_HPP
27
28#include <dune/common/fvector.hh>
29
30#include <dune/grid/common/rangegenerators.hh>
31
32#include <opm/common/OpmLog/OpmLog.hpp>
33
34#include <opm/input/eclipse/EclipseState/Grid/FaceDir.hpp>
35
36#include <opm/material/common/MathToolbox.hpp>
37#include <opm/material/materialstates/MaterialStateTPSA.hpp>
38#include <opm/material/thermal/EnergyModuleType.hpp>
39
44
47
48#include <cmath>
49#include <memory>
50#include <stdexcept>
51#include <string>
52#include <utility>
53
54#include <fmt/format.h>
55
56
57namespace Opm {
58
62template <class TypeTag>
63class FlowProblemTPSA : public FlowProblemBlackoil<TypeTag>
64{
65public:
67
79
80 enum { dimWorld = GridView::dimensionworld };
81 enum { enableMech = getPropValue<TypeTag, Properties::EnableMech>() };
82 enum { historySize = getPropValue<TypeTag, Properties::SolutionHistorySizeTPSA>() };
83 enum { numEq = getPropValue<TypeTag, Properties::NumEqTPSA>() };
84 enum { numPhases = FluidSystem::numPhases };
85
86 static constexpr EnergyModules energyModuleType =
87 getPropValue<TypeTag, Properties::EnergyModuleType>();
88
89 enum { contiRotEqIdx = Indices::contiRotEqIdx };
90 enum { contiSolidPresEqIdx = Indices::contiSolidPresEqIdx };
91 enum { solidPres0Idx = Indices::solidPres0Idx };
92
94 using DimVector = Dune::FieldVector<Scalar, dimWorld>;
95 using EvalDimVector = Dune::FieldVector<Evaluation, dimWorld>;
97 using InitialMaterialState = MaterialStateTPSA<Scalar>;
98 using Toolbox = MathToolbox<Evaluation>;
99
100 // Boundary condition helper struct
102 {
103 BCMECHType type;
107 };
108
109 // ///
110 // Public functions
111 // ///
118 : ParentType(simulator)
119 , faceProps_(simulator.vanguard().eclState(),
120 simulator.vanguard().gridView(),
121 simulator.vanguard().cartesianIndexMapper(),
122 simulator.vanguard().grid(),
123 simulator.vanguard().cellCentroids())
124 , geoMechModel_(simulator)
125 {
126 if constexpr(enableMech) {
127 // Add VTK TPSA to output module
128 this->model().addOutputModule(std::make_unique<VtkTpsaModule<TypeTag>>(simulator));
129
130 // Sanity check
131 const auto& mechSolver = simulator.vanguard().eclState().runspec().mechSolver();
132 if (!mechSolver.tpsa()) {
133 std::string msg = "Simulator with Tpsa-geomechanics enabled compile time, but deck does not contain "
134 "TPSA keyword!";
135 OpmLog::error(msg);
136 throw std::runtime_error(msg);
137 }
138
139 // Warn against using aquifers with TPSA
140 if (simulator.vanguard().eclState().aquifer().active()) {
141 OpmLog::warning("TPSA geomechanics does not handle numerical or analytical "
142 "aquifers, hence results may be inaccurate!");
143 }
144 }
145 else {
146 // Sanity check
147 const auto& mechSolver = simulator.vanguard().eclState().runspec().mechSolver();
148 if (mechSolver.tpsa()) {
149 std::string msg = "TPSA keyword in deck, but Tpsa-geomechanics disabled compile-time!";
150 OpmLog::error(msg);
151 throw std::runtime_error(msg);
152 }
153 }
154 }
155
159 static void registerParameters()
160 {
161 // Register parameters for parent class
163
164 // Geomech model parameters
165 GeomechModel::registerParameters();
166
167 // VTK output parameters
169 }
170
175 {
176 // FlowProblemBlackoil::finishInit()
178
179 // Read initial conditions and set material state
181
182 // Calculate face properties
183 faceProps_.finishInit();
184
185 // Set equation weights
187
188 // Initialize the TPSA model
189 geoMechModel_.finishInit();
190 }
191
198 {
199 // Set up initial solution for the Flow model
201
202 // Initialize soultions as zero
203 auto& uCur = geoMechModel_.solution(/*timeIdx=*/0);
204 uCur = Scalar(0.0);
205
206 // Loop through grid and set initial solution from material state
207 ElementContext elemCtx(this->simulator());
208 for (const auto& elem : elements(this->gridView())) {
209 // Ignore everything which is not in the interior if the current process' piece of the grid
210 if (elem.partitionType() != Dune::InteriorEntity) {
211 continue;
212 }
213
214 // Loop over sub control volumes and set initial solutions
215 elemCtx.updateStencil(elem);
216 for (unsigned dofIdx = 0; dofIdx < elemCtx.numPrimaryDof(/*timeIdx=*/0); ++dofIdx) {
217 const unsigned globalIdx = elemCtx.globalSpaceIndex(dofIdx, /*timeIdx=*/0);
218 auto& priVars = uCur[globalIdx];
219 priVars.assignNaive(initialMaterialState_[globalIdx]);
220 priVars.checkDefined();
221 }
222 }
223
224 // synchronize the ghost/overlapping DOFs (if necessary)
225 geoMechModel_.syncOverlap();
226
227 // Set history solutions to the initial solution.
228 for (unsigned timeIdx = 1; timeIdx < historySize; ++timeIdx) {
229 geoMechModel_.solution(timeIdx) = geoMechModel_.solution(/*timeIdx=*/0);
230 }
231
232 // Set material state
233 geoMechModel_.updateMaterialState(/*timeIdx=*/0);
234 }
235
240 {
241 // Average shear modulus over domain
242 Scalar avgSmodulus = 0.0;
243 const auto& gridView = this->gridView();
244 ElementContext elemCtx(this->simulator());
245 unsigned numDof = 0;
246 for(const auto& elem: elements(gridView, Dune::Partitions::interior)) {
247 elemCtx.updatePrimaryStencil(elem);
248 int elemIdx = elemCtx.globalSpaceIndex(/*spaceIdx=*/0, /*timeIdx=*/0);
249 avgSmodulus += this->shearModulus(elemIdx);
250 ++numDof;
251 }
252 const auto& comm = this->simulator().vanguard().grid().comm();
253 avgSmodulus = comm.sum(avgSmodulus);
254 Scalar numTotalDof = comm.sum(numDof);
255 avgSmodulus /= numTotalDof;
256 avgSmodulus = std::sqrt(avgSmodulus);
257
258 for (unsigned eqIdx = 0; eqIdx < numEq; ++eqIdx) {
259 if (eqIdx < contiRotEqIdx) {
260 geoMechModel_.setEqWeight(eqIdx, 1 / avgSmodulus);
261 }
262 else {
263 geoMechModel_.setEqWeight(eqIdx, avgSmodulus);
264 }
265 }
266 }
267
271 void beginTimeStep() override
272 {
273 // Call parent class beginTimeStep()
275
276 // Update mechanics boundary conditions.
277 // NOTE: Flow boundary conditions should be updated in ParentType::beginTimeStep()
278 if (this->nonTrivialBoundaryConditions()) {
279 geoMechModel_.linearizer().updateBoundaryConditionData();
280 }
281 }
282
286 void endTimeStep() override
287 {
288 // Update info for mechanics output
289 // OBS: Must be done before ParentClass::endTimeStep!
290 geoMechModel().linearizer().updateStressInfo();
291
292 // Call parent class endTimeStep()
294 }
295
307 MechBCData
308 mechBoundaryCondition(const unsigned int globalSpaceIdx, const int directionId)
309 {
310 // Default boundary conditions if BCCON/BCMECH not defined
311 if (!this->nonTrivialBoundaryConditions()) {
312 return {BCMECHType::NONE, EvalDimVector{0.0, 0.0, 0.0}, 0.0, 0.0};
313 }
314
315 // Default for BCMECH index = 0 or no BCMECH defined at current episode
316 FaceDir::DirEnum dir = FaceDir::FromIntersectionIndex(directionId);
317 const auto& schedule = this->simulator().vanguard().schedule();
318 if (this->bcindex_(dir)[globalSpaceIdx] == 0
319 || schedule[this->episodeIndex()].bcstate.size() == 0) {
320 return {BCMECHType::NONE, EvalDimVector{0.0, 0.0, 0.0}, 0.0, 0.0};
321 }
322
323 // Get current BC
324 const auto& bc =
325 schedule[this->episodeIndex()].bcstate[this->bcindex_(dir)[globalSpaceIdx]];
326 if (bc.bcmechtype == BCMECHType::FREE) {
327 return {BCMECHType::FREE, EvalDimVector{0.0, 0.0, 0.0}, 0.0, 0.0};
328 }
329 if (bc.bcmechtype == BCMECHType::SPRING) {
330 const auto& mechbcval = bc.mechbcvalue;
331 return {BCMECHType::SPRING, EvalDimVector{0.0, 0.0, 0.0},
332 mechbcval.distance, mechbcval.shearmodulus};
333 }
334
335 // Default return
336 return {bc.bcmechtype, EvalDimVector{0.0, 0.0, 0.0}, 0.0, 0.0};
337 }
338
348 void tpsaSource(Dune::FieldVector<Evaluation, numEq>& sourceTerm,
349 unsigned globalSpaceIdx,
350 unsigned timeIdx)
351 {
352 sourceTerm = 0.0;
353
354 // Coupling term Flow -> TPSA
355 const auto biot = this->biotCoeff(globalSpaceIdx);
356 const auto lameParam = this->lame(globalSpaceIdx);
357
358 const auto& iq = this->model().intensiveQuantities(globalSpaceIdx, timeIdx);
359 const auto& fs = iq.fluidState();
360 const auto pres = decay<Scalar>(fs.pressure(this->refPressurePhaseIdx_()));
361 const auto initPres = this->initialFluidState(globalSpaceIdx).pressure(this->refPressurePhaseIdx_());
362 const auto dPres = biot * (pres - initPres);
363
364 auto sourceFromFlow = -dPres / lameParam;
365
366 if constexpr (energyModuleType == EnergyModules::FullyImplicitThermal) {
367 const auto biotTemp = this->biotTemp(globalSpaceIdx);
368 const auto temp = decay<Scalar>(fs.temperature(0));
369 const auto initTemp = this->initialFluidState(globalSpaceIdx).temperature(0);
370 const auto dTemp = biotTemp * (temp - initTemp);
371 sourceFromFlow += -dTemp / lameParam;
372
373 // Store potential temperature force for output
374 geoMechModel_.setMechPotentialTempForce(globalSpaceIdx, dTemp);
375 }
376
377 // Add calculated source terms to output
378 sourceTerm[contiSolidPresEqIdx] += sourceFromFlow;
379
380 // Store potential pressure force for output
381 geoMechModel_.setMechPotentialPressForce(globalSpaceIdx, dPres);
382 }
383
393 Scalar rockMechPoroChange(unsigned elementIdx, unsigned timeIdx) const
394 {
395 // TODO: get timeIdx=1 solid pressure from a cached materialState (or intensiveQuantities) if/when implemented
396 assert (timeIdx <= historySize);
397 const auto solidPres = (timeIdx == 0) ?
398 decay<Scalar>( geoMechModel_.materialState(elementIdx, /*timeIdx=*/timeIdx).solidPressure()) :
399 geoMechModel_.solution(/*timeIdx=*/timeIdx)[elementIdx][solidPres0Idx];
400 const auto biot = this->biotCoeff(elementIdx);
401 const auto lameParam = this->lame(elementIdx);
402
403 return biot / lameParam * solidPres;
404 }
405
412 {
413 return this->simulator().vanguard().eclState().getTableManager().stCond().temperature;
414 }
415
416 // ///
417 // Public get functions
418 // ///
426 Scalar weightAverage(unsigned globalElemIdxIn, unsigned globalElemIdxOut)
427 {
428 return faceProps_.weightAverage(globalElemIdxIn, globalElemIdxOut);
429 }
430
438 Scalar weightAverageBoundary(unsigned globalElemIdxIn, unsigned boundaryFaceIdx) const
439 {
440 return faceProps_.weightAverageBoundary(globalElemIdxIn, boundaryFaceIdx);
441 }
442
450 Scalar weightProduct(unsigned globalElemIdxIn, unsigned globalElemIdxOut) const
451 {
452 return faceProps_.weightProduct(globalElemIdxIn, globalElemIdxOut);
453 }
454
462 Scalar normalDistance(unsigned globalElemIdxIn, unsigned globalElemIdxOut) const
463 {
464 return faceProps_.normalDistance(globalElemIdxIn, globalElemIdxOut);
465 }
466
474 Scalar normalDistanceBoundary(unsigned globalElemIdxIn, unsigned boundaryFaceIdx) const
475 {
476 return faceProps_.normalDistanceBoundary(globalElemIdxIn, boundaryFaceIdx);
477 }
478
486 DimVector cellFaceNormal(unsigned globalElemIdxIn, unsigned globalElemIdxOut)
487 {
488 return faceProps_.cellFaceNormal(globalElemIdxIn, globalElemIdxOut);
489 }
490
498 const DimVector& cellFaceNormalBoundary(unsigned globalElemIdxIn, unsigned boundaryFaceIdx) const
499 {
500 return faceProps_.cellFaceNormalBoundary(globalElemIdxIn, boundaryFaceIdx);
501 }
502
509 Scalar shearModulus(unsigned globalElemIdx) const
510 {
511 return faceProps_.shearModulus(globalElemIdx);
512 }
513
519 bool laggedScheme() const
520 {
521 const auto& mechSolver = this->simulator().vanguard().eclState().runspec().mechSolver();
522 return mechSolver.laggedScheme();
523 }
524
530 bool fixedStressScheme() const
531 {
532 const auto& mechSolver = this->simulator().vanguard().eclState().runspec().mechSolver();
533 return mechSolver.fixedStressScheme();
534 }
535
542 {
543 return geoMechModel_;
544 }
545
552 {
553 return geoMechModel_;
554 }
555
561 std::pair<int, int> fixedStressParameters() const
562 {
563 const auto& mechSolver = this->simulator().vanguard().eclState().runspec().mechSolver();
564 return std::make_pair(mechSolver.fixedStressMinIter(), mechSolver.fixedStressMaxIter());
565 }
566
567protected:
568 // ///
569 // Protected functions
570 // ///
575 {
576 // ///
577 // OBS: No equilibration keywords (e.g., STREQUIL) implemented yet!
578 // ///
579
580 // Set all initial material state variables to zero
581 std::size_t numDof = this->model().numGridDof();
582 initialMaterialState_.resize(numDof);
583 for (std::size_t dofIdx = 0; dofIdx < numDof; ++dofIdx) {
584 auto& dofMaterialState = initialMaterialState_[dofIdx];
585 for (unsigned dirIdx = 0; dirIdx < 3; ++dirIdx) {
586 dofMaterialState.setDisplacement(dirIdx, 0.0);
587 dofMaterialState.setRotation(dirIdx, 0.0);
588 }
589 dofMaterialState.setSolidPressure(0.0);
590 }
591 }
592
593private:
594 FaceProperties faceProps_;
595 GeomechModel geoMechModel_;
596
597 std::vector<Scalar> biotcoeff_;
598 std::vector<InitialMaterialState> initialMaterialState_;
599}; // class FlowProblemTPSA
600
601} // namespace Opm
602
603#endif
Definition: CollectDataOnIORank.hpp:50
Cell face properties needed in TPSA equation calculations.
Definition: FacePropertiesTPSA.hpp:48
void finishInit()
Compute TPSA face properties.
Definition: FacePropertiesTPSA_impl.hpp:96
const Scalar shearModulus(unsigned elemIdx) const
Return shear modulus of an element.
Definition: FacePropertiesTPSA.hpp:77
Scalar weightProduct(unsigned elemIdx1, unsigned elemIdx2) const
Product of weights at interface between two elements.
Definition: FacePropertiesTPSA_impl.hpp:343
DimVector cellFaceNormal(unsigned elemIdx1, unsigned elemIdx2)
Cell face normal at interface between two elements.
Definition: FacePropertiesTPSA_impl.hpp:402
Scalar weightAverage(unsigned elemIdx1, unsigned elemIdx2) const
Average (half-)weight at interface between two elements.
Definition: FacePropertiesTPSA_impl.hpp:304
Scalar normalDistanceBoundary(unsigned elemIdx1, unsigned boundaryFaceIdx) const
Distance to boundary interface.
Definition: FacePropertiesTPSA_impl.hpp:385
Scalar weightAverageBoundary(unsigned elemIdx1, unsigned boundaryFaceIdx) const
Average (half-)weight at boundary interface.
Definition: FacePropertiesTPSA_impl.hpp:329
const DimVector & cellFaceNormalBoundary(unsigned elemIdx1, unsigned boundaryFaceIdx) const
Cell face normal of boundary interface.
Definition: FacePropertiesTPSA_impl.hpp:424
Scalar normalDistance(unsigned elemIdx1, unsigned elemIdx2) const
Distance between two elements.
Definition: FacePropertiesTPSA_impl.hpp:371
This problem simulates an input file given in the data format used by the commercial ECLiPSE simulato...
Definition: FlowProblemBlackoil.hpp:76
void endTimeStep() override
Called by the simulator after each time integration.
Definition: FlowProblemBlackoil.hpp:440
const InitialFluidState & initialFluidState(unsigned globalDofIdx) const
Definition: FlowProblemBlackoil.hpp:709
void finishInit()
Called by the Opm::Simulator in order to initialize the problem.
Definition: FlowProblemBlackoil.hpp:314
void initialSolutionApplied() override
Callback used by the model to indicate that the initial solution has been determined for all degrees ...
Definition: FlowProblemBlackoil.hpp:560
void beginTimeStep() override
Called by the simulator before each time integration.
Definition: FlowProblemBlackoil.hpp:305
static void registerParameters()
Registers all available parameters for the problem and the model.
Definition: FlowProblemBlackoil.hpp:164
GetPropType< TypeTag, Properties::Evaluation > Evaluation
Definition: FlowProblem.hpp:161
bool nonTrivialBoundaryConditions() const
Definition: FlowProblem.hpp:1144
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: FlowProblem.hpp:103
GetPropType< TypeTag, Properties::BaseProblem > ParentType
Definition: FlowProblem.hpp:100
GetPropType< TypeTag, Properties::ElementContext > ElementContext
Definition: FlowProblem.hpp:153
GetPropType< TypeTag, Properties::RateVector > RateVector
Definition: FlowProblem.hpp:150
BCData< int > bcindex_
Definition: FlowProblem.hpp:2060
int episodeIndex() const
Definition: FlowProblem.hpp:308
Scalar biotTemp(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: FlowProblem.hpp:804
GetPropType< TypeTag, Properties::Indices > Indices
Definition: FlowProblem.hpp:110
GetPropType< TypeTag, Properties::Simulator > Simulator
Definition: FlowProblem.hpp:151
Scalar lame(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: FlowProblem.hpp:784
GetPropType< TypeTag, Properties::GridView > GridView
Definition: FlowProblem.hpp:104
Scalar biotCoeff(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: FlowProblem.hpp:794
GetPropType< TypeTag, Properties::FluidSystem > FluidSystem
Definition: FlowProblem.hpp:106
int refPressurePhaseIdx_() const
Definition: FlowProblem.hpp:1925
MathToolbox< Evaluation > Toolbox
Definition: FlowProblem.hpp:166
Problem for Flow-TPSA coupled simulations.
Definition: FlowProblemTPSA.hpp:64
@ solidPres0Idx
Definition: FlowProblemTPSA.hpp:91
@ enableMech
Definition: FlowProblemTPSA.hpp:81
Scalar shearModulus(unsigned globalElemIdx) const
Direct access to shear modulus in an element.
Definition: FlowProblemTPSA.hpp:509
Scalar weightAverageBoundary(unsigned globalElemIdxIn, unsigned boundaryFaceIdx) const
Direct access to normal distance at the boundary.
Definition: FlowProblemTPSA.hpp:438
static void registerParameters()
Register runtime parameters.
Definition: FlowProblemTPSA.hpp:159
const DimVector & cellFaceNormalBoundary(unsigned globalElemIdxIn, unsigned boundaryFaceIdx) const
Direct access to face normal at the boundary.
Definition: FlowProblemTPSA.hpp:498
GetPropType< TypeTag, Properties::ModelTPSA > GeomechModel
Definition: FlowProblemTPSA.hpp:72
void initialSolutionApplied() override
Set initial solution for the problem.
Definition: FlowProblemTPSA.hpp:197
void endTimeStep() override
Called by simulator at the end of each timestep.
Definition: FlowProblemTPSA.hpp:286
@ dimWorld
Definition: FlowProblemTPSA.hpp:80
std::pair< int, int > fixedStressParameters() const
Get fixed-stress iteration parameters.
Definition: FlowProblemTPSA.hpp:561
@ contiRotEqIdx
Definition: FlowProblemTPSA.hpp:89
void beginTimeStep() override
Called by the simulator before each time integration.
Definition: FlowProblemTPSA.hpp:271
@ historySize
Definition: FlowProblemTPSA.hpp:82
GetPropType< TypeTag, Properties::ElementMapper > ElementMapper
Definition: FlowProblemTPSA.hpp:69
@ contiSolidPresEqIdx
Definition: FlowProblemTPSA.hpp:90
DimVector cellFaceNormal(unsigned globalElemIdxIn, unsigned globalElemIdxOut)
Direct access to face normal between two elements.
Definition: FlowProblemTPSA.hpp:486
bool fixedStressScheme() const
Flow-TPSA fixed-stress coupling scheme activated?
Definition: FlowProblemTPSA.hpp:530
Dune::FieldVector< Scalar, dimWorld > DimVector
Definition: FlowProblemTPSA.hpp:94
Scalar normalDistance(unsigned globalElemIdxIn, unsigned globalElemIdxOut) const
Direct access to normal distance between two elements.
Definition: FlowProblemTPSA.hpp:462
void computeAndSetEqWeights_()
Compute weights to rescale the TPSA equations.
Definition: FlowProblemTPSA.hpp:239
const GeomechModel & geoMechModel() const
Get TPSA model.
Definition: FlowProblemTPSA.hpp:541
Scalar weightAverage(unsigned globalElemIdxIn, unsigned globalElemIdxOut)
Direct access to average (half-)weight at interface between two elements.
Definition: FlowProblemTPSA.hpp:426
MaterialStateTPSA< Scalar > InitialMaterialState
Definition: FlowProblemTPSA.hpp:97
void tpsaSource(Dune::FieldVector< Evaluation, numEq > &sourceTerm, unsigned globalSpaceIdx, unsigned timeIdx)
Set mechanics source term, in particular coupling terms.
Definition: FlowProblemTPSA.hpp:348
Dune::FieldVector< Evaluation, dimWorld > EvalDimVector
Definition: FlowProblemTPSA.hpp:95
@ numEq
Definition: FlowProblemTPSA.hpp:83
GeomechModel & geoMechModel()
Get TPSA model.
Definition: FlowProblemTPSA.hpp:551
FlowProblemTPSA(Simulator &simulator)
Constructor.
Definition: FlowProblemTPSA.hpp:117
GetPropType< TypeTag, Properties::Scalar > Scalar
Definition: FlowProblemTPSA.hpp:77
static constexpr EnergyModules energyModuleType
Definition: FlowProblemTPSA.hpp:86
Scalar rockMechPoroChange(unsigned elementIdx, unsigned timeIdx) const
Pore volume change due to geomechanics.
Definition: FlowProblemTPSA.hpp:393
void finishInit()
Initialize the problem.
Definition: FlowProblemTPSA.hpp:174
Scalar rockReferenceTemperature() const
Reference temperature for thermoelasticity.
Definition: FlowProblemTPSA.hpp:411
bool laggedScheme() const
Flow-TPSA lagged coupling scheme activated?
Definition: FlowProblemTPSA.hpp:519
Scalar normalDistanceBoundary(unsigned globalElemIdxIn, unsigned boundaryFaceIdx) const
Direct access to normal distance at the boundary.
Definition: FlowProblemTPSA.hpp:474
GetPropType< TypeTag, Properties::Grid > Grid
Definition: FlowProblemTPSA.hpp:73
Scalar weightProduct(unsigned globalElemIdxIn, unsigned globalElemIdxOut) const
Direct access to product of weights at interface between two elements.
Definition: FlowProblemTPSA.hpp:450
FacePropertiesTPSA< Grid, GridView, ElementMapper, CartesianIndexMapper, Scalar > FaceProperties
Definition: FlowProblemTPSA.hpp:96
void readInitalConditionsTPSA_()
Read initial conditions and generate material state for TPSA model.
Definition: FlowProblemTPSA.hpp:574
@ numPhases
Definition: FlowProblemTPSA.hpp:84
MechBCData mechBoundaryCondition(const unsigned int globalSpaceIdx, const int directionId)
Organize mechanics boundary conditions.
Definition: FlowProblemTPSA.hpp:308
VTK output module for TPSA quantities.
Definition: vtktpsamodule.hpp:51
static void registerParameters()
Register runtime parameters.
Definition: vtktpsamodule.hpp:90
@ NONE
Definition: DeferredLogger.hpp:46
Definition: blackoilbioeffectsmodules.hh:45
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
This file provides the infrastructure to retrieve run-time parameters.
Definition: FlowProblemTPSA.hpp:102
EvalDimVector displacement
Definition: FlowProblemTPSA.hpp:104
Scalar distance
Definition: FlowProblemTPSA.hpp:105
BCMECHType type
Definition: FlowProblemTPSA.hpp:103
Scalar shearModulus
Definition: FlowProblemTPSA.hpp:106