15 SolverSSOLIIIAXI::make_mesh()
19 std::ifstream ifs(
"../../gmsh/data/circle_r" + std::to_string(r) +
".msh");
25 SolverSSOLIIIAXI::fill_dirichlet_stack()
31 SolverSSOLIIIAXI::mark_materials()
36 cell->set_material_id(
mid_1);
38 if ((cell->center().norm() <
b1) && (cell->center().norm() >
a1))
39 cell->set_material_id(
mid_2);
41 if ((cell->center().norm() <
b2) && (cell->center().norm() >
a2))
42 cell->set_material_id(
mid_3);
44 if (cell->center().norm() >
rd1)
45 for (
unsigned int f = 0; f < GeometryInfo<2>::faces_per_cell; f++)
46 if (std::abs(cell->face(f)->vertex(1).norm() -
47 cell->face(f)->vertex(0).norm()) <
eps)
48 cell->face(f)->set_all_manifold_ids(1);
55 SolverSSOLIIIAXI::data_slice(std::string fname)
57 GridGenerator::hyper_cube(triangulation_slice, 0.0 +
eps,
d3 -
eps);
58 triangulation_slice.refine_global(nr_slice_global_refs);
60 dof_handler_slice.reinit(triangulation_slice);
61 dof_handler_slice.distribute_dofs(fe_slice);
62 solution_slice.reinit(dof_handler_slice.n_dofs());
67 VectorTools::interpolate(dof_handler_slice, potential, solution_slice);
69 DataOut<1, 2> data_out;
71 data_out.attach_dof_handler(dof_handler_slice);
72 data_out.add_data_vector(solution_slice,
"solution_slice");
73 data_out.build_patches();
75 std::ofstream out(fname +
"_slice" +
".gpi");
77 data_out.write_gnuplot(out);
82 SolverSSOLIIIAXI::solve()
90 control.enable_history_data();
92 GrowingVectorMemory<Vector<double>> memory;
93 SolverCG<Vector<double>> cg(control, memory);
95 PreconditionJacobi<SparseMatrix<double>> preconditioner;
106 const std::vector<double> history_data = control.get_history_data();
108 std::ofstream ofs(fname +
"_cg_convergence.csv");
111 for (
auto item : history_data) {
112 ofs << i <<
", " << item <<
"\n";
const double eps
Two values in double format are considered to be equal if the absolute value of their difference is l...
const types::material_id mid_2
The ID of the material inside the magnetic core.
const types::material_id mid_3
The ID of the material inside the coil, i.e., the windings.
const double b2
The outer radius of the coil.
const double b1
The outer radius of the magnetic core.
const types::material_id mid_1
The ID of the material outside the coil and the magnetic core.
const double a1
The inner radius of the magnetic core.
const double rd1
The radius of the circle that encloses the rectangle in the middle of the mesh.
const double d3
The radius of the problem domain.
const double a2
The inner radius of the coil.
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 types::boundary_id bid_axi
The ID of the straight segment of the boundary of the problem domain.
std::map< types::boundary_id, const Function< dim > * > dirichlet_stack
A map that contains pairs of boundary IDs and the corresponding Dirichlet boundary conditions.
Triangulation< dim > triangulation
The mesh.
DoFHandler< dim > dof_handler
The degrees-of-freedom handler.
Vector< double > system_rhs
The system right-hand side vector.
Vector< double > solution
The solution vector, i.e., degrees of freedom yielded by the simulation.
AffineConstraints< double > constraints
The constraints associated with the Dirichlet boundary conditions.
SparseMatrix< double > system_matrix
The system matrix.