146 std::map<Int64, Integer> uid_to_idx_map;
147 info() <<
"[VtuMeshWriter::writeMeshToFile] mesh_nb_node=" << mesh_nb_node <<
" mesh_nb_cell=" << mesh_nb_cell
148 <<
" all=" <<
mesh->allNodes().size() <<
", own=" <<
mesh->ownNodes().size();
153 vtkPoints* points = vtkPoints::New();
154 points->SetDataTypeToDouble();
155 vtkUnstructuredGrid* grid = vtkUnstructuredGrid::New();
156 grid->Allocate(mesh_nb_cell, mesh_nb_cell);
166 info() <<
"[writeMeshToFile] Creating array of CELLS Unique IDs";
167 vtkCellData* vtk_cell_data = grid->GetCellData();
168 vtkLongArray* vtk_cell_uids = vtkLongArray::New();
169 vtk_cell_uids->SetName(
"CellsUniqueIDs");
172 vtk_cell_uids->InsertNextValue(cell.
uniqueId());
174 vtk_cell_data->AddArray(vtk_cell_uids);
175 vtk_cell_uids->Delete();
180 info() <<
"[writeMeshToFile] Creating array of NODES Unique IDs";
181 vtkPointData* vtk_point_data = grid->GetPointData();
182 vtkLongArray* vtk_point_uids = vtkLongArray::New();
183 vtk_point_uids->SetName(
"NodesUniqueIDs");
184 vtkIntArray* vtk_point_owners = vtkIntArray::New();
185 vtk_point_owners->SetName(
"NodesOwner");
190 Real3 coord = nodes_coords[inode];
194 uid_to_idx_map.insert(std::make_pair(uid, index));
195 vtk_point_uids->InsertNextValue(uid);
196 vtk_point_owners->InsertNextValue(node.
owner());
199 vtk_point_data->AddArray(vtk_point_uids);
200 vtk_point_uids->Delete();
202 vtk_point_data->AddArray(vtk_point_owners);
203 vtk_point_owners->Delete();
208 info() <<
"[writeMeshToFile] Now setting point into grid";
209 grid->SetPoints(points);
214 info() <<
"[writeMeshToFile] Now scanning cells' nodes to create connectivity";
215 vtkIdList* vtk_point_ids = vtkIdList::New();
218 int nb_node = cell.
nbNode();
219 vtk_point_ids->Allocate(nb_node);
221 for (
Integer j = 0; j < nb_node; ++j) {
223 auto x = uid_to_idx_map.find(node_uid);
224 if (x == uid_to_idx_map.end())
225 ARCANE_FATAL(
"InternalError: no index for uid '{0}'", node_uid);
226 vtk_point_ids->InsertNextId(x->second);
229 int vtk_item = IT_NullType;
230 switch (cell.
type()) {
232 case (IT_Tetraedron4):
233 vtk_item = VTK_TETRA;
235 case (IT_Hexaedron8):
236 vtk_item = VTK_HEXAHEDRON;
239 vtk_item = VTK_PYRAMID;
243 case (IT_Octaedron12):
244 vtk_item = VTK_HEXAGONAL_PRISM;
246 case (IT_Heptaedron10):
247 vtk_item = VTK_PENTAGONAL_PRISM;
251 case (IT_Pentaedron6):
252 vtk_item = VTK_WEDGE;
257 info() <<
"VTK_POLY_VERTEX";
258 vtk_item = VTK_POLY_VERTEX;
261 info() <<
"VTK_POLY_VERTEX";
262 vtk_item = VTK_POLY_VERTEX;
265 info() <<
"VTK_POLY_VERTEX";
266 vtk_item = VTK_POLY_VERTEX;
268 case (IT_AntiWedgeLeft6):
269 info() <<
"VTK_POLY_VERTEX";
270 vtk_item = VTK_POLY_VERTEX;
272 case (IT_AntiWedgeRight6):
273 info() <<
"VTK_POLY_VERTEX";
274 vtk_item = VTK_POLY_VERTEX;
277 info() <<
"VTK_POLY_VERTEX";
278 vtk_item = VTK_POLY_VERTEX;
282 info() <<
"[writeMeshToFile] Cell type not supported (" << cell.
type() <<
")";
285 grid->InsertNextCell(vtk_item, vtk_point_ids);
286 vtk_point_ids->Reset();
288 vtk_point_ids->Delete();
293 info() <<
"[writeMeshToFile] ## Now Fetching Groups ##";
294 vtkFieldData* vtkFieldDataGroups = grid->GetFieldData();
297 if (igroup->isAllItems())
299 info() <<
"[writeMeshToFile] Found a " << igroup->itemKind() <<
"-group " << igroup->name();
300 _writeFieldGroupsFromData(vtkFieldDataGroups, *igroup);
306 vtkXMLUnstructuredGridWriter* vtk_grid_writer = vtkXMLUnstructuredGridWriter::New();
307 vtk_grid_writer->SetInputData(grid);
308 String fileNameDotVtu(file_name);
310 fileNameDotVtu = file_name +
".vtu";
311 vtk_grid_writer->SetFileName(fileNameDotVtu.
localstr());
312 info() <<
"[writeMeshToFile] SetFileName " << fileNameDotVtu;
315 vtk_grid_writer->SetDataModeToAscii();
317 vtk_grid_writer->SetDataModeToBinary();
318 vtk_grid_writer->Write();
325 vtk_grid_writer->Delete();
326 info() <<
"[writeMeshToFile] Done";