include/meltpooldg/heat/heat_diffuse_operation.hpp Source File

Developer Documentation: include/meltpooldg/heat/heat_diffuse_operation.hpp Source File
Developer Documentation
heat_diffuse_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/point.h>
5#include <deal.II/base/types.h>
6
7#include <deal.II/dofs/dof_handler.h>
8
9#include <deal.II/grid/tria.h>
10
11#include <deal.II/lac/la_parallel_block_vector.h>
12
30
31#include <map>
32#include <memory>
33#include <tuple>
34#include <vector>
35
36
37namespace MeltPoolDG::Heat
38{
39 template <int dim, typename number>
40 class HeatDiffuseOperation : public HeatOperationBase<dim, number>
41 {
42 private:
44 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
45
47 const std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> dirichlet_bc;
57 const unsigned int heat_dof_idx;
58 const unsigned int heat_no_bc_dof_idx;
59 const unsigned int heat_quad_idx;
60
61 // These are the primary solution variables of this module, which will be also publicly
62 // accessible for output_results.
68
69 // for output only
71
72 std::unique_ptr<Predictor<VectorType, number>> predictor;
73
74 // optional flow velocity for internal convection
75 const unsigned int vel_dof_idx;
77
78 // optional level-set heaviside field for two phase flow
79 const unsigned int ls_dof_idx;
81
83
84 std::unique_ptr<HeatDiffuseMultiPhaseOperator<dim, number>> heat_operator;
85
87
88 // determine whether solution vectors are prepared for time advance
90
91 std::unique_ptr<LevelSet::Tools::NearestPoint<dim, double>> nearest_point_search;
92
93 public:
95 const ScratchData<dim, dim, number> &scratch_data_in,
96 const std::shared_ptr<const BoundaryConditionManager<dim, number>> heat_bc_manager,
97 const PeriodicBoundaryConditions<dim> &periodic_bc_in,
98 const HeatData<number> &heat_data_in,
99 const Material<number> &material,
101 unsigned int heat_dof_idx_in,
102 unsigned int heat_no_bc_dof_idx_in,
103 unsigned int heat_quad_idx_in,
104 unsigned int vel_dof_idx_in = 0,
105 const VectorType *velocity_in = nullptr,
106 unsigned int ls_dof_idx_in = 0,
107 const VectorType *level_set_as_heaviside_in = nullptr,
108 const bool do_solidifiaction = false);
109
110 void
111 register_evaporative_mass_flux(VectorType *evaporative_mass_flux_in,
112 const unsigned int evapor_mass_flux_dof_idx_in,
113 const Evaporation::EvaporationData<number> &evapor_data);
114
115 void
117 const std::vector<
118 std::tuple<const typename dealii::Triangulation<dim, dim>::cell_iterator /*cell*/,
119 std::vector<dealii::Point<dim>> /*quad_points*/,
120 std::vector<number> /*weights*/
121 >> &surface_mesh_info_in);
122
123 void
124 distribute_dofs(ScratchData<dim, dim, number> &mutable_scratch_data) const override;
125
126 void
127 setup_constraints(ScratchData<dim, dim, number> &mutable_scratch_data) const override;
128
129 void
130 set_initial_condition(const dealii::Function<dim> &initial_field_function_temperature) override;
131
132 void
133 reinit() override;
134
135 void
136 init_time_advance() override;
137
138 void
139 solve() override;
140
141 void
142 solve(const bool do_finish_time_step);
143
144 void
146
147 void
149 const VectorType &distance,
150 const BlockVectorType &normal_vector,
151 const LevelSet::NearestPointData<number> &nearest_point_data) override;
152
153 void
155
156 void
157 attach_vectors(std::vector<VectorType *> &vectors) override;
158
159 void
160 distribute_constraints() override;
161
162 void
163 attach_output_vectors(GenericDataOut<dim, number> &data_out) const override;
164
165 void
167
168 const VectorType &
169 get_temperature() const override;
170
171 VectorType &
172 get_temperature() override;
173
174 const VectorType &
175 get_interface_temperature() const override;
176
177 VectorType &
178 get_interface_temperature() override;
179
180 const VectorType &
181 get_heat_source() const override;
182
183 VectorType &
184 get_heat_source() override;
185
186 const VectorType &
187 get_user_rhs() const;
188
189 VectorType &
190 get_user_rhs();
191
192 private:
193 void
194 setup_newton();
195 };
196} // namespace MeltPoolDG::Heat
Definition boundary_conditions.hpp:17
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Definition heat_diffuse_operation.hpp:41
std::unique_ptr< Predictor< VectorType, number > > predictor
Definition heat_diffuse_operation.hpp:72
const VectorType & get_temperature() const override
Definition heat_diffuse_operation.cpp:424
std::unique_ptr< LevelSet::Tools::NearestPoint< dim, double > > nearest_point_search
Definition heat_diffuse_operation.hpp:91
void solve() override
Definition heat_diffuse_operation.cpp:256
TimeIntegration::SolutionHistory< VectorType > solution_history
Definition heat_diffuse_operation.hpp:63
void attach_output_vectors_failed_step(GenericDataOut< dim, number > &data_out) const override
Definition heat_diffuse_operation.cpp:409
const TimeIntegration::TimeIterator< number > & time_iterator
Definition heat_diffuse_operation.hpp:53
bool ready_for_time_advance
Definition heat_diffuse_operation.hpp:89
const ScratchData< dim, dim, number > & scratch_data
Definition heat_diffuse_operation.hpp:46
const unsigned int heat_no_bc_dof_idx
Definition heat_diffuse_operation.hpp:58
const PeriodicBoundaryConditions< dim > & periodic_bc
Definition heat_diffuse_operation.hpp:48
const VectorType & get_heat_source() const override
Definition heat_diffuse_operation.cpp:452
const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > dirichlet_bc
Definition heat_diffuse_operation.hpp:47
const VectorType & get_user_rhs() const
Definition heat_diffuse_operation.cpp:466
Preconditioner< dim, VectorType, number > preconditioner
Definition heat_diffuse_operation.hpp:86
VectorType interface_temperature
Definition heat_diffuse_operation.hpp:67
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition heat_diffuse_operation.hpp:44
void register_surface_mesh(const std::vector< std::tuple< const typename dealii::Triangulation< dim, dim >::cell_iterator, std::vector< dealii::Point< dim > >, std::vector< number > > > &surface_mesh_info_in)
Definition heat_diffuse_operation.cpp:136
VectorType predictor_buffer
Definition heat_diffuse_operation.hpp:64
void init_time_advance() override
Definition heat_diffuse_operation.cpp:215
std::unique_ptr< HeatDiffuseMultiPhaseOperator< dim, number > > heat_operator
Definition heat_diffuse_operation.hpp:84
void setup_constraints(ScratchData< dim, dim, number > &mutable_scratch_data) const override
Definition heat_diffuse_operation.cpp:162
void register_evaporative_mass_flux(VectorType *evaporative_mass_flux_in, const unsigned int evapor_mass_flux_dof_idx_in, const Evaporation::EvaporationData< number > &evapor_data)
Definition heat_diffuse_operation.cpp:120
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const override
Definition heat_diffuse_operation.cpp:365
void attach_vectors(std::vector< VectorType * > &vectors) override
Definition heat_diffuse_operation.cpp:341
const VectorType * level_set_as_heaviside
Definition heat_diffuse_operation.hpp:80
void reinit() override
Definition heat_diffuse_operation.cpp:193
const unsigned int heat_dof_idx
Definition heat_diffuse_operation.hpp:57
const unsigned int heat_quad_idx
Definition heat_diffuse_operation.hpp:59
const unsigned int vel_dof_idx
Definition heat_diffuse_operation.hpp:75
const unsigned int ls_dof_idx
Definition heat_diffuse_operation.hpp:79
NewtonRaphsonSolver< number, VectorType > newton
Definition heat_diffuse_operation.hpp:82
typename HeatOperationBase< dim, number >::VectorType VectorType
Definition heat_diffuse_operation.hpp:43
const VectorType * velocity
Definition heat_diffuse_operation.hpp:76
void setup_newton()
Definition heat_diffuse_operation.cpp:84
const VectorType & get_interface_temperature() const override
Definition heat_diffuse_operation.cpp:438
VectorType heat_source
Definition heat_diffuse_operation.hpp:65
VectorType user_rhs
Definition heat_diffuse_operation.hpp:66
void finish_time_advance()
Definition heat_diffuse_operation.cpp:293
void distribute_constraints() override
Definition heat_diffuse_operation.cpp:355
void compute_interface_temperature() override
Definition heat_diffuse_operation.cpp:320
const HeatData< number > & heat_data
Definition heat_diffuse_operation.hpp:52
void set_initial_condition(const dealii::Function< dim > &initial_field_function_temperature) override
Definition heat_diffuse_operation.cpp:172
VectorType user_rhs_projected
Definition heat_diffuse_operation.hpp:70
void register_interface_projection_data(const VectorType &distance, const BlockVectorType &normal_vector, const LevelSet::NearestPointData< number > &nearest_point_data) override
Definition heat_diffuse_operation.cpp:302
void distribute_dofs(ScratchData< dim, dim, number > &mutable_scratch_data) const override
Definition heat_diffuse_operation.cpp:148
Definition heat_operation_base.hpp:18
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition heat_operation_base.hpp:20
Definition material.hpp:96
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
Definition heat_data.hpp:18
Definition periodic_boundary_conditions.hpp:11