19 using coord_t = Eigen::Vector2d;
24 const unsigned no_of_cells = 2 * nx * ny;
25 const unsigned no_of_edges = nx * ny + (nx + 1) * ny + nx * (ny + 1);
26 const unsigned no_of_vertices = (nx + 1) * (ny + 1);
28 SPDLOG_LOGGER_DEBUG(
Logger(),
"TPmesh: {} cells, {} edges, {} vertices",
29 no_of_cells, no_of_edges, no_of_vertices);
32 if (no_of_cells == 0) {
38 if ((x_size <= 0.0) || (y_size <= 0.0)) {
42 const double hx = x_size / nx;
43 const double hy = y_size / ny;
46 std::vector<size_type> v_idx(no_of_vertices);
49 for (
size_type i = 0; i <= nx; ++i, ++node_cnt) {
51 coord_t node_coord(2);
55 SPDLOG_LOGGER_TRACE(
Logger(),
"Adding vertex {}: {}", node_cnt,
56 node_coord.transpose());
65 std::vector<size_type> e_idx(no_of_edges);
69 for (
size_type j = 0; j <= ny; ++j, ++edge_cnt) {
72 auto second_endpoint_idx = v_idx[
VertexIndex(i + 1, j)];
74 SPDLOG_LOGGER_TRACE(
Logger(),
"horizontal edge {}: {} <-> {}", edge_cnt,
75 first_endpoint_idx, second_endpoint_idx);
77 std::vector<size_type> nodes_index_list{first_endpoint_idx,
80 Eigen::Matrix<double, Eigen::Dynamic, 2> edge_geo(2, 2);
86 std::make_unique<geometry::SegmentO1>(edge_geo));
91 for (
size_type j = 0; j < ny; ++j, ++edge_cnt) {
96 SPDLOG_LOGGER_TRACE(
Logger(),
"vertical edge {}: {} <-> {}", edge_cnt,
97 first_endpoint_idx, second_endpoint_idx);
99 std::vector<size_type> nodes_index_list{first_endpoint_idx,
100 second_endpoint_idx};
102 Eigen::Matrix<double, Eigen::Dynamic, 2> edge_geo(2, 2);
108 std::make_unique<geometry::SegmentO1>(edge_geo));
113 for (
size_type j = 0; j < ny; ++j, ++edge_cnt) {
118 SPDLOG_LOGGER_TRACE(
Logger(),
"diagonal edge {}: {} <-> {}", edge_cnt,
119 first_endpoint_idx, second_endpoint_idx);
121 std::vector<size_type> nodes_index_list{first_endpoint_idx,
122 second_endpoint_idx};
124 Eigen::Matrix<double, Eigen::Dynamic, 2> edge_geo(2, 2);
131 std::make_unique<geometry::SegmentO1>(edge_geo));
137 std::vector<size_type> t_idx(no_of_cells);
141 for (
size_type j = 0; j < ny; ++j, tria_cnt += 2) {
144 std::vector<size_type> vertex_index_list_up{
148 Eigen::Matrix<double, Eigen::Dynamic, 3> tria_geo_up(2, 3);
157 std::make_unique<geometry::TriaO1>(tria_geo_up));
160 std::vector<size_type> vertex_index_list_low{
164 Eigen::Matrix<double, Eigen::Dynamic, 3> tria_geo_low(2, 3);
170 auto tria_geo_low_ptr = std::make_unique<geometry::TriaO1>(tria_geo_low);
174 std::make_unique<geometry::TriaO1>(tria_geo_low));