include/meltpooldg/level_set/normal_vector_operation_adaflo_wrapper.hpp Source File

Developer Documentation: include/meltpooldg/level_set/normal_vector_operation_adaflo_wrapper.hpp Source File
Developer Documentation
normal_vector_operation_adaflo_wrapper.hpp
Go to the documentation of this file.
1#pragma once
2
3#ifdef MPDG_ENABLE_ADAFLO
4
5# include <deal.II/base/aligned_vector.h>
6# include <deal.II/base/vectorization.h>
7
8# include <deal.II/lac/la_parallel_block_vector.h>
9# include <deal.II/lac/la_parallel_vector.h>
10# include <deal.II/lac/trilinos_sparse_matrix.h>
11
15
16# include <adaflo/block_matrix_extension.h>
17# include <adaflo/diagonal_preconditioner.h>
18# include <adaflo/level_set_okz_compute_normal.h>
19
20# include <memory>
21# include <vector>
22
23
25{
26 template <int dim, typename number>
27 class NormalVectorOperationAdaflo : public NormalVectorOperationBase<dim, number>
28 {
29 private:
30 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
31 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
32 using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix;
33
34 public:
38 NormalVectorOperationAdaflo(const ScratchData<dim, dim, number> &scratch_data,
39 const NormalVectorData<number> &normal_vec_data_in,
40 const int advec_diff_dof_idx,
41 const int normal_vec_dof_idx,
42 const int normal_vec_quad_idx,
43 const VectorType &advected_field_in,
44 const number reinit_scale_factor_epsilon);
45
46 void
47 reinit() override;
48
52 void
53 solve() override;
54
58 const dealii::LinearAlgebra::distributed::BlockVector<number> &
59 get_solution_normal_vector() const override;
60
61 dealii::LinearAlgebra::distributed::BlockVector<number> &
62 get_solution_normal_vector() override;
63
64 adaflo::LevelSetOKZSolverComputeNormal<dim> &
65 get_adaflo_obj();
66
67 void
68 attach_vectors(
69 std::vector<dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) override;
70
71 private:
72 void
73 set_adaflo_parameters(const number epsilon,
74 const int advec_diff_dof_idx,
75 const int normal_vec_dof_idx,
76 const int normal_vec_quad_idx);
77
78 void
79 initialize_vectors();
80
81 private:
82 void
83 create_operator();
84
85 const ScratchData<dim, dim, number> &scratch_data;
86
87 const VectorType &advected_field;
88
92 BlockVectorType normal_vector_field;
97 adaflo::LevelSetOKZSolverComputeNormalParameter normal_vec_adaflo_params;
101 std::shared_ptr<adaflo::LevelSetOKZSolverComputeNormal<dim>> normal_vec_operation;
102
106 adaflo::DiagonalPreconditioner<number> preconditioner;
107 std::shared_ptr<adaflo::BlockMatrixExtension> projection_matrix;
108 std::shared_ptr<adaflo::BlockILUExtension> ilu_projection_matrix;
109 dealii::AlignedVector<dealii::VectorizedArray<number>> cell_diameters;
110 number cell_diameter_min;
111 number cell_diameter_max;
112 number epsilon_used;
113
114 const NormalVectorData<number> &normal_vec_data;
115 };
116} // namespace MeltPoolDG::LevelSet
117#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