version 3.11-dev
Loading...
Searching...
No Matches
elementstatefine.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// SPDX-FileCopyrightText: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5// SPDX-License-Identifier: GPL-3.0-or-later
6//
12
13#ifndef DUMUX_TWOPVE_FINE_LEVEL_ELEMENTSTATE_HH
14#define DUMUX_TWOPVE_FINE_LEVEL_ELEMENTSTATE_HH
15
16#include <array>
17
19
20namespace Dumux {
21
26template<class Scalar>
28{
29 Scalar pwCoarse{};
30 Scalar swCoarse{};
31 Scalar temperature{};
32
33 Scalar domainHeight{};
34
35 Scalar swr{};
36 Scalar snr{};
37
39 Scalar entryPressure{};
40 Scalar gravityNorm{};
41
42 Scalar densityW{};
43 Scalar densityNw{};
44 Scalar viscosityW{};
45 Scalar viscosityNw{};
46
48 Scalar minimumGasPlumeDistance{}; // required for hysteresis
49};
50
59template<class GridGeometry, class Scalar, class FluidSystem>
61{
62 using GridView = typename GridGeometry::GridView;
63 using Element = typename GridView::template Codim<0>::Entity;
64 static constexpr int dim = GridView::dimension;
65 static constexpr int wettingPhaseIdx = FluidSystem::phase0Idx;
66 static constexpr int nonwettingPhaseIdx = FluidSystem::phase1Idx;
67 static constexpr int numPhases = FluidSystem::numPhases;
68 using QuantityReconstructor = TwoPVEQuantityReconstruction<Scalar, FluidSystem>;
69
70 using GasPlumeDistances = TwoPVE::GasPlumeDistancesData<Scalar>;
71 using PhaseDensities = TwoPVE::PhaseDensitiesData<Scalar>;
72 using PhaseViscosities = TwoPVE::PhaseViscositiesData<Scalar>;
73 using ResidualSaturations = TwoPVE::ResidualSaturationsData<Scalar>;
74 using BrooksCoreyParameters = TwoPVE::BrooksCoreyParametersData<Scalar>;
75
76public:
77
87 template<typename SpatialParamsFine>
88 void update(const Element& fineElement,
89 const TwoPVEColumnState<Scalar>& column,
90 const SpatialParamsFine& fineSpatialParams,
91 const QuantityReconstructor& reconstructor,
92 const Scalar fineCellHeight)
93 {
94 // relative height instead of absolute height is required for the reconstruction functions
95 const Scalar fineElementPosZ = fineElement.geometry().center()[dim-1];
96 const Scalar heightAboveBottom = fineElementPosZ - fineSpatialParams.gridGeometry().bBoxMin()[dim-1];
97
98 const auto pressures = reconstructor.reconstructPressure(
99 column.gasPlumeDistance,
100 PhaseDensities{column.densityW, column.densityNw},
101 column.gravityNorm,
102 heightAboveBottom,
103 column.pwCoarse,
104 column.entryPressure);
105 pressure_[wettingPhaseIdx] = pressures[wettingPhaseIdx];
106 pressure_[nonwettingPhaseIdx] = pressures[nonwettingPhaseIdx];
107
108 const Scalar saturationW = reconstructor.reconstructSaturation(
109 GasPlumeDistances{column.gasPlumeDistance, column.minimumGasPlumeDistance},
110 PhaseDensities{column.densityW, column.densityNw},
111 ResidualSaturations{column.swr, column.snr},
112 column.gravityNorm,
113 heightAboveBottom,
114 fineCellHeight,
115 BrooksCoreyParameters{column.brooksCoreyLambda, column.entryPressure});
116 saturation_[wettingPhaseIdx] = saturationW;
117 saturation_[nonwettingPhaseIdx] = 1.0 - saturationW;
118
119 const Scalar capillaryPressure = reconstructor.reconstructCapillaryPressure(
120 column.gasPlumeDistance,
121 PhaseDensities{column.densityW, column.densityNw},
122 column.gravityNorm,
123 heightAboveBottom,
124 column.entryPressure);
125 capillaryPressure_ = capillaryPressure;
126
127 const auto mobilities = reconstructor.reconstructMobilitiesFine(
128 GasPlumeDistances{column.gasPlumeDistance, column.minimumGasPlumeDistance},
129 PhaseDensities{column.densityW, column.densityNw},
130 PhaseViscosities{column.viscosityW, column.viscosityNw},
131 column.gravityNorm,
132 heightAboveBottom,
133 fineCellHeight,
134 BrooksCoreyParameters{column.brooksCoreyLambda, column.entryPressure});
135 mobility_[wettingPhaseIdx] = mobilities[wettingPhaseIdx];
136 mobility_[nonwettingPhaseIdx] = mobilities[nonwettingPhaseIdx];
137
138 density_[wettingPhaseIdx] = column.densityW;
139 density_[nonwettingPhaseIdx] = column.densityNw;
140
141 viscosity_[wettingPhaseIdx] = column.viscosityW;
142 viscosity_[nonwettingPhaseIdx] = column.viscosityNw;
143
144 permeability_ = fineSpatialParams.permeabilityAtElement(fineElement);
145 porosity_ = fineSpatialParams.porosityAtElement(fineElement);
146
147 temperature_ = column.temperature;
148 gasPlumeDistance_ = column.gasPlumeDistance;
149 }
150
157 Scalar pressure(int phaseIdx) const
158 { return pressure_[phaseIdx]; }
159
166 Scalar saturation(int phaseIdx) const
167 { return saturation_[phaseIdx]; }
168
173 Scalar capillaryPressure() const
174 { return capillaryPressure_; }
175
182 Scalar mobility(int phaseIdx) const
183 { return mobility_[phaseIdx]; }
184
191 Scalar density(int phaseIdx) const
192 { return density_[phaseIdx]; }
193
200 Scalar viscosity(int phaseIdx) const
201 { return viscosity_[phaseIdx]; }
202
206 Scalar permeability() const
207 { return permeability_; }
208
212 Scalar porosity() const
213 { return porosity_; }
214
223 Scalar temperature() const
224 { return temperature_; }
225
229 Scalar gasPlumeDist() const
230 { return gasPlumeDistance_; }
231
232private:
233 std::array<Scalar, numPhases> pressure_{};
234 std::array<Scalar, numPhases> saturation_{};
235 Scalar capillaryPressure_{};
236 std::array<Scalar, numPhases> mobility_{};
237 std::array<Scalar, numPhases> density_{};
238 std::array<Scalar, numPhases> viscosity_{};
239 Scalar permeability_{};
240 Scalar porosity_{};
241 Scalar temperature_{};
242 Scalar gasPlumeDistance_{};
243};
244
245} // end namespace Dumux
246
247#endif
The quantities of a fine-level element reconstructed from the state of its coarse-level column.
Definition elementstatefine.hh:61
Scalar gasPlumeDist() const
Returns the gas plume distance within a coarse-level element.
Definition elementstatefine.hh:229
Scalar density(int phaseIdx) const
Returns the mass density of a given phase within the control volume in .
Definition elementstatefine.hh:191
Scalar permeability() const
Returns the permeability within the control volume in .
Definition elementstatefine.hh:206
Scalar capillaryPressure() const
Definition elementstatefine.hh:173
void update(const Element &fineElement, const TwoPVEColumnState< Scalar > &column, const SpatialParamsFine &fineSpatialParams, const QuantityReconstructor &reconstructor, const Scalar fineCellHeight)
Updates the state of a fine element.
Definition elementstatefine.hh:88
Scalar pressure(int phaseIdx) const
Returns the effective pressure of a given phase within the control volume in .
Definition elementstatefine.hh:157
Scalar saturation(int phaseIdx) const
Returns the saturation of a given phase within the control volume in .
Definition elementstatefine.hh:166
Scalar porosity() const
Returns the average porosity within the control volume in .
Definition elementstatefine.hh:212
Scalar mobility(int phaseIdx) const
Returns the effective mobility of a given phase within the control volume in .
Definition elementstatefine.hh:182
Scalar temperature() const
Returns temperature inside the sub-control volume in .
Definition elementstatefine.hh:223
Scalar viscosity(int phaseIdx) const
Returns the dynamic viscosity of the fluid within the control volume in .
Definition elementstatefine.hh:200
Reconstructs the fine-level quantities of a column from its coarse-level quantities assuming vertical...
Definition quantityreconstruction.hh:100
Scalar reconstructSaturation(const GasPlumeDistances &gasPlumeDistances, const PhaseDensities &densities, const ResidualSaturations &residualSaturations, Scalar gravityNorm, Scalar heightAboveBottom, Scalar deltaZ, const BrooksCoreyParameters &brooksCoreyParameters) const
Reconstructs the fine-level wetting-phase saturation as a mean integral of the saturation across the ...
Definition quantityreconstruction.hh:246
Scalar reconstructCapillaryPressure(Scalar gasPlumeDist, const PhaseDensities &densities, Scalar gravityNorm, Scalar heightAboveBottom, Scalar entryPressureBC) const
Reconstructs the fine-level capillary pressure.
Definition quantityreconstruction.hh:317
std::array< Scalar, numPhases > reconstructPressure(Scalar gasPlumeDist, const PhaseDensities &densities, Scalar gravityNorm, Scalar heightAboveBottom, Scalar pressureWCoarse, Scalar entryPressureBC) const
Reconstructs the fine-level wetting-phase and nonwetting-phase pressures.
Definition quantityreconstruction.hh:212
std::array< Scalar, numPhases > reconstructMobilitiesFine(const GasPlumeDistances &gasPlumeDistances, const PhaseDensities &densities, const PhaseViscosities &viscosities, Scalar gravityNorm, Scalar heightAboveBottom, Scalar deltaZ, const BrooksCoreyParameters &brooksCoreyParameters) const
Reconstructs the fine-level wetting-phase and nonwetting-phase mobilities.
Definition quantityreconstruction.hh:343
typename ScalarType< X >::Type Scalar
Definition odesolver.hh:52
Definition adapt.hh:17
Reconstructs quantities from the coarse to the fine level of the VE scheme.
The parameters of the Brooks-Corey material law.
Definition quantityreconstruction.hh:79
The gas plume distance of a column and its minimum over all previous time steps.
Definition quantityreconstruction.hh:35
The densities of the wetting and the nonwetting phase.
Definition quantityreconstruction.hh:46
The viscosities of the wetting and the nonwetting phase.
Definition quantityreconstruction.hh:57
The residual saturations of the wetting and the nonwetting phase.
Definition quantityreconstruction.hh:68
The state of a coarse-level column from which the fine-level quantities are reconstructed.
Definition elementstatefine.hh:28
Scalar entryPressure
Definition elementstatefine.hh:39
Scalar minimumGasPlumeDistance
Definition elementstatefine.hh:48
Scalar domainHeight
Definition elementstatefine.hh:33
Scalar gasPlumeDistance
Definition elementstatefine.hh:47
Scalar snr
Definition elementstatefine.hh:36
Scalar swCoarse
Definition elementstatefine.hh:30
Scalar gravityNorm
Definition elementstatefine.hh:40
Scalar temperature
Definition elementstatefine.hh:31
Scalar viscosityNw
Definition elementstatefine.hh:45
Scalar brooksCoreyLambda
Definition elementstatefine.hh:38
Scalar densityW
Definition elementstatefine.hh:42
Scalar pwCoarse
Definition elementstatefine.hh:29
Scalar swr
Definition elementstatefine.hh:35
Scalar densityNw
Definition elementstatefine.hh:43
Scalar viscosityW
Definition elementstatefine.hh:44