GCC Code Coverage Report


Directory: ../../../builds/dumux-repositories/
File: /builds/dumux-repositories/dumux/dumux/freeflow/volumevariables.hh
Date: 2024-09-21 20:52:54
Exec Total Coverage
Lines: 14 29 48.3%
Functions: 0 269 0.0%
Branches: 31 147 21.1%

Line Branch Exec Source
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-FileCopyrightInfo: Copyright © DuMux Project contributors, see AUTHORS.md in root folder
5 // SPDX-License-Identifier: GPL-3.0-or-later
6 //
7 /*!
8 * \file
9 * \ingroup FreeflowModels
10 *
11 * \copydoc Dumux::FreeFlowVolumeVariables
12 */
13 #ifndef DUMUX_FREEFLOW_VOLUME_VARIABLES_HH
14 #define DUMUX_FREEFLOW_VOLUME_VARIABLES_HH
15
16 #include <dumux/material/fluidstates/immiscible.hh>
17
18 namespace Dumux {
19
20 // forward declaration
21 template <class Traits, class Impl, bool enableEnergyBalance>
22 class FreeFlowVolumeVariablesImplementation;
23
24 /*!
25 * \ingroup FreeflowModels
26 * \brief Volume variables for free-flow models.
27 * The class is specialized for isothermal and non-isothermal models.
28 */
29 template <class Traits, class Impl>
30 using FreeFlowVolumeVariables = FreeFlowVolumeVariablesImplementation<Traits, Impl, Traits::ModelTraits::enableEnergyBalance()>;
31
32 /*!
33 * \ingroup FreeflowModels
34 * \brief Volume variables for isothermal free-flow models.
35 */
36 template <class Traits, class Impl>
37
2/4
✓ Branch 1 taken 113612 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 113612 times.
✗ Branch 5 not taken.
294984 class FreeFlowVolumeVariablesImplementation<Traits, Impl, false>
38 {
39 using Scalar = typename Traits::PrimaryVariables::value_type;
40
41 public:
42 //! export the type used for the primary variables
43 using PrimaryVariables = typename Traits::PrimaryVariables;
44 //! export the type encapsulating primary variable indices
45 using Indices = typename Traits::ModelTraits::Indices;
46
47 //! return number of phases considered by the model
48 static constexpr int numFluidPhases() { return Traits::ModelTraits::numFluidPhases(); }
49 //! return number of components considered by the model
50 static constexpr int numFluidComponents() { return Traits::ModelTraits::numFluidComponents(); }
51
52 /*!
53 * \brief Update all quantities for a given control volume
54 *
55 * \param elemSol A vector containing all primary variables connected to the element
56 * \param problem The object specifying the problem which ought to
57 * be simulated
58 * \param element An element which contains part of the control volume
59 * \param scv The sub-control volume
60 */
61 template<class ElementSolution, class Problem, class Element, class SubControlVolume>
62 void update(const ElementSolution &elemSol,
63 const Problem &problem,
64 const Element &element,
65 const SubControlVolume& scv)
66 {
67 109101512 priVars_ = elemSol[scv.localDofIndex()];
68
18/52
✓ Branch 1 taken 735280 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 735280 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 735280 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 307760 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✓ Branch 13 taken 307760 times.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 16 taken 307760 times.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✓ Branch 19 taken 3186380 times.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✓ Branch 22 taken 3186380 times.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✓ Branch 25 taken 3186380 times.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✓ Branch 28 taken 1319840 times.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✓ Branch 31 taken 1393340 times.
✗ Branch 32 not taken.
✗ Branch 33 not taken.
✓ Branch 34 taken 1393340 times.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✓ Branch 37 taken 110620 times.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✓ Branch 40 taken 37120 times.
✗ Branch 41 not taken.
✗ Branch 42 not taken.
✓ Branch 43 taken 37120 times.
✗ Branch 44 not taken.
✗ Branch 45 not taken.
✗ Branch 47 not taken.
✗ Branch 48 not taken.
✓ Branch 49 taken 334400 times.
✗ Branch 50 not taken.
✗ Branch 51 not taken.
✓ Branch 52 taken 334400 times.
✗ Branch 53 not taken.
✗ Branch 54 not taken.
✓ Branch 55 taken 334400 times.
✗ Branch 56 not taken.
284230566 extrusionFactor_ = problem.spatialParams().extrusionFactor(element, scv, elemSol);
69 }
70
71 /*!
72 * \brief Return how much the sub-control volume is extruded.
73 *
74 * This means the factor by which a lower-dimensional (1D or 2D)
75 * entity needs to be expanded to get a full dimensional cell. The
76 * default is 1.0 which means that 1D problems are actually
77 * thought as pipes with a cross section of 1 m^2 and 2D problems
78 * are assumed to extend 1 m to the back.
79 */
80 Scalar extrusionFactor() const
81 { return extrusionFactor_; }
82
83 /*!
84 * \brief Return a component of primary variable vector
85 *
86 * \param pvIdx The index of the primary variable of interest
87 */
88 Scalar priVar(const int pvIdx) const
89 { return priVars_[pvIdx]; }
90
91 //! The temperature is obtained from the problem as a constant for isothermal models
92 template<class ElementSolution, class Problem, class Element, class SubControlVolume>
93 static Scalar temperature(const ElementSolution &elemSol,
94 const Problem& problem,
95 const Element &element,
96 const SubControlVolume &scv)
97 {
98
0/27
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✗ Branch 35 not taken.
✗ Branch 36 not taken.
✗ Branch 38 not taken.
✗ Branch 39 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
43809340 return problem.spatialParams().temperature(element, scv, elemSol);
99 }
100
101 //! The phase enthalpy is zero for isothermal models
102 //! This is needed for completing the fluid state
103 template<class FluidState, class ParameterCache>
104 static Scalar enthalpy(const FluidState& fluidState,
105 const ParameterCache& paramCache)
106 {
107 return 0;
108 }
109
110 protected:
111 const Impl &asImp_() const { return *static_cast<const Impl*>(this); }
112 Impl &asImp_() { return *static_cast<Impl*>(this); }
113 PrimaryVariables priVars_;
114 Scalar extrusionFactor_;
115 };
116
117 /*!
118 * \ingroup FreeflowModels
119 * \brief Volume variables for the non-isothermal free-flow models.
120 */
121 template <class Traits, class Impl>
122
2/4
✓ Branch 1 taken 20640 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 20640 times.
✗ Branch 5 not taken.
43744 class FreeFlowVolumeVariablesImplementation<Traits, Impl, true>
123 : public FreeFlowVolumeVariablesImplementation<Traits, Impl, false>
124 {
125 using ParentType = FreeFlowVolumeVariablesImplementation<Traits, Impl, false>;
126 using Scalar = typename Traits::PrimaryVariables::value_type;
127
128 public:
129 //! export the type used for the primary variables
130 using PrimaryVariables = typename Traits::PrimaryVariables;
131 //! export the underlying fluid system
132 using FluidSystem = typename Traits::FluidSystem;
133 //! export the type encapsulating primary variable indices
134 using Indices = typename Traits::ModelTraits::Indices;
135
136
137 /*!
138 * \brief Update all quantities for a given control volume
139 *
140 * \param elemSol A vector containing all primary variables connected to the element
141 * \param problem The object specifying the problem which ought to
142 * be simulated
143 * \param element An element which contains part of the control volume
144 * \param scv The sub control volume which is inside the element
145 */
146 template<class ElemSol, class Problem, class Element, class Scv>
147 void update(const ElemSol &elemSol,
148 const Problem &problem,
149 const Element &element,
150 const Scv &scv)
151 {
152
0/12
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✗ Branch 8 not taken.
✗ Branch 9 not taken.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
86147940 ParentType::update(elemSol, problem, element, scv);
153 }
154
155 /*!
156 * \brief Returns the total internal energy of a phase in the
157 * sub-control volume.
158 */
159 Scalar internalEnergy(int phaseIdx = 0) const
160 54055920 { return ParentType::asImp_().fluidState().internalEnergy(0); }
161
162 /*!
163 * \brief Returns the total enthalpy of a phase in the sub-control
164 * volume.
165 */
166 Scalar enthalpy(int phaseIdx = 0) const
167
9/12
✓ Branch 0 taken 12248 times.
✓ Branch 1 taken 72 times.
✓ Branch 2 taken 12248 times.
✓ Branch 3 taken 72 times.
✓ Branch 4 taken 12248 times.
✓ Branch 5 taken 72 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 48356 times.
✗ Branch 14 not taken.
✓ Branch 15 taken 48356 times.
✗ Branch 16 not taken.
✓ Branch 17 taken 48356 times.
294999956 { return ParentType::asImp_().fluidState().enthalpy(0); }
168
169 /*!
170 * \brief Returns the component enthalpy \f$\mathrm{[J/(kg*K)]}\f$ in the sub-control volume.
171 */
172 Scalar componentEnthalpy(unsigned int compIdx) const
173 100445872 { return FluidSystem::componentEnthalpy(ParentType::asImp_().fluidState(), 0, compIdx); }
174
175 /*!
176 * \brief Returns the thermal conductivity \f$\mathrm{[W/(m*K)]}\f$
177 * of the fluid phase in the sub-control volume.
178 */
179 Scalar thermalConductivity() const
180 279350436 { return FluidSystem::thermalConductivity(ParentType::asImp_().fluidState(), 0); }
181
182 /*!
183 * \brief Returns the effective thermal conductivity \f$\mathrm{[W/(m*K)]}\f$
184 * of the fluid-flow in the sub-control volume.
185 */
186 Scalar effectiveThermalConductivity() const
187 {
188 2846868 return thermalConductivity();
189 }
190
191 /*!
192 * \brief Return the specific isobaric heat capacity \f$\mathrm{[J/(kg*K)]}\f$
193 * in the sub-control volume.
194 */
195 Scalar heatCapacity() const
196 109329376 { return FluidSystem::heatCapacity(ParentType::asImp_().fluidState(), 0); }
197
198 //! The temperature is a primary variable for non-isothermal models
199 template<class ElemSol, class Problem, class Element, class Scv>
200 static Scalar temperature(const ElemSol &elemSol,
201 const Problem& problem,
202 const Element &element,
203 const Scv &scv)
204 {
205
0/24
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✗ Branch 7 not taken.
✗ Branch 8 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 31 not taken.
✗ Branch 32 not taken.
✗ Branch 34 not taken.
✗ Branch 35 not taken.
36420076 return elemSol[scv.localDofIndex()][Indices::temperatureIdx];
206 }
207
208 //! The phase enthalpy is zero for isothermal models
209 //! This is needed for completing the fluid state
210 template<class FluidState, class ParameterCache>
211 static Scalar enthalpy(const FluidState& fluidState,
212 const ParameterCache& paramCache)
213 {
214
0/12
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✗ Branch 10 not taken.
✗ Branch 11 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
18210038 return FluidSystem::enthalpy(fluidState, paramCache, 0);
215 }
216 };
217 } // end namespace Dumux
218
219 #endif
220