3 #include <libmesh/elem.h> 4 #include <libmesh/enum_elem_type.h> 5 #include <libmesh/mesh.h> 6 #include <libmesh/mesh_generation.h> 9 #include <libmesh/cell_c0polyhedron.h> 10 #include <libmesh/face_c0polygon.h> 18 template <ElemType elem_type>
28 const Real minpos = 1.5, maxpos = 5.5;
29 const unsigned int N = 2;
31 _mesh = std::make_unique<Mesh>(*TestCommWorld);
33 std::unique_ptr<Elem> test_elem;
38 #ifdef LIBMESH_ENABLE_INFINITE_ELEMENTS 40 if (test_elem.get() && test_elem->infinite())
42 Elem * elem = _mesh->add_elem(std::move(test_elem));
44 const auto add_point =
45 [
this, elem](
const unsigned int i,
55 auto node = _mesh->add_point(
Point(x, y), i);
57 auto node = _mesh->add_point(
Point(x, y, z), i);
62 const Real halfpos = (minpos + maxpos) / 2.;
69 add_point(0, minpos, minpos, minpos);
70 add_point(1, maxpos, minpos, minpos);
71 add_point(2+is_quad, maxpos, maxpos, minpos);
72 add_point(3-is_quad, minpos, maxpos, minpos);
76 add_point(4, halfpos, minpos, minpos);
77 add_point(5, halfpos, maxpos, minpos);
82 add_point(4, minpos, minpos, maxpos);
83 add_point(5, maxpos, minpos, maxpos);
84 add_point(6, maxpos, maxpos, maxpos);
85 add_point(7, minpos, maxpos, maxpos);
89 add_point(8, halfpos, minpos, minpos);
90 add_point(9, maxpos, halfpos, minpos);
91 add_point(10, halfpos, maxpos, minpos);
92 add_point(11, minpos, halfpos, minpos);
93 add_point(12, halfpos, minpos, maxpos);
94 add_point(13, maxpos, halfpos, maxpos);
95 add_point(14, halfpos, maxpos, maxpos);
96 add_point(15, minpos, halfpos, maxpos);
100 add_point(16, halfpos, halfpos, minpos);
101 add_point(17, halfpos, halfpos, maxpos);
106 add_point(0, minpos, minpos, minpos);
107 add_point(1, maxpos, minpos, minpos);
108 add_point(2, halfpos, maxpos, minpos);
109 add_point(3, minpos, minpos, maxpos);
110 add_point(4, maxpos, minpos, maxpos);
111 add_point(5, halfpos, maxpos, maxpos);
115 add_point(6, halfpos, minpos, minpos);
116 add_point(7, (halfpos + maxpos) / 2., halfpos, minpos);
117 add_point(8, (halfpos + minpos) / 2., halfpos, minpos);
118 add_point(9, halfpos, minpos, maxpos);
119 add_point(10, (halfpos + maxpos) / 2., halfpos, maxpos);
120 add_point(11, (halfpos + minpos) / 2., halfpos, maxpos);
124 _mesh->prepare_for_use();
127 #endif // LIBMESH_DIM > 1 128 #endif // LIBMESH_ENABLE_INFINITE_ELEMENTS 138 _mesh->add_point(
Point(0, 0), 0);
139 _mesh->add_point(
Point(1, 0), 1);
140 _mesh->add_point(
Point(1.5, 0.5), 2);
141 _mesh->add_point(
Point(1, 1), 3);
142 _mesh->add_point(
Point(0, 1), 4);
144 std::unique_ptr<Elem> polygon = std::make_unique<C0Polygon>(5);
146 polygon->set_node(i, _mesh->node_ptr(i));
147 polygon->set_id() = 0;
149 _mesh->add_elem(std::move(polygon));
150 _mesh->prepare_for_use();
164 _mesh->add_point(
Point(1/
Real(3), 0, 0), 0);
165 _mesh->add_point(
Point(2/
Real(3), 0, 0), 1);
166 _mesh->add_point(
Point(1, 1/
Real(3), 0), 2);
167 _mesh->add_point(
Point(1, 2/
Real(3), 0), 3);
168 _mesh->add_point(
Point(2/
Real(3), 1, 0), 4);
169 _mesh->add_point(
Point(1/
Real(3), 1, 0), 5);
170 _mesh->add_point(
Point(0, 2/
Real(3), 0), 6);
171 _mesh->add_point(
Point(0, 1/
Real(3), 0), 7);
174 _mesh->add_point(
Point(0, 0, 1/
Real(3)), 8);
175 _mesh->add_point(
Point(1, 0, 1/
Real(3)), 9);
176 _mesh->add_point(
Point(1, 1, 1/
Real(3)), 10);
177 _mesh->add_point(
Point(0, 1, 1/
Real(3)), 11);
180 _mesh->add_point(
Point(0, 0, 2/
Real(3)), 12);
181 _mesh->add_point(
Point(1, 0, 2/
Real(3)), 13);
182 _mesh->add_point(
Point(1, 1, 2/
Real(3)), 14);
183 _mesh->add_point(
Point(0, 1, 2/
Real(3)), 15);
186 _mesh->add_point(
Point(1/
Real(3), 0, 1), 16);
187 _mesh->add_point(
Point(2/
Real(3), 0, 1), 17);
188 _mesh->add_point(
Point(1, 1/
Real(3), 1), 18);
189 _mesh->add_point(
Point(1, 2/
Real(3), 1), 19);
190 _mesh->add_point(
Point(2/
Real(3), 1, 1), 20);
191 _mesh->add_point(
Point(1/
Real(3), 1, 1), 21);
192 _mesh->add_point(
Point(0, 2/
Real(3), 1), 22);
193 _mesh->add_point(
Point(0, 1/
Real(3), 1), 23);
195 const std::vector<std::vector<unsigned int>> nodes_on_side =
196 { {0, 1, 2, 3, 4, 5, 6, 7},
197 {0, 1, 9, 13, 17, 16, 12, 8},
198 {2, 3, 10, 14, 19, 18, 13, 9},
199 {4, 5, 11, 15, 21, 20, 14, 10},
200 {6, 7, 8, 12, 23, 22, 15, 11},
201 {16, 17, 18, 19, 20, 21, 22, 23},
214 _mesh->add_point(
Point(0, 0, 0), 0);
215 _mesh->add_point(
Point(1, 0, 0), 1);
216 _mesh->add_point(
Point(1, 1, 0), 2);
217 _mesh->add_point(
Point(0, 1, 0), 3);
218 _mesh->add_point(
Point(0, 0, 1), 4);
219 _mesh->add_point(
Point(1, 0, 1), 5);
220 _mesh->add_point(
Point(1, 1, 1), 6);
221 _mesh->add_point(
Point(0, 1, 1), 7);
230 const std::vector<std::vector<unsigned int>> nodes_on_side =
243 std::vector<std::shared_ptr<Polygon>> sides(nodes_on_side.size());
247 const auto & nodes_on_s = nodes_on_side[s];
248 sides[s] = std::make_shared<C0Polygon>(nodes_on_s.size());
250 sides[s]->set_node(i, _mesh->node_ptr(nodes_on_s[i]));
253 std::unique_ptr<Elem> polyhedron = std::make_unique<C0Polyhedron>(sides);
254 _mesh->add_elem(std::move(polyhedron));
255 _mesh->prepare_for_use();
259 const unsigned int dim = test_elem->dim();
260 const unsigned int use_x =
dim > 0;
261 const unsigned int use_y =
dim > 1;
262 const unsigned int use_z =
dim > 2;
265 N*use_x, N*use_y, N*use_z,
267 minpos, use_y*maxpos,
268 minpos, use_z*maxpos,
274 for (
const auto & elem :
275 this->_mesh->element_ptr_range())
276 elem->subdomain_id() = 10 + (elem->id() % 10);
280 this->_mesh->cache_elem_data();
virtual Node *& set_node(const unsigned int i)
std::string libmesh_suite_name
std::unique_ptr< Mesh > _mesh
This is the base class from which all geometric element types are derived.
The libMesh namespace provides an interface to certain functionality in the library.
static std::unique_ptr< Elem > build(const ElemType type, Elem *p=nullptr)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
A Point defines a location in LIBMESH_DIM dimensional Real space.
auto index_range(const T &sizable)
Helper function that returns an IntRange<std::size_t> representing all the indices of the passed-in v...