mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 09:50:34 +05:00
In Save(), no need to push nodes and elements in the map to sort them
by ID after SMDS redesign
This commit is contained in:
parent
211c8198b3
commit
38cff1d727
@ -3642,63 +3642,65 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
|
|||||||
// so for each node/element, we store a submesh ID
|
// so for each node/element, we store a submesh ID
|
||||||
|
|
||||||
// Make maps of submesh IDs of elements sorted by element IDs
|
// Make maps of submesh IDs of elements sorted by element IDs
|
||||||
typedef int TElemID;
|
// typedef int TElemID;
|
||||||
typedef int TSubMID;
|
// typedef int TSubMID;
|
||||||
map< TElemID, TSubMID > eId2smId, nId2smId;
|
// map< TElemID, TSubMID > eId2smId, nId2smId;
|
||||||
map< TElemID, TSubMID >::iterator hint; // insertion to map is done before hint
|
|
||||||
const map<int,SMESHDS_SubMesh*>& aSubMeshes = mySMESHDSMesh->SubMeshes();
|
const map<int,SMESHDS_SubMesh*>& aSubMeshes = mySMESHDSMesh->SubMeshes();
|
||||||
map<int,SMESHDS_SubMesh*>::const_iterator itSubM ( aSubMeshes.begin() );
|
map<int,SMESHDS_SubMesh*>::const_iterator itSubM ( aSubMeshes.begin() );
|
||||||
SMDS_NodeIteratorPtr itNode;
|
// SMDS_NodeIteratorPtr itNode;
|
||||||
SMDS_ElemIteratorPtr itElem;
|
// SMDS_ElemIteratorPtr itElem;
|
||||||
for ( itSubM = aSubMeshes.begin(); itSubM != aSubMeshes.end() ; itSubM++ )
|
// for ( itSubM = aSubMeshes.begin(); itSubM != aSubMeshes.end() ; itSubM++ )
|
||||||
{
|
// {
|
||||||
TSubMID aSubMeID = itSubM->first;
|
// TSubMID aSubMeID = itSubM->first;
|
||||||
SMESHDS_SubMesh* aSubMesh = itSubM->second;
|
// SMESHDS_SubMesh* aSubMesh = itSubM->second;
|
||||||
if ( aSubMesh->IsComplexSubmesh() )
|
// if ( aSubMesh->IsComplexSubmesh() )
|
||||||
continue; // submesh containing other submeshs
|
// continue; // sub-mesh containing other sub-meshes
|
||||||
// nodes
|
// // nodes
|
||||||
hint = nId2smId.begin(); // optimize insertion basing on increasing order of elem Ids in submesh
|
// for ( itNode = aSubMesh->GetNodes(); itNode->more(); ++hint)
|
||||||
for ( itNode = aSubMesh->GetNodes(); itNode->more(); ++hint)
|
// nId2smId.insert( nId2smId.back(), make_pair( itNode->next()->GetID(), aSubMeID ));
|
||||||
hint = nId2smId.insert( hint, make_pair( itNode->next()->GetID(), aSubMeID ));
|
// // elements
|
||||||
// elements
|
// for ( itElem = aSubMesh->GetElements(); itElem->more(); ++hint)
|
||||||
hint = eId2smId.begin();
|
// hint = eId2smId.insert( eId2smId.back(), make_pair( itElem->next()->GetID(), aSubMeID ));
|
||||||
for ( itElem = aSubMesh->GetElements(); itElem->more(); ++hint)
|
// }
|
||||||
hint = eId2smId.insert( hint, make_pair( itElem->next()->GetID(), aSubMeID ));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Care of elements that are not on submeshes
|
// // Care of elements that are not on submeshes
|
||||||
if ( mySMESHDSMesh->NbNodes() != nId2smId.size() ) {
|
// if ( mySMESHDSMesh->NbNodes() != nId2smId.size() ) {
|
||||||
for ( itNode = mySMESHDSMesh->nodesIterator(); itNode->more(); )
|
// for ( itNode = mySMESHDSMesh->nodesIterator(); itNode->more(); )
|
||||||
/* --- stl_map.h says : */
|
// /* --- stl_map.h says : */
|
||||||
/* A %map relies on unique keys and thus a %pair is only inserted if its */
|
// /* A %map relies on unique keys and thus a %pair is only inserted if its */
|
||||||
/* first element (the key) is not already present in the %map. */
|
// /* first element (the key) is not already present in the %map. */
|
||||||
nId2smId.insert( make_pair( itNode->next()->GetID(), 0 ));
|
// nId2smId.insert( make_pair( itNode->next()->GetID(), 0 ));
|
||||||
}
|
// }
|
||||||
int nbElems = mySMESHDSMesh->NbEdges() + mySMESHDSMesh->NbFaces() + mySMESHDSMesh->NbVolumes();
|
// int nbElems = mySMESHDSMesh->GetMeshInfo().NbElements();
|
||||||
if ( nbElems != eId2smId.size() ) {
|
// if ( nbElems != eId2smId.size() ) {
|
||||||
for ( itElem = mySMESHDSMesh->elementsIterator(); itElem->more(); )
|
// for ( itElem = mySMESHDSMesh->elementsIterator(); itElem->more(); )
|
||||||
eId2smId.insert( make_pair( itElem->next()->GetID(), 0 ));
|
// eId2smId.insert( make_pair( itElem->next()->GetID(), 0 ));
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Store submesh IDs
|
// Store submesh IDs
|
||||||
for ( int isNode = 0; isNode < 2; ++isNode )
|
for ( int isNode = 0; isNode < 2; ++isNode )
|
||||||
{
|
{
|
||||||
map< TElemID, TSubMID >& id2smId = isNode ? nId2smId : eId2smId;
|
// map< TElemID, TSubMID >& id2smId = isNode ? nId2smId : eId2smId;
|
||||||
if ( id2smId.empty() ) continue;
|
// if ( id2smId.empty() ) continue;
|
||||||
map< TElemID, TSubMID >::const_iterator id_smId = id2smId.begin();
|
// map< TElemID, TSubMID >::const_iterator id_smId = id2smId.begin();
|
||||||
// make and fill array of submesh IDs
|
// // make and fill array of submesh IDs
|
||||||
int* smIDs = new int [ id2smId.size() ];
|
// int* smIDs = new int [ id2smId.size() ];
|
||||||
for ( int i = 0; id_smId != id2smId.end(); ++id_smId, ++i )
|
// for ( int i = 0; id_smId != id2smId.end(); ++id_smId, ++i )
|
||||||
smIDs[ i ] = id_smId->second;
|
// smIDs[ i ] = id_smId->second;
|
||||||
|
SMDS_ElemIteratorPtr eIt =
|
||||||
|
mySMESHDSMesh->elementsIterator( isNode ? SMDSAbs_Node : SMDSAbs_All );
|
||||||
|
int nbElems = isNode ? mySMESHDSMesh->NbNodes() : mySMESHDSMesh->GetMeshInfo().NbElements();
|
||||||
|
std::vector<int> smIDs; smIDs.reserve( nbElems );
|
||||||
|
while ( eIt->more() )
|
||||||
|
if ( const SMDS_MeshElement* e = eIt->next())
|
||||||
|
smIDs.push_back( e->getshapeId() );
|
||||||
// write HDF group
|
// write HDF group
|
||||||
aSize[ 0 ] = id2smId.size();
|
aSize[ 0 ] = nbElems;
|
||||||
string aDSName( isNode ? "Node Submeshes" : "Element Submeshes");
|
string aDSName( isNode ? "Node Submeshes" : "Element Submeshes");
|
||||||
aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_INT32, aSize, 1 );
|
aDataset = new HDFdataset( (char*)aDSName.c_str(), aGroup, HDF_INT32, aSize, 1 );
|
||||||
aDataset->CreateOnDisk();
|
aDataset->CreateOnDisk();
|
||||||
aDataset->WriteOnDisk( smIDs );
|
aDataset->WriteOnDisk( & smIDs[0] );
|
||||||
aDataset->CloseOnDisk();
|
aDataset->CloseOnDisk();
|
||||||
//
|
|
||||||
delete[] smIDs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
aGroup->CloseOnDisk();
|
aGroup->CloseOnDisk();
|
||||||
|
Loading…
Reference in New Issue
Block a user