include/meltpooldg/species_transport/kernels.hpp Source File

Developer Documentation: include/meltpooldg/species_transport/kernels.hpp Source File
Developer Documentation
kernels.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/config.h>
4
5#include <deal.II/base/vectorization.h>
6
8{
19 template <int n_species, typename ConservedVariablesView, typename WritableFluxView>
20 inline DEAL_II_ALWAYS_INLINE //
21 void
22 compute_convective_flux(const ConservedVariablesView &conserved_variables,
23 const WritableFluxView &flux)
24 {
25 for (unsigned int i = 0; i < n_species - 1; ++i)
26 {
27 flux.partial_density_flux(i) +=
28 conserved_variables.partial_density(i) * conserved_variables.velocity();
29 }
30 }
31
42 template <int n_species, typename ConservedVariablesView>
43 [[nodiscard]] inline DEAL_II_ALWAYS_INLINE //
44 auto
45 fickian_diffusion_approximation(const ConservedVariablesView &conserved_variables,
46 const unsigned int species_idx)
47 {
48 auto flux = conserved_variables.mixture_averaged_diffusion_coefficient(species_idx) *
49 conserved_variables.grad_mass_fraction(species_idx);
50
51 for (unsigned int i = 0; i < n_species; ++i)
52 flux -= conserved_variables.mass_fraction(species_idx) *
53 conserved_variables.mixture_averaged_diffusion_coefficient(i) *
54 conserved_variables.grad_mass_fraction(i);
55
56 flux *= -conserved_variables.density();
57 return flux;
58 }
59
68 template <int n_species, typename ConservedVariablesView, typename WritableFluxView>
69 inline DEAL_II_ALWAYS_INLINE //
70 void
71 compute_diffusive_flux(const ConservedVariablesView &conserved_variables,
72 const WritableFluxView &flux)
73 {
74 for (unsigned int i = 0; i < n_species - 1; ++i)
75 {
76 flux.partial_density_flux(i) -=
77 fickian_diffusion_approximation<n_species, ConservedVariablesView>(conserved_variables,
78 i);
79 }
80 }
81
92 template <int n_species,
93 typename VectorizedArrayType,
94 typename ConservedVariablesView,
95 typename WritableFluxView>
96 void
97 interdiffusional_enthalpy_flux(const ConservedVariablesView &conserved_variables,
98 const WritableFluxView &flux)
99 {
100 const auto species_enthalpy = [&](const int idx) -> VectorizedArrayType {
101 // If the partial density of the species is zero, set the species enthalpy to zero to avoid
102 // NaNs in the interdiffusional enthalpy flux.
103 return dealii::compare_and_apply_mask<dealii::SIMDComparison::greater_than>(
104 conserved_variables.mass_fraction(idx),
105 VectorizedArrayType(1e-15),
106 conserved_variables.partial_inner_energy(idx) +
107 conserved_variables.partial_pressure(idx) / conserved_variables.partial_density(idx),
108 VectorizedArrayType(0.));
109 };
110
111 for (unsigned int i = 0; i < n_species; ++i)
112 flux.energy_flux() +=
113 species_enthalpy(i) *
114 fickian_diffusion_approximation<n_species, ConservedVariablesView>(conserved_variables, i);
115 }
116} // namespace MeltPoolDG::SpeciesTransport
Definition boundary_conditions.hpp:8
DEAL_II_ALWAYS_INLINE auto fickian_diffusion_approximation(const ConservedVariablesView &conserved_variables, const unsigned int species_idx)
Definition kernels.hpp:45
void interdiffusional_enthalpy_flux(const ConservedVariablesView &conserved_variables, const WritableFluxView &flux)
Definition kernels.hpp:97
DEAL_II_ALWAYS_INLINE void compute_convective_flux(const ConservedVariablesView &conserved_variables, const WritableFluxView &flux)
Computes the convective species transport flux for each species.
Definition kernels.hpp:22
DEAL_II_ALWAYS_INLINE void compute_diffusive_flux(const ConservedVariablesView &conserved_variables, const WritableFluxView &flux)
Definition kernels.hpp:71