include/meltpooldg/utilities/vector_tools.hpp Source File

Developer Documentation: include/meltpooldg/utilities/vector_tools.hpp Source File
Developer Documentation
vector_tools.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/function.h>
4#include <deal.II/base/mpi.h>
5#include <deal.II/base/point.h>
6#include <deal.II/base/quadrature.h>
7#include <deal.II/base/tensor.h>
8#include <deal.II/base/vectorization.h>
9
10#include <deal.II/dofs/dof_handler.h>
11
12#include <deal.II/fe/mapping.h>
13
14#include <deal.II/grid/tria.h>
15
16#include <deal.II/lac/affine_constraints.h>
17#include <deal.II/lac/la_parallel_block_vector.h>
18#include <deal.II/lac/la_parallel_vector.h>
19
20#include <deal.II/matrix_free/matrix_free.h>
21
22#include <deal.II/numerics/vector_tools_common.h>
23
26
27
29{
30 template <int dim, int spacedim, typename number>
31 void
33 const dealii::LinearAlgebra::distributed::Vector<number> &in,
34 const dealii::DoFHandler<dim, spacedim> &dof_handler_fe_system,
35 dealii::LinearAlgebra::distributed::BlockVector<number> &out,
36 const dealii::DoFHandler<dim, spacedim> &dof_handler);
37
38 template <int dim, int n_components, typename number>
39 void
40 project_function_to_grid_points(dealii::LinearAlgebra::distributed::Vector<number> &out,
41 const dealii::Function<dim> &function,
42 const dealii::MatrixFree<dim, number> &matrix_free,
43 const unsigned int dof_idx = 0,
44 const unsigned int quad_idx = 0);
45
46 template <int dim, int spacedim, typename number>
47 void
49 const dealii::LinearAlgebra::distributed::BlockVector<number> &in,
50 const dealii::DoFHandler<dim, spacedim> &dof_handler,
51 dealii::LinearAlgebra::distributed::Vector<number> &out,
52 const dealii::DoFHandler<dim, spacedim> &dof_handler_fe_system);
53
72 template <int dim, typename number, int n_components = dim>
73 dealii::Vector<number>
75 const MatrixFreeContext<dim, number> &mf_context,
76 const dealii::AlignedVector<dealii::VectorizedArray<number>> &cell_aligned_vector,
77 const dealii::Triangulation<dim> &tria)
78 {
79 dealii::Vector<number> vec_out(tria.n_active_cells());
80 for (unsigned cell_batch = 0; cell_batch < mf_context.mf.n_cell_batches(); ++cell_batch)
81 {
83 mf_context.dof_idx,
84 mf_context.quad_idx);
85 phi.reinit(cell_batch);
86 const dealii::VectorizedArray<number> cell_batch_indicator =
87 phi.read_cell_data(cell_aligned_vector);
88
89 for (unsigned lane = 0; lane < mf_context.mf.n_active_entries_per_cell_batch(cell_batch);
90 ++lane)
91 {
92 const auto cell = mf_context.mf.get_cell_iterator(cell_batch, lane);
93 vec_out(cell->active_cell_index()) = cell_batch_indicator[lane];
94 }
95 }
96 return vec_out;
97 }
98
99 template <typename... T>
100 void
101 update_ghost_values(const T &...args)
102 {
103 ((args.update_ghost_values()), ...);
104 }
105
106 template <typename... T>
107 void
108 zero_out_ghost_values(const T &...args)
109 {
110 ((args.zero_out_ghost_values()), ...);
111 }
112
113 template <int dim, typename number>
114 dealii::Tensor<1, dim, number>
115 to_vector(const dealii::Tensor<1, dim, number> &in)
116 {
117 return in;
118 }
119
120 template <int dim, typename number>
121 dealii::Tensor<1, dim, number>
122 to_vector(const number &in)
123 {
124 dealii::Tensor<1, dim, number> vec;
125
126 vec[0] = in;
127
128 return vec;
129 }
130
131 template <int dim, typename number, int n_components = dim>
132 dealii::Tensor<1, n_components, dealii::VectorizedArray<number>>
134 const dealii::Function<dim> &func,
135 const dealii::Point<dim, dealii::VectorizedArray<number>> &points);
136
137 template <int dim, typename number>
138 dealii::VectorizedArray<number>
140 const dealii::Function<dim> &function,
141 const dealii::Point<dim, dealii::VectorizedArray<number>> &p_vectorized,
142 const unsigned int component);
143
144 template <int dim, typename number, typename VectorType>
145 number
146 compute_global_error_norm(const VectorType &solution,
147 const dealii::Triangulation<dim> &triangulation,
148 const dealii::Mapping<dim> &mapping,
149 const dealii::DoFHandler<dim> &dof_handler,
150 const dealii::Quadrature<dim> &quadrature,
151 const dealii::VectorTools::NormType norm_type,
152 const dealii::Function<dim, number> &reference_solution,
153 const dealii::Function<dim, number> *weight = nullptr);
154
155 template <int dim, typename number, typename VectorType>
156 number
157 compute_norm(const VectorType &solution,
158 const dealii::Triangulation<dim> &triangulation,
159 const dealii::Mapping<dim> &mapping,
160 const dealii::DoFHandler<dim> &dof_handler,
161 const dealii::Quadrature<dim> &quadrature,
162 const dealii::VectorTools::NormType norm_type);
163
164 template <int dim, typename number, typename VectorType>
165 number
166 compute_norm(const VectorType &solution,
167 const ScratchData<dim, dim, number> &scratch_data,
168 const unsigned int dof_idx,
169 const unsigned int quad_idx,
170 const dealii::VectorTools::NormType norm_type = dealii::VectorTools::L2_norm);
171
172 template <int n_components, int dim, typename VectorType>
173 void
174 project_vector(const dealii::Mapping<dim> &mapping,
175 const dealii::DoFHandler<dim> &dof,
176 const dealii::AffineConstraints<typename VectorType::value_type> &constraints,
177 const dealii::Quadrature<dim> &quadrature,
178 const VectorType &vec_in,
179 VectorType &vec_out);
180
186 template <int dim, int n_components, typename T, typename VectorType, typename number>
187 void
189 VectorType &vec,
190 const dealii::MatrixFree<dim, number, dealii::VectorizedArray<number>> &matrix_free,
191 unsigned int dof_idx,
192 unsigned int quad_idx,
193 const T &cell_operation);
194
198 template <typename number>
199 number
200 max_element(const dealii::LinearAlgebra::distributed::Vector<number> &vec,
201 const MPI_Comm &mpi_comm);
202
206 template <typename number>
207 number
208 min_element(const dealii::LinearAlgebra::distributed::Vector<number> &vec,
209 const MPI_Comm &mpi_comm);
210
211} // namespace MeltPoolDG::VectorTools
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
Definition vector_tools.hpp:29
void project_function_to_grid_points(dealii::LinearAlgebra::distributed::Vector< number > &out, const dealii::Function< dim > &function, const dealii::MatrixFree< dim, number > &matrix_free, const unsigned int dof_idx=0, const unsigned int quad_idx=0)
Definition vector_tools.cpp:68
void zero_out_ghost_values(const T &...args)
Definition vector_tools.hpp:108
number compute_global_error_norm(const VectorType &solution, const dealii::Triangulation< dim > &triangulation, const dealii::Mapping< dim > &mapping, const dealii::DoFHandler< dim > &dof_handler, const dealii::Quadrature< dim > &quadrature, const dealii::VectorTools::NormType norm_type, const dealii::Function< dim, number > &reference_solution, const dealii::Function< dim, number > *weight=nullptr)
Definition vector_tools.cpp:137
void update_ghost_values(const T &...args)
Definition vector_tools.hpp:101
void convert_fe_system_vector_to_block_vector(const dealii::LinearAlgebra::distributed::Vector< number > &in, const dealii::DoFHandler< dim, spacedim > &dof_handler_fe_system, dealii::LinearAlgebra::distributed::BlockVector< number > &out, const dealii::DoFHandler< dim, spacedim > &dof_handler)
Definition vector_tools.cpp:25
number min_element(const dealii::LinearAlgebra::distributed::Vector< number > &vec, const MPI_Comm &mpi_comm)
Definition vector_tools.cpp:217
void convert_block_vector_to_fe_system_vector(const dealii::LinearAlgebra::distributed::BlockVector< number > &in, const dealii::DoFHandler< dim, spacedim > &dof_handler, dealii::LinearAlgebra::distributed::Vector< number > &out, const dealii::DoFHandler< dim, spacedim > &dof_handler_fe_system)
Definition vector_tools.cpp:94
dealii::Tensor< 1, n_components, dealii::VectorizedArray< number > > evaluate_function_at_vectorized_points(const dealii::Function< dim > &func, const dealii::Point< dim, dealii::VectorizedArray< number > > &points)
Definition vector_tools.templates.hpp:39
number max_element(const dealii::LinearAlgebra::distributed::Vector< number > &vec, const MPI_Comm &mpi_comm)
Definition vector_tools.cpp:205
void project_vector(const dealii::Mapping< dim > &mapping, const dealii::DoFHandler< dim > &dof, const dealii::AffineConstraints< typename VectorType::value_type > &constraints, const dealii::Quadrature< dim > &quadrature, const VectorType &vec_in, VectorType &vec_out)
Definition vector_tools.templates.hpp:146
void fill_dof_vector_from_cell_operation(VectorType &vec, const dealii::MatrixFree< dim, number, dealii::VectorizedArray< number > > &matrix_free, unsigned int dof_idx, unsigned int quad_idx, const T &cell_operation)
Definition vector_tools.templates.hpp:62
number compute_norm(const VectorType &solution, const dealii::Triangulation< dim > &triangulation, const dealii::Mapping< dim > &mapping, const dealii::DoFHandler< dim > &dof_handler, const dealii::Quadrature< dim > &quadrature, const dealii::VectorTools::NormType norm_type)
Definition vector_tools.cpp:170
dealii::Vector< number > convert_matrix_free_cell_aligned_vector_to_vector(const MatrixFreeContext< dim, number > &mf_context, const dealii::AlignedVector< dealii::VectorizedArray< number > > &cell_aligned_vector, const dealii::Triangulation< dim > &tria)
Definition vector_tools.hpp:74
dealii::Tensor< 1, dim, number > to_vector(const dealii::Tensor< 1, dim, number > &in)
Definition vector_tools.hpp:115
dealii::FEEvaluation< dim, -1, 0, n_components, number, VectorizedArrayType > FECellIntegrator
Definition fe_integrator.hpp:14
Definition matrix_free_util.hpp:21
unsigned int quad_idx
Definition matrix_free_util.hpp:24
const dealii::MatrixFree< dim, Number > & mf
Definition matrix_free_util.hpp:22
unsigned int dof_idx
Definition matrix_free_util.hpp:23