include/meltpooldg/compressible_flow/state_views_mixins.hpp Source File

Developer Documentation: include/meltpooldg/compressible_flow/state_views_mixins.hpp Source File
Developer Documentation
state_views_mixins.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/exception_macros.h>
4#include <deal.II/base/tensor.h>
5#include <deal.II/base/vectorization.h>
6
9
11{
32 template <int dim, ArithmeticType ValueType, typename Derived>
34 {
36
37 decltype(auto)
38 density() const
39 {
40 return this->value()[Idx::density];
41 }
42
43 decltype(auto)
44 momentum(const unsigned int component) const
45 {
46 AssertIndexRange(component, dim);
47 return this->value()[Idx::momentum + component];
48 }
49
50 decltype(auto)
51 momentum() const
52 {
53 dealii::Tensor<1, dim, ValueType> momentum;
54 for (unsigned int d = 0; d < dim; ++d)
55 momentum[d] = this->momentum(d);
56 return momentum;
57 }
58
59 decltype(auto)
60 velocity(const unsigned int component) const
61 {
62 AssertIndexRange(component, dim);
63 return this->value()[Idx::momentum + component] / this->value()[Idx::density];
64 }
65
66 dealii::Tensor<1, dim, ValueType>
67 velocity() const
68 {
69 dealii::Tensor<1, dim, ValueType> velocity;
70 for (unsigned int d = 0; d < dim; ++d)
71 velocity[d] = this->velocity(d);
72 return velocity;
73 }
74
75 decltype(auto)
77 {
78 return this->value()[Idx::energy];
79 }
80
81 decltype(auto)
83 {
84 return this->value()[Idx::energy] / this->value()[Idx::density];
85 }
86
87 private:
88 decltype(auto)
89 value() const
90 {
91 return static_cast<const Derived &>(*this).value();
92 }
93 };
94
112 template <int dim, ArithmeticType ValueType, typename Derived>
114 {
116
117 decltype(auto)
118 pressure() const
119 {
120 return this->value()[Idx::pressure];
121 }
122
123 decltype(auto)
124 velocity(const unsigned int component) const
125 {
126 AssertIndexRange(component, dim);
127 return this->value()[Idx::velocity + component];
128 }
129
130 auto
131 velocity() const
132 {
133 dealii::Tensor<1, dim, ValueType> velocity;
134 for (unsigned int d = 0; d < dim; ++d)
135 velocity[d] = this->velocity(d);
136
137 return velocity;
138 }
139
140 decltype(auto)
142 {
143 return this->value()[Idx::temperature];
144 }
145
146 private:
147 decltype(auto)
148 value() const
149 {
150 return static_cast<const Derived &>(*this).value();
151 }
152 };
153
184 template <int dim, ArithmeticType ValueType, typename Derived>
186 {
188
189 decltype(auto)
191 {
192 return this->gradient_value()[Idx::density];
193 }
194
195 decltype(auto)
196 grad_momentum(const unsigned int component) const
197 {
198 AssertIndexRange(component, dim);
199 return this->gradient_value()[Idx::momentum + component];
200 }
201
202 decltype(auto)
204 {
205 dealii::Tensor<1, dim, dealii::Tensor<1, dim, ValueType>> grad_momentum;
206 for (unsigned int d = 0; d < dim; ++d)
207 grad_momentum[d] = this->grad_momentum(d);
208 return grad_momentum;
209 }
210
211 decltype(auto)
212 grad_velocity(const unsigned int component,
213 const ValueType &density,
214 const ValueType &velocity_component) const
215 {
216 AssertIndexRange(component, dim);
217 return (this->gradient_value()[Idx::momentum + component] -
218 velocity_component * this->gradient_value()[Idx::density]) /
219 density;
220 }
221
222 decltype(auto)
224 {
225 dealii::Tensor<1, dim, dealii::Tensor<1, dim, ValueType>> grad_velocity;
226 for (unsigned int d = 0; d < dim; ++d)
227 grad_velocity[d] = this->grad_velocity(d, derived().density(), derived().velocity(d));
228 return grad_velocity;
229 }
230
231 decltype(auto)
233 {
234 return this->gradient_value()[Idx::energy];
235 }
236
237 decltype(auto)
238 grad_specific_total_energy(const ValueType &density,
239 const ValueType &specific_total_energy) const
240 {
241 return (this->gradient_value()[Idx::energy] -
242 specific_total_energy * this->gradient_value()[Idx::density]) /
243 density;
244 }
245
246 private:
247 decltype(auto)
249 {
250 return static_cast<const Derived &>(*this).gradient_value();
251 }
252
253 decltype(auto)
255 {
256 return static_cast<const Derived &>(*this).value_view();
257 }
258
259 const Derived &
260 derived() const
261 {
262 return static_cast<const Derived &>(*this);
263 }
264 };
265
283 template <int dim, typename Derived>
285 {
287
288 decltype(auto)
290 {
291 return get_value()[Idx::density];
292 }
293
294 decltype(auto)
295 momentum_flux(const unsigned int component) const
296 {
297 return get_value()[Idx::momentum + component];
298 }
299
300 decltype(auto)
302 {
303 return get_value()[Idx::energy];
304 }
305
306 private:
307 decltype(auto)
308 get_value() const
309 {
310 return static_cast<const Derived &>(*this).value();
311 }
312 };
313} // namespace MeltPoolDG::CompressibleFlow
This file contains various functions that can be used to set and evaluate boundary conditions for the...
Definition boundary_condition_functions.hpp:17
Definition state_views_mixins.hpp:186
decltype(auto) grad_velocity(const unsigned int component, const ValueType &density, const ValueType &velocity_component) const
Definition state_views_mixins.hpp:212
ConservedVariableIndex< dim > Idx
Definition state_views_mixins.hpp:187
decltype(auto) gradient_value() const
Definition state_views_mixins.hpp:248
decltype(auto) value_view() const
Definition state_views_mixins.hpp:254
decltype(auto) grad_momentum(const unsigned int component) const
Definition state_views_mixins.hpp:196
decltype(auto) grad_total_energy() const
Definition state_views_mixins.hpp:232
decltype(auto) grad_velocity() const
Definition state_views_mixins.hpp:223
decltype(auto) grad_density() const
Definition state_views_mixins.hpp:190
const Derived & derived() const
Definition state_views_mixins.hpp:260
decltype(auto) grad_specific_total_energy(const ValueType &density, const ValueType &specific_total_energy) const
Definition state_views_mixins.hpp:238
decltype(auto) grad_momentum() const
Definition state_views_mixins.hpp:203
Definition state_views_mixins.hpp:114
decltype(auto) pressure() const
Definition state_views_mixins.hpp:118
decltype(auto) value() const
Definition state_views_mixins.hpp:148
PrimitiveVariableIndex< dim > Idx
Definition state_views_mixins.hpp:115
decltype(auto) velocity(const unsigned int component) const
Definition state_views_mixins.hpp:124
decltype(auto) temperature() const
Definition state_views_mixins.hpp:141
auto velocity() const
Definition state_views_mixins.hpp:131
Definition state_views_mixins.hpp:34
dealii::Tensor< 1, dim, ValueType > velocity() const
Definition state_views_mixins.hpp:67
decltype(auto) specific_total_energy() const
Definition state_views_mixins.hpp:82
decltype(auto) velocity(const unsigned int component) const
Definition state_views_mixins.hpp:60
decltype(auto) value() const
Definition state_views_mixins.hpp:89
decltype(auto) momentum(const unsigned int component) const
Definition state_views_mixins.hpp:44
decltype(auto) total_energy() const
Definition state_views_mixins.hpp:76
decltype(auto) momentum() const
Definition state_views_mixins.hpp:51
ConservedVariableIndex< dim > Idx
Definition state_views_mixins.hpp:35
decltype(auto) density() const
Definition state_views_mixins.hpp:38
Definition state_views_mixins.hpp:285
ConservedVariableIndex< dim > Idx
Definition state_views_mixins.hpp:286
decltype(auto) get_value() const
Definition state_views_mixins.hpp:308
decltype(auto) energy_flux() const
Definition state_views_mixins.hpp:301
decltype(auto) density_flux() const
Definition state_views_mixins.hpp:289
decltype(auto) momentum_flux(const unsigned int component) const
Definition state_views_mixins.hpp:295