include/meltpooldg/level_set/reinitialization_data.hpp Source File

Developer Documentation: include/meltpooldg/level_set/reinitialization_data.hpp Source File
Developer Documentation
reinitialization_data.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/exceptions.h>
4#include <deal.II/base/parameter_handler.h>
5
11
12#include <limits>
13#include <string>
14
16{
17 BETTER_ENUM(InterfaceThicknessParameterType,
18 char,
19 // epsilon = value * cell size
20 // interface thickness = value * 6 * cell size
21 proportional_to_cell_size,
22 // epsilon = value
23 // interface thickness = value * 6
24 absolute_value,
25 // epsilon = value * cell size / 6
26 // interface thickness = value * cell size
27 number_of_cells_across_interface)
28
29 BETTER_ENUM(HyperbolicWeightingFunctionType, char, smoothed_signum, initial_levelset)
30
31 BETTER_ENUM(ModelType, char, olsson2007, elliptic, geometric)
32
33 template <typename number>
34 struct ReinitializationEllipticData
35 {
36 number penalty_parameter = 0.;
37
38 struct FixedPointIterationData
39 {
40 unsigned int max_n_steps = 5;
41 number tolerance = std::numeric_limits<number>::min();
42 } fix_point_iteration;
43
44 void
45 add_parameters(dealii::ParameterHandler &prm);
46 };
47
48 template <typename number>
50 {
51 number max_distance = 0.9 * std::numeric_limits<number>::max();
52
53 bool transform_to_tanh = true;
54
55 unsigned int verbosity = 0;
56
57 void
58 add_parameters(dealii::ParameterHandler &prm);
59 };
60
61
62 template <typename number>
64 {
66 {
67 unsigned int max_n_steps = 5;
71 number tolerance = std::numeric_limits<number>::min();
73
74 struct CG
75 {
76 std::string implementation = "meltpooldg";
78 } cg;
79
80 struct DG
81 {
82 number factor_diffusivity = 0.25;
83 number IP_diffusion = 100.0;
84
87
88 TimeIntegration::TimeIntegratorData<number> time_integration_data =
89 TimeIntegration::TimeIntegratorData<number>(
90 TimeIntegration::TimeIntegratorSchemes::LSRK_stage_5_order_4);
91
92 TimeIntegration::TimeIntegratorData<number> IMEX_integration_data =
93 TimeIntegration::TimeIntegratorData<number>(
94 TimeIntegration::TimeIntegratorSchemes::not_initialized);
95
96 number CFL = 1.0;
99
101
102 HyperbolicWeightingFunctionType hyperbolic_weighting_function_type =
103 HyperbolicWeightingFunctionType::smoothed_signum;
104
107
109 } dg;
110
111 void
112 add_parameters(dealii::ParameterHandler &prm);
113
114 void
115 post();
116
117 void
119 const FiniteElementData &fe,
120 const LinearSolverData<number> &linear_solver,
121 const InterfaceThicknessParameterType &interface_thickness_parameter_type) const;
122 };
123
124 template <typename number>
126 {
128
129 bool enable = true;
130
132
133 ModelType modeltype = ModelType::olsson2007;
134
135 PredictorData predictor;
136
137 LinearSolverData<number> linear_solver;
138
139 ReinitializationEllipticData<number> elliptic;
140
142
144
146 {
147 InterfaceThicknessParameterType type =
148 InterfaceThicknessParameterType::proportional_to_cell_size;
149
150 number value = 0.5;
152
153 void
154 add_parameters(dealii::ParameterHandler &prm);
155
156 void
157 check_input_parameters(const bool normal_vec_do_matrix_free) const;
158
159 void
160 post(const FiniteElementData &base_fe_data);
161
162 template <typename number2>
163 number2
165 {
167 {
168 case InterfaceThicknessParameterType::proportional_to_cell_size:
169 return cell_size * interface_thickness_parameter.value;
170 case InterfaceThicknessParameterType::absolute_value:
172 case InterfaceThicknessParameterType::number_of_cells_across_interface:
173 return interface_thickness_parameter.value * cell_size / 6.;
174 default:
175 AssertThrow(false, dealii::ExcNotImplemented());
176 return 0.0;
177 }
178 }
179 };
180} // namespace MeltPoolDG::LevelSet
This operation solves the reinitialization problem for a CG- or DG-FEM-based discrete level-set field...
Definition advection_DG_operation.hpp:20
BETTER_ENUM(ConvectionStabilizationType, char, none, SUPG) template< typename number > struct AdvectionDiffusionData
Definition advection_diffusion_data.hpp:15
Definition finite_element_data.hpp:12
InterfaceThicknessParameterType type
Definition reinitialization_data.hpp:147
number value
Definition reinitialization_data.hpp:150
Definition reinitialization_data.hpp:126
LinearSolverData< number > linear_solver
Definition reinitialization_data.hpp:137
ReinitializationGeometricData< number > geometric
Definition reinitialization_data.hpp:143
ReinitializationHyperbolicData< number > hyperbolic
Definition reinitialization_data.hpp:141
PredictorData predictor
Definition reinitialization_data.hpp:135
void post(const FiniteElementData &base_fe_data)
Definition reinitialization_data.cpp:267
FiniteElementData fe
Definition reinitialization_data.hpp:131
ModelType modeltype
Definition reinitialization_data.hpp:133
void check_input_parameters(const bool normal_vec_do_matrix_free) const
Definition reinitialization_data.cpp:277
struct MeltPoolDG::LevelSet::ReinitializationData::InterfaceThickness interface_thickness_parameter
number2 compute_interface_thickness_parameter_epsilon(const number2 cell_size) const
Definition reinitialization_data.hpp:164
ReinitializationEllipticData< number > elliptic
Definition reinitialization_data.hpp:139
ReinitializationData()
Definition reinitialization_data.cpp:224
void add_parameters(dealii::ParameterHandler &prm)
Definition reinitialization_data.cpp:232
bool enable
Definition reinitialization_data.hpp:129
Definition reinitialization_data.hpp:50
unsigned int verbosity
Definition reinitialization_data.hpp:55
number max_distance
Definition reinitialization_data.hpp:51
void add_parameters(dealii::ParameterHandler &prm)
Definition reinitialization_data.cpp:38
bool transform_to_tanh
Definition reinitialization_data.hpp:53
Definition reinitialization_data.hpp:75
number tangential_diffusion_factor
Definition reinitialization_data.hpp:77
std::string implementation
Definition reinitialization_data.hpp:76
Definition reinitialization_data.hpp:81
number factor_diffusivity
Definition reinitialization_data.hpp:82
bool use_const_gradient_in_RI
Definition reinitialization_data.hpp:85
TimeIntegration::TimeIntegratorData< number > IMEX_integration_data
Definition reinitialization_data.hpp:92
number signum_smoothness_paramater
Definition reinitialization_data.hpp:98
TimeIntegration::TimeIntegratorData< number > time_integration_data
Definition reinitialization_data.hpp:88
bool do_CFL_based_time_stepping
Definition reinitialization_data.hpp:86
number CFL
Definition reinitialization_data.hpp:96
bool use_directed_diffusion_stabilization
Definition reinitialization_data.hpp:100
HyperbolicWeightingFunctionType hyperbolic_weighting_function_type
Definition reinitialization_data.hpp:102
bool use_spatially_constant_diffusion
Definition reinitialization_data.hpp:105
number gradient_error_time_derivative_threshold
Definition reinitialization_data.hpp:108
bool use_interface_movement_penalization
Definition reinitialization_data.hpp:106
number IP_diffusion
Definition reinitialization_data.hpp:83
number avoid_zero_division_smoothed_signum
Definition reinitialization_data.hpp:97
unsigned int max_n_steps
Definition reinitialization_data.hpp:67
number pseudo_time_step_size
Definition reinitialization_data.hpp:68
number pseudo_time_step_factor
Definition reinitialization_data.hpp:69
Definition reinitialization_data.hpp:64
struct MeltPoolDG::LevelSet::ReinitializationHyperbolicData::PseudoTimeSteppingData pseudo_time_stepping
struct MeltPoolDG::LevelSet::ReinitializationHyperbolicData::CG cg
void post()
Definition reinitialization_data.cpp:191
void add_parameters(dealii::ParameterHandler &prm)
Definition reinitialization_data.cpp:56
void check_input_parameters(const FiniteElementData &fe, const LinearSolverData< number > &linear_solver, const InterfaceThicknessParameterType &interface_thickness_parameter_type) const
Definition reinitialization_data.cpp:201
struct MeltPoolDG::LevelSet::ReinitializationHyperbolicData::DG dg