include/meltpooldg/flow/adaflo_wrapper.hpp Source File

Developer Documentation: include/meltpooldg/flow/adaflo_wrapper.hpp Source File
Developer Documentation
adaflo_wrapper.hpp
Go to the documentation of this file.
1#pragma once
2
3#ifdef MPDG_ENABLE_ADAFLO
4
5# include <deal.II/base/function.h>
6# include <deal.II/base/quadrature.h>
7# include <deal.II/base/tensor.h>
8# include <deal.II/base/timer.h>
9# include <deal.II/base/vectorization.h>
10
11# include <deal.II/dofs/dof_handler.h>
12
13# include <deal.II/grid/tria.h>
14
15# include <deal.II/lac/affine_constraints.h>
16# include <deal.II/lac/generic_linear_algebra.h>
17# include <deal.II/lac/la_parallel_vector.h>
18
29
30# include <adaflo/navier_stokes.h>
31# include <adaflo/parameters.h>
32
33# include <functional>
34# include <memory>
35# include <string>
36# include <vector>
37
38namespace MeltPoolDG::Flow
39{
51 template <int dim, typename number>
52 class AdafloWrapper : public IncompressibleFlowOperationBase<dim, number>
53 {
54 public:
55 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
56
70 AdafloWrapper(ScratchData<dim, dim, number> &scratch_data,
71 const std::shared_ptr<const SimulationCaseBase<dim, number>> simulation_case,
72 const AdafloWrapperParameters<number> &adaflo_wrapper_params,
73 const TimeIntegration::TimeIterator<number> &time_iterator,
74 const bool do_evaporative_mass_flux);
75
89 void
90 set_initial_condition(const dealii::Function<dim> &initial_field_function_velocity) override;
91
101 // TODO: Give this function a reasonable name
102 void
103 reinit_1();
104
113 // TODO: Give this function a reasonable name
114 void
115 reinit_2();
116
125 // TODO: Give this function a reasonable name
126 void
127 reinit_3();
128
138 void
139 init_time_advance() override;
140
159 void
160 solve() override;
161
181 void
182 set_face_average_density_augmented_taylor_hood(const Material<number> &material,
183 const VectorType &ls_as_heaviside,
184 const unsigned int ls_dof_idx,
185 const VectorType *temperature = nullptr,
186 unsigned int temp_dof_idx = -1);
187
191 const dealii::LinearAlgebra::distributed::Vector<number> &
192 get_velocity() const override;
193
197 dealii::LinearAlgebra::distributed::Vector<number> &
198 get_velocity() override;
199
203 const dealii::LinearAlgebra::distributed::Vector<number> &
204 get_velocity_old() const override;
205
209 const dealii::LinearAlgebra::distributed::Vector<number> &
210 get_velocity_old_old() const;
211
215 const dealii::DoFHandler<dim> &
216 get_dof_handler_velocity() const override;
217
221 const unsigned int &
222 get_dof_handler_idx_velocity() const override;
223
227 const unsigned int &
228 get_dof_handler_idx_hanging_nodes_velocity() const override;
229
233 const unsigned int &
234 get_quad_idx_velocity() const override;
235
239 const unsigned int &
240 get_quad_idx_pressure() const override;
241
245 const dealii::AffineConstraints<number> &
246 get_constraints_velocity() const override;
247
251 dealii::AffineConstraints<number> &
252 get_constraints_velocity() override;
253
257 const dealii::AffineConstraints<number> &
258 get_hanging_node_constraints_velocity() const override;
259
263 const dealii::LinearAlgebra::distributed::Vector<number> &
264 get_pressure() const override;
265
269 dealii::LinearAlgebra::distributed::Vector<number> &
270 get_pressure() override;
271
275 const dealii::LinearAlgebra::distributed::Vector<number> &
276 get_pressure_old() const;
277
281 const dealii::LinearAlgebra::distributed::Vector<number> &
282 get_pressure_old_old() const;
283
287 const dealii::DoFHandler<dim> &
288 get_dof_handler_pressure() const override;
289
293 const unsigned int &
294 get_dof_handler_idx_pressure() const override;
295
299 const dealii::AffineConstraints<number> &
300 get_constraints_pressure() const override;
301
305 dealii::AffineConstraints<number> &
306 get_constraints_pressure() override;
307
311 const dealii::AffineConstraints<number> &
312 get_hanging_node_constraints_pressure() const override;
313
319 void
320 set_force_rhs(const dealii::LinearAlgebra::distributed::Vector<number> &vec) override;
321
327 void
328 set_mass_balance_rhs(const dealii::LinearAlgebra::distributed::Vector<number> &vec) override;
329
339 void
340 set_user_defined_material(std::function<dealii::Tensor<2, dim, dealii::VectorizedArray<number>>(
341 const dealii::Tensor<2, dim, dealii::VectorizedArray<number>> &,
342 const unsigned int,
343 const unsigned int,
344 const bool)> my_user_defined_material) override;
345
354 dealii::VectorizedArray<number> &
355 get_density(const unsigned int cell, const unsigned int q) override;
356
365 const dealii::VectorizedArray<number> &
366 get_density(const unsigned int cell, const unsigned int q) const override;
367
376 dealii::VectorizedArray<number> &
377 get_viscosity(const unsigned int cell, const unsigned int q) override;
378
387 const dealii::VectorizedArray<number> &
388 get_viscosity(const unsigned int cell, const unsigned int q) const override;
389
398 dealii::VectorizedArray<number> &
399 get_damping(const unsigned int cell, const unsigned int q) override;
400
409 const dealii::VectorizedArray<number> &
410 get_damping(const unsigned int cell, const unsigned int q) const override;
411
421 void
422 attach_vectors_u(
423 std::vector<dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) override;
424
434 void
435 attach_vectors_p(
436 std::vector<dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) override;
437
452 void
453 distribute_constraints() override;
454
471 void
472 attach_output_vectors(GenericDataOut<dim, number> &data_out) const override;
473
489 void
490 attach_output_vectors_failed_step(GenericDataOut<dim, number> &data_out) const override;
491
501 void
502 set_face_average_density(const typename dealii::Triangulation<dim>::cell_iterator &cell,
503 const unsigned int face,
504 const number density);
505
514 const dealii::Quadrature<dim> &
515 get_face_center_quad();
516
524 void
525 synchronize_time_stepping();
526
527 private:
529 ScratchData<dim, dim, number> &scratch_data;
530
532 dealii::TimerOutput timer;
533
535 std::unique_ptr<adaflo::NavierStokes<dim>> navier_stokes;
536
538 std::unique_ptr<dealii::Quadrature<dim>> face_center_quad;
539
541 const adaflo::FlowParameters &adaflo_params;
542
544 const bool do_evaporative_mass_flux;
545
547 const TimeIntegration::TimeIterator<number> &time_iterator;
548
550 unsigned int dof_index_u;
551 unsigned int dof_index_p;
552 unsigned int dof_index_hanging_nodes_u;
553 unsigned int dof_index_parameters;
554
556 unsigned int quad_index_u;
557 unsigned int quad_index_p;
558
560 dealii::DoFHandler<dim> dof_handler_parameters;
561
563 dealii::AffineConstraints<number> constraints_parameters;
564
566 mutable VectorType force_rhs_velocity_projected;
567 mutable VectorType mass_balance_source_term_projected;
568 mutable VectorType density;
569 mutable VectorType viscosity;
570
572 bool ready_for_time_advance = false;
573
586 bool
587 time_stepping_synchronized();
588 };
589} // namespace MeltPoolDG::Flow
590#endif
Definition equation_of_state.hpp:17
@ density
Definition material.hpp:69
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition utilities_matrixfree.hpp:15