include/meltpooldg/species_transport/boundary_conditions.hpp Source File

Developer Documentation: include/meltpooldg/species_transport/boundary_conditions.hpp Source File
Developer Documentation
boundary_conditions.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/exceptions.h>
4
5#include <array>
6
8{
9
15 {
18 };
19
30 template <std::size_t n_partial_densities,
31 typename VectorizedArrayType,
32 typename ReadOnlyDofView,
33 typename WritableDofView>
34 void
36 const WritableDofView &w_p,
37 const ReadOnlyDofView &w_m,
38 const BoundaryConditionType boundary_type,
39 const std::array<VectorizedArrayType, n_partial_densities> &dirichlet_boundary_values = {})
40 {
41 const auto set_to_value = [](const ReadOnlyDofView &src,
42 const WritableDofView &dst,
43 const VectorizedArrayType &scaling_factor = 1.) {
44 for (unsigned int species = 0; species < n_partial_densities; ++species)
45 {
46 dst.partial_density(species) = src.partial_density(species) * scaling_factor;
47 }
48 };
49
50 const auto set_to_gradient = [](const ReadOnlyDofView &src,
51 const WritableDofView &dst,
52 const VectorizedArrayType &scaling_factor = 1.) {
53 for (unsigned int species = 0; species < n_partial_densities; ++species)
54 dst.grad_partial_density(species) = src.grad_partial_density(species) * scaling_factor;
55 };
56
57 if (boundary_type == BoundaryConditionType::dirichlet)
58 {
59 for (unsigned int species = 0; species < n_partial_densities; ++species)
60 w_p.partial_density(species) = dirichlet_boundary_values[species];
61
62 set_to_gradient(w_m, w_p);
63 }
64 else if (boundary_type == BoundaryConditionType::neumann)
65 {
66 set_to_value(w_m, w_p);
67 set_to_gradient(w_m, w_p, -1.);
68 }
69 else
70 {
71 AssertThrow(false, dealii::ExcMessage("Unknown boundary type for species transport."));
72 }
73 }
74} // namespace MeltPoolDG::SpeciesTransport
Definition boundary_conditions.hpp:8
BoundaryConditionType
Definition boundary_conditions.hpp:15
void set_boundary_value_and_gradient(const WritableDofView &w_p, const ReadOnlyDofView &w_m, const BoundaryConditionType boundary_type, const std::array< VectorizedArrayType, n_partial_densities > &dirichlet_boundary_values={})
Definition boundary_conditions.hpp:35