applications/mp-melt-pool/melt_pool_case.hpp Source File

Developer Documentation: applications/mp-melt-pool/melt_pool_case.hpp Source File
Developer Documentation
melt_pool_case.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
31
32#include <iostream>
33#include <string>
34#include <type_traits>
35
36namespace MeltPoolDG
37{
38 BETTER_ENUM(AMRStrategy, char, generic, adaflo, KellyErrorEstimator)
39 BETTER_ENUM(AutomaticGridRefinementType, char, fixed_fraction, fixed_number)
40
41
50 template <typename number>
52 {
53 protected:
54 void
55 add_parameters(dealii::ParameterHandler &prm) final
56 {
58 time_stepping.add_parameters(prm);
59 amr.add_parameters(prm);
60 ls.add_parameters(prm);
63 rte.add_parameters(prm);
64 flow.add_parameters(prm);
65 evapor.add_parameters(prm);
66 material.add_parameters(prm);
67 output.add_parameters(prm);
68 profiling.add_parameters(prm);
69 restart.add_parameters(prm);
70 melt_front.add_parameters(prm);
71#ifdef MPDG_ENABLE_ADAFLO
72 adaflo_params.add_parameters(prm);
73#endif
74
75 prm.enter_subsection("application specific");
76 {
77 prm.add_parameter(
78 "do heat transfer",
79 application_specific_parameters.do_heat_transfer,
80 "Set this parameter to true if you want to consider a coupling with heat transfer.");
81 prm.add_parameter(
82 "do solidification",
83 application_specific_parameters.do_solidification,
84 "Set this parameter to true if you want to consider melting/solidification effects.");
85 prm.add_parameter(
86 "do advect level set",
87 application_specific_parameters.do_advect_level_set,
88 "Set this parameter to true if you want to advect the level set with the fluid velocity.");
89 prm.add_parameter(
90 "do extrapolate coupling terms",
91 application_specific_parameters.do_extrapolate_coupling_terms,
92 "Set this parameter to true if you want to extrapolate the solution vectors for semi-explicit "
93 "treatment of coupling terms.");
94 prm.enter_subsection("amr");
95 {
96 prm.add_parameter("strategy",
98 "Select the AMR strategy.");
99 prm.add_parameter(
100 "do auto detect frequency",
101 application_specific_parameters.amr.do_auto_detect_frequency,
102 "Automatically determine the frequency of remeshing. If this parameter is set, the parameter "
103 "`amr: every n step` is ignored.");
104 prm.add_parameter(
105 "automatic grid refinement type",
106 application_specific_parameters.amr.automatic_grid_refinement_type,
107 "If the cells are refined automatically (strategy generic/KellyErrorEstimator), choose between "
108 "refine_and_coarsen_fixed_number and refine_and_coarsen_fixed_fraction.");
109 prm.add_parameter(
110 "do refine all interface cells",
111 application_specific_parameters.amr.do_refine_all_interface_cells,
112 "Enforce all cells with level set values between -0.975 and 0.975 to be refined.");
113 prm.add_parameter("refine gas domain",
114 application_specific_parameters.amr.refine_gas_domain,
115 "Refine the gas domain.");
116 prm.add_parameter(
117 "fraction of melting point refined in solid",
118 application_specific_parameters.amr.fraction_of_melting_point_refined_in_solid,
119 "Define a fraction of the melting point. Cells in the solid with a higher temperature are enforced "
120 "to be refined.");
121 }
122 prm.leave_subsection();
123 prm.enter_subsection("coupling ls evapor");
124 {
125 prm.add_parameter("n max iter",
126 application_specific_parameters.level_set_evapor_coupling.n_max_iter,
127 "Maximum number of iterations for nonlinear solution.");
128 prm.add_parameter("tol",
129 application_specific_parameters.level_set_evapor_coupling.tol,
130 "If the change of the l2-norm of the level set is smaller than 'tol', "
131 "the iteration is stopped.");
132 }
133 prm.leave_subsection();
134 prm.enter_subsection("mp heat up");
135 {
136 prm.add_parameter("time step size",
137 application_specific_parameters.mp_heat_up.time_step_size,
138 "Time step size until heat up is finished.");
139 prm.add_parameter(
140 "max change factor time step size",
141 application_specific_parameters.mp_heat_up.max_change_factor_time_step_size,
142 "Maximum allowed factor of changing the time step size between two time steps.");
143 prm.add_parameter("max temperature",
144 application_specific_parameters.mp_heat_up.max_temperature,
145 "Temperature at which heat up is finished.");
146 }
147 prm.leave_subsection();
148 prm.enter_subsection("coupling heat evapor");
149 {
150 prm.add_parameter("n max iter",
151 application_specific_parameters.heat_evapor_coupling.n_max_iter,
152 "Maximum number of iterations for nonlinear solution.");
153 prm.add_parameter("tol",
154 application_specific_parameters.heat_evapor_coupling.tol,
155 "If the change of the l2-norm of the level set is smaller than 'tol', "
156 "the iteration is stopped.");
157 }
158 prm.leave_subsection();
159 }
160 prm.leave_subsection();
161 }
162 void
163 post(const std::string &parameter_filename) final
164 {
165 /************************************************************************************
166 * set input-file-dependent default parameters
167 ************************************************************************************/
168 amr.post(base.global_refinements, restart.load >= 0);
172 material,
173 heat.operator_type == Heat::TwoPhaseOperatorType::cut);
176 evapor.post(material,
178 flow.post(material);
179 output.post(time_stepping.time_step_size, parameter_filename);
180 restart.post(output.directory);
181#ifdef MPDG_ENABLE_ADAFLO
182 adaflo_params.post(material, base.fe.type, time_stepping);
183#endif
184 /************************************************************************************
185 * check input parameters for validity
186 ************************************************************************************/
188
189 parameters_read = true;
190 }
191
192
193 private:
194 void
196 {
200 rte.check_input_parameters(base.fe);
201 ls.check_input_parameters(base.fe);
202 evapor.check_input_parameters(material);
203 flow.check_input_parameters(ls.curv.enable);
204 profiling.check_input_parameters(time_stepping.time_step_size);
205 restart.check_input_parameters(time_stepping.time_step_size);
206
207 if (application_specific_parameters.do_solidification and
208 not application_specific_parameters.do_heat_transfer)
209 AssertThrow(false,
210 dealii::ExcMessage("In case of solidification flag >>> do solidification <<< "
211 "and >>> do heat transfer <<< have to be set to true."));
212
213 AssertThrow(
214 application_specific_parameters.amr.fraction_of_melting_point_refined_in_solid <= 1 and
215 application_specific_parameters.amr.fraction_of_melting_point_refined_in_solid >= 0,
216 dealii::ExcMessage(
217 ">>>fraction of melting point refined in solid<<< must be between 0 and 1."));
218
219#ifdef MPDG_ENABLE_ADAFLO
220 adaflo_params.check_input_parameters(evapor.evaporative_dilation_rate.enable);
221#endif
222 }
223
224
225 public:
234 Evaporation::EvaporationData<number> evapor;
239#ifdef MPDG_ENABLE_ADAFLO
241#endif
243
244 struct
245 {
246 bool do_heat_transfer = false;
247 bool do_solidification = false;
250
251 struct
252 {
253 // number of iterations to balance nonlinearity in advection diffusion equation with
254 // evaporation
255 int n_max_iter = 1;
256 number tol = 1e-10;
258
259 struct
260 {
261 // number of iterations to balance nonlinearity in heat equation with
262 // evaporation
263 int n_max_iter = 1;
264 number tol = 1e-10;
266
267 struct
268 {
269 AMRStrategy strategy = AMRStrategy::generic;
270 AutomaticGridRefinementType automatic_grid_refinement_type =
271 AutomaticGridRefinementType::fixed_number;
275 bool refine_gas_domain = false;
277
278 struct
279 {
280 number time_step_size = -1;
281 number max_temperature = -1;
284
286 };
287
288 template <int dim, typename number>
289 class MeltPoolCase : public SimulationCaseBase<dim, number>
290 {
291 public:
293
294 MeltPoolCase(const std::string &parameter_file_in, MPI_Comm mpi_communicator_in)
295 : SimulationCaseBase<dim, number>(parameter_file_in, mpi_communicator_in)
296 {
297 dealii::ParameterHandler prm;
298 parameters.process_parameters_file(prm, parameter_file_in);
299 }
300 };
301} // namespace MeltPoolDG
Definition melt_pool_case.hpp:290
MeltPoolCaseParameters< number > parameters
Definition melt_pool_case.hpp:292
MeltPoolCase(const std::string &parameter_file_in, MPI_Comm mpi_communicator_in)
Definition melt_pool_case.hpp:294
Base class for managing a simulation case in a parallel computing environment.
Definition simulation_case_base.hpp:44
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
BETTER_ENUM(MaterialTemplate, char, none, stainless_steel, Ti64, Ti64Benchmark) BETTER_ENUM(SolidLiquidPropertiesTransitionType
Definition melt_front_propagation_data.hpp:7
Definition amr_data.hpp:9
Definition base_data.hpp:11
void check_input_parameters() const
Definition base_data.cpp:46
unsigned int dimension
Definition base_data.hpp:13
unsigned int global_refinements
Definition base_data.hpp:15
void add_parameters(dealii::ParameterHandler &prm)
Definition base_data.cpp:12
FiniteElementData fe
Definition base_data.hpp:18
unsigned int verbosity_level
Definition base_data.hpp:17
FiniteElementType type
Definition finite_element_data.hpp:13
A struct providing the relevant wrapper data for coupling MeltPoolDG with Adaflo.
Definition adaflo_wrapper_parameters.hpp:20
Collection of general flow parameters.
Definition flow_data.hpp:16
bool use_volume_specific_thermal_capacity_for_phase_interpolation
Definition heat_data.hpp:25
Definition heat_data.hpp:18
TwoPhaseOperatorType operator_type
Definition heat_data.hpp:21
void post(const FiniteElementData &base_fe_data, const unsigned int base_verbosity_level)
Definition heat_data.cpp:89
struct MeltPoolDG::Heat::HeatData::Diffuse diffuse
void add_parameters(dealii::ParameterHandler &prm)
Definition heat_data.cpp:18
void check_input_parameters(const FiniteElementData &base_fe_data) const
Definition heat_data.cpp:113
Definition laser_data.hpp:49
void check_input_parameters() const
Definition laser_data.cpp:233
void add_parameters(dealii::ParameterHandler &prm)
Definition laser_data.cpp:19
void post(const unsigned int dim)
Definition laser_data.cpp:115
Definition level_set_data.hpp:16
Definition material_data.hpp:84
Definition melt_pool_case.hpp:52
Flow::FlowData< number > flow
Definition melt_pool_case.hpp:233
struct MeltPoolDG::MeltPoolCaseParameters::@11 application_specific_parameters
AdaptiveMeshingData< number > amr
Definition melt_pool_case.hpp:228
struct MeltPoolDG::MeltPoolCaseParameters::@11::@12 level_set_evapor_coupling
bool do_solidification
Definition melt_pool_case.hpp:247
OutputData< number > output
Definition melt_pool_case.hpp:236
Heat::LaserData< number > laser
Definition melt_pool_case.hpp:231
number fraction_of_melting_point_refined_in_solid
Definition melt_pool_case.hpp:274
number tol
Definition melt_pool_case.hpp:256
Heat::HeatData< number > heat
Definition melt_pool_case.hpp:230
void post(const std::string &parameter_filename) final
Post-processing after reading the parameter file.
Definition melt_pool_case.hpp:163
RadiativeTransport::RadiativeTransportData< number > rte
Definition melt_pool_case.hpp:232
struct MeltPoolDG::MeltPoolCaseParameters::@11::@15 mp_heat_up
Evaporation::EvaporationData< number > evapor
Definition melt_pool_case.hpp:234
struct MeltPoolDG::MeltPoolCaseParameters::@11::@13 heat_evapor_coupling
AutomaticGridRefinementType automatic_grid_refinement_type
Definition melt_pool_case.hpp:270
bool do_extrapolate_coupling_terms
Definition melt_pool_case.hpp:249
bool refine_gas_domain
Definition melt_pool_case.hpp:275
Restart::RestartData< number > restart
Definition melt_pool_case.hpp:238
MaterialData< number > material
Definition melt_pool_case.hpp:235
void check_input_parameters() const
Definition melt_pool_case.hpp:195
number max_change_factor_time_step_size
Definition melt_pool_case.hpp:282
bool do_auto_detect_frequency
Definition melt_pool_case.hpp:272
AMRStrategy strategy
Definition melt_pool_case.hpp:269
bool do_refine_all_interface_cells
Definition melt_pool_case.hpp:273
MeltFrontPropagationData< number > melt_front
Definition melt_pool_case.hpp:242
Profiling::ProfilingData< number > profiling
Definition melt_pool_case.hpp:237
int n_max_iter
Definition melt_pool_case.hpp:255
TimeIntegration::TimeSteppingData< number > time_stepping
Definition melt_pool_case.hpp:227
bool do_heat_transfer
Definition melt_pool_case.hpp:246
BaseData base
Definition melt_pool_case.hpp:226
number time_step_size
Definition melt_pool_case.hpp:280
void add_parameters(dealii::ParameterHandler &prm) final
Add parameters to the ParameterHandler.
Definition melt_pool_case.hpp:55
LevelSet::LevelSetData< number > ls
Definition melt_pool_case.hpp:229
bool do_advect_level_set
Definition melt_pool_case.hpp:248
number max_temperature
Definition melt_pool_case.hpp:281
Definition output_data.hpp:41
Abstract base class for managing parameter files.
Definition parameters_base.hpp:40
bool parameters_read
Definition parameters_base.hpp:94
Definition profiling_data.hpp:13
Definition radiative_transport_data.hpp:32
Definition restart_data.hpp:15
Definition time_stepping_data.hpp:11