version 3.11-dev
Loading...
Searching...
No Matches
porousmediumflow/1p/variables.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#ifndef DUMUX_ONEP_VARIABLES_HH
13#define DUMUX_ONEP_VARIABLES_HH
14
15#include <dumux/common/concepts/ipdata_.hh>
16
17namespace Dumux::Experimental {
18
27template<class Traits>
29{
30 using Scalar = typename Traits::PrimaryVariables::value_type;
31 using ModelTraits = typename Traits::ModelTraits;
32
33 static_assert(!ModelTraits::enableEnergyBalance(),
34 "The energy balance is currently not implemented for variables defined per local dof");
35
36public:
38 using PrimaryVariables = typename Traits::PrimaryVariables;
40 using Indices = typename ModelTraits::Indices;
42 using FluidSystem = typename Traits::FluidSystem;
44 using FluidState = typename Traits::FluidState;
46 using PermeabilityType = typename Traits::PermeabilityType;
47
49 static constexpr int numFluidPhases() { return ModelTraits::numFluidPhases(); }
51 static constexpr int numFluidComponents() { return ModelTraits::numFluidComponents(); }
52
61 template<class ElementSolution, class Problem, class ElementDiscretization, Concept::LocalDofIpData IpData>
62 void update(const ElementSolution& elemSol,
63 const Problem& problem,
64 const ElementDiscretization& elemDisc,
65 const IpData& ipData)
66 {
67 priVars_ = elemSol[ipData.localDofIndex()];
68
69 const auto& spatialParams = problem.spatialParams();
70 extrusionFactor_ = spatialParams.extrusionFactor(elemDisc, ipData, elemSol);
71 porosity_ = spatialParams.porosity(elemDisc, ipData, elemSol);
72 permeability_ = spatialParams.permeability(elemDisc, ipData, elemSol);
73
74 completeFluidState(elemSol, problem, elemDisc, ipData, fluidState_);
75 }
76
86 template<class ElementSolution, class Problem, class ElementDiscretization, Concept::LocalDofIpData IpData>
87 void completeFluidState(const ElementSolution& elemSol,
88 const Problem& problem,
89 const ElementDiscretization& elemDisc,
90 const IpData& ipData,
92 {
93 fluidState.setTemperature(/*phaseIdx=*/0, problem.spatialParams().temperature(elemDisc, ipData, elemSol));
94 fluidState.setPressure(/*phaseIdx=*/0, elemSol[ipData.localDofIndex()][Indices::pressureIdx]);
95
96 // saturation in a single phase is always 1 and thus redundant to set. But since we use
97 // the fluid state shared by the immiscible multi-phase models, we have to set it here
98 fluidState.setSaturation(/*phaseIdx=*/0, 1.0);
99
100 typename FluidSystem::ParameterCache paramCache;
101 paramCache.updatePhase(fluidState, /*phaseIdx=*/0);
102
103 Scalar value = FluidSystem::density(fluidState, paramCache, /*phaseIdx=*/0);
104 fluidState.setDensity(/*phaseIdx=*/0, value);
105
106 value = FluidSystem::viscosity(fluidState, paramCache, /*phaseIdx=*/0);
107 fluidState.setViscosity(/*phaseIdx=*/0, value);
108
109 // the enthalpy is zero for isothermal models
110 fluidState.setEnthalpy(/*phaseIdx=*/0, 0.0);
111 }
112
116 Scalar extrusionFactor() const
117 { return extrusionFactor_; }
118
122 Scalar porosity() const
123 { return porosity_; }
124
129 { return permeability_; }
130
134 Scalar pressure(int phaseIdx = 0) const
135 { return fluidState_.pressure(phaseIdx); }
136
140 Scalar saturation(int phaseIdx = 0) const
141 { return 1.0; }
142
146 Scalar density(int phaseIdx = 0) const
147 { return fluidState_.density(phaseIdx); }
148
152 Scalar molarDensity(int phaseIdx = 0) const
153 { return fluidState_.molarDensity(phaseIdx); }
154
158 Scalar viscosity(int phaseIdx = 0) const
159 { return fluidState_.viscosity(phaseIdx); }
160
164 Scalar mobility(int phaseIdx = 0) const
165 { return 1.0/fluidState_.viscosity(phaseIdx); }
166
170 Scalar temperature() const
171 { return fluidState_.temperature(); }
172
176 const FluidState& fluidState() const
177 { return fluidState_; }
178
183 Scalar priVar(const int pvIdx) const
184 { return priVars_[pvIdx]; }
185
190 { return priVars_; }
191
192private:
193 PrimaryVariables priVars_;
194 FluidState fluidState_;
195 PermeabilityType permeability_;
196 Scalar extrusionFactor_;
197 Scalar porosity_;
198};
199
200} // end namespace Dumux::Experimental
201
202#endif
Variables for the single-phase porous medium flow model.
Definition porousmediumflow/1p/variables.hh:29
typename ModelTraits::Indices Indices
export the indices type
Definition porousmediumflow/1p/variables.hh:40
Scalar saturation(int phaseIdx=0) const
Returns the saturation, which is always one for a single phase.
Definition porousmediumflow/1p/variables.hh:140
Scalar density(int phaseIdx=0) const
Returns the mass density of a given phase.
Definition porousmediumflow/1p/variables.hh:146
static constexpr int numFluidComponents()
return number of components considered by the model
Definition porousmediumflow/1p/variables.hh:51
Scalar viscosity(int phaseIdx=0) const
Returns the dynamic viscosity of the fluid.
Definition porousmediumflow/1p/variables.hh:158
const PermeabilityType & permeability() const
Returns the intrinsic permeability .
Definition porousmediumflow/1p/variables.hh:128
typename Traits::FluidState FluidState
export the fluid state type
Definition porousmediumflow/1p/variables.hh:44
typename Traits::FluidSystem FluidSystem
export the underlying fluid system
Definition porousmediumflow/1p/variables.hh:42
Scalar temperature() const
Returns the temperature .
Definition porousmediumflow/1p/variables.hh:170
Scalar pressure(int phaseIdx=0) const
Returns the effective pressure of a given phase.
Definition porousmediumflow/1p/variables.hh:134
const FluidState & fluidState() const
Returns the fluid state.
Definition porousmediumflow/1p/variables.hh:176
typename Traits::PrimaryVariables PrimaryVariables
export the type used for the primary variables
Definition porousmediumflow/1p/variables.hh:38
const PrimaryVariables & priVars() const
Return the primary variable vector.
Definition porousmediumflow/1p/variables.hh:189
static constexpr int numFluidPhases()
return number of phases considered by the model
Definition porousmediumflow/1p/variables.hh:49
Scalar molarDensity(int phaseIdx=0) const
Returns the molar density of a given phase.
Definition porousmediumflow/1p/variables.hh:152
Scalar porosity() const
Returns the porosity .
Definition porousmediumflow/1p/variables.hh:122
Scalar priVar(const int pvIdx) const
Return a component of the primary variable vector.
Definition porousmediumflow/1p/variables.hh:183
Scalar mobility(int phaseIdx=0) const
Returns the mobility of a given phase.
Definition porousmediumflow/1p/variables.hh:164
void update(const ElementSolution &elemSol, const Problem &problem, const ElementDiscretization &elemDisc, const IpData &ipData)
Update all quantities for a local dof.
Definition porousmediumflow/1p/variables.hh:62
Scalar extrusionFactor() const
Return how much the local dof is extruded.
Definition porousmediumflow/1p/variables.hh:116
void completeFluidState(const ElementSolution &elemSol, const Problem &problem, const ElementDiscretization &elemDisc, const IpData &ipData, FluidState &fluidState) const
Sets the complete fluid state.
Definition porousmediumflow/1p/variables.hh:87
typename Traits::PermeabilityType PermeabilityType
export the type of the intrinsic permeability
Definition porousmediumflow/1p/variables.hh:46
Base class for all standard finite volume or finite element problems.
Definition common/problem.hh:39
Definition assembly/assembler.hh:44