include/meltpooldg/level_set/curvature_operation_adaflo_wrapper.hpp Source File

Developer Documentation: include/meltpooldg/level_set/curvature_operation_adaflo_wrapper.hpp Source File
Developer Documentation
curvature_operation_adaflo_wrapper.hpp
Go to the documentation of this file.
1#pragma once
2
3#ifdef MPDG_ENABLE_ADAFLO
4
5// for parallelization
6# include <deal.II/lac/generic_linear_algebra.h>
7
8// MeltPoolDG
13
14# include <adaflo/level_set_okz_compute_curvature.h>
15
17{
18
19
20 template <int dim, typename number>
21 class CurvatureOperationAdaflo : public CurvatureOperationBase<dim, number>
22 {
23 private:
24 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
25 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
26 using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix;
27
28 public:
32 CurvatureOperationAdaflo(const ScratchData<dim, dim, number> &scratch_data,
33 const int advec_diff_dof_idx,
34 const int normal_vec_dof_idx,
35 const int curv_dof_idx,
36 const int curv_quad_idx,
37 const VectorType &advected_field,
38 const LevelSetData<number> &data_in);
39
40 void
41 reinit() override;
42
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 attach_vectors(
66 std::vector<dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) override;
67
68 private:
69 void
70 create_operator();
71
72 void
73 create_normal_vector_operator();
74
75 void
76 set_adaflo_parameters(const LevelSetData<number> &parameters,
77 int advec_diff_dof_idx,
78 int curv_dof_idx,
79 int curv_quad_idx);
80
81 void
82 initialize_vectors();
83
84 const ScratchData<dim, dim, number> &scratch_data;
85 const VectorType &advected_field;
89 BlockVectorType normal_vec_dummy;
90 VectorType curvature_field;
91 VectorType rhs;
95 adaflo::LevelSetOKZSolverComputeCurvatureParameter curv_adaflo_params;
99 std::shared_ptr<adaflo::LevelSetOKZSolverComputeCurvature<dim>> curvature_operation;
100 std::shared_ptr<LevelSet::NormalVectorOperationAdaflo<dim, number>>
101 normal_vector_operation_adaflo;
102
106 adaflo::DiagonalPreconditioner<number> preconditioner;
110 std::shared_ptr<adaflo::BlockMatrixExtension> projection_matrix;
111 std::shared_ptr<adaflo::BlockILUExtension> ilu_projection_matrix;
115 dealii::AlignedVector<dealii::VectorizedArray<number>> cell_diameters;
116 number cell_diameter_min;
117 number cell_diameter_max;
118 number epsilon_used;
119 unsigned int verbosity_level;
120
121 const NormalVectorData<number> &normal_vector_data;
122 };
123} // namespace MeltPoolDG::LevelSet
124
125#endif
This operation solves the reinitialization problem for a CG- or DG-FEM-based discrete level-set field...
Definition advection_DG_operation.hpp:20
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition utilities_matrixfree.hpp:17
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition utilities_matrixfree.hpp:15