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>
25#include <deal.II/lac/generic_linear_algebra.h>
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>
39#include <deal.II/fe/fe_interface_values.h>
40#include <deal.II/meshworker/mesh_loop.h>
46using namespace dealii;
51 const char bcs[4] = {
'Z',
'N',
'Z',
'N'};
63 const unsigned int = 0)
const override
76 Vector<double> &values)
const override
84 const unsigned int component = 0)
const override
99 const unsigned int = 0)
const override
111 const unsigned int = 0)
const override
113 return 1. - 2. * exp(p[0]);
120 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
122 return 2.*exp(p[1]) - 1.;
129 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
131 return 2.*exp(p[0]) - 1.;
138 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
140 return 2.*exp(p[0]) * (2.*exp(p[1]) - 1.);
147 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
149 return 2.*exp(p[1]) * (2.*exp(p[0]) - 1.);
156 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
158 return (2.*exp(p[0]) - 1.)*(2.*exp(p[1]) - 1.);
161 virtual Tensor<1, dim>
gradient(
const Point<dim> &p,
const unsigned int = 0)
const override
163 Tensor<1, dim> result;
165 result[0] = 2.*exp(p[0]) * (2.*exp(p[1]) - 1.);
166 result[1] = 2.*exp(p[1]) * (2.*exp(p[0]) - 1.);
173 DTRProblem(
unsigned int degree, std::ofstream& dimension_time_file);
174 void run(
unsigned int n_initial_refinements = 3,
unsigned int n_cycles = 9);
177 using MatrixType = LinearAlgebraTrilinos::MPI::SparseMatrix;
178 using VectorType = LinearAlgebraTrilinos::MPI::Vector;
181 void setup_multigrid();
182 void assemble_system();
183 void assemble_multigrid();
185 void output_results(
const unsigned int cycle);
187 MPI_Comm mpi_communicator;
188 ConditionalOStream pcout;
189 ConditionalOStream time_details;
194 parallel::distributed::Triangulation<dim> triangulation;
195 const MappingQ1<dim> mapping;
198 DoFHandler<dim> dof_handler;
200 IndexSet locally_owned_dofs;
201 IndexSet locally_relevant_dofs;
202 AffineConstraints<double> constraints;
204 MatrixType system_matrix;
206 VectorType right_hand_side;
207 Vector<double> estimated_error_square_per_cell;
209 MGLevelObject<MatrixType> mg_matrix;
210 MGLevelObject<MatrixType> mg_interface_in;
211 MGConstrainedDoFs mg_constrained_dofs;
virtual double value(const Point< dim > &, const unsigned int=0) const override
Definition DTR_mg.hpp:62
Definition DTR_mg.hpp:118
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR_mg.hpp:120
Definition DTR_mg.hpp:127
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR_mg.hpp:129
Definition DTR_mg.hpp:154
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR_mg.hpp:156
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int=0) const override
Definition DTR_mg.hpp:161
Definition DTR_mg.hpp:107
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR_mg.hpp:110
Definition DTR_mg.hpp:136
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR_mg.hpp:138
Definition DTR_mg.hpp:145
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR_mg.hpp:147
virtual double value(const Point< dim > &, const unsigned int=0) const override
Definition DTR_mg.hpp:98
virtual void vector_value(const Point< dim > &, Vector< double > &values) const override
Definition DTR_mg.hpp:75
virtual double value(const Point< dim > &, const unsigned int component=0) const override
Definition DTR_mg.hpp:83
The main class of the program.
Definition DTR_mg.hpp:56
DTRProblem(unsigned int degree, std::ofstream &dimension_time_file)
DTRProblem(unsigned int degree)
void run(unsigned int n_initial_refinements=3, unsigned int n_cycles=9)
const char bcs[4]
Definition DTR_mg.hpp:51
const std::string output_dir
Definition DTR_mg.hpp:44