#16927: Error when loading a med file with 140 millions elements

This commit is contained in:
eap 2019-05-14 16:58:34 +03:00
parent 35b85c0539
commit e63b88c7f3
2 changed files with 27 additions and 9 deletions

View File

@ -195,8 +195,8 @@ namespace MED
if ( write ) { if ( write ) {
myFile->Open(eLECTURE_ECRITURE, &aRet); myFile->Open(eLECTURE_ECRITURE, &aRet);
if (aRet < 0) { if (aRet < 0) {
myFile->Close(); myFile->Close();
myFile->Open(eCREATION, &aRet); myFile->Open(eCREATION, &aRet);
} }
} }
else { else {
@ -2058,6 +2058,24 @@ namespace MED
TValueHolder<EConnectivite, med_connectivity_mode> aConnMode (theInfo.myConnMode); TValueHolder<EConnectivite, med_connectivity_mode> aConnMode (theInfo.myConnMode);
TErr aRet; 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(), aRet = MEDmeshElementRd(myFile->Id(),
&aMeshName, &aMeshName,
MED_NO_DT, MED_NO_DT,
@ -2080,11 +2098,11 @@ namespace MED
EXCEPTION(std::runtime_error, "GetCellInfo - MEDmeshElementRd(...)"); EXCEPTION(std::runtime_error, "GetCellInfo - MEDmeshElementRd(...)");
if (anIsFamNum == MED_FALSE) if (anIsFamNum == MED_FALSE)
{ {
int mySize = (int) theInfo.myFamNum->size(); int mySize = (int) theInfo.myFamNum->size();
theInfo.myFamNum->clear(); theInfo.myFamNum->clear();
theInfo.myFamNum->resize(mySize, 0); theInfo.myFamNum->resize(mySize, 0);
} }
} }

View File

@ -279,7 +279,7 @@ namespace MED
EModeSwitch theMode = eFULL_INTERLACE, EModeSwitch theMode = eFULL_INTERLACE,
ERepere theSystem = eCART, ERepere theSystem = eCART,
EBooleen theIsElemNum = eVRAI, EBooleen theIsElemNum = eVRAI,
EBooleen theIsElemNames = eVRAI); EBooleen theIsElemNames = eFAUX);
//! Create a MEDWrapper MED Nodes representation //! Create a MEDWrapper MED Nodes representation
virtual virtual
@ -521,7 +521,7 @@ namespace MED
TInt theNbElem, TInt theNbElem,
EConnectivite theConnMode = eNOD, EConnectivite theConnMode = eNOD,
EBooleen theIsElemNum = eVRAI, EBooleen theIsElemNum = eVRAI,
EBooleen theIsElemNames = eVRAI, EBooleen theIsElemNames = eFAUX,
EModeSwitch theMode = eFULL_INTERLACE); EModeSwitch theMode = eFULL_INTERLACE);
//! Create a MEDWrapper MED Cells representation //! Create a MEDWrapper MED Cells representation