15 #define BOOST_ALLOW_DEPRECATED_HEADERS
17 #include <deal.II/base/function.h>
18 #include <deal.II/grid/grid_generator.h>
19 #include <deal.II/grid/grid_in.h>
20 #include <deal.II/grid/manifold_lib.h>
22 #include <deal.II/numerics/fe_field_function.h>
24 #include "exact_solution.hpp"
25 #include "settings.hpp"
26 #include "static_scalar_solver.hpp"
28 #define TMR(__name) TimerOutput::Scope timer_section(timer, __name)
30 using namespace StaticScalarSolver;
64 unsigned int mapping_degree,
75 project_exact_solution,
80 , dirichlet_function_left(-1.0)
81 , dirichlet_function_right(1.0)
82 , dirichlet_function_in(1.0)
83 , circle_left(Point<2>(-x0, 0.0))
84 , circle_right(Point<2>(x0, 0.0))
85 , circle_infty(Point<2>(0.0, 0.0))
87 TimerOutput::OutputFrequency tf =
88 (print_time_tables) ? TimerOutput::summary : TimerOutput::never;
90 TimerOutput timer(std::cout, tf, TimerOutput::cpu_and_wall_times_grouped);
101 const unsigned int m;
102 const unsigned int r;
103 const std::string fname;
106 const Functions::ZeroFunction<dim> dirichlet_function_infty;
107 const Functions::ConstantFunction<dim> dirichlet_function_left;
108 const Functions::ConstantFunction<dim> dirichlet_function_right;
109 const Functions::ConstantFunction<dim> dirichlet_function_in;
111 const SphericalManifold<2> circle_left;
112 const SphericalManifold<2> circle_right;
113 const SphericalManifold<2> circle_infty;
115 SphericalManifold<3> sphere;
120 void renumber_boundaries();
121 virtual void make_mesh() override final;
122 virtual
void fill_dirichlet_stack() override final;
123 virtual
void solve() override final;
131 for (
unsigned int f = 0; f < GeometryInfo<dim>::faces_per_cell; ++f) {
132 if (cell->face(f)->at_boundary()) {
133 if (cell->face(f)->boundary_id() == 2)
134 cell->face(f)->set_all_boundary_ids(bid_infty);
149 if (log_cg_convergence)
150 control.enable_history_data();
152 GrowingVectorMemory<Vector<double>> memory;
153 SolverCG<Vector<double>> cg(control, memory);
155 PreconditionJacobi<SparseMatrix<double>> preconditioner;
165 if (log_cg_convergence) {
166 const std::vector<double> history_data = control.get_history_data();
168 std::ofstream ofs(fname +
"_cg_convergence.csv");
171 for (
auto item : history_data) {
172 ofs << i <<
", " << item <<
"\n";
Describes exact solution, , of the Asymptotic boundary condition (abc/) numerical experiment.
Global settings for the Asymptotic boundary conditions (abc/) numerical experiment.
Implements the solver of the Asymptotic boundary condition (abc/) numerical experiment.
SolverABC(unsigned int m, unsigned int p, unsigned int mapping_degree, unsigned int r, std::string fname)
Solves static scalar boundary value problem.
void run()
Runs the simulation.