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

Developer Documentation: applications/mp-melt-pool/melt_pool_application.hpp Source File
Developer Documentation
melt_pool_application.hpp
Go to the documentation of this file.
1#pragma once
2#include <deal.II/base/parameter_handler.h>
3
4#include <deal.II/dofs/dof_handler.h>
5
6#include <deal.II/grid/tria.h>
7
8#include <deal.II/lac/affine_constraints.h>
9#include <deal.II/lac/la_parallel_block_vector.h>
10#include <deal.II/lac/la_parallel_vector.h>
11
31
32#include <functional>
33#include <memory>
34
35#include "melt_pool_case.hpp"
36
37namespace MeltPoolDG
38{
39 BETTER_ENUM(OutputNotConvergedOperation, char, none, navier_stokes, heat_transfer)
40
41 template <int dim, typename number>
43 {
44 private:
46 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
47 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
48
49 public:
50 MeltPoolApplication(std::unique_ptr<CaseType> simulation_case)
52 {}
53
54 void
55 run();
56
57 private:
58 const std::shared_ptr<CaseType> simulation_case;
59
64 void
65 initialize();
66
67 void
69
70 void
72
73 void
75
76 void
78
79 void
81
82 void
83 setup_dof_system(const bool do_reinit = true);
84
88 void
90
96 void
97 compute_gravity_force(VectorType &vec, const number gravity, const bool zero_out = true) const;
98
99 void
101 const Evaporation::EvaporationData<number> &evapor_data);
102
103 void
105 const Evaporation::EvaporationData<number> &evapor_data);
106
110 void
111 output_results(const bool force_output = false,
112 const OutputNotConvergedOperation output_not_converged_operation =
113 OutputNotConvergedOperation::none);
114
118 void
120
124 void
125 finalize(const OutputNotConvergedOperation output_no_converged_operation =
126 OutputNotConvergedOperation::none);
127
131 bool
132 mark_cells_for_refinement(dealii::Triangulation<dim> &tria, const bool is_initial_solution);
133
134 void
135 refine_mesh(const bool is_initial_solution = false);
136
137 void
139
140 void
141 post();
142
146 void
147 save();
148
149 void
150 load();
151
152 std::shared_ptr<TimeIntegration::TimeIterator<number>> time_iterator;
153
154 dealii::DoFHandler<dim> dof_handler_ls;
155
156 // optional heat DoFHandler
157 std::unique_ptr<dealii::DoFHandler<dim>> dof_handler_heat;
158 // optional DoFHandler for the HeatCutOperation's continuous DoFs
159 std::unique_ptr<dealii::DoFHandler<dim>> dof_handler_heat_cont;
160
161 dealii::AffineConstraints<number> ls_constraints_dirichlet;
162 dealii::AffineConstraints<number> ls_hanging_node_constraints;
163 dealii::AffineConstraints<number> reinit_constraints_dirichlet;
164 dealii::AffineConstraints<number> reinit_no_solid_constraints_dirichlet;
165 dealii::AffineConstraints<number> normal_dirichlet_x_constraints;
166 dealii::AffineConstraints<number> normal_dirichlet_y_constraints;
167 dealii::AffineConstraints<number> normal_dirichlet_z_constraints;
168
169 std::unique_ptr<dealii::AffineConstraints<number>> heat_dirichlet_constraints;
170 std::unique_ptr<dealii::AffineConstraints<number>> heat_hanging_node_constraints;
171 std::unique_ptr<dealii::AffineConstraints<number>> heat_continuous_hanging_node_constraints;
172
173 dealii::AffineConstraints<number> flow_velocity_constraints_no_solid;
174
179
180 unsigned int ls_dof_idx;
182 unsigned int ls_quad_idx;
183 unsigned int reinit_dof_idx;
185
186 // optional DoFHandler indices
187 // default value is invalid so we don't accidentally use a different DoFHandler
188 unsigned int heat_dof_idx = -1;
189 unsigned int heat_no_bc_dof_idx = -1;
191 unsigned int heat_quad_idx = -1;
192
193 unsigned int vel_dof_idx;
194 unsigned int pressure_dof_idx;
196
198 unsigned int normal_no_bc_dof_idx = -1;
199 unsigned int normal_dirichlet_x_dof_idx = -1;
200 unsigned int normal_dirichlet_y_dof_idx = -1;
201 unsigned int normal_dirichlet_z_dof_idx = -1;
202 const unsigned int &evapor_vel_dof_idx = vel_dof_idx;
204
205 std::shared_ptr<ScratchData<dim, dim, number>> scratch_data;
206 std::shared_ptr<Material<number>> material;
207 std::shared_ptr<Flow::IncompressibleFlowOperationBase<dim, number>> flow_operation;
208 std::shared_ptr<LevelSet::LevelSetOperation<dim, number>> level_set_operation;
209 std::shared_ptr<Heat::LaserOperation<dim, number>> laser_operation;
210 std::shared_ptr<MeltFrontPropagation<dim, number>> melt_front_propagation;
211 std::shared_ptr<Evaporation::EvaporationOperation<dim, number>> evaporation_operation = nullptr;
212 std::shared_ptr<Evaporation::IncompressibleNewtonianFluidEvaporationMaterial<dim, number>>
214 std::shared_ptr<Heat::HeatOperationBase<dim, number>> heat_operation;
215 std::shared_ptr<Flow::DarcyDampingOperation<dim, number>> darcy_operation;
216 std::shared_ptr<Flow::SurfaceTensionOperation<dim, number>> surface_tension_operation;
217 std::shared_ptr<Evaporation::RecoilPressureOperation<dim, number>> recoil_pressure_operation;
218 std::shared_ptr<Postprocessor<dim, number>> post_processor;
219 std::unique_ptr<Profiling::ProfilingMonitor<number>> profiling_monitor;
220 std::shared_ptr<Restart::RestartMonitor<number>> restart_monitor;
221
224 };
225} // namespace MeltPoolDG
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Definition melt_pool_application.hpp:43
std::unique_ptr< dealii::AffineConstraints< number > > heat_hanging_node_constraints
Definition melt_pool_application.hpp:170
unsigned int heat_dof_idx
Definition melt_pool_application.hpp:188
unsigned int normal_no_bc_dof_idx
Definition melt_pool_application.hpp:198
VectorType mass_balance_rhs
Definition melt_pool_application.hpp:176
bool compute_interface_temperature
Definition melt_pool_application.hpp:223
std::shared_ptr< Heat::HeatOperationBase< dim, number > > heat_operation
Definition melt_pool_application.hpp:214
void initialize()
Definition melt_pool_application.cpp:696
unsigned int normal_dirichlet_x_dof_idx
Definition melt_pool_application.hpp:199
dealii::AffineConstraints< number > reinit_no_solid_constraints_dirichlet
Definition melt_pool_application.hpp:164
std::shared_ptr< TimeIntegration::TimeIterator< number > > time_iterator
Definition melt_pool_application.hpp:152
void run()
Definition melt_pool_application.cpp:86
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition melt_pool_application.hpp:46
std::shared_ptr< Material< number > > material
Definition melt_pool_application.hpp:206
unsigned int pressure_dof_idx
Definition melt_pool_application.hpp:194
unsigned int ls_dof_idx
Definition melt_pool_application.hpp:180
unsigned int heat_quad_idx
Definition melt_pool_application.hpp:191
unsigned int flow_vel_no_solid_dof_idx
Definition melt_pool_application.hpp:195
void post()
Definition melt_pool_application.cpp:2377
void save()
Definition melt_pool_application.cpp:630
std::shared_ptr< Heat::LaserOperation< dim, number > > laser_operation
Definition melt_pool_application.hpp:209
std::unique_ptr< dealii::AffineConstraints< number > > heat_continuous_hanging_node_constraints
Definition melt_pool_application.hpp:171
const unsigned int & curv_dof_idx
Definition melt_pool_application.hpp:197
dealii::AffineConstraints< number > reinit_constraints_dirichlet
Definition melt_pool_application.hpp:163
void set_initial_condition_heat_transfer()
Definition melt_pool_application.cpp:1239
std::shared_ptr< Flow::IncompressibleFlowOperationBase< dim, number > > flow_operation
Definition melt_pool_application.hpp:207
MeltPoolCase< dim, number > CaseType
Definition melt_pool_application.hpp:45
bool output_interface_velocity
Definition melt_pool_application.hpp:222
void output_results(const bool force_output=false, const OutputNotConvergedOperation output_not_converged_operation=OutputNotConvergedOperation::none)
Definition melt_pool_application.cpp:1789
std::unique_ptr< Profiling::ProfilingMonitor< number > > profiling_monitor
Definition melt_pool_application.hpp:219
dealii::AffineConstraints< number > ls_hanging_node_constraints
Definition melt_pool_application.hpp:162
std::shared_ptr< MeltFrontPropagation< dim, number > > melt_front_propagation
Definition melt_pool_application.hpp:210
std::unique_ptr< dealii::DoFHandler< dim > > dof_handler_heat
Definition melt_pool_application.hpp:157
const unsigned int & evapor_vel_dof_idx
Definition melt_pool_application.hpp:202
void attach_vectors(DoFHandlerAndVectorDataType< dim, VectorType > &data)
Definition melt_pool_application.cpp:2322
std::unique_ptr< dealii::DoFHandler< dim > > dof_handler_heat_cont
Definition melt_pool_application.hpp:159
unsigned int normal_dirichlet_z_dof_idx
Definition melt_pool_application.hpp:201
void compute_interface_velocity_sharp(const LevelSet::LevelSetData< number > &ls_data, const Evaporation::EvaporationData< number > &evapor_data)
Definition melt_pool_application.cpp:1734
std::shared_ptr< Postprocessor< dim, number > > post_processor
Definition melt_pool_application.hpp:218
std::shared_ptr< ScratchData< dim, dim, number > > scratch_data
Definition melt_pool_application.hpp:205
void set_initial_condition_flow()
Definition melt_pool_application.cpp:1269
std::shared_ptr< Flow::SurfaceTensionOperation< dim, number > > surface_tension_operation
Definition melt_pool_application.hpp:216
std::shared_ptr< Flow::DarcyDampingOperation< dim, number > > darcy_operation
Definition melt_pool_application.hpp:215
const unsigned int & evapor_mass_flux_dof_idx
Definition melt_pool_application.hpp:203
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition melt_pool_application.hpp:47
std::shared_ptr< LevelSet::LevelSetOperation< dim, number > > level_set_operation
Definition melt_pool_application.hpp:208
std::shared_ptr< Evaporation::IncompressibleNewtonianFluidEvaporationMaterial< dim, number > > evaporation_fluid_material
Definition melt_pool_application.hpp:213
std::unique_ptr< dealii::AffineConstraints< number > > heat_dirichlet_constraints
Definition melt_pool_application.hpp:169
void setup_dof_system(const bool do_reinit=true)
Definition melt_pool_application.cpp:1344
unsigned int ls_quad_idx
Definition melt_pool_application.hpp:182
std::shared_ptr< Evaporation::EvaporationOperation< dim, number > > evaporation_operation
Definition melt_pool_application.hpp:211
dealii::AffineConstraints< number > flow_velocity_constraints_no_solid
Definition melt_pool_application.hpp:173
void compute_interface_velocity(const LevelSet::LevelSetData< number > &ls_data, const Evaporation::EvaporationData< number > &evapor_data)
Definition melt_pool_application.cpp:1670
dealii::AffineConstraints< number > normal_dirichlet_z_constraints
Definition melt_pool_application.hpp:167
void compute_gravity_force(VectorType &vec, const number gravity, const bool zero_out=true) const
Definition melt_pool_application.cpp:1630
unsigned int normal_dirichlet_y_dof_idx
Definition melt_pool_application.hpp:200
dealii::AffineConstraints< number > ls_constraints_dirichlet
Definition melt_pool_application.hpp:161
dealii::AffineConstraints< number > normal_dirichlet_x_constraints
Definition melt_pool_application.hpp:165
dealii::DoFHandler< dim > dof_handler_ls
Definition melt_pool_application.hpp:154
dealii::AffineConstraints< number > normal_dirichlet_y_constraints
Definition melt_pool_application.hpp:166
std::shared_ptr< Restart::RestartMonitor< number > > restart_monitor
Definition melt_pool_application.hpp:220
bool mark_cells_for_refinement(dealii::Triangulation< dim > &tria, const bool is_initial_solution)
Definition melt_pool_application.cpp:1885
std::shared_ptr< Evaporation::RecoilPressureOperation< dim, number > > recoil_pressure_operation
Definition melt_pool_application.hpp:217
unsigned int vel_dof_idx
Definition melt_pool_application.hpp:193
void load()
Definition melt_pool_application.cpp:646
unsigned int reinit_dof_idx
Definition melt_pool_application.hpp:183
MeltPoolApplication(std::unique_ptr< CaseType > simulation_case)
Definition melt_pool_application.hpp:50
void set_phase_dependent_parameters_flow(const MeltPoolCaseParameters< number > &parameters)
Definition melt_pool_application.cpp:1507
unsigned int ls_hanging_nodes_dof_idx
Definition melt_pool_application.hpp:181
void finalize(const OutputNotConvergedOperation output_no_converged_operation=OutputNotConvergedOperation::none)
Definition melt_pool_application.cpp:1837
unsigned int heat_continuous_no_bc_dof_idx
Definition melt_pool_application.hpp:190
VectorType vel_force_rhs
Definition melt_pool_application.hpp:175
void set_initial_conditions()
Definition melt_pool_application.cpp:1327
unsigned int reinit_no_solid_dof_idx
Definition melt_pool_application.hpp:184
void set_initial_condition_evaporation()
Definition melt_pool_application.cpp:1302
void set_initial_condition_level_set()
Definition melt_pool_application.cpp:1215
VectorType level_set_rhs
Definition melt_pool_application.hpp:177
void refine_mesh(const bool is_initial_solution=false)
Definition melt_pool_application.cpp:2399
unsigned int heat_no_bc_dof_idx
Definition melt_pool_application.hpp:189
VectorType interface_velocity
Definition melt_pool_application.hpp:178
const std::shared_ptr< CaseType > simulation_case
Definition melt_pool_application.hpp:58
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const
Definition melt_pool_application.cpp:1851
Definition melt_pool_case.hpp:290
Interface for a general preconditioner.
Definition boundary_condition_functions.hpp:17
std::vector< std::pair< const dealii::DoFHandler< dim > *, std::function< void(std::vector< VectorType * > &)> > > DoFHandlerAndVectorDataType
Definition attach_vectors.hpp:17
BETTER_ENUM(MaterialTemplate, char, none, stainless_steel, Ti64, Ti64Benchmark) BETTER_ENUM(SolidLiquidPropertiesTransitionType
Definition level_set_data.hpp:16
Definition melt_pool_case.hpp:52