]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Fix spns #40523 export .mesh is too slow. Extract only unique family ids before using...
authorkaradaniz <karadaniz@phimeca.com>
Mon, 25 Mar 2024 15:16:09 +0000 (16:16 +0100)
committerGbkng <guillaume.brooking@gmail.com>
Mon, 17 Jun 2024 18:14:55 +0000 (20:14 +0200)
And ignore operation on fields if no field exists to avoid crash when writing .mesh file

src/MEDLoader/MeshFormatWriter.cxx

index 447b84a227e223294ccf0467c61221f7de661cee..d86046d4b9c91afdca2b6975f4dce717ade75d76 100644 (file)
@@ -74,11 +74,14 @@ void MeshFormatWriter::setMEDFileDS(MEDCoupling::MEDFileData* mfd)
     _mesh->incrRef();
     MEDCoupling::MEDFileFields* fields = mfd->getFields();
 
-    for (int i = 0; i<fields->getNumberOfFields(); i++ )
+    if (fields)
     {
-        MEDCoupling::MEDFileAnyTypeFieldMultiTS* field = fields->getFieldAtPos(i);
-        MEDCoupling::MEDFileFieldMultiTS * f = dynamic_cast<MEDCoupling::MEDFileFieldMultiTS *>(field);
-        _fields.push_back(f);
+      for (int i = 0; i<fields->getNumberOfFields(); i++ )
+      {
+          MEDCoupling::MEDFileAnyTypeFieldMultiTS* field = fields->getFieldAtPos(i);
+          MEDCoupling::MEDFileFieldMultiTS * f = dynamic_cast<MEDCoupling::MEDFileFieldMultiTS *>(field);
+          _fields.push_back(f);
+      }
     }
 
 
@@ -867,7 +870,8 @@ void MeshFormatWriter::linkFamilyToCells()
         int meshDimRelToMax = levs[iDim];
         MEDCoupling::MCAuto< MEDCoupling::MEDCouplingMesh > mesh = _mesh->getMeshAtLevel( meshDimRelToMax);
         MEDCoupling::MCAuto< MEDCoupling::MEDCouplingUMesh > umesh0 = mesh->buildUnstructured();
-        const MEDCoupling::DataArrayIdType * famIds = _mesh->getFamilyFieldAtLevel(meshDimRelToMax);
+        const MEDCoupling::DataArrayIdType * famIdsField = _mesh->getFamilyFieldAtLevel(meshDimRelToMax);
+        const MEDCoupling::DataArrayIdType * famIds = famIdsField->getDifferentValues();
         const MEDCoupling::mcIdType * famID = famIds->begin(), *famIDEnd = famIds->end();
         for (; famID < famIDEnd; ++famID)
         {