include/meltpooldg/level_set/reinitialization_hyperbolic_CG_operation.hpp Source File

Developer Documentation: include/meltpooldg/level_set/reinitialization_hyperbolic_CG_operation.hpp Source File
Developer Documentation
reinitialization_hyperbolic_CG_operation.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/function.h>
4
5#include <deal.II/lac/la_parallel_block_vector.h>
6#include <deal.II/lac/la_parallel_vector.h>
7#include <deal.II/lac/trilinos_sparse_matrix.h>
8
21
22#include <limits>
23#include <memory>
24#include <vector>
25
26
28{
29 /*
30 * Reinitialization model for reobtaining the signed-distance
31 * property of the level set equation
32 */
33
34 template <int dim, typename number>
36 : public ReinitializationOperationBase<dim, number>,
38 {
39 private:
40 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
41 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
42 using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix;
43
44 public:
46 const ScratchData<dim, dim, number> &scratch_data_in,
48 const NormalVectorData<number> &normal_vec_data,
49 const int ls_n_subdivisions_in,
51 const unsigned int reinit_dof_idx_in,
52 const unsigned int reinit_quad_idx_in,
53 const unsigned int ls_dof_idx_in,
54 const std::array<unsigned int, dim> &normal_dof_indices_per_block_in,
55 const unsigned int normal_no_bc_dof_idx_in);
56
57 void
58 reinit() override;
59
60 /*
61 * By calling the reinitialize function, (1) the solution_level_set field
62 * and (2) the normal vector field corresponding to the given solution_level_set_field
63 * is updated. This is commonly the first stage before performing the pseudo-time-dependent
64 * solution procedure.
65 */
66
70 void
71 set_initial_condition(const VectorType &solution_level_set_in) override;
72
76 void
77 set_initial_condition(const dealii::Function<dim> &initial_field_function) override;
78
87 void
89 std::vector<dealii::types::boundary_id> &&wetting_bc_ids) final;
90
91 void
93
94 void
95 solve() override;
96
97 number
98 get_max_change_level_set() const final;
99
100 const BlockVectorType &
101 get_normal_vector() const;
102
103 const VectorType &
104 get_level_set() const override;
105
106 VectorType &
107 get_level_set() override;
108
111
112 void
114 std::vector<dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) override;
115
116 void
117 attach_output_vectors(GenericDataOut<dim, number> &data_out) const override;
118
119 private:
120 void
122
123 private:
124 const ScratchData<dim, dim, number> &scratch_data;
127 const TimeIntegration::TimeIterator<number> &time_iterator;
128 /*
129 * Based on the following indices the correct DoFHandler or quadrature rule from
130 * ScratchData<dim,dim,number> object is selected. This is important when
131 * ScratchData<dim,dim,number> holds multiple DoFHandlers, quadrature rules, etc.
132 */
133 mutable unsigned int reinit_dof_idx;
134 const unsigned int reinit_quad_idx;
135 const unsigned int ls_dof_idx;
136 const std::array<unsigned int, dim> normal_dof_indices_per_block;
137 const unsigned int normal_no_bc_dof_idx;
138
139 TimeIntegration::SolutionHistory<VectorType> solution_history;
140
141 std::unique_ptr<Predictor<VectorType, number>> predictor;
142 /*
143 * This shared pointer will point to your user-defined reinitialization operator.
144 */
145 std::unique_ptr<OlssonOperator<dim, number>> reinit_operator;
146 /*
147 * Computation of the normal vectors
148 */
150 /*
151 * This is the primary solution variable of this module, which will be also publicly
152 * accessible for output_results.
153 */
155
158
160
161 // maximum change of the level set due to the current reinitialization step
162 number max_change_level_set = std::numeric_limits<number>::max();
163 };
164} // namespace MeltPoolDG::LevelSet
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Definition normal_vector_operation_base.hpp:8
Operator for the Olsson reinitialization method used in level set methods.
Definition olsson_CG_operator.hpp:45
Definition reinitialization_hyperbolic_CG_operation.hpp:38
const std::array< unsigned int, dim > normal_dof_indices_per_block
Definition reinitialization_hyperbolic_CG_operation.hpp:136
std::shared_ptr< NormalVectorOperationBase< dim, number > > normal_vector_operation
Definition reinitialization_hyperbolic_CG_operation.hpp:149
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition reinitialization_hyperbolic_CG_operation.hpp:41
const BlockVectorType & get_normal_vector() const
Definition reinitialization_hyperbolic_CG_operation.cpp:285
const int ls_n_subdivisions
Definition reinitialization_hyperbolic_CG_operation.hpp:126
void solve() override
Definition reinitialization_hyperbolic_CG_operation.cpp:177
VectorType rhs
Definition reinitialization_hyperbolic_CG_operation.hpp:157
void attach_vectors(std::vector< dealii::LinearAlgebra::distributed::Vector< number > * > &vectors) override
Definition reinitialization_hyperbolic_CG_operation.cpp:313
void reinit() override
Definition reinitialization_hyperbolic_CG_operation.cpp:84
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const override
Definition reinitialization_hyperbolic_CG_operation.cpp:325
void set_wetting_boundary_condition_ids(std::vector< dealii::types::boundary_id > &&wetting_bc_ids) final
Sets the boundary IDs where wetting boundary conditions should be applied.
Definition reinitialization_hyperbolic_CG_operation.cpp:141
dealii::TrilinosWrappers::SparseMatrix SparseMatrixType
Definition reinitialization_hyperbolic_CG_operation.hpp:42
const ReinitializationData< number > reinit_data
Definition reinitialization_hyperbolic_CG_operation.hpp:125
std::unique_ptr< OlssonOperator< dim, number > > reinit_operator
Definition reinitialization_hyperbolic_CG_operation.hpp:145
const ScratchData< dim, dim, number > & scratch_data
Definition reinitialization_hyperbolic_CG_operation.hpp:124
void init_time_advance()
Definition reinitialization_hyperbolic_CG_operation.cpp:151
Preconditioner< dim, VectorType, number > preconditioner
Definition reinitialization_hyperbolic_CG_operation.hpp:159
void set_initial_condition(const VectorType &solution_level_set_in) override
Definition reinitialization_hyperbolic_CG_operation.cpp:101
unsigned int reinit_dof_idx
Definition reinitialization_hyperbolic_CG_operation.hpp:133
void create_operator()
Definition reinitialization_hyperbolic_CG_operation.cpp:338
std::unique_ptr< Predictor< VectorType, number > > predictor
Definition reinitialization_hyperbolic_CG_operation.hpp:141
VectorType delta_psi_extrapolated
Definition reinitialization_hyperbolic_CG_operation.hpp:156
const unsigned int ls_dof_idx
Definition reinitialization_hyperbolic_CG_operation.hpp:135
VectorType solution_level_set
Definition reinitialization_hyperbolic_CG_operation.hpp:154
number get_max_change_level_set() const final
Definition reinitialization_hyperbolic_CG_operation.cpp:278
const TimeIntegration::TimeIterator< number > & time_iterator
Definition reinitialization_hyperbolic_CG_operation.hpp:127
const VectorType & get_level_set() const override
Definition reinitialization_hyperbolic_CG_operation.cpp:292
const unsigned int normal_no_bc_dof_idx
Definition reinitialization_hyperbolic_CG_operation.hpp:137
number max_change_level_set
Definition reinitialization_hyperbolic_CG_operation.hpp:162
const unsigned int reinit_quad_idx
Definition reinitialization_hyperbolic_CG_operation.hpp:134
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition reinitialization_hyperbolic_CG_operation.hpp:40
TimeIntegration::SolutionHistory< VectorType > solution_history
Definition reinitialization_hyperbolic_CG_operation.hpp:139
Definition reinitialization_operation_base.hpp:84
Definition reinitialization_operation_base.hpp:10
Definition preconditioner.hpp:42
Definition predictor.hpp:90
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
Definition time_iterator.hpp:15
This operation solves the reinitialization problem for a CG- or DG-FEM-based discrete level-set field...
Definition advection_DG_operation.hpp:20
Definition dealii_tensor.hpp:10
Definition normal_vector_data.hpp:15
Definition reinitialization_data.hpp:126