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.hpp
Go to the documentation of this file.
1#ifndef DTR_HPP
2#define DTR_HPP
3
4#include <deal.II/base/conditional_ostream.h>
5#include <deal.II/base/quadrature_lib.h>
6
7#include <deal.II/distributed/fully_distributed_tria.h>
8
9#include <deal.II/dofs/dof_handler.h>
10#include <deal.II/dofs/dof_tools.h>
11
12#include <deal.II/fe/fe_q.h>
13#include <deal.II/fe/fe_values.h>
14#include <deal.II/fe/mapping_q1.h>
15
16#include <deal.II/grid/grid_generator.h>
17#include <deal.II/grid/grid_in.h>
18#include <deal.II/grid/grid_out.h>
19#include <deal.II/grid/tria.h>
20#include <deal.II/grid/grid_tools.h>
21
22#include <deal.II/lac/dynamic_sparsity_pattern.h>
23#include <deal.II/lac/precondition.h>
24#include <deal.II/lac/solver_cg.h>
25#include <deal.II/lac/solver_gmres.h>
26#include <deal.II/lac/trilinos_precondition.h>
27#include <deal.II/lac/trilinos_sparse_matrix.h>
28#include <deal.II/lac/vector.h>
29
30#include <deal.II/numerics/data_out.h>
31#include <deal.II/numerics/matrix_tools.h>
32#include <deal.II/numerics/vector_tools.h>
33#include <deal.II/base/timer.h>
34
35#include <filesystem>
36#include <fstream>
37#include <iostream>
38
39#include "problem_data.hpp"
40
41static const std::string output_dir = "./output_mb/";
42
43using namespace dealii;
44
51class DTR
52{
53public:
55 static constexpr unsigned int dim = 2;
56
63 DTR(const unsigned int &r_, std::ofstream& dimension_time_file);
64
70 DTR(const unsigned int &r_);
71
79 void setup(unsigned int n_initial_refinements = 8);
80
84 void assemble();
85
89 void solve();
90
96 void output() const;
97
106 double compute_error(const VectorTools::NormType &norm_type) const;
107
108protected:
112 const std::string mesh_file_name;
113
117 const unsigned int r;
118
122 const unsigned int mpi_size;
123
127 const unsigned int mpi_rank;
128
133
138
143
148
153
158
163
168
172 parallel::fullydistributed::Triangulation<dim> mesh;
173
177 std::unique_ptr<FiniteElement<dim>> fe;
178
182 std::unique_ptr<Quadrature<dim>> quadrature;
183
187 std::unique_ptr<Quadrature<dim - 1>> quadrature_boundary;
188
192 DoFHandler<dim> dof_handler;
193
197 TrilinosWrappers::SparseMatrix system_matrix;
198
202 TrilinosWrappers::MPI::Vector system_rhs;
203
207 TrilinosWrappers::MPI::Vector solution;
208
212 ConditionalOStream pcout;
213
217 ConditionalOStream time_details;
218
223
228};
229
230#endif
Class managing the differential problem.
Definition DTR.hpp:52
ConditionalOStream time_details
Output stream for timing details.
Definition DTR.hpp:217
const unsigned int mpi_rank
Rank of this MPI process.
Definition DTR.hpp:127
problem_data::NeumannBC2< dim > neumannBC2
Neumann boundary conditions for the left and bottom boundaries.
Definition DTR.hpp:167
DTR(const unsigned int &r_)
Constructor without a file stream for timing information.
problem_data::NeumannBC1< dim > neumannBC1
Neumann boundary conditions for the right and top boundaries.
Definition DTR.hpp:162
problem_data::DirichletBC2< dim > dirichletBC2
Dirichlet boundary conditions for the right and top boundaries.
Definition DTR.hpp:157
double setup_time
Time taken for setup.
Definition DTR.hpp:227
void output() const
Output of the solution to a file.
Definition DTR.cpp:347
const unsigned int r
Polynomial degree.
Definition DTR.hpp:117
double compute_error(const VectorTools::NormType &norm_type) const
Compute the error of the solution.
Definition DTR.cpp:396
std::unique_ptr< FiniteElement< dim > > fe
Finite element space.
Definition DTR.hpp:177
const std::string mesh_file_name
Path to the mesh file.
Definition DTR.hpp:112
DTR(const unsigned int &r_, std::ofstream &dimension_time_file)
Constructor with a file stream for timing information.
problem_data::TransportCoefficient< dim > transport_coefficient
Transport coefficient.
Definition DTR.hpp:142
IndexSet locally_owned_dofs
Index set for locally owned degrees of freedom.
Definition DTR.hpp:222
problem_data::DirichletBC1< dim > dirichletBC1
Dirichlet boundary conditions for the left and bottom boundaries.
Definition DTR.hpp:152
void setup(unsigned int n_initial_refinements=8)
Initialization of the system.
Definition DTR.cpp:5
TrilinosWrappers::MPI::Vector solution
Solution vector.
Definition DTR.hpp:207
std::unique_ptr< Quadrature< dim > > quadrature
Quadrature formula for integration.
Definition DTR.hpp:182
ConditionalOStream pcout
Parallel output stream.
Definition DTR.hpp:212
TrilinosWrappers::MPI::Vector system_rhs
System right-hand side vector.
Definition DTR.hpp:202
void assemble()
Assembly of the system matrix and right-hand side vector.
Definition DTR.cpp:115
std::unique_ptr< Quadrature< dim - 1 > > quadrature_boundary
Quadrature formula for boundary integration.
Definition DTR.hpp:187
TrilinosWrappers::SparseMatrix system_matrix
System matrix.
Definition DTR.hpp:197
problem_data::ForcingTerm< dim > forcing_term
Forcing term.
Definition DTR.hpp:147
static constexpr unsigned int dim
Physical dimension (1D, 2D, 3D)
Definition DTR.hpp:55
void solve()
Solution of the linear system.
Definition DTR.cpp:314
const unsigned int mpi_size
Number of MPI processes.
Definition DTR.hpp:122
parallel::fullydistributed::Triangulation< dim > mesh
Triangulation object for managing the mesh.
Definition DTR.hpp:172
problem_data::ReactionCoefficient< dim > reaction_coefficient
Reaction coefficient.
Definition DTR.hpp:137
DoFHandler< dim > dof_handler
DoF handler for managing degrees of freedom.
Definition DTR.hpp:192
problem_data::DiffusionCoefficient< dim > diffusion_coefficient
Diffusion coefficient.
Definition DTR.hpp:132
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