12 #define BOOST_ALLOW_DEPRECATED_HEADERS
14 #include "deal.II/base/multithread_info.h"
20 #include "project_PHI_to_D.hpp"
21 #include "project_PHI_to_E.hpp"
36 if (nr_threads_max > 0)
37 MultithreadInfo::set_thread_limit(nr_threads_max);
39 Assert(DIMENSION__ > 1, ExcInternalError());
40 Assert(DIMENSION__ < 4, ExcInternalError());
43 (DIMENSION__ == 2) ?
"Data/cylinder2d/" :
"Data/cylinder3d/";
46 std::cout <<
"Program: mms-axi\n"
47 <<
"Dimensions: " << DIMENSION__ <<
"\n"
48 <<
"Writing to: " << dir <<
"\n";
55 for (
unsigned int p = 1; p < 4; p++) {
62 for (
unsigned int r = 27; r < 31; r++)
66 for (
unsigned int r = 5; r < 9; r++)
70 dir +
"solution_PHI_p" + std::to_string(p) +
"_r" + std::to_string(r);
72 table_PHI.add_value(
"r", r);
73 table_PHI.add_value(
"p", p);
77 table_PHI.add_value(
"ndofs", problem.
get_n_dofs());
78 table_PHI.add_value(
"ncells", problem.
get_n_cells());
85 fname = dir +
"solution_E" +
"_p" + std::to_string(p) +
"_r" +
88 table_E.add_value(
"r", r);
89 table_E.add_value(
"p", p);
93 ProjectPHItoE<DIMENSION__> projector(p - 1,
105 table_E.add_value(
"ndofs", problem.
get_n_dofs());
106 table_E.add_value(
"ncells", problem.
get_n_cells());
107 table_E.add_value(
"L2", projector.get_L2_norm());
108 table_E.add_value(
"H1", 0.0);
111 fname = dir +
"solution_D" +
"_p" + std::to_string(p) +
"_r" +
114 table_D.add_value(
"r", r);
115 table_D.add_value(
"p", p);
119 ProjectPHItoD<DIMENSION__> projector(p - 1,
130 table_D.add_value(
"ndofs", problem.
get_n_dofs());
131 table_D.add_value(
"ncells", problem.
get_n_cells());
132 table_D.add_value(
"L2", projector.get_L2_norm() / ep_0);
133 table_D.add_value(
"H1", 0.0);
137 std::cout <<
"Table PHI\n";
138 table_PHI.
save(dir +
"table_PHI_p" + std::to_string(p));
140 std::cout <<
"Table E\n";
141 table_E.
save(dir +
"table_E_p" + std::to_string(p));
143 std::cout <<
"Table D\n";
144 table_D.
save(dir +
"table_D_p" + std::to_string(p));
155 }
catch (std::exception& exc) {
156 std::cerr << std::endl
158 <<
"----------------------------------------------------"
160 std::cerr <<
"Exception on processing: " << std::endl
161 << exc.what() << std::endl
162 <<
"Aborting!" << std::endl
163 <<
"----------------------------------------------------"
167 std::cerr << std::endl
169 <<
"----------------------------------------------------"
171 std::cerr <<
"Unknown exception!" << std::endl
172 <<
"Aborting!" << std::endl
173 <<
"----------------------------------------------------"
This is a wrap-around class. It contains the main loop of the program that implements the Axisymmetri...
Describes the exact solution, , of the Axisymmetric - method of manufactured solutions (mms-axi/) num...
Describes the exact solution, , of the Axisymmetric - method of manufactured solutions (mms-axi/) num...
The convergence table used in multiple numerical experiments.
void save(std::string fname)
Saves the data in text and tex formats, and prints the data on screen.
Global settings for the Axisymmetric - method of manufactured solutions (mms-axi/) numerical experime...
const bool project_exact_solution
If set to true, the program will project the exact solution.
const bool log_cg_convergence
If set to true, saves the residual at each iteration of the CG solver. The names of the files fit the...
const bool print_time_tables
If set to true, the program will print time tables on the screen.
Implements the Axisymmetric - method of manufactured solutions (mms-axi/) numerical experiment.
const Triangulation< dim > & get_tria() const
Returns a reference to triangulation.
const Vector< double > & get_solution() const
Returns a reference to the solution.
double get_L2_norm() const
Returns error norm.
void clear()
Releases computer memory associated with the system matrix and right-hand side.
const DoFHandler< dim > & get_dof_handler() const
Returns a reference to dof handler.
double get_H1_norm() const
Returns error norm.
unsigned int get_n_dofs() const
Returns the total amount of the degrees of freedom.
unsigned int get_n_cells() const
Returns the number of active cells in the mesh.