include/meltpooldg/level_set/curvature_operation.hpp Source File

Developer Documentation: include/meltpooldg/level_set/curvature_operation.hpp Source File
Developer Documentation
curvature_operation.hpp
Go to the documentation of this file.
1#pragma once
2// for parallelization
3#include <deal.II/lac/generic_linear_algebra.h>
4// MeltPoolDG
11
13{
14
15
16 template <int dim, typename number>
17 class CurvatureOperation : public CurvatureOperationBase<dim, number>
18 {
19 /*
20 * This function calculates the curvature of the current level set function being
21 * the solution of an intermediate projection step
22 *
23 * (w, κ) + η_κ (∇w, ∇κ) = (w,∇·n_ϕ)
24 * Ω Ω Ω
25 *
26 * with test function w, curvature κ, damping parameter η_κ and the normal to the
27 * level set function n_ϕ.
28 *
29 */
30 private:
31 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
32 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
33 using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix;
34
35 public:
38 const NormalVectorData<number> &normal_vec_data,
40 const unsigned int curv_dof_idx_in,
41 const unsigned int curv_quad_idx_in,
42 const std::array<unsigned int, dim> &normal_dof_indices_per_block_in,
43 const unsigned int normal_no_bc_dof_idx_in,
44 const unsigned int ls_dof_idx_in);
45
46 void
47 solve() override;
48
49 void
50 update_normal_vector() override;
51
52 const dealii::LinearAlgebra::distributed::Vector<number> &
53 get_curvature() const override;
54
55 dealii::LinearAlgebra::distributed::Vector<number> &
56 get_curvature() override;
57
58 const dealii::LinearAlgebra::distributed::BlockVector<number> &
59 get_normal_vector() const override;
60
61 dealii::LinearAlgebra::distributed::BlockVector<number> &
62 get_normal_vector() override;
63
64 void
65 reinit() override;
66
67 void
69 std::vector<dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) final;
70
71 private:
72 void
74
76
78
80 /*
81 * Based on the following indices the correct DoFHandler or quadrature rule from
82 * ScratchData<dim,dim,number> object is selected. This is important when
83 * ScratchData<dim,dim,number> holds multiple DoFHandlers, quadrature rules, etc.
84 */
85 const unsigned int curv_dof_idx;
86 const unsigned int curv_quad_idx;
87 const unsigned int normal_dof_idx;
88 const unsigned int ls_dof_idx;
89
91
93
94 std::unique_ptr<Predictor<VectorType, number>> predictor;
95
96 /*
97 * This pointer will point to your user-defined curvature operator.
98 */
99 std::shared_ptr<CurvatureOperator<dim, number>> curvature_operator;
100 /*
101 * This is the primary solution variable of this module, which will be also publically
102 * accessible for output_results.
103 */
106 /*
107 * Preconditioner for the matrix-free curvature operator
108 */
110 };
111} // namespace MeltPoolDG::LevelSet
Definition curvature_operation_base.hpp:8
Definition curvature_operation.hpp:18
const ScratchData< dim, dim, number > & scratch_data
Definition curvature_operation.hpp:75
void create_operator(const VectorType &solution_level_set)
Definition curvature_operation.cpp:224
const dealii::LinearAlgebra::distributed::Vector< number > & get_curvature() const override
Definition curvature_operation.cpp:155
void reinit() override
Definition curvature_operation.cpp:183
dealii::TrilinosWrappers::SparseMatrix SparseMatrixType
Definition curvature_operation.hpp:33
void solve() override
Definition curvature_operation.cpp:56
std::shared_ptr< CurvatureOperator< dim, number > > curvature_operator
Definition curvature_operation.hpp:99
Preconditioner< dim, VectorType, number > preconditioner
Definition curvature_operation.hpp:109
void update_normal_vector() override
Definition curvature_operation.cpp:46
const dealii::LinearAlgebra::distributed::BlockVector< number > & get_normal_vector() const override
Definition curvature_operation.cpp:169
const unsigned int curv_quad_idx
Definition curvature_operation.hpp:86
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition curvature_operation.hpp:32
const CurvatureData< number > curvature_data
Definition curvature_operation.hpp:77
std::unique_ptr< Predictor< VectorType, number > > predictor
Definition curvature_operation.hpp:94
TimeIntegration::SolutionHistory< VectorType > solution_history
Definition curvature_operation.hpp:92
VectorType rhs
Definition curvature_operation.hpp:105
void attach_vectors(std::vector< dealii::LinearAlgebra::distributed::Vector< number > * > &vectors) final
Definition curvature_operation.cpp:214
const unsigned int normal_dof_idx
Definition curvature_operation.hpp:87
const unsigned int ls_dof_idx
Definition curvature_operation.hpp:88
const VectorType & solution_level_set
Definition curvature_operation.hpp:79
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition curvature_operation.hpp:31
const unsigned int curv_dof_idx
Definition curvature_operation.hpp:85
VectorType solution_curvature_predictor
Definition curvature_operation.hpp:104
LevelSet::NormalVectorOperation< dim, number > normal_vector_operation
Definition curvature_operation.hpp:90
Definition normal_vector_operation.hpp:38
Definition preconditioner.hpp:42
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
Definition solution_history.hpp:21
This operation solves the reinitialization problem for a CG- or DG-FEM-based discrete level-set field...
Definition advection_DG_operation.hpp:20
Definition curvature_data.hpp:15
Definition normal_vector_data.hpp:15