include/meltpooldg/linear_algebra/preconditioner_jacobi.hpp Source File

Developer Documentation: include/meltpooldg/linear_algebra/preconditioner_jacobi.hpp Source File
Developer Documentation
preconditioner_jacobi.hpp
Go to the documentation of this file.
1
5#pragma once
6
8
9#include <any>
10
11namespace MeltPoolDG
12{
16 template <typename OperatorType, typename VectorType>
17 concept JacobiPreconditionerOperatorType = requires(const OperatorType op, VectorType &diag) {
21 op.compute_inverse_diagonal_from_matrixfree(diag);
22 };
23
24
25 template <int dim,
26 typename number,
27 typename VectorType,
30 {
31 public:
37 explicit JacobiPreconditioner(const OperatorType &operator_in,
38 const ScratchData<dim, dim, number> &scratch_data_in,
39 const unsigned dof_idx_in)
40 : eq_operator(operator_in)
41 , scratch_data(scratch_data_in)
42 , dof_idx(dof_idx_in)
43 {}
44
51 void
52 vmult(VectorType &dst, const VectorType &src) const
53 {
54 dst = src;
55 dst.scale(inverse_diag);
56 }
57
65 void
66 update(const std::any & = std::any())
67 {
68 eq_operator.compute_inverse_diagonal_from_matrixfree(inverse_diag);
69 }
70
74 void
79
80 private:
82 VectorType inverse_diag;
83
84 const OperatorType &eq_operator;
85
87
88 const unsigned int dof_idx;
89 };
90} // namespace MeltPoolDG
Definition preconditioner_jacobi.hpp:30
JacobiPreconditioner(const OperatorType &operator_in, const ScratchData< dim, dim, number > &scratch_data_in, const unsigned dof_idx_in)
Definition preconditioner_jacobi.hpp:37
const ScratchData< dim, dim, number > & scratch_data
Definition preconditioner_jacobi.hpp:86
void reinit()
Definition preconditioner_jacobi.hpp:75
const unsigned int dof_idx
Definition preconditioner_jacobi.hpp:88
void vmult(VectorType &dst, const VectorType &src) const
Definition preconditioner_jacobi.hpp:52
VectorType inverse_diag
Inverse values of the system matrix diagonal.
Definition preconditioner_jacobi.hpp:82
void update(const std::any &=std::any())
Definition preconditioner_jacobi.hpp:66
const OperatorType & eq_operator
Definition preconditioner_jacobi.hpp:84
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
void initialize_dof_vector(VectorType &vec, const unsigned int dof_idx) const
Initialize a distributed vector for a given DoF index.
Definition scratch_data.cpp:272
Definition preconditioner_jacobi.hpp:17
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17