90 if constexpr (SPACE_DIM == 2)
93 vtkPoints* p_pts = vtkPoints::New(VTK_DOUBLE);
94 p_pts->GetData()->SetName(
"Vertex positions");
98 const unsigned n_vertices = rMesh.GetNumNodes();
99 for (
unsigned node_num = 0; node_num < rMesh.GetNumNodes(); node_num++)
101 c_vector<double, SPACE_DIM> position = rMesh.GetNode(node_num)->rGetLocation();
102 p_pts->InsertPoint(node_num, position[0], position[1], 0.0);
113 const unsigned num_elements = rMesh.GetNumElements();
114 std::vector<unsigned> cell_offset_dist(rMesh.GetNumElements());
115 cell_offset_dist[0] = n_vertices;
116 for (
unsigned i = 1; i < num_elements; ++i)
117 cell_offset_dist[i] = cell_offset_dist[i - 1] + rMesh.GetElement(i - 1)->GetNumNodes();
119 const double alpha = 0.8;
121 for (
auto elem = rMesh.GetElementIteratorBegin(); elem != elem_end; ++elem)
123 const unsigned num_elem_nodes = elem->GetNumNodes();
124 const c_vector<double, SPACE_DIM> elem_centroid = rMesh.GetCentroidOfElement(elem->GetIndex());
125 for (
unsigned elem_node_num = 0; elem_node_num < num_elem_nodes; elem_node_num++)
127 c_vector<double, SPACE_DIM> node_position = elem->GetNode(elem_node_num)->rGetLocation();
128 const double new_x = (node_position[0] - elem_centroid[0]) * alpha + elem_centroid[0];
129 const double new_y = (node_position[1] - elem_centroid[1]) * alpha + elem_centroid[1];
130 p_pts->InsertPoint(cell_offset_dist[elem->GetIndex()] + elem_node_num,
134 mpVtkUnstructedMesh->SetPoints(p_pts);
138 [[maybe_unused]]
unsigned total_num_edges = 0;
139 for (
auto elem = rMesh.GetElementIteratorBegin(); elem != elem_end; ++elem)
142 for (
unsigned edge_index = 0; edge_index < elem->GetNumEdges(); ++edge_index)
145 p_cell = vtkQuad::New();
146 const unsigned num_trap_nodes = p_cell->GetNumberOfEdges();
147 assert(num_trap_nodes == 4);
148 vtkIdList* p_cell_id_list = p_cell->GetPointIds();
149 p_cell_id_list->SetNumberOfIds(num_trap_nodes);
150 auto p_edge = elem->GetEdge(edge_index);
151 assert(p_edge->GetNumNodes() == 2);
154 std::array<unsigned, 2> base_ids = { { p_edge->GetNode(0)->GetIndex(), p_edge->GetNode(1)->GetIndex() } };
155 std::array<unsigned, 2> top_ids = { { elem->GetNodeLocalIndex(base_ids[0])
156 + cell_offset_dist[elem->GetIndex()],
157 elem->GetNodeLocalIndex(base_ids[1]) + cell_offset_dist[elem->GetIndex()] } };
160 p_cell_id_list->SetId(0, base_ids[0]);
161 p_cell_id_list->SetId(1, base_ids[1]);
162 p_cell_id_list->SetId(2, top_ids[1]);
163 p_cell_id_list->SetId(3, top_ids[0]);
164 mpVtkUnstructedMesh->InsertNextCell(p_cell->GetCellType(), p_cell_id_list);
171 p_cell = vtkPolygon::New();
172 const unsigned num_elem_nodes = elem->GetNumNodes();
173 vtkIdList* p_cell_id_list = p_cell->GetPointIds();
174 p_cell_id_list->SetNumberOfIds(num_elem_nodes);
175 for (
unsigned j = 0; j < num_elem_nodes; ++j)
177 p_cell_id_list->SetId(j, cell_offset_dist[elem->GetIndex()] + j);
180 mpVtkUnstructedMesh->InsertNextCell(p_cell->GetCellType(), p_cell_id_list);
186 assert(total_num_edges + num_elements == mpVtkUnstructedMesh->GetNumberOfCells());