From e63b88c7f344d9a9a6b398b25305c8c610dfcdf0 Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 14 May 2019 16:58:34 +0300 Subject: [PATCH] #16927: Error when loading a med file with 140 millions elements --- src/MEDWrapper/MED_Wrapper.cxx | 32 +++++++++++++++++++++++++------- src/MEDWrapper/MED_Wrapper.hxx | 4 ++-- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/MEDWrapper/MED_Wrapper.cxx b/src/MEDWrapper/MED_Wrapper.cxx index 157f98342..85a8d9f35 100644 --- a/src/MEDWrapper/MED_Wrapper.cxx +++ b/src/MEDWrapper/MED_Wrapper.cxx @@ -195,8 +195,8 @@ namespace MED if ( write ) { myFile->Open(eLECTURE_ECRITURE, &aRet); if (aRet < 0) { - myFile->Close(); - myFile->Open(eCREATION, &aRet); + myFile->Close(); + myFile->Open(eCREATION, &aRet); } } else { @@ -2058,6 +2058,24 @@ namespace MED TValueHolder aConnMode (theInfo.myConnMode); TErr aRet; + med_bool dummy; + aRet = MEDmeshnEntity(myFile->Id(), + &aMeshName, + MED_NO_DT, + MED_NO_IT, + anEntity, + aGeom, + MED_NAME, + aConnMode, + &dummy, &dummy); + if ( aRet > 0 ) + { + // names are present in the file, they will be read in spite of theInfo.myIsElemNames + theInfo.myIsElemNames = eVRAI; + theInfo.myElemNames.reset( new TString( theInfo.myNbElem * GetPNOMLength() + 1 )); + anElemNames.myRepresentation = & ((TString&) theInfo.myElemNames )[0]; + } + aRet = MEDmeshElementRd(myFile->Id(), &aMeshName, MED_NO_DT, @@ -2080,11 +2098,11 @@ namespace MED EXCEPTION(std::runtime_error, "GetCellInfo - MEDmeshElementRd(...)"); if (anIsFamNum == MED_FALSE) - { - int mySize = (int) theInfo.myFamNum->size(); - theInfo.myFamNum->clear(); - theInfo.myFamNum->resize(mySize, 0); - } + { + int mySize = (int) theInfo.myFamNum->size(); + theInfo.myFamNum->clear(); + theInfo.myFamNum->resize(mySize, 0); + } } diff --git a/src/MEDWrapper/MED_Wrapper.hxx b/src/MEDWrapper/MED_Wrapper.hxx index e236f206c..6761a19e8 100644 --- a/src/MEDWrapper/MED_Wrapper.hxx +++ b/src/MEDWrapper/MED_Wrapper.hxx @@ -279,7 +279,7 @@ namespace MED EModeSwitch theMode = eFULL_INTERLACE, ERepere theSystem = eCART, EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI); + EBooleen theIsElemNames = eFAUX); //! Create a MEDWrapper MED Nodes representation virtual @@ -521,7 +521,7 @@ namespace MED TInt theNbElem, EConnectivite theConnMode = eNOD, EBooleen theIsElemNum = eVRAI, - EBooleen theIsElemNames = eVRAI, + EBooleen theIsElemNames = eFAUX, EModeSwitch theMode = eFULL_INTERLACE); //! Create a MEDWrapper MED Cells representation -- 2.39.2