Mallard 0.8.0
Unstructured, GPU accelerated, high-order finite volume CFD solver
Mallard website
Loading...
Searching...
No Matches
mixture_flux.h
Go to the documentation of this file.
1
13#ifndef MIXTURE_FLUX_H
14#define MIXTURE_FLUX_H
15
16#include <type_traits>
17
18#include <Kokkos_Core.hpp>
19
20#include "boundary.h"
21#include "common.h"
22#include "flux_functor.h"
23#include "riemann_solver.h"
25#include "state.h"
26
33 const rtype M_l2 = dot<N_DIM>(W_l + 1, W_l + 1) * W_l[0] / (gamma_l * W_l[N_DIM + 1]);
34 const rtype M_r2 = dot<N_DIM>(W_r + 1, W_r + 1) * W_r[0] / (gamma_r * W_r[N_DIM + 1]);
35 const rtype z = Kokkos::fmin(1.0_r, Kokkos::fmax(M_cut, Kokkos::sqrt(Kokkos::fmax(M_l2, M_r2))));
36 FOR_I_DIM {
37 const rtype mean = 0.5_r * (W_l[1 + i] + W_r[1 + i]);
38 const rtype half_jump = 0.5_r * (W_l[1 + i] - W_r[1 + i]);
39 W_l[1 + i] = mean + z * half_jump;
40 W_r[1 + i] = mean - z * half_jump;
41 }
42}
43
51template <typename T_riemann_solver>
53 Kokkos::View<rtype *[N_DIM]> normals;
54 Kokkos::View<rtype *> face_area;
55 Kokkos::View<int32_t *[2]> cells_of_face;
56 Kokkos::View<rtype *> quad_weights;
57 Kokkos::View<rtype **> face_weights; // (face, q): 3D, zero on padding points; 2D axisymmetric, Gauss weight times r; else empty
58 Kokkos::View<rtype **[2][N_CONSERVATIVE]> face_solution;
59 Kokkos::View<rtype **[2][2]> face_thermo;
61 Kokkos::View<rtype *[N_CONSERVATIVE]> W_cells;
62 Kokkos::View<rtype **, Kokkos::LayoutStride> cell_thermo; // (cell, [gamma, e0])
63 Kokkos::View<rtype *[N_CONSERVATIVE]> face_flux;
64 Kokkos::View<rtype **> face_mdot; // (face, q)
66 Kokkos::View<rtype *> upwind; // hybrid flux: upwind fraction of each cell, else empty
67 Kokkos::View<rtype ***> quad_normals; // curved meshes: (face, q, dim) unit normals; else empty
68
70 void operator()(const uint32_t i_face) const {
71 uint8_t n_quad;
72 if constexpr (N_DIM == 2) {
73 n_quad = static_cast<uint8_t>(quad_weights.extent(0));
74 } else {
75 n_quad = static_cast<uint8_t>(face_weights.extent(1));
76 }
77 const int32_t c1 = cells_of_face(i_face, 1);
82 const bool hybrid = upwind.extent(0) > 0;
83 const rtype phi =
85
87 for (uint8_t i_quad = 0; i_quad < n_quad; i_quad++) {
90 rtype w_q;
91 if constexpr (N_DIM == 2) {
93 } else {
95 if (w_q == 0.0_r) {
97 continue;
98 }
99 }
101 rtype th_l[2], th_r[2];
103 th_l[0] = face_thermo(i_face, i_quad, 0, 0);
104 th_l[1] = face_thermo(i_face, i_quad, 0, 1);
105 if (c1 >= 0) {
107 th_r[0] = face_thermo(i_face, i_quad, 1, 0);
108 th_r[1] = face_thermo(i_face, i_quad, 1, 1);
109 } else {
112 }
113 const riemann::SideThermo side_l{th_l[0], th_l[1]}, side_r{th_r[0], th_r[1]};
114 rtype central[N_CONSERVATIVE] = {};
116 if (phi > 0.0_r) {
117 if (low_mach_cutoff < 1.0_r &&
118 (c1 >= 0 || boundaries.bcs(boundaries.face_bc(i_face)).is_characteristic())) {
120 }
121 T_riemann_solver::calc_flux(flux_q, n_point, W_l, W_r, side_l, side_r);
122 if (hybrid) FOR_I_CONSERVATIVE flux_q[i] = central[i] + phi * (flux_q[i] - central[i]);
123 } else {
124 FOR_I_CONSERVATIVE flux_q[i] = central[i];
125 }
128 }
129
130 // Weights sum to 2 (Gauss-Legendre on [-1, 1] in 2D)
131 const rtype scale = 0.5_r * face_area(i_face);
133 }
134};
135
148template <typename T_riemann_solver>
150 Kokkos::View<rtype *[N_DIM]> normals;
151 Kokkos::View<rtype *> face_area;
152 Kokkos::View<int32_t *[2]> cells_of_face;
153 Kokkos::View<rtype *> quad_weights;
154 Kokkos::View<rtype **> face_weights;
155 Kokkos::View<rtype **[2][N_CONSERVATIVE]> face_solution;
157 Kokkos::View<rtype *[N_CONSERVATIVE]> W_cells;
158 Kokkos::View<rtype *[2]> frozen; // (cell, [gamma, e0])
159 Kokkos::View<rtype **[2][2]> face_thermo;
160 Kokkos::View<rtype **, Kokkos::LayoutStride> cell_thermo;
161 Kokkos::View<rtype *[N_CONSERVATIVE]> face_flux;
162 Kokkos::View<rtype *> face_energy_1;
163 Kokkos::View<rtype **> face_mdot;
165 Kokkos::View<rtype *> upwind; // hybrid flux: upwind fraction of each cell, else empty
166 Kokkos::View<rtype ***> quad_normals; // curved meshes: (face, q, dim) unit normals; else empty
167
169 void operator()(const uint32_t i_face) const {
170 constexpr uint8_t E = N_DIM + 1;
171 uint8_t n_quad;
172 if constexpr (N_DIM == 2) {
173 n_quad = static_cast<uint8_t>(quad_weights.extent(0));
174 } else {
175 n_quad = static_cast<uint8_t>(face_weights.extent(1));
176 }
177 const int32_t c0 = cells_of_face(i_face, 0);
178 const int32_t c1 = cells_of_face(i_face, 1);
179 const riemann::SideThermo th_0{frozen(c0, 0), frozen(c0, 1)};
180 const riemann::SideThermo th_1 = c1 >= 0 ? riemann::SideThermo{frozen(c1, 0), frozen(c1, 1)} : th_0;
185 const bool hybrid = upwind.extent(0) > 0;
186 const rtype phi = hybrid ? face_upwind_fraction(upwind, boundaries, c0, c1, i_face) : 1.0_r;
187
189 rtype energy_1 = 0.0_r;
190 for (uint8_t i_quad = 0; i_quad < n_quad; i_quad++) {
191 rtype n_q[N_DIM];
193 rtype w_q;
194 if constexpr (N_DIM == 2) {
196 } else {
198 if (w_q == 0.0_r) {
199 face_mdot(i_face, i_quad) = 0.0_r;
200 continue;
201 }
202 }
205 if (c1 >= 0) {
207 } else {
208 const rtype th_i[2] = {th_0.gamma, th_0.e0};
209 rtype th_g[2];
212 }
213 // Each side's central flux with its own frozen thermodynamics on both sides
215 if (hybrid) {
218 }
219 if (low_mach_cutoff < 1.0_r) {
220 if (c1 >= 0) {
222 } else if (boundaries.bcs(boundaries.face_bc(i_face)).is_characteristic()) {
224 }
225 }
227 T_riemann_solver::calc_flux(F_0, n_point, W_l, W_r, th_0, riemann::SideThermo(th_0, th_1));
228 if (c1 >= 0) {
229 T_riemann_solver::calc_flux(F_1, n_point, W_l, W_r, riemann::SideThermo(th_1, th_0), th_1);
230 } else {
232 }
233 if (hybrid) {
235 F_0[i] = K_0[i] + phi * (F_0[i] - K_0[i]);
236 F_1[i] = K_1[i] + phi * (F_1[i] - K_1[i]);
237 }
238 }
239 const rtype mdot = 0.5_r * (F_0[0] + F_1[0]);
241 flux[0] += w_q * mdot;
242 FOR_I_DIM flux[1 + i] += w_q * 0.5_r * (F_0[1 + i] + F_1[1 + i]);
243 flux[E] += w_q * F_0[E];
244 energy_1 += w_q * F_1[E];
245 }
246
247 const rtype scale = 0.5_r * face_area(i_face);
250 }
251};
252
258 Kokkos::View<uint32_t *> offsets_faces_of_cell;
259 Kokkos::View<uint32_t *> faces_of_cell;
260 Kokkos::View<int32_t *[2]> cells_of_face;
261 Kokkos::View<rtype *[N_CONSERVATIVE]> face_flux;
262 Kokkos::View<rtype *> face_energy_1;
263 Kokkos::View<rtype *[N_CONSERVATIVE]> rhs;
264
266 void operator()(const uint32_t i_cell) const {
267 constexpr uint8_t E = N_DIM + 1;
268 rtype sum[N_CONSERVATIVE] = {};
270 const uint32_t i_face = faces_of_cell(k);
271 if (cells_of_face(i_face, 0) == static_cast<int32_t>(i_cell)) {
273 } else {
274 for (uint8_t i = 0; i < E; i++) sum[i] -= face_flux(i_face, i);
275 sum[E] -= face_energy_1(i_face);
276 }
277 }
279 }
280};
281
295template <typename Eval>
298
299 Kokkos::View<uint32_t *> offsets_faces_of_cell;
300 Kokkos::View<uint32_t *> faces_of_cell;
301 Kokkos::View<int32_t *[2]> cells_of_face;
302 Kokkos::View<rtype *> face_area;
303 Kokkos::View<rtype *> quad_weights; // 2D
304 Kokkos::View<rtype **> face_weights; // (face, q): 3D; 2D axisymmetric (see MixtureFluxFunctor); else empty
305 Kokkos::View<rtype **> face_mdot;
308 Kokkos::View<rtype ***, Kokkos::LayoutRight> slots; // (face, side, k)
310
312 uint8_t n_quad() const {
313 if constexpr (N_DIM == 2) {
314 return static_cast<uint8_t>(quad_weights.extent(0));
315 } else {
316 return static_cast<uint8_t>(face_weights.extent(1));
317 }
318 }
319
325 void exterior_Y(const uint32_t f, const uint32_t k, const rtype * interior, rtype * out) const {
326 const uint8_t nq = n_quad();
327 const int32_t i_bc = boundaries.face_bc(f);
328 const BoundaryType type = boundaries.bcs(i_bc).type;
331 if (type == BoundaryType::NSCBC_INLET) {
332 for (uint8_t q = 0; q < nq; q++) out[q] = boundaries.bc_Y(i_bc, k);
333 return;
334 }
335 if (image_face >= 0) {
336 uint8_t k_image = 0;
339 values.face_values(static_cast<uint32_t>(image), k, k_image, image_values);
340 for (uint8_t q = 0; q < nq; q++) {
342 if constexpr (N_DIM == 2) {
343 q_image = static_cast<uint8_t>(boundaries.face_image_flip(f) ? nq - 1 - q : q);
344 } else {
346 }
348 }
349 return;
350 }
351 for (uint8_t q = 0; q < nq; q++) {
352 if (image >= 0) {
353 out[q] = values.scalars(image, k);
354 } else if (type == BoundaryType::UPT) {
355 out[q] = boundaries.bc_Y(i_bc, k);
356 } else {
357 out[q] = interior[q];
358 }
359 }
360 }
361
368 void linear(const uint32_t c) const {
369 constexpr uint8_t NF = teno::MAX_FACES;
371 const uint8_t n_faces = static_cast<uint8_t>(offsets_faces_of_cell(c + 1) - begin);
372 rtype w_out[NF] = {}, w_in[NF] = {}, r[NF][N_DIM] = {};
373 uint32_t faces[NF] = {};
374 uint8_t sides[NF] = {};
375 bool boundary = false;
376 for (uint8_t i = 0; i < NF; i++) {
377 if (i >= n_faces) continue;
378 const uint32_t f = faces_of_cell(begin + i);
379 const bool side_0 = cells_of_face(f, 0) == static_cast<int32_t>(c);
380 faces[i] = f;
381 sides[i] = side_0 ? 0 : 1;
382 boundary = boundary || cells_of_face(f, 1) < 0;
383 const rtype scale = 0.5_r * face_area(f);
384 rtype w_q;
385 if constexpr (N_DIM == 2) {
386 w_q = face_weights.extent(0) ? face_weights(f, 0) : quad_weights(0);
387 } else {
388 w_q = face_weights(f, 0);
389 }
390 const rtype m_out = side_0 ? face_mdot(f, 0) : -face_mdot(f, 0);
391 w_out[i] = scale * w_q * Kokkos::fmax(m_out, 0.0_r);
392 w_in[i] = scale * w_q * Kokkos::fmax(-m_out, 0.0_r);
393 values.offset(c, f, sides[i], r[i]);
394 }
395 for (uint32_t k = 0; k < n_species; k++) {
396 for (uint8_t i = 0; i < NF; i++) {
397 if (i >= n_faces) continue;
398 const rtype Y = values.value(c, k, r[i]);
399 rtype out = 0.0_r;
400 out += w_out[i] * Y;
401 slots(faces[i], sides[i], k) = out;
402 }
403 if (!boundary) continue;
404 for (uint8_t i = 0; i < n_faces; i++) {
405 if (cells_of_face(faces[i], 1) >= 0) continue;
406 const rtype Y = values.value(c, k, r[i]);
408 exterior_Y(faces[i], k, &Y, Y_ext);
409 rtype in = 0.0_r;
410 in += w_in[i] * Y_ext[0];
411 slots(faces[i], 1, k) = in;
412 }
413 }
414 }
415
417 void operator()(const uint32_t c) const {
418 if constexpr (std::is_same_v<Eval, ScalarFaceValues>) {
419 linear(c);
420 return;
421 }
423 const uint8_t n_faces = static_cast<uint8_t>(offsets_faces_of_cell(c + 1) - begin);
424 const uint8_t nq = n_quad();
425 // A/2 w_q max(+-mdot_out, 0) at each point of each face
427 for (uint8_t i = 0; i < n_faces; i++) {
428 const uint32_t f = faces_of_cell(begin + i);
429 const bool side_0 = cells_of_face(f, 0) == static_cast<int32_t>(c);
430 const rtype scale = 0.5_r * face_area(f);
431 for (uint8_t q = 0; q < nq; q++) {
432 rtype w_q;
433 if constexpr (N_DIM == 2) {
434 w_q = face_weights.extent(0) ? face_weights(f, q) : quad_weights(q);
435 } else {
436 w_q = face_weights(f, q);
437 }
438 const rtype m_out = side_0 ? face_mdot(f, q) : -face_mdot(f, q);
439 w_out[i][q] = scale * w_q * Kokkos::fmax(m_out, 0.0_r);
440 w_in[i][q] = scale * w_q * Kokkos::fmax(-m_out, 0.0_r);
441 }
442 }
443 for (uint32_t k = 0; k < n_species; k++) {
445 values.cell_values(c, k, Y);
446 for (uint8_t i = 0; i < n_faces; i++) {
447 const uint32_t f = faces_of_cell(begin + i);
448 const uint8_t side = cells_of_face(f, 0) == static_cast<int32_t>(c) ? 0 : 1;
449 rtype out = 0.0_r;
450 for (uint8_t q = 0; q < nq; q++) out += w_out[i][q] * Y[i][q];
451 slots(f, side, k) = out;
452 if (cells_of_face(f, 1) < 0) {
454 exterior_Y(f, k, Y[i], Y_ext);
455 rtype in = 0.0_r;
456 for (uint8_t q = 0; q < nq; q++) in += w_in[i][q] * Y_ext[q];
457 slots(f, 1, k) = in;
458 }
459 }
460 }
461 }
462};
463
469 Kokkos::View<uint32_t *> offsets_faces_of_cell;
470 Kokkos::View<uint32_t *> faces_of_cell;
471 Kokkos::View<int32_t *[2]> cells_of_face;
472 Kokkos::View<rtype *> cell_volume;
473 Kokkos::View<rtype ***, Kokkos::LayoutRight> slots;
476
478 void operator()(const uint32_t c) const {
479 const rtype inv_V = 1.0_r / cell_volume(c);
481 const uint8_t n_faces = static_cast<uint8_t>(offsets_faces_of_cell(c + 1) - begin);
482 constexpr uint8_t NF = teno::MAX_FACES;
483 uint32_t faces[NF] = {};
484 uint8_t sides[NF] = {};
485 for (uint8_t i = 0; i < NF; i++) {
486 if (i >= n_faces) continue;
487 faces[i] = faces_of_cell(begin + i);
488 sides[i] = (cells_of_face(faces[i], 0) == static_cast<int32_t>(c)) ? 0 : 1;
489 }
490 for (uint32_t k = 0; k < n_species; k++) {
491 rtype sum = 0.0_r;
492 for (uint8_t i = 0; i < NF; i++) {
493 if (i < n_faces) sum += slots(faces[i], 1 - sides[i], k) - slots(faces[i], sides[i], k);
494 }
495 rhs(c, k) = sum * inv_V;
496 }
497 }
498};
499
500#endif // MIXTURE_FLUX_H
Boundary conditions.
BoundaryType
Definition boundary.h:25
Common header file.
KOKKOS_INLINE_FUNCTION rtype dot(const rtype *a, const rtype *b)
Compute the dot product of two arrays.
Definition common_math.h:32
float rtype
Definition common_typedef.h:39
#define N_DIM
Definition common_typedef.h:28
#define FOR_I_CONSERVATIVE
Definition common_typedef.h:33
#define N_CONSERVATIVE
Definition common_typedef.h:29
#define FOR_I_DIM
Definition common_typedef.h:32
Convective flux functor.
KOKKOS_INLINE_FUNCTION const rtype * quad_normal(const Kokkos::View< rtype *** > &quad_normals, const uint32_t f, const uint8_t q, const rtype *n_face, rtype *n_q)
Unit normal at quadrature point q of face f: the point's own on curved meshes (quad_normals,...
Definition flux_functor.h:50
KOKKOS_INLINE_FUNCTION rtype face_upwind_fraction(const Kokkos::View< rtype * > &upwind, const BoundaryData &boundaries, const int32_t c0, const int32_t c1, const uint32_t i_face)
Upwind fraction of a face of the hybrid convective flux: the larger of its cells' (boundary faces oth...
Definition flux_functor.h:63
KOKKOS_INLINE_FUNCTION void low_mach_correction(rtype *W_l, rtype *W_r, const rtype gamma_l, const rtype gamma_r, const rtype M_cut)
The low-Mach correction of flux_functor.h with each side's own ratio of specific heats in its Mach nu...
Definition mixture_flux.h:32
constexpr uint8_t MAX_FACES
Definition teno.h:37
constexpr uint8_t MAX_FACE_QUAD
Definition teno.h:38
Approximate Riemann solvers.
Reconstruction of a gas mixture's cell scalars to faces.
rtype[teno::MAX_FACE_QUAD] FacePointValues
Per-face storage of scalar values at a face's quadrature points.
Definition scalar_reconstruction.h:29
Conservative state: the flow block and the species partial densities.
Kokkos::View< rtype **, SpeciesLayout > SpeciesView
Partial densities rho Y_k per (cell, species).
Definition state.h:37
Device-side lookup from faces to boundary conditions.
Definition boundary.h:229
KOKKOS_INLINE_FUNCTION void exterior_mixture(const uint32_t i_face, const uint8_t i_quad, const uint8_t n_quad, const rtype *W_i, const rtype *th_i, const rtype *n, const T_W &W_cells, const T_F &face_solution, const T_FT &face_thermo, const T_CT &cell_thermo, rtype *W_g, rtype *th_g) const
Exterior state of a gas mixture on boundary face i_face: W as in exterior_W (with the interior gamma ...
Definition boundary.h:272
Kokkos::View< uint8_t ** > face_image_quad
Definition boundary.h:235
Kokkos::View< int32_t * > face_bc
Definition boundary.h:230
Kokkos::View< int32_t * > face_image
Definition boundary.h:231
Kokkos::View< rtype **, Kokkos::LayoutRight > bc_Y
Definition boundary.h:257
Kokkos::View< BoundaryCondition * > bcs
Definition boundary.h:249
Kokkos::View< int32_t * > face_image_face
Definition boundary.h:232
Kokkos::View< uint8_t * > face_image_flip
Definition boundary.h:234
FaceFluxSumFunctor for double flux: the energy of a face's side-1 cell comes from face_energy_1.
Definition mixture_flux.h:257
Kokkos::View< int32_t *[2]> cells_of_face
Definition mixture_flux.h:260
KOKKOS_INLINE_FUNCTION void operator()(const uint32_t i_cell) const
Definition mixture_flux.h:266
Kokkos::View< uint32_t * > offsets_faces_of_cell
Definition mixture_flux.h:258
Kokkos::View< rtype *[N_CONSERVATIVE]> rhs
Definition mixture_flux.h:263
Kokkos::View< rtype * > face_energy_1
Definition mixture_flux.h:262
Kokkos::View< uint32_t * > faces_of_cell
Definition mixture_flux.h:259
Kokkos::View< rtype *[N_CONSERVATIVE]> face_flux
Definition mixture_flux.h:261
Double-flux variant of MixtureFluxFunctor (Abgrall & Karni 2001; Billet & Abgrall 2003; Ma,...
Definition mixture_flux.h:149
Kokkos::View< rtype **[2][2]> face_thermo
Definition mixture_flux.h:159
rtype low_mach_cutoff
Definition mixture_flux.h:164
Kokkos::View< rtype **, Kokkos::LayoutStride > cell_thermo
Definition mixture_flux.h:160
Kokkos::View< rtype ** > face_weights
Definition mixture_flux.h:154
Kokkos::View< rtype * > upwind
Definition mixture_flux.h:165
Kokkos::View< rtype **[2][N_CONSERVATIVE]> face_solution
Definition mixture_flux.h:155
Kokkos::View< rtype * > face_energy_1
Definition mixture_flux.h:162
Kokkos::View< rtype * > quad_weights
Definition mixture_flux.h:153
Kokkos::View< rtype *[N_CONSERVATIVE]> W_cells
Definition mixture_flux.h:157
KOKKOS_INLINE_FUNCTION void operator()(const uint32_t i_face) const
Definition mixture_flux.h:169
Kokkos::View< int32_t *[2]> cells_of_face
Definition mixture_flux.h:152
Kokkos::View< rtype * > face_area
Definition mixture_flux.h:151
Kokkos::View< rtype *** > quad_normals
Definition mixture_flux.h:166
Kokkos::View< rtype *[N_DIM]> normals
Definition mixture_flux.h:150
Kokkos::View< rtype *[2]> frozen
Definition mixture_flux.h:158
Kokkos::View< rtype *[N_CONSERVATIVE]> face_flux
Definition mixture_flux.h:161
BoundaryData boundaries
Definition mixture_flux.h:156
Kokkos::View< rtype ** > face_mdot
Definition mixture_flux.h:163
Flow-block flux of a gas mixture over every face, as ConvectiveFluxFunctor, with the face thermodynam...
Definition mixture_flux.h:52
Kokkos::View< rtype *[N_DIM]> normals
Definition mixture_flux.h:53
Kokkos::View< rtype * > quad_weights
Definition mixture_flux.h:56
Kokkos::View< rtype *** > quad_normals
Definition mixture_flux.h:67
Kokkos::View< int32_t *[2]> cells_of_face
Definition mixture_flux.h:55
Kokkos::View< rtype **[2][2]> face_thermo
Definition mixture_flux.h:59
Kokkos::View< rtype *[N_CONSERVATIVE]> face_flux
Definition mixture_flux.h:63
Kokkos::View< rtype **[2][N_CONSERVATIVE]> face_solution
Definition mixture_flux.h:58
Kokkos::View< rtype ** > face_weights
Definition mixture_flux.h:57
BoundaryData boundaries
Definition mixture_flux.h:60
KOKKOS_INLINE_FUNCTION void operator()(const uint32_t i_face) const
Definition mixture_flux.h:70
Kokkos::View< rtype *[N_CONSERVATIVE]> W_cells
Definition mixture_flux.h:61
Kokkos::View< rtype * > upwind
Definition mixture_flux.h:66
Kokkos::View< rtype * > face_area
Definition mixture_flux.h:54
Kokkos::View< rtype **, Kokkos::LayoutStride > cell_thermo
Definition mixture_flux.h:62
Kokkos::View< rtype ** > face_mdot
Definition mixture_flux.h:64
rtype low_mach_cutoff
Definition mixture_flux.h:65
Species fluxes by mass-flux upwinding (Larrouturou 1991), F_k = max(mdot, 0) Y_k^L + min(mdot,...
Definition mixture_flux.h:296
BoundaryData boundaries
Definition mixture_flux.h:307
Kokkos::View< uint32_t * > offsets_faces_of_cell
Definition mixture_flux.h:299
Kokkos::View< rtype ***, Kokkos::LayoutRight > slots
Definition mixture_flux.h:308
uint32_t n_species
Definition mixture_flux.h:309
KOKKOS_INLINE_FUNCTION void exterior_Y(const uint32_t f, const uint32_t k, const rtype *interior, rtype *out) const
Mass fraction k beyond boundary face f (local face k_face of cell c, whose own values there are inter...
Definition mixture_flux.h:325
Eval values
Definition mixture_flux.h:306
Kokkos::View< rtype ** > face_weights
Definition mixture_flux.h:304
KOKKOS_INLINE_FUNCTION void linear(const uint32_t c) const
Linear reconstruction (ScalarFaceValues, one point per face): the faces' offsets and weights are shar...
Definition mixture_flux.h:368
Kokkos::View< rtype ** > face_mdot
Definition mixture_flux.h:305
KOKKOS_INLINE_FUNCTION uint8_t n_quad() const
Definition mixture_flux.h:312
KOKKOS_INLINE_FUNCTION void operator()(const uint32_t c) const
Definition mixture_flux.h:417
Kokkos::View< int32_t *[2]> cells_of_face
Definition mixture_flux.h:301
static constexpr uint8_t MAX_Q
Definition mixture_flux.h:297
Kokkos::View< rtype * > face_area
Definition mixture_flux.h:302
Kokkos::View< uint32_t * > faces_of_cell
Definition mixture_flux.h:300
Kokkos::View< rtype * > quad_weights
Definition mixture_flux.h:303
Species RHS per unit volume: the inflow minus the outflow slots of each face of the cell,...
Definition mixture_flux.h:468
Kokkos::View< rtype * > cell_volume
Definition mixture_flux.h:472
Kokkos::View< uint32_t * > offsets_faces_of_cell
Definition mixture_flux.h:469
SpeciesView rhs
Definition mixture_flux.h:474
Kokkos::View< rtype ***, Kokkos::LayoutRight > slots
Definition mixture_flux.h:473
Kokkos::View< int32_t *[2]> cells_of_face
Definition mixture_flux.h:471
uint32_t n_species
Definition mixture_flux.h:475
KOKKOS_INLINE_FUNCTION void operator()(const uint32_t c) const
Definition mixture_flux.h:478
Kokkos::View< uint32_t * > faces_of_cell
Definition mixture_flux.h:470
static KOKKOS_INLINE_FUNCTION void calc_flux(rtype *flux, const rtype *n, const rtype *W_l, const rtype *W_r, const rtype gamma)
Definition riemann_solver.h:569
Thermodynamics of one side of a face for a gas mixture: the frozen ratio of specific heats and the en...
Definition riemann_solver.h:102
CellSetup< ExecSpace > c
Definition teno_setup.cpp:1810
TableBatchT< Space > out
Definition teno_setup.cpp:681
uint8_t r
Definition teno_setup.cpp:687
Lane< rtype > scale
Definition teno_setup.cpp:531