FEAT 3
Finite Element Analysis Toolbox
Loading...
Searching...
No Matches
tetris_factory.hpp
1// FEAT3: Finite Element Analysis Toolbox, Version 3
2// Copyright (C) 2010 by Stefan Turek & the FEAT group
3// FEAT3 is released under the GNU General Public License version 3,
4// see the file 'copyright.txt' in the top level directory for details.
5
6#pragma once
7
8#include <kernel/geometry/conformal_mesh.hpp>
9
10namespace FEAT
11{
12 namespace Geometry
13 {
15 namespace TestAux
16 {
17 template<typename Mesh_>
18 class TetrisFactory;
19
20 template<typename Coord_>
21 class TetrisFactory<ConformalMesh<Shape::Quadrilateral, 2, Coord_> > :
22 public Factory<ConformalMesh<FEAT::Shape::Quadrilateral, 2, Coord_> >
23 {
24 public:
26 typedef ConformalMesh<Shape::Quadrilateral, 2, Coord_> MeshType;
27 typedef Factory<MeshType> BaseClass;
28
30 typedef typename MeshType::VertexSetType VertexSetType;
32 typedef typename MeshType::IndexSetHolderType IndexSetHolderType;
33
34 public:
35 TetrisFactory()
36 {
37 }
38
39 virtual FEAT::Index get_num_entities(int dim)
40 {
41 switch(dim)
42 {
43 case 0:
44 return 10;
45 case 1:
46 return 13;
47 case 2:
48 return 4;
49 default:
50 return 0;
51 }
52 }
53
54 virtual void fill_vertex_set(VertexSetType& vertex_set)
55 {
56 vertex_set[0][0] = Coord_(1.0);
57 vertex_set[0][1] = Coord_(0.0);
58 vertex_set[1][0] = Coord_(2.0);
59 vertex_set[1][1] = Coord_(0.0);
60 vertex_set[2][0] = Coord_(3.0);
61 vertex_set[2][1] = Coord_(0.0);
62 vertex_set[3][0] = Coord_(0.0);
63 vertex_set[3][1] = Coord_(1.0);
64 vertex_set[4][0] = Coord_(1.0);
65 vertex_set[4][1] = Coord_(1.0);
66 vertex_set[5][0] = Coord_(2.0);
67 vertex_set[5][1] = Coord_(1.0);
68 vertex_set[6][0] = Coord_(3.0);
69 vertex_set[6][1] = Coord_(1.0);
70 vertex_set[7][0] = Coord_(0.0);
71 vertex_set[7][1] = Coord_(2.0);
72 vertex_set[8][0] = Coord_(1.0);
73 vertex_set[8][1] = Coord_(2.0);
74 vertex_set[9][0] = Coord_(2.0);
75 vertex_set[9][1] = Coord_(2.0);
76 }
77
78 virtual void fill_index_sets(IndexSetHolderType& index_set_holder)
79 {
80 // set vertices-at-edge
81 IndexSet<2>& v_e(index_set_holder.template get_index_set<1,0>());
82 v_e( 0, 0) = 0;
83 v_e( 0, 1) = 1;
84 v_e( 1, 0) = 1;
85 v_e( 1, 1) = 2;
86 v_e( 2, 0) = 0;
87 v_e( 2, 1) = 4;
88 v_e( 3, 0) = 1;
89 v_e( 3, 1) = 5;
90 v_e( 4, 0) = 2;
91 v_e( 4, 1) = 6;
92 v_e( 5, 0) = 3;
93 v_e( 5, 1) = 4;
94 v_e( 6, 0) = 4;
95 v_e( 6, 1) = 5;
96 v_e( 7, 0) = 5;
97 v_e( 7, 1) = 6;
98 v_e( 8, 0) = 3;
99 v_e( 8, 1) = 7;
100 v_e( 9, 0) = 4;
101 v_e( 9, 1) = 8;
102 v_e(10, 0) = 5;
103 v_e(10, 1) = 9;
104 v_e(11, 0) = 7;
105 v_e(11, 1) = 8;
106 v_e(12, 0) = 8;
107 v_e(12, 1) = 9;
108
109 // set vertices-at-quad
110 IndexSet<4>& v_q(index_set_holder.template get_index_set<2,0>());
111 v_q(0, 0) = 0;
112 v_q(0, 1) = 1;
113 v_q(0, 2) = 4;
114 v_q(0, 3) = 5;
115 v_q(1, 0) = 1;
116 v_q(1, 1) = 2;
117 v_q(1, 2) = 5;
118 v_q(1, 3) = 6;
119 v_q(2, 0) = 3;
120 v_q(2, 1) = 4;
121 v_q(2, 2) = 7;
122 v_q(2, 3) = 8;
123 v_q(3, 0) = 4;
124 v_q(3, 1) = 5;
125 v_q(3, 2) = 8;
126 v_q(3, 3) = 9;
127
128 // set edges-at-quad
129 IndexSet<4>& e_q(index_set_holder.template get_index_set<2,1>());
130 e_q(0, 0) = 0;
131 e_q(0, 1) = 6;
132 e_q(0, 2) = 2;
133 e_q(0, 3) = 3;
134 e_q(1, 0) = 1;
135 e_q(1, 1) = 7;
136 e_q(1, 2) = 3;
137 e_q(1, 3) = 4;
138 e_q(2, 0) = 5;
139 e_q(2, 1) = 11;
140 e_q(2, 2) = 8;
141 e_q(2, 3) = 9;
142 e_q(3, 0) = 6;
143 e_q(3, 1) = 12;
144 e_q(3, 2) = 9;
145 e_q(3, 3) = 10;
146 }
147 };
148 } // namespace TestAux
150 } // namespace Geometry
151} // namespace FEAT
Hypercube< 2 > Quadrilateral
2-Hypercube: Quadrilateral
Definition: shape.hpp:83
FEAT namespace.
Definition: adjactor.hpp:12
std::uint64_t Index
Index data type.