272 info() <<
"[XmfMeshWriter::writeMeshToFile] nNodes=" <<
mesh->nbNode() <<
" nCells="<<
mesh->nbCell()
273 <<
" all=" <<
mesh->allNodes().size() <<
", own=" <<
mesh->ownNodes().size();
278 XdmfRoot* xmfRoot=
new XdmfRoot();
279 XdmfDOM* xmfDom=
new XdmfDOM();
280 String h5_file_name = file_name +
".h5";
283 ARCANE_FATAL(
"Could not remove .h5 file '{0}'",h5_file_name);
284 String xmfDomFileName(file_name);
286 if (!xmfDomFileName.
endsWith(
".xmf"))
287 xmfDomFileName = file_name +
".xmf";
288 if (xmfDom->SetWorkingDirectory(
".")!= XDMF_SUCCESS)
289 throw IOException(
"writeMeshToFile",
"SetOutputFileName");
290 if (xmfDom->SetOutputFileName(xmfDomFileName.
localstr())!= XDMF_SUCCESS)
291 throw IOException(
"writeMeshToFile",
"SetOutputFileName");
292 xmfRoot->SetDOM(xmfDom);
294 info() <<
"XDMF-side initialisation done filename='" << xmfDomFileName <<
"'";
297 XdmfDomain *xmfDomain =
new XdmfDomain();
298 xmfDomain->SetName(file_name.
localstr());
299 xmfRoot->Insert(xmfDomain);
300 info() <<
"[XmfMeshWriter] Domain initialisation done";
303 XdmfGrid *xmfGrid =
new XdmfGrid();
304 xmfGrid->SetGridType(XDMF_GRID_UNIFORM);
305 info() <<
"[XmfMeshWriter] Grid initialisation done";
310 XdmfAttribute *xmfCellAttribute=
new XdmfAttribute();
311 xmfCellAttribute->SetName(
"CellsUniqueIDs");
312 xmfCellAttribute->SetAttributeCenter(XDMF_ATTRIBUTE_CENTER_CELL);
313 xmfCellAttribute->SetAttributeType(XDMF_ATTRIBUTE_TYPE_SCALAR);
314 XdmfArray *xmfCellsUniqueIDs = xmfCellAttribute->GetValues();
315 String heavyDataForCellsUniqueIDs(h5_file_name+
":/CellsUniqueIDs");
316 xmfCellsUniqueIDs->SetHeavyDataSetName(heavyDataForCellsUniqueIDs.
localstr());
317 xmfCellsUniqueIDs->SetNumberType(XDMF_INT32_TYPE);
318 xmfCellsUniqueIDs->SetNumberOfElements(
mesh->nbCell());
319 XdmfInt64 cellIndex=0;
324 XdmfAttribute *xmfNodeAttribute=
new XdmfAttribute();
325 xmfNodeAttribute->SetName(
"NodesUniqueIDs");
326 xmfNodeAttribute->SetAttributeCenter(XDMF_ATTRIBUTE_CENTER_NODE);
327 xmfNodeAttribute->SetAttributeType(XDMF_ATTRIBUTE_TYPE_SCALAR);
328 XdmfArray *xmfNodesUniqueIDs = xmfNodeAttribute->GetValues();
329 String heavyDataForNodesUniqueIDs(h5_file_name+
":/NodesUniqueIDs");
330 xmfNodesUniqueIDs->SetHeavyDataSetName(heavyDataForNodesUniqueIDs.
localstr());
331 xmfNodesUniqueIDs->SetNumberType(XDMF_INT32_TYPE);
332 xmfNodesUniqueIDs->SetNumberOfElements(
mesh->nbNode());
338 XdmfAttribute *xmfOwnerAttribute=
new XdmfAttribute();
339 xmfOwnerAttribute->SetName(
"NodesOwner");
340 xmfOwnerAttribute->SetAttributeCenter(XDMF_ATTRIBUTE_CENTER_NODE);
341 xmfOwnerAttribute->SetAttributeType(XDMF_ATTRIBUTE_TYPE_SCALAR);
342 XdmfArray *xmfNodesOwners = xmfOwnerAttribute->GetValues();
343 String heavyDataForOwners(h5_file_name+
":/NodesOwners");
344 xmfNodesOwners->SetHeavyDataSetName(heavyDataForOwners.
localstr());
345 xmfNodesOwners->SetNumberType(XDMF_INT32_TYPE);
346 xmfNodesOwners->SetNumberOfElements(
mesh->nbNode());
347 XdmfInt64 nodeIndex=0;
349 nodesUniqueIDs.
add(iNode->uniqueId().asInteger());
350 xmfNodesUniqueIDs->SetValue(nodeIndex, iNode->uniqueId().asInteger());
351 xmfNodesOwners->SetValue(nodeIndex++, iNode->owner());
355 info() <<
"[XmfMeshWriter] Focussing on the topology";
356 XdmfTopology *xmfTopology = xmfGrid->GetTopology();
357 xmfTopology->SetTopologyType(XDMF_MIXED);
358 xmfTopology->SetNumberOfElements(
mesh->nbCell());
359 XdmfArray *xmfConnectivityArray= xmfTopology->GetConnectivity();
360 String heavyDataForConnections(h5_file_name+
":/Connections");
361 xmfConnectivityArray->SetHeavyDataSetName(heavyDataForConnections.
localstr());
362 xmfConnectivityArray->SetNumberType(XDMF_INT32_TYPE);
367 xmfCellsUniqueIDs->SetValue(cellIndex++, iCell->uniqueId().asInteger());
368 _switchXmfType(cell.
type(), arcCellConnectivityArray);
370 for(
Integer j=0; j<nbNodes;++j){
372 for(
Integer i=0; i<meshNbNodes; ++i){
374 if (nodesUniqueIDs[i] != uid)
376 arcCellConnectivityArray.
add(i);
381 xmfConnectivityArray->SetNumberOfElements(arcCellConnectivityArray.
size());
382 info() <<
"[XmfMeshWriter] arcCellConnectivityArray.size()=" << arcCellConnectivityArray.
size();
383 for(XdmfInt32 idx=0; idx<arcCellConnectivityArray.
size();++idx)
384 xmfConnectivityArray->SetValue(idx,arcCellConnectivityArray[idx]);
385 info() <<
"[XmfMeshWriter] Work on grid->topology done";
388 XdmfGeometry *xmfGeometry = xmfGrid->GetGeometry();
389 xmfGeometry->SetGeometryType(XDMF_GEOMETRY_XYZ);
391 XdmfArray *xmfNodeGeometryArray= xmfGeometry->GetPoints();
392 String heavyDataForGeometry(h5_file_name+
":/XYZ");
393 xmfNodeGeometryArray->SetHeavyDataSetName(heavyDataForGeometry.
localstr());
394 xmfNodeGeometryArray->SetNumberType(XDMF_FLOAT32_TYPE);
395 xmfNodeGeometryArray->SetNumberOfElements(3*
mesh->nbNode());
399 const Node& node = *iNode;
400 xmfNodeGeometryArray->SetValue(Index++,
Convert::toDouble(nodes_coords[iNode].x));
401 xmfNodeGeometryArray->SetValue(Index++,
Convert::toDouble(nodes_coords[iNode].y));
402 xmfNodeGeometryArray->SetValue(Index++,
Convert::toDouble(nodes_coords[iNode].z));
405 info() <<
"[XmfMeshWriter] Work on Geometry done";
406 xmfDomain->Insert(xmfGrid);
415 info() <<
"[XmfMeshWriter] Working on Groups";
417 if ( (*arcGroup ==
mesh->cellFamily()->allItems())||(*arcGroup ==
mesh->nodeFamily()->allItems())||\
418 (*arcGroup ==
mesh->edgeFamily()->allItems())||(*arcGroup ==
mesh->faceFamily()->allItems()))
continue;
419 info() <<
"[writeMeshToFile] Found a " << arcGroup->itemKind() <<
"-group " << arcGroup->name();
420 XdmfAttribute *xmfAttribute=
new XdmfAttribute();
421 xmfAttribute->SetName(arcGroup->name().localstr());
422 xmfAttribute->SetAttributeCenter(XDMF_ATTRIBUTE_CENTER_NODE);
423 xmfAttribute->SetAttributeType(XDMF_ATTRIBUTE_TYPE_SCALAR);
424 XdmfArray *xmfGroup = xmfAttribute->GetValues();
425 String heavyDataForGroup(h5_file_name+
":/" + arcGroup->name());
426 xmfGroup->SetHeavyDataSetName(heavyDataForGroup.
localstr());
427 xmfGroup->SetNumberType(XDMF_INT32_TYPE);
428 xmfGroup->SetNumberOfElements(1+arcGroup->size());
430 xmfGroup->SetValue(Index++, arcGroup->itemKind());
432 xmfGroup->SetValue(Index++, iItem->uniqueId().asInteger());
434 xmfGrid->Insert(xmfAttribute);
436 xmfGrid->Insert(xmfCellAttribute);
437 xmfGrid->Insert(xmfNodeAttribute);
438 xmfGrid->Insert(xmfOwnerAttribute);
447 delete xmfCellAttribute;
448 delete xmfNodeAttribute;
449 delete xmfOwnerAttribute;
455 info() <<
"[XmfMeshWriter] Done";