12 #ifndef SolverFLCAXI_H__
13 #define SolverFLCAXI_H__
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;
37 template<
bool is_cylinder>
61 unsigned int mapping_degree,
76 , dirichlet_function_in(1.0)
80 ? TimerOutput::summary
83 TimerOutput timer(std::cout, tf, TimerOutput::cpu_and_wall_times_grouped);
99 const std::string fname;
102 const dealii::Functions::ZeroFunction<2> dirichlet_function_out;
103 const dealii::Functions::ConstantFunction<2> dirichlet_function_in;
107 const unsigned int nr_slice_global_refs = 3;
111 Triangulation<1, 2> triangulation_slice;
113 DoFHandler<1, 2> dof_handler_slice;
114 Vector<double> solution_slice;
116 SphericalManifold<2> sphere;
118 virtual void make_mesh() override final;
119 virtual
void fill_dirichlet_stack() override final;
120 virtual
void solve() override final;
123 void data_slice(std::
string fname);
126 template<
bool is_cylinder>
131 { bid_out, &dirichlet_function_out } };
134 template<
bool is_cylinder>
138 GridGenerator::hyper_cube(triangulation_slice, a + eps, b - eps);
139 triangulation_slice.refine_global(nr_slice_global_refs);
141 dof_handler_slice.reinit(triangulation_slice);
142 dof_handler_slice.distribute_dofs(fe_slice);
143 solution_slice.reinit(dof_handler_slice.n_dofs());
148 VectorTools::interpolate(dof_handler_slice, potential, solution_slice);
151 DataOut<1, 2> data_out;
153 data_out.attach_dof_handler(dof_handler_slice);
154 data_out.add_data_vector(solution_slice,
"solution_slice");
155 data_out.build_patches();
157 std::ofstream out(fname +
"_slice" +
".gpi");
159 data_out.write_gnuplot(out);
163 template<
bool is_cylinder>
172 if (log_cg_convergence)
173 control.enable_history_data();
175 GrowingVectorMemory<Vector<double>> memory;
176 SolverCG<Vector<double>> cg(control, memory);
178 PreconditionJacobi<SparseMatrix<double>> preconditioner;
188 if (log_cg_convergence) {
189 const std::vector<double> history_data = control.get_history_data();
191 std::ofstream ofs(fname +
"_cg_convergence.csv");
194 for (
auto item : history_data) {
195 ofs << i <<
", " << item <<
"\n";
Describes the exact solution, , of the Axisymmetric - floating conductor (flc-axi/) numerical experim...
Global settings for the Axisymmetric - floating conductor (flc-axi/) numerical experiment.
const bool print_time_tables
If set to true, the program will print time tables on the screen.
Implements the solver of the Axisymmetric - floating conductor (flc-axi/) numerical experiment.
SolverFLCAXI(unsigned int p, unsigned int mapping_degree, unsigned int r, std::string fname)
Solves static scalar boundary value problem.
void run()
Runs the simulation.