From 589f816b4fb1c9362a05de1426aff00a4ea3b7dc Mon Sep 17 00:00:00 2001 From: karadaniz Date: Mon, 25 Mar 2024 16:16:09 +0100 Subject: [PATCH] Fix spns #40523 export .mesh is too slow. Extract only unique family ids before using them in to iterate over cells. And ignore operation on fields if no field exists to avoid crash when writing .mesh file --- src/MEDLoader/MeshFormatWriter.cxx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/MEDLoader/MeshFormatWriter.cxx b/src/MEDLoader/MeshFormatWriter.cxx index 447b84a22..d86046d4b 100644 --- a/src/MEDLoader/MeshFormatWriter.cxx +++ b/src/MEDLoader/MeshFormatWriter.cxx @@ -74,11 +74,14 @@ void MeshFormatWriter::setMEDFileDS(MEDCoupling::MEDFileData* mfd) _mesh->incrRef(); MEDCoupling::MEDFileFields* fields = mfd->getFields(); - for (int i = 0; igetNumberOfFields(); i++ ) + if (fields) { - MEDCoupling::MEDFileAnyTypeFieldMultiTS* field = fields->getFieldAtPos(i); - MEDCoupling::MEDFileFieldMultiTS * f = dynamic_cast(field); - _fields.push_back(f); + for (int i = 0; igetNumberOfFields(); i++ ) + { + MEDCoupling::MEDFileAnyTypeFieldMultiTS* field = fields->getFieldAtPos(i); + MEDCoupling::MEDFileFieldMultiTS * f = dynamic_cast(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) { -- 2.39.2