include/meltpooldg/heat/heat_cut_operation.hpp Source File

Developer Documentation: include/meltpooldg/heat/heat_cut_operation.hpp Source File
Developer Documentation
heat_cut_operation.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/function.h>
4#include <deal.II/base/tensor.h>
5#include <deal.II/base/types.h>
6#include <deal.II/base/vectorization.h>
7
8#include <deal.II/dofs/dof_handler.h>
9
10#include <deal.II/non_matching/mapping_info.h>
11#include <deal.II/non_matching/mesh_classifier.h>
12
30
31#include <functional>
32#include <map>
33#include <memory>
34#include <vector>
35
36
37namespace MeltPoolDG::Heat
38{
39 template <int dim, typename number>
40 class HeatCutOperation : public HeatOperationBase<dim, number>
41 {
42 private:
45
47 const std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> dirichlet_bc;
50
52
53 // ScratchData's DoFHandler indices for ..
54 const unsigned int heat_cut_dof_idx; // .. CutFEM DoFs with Dirichlet BCs
55 const unsigned int heat_cut_no_bc_dof_idx; // .. CutFEM DoFs without Dirichlet BCs
56 const unsigned int heat_cont_no_bc_dof_idx; // .. continuous DoFs without Dirichlet BCs
57 // ScratchData's Quadrature index
58 const unsigned int heat_quad_idx;
59
62 // TODO: note that this is not yet implemented in the operator
64
65 // level set which defines the interface with its zero contour
66 const unsigned int ls_dof_idx;
68 // The mesh classifier loops over all non-artificial cells and retrieves all level-set DoF
69 // values to classify the cell. We use the @param mc_level_set vector that uses the matrix-based DoF layout.
71 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier;
72 std::shared_ptr<dealii::NonMatching::MeshClassifier<dim>> mesh_classifier_old;
73
75 std::function<void(VectorType &)> reinit_vector;
76 std::function<void()> setup_dof_system;
78
79 dealii::NonMatching::MappingInfo<dim, dim, dealii::VectorizedArray<number>>
81 std::vector<
82 std::shared_ptr<dealii::NonMatching::MappingInfo<dim, dim, dealii::VectorizedArray<number>>>>
84
86
87 std::unique_ptr<HeatCutOperator<dim, number>> heat_operator;
88
90
91 std::unique_ptr<LevelSet::Tools::NearestPoint<dim, double>> nearest_point_search;
92
93 // bool indicating whether solution vectors are prepared for time advance
95
98 // - bool indicating whether the level set vector is ready to generate intersected quadrature
100 // - bool indicating whether to skip classifying cells according to the new interface position
102
103 public:
105 const ScratchData<dim, dim, number> &scratch_data_in,
106 const std::shared_ptr<const BoundaryConditionManager<dim, number>> heat_bc_manager,
107 const PeriodicBoundaryConditions<dim> &periodic_bc_in,
108 const HeatData<number> &heat_data_in,
109 const MaterialData<number> &material_data_in,
110 const Evaporation::EvaporationData<number> &evapor_data_in,
111 const TimeIntegration::TimeIterator<number> &time_iterator_in,
112 const unsigned int heat_cut_dof_idx_in,
113 const unsigned int heat_cut_no_bc_dof_idx_in,
114 const unsigned int heat_continuous_no_bc_dof_idx_in,
115 const unsigned int heat_quad_idx_in,
116 const bool do_solidification_in,
117 const unsigned int ls_dof_idx_in,
118 const VectorType &level_set_in,
119 const unsigned int vel_dof_idx_in = -1,
120 const VectorType *velocity_in = nullptr,
121 const VectorType *velocity_old_in = nullptr);
122
123 void
125 std::shared_ptr<const dealii::Function<dim, number>> laser_intensity_profile_in,
126 const dealii::Tensor<1, dim, number> &laser_direction_in);
127
134 void
136 const std::function<void()> &setup_dof_system_in,
137 const AttachDoFHandlerAndVectorsType<dim, VectorType> attach_vectors_in = {});
138
139 private:
140 void
141 classify_cells() const;
142
143 void
145
146 void
148
149 public:
150 void
151 distribute_dofs(ScratchData<dim, dim, number> &mutable_scratch_data) const override;
152
153 void
154 setup_constraints(ScratchData<dim, dim, number> &mutable_scratch_data) const override;
155
156 void
157 reinit() override;
158
159 void
160 set_initial_condition(const dealii::Function<dim> &initial_temperature) override;
161
162 void
163 distribute_constraints() override;
164
165 void
166 init_time_advance() override;
167
168 void
169 solve() override;
170
171 number
172 compute_L2_norm() const;
173
174 void
176 const VectorType &distance,
177 const BlockVectorType &normal_vector,
178 const LevelSet::NearestPointData<double> &nearest_point_data) override;
179
180 void
182
186 void
187 attach_vectors(std::vector<VectorType *> &vectors) override;
188
192 void
193 attach_output_vectors(GenericDataOut<dim, number> &data_out) const override;
194
195 void
197
198 /*
199 * getters
200 */
201 const VectorType &
202 get_temperature() const override;
203
204 VectorType &
205 get_temperature() override;
206
207 const VectorType &
208 get_interface_temperature() const override;
209
210 VectorType &
211 get_interface_temperature() override;
212
213 const VectorType &
214 get_heat_source() const override;
215
216 VectorType &
217 get_heat_source() override;
218
219 private:
220 void
221 setup_newton();
222
223 void
224 update_ghost_values() const;
225 };
226} // namespace MeltPoolDG::Heat
Definition boundary_conditions.hpp:17
Operator for the solution transfer in moving boundary/interface simulations.
Definition solution_transfer.hpp:38
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Definition heat_cut_operation.hpp:41
std::function< void()> setup_dof_system
Definition heat_cut_operation.hpp:76
const VectorType & level_set
Definition heat_cut_operation.hpp:67
const VectorType & get_heat_source() const override
Definition heat_cut_operation.cpp:636
void register_lambdas_for_solution_transfer(const std::function< void()> &setup_dof_system_in, const AttachDoFHandlerAndVectorsType< dim, VectorType > attach_vectors_in={})
Definition heat_cut_operation.cpp:164
const unsigned int heat_cut_dof_idx
Definition heat_cut_operation.hpp:54
number compute_L2_norm() const
Definition heat_cut_operation.cpp:456
void compute_intersected_quadrature()
Definition heat_cut_operation.cpp:250
void distribute_dofs(ScratchData< dim, dim, number > &mutable_scratch_data) const override
Definition heat_cut_operation.cpp:271
VectorType interface_temperature
Definition heat_cut_operation.hpp:61
dealii::NonMatching::MappingInfo< dim, dim, dealii::VectorizedArray< number > > mapping_info_surface
Definition heat_cut_operation.hpp:80
void solve() override
Definition heat_cut_operation.cpp:430
void setup_constraints(ScratchData< dim, dim, number > &mutable_scratch_data) const override
Definition heat_cut_operation.cpp:315
std::unique_ptr< LevelSet::Tools::NearestPoint< dim, double > > nearest_point_search
Definition heat_cut_operation.hpp:91
const PeriodicBoundaryConditions< dim > & periodic_bc
Definition heat_cut_operation.hpp:48
void setup_newton()
Definition heat_cut_operation.cpp:377
void reinit() override
Definition heat_cut_operation.cpp:325
std::function< void(VectorType &)> reinit_vector
Definition heat_cut_operation.hpp:75
typename HeatOperationBase< dim, number >::VectorType VectorType
Definition heat_cut_operation.hpp:43
void update_ghost_values() const
Definition heat_cut_operation.cpp:513
CutUtil::SolutionTransferOperator< dim, number > cut_solution_transfer
Definition heat_cut_operation.hpp:74
VectorType volumetric_heat_source
Definition heat_cut_operation.hpp:63
void attach_vectors(std::vector< VectorType * > &vectors) override
Definition heat_cut_operation.cpp:527
NewtonRaphsonSolver< number, VectorType > newton
Definition heat_cut_operation.hpp:85
bool skip_classify_cells
Definition heat_cut_operation.hpp:101
std::unique_ptr< HeatCutOperator< dim, number > > heat_operator
Definition heat_cut_operation.hpp:87
const ScratchData< dim, dim, number > & scratch_data
Definition heat_cut_operation.hpp:46
const VectorType & get_temperature() const override
Definition heat_cut_operation.cpp:608
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier
Definition heat_cut_operation.hpp:71
AttachDoFHandlerAndVectorsType< dim, VectorType > attach_all_vectors
Definition heat_cut_operation.hpp:77
VectorType mc_level_set
Definition heat_cut_operation.hpp:70
Preconditioner< dim, VectorType, number > preconditioner
Definition heat_cut_operation.hpp:89
bool ready_to_generate_intersected_quadrature
Definition heat_cut_operation.hpp:99
std::shared_ptr< dealii::NonMatching::MeshClassifier< dim > > mesh_classifier_old
Definition heat_cut_operation.hpp:72
void distribute_constraints() override
Definition heat_cut_operation.cpp:372
const unsigned int heat_cut_no_bc_dof_idx
Definition heat_cut_operation.hpp:55
TimeIntegration::SolutionHistory< VectorType > solution_history
Definition heat_cut_operation.hpp:60
void attach_output_vectors_failed_step(GenericDataOut< dim, number > &data_out) const override
Definition heat_cut_operation.cpp:572
typename HeatOperationBase< dim, number >::BlockVectorType BlockVectorType
Definition heat_cut_operation.hpp:44
void compute_interface_temperature() override
Definition heat_cut_operation.cpp:488
const unsigned int heat_cont_no_bc_dof_idx
Definition heat_cut_operation.hpp:56
void adapt_to_new_interface_position()
Definition heat_cut_operation.cpp:190
void classify_cells() const
Definition heat_cut_operation.cpp:174
const unsigned int ls_dof_idx
Definition heat_cut_operation.hpp:66
void set_initial_condition(const dealii::Function< dim > &initial_temperature) override
Definition heat_cut_operation.cpp:348
bool ready_for_time_advance
Definition heat_cut_operation.hpp:94
void register_laser_intensity_function_and_direction(std::shared_ptr< const dealii::Function< dim, number > > laser_intensity_profile_in, const dealii::Tensor< 1, dim, number > &laser_direction_in)
Definition heat_cut_operation.cpp:154
void register_interface_projection_data(const VectorType &distance, const BlockVectorType &normal_vector, const LevelSet::NearestPointData< double > &nearest_point_data) override
Definition heat_cut_operation.cpp:470
const VectorType & get_interface_temperature() const override
Definition heat_cut_operation.cpp:622
const HeatData< number > & heat_data
Definition heat_cut_operation.hpp:49
void init_time_advance() override
Definition heat_cut_operation.cpp:406
const TimeIntegration::TimeIterator< number > & time_iterator
Definition heat_cut_operation.hpp:51
const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > dirichlet_bc
Definition heat_cut_operation.hpp:47
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const override
Definition heat_cut_operation.cpp:535
const unsigned int heat_quad_idx
Definition heat_cut_operation.hpp:58
std::vector< std::shared_ptr< dealii::NonMatching::MappingInfo< dim, dim, dealii::VectorizedArray< number > > > > mapping_info_cells
Definition heat_cut_operation.hpp:83
Definition heat_operation_base.hpp:18
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition heat_operation_base.hpp:20
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition heat_operation_base.hpp:21
Definition newton_raphson_solver.hpp:13
Definition preconditioner.hpp:42
Container for shared scratch data between operations/operators.
Definition scratch_data.hpp:61
Definition solution_history.hpp:21
Definition time_iterator.hpp:15
Definition apparent_capacity.hpp:9
std::function< void(DoFHandlerAndVectorDataType< dim, VectorType > &)> AttachDoFHandlerAndVectorsType
Definition attach_vectors.hpp:21
Definition heat_data.hpp:18
Definition material_data.hpp:84
Definition periodic_boundary_conditions.hpp:11