The finite element method using deal.II - 2021/2022
gtest.cc File Reference
#include <deal.II/base/point.h>
#include <deal.II/grid/tria.h>
#include <gtest/gtest.h>
#include <fstream>
Include dependency graph for gtest.cc:

Go to the source code of this file.

Functions

void first_grid (Triangulation< 2 > &)
 Generate a hypercube, and output it as an svg file. More...
 
void second_grid (Triangulation< 2 > &)
 Generate a locally refined hyper_shell, and output it as an svg file. More...
 
void third_grid (Triangulation< 2 > &)
 Create an L-shaped domain with one global refinement, and write it on. More...
 
std::tuple< unsigned int, unsigned int, unsigned int > get_info (const Triangulation< 2 > &)
 Returns a tuple with number of levels, number of cells, number of active. More...
 
 TEST (Step1, Mark1)
 
 TEST (Step1, DISABLED_Mark2)
 
 TEST (Step1, DISABLED_Mark3)
 
 TEST (Step1, DISABLED_Mark4)
 
 TEST (Step1, DISABLED_Mark5)
 
 TEST (Step1, DISABLED_Mark6)
 
int main (int argc, char *argv[])
 

Function Documentation

◆ first_grid()

void first_grid ( Triangulation< 2 > &  )

Generate a hypercube, and output it as an svg file.

Definition at line 35 of file step-1.cc.

36 {
37  GridGenerator::hyper_cube(triangulation);
38 
39  std::cout << "Number of original vertices: " << triangulation.n_vertices()
40  << std::endl;
41 
42  triangulation.refine_global(4);
43 
44  std::cout << "Number of vertices after 4 refinements: "
45  << triangulation.n_vertices() << std::endl;
46  {
47  std::ofstream out("grid-1.svg");
48  GridOut grid_out;
49  grid_out.write_svg(triangulation, out);
50  std::cout << "Grid written to grid-1.svg" << std::endl;
51  }
52  {
53  std::ofstream out("grid-1.vtk");
54  GridOut grid_out;
55  grid_out.write_vtk(triangulation, out);
56  std::cout << "Grid written to grid-1.vtk" << std::endl;
57  }
58 }

◆ second_grid()

void second_grid ( Triangulation< 2 > &  )

Generate a locally refined hyper_shell, and output it as an svg file.

Definition at line 63 of file step-1.cc.

64 {
65  const Point<2> center(1, 0);
66  const double inner_radius = 0.5, outer_radius = 1.0;
68  triangulation, center, inner_radius, outer_radius, 10);
69 
70  // triangulation.reset_all_manifolds();
71 
72  for (unsigned int step = 0; step < 5; ++step)
73  {
74  std::ofstream out("grid-2-" + std::to_string(step) + ".vtk");
75  GridOut grid_out;
76  grid_out.write_vtk(triangulation, out);
77 
78  for (auto &cell : triangulation.active_cell_iterators())
79  {
80  for (const auto v : cell->vertex_indices())
81  {
82  const double distance_from_center =
83  center.distance(cell->vertex(v));
84 
85  if (std::fabs(distance_from_center - inner_radius) <=
86  1e-6 * inner_radius)
87  {
88  cell->set_refine_flag();
89  break;
90  }
91  }
92  }
93 
94  triangulation.execute_coarsening_and_refinement();
95  }
96 }

◆ third_grid()

void third_grid ( Triangulation< 2 > &  )

Create an L-shaped domain with one global refinement, and write it on.

Definition at line 104 of file step-1.cc.

105 {
106  // Insert code here
107 }

◆ get_info()

std::tuple<unsigned int, unsigned int, unsigned int> get_info ( const Triangulation< 2 > &  )

Returns a tuple with number of levels, number of cells, number of active.

Definition at line 112 of file step-1.cc.

113 {
114  // Insert code here
115  return std::make_tuple(0, 0, 0);
116 }

◆ TEST() [1/6]

TEST ( Step1  ,
Mark1   
)

Definition at line 23 of file gtest.cc.

24 {
26  first_grid(tria);
27  ASSERT_TRUE(std::ifstream("grid-1.svg"));
28 }

◆ TEST() [2/6]

TEST ( Step1  ,
DISABLED_Mark2   
)

Definition at line 33 of file gtest.cc.

34 {
36  second_grid(tria);
37  ASSERT_TRUE(std::ifstream("grid-2.svg"));
38 }

◆ TEST() [3/6]

TEST ( Step1  ,
DISABLED_Mark3   
)

Definition at line 41 of file gtest.cc.

42 {
44  third_grid(tria);
45  ASSERT_TRUE(std::ifstream("grid-3.vtk"));
46 }

◆ TEST() [4/6]

TEST ( Step1  ,
DISABLED_Mark4   
)

Definition at line 50 of file gtest.cc.

51 {
53  first_grid(tria);
54  auto [levels, cells, active_cells] = get_info(tria);
55  EXPECT_EQ(levels, 5u);
56  EXPECT_EQ(cells, 341u);
57  EXPECT_EQ(active_cells, 256u);
58 }

◆ TEST() [5/6]

TEST ( Step1  ,
DISABLED_Mark5   
)

Definition at line 62 of file gtest.cc.

63 {
65  second_grid(tria);
66  const auto [levels, cells, active_cells] = get_info(tria);
67  EXPECT_EQ(levels, 6u);
68  EXPECT_EQ(cells, 1250u);
69  EXPECT_EQ(active_cells, 940u);
70 }

◆ TEST() [6/6]

TEST ( Step1  ,
DISABLED_Mark6   
)

Definition at line 74 of file gtest.cc.

75 {
77  third_grid(tria);
78  auto [levels, cells, active_cells] = get_info(tria);
79  EXPECT_EQ(levels, 5u);
80  EXPECT_EQ(cells, 351u);
81  EXPECT_EQ(active_cells, 264u);
82 }

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 87 of file gtest.cc.

88 {
89  testing::InitGoogleTest(&argc, argv);
90  return RUN_ALL_TESTS();
91 }
triangulation
const ::parallel::distributed::Triangulation< dim, spacedim > * triangulation
get_info
std::tuple< unsigned int, unsigned int, unsigned int > get_info(const Triangulation< 2 > &)
Returns a tuple with number of levels, number of cells, number of active.
Definition: step-1.cc:112
Triangulation< 2 >
GridOut::write_vtk
void write_vtk(const Triangulation< dim, spacedim > &tria, std::ostream &out) const
tria
const ::Triangulation< dim, spacedim > & tria
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)
to_string
static std::string to_string(const T &s, const Patterns::PatternBase &p=*Convert< T >::to_pattern())=delete
second_grid
void second_grid(Triangulation< 2 > &)
Generate a locally refined hyper_shell, and output it as an svg file.
Definition: step-1.cc:63
Point< 3 >::distance
numbers::NumberTraits< double >::real_type distance(const Point< dim, double > &p) const
GridOut::write_svg
void write_svg(const Triangulation< 2, 2 > &tria, std::ostream &out) const
GridGenerator::hyper_cube
void hyper_cube(Triangulation< dim, spacedim > &tria, const double left=0., const double right=1., const bool colorize=false)
step
void step(Vector< number2 > &dst, const Vector< number2 > &rhs) const
Point< 2 >
third_grid
void third_grid(Triangulation< 2 > &)
Create an L-shaped domain with one global refinement, and write it on.
Definition: step-1.cc:104
first_grid
void first_grid(Triangulation< 2 > &)
Generate a hypercube, and output it as an svg file.
Definition: step-1.cc:35
GridOut
center
Point< 3 > center