36 #include "VertexMeshWriter.hpp" 37 #include "Version.hpp" 38 #include "Cylindrical2dVertexMesh.hpp" 39 #include "Toroidal2dVertexMesh.hpp" 44 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
57 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
59 const std::string& rBaseName,
60 const bool clearOutputDir)
65 mNodeMapCurrentIndex(0)
76 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
98 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
106 std::vector<double> coordinates(SPACE_DIM+1);
109 for (
unsigned j=0; j<SPACE_DIM; j++)
111 coordinates[j] = (*(
mpIters->pNodeIter))->GetPoint()[j];
113 coordinates[SPACE_DIM] = (*(
mpIters->pNodeIter))->IsBoundaryNode();
125 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
129 assert(SPACE_DIM == 3);
138 for (
unsigned j=0; j<elem_data.NodeIndices.size(); j++)
140 unsigned old_index = (*(
mpIters->pElemIter))->GetNodeGlobalIndex(j);
145 elem_data.Faces.resize((*(
mpIters->pElemIter))->GetNumFaces());
146 for (
unsigned i=0; i<elem_data.Faces.size(); i++)
158 face_data.
NodeIndices.resize(p_face->GetNumNodes());
159 for (
unsigned j=0; j<face_data.
NodeIndices.size(); j++)
161 unsigned old_index = p_face->GetNodeGlobalIndex(j);
166 elem_data.Faces[i] = face_data;
178 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
189 for (
unsigned j=0; j<elem_data.NodeIndices.size(); j++)
191 unsigned old_index = (*(
mpIters->pElemIter))->GetNodeGlobalIndex(j);
196 elem_data.AttributeValue = (*(
mpIters->pElemIter))->GetAttribute();
207 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
211 assert(SPACE_DIM==3 || SPACE_DIM == 2);
218 vtkXMLUnstructuredGridWriter* p_writer = vtkXMLUnstructuredGridWriter::New();
219 #if VTK_MAJOR_VERSION >= 6 226 p_writer->SetCompressor(
nullptr);
232 vtk_file_name +=
"_" + stamp;
234 vtk_file_name +=
".vtu";
236 p_writer->SetFileName(vtk_file_name.c_str());
259 vtkXMLUnstructuredGridWriter* p_writer = vtkXMLUnstructuredGridWriter::New();
260 #if VTK_MAJOR_VERSION >= 6 267 p_writer->SetCompressor(
nullptr);
273 vtk_file_name +=
"_" + stamp;
275 vtk_file_name +=
".vtu";
277 p_writer->SetFileName(vtk_file_name.c_str());
284 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
289 vtkPoints* p_pts = vtkPoints::New(VTK_DOUBLE);
290 p_pts->GetData()->SetName(
"Vertex positions");
291 for (
unsigned node_num=0; node_num<rMesh.
GetNumNodes(); node_num++)
293 c_vector<double, SPACE_DIM> position;
294 position = rMesh.
GetNode(node_num)->rGetLocation();
297 p_pts->InsertPoint(node_num, position[0], position[1], 0.0);
301 p_pts->InsertPoint(node_num, position[0], position[1], position[2]);
314 p_cell = vtkPolygon::New();
318 p_cell = vtkConvexPointSet::New();
320 vtkIdList* p_cell_id_list = p_cell->GetPointIds();
321 p_cell_id_list->SetNumberOfIds(iter->GetNumNodes());
322 for (
unsigned j=0; j<iter->GetNumNodes(); ++j)
324 p_cell_id_list->SetId(j, iter->GetNodeGlobalIndex(j));
332 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
336 vtkDoubleArray* p_scalars = vtkDoubleArray::New();
337 p_scalars->SetName(dataName.c_str());
338 for (
unsigned i=0; i<dataPayload.size(); i++)
340 p_scalars->InsertNextValue(dataPayload[i]);
344 p_cell_data->AddArray(p_scalars);
349 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
353 vtkDoubleArray* p_scalars = vtkDoubleArray::New();
354 p_scalars->SetName(dataName.c_str());
355 for (
unsigned i=0; i<dataPayload.size(); i++)
357 p_scalars->InsertNextValue(dataPayload[i]);
361 p_point_data->AddArray(p_scalars);
367 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
377 mpIters->pNodeIter =
new NodeIterType(
mpMesh->GetNodeIteratorBegin());
380 mpIters->pElemIter =
new ElemIterType(
mpMesh->GetElementIteratorBegin());
384 if (
mpMesh->IsMeshChanging())
387 for (NodeIterType it =
mpMesh->GetNodeIteratorBegin(); it !=
mpMesh->GetNodeIteratorEnd(); ++it)
395 template<
unsigned ELEMENT_DIM,
unsigned SPACE_DIM>
401 std::string node_file_name = this->
mBaseName +
".node";
405 unsigned num_attr = 0;
406 unsigned max_bdy_marker = 1;
409 *p_node_file << num_nodes <<
"\t";
410 *p_node_file << SPACE_DIM <<
"\t";
411 *p_node_file << num_attr <<
"\t";
412 *p_node_file << max_bdy_marker <<
"\n";
413 *p_node_file << std::setprecision(6);
416 for (
unsigned item_num=0; item_num<num_nodes; item_num++)
418 std::vector<double> current_item = this->
GetNextNode();
419 *p_node_file << item_num;
420 for (
unsigned i=0; i<SPACE_DIM+1; i++)
422 *p_node_file <<
"\t" << current_item[i];
424 *p_node_file <<
"\n";
426 *p_node_file << comment <<
"\n";
427 p_node_file->close();
430 std::string element_file_name = this->
mBaseName +
".cell";
436 *p_element_file << num_elements <<
"\t" << num_attr <<
"\n";
439 for (
unsigned item_num=0; item_num<num_elements; item_num++)
447 std::vector<unsigned> node_indices = elem_data.
NodeIndices;
450 *p_element_file << item_num <<
"\t" << node_indices.size();
453 for (
unsigned i=0; i<node_indices.size(); i++)
455 *p_element_file <<
"\t" << node_indices[i];
461 *p_element_file <<
"\n";
465 assert(SPACE_DIM == 3);
471 std::vector<unsigned> node_indices = elem_data_with_faces.
NodeIndices;
474 *p_element_file << item_num <<
"\t" << node_indices.size();
477 for (
unsigned i=0; i<node_indices.size(); i++)
479 *p_element_file <<
"\t" << node_indices[i];
483 std::vector<ElementData> faces = elem_data_with_faces.
Faces;
486 *p_element_file <<
"\t" << faces.size();
488 for (
unsigned j=0; j<faces.size(); j++)
491 std::vector<unsigned> face_node_indices = faces[j].NodeIndices;
494 *p_element_file <<
"\t" << faces[j].AttributeValue <<
"\t" << face_node_indices.size();
497 for (
unsigned i=0; i<face_node_indices.size(); i++)
499 *p_element_file <<
"\t" << face_node_indices[i];
508 *p_element_file <<
"\n";
512 *p_element_file << comment <<
"\n";
513 p_element_file->close();
void AddCellData(std::string dataName, std::vector< double > dataPayload)
unsigned mNodeMapCurrentIndex
std::string GetOutputDirectoryFullPath() const
MeshWriterIterators< ELEMENT_DIM, SPACE_DIM > * mpIters
void WriteFilesUsingMesh(VertexMesh< ELEMENT_DIM, SPACE_DIM > &rMesh)
virtual unsigned GetNumNodes()
OutputFileHandler * mpOutputFileHandler
AbstractMesh< ELEMENT_DIM, SPACE_DIM >::NodeIterator * pNodeIter
virtual std::vector< double > GetNextNode()
Node< SPACE_DIM > * GetNode(unsigned index) const
vtkUnstructuredGrid * mpVtkUnstructedMesh
std::vector< ElementData > Faces
std::vector< unsigned > NodeIndices
VertexMeshWriter(const std::string &rDirectory, const std::string &rBaseName, const bool clearOutputDir=true)
void SetNewIndex(unsigned oldIndex, unsigned newIndex)
VertexElementData GetNextElementWithFaces()
VertexElementIterator GetElementIteratorBegin(bool skipDeletedElements=true)
void WriteVtkUsingMesh(VertexMesh< ELEMENT_DIM, SPACE_DIM > &rMesh, std::string stamp="")
out_stream OpenOutputFile(const std::string &rFileName, std::ios_base::openmode mode=std::ios::out|std::ios::trunc) const
virtual unsigned GetNumNodes() const
VertexMesh< ELEMENT_DIM, SPACE_DIM >::VertexElementIterator * pElemIter
unsigned GetNumElements()
void MakeVtkMesh(VertexMesh< ELEMENT_DIM, SPACE_DIM > &rMesh)
std::vector< double > GetNextNode()
ElementData GetNextElement()
static std::string GetProvenanceString()
VertexElement< ELEMENT_DIM-1, SPACE_DIM > * GetFace(unsigned index) const
virtual VertexMesh< ELEMENT_DIM, SPACE_DIM > * GetMeshForVtk()
virtual ElementData GetNextElement()
VertexElementIterator GetElementIteratorEnd()
std::vector< unsigned > NodeIndices
unsigned GetNewIndex(unsigned oldIndex) const
void AddPointData(std::string dataName, std::vector< double > dataPayload)
VertexMesh< ELEMENT_DIM, SPACE_DIM > * mpMesh
AbstractMeshReader< ELEMENT_DIM, SPACE_DIM > * mpMeshReader