applications/mp-heat-transfer/heat_transfer_application.hpp Source File

Developer Documentation: applications/mp-heat-transfer/heat_transfer_application.hpp Source File
Developer Documentation
heat_transfer_application.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/function.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
21
22#include <functional>
23#include <memory>
24
26
27
28namespace MeltPoolDG::Heat
29{
30 template <int dim, typename number>
32 {
33 private:
35 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
36 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
37
38 const std::unique_ptr<CaseType> simulation_case;
39
43
44 std::shared_ptr<TimeIntegration::TimeIterator<number>> time_iterator;
45 dealii::DoFHandler<dim> dof_handler;
46 dealii::DoFHandler<dim> dof_handler_velocity;
47 dealii::DoFHandler<dim> dof_handler_level_set;
48
49 dealii::AffineConstraints<number> heat_dirichlet_constraints;
50 dealii::AffineConstraints<number> heat_hanging_nodes_constraints;
51 dealii::AffineConstraints<number> velocity_hanging_nodes_constraints;
52 dealii::AffineConstraints<number> level_set_hanging_nodes_constraints;
53
54 unsigned int heat_dof_idx;
55 unsigned int heat_no_bc_dof_idx;
56 unsigned int heat_quad_idx;
57 unsigned int velocity_dof_idx;
58 unsigned int level_set_dof_idx;
59
60 // optional DoFHandler index for the HeatCutOperation's continuous DoFs
61 // default value is invalid so we don't accidentally use a different DoFHandler
63
64 std::shared_ptr<ScratchData<dim, dim, number>> scratch_data;
65 std::shared_ptr<HeatOperationBase<dim, number>> heat_operation;
66 std::shared_ptr<Material<number>> material;
67 std::shared_ptr<Postprocessor<dim, number>> post_processor;
68
69 std::shared_ptr<dealii::Function<dim>> velocity_field_function;
70 std::shared_ptr<dealii::Function<dim>> heaviside_field_function;
71 std::shared_ptr<dealii::Function<dim>> level_set_field_function;
72
73 std::shared_ptr<LaserOperation<dim, number>> laser_operation;
74
75 // AMR
78 std::function<void()> amr_post = {};
79
80 public:
81 HeatTransferApplication(std::unique_ptr<CaseType> simulation_case)
83 {}
84
85 void
86 run();
87
88 private:
89 /*
90 * This function initials the relevant scratch data
91 * for the computation of the level set problem
92 */
93 void
94 initialize();
95
96 void
98
99 void
101 unsigned dof_idx,
102 dealii::Function<dim> &field_function);
103
104 /*
105 * perform output of results
106 */
107 void
108 output_results(const bool output_not_converged = false);
109 /*
110 * collect all relevant output data
111 */
112 void
114 /*
115 * perform adaptive mesh refinement
116 */
117 void
118 refine_mesh(const bool is_initial_solution = false);
119 };
120} // namespace MeltPoolDG::Heat
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Definition heat_transfer_application.hpp:32
std::shared_ptr< dealii::Function< dim > > heaviside_field_function
Definition heat_transfer_application.hpp:70
void refine_mesh(const bool is_initial_solution=false)
Definition heat_transfer_application.cpp:601
unsigned int heat_no_bc_dof_idx
Definition heat_transfer_application.hpp:55
void output_results(const bool output_not_converged=false)
Definition heat_transfer_application.cpp:537
unsigned int level_set_dof_idx
Definition heat_transfer_application.hpp:58
dealii::DoFHandler< dim > dof_handler_velocity
Definition heat_transfer_application.hpp:46
std::shared_ptr< HeatOperationBase< dim, number > > heat_operation
Definition heat_transfer_application.hpp:65
TimeIntegration::SolutionHistory< VectorType > velocity_hist
Definition heat_transfer_application.hpp:40
HeatTransferApplication(std::unique_ptr< CaseType > simulation_case)
Definition heat_transfer_application.hpp:81
unsigned int heat_continuous_no_bc_dof_idx
Definition heat_transfer_application.hpp:62
dealii::AffineConstraints< number > velocity_hanging_nodes_constraints
Definition heat_transfer_application.hpp:51
void compute_field_vector(VectorType &vector, unsigned dof_idx, dealii::Function< dim > &field_function)
Definition heat_transfer_application.cpp:471
HeatTransferCase< dim, number > CaseType
Definition heat_transfer_application.hpp:34
std::shared_ptr< TimeIntegration::TimeIterator< number > > time_iterator
Definition heat_transfer_application.hpp:44
dealii::DoFHandler< dim > dof_handler_level_set
Definition heat_transfer_application.hpp:47
std::shared_ptr< Material< number > > material
Definition heat_transfer_application.hpp:66
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition heat_transfer_application.hpp:36
unsigned int velocity_dof_idx
Definition heat_transfer_application.hpp:57
unsigned int heat_dof_idx
Definition heat_transfer_application.hpp:54
void initialize()
Definition heat_transfer_application.cpp:144
void setup_dof_system()
Definition heat_transfer_application.cpp:486
std::shared_ptr< Postprocessor< dim, number > > post_processor
Definition heat_transfer_application.hpp:67
dealii::DoFHandler< dim > dof_handler
Definition heat_transfer_application.hpp:45
unsigned int heat_quad_idx
Definition heat_transfer_application.hpp:56
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition heat_transfer_application.hpp:35
std::shared_ptr< ScratchData< dim, dim, number > > scratch_data
Definition heat_transfer_application.hpp:64
std::function< void()> amr_post
Definition heat_transfer_application.hpp:78
VectorType level_set
Definition heat_transfer_application.hpp:42
AMR::MarkCellsForRefinementType< dim > mark_cells_for_refinement
Definition heat_transfer_application.hpp:76
VectorType level_set_as_heaviside
Definition heat_transfer_application.hpp:41
dealii::AffineConstraints< number > heat_hanging_nodes_constraints
Definition heat_transfer_application.hpp:50
std::shared_ptr< dealii::Function< dim > > level_set_field_function
Definition heat_transfer_application.hpp:71
dealii::AffineConstraints< number > level_set_hanging_nodes_constraints
Definition heat_transfer_application.hpp:52
dealii::AffineConstraints< number > heat_dirichlet_constraints
Definition heat_transfer_application.hpp:49
AttachDoFHandlerAndVectorsType< dim, VectorType > attach_vectors_for_amr
Definition heat_transfer_application.hpp:77
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const
Definition heat_transfer_application.cpp:566
std::shared_ptr< LaserOperation< dim, number > > laser_operation
Definition heat_transfer_application.hpp:73
std::shared_ptr< dealii::Function< dim > > velocity_field_function
Definition heat_transfer_application.hpp:69
void run()
Definition heat_transfer_application.cpp:46
const std::unique_ptr< CaseType > simulation_case
Definition heat_transfer_application.hpp:38
Definition heat_transfer_case.hpp:101
Definition solution_history.hpp:21
std::function< bool(dealii::Triangulation< dim > &)> MarkCellsForRefinementType
Definition amr.hpp:21
Definition apparent_capacity.hpp:9
std::function< void(DoFHandlerAndVectorDataType< dim, VectorType > &)> AttachDoFHandlerAndVectorsType
Definition attach_vectors.hpp:21