127 assert(SPACE_DIM == 3);
129 assert(this->mNumElements == mpMesh->GetNumElements());
135 elem_data.
NodeIndices.resize((*(mpIters->pElemIter))->GetNumNodes());
136 for (
unsigned j=0; j<elem_data.
NodeIndices.size(); j++)
138 unsigned old_index = (*(mpIters->pElemIter))->GetNodeGlobalIndex(j);
139 elem_data.
NodeIndices[j] = mpMesh->IsMeshChanging() ? mpNodeMap->GetNewIndex(old_index) : old_index;
143 elem_data.
Faces.resize((*(mpIters->pElemIter))->GetNumFaces());
144 for (
unsigned i=0; i<elem_data.
Faces.size(); i++)
156 face_data.
NodeIndices.resize(p_face->GetNumNodes());
157 for (
unsigned j=0; j<face_data.
NodeIndices.size(); j++)
159 unsigned old_index = p_face->GetNodeGlobalIndex(j);
160 face_data.
NodeIndices[j] = mpMesh->IsMeshChanging() ? mpNodeMap->GetNewIndex(old_index) : old_index;
164 elem_data.
Faces[i] = face_data;
171 ++(*(mpIters->pElemIter));
209 assert(SPACE_DIM==3 || SPACE_DIM == 2);
215 assert(mpVtkUnstructedMesh->CheckAttributes() == 0);
216 vtkXMLUnstructuredGridWriter* p_writer = vtkXMLUnstructuredGridWriter::New();
217#if VTK_MAJOR_VERSION >= 6
218 p_writer->SetInputData(mpVtkUnstructedMesh);
220 p_writer->SetInput(mpVtkUnstructedMesh);
224 p_writer->SetCompressor(
nullptr);
227 std::string vtk_file_name = this->mpOutputFileHandler->GetOutputDirectoryFullPath() + this->mBaseName;
230 vtk_file_name +=
"_" + stamp;
232 vtk_file_name +=
".vtu";
234 p_writer->SetFileName(vtk_file_name.c_str());
253 MakeVtkMesh(*p_mesh_for_vtk);
256 assert(mpVtkUnstructedMesh->CheckAttributes() == 0);
257 vtkXMLUnstructuredGridWriter* p_writer = vtkXMLUnstructuredGridWriter::New();
258#if VTK_MAJOR_VERSION >= 6
259 p_writer->SetInputData(mpVtkUnstructedMesh);
261 p_writer->SetInput(mpVtkUnstructedMesh);
265 p_writer->SetCompressor(
nullptr);
268 std::string vtk_file_name = this->mpOutputFileHandler->GetOutputDirectoryFullPath() + this->mBaseName;
271 vtk_file_name +=
"_" + stamp;
273 vtk_file_name +=
".vtu";
275 p_writer->SetFileName(vtk_file_name.c_str());
287 vtkPoints* p_pts = vtkPoints::New(VTK_DOUBLE);
288 p_pts->GetData()->SetName(
"Vertex positions");
289 for (
unsigned node_num = 0; node_num < rMesh.
GetNumNodes(); node_num++)
291 c_vector<double, SPACE_DIM> position;
292 position = rMesh.
GetNode(node_num)->rGetLocation();
293 if constexpr (SPACE_DIM == 2)
295 p_pts->InsertPoint(node_num, position[0], position[1], 0.0);
297 else if constexpr (SPACE_DIM == 3)
299 p_pts->InsertPoint(node_num, position[0], position[1], position[2]);
307 mpVtkUnstructedMesh->SetPoints(p_pts);
316 p_cell = vtkPolygon::New();
320 p_cell = vtkConvexPointSet::New();
322 vtkIdList* p_cell_id_list = p_cell->GetPointIds();
323 p_cell_id_list->SetNumberOfIds(iter->GetNumNodes());
324 for (
unsigned j=0; j<iter->GetNumNodes(); ++j)
326 p_cell_id_list->SetId(j, iter->GetNodeGlobalIndex(j));
328 mpVtkUnstructedMesh->InsertNextCell(p_cell->GetCellType(), p_cell_id_list);
338 vtkDoubleArray* p_scalars = vtkDoubleArray::New();
339 p_scalars->SetName(dataName.c_str());
340 for (
unsigned i=0; i<dataPayload.size(); i++)
342 p_scalars->InsertNextValue(dataPayload[i]);
345 vtkCellData* p_cell_data = mpVtkUnstructedMesh->GetCellData();
346 p_cell_data->AddArray(p_scalars);
355 vtkDoubleArray* p_scalars = vtkDoubleArray::New();
356 p_scalars->SetName(dataName.c_str());
357 for (
unsigned i=0; i<dataPayload.size(); i++)
359 p_scalars->InsertNextValue(dataPayload[i]);
362 vtkPointData* p_point_data = mpVtkUnstructedMesh->GetPointData();
363 p_point_data->AddArray(p_scalars);
372 this->mpMeshReader =
nullptr;
376 this->mNumElements = mpMesh->GetNumElements();
379 mpIters->pNodeIter =
new NodeIterType(mpMesh->GetNodeIteratorBegin());
382 mpIters->pElemIter =
new ElemIterType(mpMesh->GetElementIteratorBegin());
385 mNodeMapCurrentIndex = 0;
386 if (mpMesh->IsMeshChanging())
388 mpNodeMap =
new NodeMap(mpMesh->GetNumAllNodes());
389 for (NodeIterType it = mpMesh->GetNodeIteratorBegin(); it != mpMesh->GetNodeIteratorEnd(); ++it)
391 mpNodeMap->SetNewIndex(it->GetIndex(), mNodeMapCurrentIndex++);
403 std::string node_file_name = this->mBaseName +
".node";
404 out_stream p_node_file = this->mpOutputFileHandler->OpenOutputFile(node_file_name);
407 unsigned num_attr = 0;
408 unsigned max_bdy_marker = 1;
409 unsigned num_nodes = this->GetNumNodes();
411 *p_node_file << num_nodes <<
"\t";
412 *p_node_file << SPACE_DIM <<
"\t";
413 *p_node_file << num_attr <<
"\t";
414 *p_node_file << max_bdy_marker <<
"\n";
415 *p_node_file << std::setprecision(6);
418 for (
unsigned item_num=0; item_num<num_nodes; item_num++)
420 std::vector<double> current_item = this->GetNextNode();
421 *p_node_file << item_num;
422 for (
unsigned i=0; i<SPACE_DIM+1; i++)
424 *p_node_file <<
"\t" << current_item[i];
426 *p_node_file <<
"\n";
428 *p_node_file << comment <<
"\n";
429 p_node_file->close();
432 std::string element_file_name = this->mBaseName +
".cell";
433 out_stream p_element_file = this->mpOutputFileHandler->OpenOutputFile(element_file_name);
437 unsigned num_elements = this->GetNumElements();
438 *p_element_file << num_elements <<
"\t" << num_attr <<
"\n";
441 for (
unsigned item_num=0; item_num<num_elements; item_num++)
449 std::vector<unsigned> node_indices = elem_data.
NodeIndices;
452 *p_element_file << item_num <<
"\t" << node_indices.size();
455 for (
unsigned i=0; i<node_indices.size(); i++)
457 *p_element_file <<
"\t" << node_indices[i];
463 *p_element_file <<
"\n";
467 assert(SPACE_DIM == 3);
473 std::vector<unsigned> node_indices = elem_data_with_faces.
NodeIndices;
476 *p_element_file << item_num <<
"\t" << node_indices.size();
479 for (
unsigned i=0; i<node_indices.size(); i++)
481 *p_element_file <<
"\t" << node_indices[i];
485 std::vector<ElementData> faces = elem_data_with_faces.
Faces;
488 *p_element_file <<
"\t" << faces.size();
490 for (
unsigned j=0; j<faces.size(); j++)
493 std::vector<unsigned> face_node_indices = faces[j].NodeIndices;
496 *p_element_file <<
"\t" << faces[j].AttributeValue <<
"\t" << face_node_indices.size();
499 for (
unsigned i=0; i<face_node_indices.size(); i++)
501 *p_element_file <<
"\t" << face_node_indices[i];
510 *p_element_file <<
"\n";
514 *p_element_file << comment <<
"\n";
515 p_element_file->close();