fractureproblem.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_FRACTURE_PROBLEM_HH
29#define EWOMS_FRACTURE_PROBLEM_HH
30
31#if HAVE_DUNE_ALUGRID
32// avoid reordering of macro elements, otherwise this problem won't work
33#define DISABLE_ALUGRID_SFC_ORDERING 1
34#include <dune/alugrid/grid.hh>
35#include <dune/alugrid/dgf.hh>
36#else
37#error "dune-alugrid not found!"
38#endif
39
42
43#include <opm/material/fluidmatrixinteractions/RegularizedBrooksCorey.hpp>
44#include <opm/material/fluidmatrixinteractions/RegularizedVanGenuchten.hpp>
45#include <opm/material/fluidmatrixinteractions/LinearMaterial.hpp>
46#include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp>
47#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
48#include <opm/material/thermal/SomertonThermalConductionLaw.hpp>
49#include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp>
50#include <opm/material/fluidsystems/TwoPhaseImmiscibleFluidSystem.hpp>
51#include <opm/material/components/SimpleH2O.hpp>
52#include <opm/material/components/Dnapl.hpp>
53
54#include <dune/common/version.hh>
55#include <dune/common/fmatrix.hh>
56#include <dune/common/fvector.hh>
57
58#include <iostream>
59#include <sstream>
60#include <string>
61
62namespace Opm {
63template <class TypeTag>
64class FractureProblem;
65}
66
67namespace Opm::Properties {
68
69// Create a type tag for the problem
70// Create new type tags
71namespace TTag {
72struct FractureProblem { using InheritsFrom = std::tuple<DiscreteFractureModel>; };
73} // end namespace TTag
74
75// Set the grid type
76template<class TypeTag>
77struct Grid<TypeTag, TTag::FractureProblem>
78{ using type = Dune::ALUGrid</*dim=*/2, /*dimWorld=*/2, Dune::simplex, Dune::nonconforming>; };
79
80// Set the Vanguard property
81template<class TypeTag>
82struct Vanguard<TypeTag, TTag::FractureProblem> { using type = Opm::DgfVanguard<TypeTag>; };
83
84// Set the problem property
85template<class TypeTag>
86struct Problem<TypeTag, TTag::FractureProblem> { using type = Opm::FractureProblem<TypeTag>; };
87
88// Set the wetting phase
89template<class TypeTag>
90struct WettingPhase<TypeTag, TTag::FractureProblem>
91{
92private:
94
95public:
96 using type = Opm::LiquidPhase<Scalar, Opm::SimpleH2O<Scalar> >;
97};
98
99// Set the non-wetting phase
100template<class TypeTag>
101struct NonwettingPhase<TypeTag, TTag::FractureProblem>
102{
103private:
105
106public:
107 using type = Opm::LiquidPhase<Scalar, Opm::DNAPL<Scalar> >;
108};
109
110// Set the material Law
111template<class TypeTag>
112struct MaterialLaw<TypeTag, TTag::FractureProblem>
113{
114private:
116 enum { wettingPhaseIdx = FluidSystem::wettingPhaseIdx };
117 enum { nonWettingPhaseIdx = FluidSystem::nonWettingPhaseIdx };
118
120 using Traits = Opm::TwoPhaseMaterialTraits<Scalar,
121 /*wettingPhaseIdx=*/FluidSystem::wettingPhaseIdx,
122 /*nonWettingPhaseIdx=*/FluidSystem::nonWettingPhaseIdx>;
123
124 // define the material law which is parameterized by effective
125 // saturations
126 using EffectiveLaw = Opm::RegularizedBrooksCorey<Traits>;
127 // using EffectiveLaw = RegularizedVanGenuchten<Traits>;
128 // using EffectiveLaw = LinearMaterial<Traits>;
129public:
130 using type = Opm::EffToAbsLaw<EffectiveLaw>;
131};
132
133// Enable the energy equation
134template<class TypeTag>
135struct EnableEnergy<TypeTag, TTag::FractureProblem> { static constexpr bool value = true; };
136
137// Set the thermal conduction law
138template<class TypeTag>
140{
141private:
144
145public:
146 // define the material law parameterized by absolute saturations
147 using type = Opm::SomertonThermalConductionLaw<FluidSystem, Scalar>;
148};
149
150// set the energy storage law for the solid phase
151template<class TypeTag>
152struct SolidEnergyLaw<TypeTag, TTag::FractureProblem>
153{ using type = Opm::ConstantSolidHeatCapLaw<GetPropType<TypeTag, Properties::Scalar>>; };
154
155// For this problem, we use constraints to specify the left boundary
156template<class TypeTag>
157struct EnableConstraints<TypeTag, TTag::FractureProblem> { static constexpr bool value = true; };
158
159} // namespace Opm::Properties
160
161namespace Opm {
174template <class TypeTag>
175class FractureProblem : public GetPropType<TypeTag, Properties::BaseProblem>
176{
191 using ThermalConductionLawParams = GetPropType<TypeTag, Properties::ThermalConductionLawParams>;
194
195 enum {
196 // phase indices
197 wettingPhaseIdx = MaterialLaw::wettingPhaseIdx,
198 nonWettingPhaseIdx = MaterialLaw::nonWettingPhaseIdx,
199
200 // number of phases
201 numPhases = FluidSystem::numPhases,
202
203 // Grid and world dimension
204 dim = GridView::dimension,
205 dimWorld = GridView::dimensionworld
206 };
207
208 using FluidState = Opm::ImmiscibleFluidState<Scalar, FluidSystem>;
209
210 using GlobalPosition = Dune::FieldVector<Scalar, dimWorld>;
211 using DimMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>;
212
213 template <int dim>
214 struct FaceLayout
215 {
216 bool contains(Dune::GeometryType gt)
217 { return gt.dim() == dim - 1; }
218 };
219 using FaceMapper = Dune::MultipleCodimMultipleGeomTypeMapper<GridView>;
220
222
223public:
227 FractureProblem(Simulator& simulator)
228 : ParentType(simulator)
229 { }
230
235 {
236 ParentType::finishInit();
237
238 eps_ = 3e-6;
239 temperature_ = 273.15 + 20; // -> 20°C
240
241 matrixMaterialParams_.setResidualSaturation(wettingPhaseIdx, 0.0);
242 matrixMaterialParams_.setResidualSaturation(nonWettingPhaseIdx, 0.0);
243 fractureMaterialParams_.setResidualSaturation(wettingPhaseIdx, 0.0);
244 fractureMaterialParams_.setResidualSaturation(nonWettingPhaseIdx, 0.0);
245
246#if 0 // linear
247 matrixMaterialParams_.setEntryPC(0.0);
248 matrixMaterialParams_.setMaxPC(2000.0);
249 fractureMaterialParams_.setEntryPC(0.0);
250 fractureMaterialParams_.setMaxPC(1000.0);
251#endif
252
253#if 1 // Brooks-Corey
254 matrixMaterialParams_.setEntryPressure(2000);
255 matrixMaterialParams_.setLambda(2.0);
256 matrixMaterialParams_.setPcLowSw(1e-1);
257 fractureMaterialParams_.setEntryPressure(1000);
258 fractureMaterialParams_.setLambda(2.0);
259 fractureMaterialParams_.setPcLowSw(5e-2);
260#endif
261
262#if 0 // van Genuchten
263 matrixMaterialParams_.setVgAlpha(0.0037);
264 matrixMaterialParams_.setVgN(4.7);
265 fractureMaterialParams_.setVgAlpha(0.0025);
266 fractureMaterialParams_.setVgN(4.7);
267#endif
268
269 matrixMaterialParams_.finalize();
270 fractureMaterialParams_.finalize();
271
272 matrixK_ = this->toDimMatrix_(1e-15); // m^2
273 fractureK_ = this->toDimMatrix_(1e5 * 1e-15); // m^2
274
275 matrixPorosity_ = 0.10;
276 fracturePorosity_ = 0.25;
277 fractureWidth_ = 1e-3; // [m]
278
279 // initialize the energy-related parameters
280 initEnergyParams_(thermalConductionParams_, matrixPorosity_);
281 }
282
286 static void registerParameters()
287 {
288 ParentType::registerParameters();
289
290 Parameters::SetDefault<Parameters::GridFile>("data/fracture.art.dgf");
291 Parameters::SetDefault<Parameters::EndTime<Scalar>>(3e3);
292 Parameters::SetDefault<Parameters::InitialTimeStepSize<Scalar>>(100);
293 }
294
299
303 std::string name() const
304 {
305 std::ostringstream oss;
306 oss << "fracture_" << Model::name();
307 return oss.str();
308 }
309
314 {
315#ifndef NDEBUG
316 // checkConservativeness() does not include the effect of constraints, so we
317 // disable it for this problem...
318 //this->model().checkConservativeness();
319
320 // Calculate storage terms
321 EqVector storage;
322 this->model().globalStorage(storage);
323
324 // Write mass balance information for rank 0
325 if (this->gridView().comm().rank() == 0) {
326 std::cout << "Storage: " << storage << std::endl << std::flush;
327 }
328#endif // NDEBUG
329 }
330
334 template <class Context>
335 Scalar temperature([[maybe_unused]] const Context& context,
336 [[maybe_unused]] unsigned spaceIdx,
337 [[maybe_unused]] unsigned timeIdx) const
338 { return temperature_; }
339
340 // \}
341
346
350 template <class Context>
351 const DimMatrix& intrinsicPermeability([[maybe_unused]] const Context& context,
352 [[maybe_unused]] unsigned spaceIdx,
353 [[maybe_unused]] unsigned timeIdx) const
354 { return matrixK_; }
355
361 template <class Context>
362 const DimMatrix& fractureIntrinsicPermeability([[maybe_unused]] const Context& context,
363 [[maybe_unused]] unsigned spaceIdx,
364 [[maybe_unused]] unsigned timeIdx) const
365 { return fractureK_; }
366
370 template <class Context>
371 Scalar porosity([[maybe_unused]] const Context& context,
372 [[maybe_unused]] unsigned spaceIdx,
373 [[maybe_unused]] unsigned timeIdx) const
374 { return matrixPorosity_; }
375
381 template <class Context>
382 Scalar fracturePorosity([[maybe_unused]] const Context& context,
383 [[maybe_unused]] unsigned spaceIdx,
384 [[maybe_unused]] unsigned timeIdx) const
385 { return fracturePorosity_; }
386
390 template <class Context>
391 const MaterialLawParams& materialLawParams([[maybe_unused]] const Context& context,
392 [[maybe_unused]] unsigned spaceIdx,
393 [[maybe_unused]] unsigned timeIdx) const
394 { return matrixMaterialParams_; }
395
401 template <class Context>
402 const MaterialLawParams& fractureMaterialLawParams([[maybe_unused]] const Context& context,
403 [[maybe_unused]] unsigned spaceIdx,
404 [[maybe_unused]] unsigned timeIdx) const
405 { return fractureMaterialParams_; }
406
411 { return this->simulator().vanguard().fractureMapper(); }
412
425 template <class Context>
426 Scalar fractureWidth([[maybe_unused]] const Context& context,
427 [[maybe_unused]] unsigned spaceIdx1,
428 [[maybe_unused]] unsigned spaceIdx2,
429 [[maybe_unused]] unsigned timeIdx) const
430 { return fractureWidth_; }
431
435 template <class Context>
436 const ThermalConductionLawParams&
437 thermalConductionLawParams([[maybe_unused]] const Context& context,
438 [[maybe_unused]] unsigned spaceIdx,
439 [[maybe_unused]] unsigned timeIdx) const
440 { return thermalConductionParams_; }
441
447 template <class Context>
448 const SolidEnergyLawParams&
449 solidEnergyLawParams([[maybe_unused]] const Context& context,
450 [[maybe_unused]] unsigned spaceIdx,
451 [[maybe_unused]] unsigned timeIdx) const
452 { return solidEnergyParams_; }
453
454 // \}
455
459 // \{
460
464 template <class Context>
465 void boundary(BoundaryRateVector& values, const Context& context,
466 unsigned spaceIdx, unsigned timeIdx) const
467 {
468 const GlobalPosition& pos = context.pos(spaceIdx, timeIdx);
469
470 if (onRightBoundary_(pos)) {
471 // on the right boundary, we impose a free-flow
472 // (i.e. Dirichlet) condition
473 FluidState fluidState;
474 fluidState.setTemperature(temperature_);
475
476 fluidState.setSaturation(wettingPhaseIdx, 0.0);
477 fluidState.setSaturation(nonWettingPhaseIdx,
478 1.0 - fluidState.saturation(wettingPhaseIdx));
479
480 fluidState.setPressure(wettingPhaseIdx, 1e5);
481 fluidState.setPressure(nonWettingPhaseIdx, fluidState.pressure(wettingPhaseIdx));
482
483 typename FluidSystem::template ParameterCache<Scalar> paramCache;
484 paramCache.updateAll(fluidState);
485 for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++ phaseIdx) {
486 fluidState.setDensity(phaseIdx,
487 FluidSystem::density(fluidState, paramCache, phaseIdx));
488 fluidState.setViscosity(phaseIdx,
489 FluidSystem::viscosity(fluidState, paramCache, phaseIdx));
490 }
491
492 // set a free flow (i.e. Dirichlet) boundary
493 values.setFreeFlow(context, spaceIdx, timeIdx, fluidState);
494 }
495 else
496 // for the upper, lower and left boundaries, use a no-flow
497 // condition (i.e. a Neumann 0 condition)
498 values.setNoFlow();
499 }
500
501 // \}
502
506 // \{
507
511 template <class Context>
512 void constraints(Constraints& constraints, const Context& context,
513 unsigned spaceIdx, unsigned timeIdx) const
514 {
515 const GlobalPosition& pos = context.pos(spaceIdx, timeIdx);
516
517 if (!onLeftBoundary_(pos))
518 // only impose constraints adjacent to the left boundary
519 return;
520
521 unsigned globalIdx = context.globalSpaceIndex(spaceIdx, timeIdx);
522 if (!fractureMapper().isFractureVertex(globalIdx)) {
523 // do not impose constraints if the finite volume does
524 // not contain fractures.
525 return;
526 }
527
528 // if the current finite volume is on the left boundary
529 // and features a fracture, specify the fracture fluid
530 // state.
531 FluidState fractureFluidState;
532 fractureFluidState.setTemperature(temperature_ + 10.0);
533
534 fractureFluidState.setSaturation(wettingPhaseIdx, 1.0);
535 fractureFluidState.setSaturation(nonWettingPhaseIdx,
536 1.0 - fractureFluidState.saturation(
537 wettingPhaseIdx));
538
539 Scalar pCFracture[numPhases];
540 MaterialLaw::capillaryPressures(pCFracture, fractureMaterialParams_,
541 fractureFluidState);
542
543 fractureFluidState.setPressure(wettingPhaseIdx, /*pressure=*/1.0e5);
544 fractureFluidState.setPressure(nonWettingPhaseIdx,
545 fractureFluidState.pressure(wettingPhaseIdx)
546 + (pCFracture[nonWettingPhaseIdx]
547 - pCFracture[wettingPhaseIdx]));
548
549 constraints.setActive(true);
550 constraints.assignNaiveFromFracture(fractureFluidState,
551 matrixMaterialParams_);
552 }
553
557 template <class Context>
558 void initial(PrimaryVariables& values,
559 [[maybe_unused]] const Context& context,
560 [[maybe_unused]] unsigned spaceIdx,
561 [[maybe_unused]] unsigned timeIdx) const
562 {
563 FluidState fluidState;
564 fluidState.setTemperature(temperature_);
565 fluidState.setPressure(FluidSystem::wettingPhaseIdx, /*pressure=*/1e5);
566 fluidState.setPressure(nonWettingPhaseIdx, fluidState.pressure(wettingPhaseIdx));
567
568 fluidState.setSaturation(wettingPhaseIdx, 0.0);
569 fluidState.setSaturation(nonWettingPhaseIdx,
570 1.0 - fluidState.saturation(wettingPhaseIdx));
571
572 values.assignNaive(fluidState);
573 }
574
581 template <class Context>
582 void source(RateVector& rate,
583 [[maybe_unused]] const Context& context,
584 [[maybe_unused]] unsigned spaceIdx,
585 [[maybe_unused]] unsigned timeIdx) const
586 { rate = Scalar(0.0); }
587
588 // \}
589
590private:
591 bool onLeftBoundary_(const GlobalPosition& pos) const
592 { return pos[0] < this->boundingBoxMin()[0] + eps_; }
593
594 bool onRightBoundary_(const GlobalPosition& pos) const
595 { return pos[0] > this->boundingBoxMax()[0] - eps_; }
596
597 bool onLowerBoundary_(const GlobalPosition& pos) const
598 { return pos[1] < this->boundingBoxMin()[1] + eps_; }
599
600 bool onUpperBoundary_(const GlobalPosition& pos) const
601 { return pos[1] > this->boundingBoxMax()[1] - eps_; }
602
603 void initEnergyParams_(ThermalConductionLawParams& params, Scalar poro)
604 {
605 // assume the volumetric heat capacity of granite
606 solidEnergyParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
607 * 2700.0); // density of granite [kg/m^3]
608 solidEnergyParams_.finalize();
609
610 Scalar lambdaGranite = 2.8; // [W / (K m)]
611
612 // create a Fluid state which has all phases present
613 Opm::ImmiscibleFluidState<Scalar, FluidSystem> fs;
614 fs.setTemperature(293.15);
615 for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
616 fs.setPressure(phaseIdx, 1.0135e5);
617 }
618
619 typename FluidSystem::template ParameterCache<Scalar> paramCache;
620 paramCache.updateAll(fs);
621 for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
622 Scalar rho = FluidSystem::density(fs, paramCache, phaseIdx);
623 fs.setDensity(phaseIdx, rho);
624 }
625
626 for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
627 Scalar lambdaSaturated;
628 if (FluidSystem::isLiquid(phaseIdx)) {
629 Scalar lambdaFluid = FluidSystem::thermalConductivity(fs, paramCache, phaseIdx);
630 lambdaSaturated =
631 std::pow(lambdaGranite, (1 - poro))
632 + std::pow(lambdaFluid, poro);
633 }
634 else
635 lambdaSaturated = std::pow(lambdaGranite, (1 - poro));
636
637 params.setFullySaturatedLambda(phaseIdx, lambdaSaturated);
638 }
639
640 Scalar lambdaVac = std::pow(lambdaGranite, (1 - poro));
641 params.setVacuumLambda(lambdaVac);
642 }
643
644 DimMatrix matrixK_;
645 DimMatrix fractureK_;
646
647 Scalar matrixPorosity_;
648 Scalar fracturePorosity_;
649
650 Scalar fractureWidth_;
651
652 MaterialLawParams fractureMaterialParams_;
653 MaterialLawParams matrixMaterialParams_;
654
655 ThermalConductionLawParams thermalConductionParams_;
656 SolidEnergyLawParams solidEnergyParams_;
657
658 Scalar temperature_;
659 Scalar eps_;
660};
661} // namespace Opm
662
663#endif // EWOMS_FRACTURE_PROBLEM_HH
Provides a simulator vanguard which creates a grid by parsing a Dune Grid Format (DGF) file.
Definition: dgfvanguard.hh:50
Stores the topology of fractures.
Definition: fracturemapper.hh:43
Two-phase problem which involves fractures.
Definition: fractureproblem.hh:176
const SolidEnergyLawParams & solidEnergyLawParams(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Return the parameters for the energy storage law of the rock.
Definition: fractureproblem.hh:449
const DimMatrix & intrinsicPermeability(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: fractureproblem.hh:351
Scalar fractureWidth(const Context &context, unsigned spaceIdx1, unsigned spaceIdx2, unsigned timeIdx) const
Returns the width of the fracture.
Definition: fractureproblem.hh:426
void initial(PrimaryVariables &values, const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Evaluate the initial value for a control volume.
Definition: fractureproblem.hh:558
static void registerParameters()
Definition: fractureproblem.hh:286
Scalar fracturePorosity(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
The porosity inside the fractures.
Definition: fractureproblem.hh:382
void finishInit()
Called by the Opm::Simulator in order to initialize the problem.
Definition: fractureproblem.hh:234
std::string name() const
The problem name.
Definition: fractureproblem.hh:303
FractureProblem(Simulator &simulator)
Definition: fractureproblem.hh:227
void constraints(Constraints &constraints, const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Evaluate the constraints for a control volume.
Definition: fractureproblem.hh:512
const DimMatrix & fractureIntrinsicPermeability(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Intrinsic permeability of fractures.
Definition: fractureproblem.hh:362
const MaterialLawParams & materialLawParams(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: fractureproblem.hh:391
void endTimeStep()
Called directly after the time integration.
Definition: fractureproblem.hh:313
const ThermalConductionLawParams & thermalConductionLawParams(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: fractureproblem.hh:437
void source(RateVector &rate, const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Evaluate the source term for all phases within a given sub-control-volume.
Definition: fractureproblem.hh:582
const MaterialLawParams & fractureMaterialLawParams(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
The parameters for the material law inside the fractures.
Definition: fractureproblem.hh:402
Scalar temperature(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: fractureproblem.hh:335
void boundary(BoundaryRateVector &values, const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Evaluate the boundary conditions for a boundary segment.
Definition: fractureproblem.hh:465
const FractureMapper & fractureMapper() const
Returns the object representating the fracture topology.
Definition: fractureproblem.hh:410
Scalar porosity(const Context &context, unsigned spaceIdx, unsigned timeIdx) const
Definition: fractureproblem.hh:371
Definition: blackoilmodel.hh:72
Definition: blackoilboundaryratevector.hh:37
@ simplex
Definition: vcfvstencil.hh:54
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
Specify whether the some degrees of fredom can be constraint.
Definition: fvbaseproperties.hh:199
Specify whether energy should be considered as a conservation quantity or not.
Definition: multiphasebaseproperties.hh:76
Dune::ALUGrid< 2, 2, Dune::simplex, Dune::nonconforming > type
Definition: fractureproblem.hh:78
The type of the DUNE grid.
Definition: basicproperties.hh:100
Opm::EffToAbsLaw< EffectiveLaw > type
Definition: fractureproblem.hh:130
The material law which ought to be used (extracted from the spatial parameters)
Definition: multiphasebaseproperties.hh:51
Opm::LiquidPhase< Scalar, Opm::DNAPL< Scalar > > type
Definition: fractureproblem.hh:107
The non-wetting phase for two-phase models.
Definition: immiscibleproperties.hh:44
The type of the problem.
Definition: fvbaseproperties.hh:81
Opm::ConstantSolidHeatCapLaw< GetPropType< TypeTag, Properties::Scalar > > type
Definition: fractureproblem.hh:153
The material law for the energy stored in the solid matrix.
Definition: multiphasebaseproperties.hh:57
Definition: fractureproblem.hh:72
std::tuple< DiscreteFractureModel > InheritsFrom
Definition: fractureproblem.hh:72
Opm::SomertonThermalConductionLaw< FluidSystem, Scalar > type
Definition: fractureproblem.hh:147
The material law for thermal conduction.
Definition: multiphasebaseproperties.hh:63
Property which provides a Vanguard (manages grids)
Definition: basicproperties.hh:96
Opm::LiquidPhase< Scalar, Opm::SimpleH2O< Scalar > > type
Definition: fractureproblem.hh:96
The wetting phase for two-phase models.
Definition: immiscibleproperties.hh:41