include/meltpooldg/level_set/reinitialization_elliptic_operator.hpp Source File

Developer Documentation: include/meltpooldg/level_set/reinitialization_elliptic_operator.hpp Source File
Developer Documentation
reinitialization_elliptic_operator.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/fe/fe_dgq.h>
4#include <deal.II/fe/fe_system.h>
5
6#include <deal.II/lac/generic_linear_algebra.h>
7#include <deal.II/lac/la_parallel_block_vector.h>
8
9#include <deal.II/matrix_free/fe_evaluation.h>
10#include <deal.II/matrix_free/fe_point_evaluation.h>
11#include <deal.II/matrix_free/matrix_free.h>
12#include <deal.II/matrix_free/operators.h>
13
14#include <deal.II/non_matching/mesh_classifier.h>
15
21
22
24{
39 template <int dim, typename number>
41 {
42 using OperatorMatrixFree<dim, number>::vmult;
43 using OperatorMatrixFree<dim, number>::create_rhs;
45
46 public:
47 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
48 using VectorizedArrayType = dealii::VectorizedArray<number>;
50 using PointEvaluationType = dealii::FEPointEvaluation<1, dim, dim, VectorizedArrayType>;
51
52
67 const MeltPoolDG::ScratchData<dim, dim, number> &scratch_data_in,
68 const ReinitializationData<number> &reinit_data_in,
69 const unsigned int reinit_dof_idx_in,
70 const unsigned int reinit_quad_idx_in,
71 const MappingInfoType &mapping_info_surface_in,
72 const unsigned int ls_dof_idx_in,
73 const std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier_in);
74
75
83 void
84 vmult(VectorType &dst, const VectorType &src) const final;
85
93 void
94 create_rhs(VectorType &rhs, const VectorType &old_level_set) const final;
95
99 void
100 reinit() final;
101
109 void
110 rhs_cell_operation(FECellIntegrator<dim, 1, number> &cell_eval,
111 const FECellIntegrator<dim, 1, number> &psi_old) const;
112
123 void
124 interface_penalty_cell_operation(PointEvaluationType &interface_penalty_surface,
125 FECellIntegrator<dim, 1, number> &interface_penalty,
126 const unsigned int lane,
127 const number penalty_coefficient) const;
128
135 void
137 dealii::TrilinosWrappers::SparseMatrix &system_matrix) const final;
138
145 void
147
148
149 private:
153 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier;
154
162 template <int n_components>
164 evaluate_rhs_coefficient(const FECellIntegrator<dim, n_components, number> &psi_old,
165 const unsigned int q_index) const;
166
177 void
178 lhs_cell_operation(FECellIntegrator<dim, 1, number> &interface_penalty,
179 FECellIntegrator<dim, 1, number> &cell_eval,
180 PointEvaluationType &interface_penalty_surface,
181 const unsigned int cell_batch) const;
182
188 void
189 laplace_cell_operation(FECellIntegrator<dim, 1, number> &cell_eval) const;
190
192 const ScratchData<dim, dim, number> &scratch_data;
193
196
198 const unsigned int reinit_quad_idx;
199
202
205
207 const unsigned int n_dofs_per_cell;
208
210 const unsigned int ls_dof_idx;
211
213 dealii::AlignedVector<dealii::VectorizedArray<number>> solution_old;
214
219 };
220} // namespace MeltPoolDG::LevelSet
Operator for the matrix-free evaluation of diffusive reinitialization of the level set function.
Definition reinitialization_elliptic_operator.hpp:41
const unsigned int ls_dof_idx
DOF handler index for the level set field.
Definition reinitialization_elliptic_operator.hpp:210
void laplace_cell_operation(FECellIntegrator< dim, 1, number > &cell_eval) const
Calculate the contribution of the laplace operator of a cell to the lhs.
Definition reinitialization_elliptic_operator.cpp:84
void vmult(VectorType &dst, const VectorType &src) const final
Apply the operator in a matrix-free fashion. Top-level function for the evaluation of the left-hand s...
Definition reinitialization_elliptic_operator.cpp:50
dealii::VectorizedArray< number > VectorizedArrayType
Definition reinitialization_elliptic_operator.hpp:48
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier
Definition reinitialization_elliptic_operator.hpp:153
void interface_penalty_cell_operation(PointEvaluationType &interface_penalty_surface, FECellIntegrator< dim, 1, number > &interface_penalty, const unsigned int lane, const number penalty_coefficient) const
Calculate the contribution of a single cell surface integral to the penalty term for the weak imposit...
Definition reinitialization_elliptic_operator.cpp:146
void lhs_cell_operation(FECellIntegrator< dim, 1, number > &interface_penalty, FECellIntegrator< dim, 1, number > &cell_eval, PointEvaluationType &interface_penalty_surface, const unsigned int cell_batch) const
Calculate the contribution of a single cell integral to the left-hand side. First-level function for ...
Definition reinitialization_elliptic_operator.cpp:249
dealii::FE_Q< dim > fe_point_level_set
Temporary FE object required by FEPointEvaluation.
Definition reinitialization_elliptic_operator.hpp:204
const unsigned int reinit_quad_idx
Quadrature index for evaluating terms during reinitialization.
Definition reinitialization_elliptic_operator.hpp:198
void compute_inverse_diagonal_from_matrixfree(VectorType &diagonal) const final
Compute the inverse diagonal of the system matrix. Used by the preconditioner.
Definition reinitialization_elliptic_operator.cpp:213
dealii::FEPointEvaluation< 1, dim, dim, VectorizedArrayType > PointEvaluationType
Definition reinitialization_elliptic_operator.hpp:50
void compute_system_matrix_from_matrixfree(dealii::TrilinosWrappers::SparseMatrix &system_matrix) const final
Compute and assemble the system matrix from matrix-free operator evaluations. Used by the preconditio...
Definition reinitialization_elliptic_operator.cpp:181
const MappingInfoType & mapping_info_surface
Mapping information for integration over the interface.
Definition reinitialization_elliptic_operator.hpp:201
void rhs_cell_operation(FECellIntegrator< dim, 1, number > &cell_eval, const FECellIntegrator< dim, 1, number > &psi_old) const
Compute the contribution of a single cell integral to the right-hand side. First-level function for t...
Definition reinitialization_elliptic_operator.cpp:165
VectorType zero_interface
Definition reinitialization_elliptic_operator.hpp:218
CutUtil::MappingInfoType< dim, number > MappingInfoType
Definition reinitialization_elliptic_operator.hpp:49
const ReinitializationData< number > & reinit_data
Reference to the reinitialization parameters and coefficients.
Definition reinitialization_elliptic_operator.hpp:195
const unsigned int n_dofs_per_cell
Number of DoFs per cell of the temporary FE.
Definition reinitialization_elliptic_operator.hpp:207
dealii::AlignedVector< dealii::VectorizedArray< number > > solution_old
Solution vector from the previous iteration or time step (used in matrix-free mode).
Definition reinitialization_elliptic_operator.hpp:213
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition reinitialization_elliptic_operator.hpp:47
void create_rhs(VectorType &rhs, const VectorType &old_level_set) const final
Create the right-hand side vector using a matrix-free evaluation. Top-level function.
Definition reinitialization_elliptic_operator.cpp:98
void reinit() final
Reinitialize internal data structures, typically after mesh changes.
Definition reinitialization_elliptic_operator.cpp:37
VectorizedArrayType evaluate_rhs_coefficient(const FECellIntegrator< dim, n_components, number > &psi_old, const unsigned int q_index) const
This evaluates the coefficient for the rhs integral.
Definition reinitialization_elliptic_operator.cpp:132
const ScratchData< dim, dim, number > & scratch_data
Reference to scratch data containing mesh, geometry, and FE evaluation utilities.
Definition reinitialization_elliptic_operator.hpp:192
Operator handling matrix-free computations.
Definition operator_base.hpp:190
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
dealii::NonMatching::MappingInfo< dim, dim, dealii::VectorizedArray< number > > MappingInfoType
Definition util.hpp:53
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 dealii_tensor.hpp:10
Definition reinitialization_data.hpp:126