include/meltpooldg/level_set/curvature_operator.hpp Source File

Developer Documentation: include/meltpooldg/level_set/curvature_operator.hpp Source File
Developer Documentation
curvature_operator.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/aligned_vector.h>
4#include <deal.II/base/tensor.h>
5#include <deal.II/base/vectorization.h>
6
7#include <deal.II/lac/la_parallel_block_vector.h>
8#include <deal.II/lac/la_parallel_vector.h>
9#include <deal.II/lac/trilinos_sparse_matrix.h>
10
15
17{
29 template <int dim, typename number>
30 class CurvatureOperator : public OperatorMatrixFree<dim, number>,
31 public OperatorMatrixBased<dim, number>
32 {
33 //@todo: to avoid compiler warnings regarding hidden overriden functions
35 using OperatorMatrixFree<dim, number>::vmult;
36 using OperatorMatrixFree<dim, number>::create_rhs;
38
39 private:
40 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
41 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
42 using VectorizedArrayType = dealii::VectorizedArray<number>;
43 using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix;
44 using vector = dealii::Tensor<1, dim, dealii::VectorizedArray<number>>;
45 using scalar = dealii::VectorizedArray<number>;
46
48
50
51 const unsigned int curv_dof_idx;
52 const unsigned int curv_quad_idx;
53 const unsigned int normal_dof_idx;
55
56 const unsigned int ls_dof_idx;
57
58 // optional parameters for narrow band
60
61 dealii::AlignedVector<dealii::VectorizedArray<number>> damping;
62
63 public:
66 const unsigned int curv_dof_idx_in,
67 const unsigned int curv_quad_idx_in,
68 const unsigned int normal_dof_idx_in,
69 const unsigned int ls_dof_idx_in,
70 const VectorType *solution_level_set_in = nullptr);
71
72 void
73 compute_system_matrix_and_rhs(const BlockVectorType &solution_normal_vector_in,
74 VectorType &rhs) const final;
75
76 /*
77 * matrix-free utility
78 */
79
80 void
81 vmult(VectorType &dst, const VectorType &src) const final;
82
83 void
84 create_rhs(VectorType &dst, const BlockVectorType &src) const final;
85
86 void
88 dealii::TrilinosWrappers::SparseMatrix &system_matrix) const final;
89
90 void
92
93 void
94 reinit() final;
95
96 private:
97 void
98 tangent_local_cell_operation(FECellIntegrator<dim, 1, number> &curv_vals,
99 FECellIntegrator<dim, 1, number> &level_set_vals,
100 const bool do_reinit_cells) const;
101 };
102} // namespace MeltPoolDG::LevelSet
Definition curvature_operator.hpp:32
dealii::TrilinosWrappers::SparseMatrix SparseMatrixType
Definition curvature_operator.hpp:43
const unsigned int normal_dof_idx
Definition curvature_operator.hpp:53
void create_rhs(VectorType &dst, const BlockVectorType &src) const final
Compute the right-hand side vector for block vectors src.
Definition curvature_operator.cpp:188
void compute_inverse_diagonal_from_matrixfree(VectorType &diagonal) const final
Compute the inverse diagonal using matrix-free techniques.
Definition curvature_operator.cpp:297
const number tolerance_normal_vector
Definition curvature_operator.hpp:54
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition curvature_operator.hpp:40
dealii::AlignedVector< dealii::VectorizedArray< number > > damping
Definition curvature_operator.hpp:61
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition curvature_operator.hpp:41
void vmult(VectorType &dst, const VectorType &src) const final
Definition curvature_operator.cpp:163
const unsigned int curv_dof_idx
Definition curvature_operator.hpp:51
void reinit() final
Reinitialize data structures. Can be overridden by derived classes.
Definition curvature_operator.cpp:373
dealii::VectorizedArray< number > VectorizedArrayType
Definition curvature_operator.hpp:42
void compute_system_matrix_from_matrixfree(dealii::TrilinosWrappers::SparseMatrix &system_matrix) const final
Compute a sparse matrix using matrix-free techniques.
Definition curvature_operator.cpp:260
const unsigned int curv_quad_idx
Definition curvature_operator.hpp:52
void tangent_local_cell_operation(FECellIntegrator< dim, 1, number > &curv_vals, FECellIntegrator< dim, 1, number > &level_set_vals, const bool do_reinit_cells) const
Definition curvature_operator.cpp:337
const unsigned int ls_dof_idx
Definition curvature_operator.hpp:56
dealii::Tensor< 1, dim, dealii::VectorizedArray< number > > vector
Definition curvature_operator.hpp:44
const VectorType * solution_level_set
Definition curvature_operator.hpp:59
const ScratchData< dim, dim, number > & scratch_data
Definition curvature_operator.hpp:47
const CurvatureData< number > & curvature_data
Definition curvature_operator.hpp:49
void compute_system_matrix_and_rhs(const BlockVectorType &solution_normal_vector_in, VectorType &rhs) const final
Compute the system matrix and right-hand side vector for block vectors.
Definition curvature_operator.cpp:43
dealii::VectorizedArray< number > scalar
Definition curvature_operator.hpp:45
Operator handling matrix-based computations.
Definition operator_base.hpp:94
SparseMatrixType system_matrix
Definition operator_base.hpp:176
Operator handling matrix-free computations.
Definition operator_base.hpp:190
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
dealii::FEEvaluation< dim, -1, 0, n_components, number, VectorizedArrayType > FECellIntegrator
Definition fe_integrator.hpp:14
Definition curvature_data.hpp:15