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
125 template <int dim, ArithmeticType ValueType, typename Derived>
127 {
129
130 decltype(auto)
132 {
133 return this->gradient_value()[Idx::density];
134 }
135
136 decltype(auto)
137 grad_momentum(const unsigned int component) const
138 {
139 AssertIndexRange(component, dim);
140 return this->gradient_value()[Idx::momentum + component];
141 }
142
143 decltype(auto)
145 {
146 dealii::Tensor<1, dim, dealii::Tensor<1, dim, ValueType>> grad_momentum;
147 for (unsigned int d = 0; d < dim; ++d)
148 grad_momentum[d] = this->grad_momentum(d);
149 return grad_momentum;
150 }
151
152 decltype(auto)
153 grad_velocity(const unsigned int component,
154 const ValueType &density,
155 const ValueType &velocity_component) const
156 {
157 AssertIndexRange(component, dim);
158 return (this->gradient_value()[Idx::momentum + component] -
159 velocity_component * this->gradient_value()[Idx::density]) /
160 density;
161 }
162
163 decltype(auto)
165 {
166 dealii::Tensor<1, dim, dealii::Tensor<1, dim, ValueType>> grad_velocity;
167 for (unsigned int d = 0; d < dim; ++d)
168 grad_velocity[d] = this->grad_velocity(d, derived().density(), derived().velocity(d));
169 return grad_velocity;
170 }
171
172 decltype(auto)
174 {
175 return this->gradient_value()[Idx::energy];
176 }
177
178 decltype(auto)
179 grad_specific_total_energy(const ValueType &density,
180 const ValueType &specific_total_energy) const
181 {
182 return (this->gradient_value()[Idx::energy] -
183 specific_total_energy * this->gradient_value()[Idx::density]) /
184 density;
185 }
186
187 private:
188 decltype(auto)
190 {
191 return static_cast<const Derived &>(*this).gradient_value();
192 }
193
194 decltype(auto)
196 {
197 return static_cast<const Derived &>(*this).value_view();
198 }
199
200 const Derived &
201 derived() const
202 {
203 return static_cast<const Derived &>(*this);
204 }
205 };
206
224 template <int dim, typename Derived>
226 {
228
229 decltype(auto)
231 {
232 return get_value()[Idx::density];
233 }
234
235 decltype(auto)
236 momentum_flux(const unsigned int component) const
237 {
238 return get_value()[Idx::momentum + component];
239 }
240
241 decltype(auto)
243 {
244 return get_value()[Idx::energy];
245 }
246
247 private:
248 decltype(auto)
249 get_value() const
250 {
251 return static_cast<const Derived &>(*this).value();
252 }
253 };
254} // 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:127
decltype(auto) grad_velocity(const unsigned int component, const ValueType &density, const ValueType &velocity_component) const
Definition state_views_mixins.hpp:153
ConservedVariableIndex< dim > Idx
Definition state_views_mixins.hpp:128
decltype(auto) gradient_value() const
Definition state_views_mixins.hpp:189
decltype(auto) value_view() const
Definition state_views_mixins.hpp:195
decltype(auto) grad_momentum(const unsigned int component) const
Definition state_views_mixins.hpp:137
decltype(auto) grad_total_energy() const
Definition state_views_mixins.hpp:173
decltype(auto) grad_velocity() const
Definition state_views_mixins.hpp:164
decltype(auto) grad_density() const
Definition state_views_mixins.hpp:131
const Derived & derived() const
Definition state_views_mixins.hpp:201
decltype(auto) grad_specific_total_energy(const ValueType &density, const ValueType &specific_total_energy) const
Definition state_views_mixins.hpp:179
decltype(auto) grad_momentum() const
Definition state_views_mixins.hpp:144
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:226
ConservedVariableIndex< dim > Idx
Definition state_views_mixins.hpp:227
decltype(auto) get_value() const
Definition state_views_mixins.hpp:249
decltype(auto) energy_flux() const
Definition state_views_mixins.hpp:242
decltype(auto) density_flux() const
Definition state_views_mixins.hpp:230
decltype(auto) momentum_flux(const unsigned int component) const
Definition state_views_mixins.hpp:236