include/meltpooldg/heat/laser_operation.hpp Source File

Developer Documentation: include/meltpooldg/heat/laser_operation.hpp Source File
Developer Documentation
laser_operation.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/point.h>
4
5#include <deal.II/dofs/dof_handler.h>
6
7#include <deal.II/lac/affine_constraints.h>
8#include <deal.II/lac/la_parallel_block_vector.h>
9#include <deal.II/lac/la_parallel_vector.h>
10
20
21#include <functional>
22#include <memory>
23#include <utility>
24#include <vector>
25
26namespace MeltPoolDG::Heat
27{
28 template <int dim, typename number>
30 {
31 private:
32 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
33 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
34
37
38 // Laser parameters
40
41 // current time
43 // current intensity of the laser (between 0 and 1)
46 // current laser position defined as spot center of the laser beam
47 dealii::Point<dim> laser_position;
48
49 std::shared_ptr<dealii::Function<dim, number>> intensity_profile;
50
51 // Requested laser model
52 std::unique_ptr<LaserHeatSourceVolumetric<dim, number>> laser_heat_source_operation_volumetric;
53 std::unique_ptr<LaserHeatSourceProjectionBased<dim, number>>
55
56 // RTE
57 std::unique_ptr<RadiativeTransport::RadiativeTransportOperation<dim, number>> rte_operation;
58 std::unique_ptr<dealii::DoFHandler<dim>> rte_dof_handler;
59 std::unique_ptr<dealii::AffineConstraints<number>> rte_constraints_dirichlet;
60 std::unique_ptr<dealii::AffineConstraints<number>> rte_hanging_node_constraints;
61 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>>
63 unsigned int rte_dof_idx;
65 unsigned int rte_quad_idx;
66
67 public:
69 ScratchData<dim, dim, number> &scratch_data_in,
70 const PeriodicBoundaryConditions<dim> &periodic_bc_in,
71 const LaserData<number> &laser_data_in,
72 const VectorType *heaviside_in = nullptr,
73 const unsigned int hs_dof_idx_in = 0,
74 const RadiativeTransport::RadiativeTransportData<number> *rad_trans_data_in = nullptr,
75 const bool problem_is_melt_pool = false,
76 const bool heat_is_cut = false,
77 const bool material_two_phase_transition_is_diffuse = false,
78 const bool print_boundary_ids = false);
79
80 void
81 distribute_dofs(const FiniteElementData &fe_data);
82
83 void
85
86 void
88
89 void
90 reinit();
91
92 void
94
95 void
97
112 void
113 compute_heat_source(VectorType &heat_source,
114 VectorType &heat_user_rhs,
115 const VectorType &level_set_as_heaviside,
116 const unsigned int ls_dof_idx,
117 const unsigned int heat_no_bc_dof_idx,
118 const unsigned int heat_quad_idx,
119 const bool zero_out = false,
120 const BlockVectorType *normal_vector = nullptr,
121 const unsigned int normal_dof_idx = 0) const;
122
126 void
127 reset(const number start_time);
128
133 void
134 move_laser(number dt);
135
139 const dealii::Point<dim> &
140 get_laser_position() const;
141
145 number
146 get_laser_power() const;
147
151 std::shared_ptr<const dealii::Function<dim, number>>
152 get_intensity_profile() const;
153
154 private:
158 void
159 print() const;
160
167 bool
169 };
170} // namespace MeltPoolDG::Heat
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Definition laser_operation.hpp:30
void attach_vectors(DoFHandlerAndVectorDataType< dim, VectorType > &data)
Definition laser_operation.cpp:208
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition laser_operation.hpp:33
number get_laser_power() const
Definition laser_operation.cpp:281
std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > rte_dirichlet_boundary_condition
Definition laser_operation.hpp:62
std::shared_ptr< const dealii::Function< dim, number > > get_intensity_profile() const
Definition laser_operation.cpp:288
void distribute_constraints()
Definition laser_operation.cpp:188
std::unique_ptr< dealii::AffineConstraints< number > > rte_constraints_dirichlet
Definition laser_operation.hpp:59
std::unique_ptr< dealii::DoFHandler< dim > > rte_dof_handler
Definition laser_operation.hpp:58
void move_laser(number dt)
Definition laser_operation.cpp:245
std::unique_ptr< RadiativeTransport::RadiativeTransportOperation< dim, number > > rte_operation
Definition laser_operation.hpp:57
number current_time
Definition laser_operation.hpp:42
void compute_heat_source(VectorType &heat_source, VectorType &heat_user_rhs, const VectorType &level_set_as_heaviside, const unsigned int ls_dof_idx, const unsigned int heat_no_bc_dof_idx, const unsigned int heat_quad_idx, const bool zero_out=false, const BlockVectorType *normal_vector=nullptr, const unsigned int normal_dof_idx=0) const
Definition laser_operation.cpp:325
std::unique_ptr< LaserHeatSourceProjectionBased< dim, number > > laser_heat_source_operation_projection
Definition laser_operation.hpp:54
void setup_constraints()
Definition laser_operation.cpp:175
std::unique_ptr< LaserHeatSourceVolumetric< dim, number > > laser_heat_source_operation_volumetric
Definition laser_operation.hpp:52
void reinit()
Definition laser_operation.cpp:198
void distribute_dofs(const FiniteElementData &fe_data)
Definition laser_operation.cpp:167
unsigned int rte_hanging_nodes_dof_idx
Definition laser_operation.hpp:64
std::shared_ptr< dealii::Function< dim, number > > intensity_profile
Definition laser_operation.hpp:49
const dealii::Point< dim > & get_laser_position() const
Definition laser_operation.cpp:274
void reset(const number start_time)
Definition laser_operation.cpp:230
void print() const
Definition laser_operation.cpp:398
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const
Definition laser_operation.cpp:220
const LaserData< number > & laser_data
Definition laser_operation.hpp:39
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition laser_operation.hpp:32
const PeriodicBoundaryConditions< dim > & periodic_bc
Definition laser_operation.hpp:36
unsigned int rte_quad_idx
Definition laser_operation.hpp:65
bool compute_laser_intensity()
Definition laser_operation.cpp:296
std::unique_ptr< dealii::AffineConstraints< number > > rte_hanging_node_constraints
Definition laser_operation.hpp:60
const ScratchData< dim, dim, number > & scratch_data
Definition laser_operation.hpp:35
unsigned int rte_dof_idx
Definition laser_operation.hpp:63
number laser_intensity
Definition laser_operation.hpp:44
dealii::Point< dim > laser_position
Definition laser_operation.hpp:47
number current_power
Definition laser_operation.hpp:45
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
Definition apparent_capacity.hpp:9
std::vector< std::pair< const dealii::DoFHandler< dim > *, std::function< void(std::vector< VectorType * > &)> > > DoFHandlerAndVectorDataType
Definition attach_vectors.hpp:17
Definition finite_element_data.hpp:12
Definition laser_data.hpp:49
Definition periodic_boundary_conditions.hpp:11
Definition radiative_transport_data.hpp:32