Matrix Free Solver 1.0.0
A matrix free solver for the Advection Diffusion Reaction problem implemented with deal.II
Loading...
Searching...
No Matches
DTR_mg.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/conditional_ostream.h>
4#include <deal.II/base/data_out_base.h>
5#include <deal.II/base/index_set.h>
6#include <deal.II/base/logstream.h>
7#include <deal.II/base/quadrature_lib.h>
8#include <deal.II/base/timer.h>
9#include <deal.II/base/parameter_handler.h>
10#include <deal.II/distributed/grid_refinement.h>
11#include <deal.II/distributed/tria.h>
12#include <deal.II/dofs/dof_tools.h>
13#include <deal.II/fe/fe_q.h>
14#include <deal.II/fe/fe_values.h>
15#include <deal.II/fe/mapping_q1.h>
16#include <deal.II/grid/grid_generator.h>
17#include <deal.II/grid/grid_refinement.h>
18#include <deal.II/grid/tria.h>
19#include <deal.II/lac/affine_constraints.h>
20#include <deal.II/lac/dynamic_sparsity_pattern.h>
21#include <deal.II/lac/sparsity_tools.h>
22#include <deal.II/lac/solver_cg.h>
23#include <deal.II/lac/solver_gmres.h>
24
25#include <deal.II/lac/generic_linear_algebra.h>
26
27#include <deal.II/multigrid/mg_coarse.h>
28#include <deal.II/multigrid/mg_constrained_dofs.h>
29#include <deal.II/multigrid/mg_matrix.h>
30#include <deal.II/multigrid/mg_smoother.h>
31#include <deal.II/multigrid/mg_tools.h>
32#include <deal.II/multigrid/mg_transfer.h>
33#include <deal.II/multigrid/multigrid.h>
34#include <deal.II/multigrid/mg_transfer_matrix_free.h>
35#include <deal.II/numerics/data_out.h>
36#include <deal.II/numerics/vector_tools.h>
37
38// The following files are used to assemble the error estimator like in step-12:
39#include <deal.II/fe/fe_interface_values.h>
40#include <deal.II/meshworker/mesh_loop.h>
41
42#include <filesystem>
43
44const std::string output_dir = "./output_mg/";
45
46#include "problem_data.hpp"
47
48using namespace dealii;
49
50namespace DTR_mg
51{
60 template <int dim>
61 class DTRProblem
62 {
63 public:
69 DTRProblem(unsigned int degree);
70
77 DTRProblem(unsigned int degree, std::ofstream& dimension_time_file);
78
87 void run(unsigned int n_initial_refinements = 3, unsigned int n_cycles = 9);
88
89 private:
90 using MatrixType = LinearAlgebraTrilinos::MPI::SparseMatrix;
91 using VectorType = LinearAlgebraTrilinos::MPI::Vector;
92
98 void setup_system();
99
105 void setup_multigrid();
106
110 void assemble_system();
111
115 void assemble_multigrid();
116
120 void solve();
121
127 void output_results(const unsigned int cycle);
131 MPI_Comm mpi_communicator;
132
136 ConditionalOStream pcout;
137
141 ConditionalOStream time_details;
142
146 double setup_time;
147
151 parallel::distributed::Triangulation<dim> triangulation;
152
156 const MappingQ1<dim> mapping;
157
161 const FE_Q<dim> fe;
162
166 DoFHandler<dim> dof_handler;
167
171 IndexSet locally_owned_dofs;
172
176 IndexSet locally_relevant_dofs;
177
181 AffineConstraints<double> constraints;
182
186 MatrixType system_matrix;
187
191 VectorType solution;
192
196 VectorType right_hand_side;
197
201 Vector<double> estimated_error_square_per_cell;
202
206 MGLevelObject<MatrixType> mg_matrix;
207
211 MGLevelObject<MatrixType> mg_interface_in;
212
216 MGConstrainedDoFs mg_constrained_dofs;
217
221 problem_data::DiffusionCoefficient<dim> diffusion_coefficient;
222
226 problem_data::TransportCoefficient<dim> transport_coefficient;
227
231 problem_data::ReactionCoefficient<dim> reaction_coefficient;
232
237
242
247
252
257 };
258}
259
260#include "DTR_mg.cpp"
The main class of the program.
Definition DTR_mg.hpp:56
DTRProblem(unsigned int degree)
Constructor.
Definition DTR_mg.cpp:9
void run(unsigned int n_initial_refinements=3, unsigned int n_cycles=9)
Run the problem.
Definition DTR_mg.cpp:421
Diffusion coefficient function.
Definition problem_data.hpp:19
Dirichlet boundary condition (left and bottom) function.
Definition problem_data.hpp:212
Dirichlet boundary condition (right and top) function.
Definition problem_data.hpp:250
Forcing term function.
Definition problem_data.hpp:174
Neumann boundary condition (right and top) function.
Definition problem_data.hpp:288
Neumann boundary condition (left and bottom) function.
Definition problem_data.hpp:326
Reaction coefficient function.
Definition problem_data.hpp:136
Transport coefficient function.
Definition problem_data.hpp:57
const std::string output_dir
Definition DTR_mg.hpp:44
Definition DTR_mg.hpp:51