include/meltpooldg/level_set/advection_diffusion_operation.hpp Source File

Developer Documentation: include/meltpooldg/level_set/advection_diffusion_operation.hpp Source File
Developer Documentation
advection_diffusion_operation.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/lac/generic_linear_algebra.h>
4
15
17{
18 template <int dim, typename number>
20 {
21 private:
22 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
23 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
24 using SparseMatrixType = dealii::TrilinosWrappers::SparseMatrix;
25
26 public:
27 /*
28 * All the necessary parameters are stored in this struct.
29 */
30
32 const ScratchData<dim, dim, number> &scratch_data_in,
33 const std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>>
34 &dirichlet_bc_in,
35 const AdvectionDiffusionData<number> &advec_diff_data_in,
37 const unsigned int advec_diff_dof_idx_in,
38 const unsigned int advec_diff_hanging_nodes_dof_idx_in,
39 const unsigned int advec_diff_quad_idx_in);
40
49 void
50 set_initial_condition(const dealii::Function<dim> &initial_field_function) override;
51
61 virtual void
63 const unsigned int velocity_dof_idx) final;
64
73 virtual void
75 const std::shared_ptr<dealii::Function<dim, number>> &advection_velocity) final;
76
88 void
90 const std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>>
91 inflow_outflow_bc_);
92
105 void
107 ScratchData<dim, dim, number> &mutable_scratch_data,
108 const PeriodicBoundaryConditions<dim> &periodic_bc,
109 const std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>>
110 &dirichlet_bc_in) final;
111
118 void
119 reinit() override;
120
128 void
129 init_time_advance() override;
130
141 void
142 solve(const bool do_finish_time_step = true) override;
143
149 void
151 std::vector<dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) override;
152
160 void
161 attach_output_vectors(GenericDataOut<dim, number> &data_out) const override;
162
164 const dealii::LinearAlgebra::distributed::Vector<number> &
165 get_advected_field() const override;
166
168 dealii::LinearAlgebra::distributed::Vector<number> &
169 get_advected_field() override;
170
172 const dealii::LinearAlgebra::distributed::Vector<number> &
173 get_advected_field_old() const override;
174
176 dealii::LinearAlgebra::distributed::Vector<number> &
177 get_advected_field_old() override;
178
180 dealii::LinearAlgebra::distributed::Vector<number> &
181 get_user_rhs() override;
182
184 const dealii::LinearAlgebra::distributed::Vector<number> &
185 get_user_rhs() const override;
186
187 private:
193 void
195
204 void
206
211 void
213
216
218 const std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>>
220
226 std::unique_ptr<AdvectionDiffusionOperator<dim, number>> advec_diff_operator;
227
230 /*
231 * Based on the following indices the correct DoFHandler or quadrature rule from
232 * ScratchData<dim,dim,number> object is selected. This is important when
233 * ScratchData<dim,dim,number> holds multiple DoFHandlers, quadrature rules, etc.
234 */
235 const unsigned int advec_diff_dof_idx = 0;
236 const unsigned int advec_diff_quad_idx = 0;
237 const unsigned int advec_diff_hanging_nodes_dof_idx = dealii::numbers::invalid_unsigned_int;
239 std::shared_ptr<dealii::Function<dim, number>> advection_velocity_function = nullptr;
240
242 const dealii::LinearAlgebra::distributed::Vector<number> *advection_velocity = nullptr;
243
245 unsigned int velocity_dof_idx = dealii::numbers::invalid_unsigned_int;
246
249
251 std::unique_ptr<Predictor<VectorType, number>> predictor;
252
255
258
261
264
266 bool update_ghosts = false;
267
269 std::map<dealii::types::boundary_id, std::shared_ptr<dealii::Function<dim>>> inflow_outflow_bc;
270
277 std::pair<std::vector<unsigned int>, std::vector<number>> inflow_constraints_indices_and_values;
278 };
279} // namespace MeltPoolDG::LevelSet
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
Definition advection_diffusion_operation_base.hpp:13
Definition advection_diffusion_operation.hpp:20
VectorType rhs
System right-hand side.
Definition advection_diffusion_operation.hpp:260
const TimeIntegration::TimeIterator< number > & time_iterator
Time iterator reference.
Definition advection_diffusion_operation.hpp:229
std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > inflow_outflow_bc
Inflow/outflow boundary data: boundary id → Dirichlet value function.
Definition advection_diffusion_operation.hpp:269
std::pair< std::vector< unsigned int >, std::vector< number > > inflow_constraints_indices_and_values
Indices/values used to enforce inflow constraints in matrix-free mode.
Definition advection_diffusion_operation.hpp:277
VectorType solution_advected_field_extrapolated
Extrapolated advected field from the predictor.
Definition advection_diffusion_operation.hpp:254
const unsigned int advec_diff_quad_idx
Definition advection_diffusion_operation.hpp:236
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition advection_diffusion_operation.hpp:23
void attach_vectors(std::vector< dealii::LinearAlgebra::distributed::Vector< number > * > &vectors) override
Register internal solution vectors for adaptive mesh refinement.
Definition advection_diffusion_operation.cpp:545
const unsigned int advec_diff_dof_idx
Definition advection_diffusion_operation.hpp:235
dealii::LinearAlgebra::distributed::Vector< number > & get_user_rhs() override
Get a mutable reference to the user-supplied RHS vector.
Definition advection_diffusion_operation.cpp:531
void attach_output_vectors(GenericDataOut< dim, number > &data_out) const override
Attach output fields to a GenericDataOut object.
Definition advection_diffusion_operation.cpp:553
void create_inflow_outflow_constraints()
Build inflow constraints (matrix-free mode) and pass indices to the operator.
Definition advection_diffusion_operation.cpp:371
const ScratchData< dim, dim, number > & scratch_data
Read-only access to FE, DoFHandlers, quadratures, MF data, timers, etc.
Definition advection_diffusion_operation.hpp:215
void reinit() override
Allocate and (re)initialize vectors and the underlying operator.
Definition advection_diffusion_operation.cpp:138
void solve(const bool do_finish_time_step=true) override
Solve the linear system for the current time step.
Definition advection_diffusion_operation.cpp:229
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition advection_diffusion_operation.hpp:22
const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > & dirichlet_bc
Dirichlet BC map provided at construction.
Definition advection_diffusion_operation.hpp:219
void set_initial_condition(const dealii::Function< dim > &initial_field_function) override
Set the initial condition for the advected field.
Definition advection_diffusion_operation.cpp:76
Preconditioner< dim, VectorType, number > preconditioner
Preconditioner wrapper (matrix-based or matrix-free).
Definition advection_diffusion_operation.hpp:257
virtual void set_advection_velocity_function(const std::shared_ptr< dealii::Function< dim, number > > &advection_velocity) final
Provide the advection velocity via a (possibly time-dependent) function.
Definition advection_diffusion_operation.cpp:106
void commit_solution_history_and_compute_predictor()
Compute the predictor solution for the current time step and commit time history.
Definition advection_diffusion_operation.cpp:185
const dealii::LinearAlgebra::distributed::Vector< number > * advection_velocity
Optional pointer to an externally provided velocity vector.
Definition advection_diffusion_operation.hpp:242
std::unique_ptr< Predictor< VectorType, number > > predictor
Predictor used to extrapolate the solution for the current step.
Definition advection_diffusion_operation.hpp:251
TimeIntegration::SolutionHistory< VectorType > solution_history
History of solution vectors used by the predictor and time integrator.
Definition advection_diffusion_operation.hpp:248
unsigned int velocity_dof_idx
DoFHandler index corresponding to advection_velocity.
Definition advection_diffusion_operation.hpp:245
dealii::TrilinosWrappers::SparseMatrix SparseMatrixType
Definition advection_diffusion_operation.hpp:24
const dealii::LinearAlgebra::distributed::Vector< number > & get_advected_field_old() const override
Get the most recent old advected field (const).
Definition advection_diffusion_operation.cpp:517
bool update_ghosts
Whether we updated ghost values for the old solution in init_time_advance().
Definition advection_diffusion_operation.hpp:266
void init_time_advance() override
Prepare a time step: commit history, update constraints/BCs, build RHS, compute predictor.
Definition advection_diffusion_operation.cpp:162
void create_operator()
Instantiate and configure the underlying operator and preconditioner.
Definition advection_diffusion_operation.cpp:48
std::unique_ptr< AdvectionDiffusionOperator< dim, number > > advec_diff_operator
Concrete advection–diffusion operator.
Definition advection_diffusion_operation.hpp:226
VectorType user_rhs
User-supplied right-hand side (added to the system RHS).
Definition advection_diffusion_operation.hpp:263
std::shared_ptr< dealii::Function< dim, number > > advection_velocity_function
Optional velocity function (alternative to advection_velocity).
Definition advection_diffusion_operation.hpp:239
const dealii::LinearAlgebra::distributed::Vector< number > & get_advected_field() const override
Get the current advected field (const).
Definition advection_diffusion_operation.cpp:503
virtual void set_advection_velocity(const VectorType &advection_velocity, const unsigned int velocity_dof_idx) final
Provide the advection velocity from an existing vector.
Definition advection_diffusion_operation.cpp:96
void setup_constraints(ScratchData< dim, dim, number > &mutable_scratch_data, const PeriodicBoundaryConditions< dim > &periodic_bc, const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > &dirichlet_bc_in) final
Build and merge Dirichlet, hanging-node, and periodic constraints into an AffineConstraints object.
Definition advection_diffusion_operation.cpp:122
const unsigned int advec_diff_hanging_nodes_dof_idx
Definition advection_diffusion_operation.hpp:237
void set_inflow_outflow_bc(const std::map< dealii::types::boundary_id, std::shared_ptr< dealii::Function< dim > > > inflow_outflow_bc_)
Set inflow/outflow boundary data (matrix-free mode only).
Definition advection_diffusion_operation.cpp:114
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
This operation solves the reinitialization problem for a CG- or DG-FEM-based discrete level-set field...
Definition advection_DG_operation.hpp:20
Definition periodic_boundary_conditions.hpp:11