include/meltpooldg/level_set/olsson_CG_operator.hpp Source File

Developer Documentation: include/meltpooldg/level_set/olsson_CG_operator.hpp Source File
Developer Documentation
olsson_CG_operator.hpp
Go to the documentation of this file.
1#pragma once
2#include <deal.II/lac/generic_linear_algebra.h>
3#include <deal.II/lac/la_parallel_block_vector.h>
4
5#include <deal.II/matrix_free/fe_evaluation.h>
6#include <deal.II/matrix_free/matrix_free.h>
7// MeltPoolDG
14
16{
42 template <int dim, typename number>
43 class OlssonOperator : public OperatorMatrixBased<dim, number>,
44 public OperatorMatrixFree<dim, number>
45 {
46 //@todo: to avoid compiler warnings regarding hidden overriden functions
48 using OperatorMatrixFree<dim, number>::vmult;
49 using OperatorMatrixFree<dim, number>::create_rhs;
51
52 public:
54 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
55
57 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
58
60 using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix;
61
63 using VectorizedArrayType = dealii::VectorizedArray<number>;
64
66 using vector = dealii::Tensor<1, dim, VectorizedArrayType>;
67
70
83 OlssonOperator(const ScratchData<dim, dim, number> &scratch_data_in,
84 const ReinitializationData<number> &reinit_data_in,
85 const int ls_n_subdivisions,
86 const BlockVectorType &n_in,
87 const unsigned int reinit_dof_idx_in,
88 const unsigned int reinit_quad_idx_in,
89 const unsigned int ls_dof_idx_in,
90 const unsigned int normal_dof_idx_in);
91
98 void
99 compute_system_matrix_and_rhs(const VectorType &old_level_set, VectorType &rhs) const final;
100
107 void
108 vmult(VectorType &dst, const VectorType &src) const final;
109
116 void
117 create_rhs(VectorType &rhs, const VectorType &old_level_set) const final;
118
124 void
126 dealii::TrilinosWrappers::SparseMatrix &system_matrix) const final;
127
133 void
135
139 void
140 reinit() final;
146 void
148
149 private:
155 void
156 tangent_cell_operation(FECellIntegrator<dim, 1, number> &delta_psi) const;
157
164 void
165 tangent_boundary_face_operation(FEFaceIntegrator<dim, 1, number> &face_eval,
166 FEFaceIntegrator<dim, dim, number> &normal_face_eval) const;
173 void
174 rhs_boundary_face_operation(FEFaceIntegrator<dim, 1, number> &face_eval,
175 FEFaceIntegrator<dim, dim, number> &normal_face_eval) const;
176
185 void
186 tangent_boundary_loop(const dealii::MatrixFree<dim, number> &matrix_free,
187 VectorType &dst,
188 const VectorType &src,
189 std::pair<unsigned int, unsigned int> face_range) const;
198 void
199 rhs_boundary_loop(const dealii::MatrixFree<dim, number> &matrix_free,
200 VectorType &dst,
201 const VectorType &src,
202 std::pair<unsigned int, unsigned int> face_range) const;
203
204 private:
206 const ScratchData<dim, dim, number> &scratch_data;
207
210
212 const number ls_n_subdivisions;
213
216
218 const unsigned int reinit_quad_idx;
219
221 const unsigned int normal_dof_idx;
222
224 const unsigned int ls_dof_idx;
225
227 std::vector<dealii::types::boundary_id> wetting_bc_ids;
228
231
234
236 dealii::AlignedVector<dealii::VectorizedArray<number>> normal_diffusion_length;
237
239 dealii::AlignedVector<dealii::VectorizedArray<number>> tangential_diffusion_length;
240
243 mutable dealii::AlignedVector<dealii::VectorizedArray<number>> solution_old;
244
247 mutable dealii::AlignedVector<dealii::Tensor<1, dim, dealii::VectorizedArray<number>>>
249 };
250} // namespace MeltPoolDG::LevelSet
Operator for the Olsson reinitialization method used in level set methods.
Definition olsson_CG_operator.hpp:45
void tangent_boundary_loop(const dealii::MatrixFree< dim, number > &matrix_free, VectorType &dst, const VectorType &src, std::pair< unsigned int, unsigned int > face_range) const
Loop over boundary faces to compute tangent (left-hand side) contributions in matrix-free mode.
Definition olsson_CG_operator.cpp:425
void tangent_boundary_face_operation(FEFaceIntegrator< dim, 1, number > &face_eval, FEFaceIntegrator< dim, dim, number > &normal_face_eval) const
Compute the contribution of a single boundary face integral to the tangent.
Definition olsson_CG_operator.cpp:500
dealii::TrilinosWrappers::SparseMatrix SparseMatrixType
Sparse matrix type used for assembling and storing the system matrix.
Definition olsson_CG_operator.hpp:60
const unsigned int normal_dof_idx
DOF handler index for the normal vector field.
Definition olsson_CG_operator.hpp:221
void rhs_boundary_loop(const dealii::MatrixFree< dim, number > &matrix_free, VectorType &dst, const VectorType &src, std::pair< unsigned int, unsigned int > face_range) const
Loop over boundary faces to compute right-hand side contributions in matrix-free mode.
Definition olsson_CG_operator.cpp:463
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Distributed block vector type used for storing the interface normal field.
Definition olsson_CG_operator.hpp:57
void rhs_boundary_face_operation(FEFaceIntegrator< dim, 1, number > &face_eval, FEFaceIntegrator< dim, dim, number > &normal_face_eval) const
Compute the contribution of a single boundary face integral to the right-hand side.
Definition olsson_CG_operator.cpp:545
dealii::AlignedVector< dealii::Tensor< 1, dim, dealii::VectorizedArray< number > > > unit_normal
Definition olsson_CG_operator.hpp:248
const unsigned int ls_dof_idx
DOF handler index for the level set field.
Definition olsson_CG_operator.hpp:224
void tangent_cell_operation(FECellIntegrator< dim, 1, number > &delta_psi) const
Compute the contribution of a single cell integral to the tangent.
Definition olsson_CG_operator.cpp:394
dealii::Tensor< 1, dim, VectorizedArrayType > vector
Vector type with SIMD-enabled entries in dim dimensions.
Definition olsson_CG_operator.hpp:66
dealii::AlignedVector< dealii::VectorizedArray< number > > tangential_diffusion_length
Precomputed diffusive length scale in the tangential direction at each quadrature point.
Definition olsson_CG_operator.hpp:239
void compute_inverse_diagonal_from_matrixfree(VectorType &diagonal) const final
Compute an approximation of the inverse diagonal of the system matrix.
Definition olsson_CG_operator.cpp:321
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Distributed vector type used for matrix-free and matrix-based computations.
Definition olsson_CG_operator.hpp:54
VectorizedArrayType scalar
Scalar type with SIMD-enabled entries.
Definition olsson_CG_operator.hpp:69
const BlockVectorType & normal_vec
Reference to the vector field representing the interface normals.
Definition olsson_CG_operator.hpp:215
dealii::VectorizedArray< number > VectorizedArrayType
Vectorized scalar type used in SIMD computations.
Definition olsson_CG_operator.hpp:63
std::vector< dealii::types::boundary_id > wetting_bc_ids
List of boundary IDs where wetting boundary conditions are applied.
Definition olsson_CG_operator.hpp:227
void compute_system_matrix_and_rhs(const VectorType &old_level_set, VectorType &rhs) const final
Assemble the system matrix and right-hand side using a matrix-based approach.
Definition olsson_CG_operator.cpp:65
void set_wetting_boundary_condition_ids(std::vector< dealii::types::boundary_id > &&wetting_bc_ids)
Specify the boundary IDs where wetting boundary conditions should be applied.
Definition olsson_CG_operator.cpp:56
void vmult(VectorType &dst, const VectorType &src) const final
Apply the operator in a matrix-free fashion.
Definition olsson_CG_operator.cpp:154
void reinit() final
Reinitialize internal data structures, typically after mesh changes.
Definition olsson_CG_operator.cpp:593
const number ls_n_subdivisions
Number of subdivisions used to define the interface thickness parameter.
Definition olsson_CG_operator.hpp:212
dealii::AlignedVector< dealii::VectorizedArray< number > > normal_diffusion_length
Precomputed diffusive length scale in the normal direction at each quadrature point.
Definition olsson_CG_operator.hpp:236
const ReinitializationData< number > & reinit_data
Reference to the reinitialization parameters and coefficients.
Definition olsson_CG_operator.hpp:209
const ScratchData< dim, dim, number > & scratch_data
Reference to scratch data containing mesh, geometry, and FE evaluation utilities.
Definition olsson_CG_operator.hpp:206
const number tolerance_normal_vector
Tolerance threshold used for validating or correcting normal vectors.
Definition olsson_CG_operator.hpp:233
void create_rhs(VectorType &rhs, const VectorType &old_level_set) const final
Create the right-hand side vector using a matrix-free evaluation.
Definition olsson_CG_operator.cpp:184
bool enable_boundary_face_integral
Flag to enable or disable boundary face integral contributions.
Definition olsson_CG_operator.hpp:230
dealii::AlignedVector< dealii::VectorizedArray< number > > solution_old
Definition olsson_CG_operator.hpp:243
const unsigned int reinit_quad_idx
Quadrature index for evaluating terms during reinitialization.
Definition olsson_CG_operator.hpp:218
void compute_system_matrix_from_matrixfree(dealii::TrilinosWrappers::SparseMatrix &system_matrix) const final
Compute and assemble the system matrix from matrix-free operator evaluations.
Definition olsson_CG_operator.cpp:252
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::FEFaceEvaluation< dim, -1, 0, n_components, number, VectorizedArrayType > FEFaceIntegrator
Definition fe_integrator.hpp:22
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