123 assert(SPACE_DIM == 3);
125 assert(this->mNumElements == mpMesh->GetNumElements());
131 elem_data.
NodeIndices.resize((*(mpIters->pElemIter))->GetNumNodes());
132 for (
unsigned j=0; j<elem_data.
NodeIndices.size(); j++)
134 unsigned old_index = (*(mpIters->pElemIter))->GetNodeGlobalIndex(j);
135 elem_data.
NodeIndices[j] = mpMesh->IsMeshChanging() ? mpNodeMap->GetNewIndex(old_index) : old_index;
139 elem_data.
Faces.resize((*(mpIters->pElemIter))->GetNumFaces());
140 for (
unsigned i=0; i<elem_data.
Faces.size(); i++)
152 face_data.
NodeIndices.resize(p_face->GetNumNodes());
153 for (
unsigned j=0; j<face_data.
NodeIndices.size(); j++)
155 unsigned old_index = p_face->GetNodeGlobalIndex(j);
156 face_data.
NodeIndices[j] = mpMesh->IsMeshChanging() ? mpNodeMap->GetNewIndex(old_index) : old_index;
160 elem_data.
Faces[i] = face_data;
167 ++(*(mpIters->pElemIter));
204 assert(SPACE_DIM==3 || SPACE_DIM == 2);
210 assert(mpVtkUnstructedMesh->CheckAttributes() == 0);
211 vtkXMLUnstructuredGridWriter* p_writer = vtkXMLUnstructuredGridWriter::New();
212 p_writer->SetInputData(mpVtkUnstructedMesh);
215 p_writer->SetCompressor(
nullptr);
218 std::string vtk_file_name = this->mpOutputFileHandler->GetOutputDirectoryFullPath() + this->mBaseName;
221 vtk_file_name +=
"_" + stamp;
223 vtk_file_name +=
".vtu";
225 p_writer->SetFileName(vtk_file_name.c_str());
242 MakeVtkMesh(*p_mesh_for_vtk);
245 assert(mpVtkUnstructedMesh->CheckAttributes() == 0);
246 vtkXMLUnstructuredGridWriter* p_writer = vtkXMLUnstructuredGridWriter::New();
247 p_writer->SetInputData(mpVtkUnstructedMesh);
250 p_writer->SetCompressor(
nullptr);
253 std::string vtk_file_name = this->mpOutputFileHandler->GetOutputDirectoryFullPath() + this->mBaseName;
256 vtk_file_name +=
"_" + stamp;
258 vtk_file_name +=
".vtu";
260 p_writer->SetFileName(vtk_file_name.c_str());
270 vtkPoints* p_pts = vtkPoints::New(VTK_DOUBLE);
271 p_pts->GetData()->SetName(
"Vertex positions");
272 for (
unsigned node_num = 0; node_num < rMesh.
GetNumNodes(); node_num++)
274 c_vector<double, SPACE_DIM> position;
275 position = rMesh.
GetNode(node_num)->rGetLocation();
276 if constexpr (SPACE_DIM == 2)
278 p_pts->InsertPoint(node_num, position[0], position[1], 0.0);
280 else if constexpr (SPACE_DIM == 3)
282 p_pts->InsertPoint(node_num, position[0], position[1], position[2]);
290 mpVtkUnstructedMesh->SetPoints(p_pts);
299 p_cell = vtkPolygon::New();
303 p_cell = vtkConvexPointSet::New();
305 vtkIdList* p_cell_id_list = p_cell->GetPointIds();
306 p_cell_id_list->SetNumberOfIds(iter->GetNumNodes());
307 for (
unsigned j=0; j<iter->GetNumNodes(); ++j)
309 p_cell_id_list->SetId(j, iter->GetNodeGlobalIndex(j));
311 mpVtkUnstructedMesh->InsertNextCell(p_cell->GetCellType(), p_cell_id_list);
319 vtkDoubleArray* p_scalars = vtkDoubleArray::New();
320 p_scalars->SetName(dataName.c_str());
321 for (
unsigned i=0; i<dataPayload.size(); i++)
323 p_scalars->InsertNextValue(dataPayload[i]);
326 vtkCellData* p_cell_data = mpVtkUnstructedMesh->GetCellData();
327 p_cell_data->AddArray(p_scalars);
334 vtkDoubleArray* p_scalars = vtkDoubleArray::New();
335 p_scalars->SetName(dataName.c_str());
336 for (
unsigned i=0; i<dataPayload.size(); i++)
338 p_scalars->InsertNextValue(dataPayload[i]);
341 vtkPointData* p_point_data = mpVtkUnstructedMesh->GetPointData();
342 p_point_data->AddArray(p_scalars);
350 this->mpMeshReader =
nullptr;
354 this->mNumElements = mpMesh->GetNumElements();
357 mpIters->pNodeIter =
new NodeIterType(mpMesh->GetNodeIteratorBegin());
360 mpIters->pElemIter =
new ElemIterType(mpMesh->GetElementIteratorBegin());
363 mNodeMapCurrentIndex = 0;
364 if (mpMesh->IsMeshChanging())
366 mpNodeMap =
new NodeMap(mpMesh->GetNumAllNodes());
367 for (NodeIterType it = mpMesh->GetNodeIteratorBegin(); it != mpMesh->GetNodeIteratorEnd(); ++it)
369 mpNodeMap->SetNewIndex(it->GetIndex(), mNodeMapCurrentIndex++);
381 std::string node_file_name = this->mBaseName +
".node";
382 out_stream p_node_file = this->mpOutputFileHandler->OpenOutputFile(node_file_name);
385 unsigned num_attr = 0;
386 unsigned max_bdy_marker = 1;
387 unsigned num_nodes = this->GetNumNodes();
389 *p_node_file << num_nodes <<
"\t";
390 *p_node_file << SPACE_DIM <<
"\t";
391 *p_node_file << num_attr <<
"\t";
392 *p_node_file << max_bdy_marker <<
"\n";
393 *p_node_file << std::setprecision(6);
396 for (
unsigned item_num=0; item_num<num_nodes; item_num++)
398 std::vector<double> current_item = this->GetNextNode();
399 *p_node_file << item_num;
400 for (
unsigned i=0; i<SPACE_DIM+1; i++)
402 *p_node_file <<
"\t" << current_item[i];
404 *p_node_file <<
"\n";
406 *p_node_file << comment <<
"\n";
407 p_node_file->close();
410 std::string element_file_name = this->mBaseName +
".cell";
411 out_stream p_element_file = this->mpOutputFileHandler->OpenOutputFile(element_file_name);
415 unsigned num_elements = this->GetNumElements();
416 *p_element_file << num_elements <<
"\t" << num_attr <<
"\n";
419 for (
unsigned item_num=0; item_num<num_elements; item_num++)
427 std::vector<unsigned> node_indices = elem_data.
NodeIndices;
430 *p_element_file << item_num <<
"\t" << node_indices.size();
433 for (
unsigned i=0; i<node_indices.size(); i++)
435 *p_element_file <<
"\t" << node_indices[i];
441 *p_element_file <<
"\n";
445 assert(SPACE_DIM == 3);
451 std::vector<unsigned> node_indices = elem_data_with_faces.
NodeIndices;
454 *p_element_file << item_num <<
"\t" << node_indices.size();
457 for (
unsigned i=0; i<node_indices.size(); i++)
459 *p_element_file <<
"\t" << node_indices[i];
463 std::vector<ElementData> faces = elem_data_with_faces.
Faces;
466 *p_element_file <<
"\t" << faces.size();
468 for (
unsigned j=0; j<faces.size(); j++)
471 std::vector<unsigned> face_node_indices = faces[j].NodeIndices;
474 *p_element_file <<
"\t" << faces[j].AttributeValue <<
"\t" << face_node_indices.size();
477 for (
unsigned i=0; i<face_node_indices.size(); i++)
479 *p_element_file <<
"\t" << face_node_indices[i];
488 *p_element_file <<
"\n";
492 *p_element_file << comment <<
"\n";
493 p_element_file->close();