15 SolverSSOLIIAXI::make_mesh()
20 std::ifstream ifs(
"../../gmsh/data/circle_r" + std::to_string(r) +
".msh");
27 SolverSSOLIIAXI::fill_dirichlet_stack()
33 SolverSSOLIIAXI::mark_materials()
38 cell->set_material_id(
mid_1);
40 if ((cell->center().norm() <
b) && (cell->center().norm() >
a))
41 cell->set_material_id(
mid_2);
43 if (cell->center().norm() >
rd1)
44 for (
unsigned int f = 0; f < GeometryInfo<2>::faces_per_cell; f++)
45 if (std::abs(cell->face(f)->vertex(1).norm() -
46 cell->face(f)->vertex(0).norm()) <
eps)
47 cell->face(f)->set_all_manifold_ids(1);
54 SolverSSOLIIAXI::data_slice(std::string fname)
56 GridGenerator::hyper_cube(triangulation_slice, 0.0 +
eps,
d3 -
eps);
57 triangulation_slice.refine_global(nr_slice_global_refs);
59 dof_handler_slice.reinit(triangulation_slice);
60 dof_handler_slice.distribute_dofs(fe_slice);
61 solution_slice.reinit(dof_handler_slice.n_dofs());
66 VectorTools::interpolate(dof_handler_slice, potential, solution_slice);
68 DataOut<1, 2> data_out;
70 data_out.attach_dof_handler(dof_handler_slice);
71 data_out.add_data_vector(solution_slice,
"solution_slice");
72 data_out.build_patches();
74 std::ofstream out(fname +
"_slice" +
".gpi");
76 data_out.write_gnuplot(out);
81 SolverSSOLIIAXI::solve()
89 control.enable_history_data();
91 GrowingVectorMemory<Vector<double>> memory;
92 SolverCG<Vector<double>> cg(control, memory);
94 PreconditionJacobi<SparseMatrix<double>> preconditioner;
105 const std::vector<double> history_data = control.get_history_data();
107 std::ofstream ofs(fname +
"_cg_convergence.csv");
110 for (
auto item : history_data) {
111 ofs << i <<
", " << item <<
"\n";
double a
The inner radius of the coil.
const double rd1
The radius of the circle that encloses the rectangle in the middle of the mesh.
double b
The outer radius of the coil.
double d3
The radius of the problem domain.
const types::material_id mid_1
The ID of the material outside the coil, J_f is zero in this region.
const types::boundary_id bid_axi
The ID of the straight section of the boundary of the problem domain. The boundary ID is set in the g...
const double eps
Two values in double format are considered to be equal if the absolute value of their difference is l...
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::material_id mid_2
The ID of the material inside the coil, J_f is nonzero in this region.
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.