3#ifdef MPDG_ENABLE_ADAFLO
5# include <deal.II/lac/generic_linear_algebra.h>
14# include <adaflo/diagonal_preconditioner.h>
15# include <adaflo/level_set_okz_advance_concentration.h>
16# include <adaflo/level_set_okz_preconditioner.h>
20 template <
int dim,
typename number>
21 class AdvectionDiffusionOperationAdaflo :
public AdvectionDiffusionOperationBase<dim, number>
24 using VectorType = dealii::LinearAlgebra::distributed::Vector<number>;
25 using BlockVectorType = dealii::LinearAlgebra::distributed::BlockVector<number>;
31 AdvectionDiffusionOperationAdaflo(
32 const ScratchData<dim, dim, number> &scratch_data,
33 const TimeIntegration::TimeIterator<number> &time_iterator,
34 const int advec_diff_zero_dirichlet_dof_idx,
35 const int advec_diff_dirichlet_dof_idx,
36 const int advec_diff_hanging_nodes_dof_idx,
37 const int advec_diff_quad_idx,
38 const TimeIntegration::TimeSteppingData<number> &time_stepping,
39 const AdvectionDiffusionData<number> &ls,
40 const BoundaryConditionManager<dim, number> &bc);
49 set_initial_condition(const
dealii::Function<dim> &initial_field_function) final;
52 set_advection_velocity(const VectorType &advection_velocity_in,
53 const
unsigned int velocity_dof_idx_in) final;
56 set_advection_velocity_function(
57 const std::shared_ptr<
dealii::Function<dim>> &advection_velocity) final;
61 ScratchData<dim, dim, number> &mutable_scratch_data,
62 const PeriodicBoundaryConditions<dim> & ,
63 const std::map<
dealii::types::boundary_id, std::shared_ptr<
dealii::Function<dim>>>
64 &dirichlet_bc_in) final;
67 init_time_advance() final;
73 solve(const
bool do_finish_time_step = true) final;
75 const
dealii::LinearAlgebra::distributed::Vector<number> &
76 get_advected_field() const final;
78 dealii::LinearAlgebra::distributed::Vector<number> &
79 get_advected_field() final;
81 dealii::LinearAlgebra::distributed::Vector<number> &
84 const
dealii::LinearAlgebra::distributed::Vector<number> &
85 get_user_rhs() const final;
89 std::vector<
dealii::LinearAlgebra::distributed::Vector<number> *> &vectors) final;
92 attach_output_vectors(GenericDataOut<dim, number> &data_out) const final;
94 const
dealii::LinearAlgebra::distributed::Vector<number> &
95 get_advected_field_old() const final;
97 dealii::LinearAlgebra::distributed::Vector<number> &
98 get_advected_field_old() final;
100 const
dealii::LinearAlgebra::distributed::Vector<number> &
101 get_advected_field_old_old() const;
105 set_adaflo_parameters(const TimeIntegration::TimeSteppingData<number> &time_stepping,
106 const AdvectionDiffusionData<number> &ls,
107 int advec_diff_dof_idx,
108 int advec_diff_quad_idx);
114 update_velocity_history(
bool initial_step = false);
117 initialize_vectors();
119 const ScratchData<dim, dim, number> &scratch_data;
120 const TimeIntegration::TimeIterator<number> &time_iterator;
124 VectorType advected_field;
125 VectorType advected_field_old;
126 VectorType advected_field_old_old;
130 VectorType increment;
136 const
dealii::LinearAlgebra::distributed::Vector<number> *advection_velocity =
nullptr;
137 VectorType velocity_vec;
138 VectorType velocity_vec_old;
139 VectorType velocity_vec_old_old;
143 adaflo::LevelSetOKZSolverAdvanceConcentrationBoundaryDescriptor<dim> bcs;
147 adaflo::LevelSetOKZSolverAdvanceConcentrationParameter adaflo_params;
152 std::shared_ptr<adaflo::LevelSetOKZSolverAdvanceConcentration<dim>> advec_diff_operation;
157 number global_max_velocity;
161 adaflo::DiagonalPreconditioner<number> preconditioner;
162 const ConditionalOStream pcout;
166 const
unsigned int dirichlet_dof_idx =
dealii::numbers::invalid_unsigned_int;
167 const
unsigned int hanging_nodes_dof_idx =
dealii::numbers::invalid_unsigned_int;
This operation solves the reinitialization problem for a CG- or DG-FEM-based discrete level-set field...
Definition advection_DG_operation.hpp:20
dealii::LinearAlgebra::distributed::BlockVector< number > BlockVectorType
Definition utilities_matrixfree.hpp:17
dealii::LinearAlgebra::distributed::Vector< number > VectorType
Definition utilities_matrixfree.hpp:15
Definition dealii_tensor.hpp:10