The finite element method using deal.II - 2021/2022
step-2.cc
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------
2  *
3  * Copyright (C) 1999 - 2015 by the deal.II authors
4  *
5  * This file is part of the deal.II library.
6  *
7  * The deal.II library is free software; you can use it, redistribute
8  * it, and/or modify it under the terms of the GNU Lesser General
9  * Public License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  * The full text of the license can be found in the file LICENSE at
12  * the top level of the deal.II distribution.
13  *
14  * ---------------------------------------------------------------------
15  *
16  * based on deal.II step-2
17  */
18 
19 
22 #include <deal.II/dofs/dof_tools.h>
23 
24 #include <deal.II/fe/fe_q.h>
25 
28 #include <deal.II/grid/tria.h>
31 
34 
35 #include <fstream>
36 
37 using namespace dealii;
38 
39 
40 void
41 make_grid(Triangulation<2> &triangulation)
42 {
43  const Point<2> center(1, 0);
44  const double inner_radius = 0.5, outer_radius = 1.0;
46  triangulation, center, inner_radius, outer_radius, 5);
47 
48  static const SphericalManifold<2> manifold_description(center);
49  triangulation.set_all_manifold_ids(0);
50  triangulation.set_manifold(0, manifold_description);
51 
52  for (unsigned int step = 0; step < 3; ++step)
53  {
55  triangulation.begin_active(),
56  endc = triangulation.end();
57 
58  for (; cell != endc; ++cell)
59  for (unsigned int v = 0; v < GeometryInfo<2>::vertices_per_cell; ++v)
60  {
61  const double distance_from_center =
62  center.distance(cell->vertex(v));
63 
64  if (std::fabs(distance_from_center - inner_radius) < 1e-10)
65  {
66  cell->set_refine_flag();
67  break;
68  }
69  }
70 
71  triangulation.execute_coarsening_and_refinement();
72  }
73 }
74 
75 
76 void
78 {
79  static const FE_Q<2> finite_element(1);
80  dof_handler.distribute_dofs(finite_element);
81 
82  DynamicSparsityPattern dynamic_sparsity_pattern(dof_handler.n_dofs(),
83  dof_handler.n_dofs());
84 
85  DoFTools::make_sparsity_pattern(dof_handler, dynamic_sparsity_pattern);
86 
88  sparsity_pattern.copy_from(dynamic_sparsity_pattern);
89 
90  std::ofstream out("sparsity_pattern1.svg");
92 }
93 
94 
95 
96 void
98 {
99  DoFRenumbering::Cuthill_McKee(dof_handler);
100 
101  DynamicSparsityPattern dynamic_sparsity_pattern(dof_handler.n_dofs(),
102  dof_handler.n_dofs());
103  DoFTools::make_sparsity_pattern(dof_handler, dynamic_sparsity_pattern);
104 
106  sparsity_pattern.copy_from(dynamic_sparsity_pattern);
107 
108  std::ofstream out("sparsity_pattern2.svg");
110 }
111 
112 
113 
114 int
116 {
119 
120  DoFHandler<2> dof_handler(triangulation);
121 
122  distribute_dofs(dof_handler);
123  renumber_dofs(dof_handler);
124 }
tria_accessor.h
dynamic_sparsity_pattern.h
triangulation
const ::parallel::distributed::Triangulation< dim, spacedim > * triangulation
manifold_lib.h
SparsityPattern::print_svg
void print_svg(std::ostream &out) const
FE_Q< 2 >
main
int main()
Definition: step-2.cc:115
renumber_dofs
void renumber_dofs(DoFHandler< 2 > &dof_handler)
Definition: step-2.cc:97
dealii
grid_generator.h
Triangulation< 2 >
SphericalManifold
e
SymmetricTensor< 2, dim, Number > e(const Tensor< 2, dim, Number > &F)
tria_iterator.h
DoFHandler< 2 >
DoFRenumbering::Cuthill_McKee
void Cuthill_McKee(DoFHandler< dim, spacedim > &dof_handler, const bool reversed_numbering=false, const bool use_constraints=false, const std::vector< types::global_dof_index > &starting_indices=std::vector< types::global_dof_index >())
DoFHandler::distribute_dofs
void distribute_dofs(const FiniteElement< dim, spacedim > &fe)
sparse_matrix.h
DoFTools::make_sparsity_pattern
void make_sparsity_pattern(const DoFHandler< dim, spacedim > &dof_handler, SparsityPatternType &sparsity_pattern, const AffineConstraints< number > &constraints=AffineConstraints< number >(), const bool keep_constrained_dofs=true, const types::subdomain_id subdomain_id=numbers::invalid_subdomain_id)
GridGenerator::hyper_shell
void hyper_shell(Triangulation< dim > &tria, const Point< dim > &center, const double inner_radius, const double outer_radius, const unsigned int n_cells=0, bool colorize=false)
tria.h
distribute_dofs
void distribute_dofs(DoFHandler< 2 > &dof_handler)
Definition: step-2.cc:77
sparsity_pattern
SparsityPattern sparsity_pattern
DynamicSparsityPattern
SparsityPattern
make_grid
void make_grid(Triangulation< 2 > &triangulation)
Definition: step-2.cc:41
dof_renumbering.h
Point< 3 >::distance
numbers::NumberTraits< double >::real_type distance(const Point< dim, double > &p) const
fe_q.h
dof_tools.h
SparsityPattern::copy_from
void copy_from(const size_type n_rows, const size_type n_cols, const ForwardIterator begin, const ForwardIterator end)
step
void step(Vector< number2 > &dst, const Vector< number2 > &rhs) const
Point< 2 >
dof_handler.h
center
Point< 3 > center
DoFHandler::n_dofs
types::global_dof_index n_dofs() const