4#include <deal.II/base/conditional_ostream.h>
5#include <deal.II/base/quadrature_lib.h>
7#include <deal.II/distributed/fully_distributed_tria.h>
9#include <deal.II/dofs/dof_handler.h>
10#include <deal.II/dofs/dof_tools.h>
16#include <deal.II/fe/fe_q.h>
17#include <deal.II/fe/fe_values.h>
18#include <deal.II/fe/mapping_q1.h>
20#include <deal.II/grid/grid_generator.h>
21#include <deal.II/grid/grid_in.h>
22#include <deal.II/grid/grid_out.h>
23#include <deal.II/grid/tria.h>
24#include <deal.II/grid/grid_tools.h>
26#include <deal.II/lac/dynamic_sparsity_pattern.h>
27#include <deal.II/lac/precondition.h>
28#include <deal.II/lac/solver_cg.h>
29#include <deal.II/lac/solver_gmres.h>
30#include <deal.II/lac/trilinos_precondition.h>
31#include <deal.II/lac/trilinos_sparse_matrix.h>
32#include <deal.II/lac/vector.h>
34#include <deal.II/numerics/data_out.h>
35#include <deal.II/numerics/matrix_tools.h>
36#include <deal.II/numerics/vector_tools.h>
37#include <deal.II/base/timer.h>
44static const std::string
output_dir =
"./output_mb/";
46using namespace dealii;
55 static constexpr unsigned int dim = 2;
71 const unsigned int = 0)
const override
88 Vector<double> &values)
const override
96 const unsigned int component = 0)
const override
116 const unsigned int = 0)
const override
134 const unsigned int = 0)
const override
136 return 1. - 2. * exp(p[0]);
143 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
145 return 2.*exp(p[1]) - 1.;
152 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
154 return 2.*exp(p[0]) - 1.;
161 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
163 return 2.*exp(p[0]) * (2.*exp(p[1]) - 1.);
170 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
172 return 2.*exp(p[1]) * (2.*exp(p[0]) - 1.);
180 virtual double value(
const Point<dim> &p,
const unsigned int = 0)
const override
182 return (2.*exp(p[0]) - 1.)*(2.*exp(p[1]) - 1.);
185 virtual Tensor<1, dim>
gradient(
const Point<dim> &p,
const unsigned int = 0)
const override
187 Tensor<1, dim> result;
189 result[0] = 2.*exp(p[0]) * (2.*exp(p[1]) - 1.);
190 result[1] = 2.*exp(p[1]) * (2.*exp(p[0]) - 1.);
197 DTR(
const unsigned int &r_, std::ofstream& dimension_time_file)
199 ,
mpi_size(Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD))
200 ,
mpi_rank(Utilities::MPI::this_mpi_process(MPI_COMM_WORLD))
201 ,
mesh(MPI_COMM_WORLD)
202 ,
pcout(std::cout, true && Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)
203 ,
time_details(dimension_time_file, true && Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)
207 DTR(
const unsigned int &r_)
209 ,
mpi_size(Utilities::MPI::n_mpi_processes(MPI_COMM_WORLD))
210 ,
mpi_rank(Utilities::MPI::this_mpi_process(MPI_COMM_WORLD))
211 ,
mesh(MPI_COMM_WORLD)
212 ,
pcout(std::cout, true && Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)
213 ,
time_details(std::cout, false && Utilities::MPI::this_mpi_process(MPI_COMM_WORLD) == 0)
219 setup(
unsigned int n_initial_refinements = 8);
242 const unsigned int r;
271 parallel::fullydistributed::Triangulation<dim>
mesh;
278 std::unique_ptr<FiniteElement<dim>>
fe;
297 TrilinosWrappers::MPI::Vector
solution;
300 ConditionalOStream
pcout;
virtual double value(const Point< dim > &, const unsigned int=0) const override
Definition DTR.hpp:70
DiffusionCoefficient()
Definition DTR.hpp:65
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR.hpp:143
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR.hpp:152
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR.hpp:180
virtual Tensor< 1, dim > gradient(const Point< dim > &p, const unsigned int=0) const override
Definition DTR.hpp:185
ForcingTerm()
Definition DTR.hpp:128
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR.hpp:133
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR.hpp:161
virtual double value(const Point< dim > &p, const unsigned int=0) const override
Definition DTR.hpp:170
virtual double value(const Point< dim > &, const unsigned int=0) const override
Definition DTR.hpp:115
ReactionCoefficient()
Definition DTR.hpp:110
TransportCoefficient()
Definition DTR.hpp:83
virtual void vector_value(const Point< dim > &, Vector< double > &values) const override
Definition DTR.hpp:87
virtual double value(const Point< dim > &, const unsigned int component=0) const override
Definition DTR.hpp:95
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
NeumannBC2 neumannBC2
Definition DTR.hpp:266
DTR(const unsigned int &r_)
Definition DTR.hpp:207
DirichletBC1 dirichletBC1
Definition DTR.hpp:263
DiffusionCoefficient diffusion_coefficient
Definition DTR.hpp:251
double setup_time
Time taken for setup.
Definition DTR.hpp:227
const unsigned int r
Polynomial degree.
Definition DTR.hpp:117
double compute_error(const VectorTools::NormType &norm_type) const
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)
Definition DTR.hpp:197
ForcingTerm forcing_term
Definition DTR.hpp:260
IndexSet locally_owned_dofs
Index set for locally owned degrees of freedom.
Definition DTR.hpp:222
void setup(unsigned int n_initial_refinements=8)
TrilinosWrappers::MPI::Vector solution
Solution vector.
Definition DTR.hpp:207
NeumannBC1 neumannBC1
Definition DTR.hpp:265
std::unique_ptr< Quadrature< dim > > quadrature
Quadrature formula for integration.
Definition DTR.hpp:182
ConditionalOStream pcout
Parallel output stream.
Definition DTR.hpp:212
ReactionCoefficient reaction_coefficient
Definition DTR.hpp:254
TrilinosWrappers::MPI::Vector system_rhs
System right-hand side vector.
Definition DTR.hpp:202
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
static constexpr unsigned int dim
Physical dimension (1D, 2D, 3D)
Definition DTR.hpp:55
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
DoFHandler< dim > dof_handler
DoF handler for managing degrees of freedom.
Definition DTR.hpp:192
DirichletBC2 dirichletBC2
Definition DTR.hpp:264
TransportCoefficient transport_coefficient
Definition DTR.hpp:257
const std::string output_dir
Definition DTR_mf.hpp:41