include/meltpooldg/level_set/advection_DG_operator.hpp Source File

Developer Documentation: include/meltpooldg/level_set/advection_DG_operator.hpp Source File
Developer Documentation
advection_DG_operator.hpp
Go to the documentation of this file.
1#pragma once
2
3/* Code adapted from:
4https://github.com/kronbichler/advection_miniapp/blob/master/advection_solver_variable.cc*/
5
6#include <deal.II/base/function.h>
7#include <deal.II/base/vectorization.h>
8
9#include <deal.II/lac/la_parallel_vector.h>
10
11#include <deal.II/matrix_free/operators.h>
12
13#include <deal.II/numerics/vector_tools.h>
14
19
20#include <cmath>
21
23{
24 template <int dim, typename number>
26 {
27 public:
28 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
29 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
30
31 using scalar = dealii::VectorizedArray<number>;
32 using vector = dealii::Tensor<1, dim, scalar>;
33
35 const unsigned int advec_diff_dof_idx_in,
36 const unsigned int advec_diff_quad_idx_in,
38 &boundary_conditions_in);
44 void
46 const std::shared_ptr<dealii::Function<dim, number>> &advection_velocity_function_in);
47
54 void
55 set_advection_velocity(const VectorType &advection_velocity_in,
56 const unsigned int velocity_dof_idx_in);
57
64 void
65 update_time_velocity_function(const number time) const;
66
67
78 void
79 apply_operator(number time,
80 VectorType &dst,
81 const VectorType &src,
82 const std::function<void(unsigned int, unsigned int)> &func = {}) const;
88 void
89 apply_dirichlet_boundary_operator(const number time,
90 VectorType &dst,
91 const VectorType &src) const;
92
97
98
99 private:
101
102 const unsigned int advec_diff_dof_idx = 0;
103 const unsigned int advec_diff_quad_idx = 0;
104
105 std::shared_ptr<MeltPoolDG::BoundaryConditionManager<dim, number>> boundary_conditions;
106
108 unsigned int velocity_dof_idx = dealii::numbers::invalid_unsigned_int;
109 std::shared_ptr<dealii::Function<dim, number>> advection_velocity_function = nullptr;
110
111 void
112 local_apply_domain(const dealii::MatrixFree<dim, number> &data,
113 VectorType &dst,
114 const VectorType &src,
115 const std::pair<unsigned int, unsigned int> &cell_range) const;
116
121 void
123 [[maybe_unused]] const dealii::MatrixFree<dim, number> &data,
124 [[maybe_unused]] VectorType &dst,
125 [[maybe_unused]] const VectorType &src,
126 [[maybe_unused]] const std::pair<unsigned int, unsigned int> &cell_range) const {};
127
128 void
129 local_apply_inner_face(const dealii::MatrixFree<dim, number> &data,
130 VectorType &dst,
131 const VectorType &src,
132 const std::pair<unsigned int, unsigned int> &cell_range) const;
133
134
139 void
141 [[maybe_unused]] const dealii::MatrixFree<dim, number> &data,
142 [[maybe_unused]] VectorType &dst,
143 [[maybe_unused]] const VectorType &src,
144 [[maybe_unused]] const std::pair<unsigned int, unsigned int> &cell_range) const {};
145
146 void
148 const dealii::MatrixFree<dim, number> &data,
149 VectorType &dst,
150 const VectorType &src,
151 const std::pair<unsigned int, unsigned int> &cell_range) const;
152
153 void
155 [[maybe_unused]] const dealii::MatrixFree<dim, number> &data,
156 [[maybe_unused]] VectorType &dst,
157 [[maybe_unused]] const VectorType &src,
158 [[maybe_unused]] const std::pair<unsigned int, unsigned int> &cell_range) const;
159 };
160} // namespace MeltPoolDG::LevelSet
Definition boundary_conditions.hpp:17
Definition advection_DG_operator.hpp:26
void local_apply_domain(const dealii::MatrixFree< dim, number > &data, VectorType &dst, const VectorType &src, const std::pair< unsigned int, unsigned int > &cell_range) const
Definition advection_DG_operator.cpp:64
const MeltPoolDG::ScratchData< dim, dim, number > & scratch_data_
Definition advection_DG_operator.hpp:100
void set_advection_velocity_function(const std::shared_ptr< dealii::Function< dim, number > > &advection_velocity_function_in)
Assigns a time-dependent advection velocity function.
Definition advection_DG_operator.cpp:49
dealii::VectorizedArray< number > scalar
Definition advection_DG_operator.hpp:31
void local_apply_inhomogenous_boundary_face(const dealii::MatrixFree< dim, number > &data, VectorType &dst, const VectorType &src, const std::pair< unsigned int, unsigned int > &cell_range) const
Definition advection_DG_operator.cpp:243
unsigned int velocity_dof_idx
Definition advection_DG_operator.hpp:108
const VectorType * advection_velocity_
Definition advection_DG_operator.hpp:107
const unsigned int advec_diff_dof_idx
Definition advection_DG_operator.hpp:102
std::shared_ptr< MeltPoolDG::BoundaryConditionManager< dim, number > > boundary_conditions
Definition advection_DG_operator.hpp:105
void local_apply_inner_face_dummy(const dealii::MatrixFree< dim, number > &data, VectorType &dst, const VectorType &src, const std::pair< unsigned int, unsigned int > &cell_range) const
Definition advection_DG_operator.hpp:140
void apply_operator(number time, VectorType &dst, const VectorType &src, const std::function< void(unsigned int, unsigned int)> &func={}) const
Definition advection_DG_operator.cpp:311
void apply_dirichlet_boundary_operator(const number time, VectorType &dst, const VectorType &src) const
Definition advection_DG_operator.cpp:353
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition advection_DG_operator.hpp:29
void local_apply_inner_face(const dealii::MatrixFree< dim, number > &data, VectorType &dst, const VectorType &src, const std::pair< unsigned int, unsigned int > &cell_range) const
Definition advection_DG_operator.cpp:107
const unsigned int advec_diff_quad_idx
Definition advection_DG_operator.hpp:103
void update_time_velocity_function(const number time) const
Definition advection_DG_operator.cpp:26
void local_apply_homogenous_boundary_face(const dealii::MatrixFree< dim, number > &data, VectorType &dst, const VectorType &src, const std::pair< unsigned int, unsigned int > &cell_range) const
Definition advection_DG_operator.cpp:174
void set_advection_velocity(const VectorType &advection_velocity_in, const unsigned int velocity_dof_idx_in)
Sets the discrete advection velocity vector and its DoF index.
Definition advection_DG_operator.cpp:33
std::shared_ptr< dealii::Function< dim, number > > advection_velocity_function
Definition advection_DG_operator.hpp:109
void local_apply_domain_dummy(const dealii::MatrixFree< dim, number > &data, VectorType &dst, const VectorType &src, const std::pair< unsigned int, unsigned int > &cell_range) const
Definition advection_DG_operator.hpp:122
dealii::Tensor< 1, dim, scalar > vector
Definition advection_DG_operator.hpp:32
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition advection_DG_operator.hpp:28
bool update_field_functions
Definition advection_DG_operator.hpp:96
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
This operation solves the reinitialization problem for a CG- or DG-FEM-based discrete level-set field...
Definition advection_DG_operation.hpp:20