Salome HOME
Indices are stored as mcIdType type instead of int to support switch to 64bits indexing
[tools/medcoupling.git] / src / MEDPartitioner / MEDPARTITIONER_ParallelTopology.cxx
index 99c62b4a91c1fe26fcdf3be0d978126e5e7186e7..af874d65848cd51b6c60b39c30d697421f7f79a0 100644 (file)
@@ -28,6 +28,7 @@
 #include "MEDCouplingSkyLineArray.hxx"
 #include "MEDCouplingUMesh.hxx"
 #include "InterpKernelHashMap.hxx"
+#include "MCIdType.hxx"
 
 #include <set>
 #include <map>
@@ -47,7 +48,7 @@ ParallelTopology::ParallelTopology():_nb_domain(0),_mesh_dimension(0)
 //constructing topology according to mesh collection without global numerotation (use setGlobalNumerotation later)
 ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMesh*>& meshes)
 {
-  _nb_domain=meshes.size();
+  _nb_domain=(int)meshes.size();
   _nb_cells.resize(_nb_domain);
   _nb_nodes.resize(_nb_domain);
   //  _nb_faces.resize(_nb_domain);
@@ -98,10 +99,10 @@ void ParallelTopology::setGlobalNumerotationDefault(ParaDomainSelector* domainSe
   for (int idomain=0; idomain<_nb_domain; idomain++)
     {
       _loc_to_glob[idomain].resize(_nb_cells[idomain]);
-      int domainCellShift=domainSelector->getDomainCellShift(idomain);
-      for (int i=0; i<_nb_cells[idomain]; i++)
+      mcIdType domainCellShift=domainSelector->getDomainCellShift(idomain);
+      for (mcIdType i=0; i<_nb_cells[idomain]; i++)
         {
-          int global=domainCellShift+i ;
+          mcIdType global=domainCellShift+i ;
           _glob_to_loc.insert(std::make_pair(global,std::make_pair(idomain,i)));
           _loc_to_glob[idomain][i]=global;
           if (MyGlobals::_Verbose>500)
@@ -117,10 +118,10 @@ void ParallelTopology::setGlobalNumerotationDefault(ParaDomainSelector* domainSe
   for (int idomain=0; idomain<_nb_domain; idomain++)
     {
       _node_loc_to_glob[idomain].resize(_nb_nodes[idomain]);
-      int domainNodeShift=domainSelector->getDomainNodeShift(idomain);
-      for (int i=0; i<_nb_nodes[idomain]; i++)
+      mcIdType domainNodeShift=domainSelector->getDomainNodeShift(idomain);
+      for (mcIdType i=0; i<_nb_nodes[idomain]; i++)
         {
-          int global=domainNodeShift+i ;
+          mcIdType global=domainNodeShift+i ;
           _node_glob_to_loc.insert(std::make_pair(global,std::make_pair(idomain,i)));
           _node_loc_to_glob[idomain][i]=global;
           if (MyGlobals::_Verbose>500)
@@ -142,14 +143,14 @@ void ParallelTopology::setGlobalNumerotationDefault(ParaDomainSelector* domainSe
 //constructing topology according to mesh collection
 ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMesh*>& meshes, 
                                    const std::vector<MEDPARTITIONER::ConnectZone*>& cz,
-                                   std::vector<int*>& cellglobal,
-                                   std::vector<int*>& nodeglobal,
-                                   std::vector<int*>& faceglobal)
+                                   std::vector<mcIdType*>& cellglobal,
+                                   std::vector<mcIdType*>& nodeglobal,
+                                   std::vector<mcIdType*>& faceglobal)
 {
-  _nb_domain=meshes.size();
-  int index_global=0;
-  int index_node_global=0;
-  int index_face_global=0;
+  _nb_domain=(int)meshes.size();
+  mcIdType index_global=0;
+  mcIdType index_node_global=0;
+  mcIdType index_face_global=0;
 
   _nb_cells.resize(_nb_domain);
   _nb_nodes.resize(_nb_domain);
@@ -177,9 +178,9 @@ ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMe
         {
           //int cellDomainShift=_cell_shift_by_domain[idomain];
           //creating global numbering from scratch
-          for (int i=0; i<_nb_cells[idomain]; i++)
+          for (mcIdType i=0; i<_nb_cells[idomain]; i++)
             {
-              int global=i ;//cellDomainShift+i;
+              mcIdType global=i ;//cellDomainShift+i;
               _glob_to_loc.insert(std::make_pair(global,std::make_pair(idomain,i)));
               _loc_to_glob[idomain][i]=global;
               index_global++;
@@ -188,9 +189,9 @@ ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMe
       //using global numbering coming from a previous numbering
       else
         {
-          for (int i=0; i<_nb_cells[idomain]; i++)
+          for (mcIdType i=0; i<_nb_cells[idomain]; i++)
             {
-              int global=cellglobal[idomain][i];
+              mcIdType global=cellglobal[idomain][i];
               _glob_to_loc.insert(std::make_pair(global,std::make_pair(idomain,i)));
               //_loc_to_glob[make_pair(idomain,i+1)]=global;
               _loc_to_glob[idomain][i]=global;
@@ -204,7 +205,7 @@ ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMe
           _nb_total_cells=index_global;
           _nb_cells[0]=index_global;
           _node_loc_to_glob[idomain].resize(meshes[idomain]->getNumberOfNodes());
-          for (int i=0; i<meshes[idomain]->getNumberOfNodes(); i++)
+          for (mcIdType i=0; i<meshes[idomain]->getNumberOfNodes(); i++)
             {
               _node_glob_to_loc.insert(std::make_pair(i,std::make_pair(0,i)));
               _node_loc_to_glob[0][i]=i;
@@ -216,20 +217,20 @@ ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMe
 
       //creating node maps
       _nb_nodes[idomain]=meshes[idomain]->getNumberOfNodes();
-      INTERP_KERNEL::HashMap <int,std::pair<int,int> > local2distant;
+      INTERP_KERNEL::HashMap <mcIdType,std::pair<int,mcIdType> > local2distant;
       _node_loc_to_glob[idomain].resize(_nb_nodes[idomain]);
       for (std::size_t icz=0; icz<cz.size(); icz++)
         {
           if (cz[icz]->getLocalDomainNumber() == idomain && 
               cz[icz]->getLocalDomainNumber()>cz[icz]->getDistantDomainNumber())
             {
-              int nb_node= cz[icz]->getNodeNumber();
-              const int* node_corresp=cz[icz]->getNodeCorrespValue();
+              mcIdType nb_node= cz[icz]->getNodeNumber();
+              const mcIdType* node_corresp=cz[icz]->getNodeCorrespValue();
               int distant_ip = cz[icz]->getDistantDomainNumber();
-              for (int i=0; i< nb_node; i++)
+              for (mcIdType i=0; i< nb_node; i++)
                 {
-                  int local= node_corresp[i*2];
-                  int distant = node_corresp[i*2+1];
+                  mcIdType local= node_corresp[i*2];
+                  mcIdType distant = node_corresp[i*2+1];
                   local2distant.insert(std::make_pair(local, std::make_pair(distant_ip,distant)));    
                 }
             }
@@ -237,7 +238,7 @@ ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMe
       // setting mappings for all nodes
       if (nodeglobal[idomain]==0)
         {
-          for (int inode=0; inode<_nb_nodes[idomain]; inode++)
+          for (mcIdType inode=0; inode<_nb_nodes[idomain]; inode++)
             {
               if (local2distant.find(inode)==local2distant.end())
                 {
@@ -249,8 +250,8 @@ ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMe
               else
                 {
                   int ip = (local2distant.find(inode)->second).first;
-                  int distant = (local2distant.find(inode)->second).second;
-                  int global_number=_loc_to_glob[ip][distant];
+                  mcIdType distant = (local2distant.find(inode)->second).second;
+                  mcIdType global_number=_loc_to_glob[ip][distant];
                   _node_glob_to_loc.insert(std::make_pair(global_number,std::make_pair(idomain,inode)));
                   _node_loc_to_glob[idomain][inode]=global_number;
                 } 
@@ -259,9 +260,9 @@ ParallelTopology::ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMe
       //using former node numbering
       else
         {
-          for (int inode=0; inode<_nb_nodes[idomain]; inode++)
+          for (mcIdType inode=0; inode<_nb_nodes[idomain]; inode++)
             {
-              int global_number=nodeglobal[idomain][inode];
+              mcIdType global_number=nodeglobal[idomain][inode];
               _node_glob_to_loc.insert(std::make_pair(global_number,std::make_pair(idomain,inode)));
               _node_loc_to_glob[idomain][inode]=global_number;
             }
@@ -292,7 +293,7 @@ ParallelTopology::ParallelTopology(Graph* graph, Topology* oldTopology, int nb_d
   _node_loc_to_glob.resize(_nb_domain);
   _face_loc_to_glob.resize(_nb_domain);
   
-  const int* part=graph->getPart(); //all cells for this proc (may be more domains)
+  const mcIdType* part=graph->getPart(); //all cells for this proc (may be more domains)
   _nb_total_cells=graph->nbVertices(); //all cells for this proc (may be more domains)
   if (MyGlobals::_Verbose>300)
     std::cout << "proc " << MyGlobals::_Rank << " : topology from partition, nbTotalCells " << _nb_total_cells << std::endl;
@@ -300,17 +301,17 @@ ParallelTopology::ParallelTopology(Graph* graph, Topology* oldTopology, int nb_d
   int icellProc=0; //all cells of my domains are concatenated in part
   for (int iold=0; iold<oldTopology->nbDomain(); iold++)
     {
-      int ioldNbCell=oldTopology->getCellNumber(iold);
+      mcIdType ioldNbCell=oldTopology->getCellNumber(iold);
       //std::cout<<"proc "<<MyGlobals::_Rank<<" : cell number old domain "<<iold<<" : "<<ioldNbCell<<std::endl;
       //if not my old domains getCellNumber is 0
-      std::vector<int> globalids(ioldNbCell);
+      std::vector<mcIdType> globalids(ioldNbCell);
       oldTopology->getCellList(iold, &globalids[0]); //unique global numerotation
-      for (int icell=0; icell<ioldNbCell; icell++)
+      for (mcIdType icell=0; icell<ioldNbCell; icell++)
         {
-          int idomain=part[icellProc];
+          int idomain=FromIdType<int>(part[icellProc]);
           _nb_cells[idomain]++;
           icellProc++;
-          int iGlobalCell=globalids[icell];
+          mcIdType iGlobalCell=globalids[icell];
           _loc_to_glob[idomain].push_back(iGlobalCell);
           _glob_to_loc.insert(std::make_pair(iGlobalCell, std::make_pair(idomain, _nb_cells[idomain])));
         }
@@ -324,29 +325,29 @@ ParallelTopology::ParallelTopology(Graph* graph, Topology* oldTopology, int nb_d
 
   if ( MyGlobals::_Create_Joints && nb_domain > 1 )
     {
-      std::vector< std::vector< std::vector< int > > > cellCorresp( nb_domain );
+      std::vector< std::vector< std::vector< mcIdType > > > cellCorresp( nb_domain );
       for ( int idomain = 0; idomain < nb_domain; ++idomain )
         {
           cellCorresp[ idomain ].resize( nb_domain );
         }
       const MEDCoupling::MEDCouplingSkyLineArray* skylinegraph = graph->getGraph();
-      const int*  index = skylinegraph->getIndex();
-      const int*  value = skylinegraph->getValues();
-      const int nbCells = skylinegraph->getNumberOf();
+      const mcIdType*  index = skylinegraph->getIndex();
+      const mcIdType*  value = skylinegraph->getValues();
+      const mcIdType nbCells = skylinegraph->getNumberOf();
 
-      for ( int iGlob = 0; iGlob < nbCells; ++iGlob )
+      for ( mcIdType iGlob = 0; iGlob < nbCells; ++iGlob )
         {
-          int iGlobDom = part[ iGlob ];
-          for ( int i = index[ iGlob ]; i < index[ iGlob+1 ]; i++ )
+          int iGlobDom = FromIdType<int>(part[ iGlob ]);
+          for ( mcIdType i = index[ iGlob ]; i < index[ iGlob+1 ]; i++ )
             {
-              int iGlobNear = value[ i ];
+              mcIdType iGlobNear = value[ i ];
               if ( iGlob > iGlobNear )
                 continue; // treat ( iGlob, iGlobNear ) pair once
-              int iGlobNearDom = part[ iGlobNear ];
+              int iGlobNearDom = FromIdType<int>(part[ iGlobNear ]);
               if ( iGlobDom != iGlobNearDom )
                 {
-                  int iLoc     = convertGlobalCell( iGlob ).second     - 1; // to MEDCoupling fmt
-                  int iLocNear = convertGlobalCell( iGlobNear ).second - 1;
+                  mcIdType iLoc     = convertGlobalCell( iGlob ).second     - 1; // to MEDCoupling fmt
+                  mcIdType iLocNear = convertGlobalCell( iGlobNear ).second - 1;
                   cellCorresp[ iGlobDom ][ iGlobNearDom ].push_back( iLoc );
                   cellCorresp[ iGlobDom ][ iGlobNearDom ].push_back( iLocNear );
                   cellCorresp[ iGlobNearDom ][ iGlobDom ].push_back( iLocNear );
@@ -358,14 +359,14 @@ ParallelTopology::ParallelTopology(Graph* graph, Topology* oldTopology, int nb_d
         {
           for ( int idomainNear = 0; idomainNear < nb_domain; ++idomainNear )
             {
-              std::vector< int > & corresp = cellCorresp[ idomain ][ idomainNear ];
+              std::vector< mcIdType > & corresp = cellCorresp[ idomain ][ idomainNear ];
               if ( corresp.empty() )
                 continue;
               MEDPARTITIONER::ConnectZone* cz = new MEDPARTITIONER::ConnectZone();
               cz->setName( "Connect Zone defined by MEDPARTITIONER" );
               cz->setDistantDomainNumber( idomainNear );
               cz->setLocalDomainNumber  ( idomain );
-              cz->setEntityCorresp( 0,0, &corresp[0], corresp.size()/2 );
+              cz->setEntityCorresp( 0,0, &corresp[0], ToIdType( corresp.size()/2 ));
               _connect_zones.push_back( cz );
             }
         }
@@ -388,13 +389,13 @@ ParallelTopology::~ParallelTopology()
  * If a node in the list is represented on several domains,
  * only the first value is returned
  * */
-void ParallelTopology::convertGlobalNodeList(const int* node_list, int nbnode, int* local, int* ip)
+void ParallelTopology::convertGlobalNodeList(const mcIdType* node_list, mcIdType nbnode, mcIdType* local, int* ip)
 {
   if (_node_glob_to_loc.empty())
     throw INTERP_KERNEL::Exception("Node mapping has not yet been built");
-  for (int i=0; i< nbnode; i++)
+  for (mcIdType i=0; i< nbnode; i++)
     {
-      std::pair<int,int> local_node = _node_glob_to_loc.find(node_list[i])->second;
+      std::pair<int,mcIdType> local_node = _node_glob_to_loc.find(node_list[i])->second;
       ip[i]=local_node.first;
       local[i]=local_node.second;
     }
@@ -407,14 +408,14 @@ void ParallelTopology::convertGlobalNodeList(const int* node_list, int nbnode, i
  * only the value with domain ip is returned
  * 
  * */
-void ParallelTopology::convertGlobalNodeList(const int* node_list, int nbnode, int* local, int ip)
+void ParallelTopology::convertGlobalNodeList(const mcIdType* node_list, mcIdType nbnode, mcIdType* local, int ip)
 {
   if (_node_glob_to_loc.empty()) 
     throw INTERP_KERNEL::Exception("Node mapping has not yet been built");
 
-  for (int i=0; i< nbnode; i++)
+  for (mcIdType i=0; i< nbnode; i++)
     {
-      typedef INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> >::iterator mmiter;
+      typedef INTERP_KERNEL::HashMultiMap<mcIdType,std::pair<int,mcIdType> >::iterator mmiter;
       std::pair<mmiter,mmiter> range=_node_glob_to_loc.equal_range(node_list[i]);
       for (mmiter it=range.first; it !=range.second; it++)
         { 
@@ -431,24 +432,24 @@ void ParallelTopology::convertGlobalNodeList(const int* node_list, int nbnode, i
  * If a node in the list is represented on several domains,
  * all the values are put in the array
  * */
-void ParallelTopology::convertGlobalNodeListWithTwins(const int* node_list, int nbnode, int*& local, int*& ip,int*& full_array, int& size)
+void ParallelTopology::convertGlobalNodeListWithTwins(const mcIdType* node_list, mcIdType nbnode, mcIdType*& local, int*& ip,mcIdType*& full_array, mcIdType& size)
 {
   if (_node_glob_to_loc.empty()) 
     throw INTERP_KERNEL::Exception("Node mapping has not yet been built");
 
   size=0;
-  for (int i=0; i< nbnode; i++)
+  for (mcIdType i=0; i< nbnode; i++)
     {
-      int count= _node_glob_to_loc.count(node_list[i]);
+      mcIdType count= ToIdType( _node_glob_to_loc.count(node_list[i]));
       size+=count;
     }
-  int index=0;
+  mcIdType index=0;
   ip=new int[size];
-  local=new int[size];
-  full_array=new int[size];
-  for (int i=0; i< nbnode; i++)
+  local=new mcIdType[size];
+  full_array=new mcIdType[size];
+  for (mcIdType i=0; i< nbnode; i++)
     {
-      typedef INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> >::iterator mmiter;
+      typedef INTERP_KERNEL::HashMultiMap<mcIdType,std::pair<int,mcIdType> >::iterator mmiter;
       std::pair<mmiter,mmiter> range=_node_glob_to_loc.equal_range(node_list[i]);
       for (mmiter it=range.first; it !=range.second; it++)
         { 
@@ -467,22 +468,22 @@ void ParallelTopology::convertGlobalNodeListWithTwins(const int* node_list, int
  * If a face in the list is represented on several domains,
  * all the values are put in the array
  * */
-void ParallelTopology::convertGlobalFaceListWithTwins(const int* face_list, int nbface, int*& local, int*& ip, int*& full_array,int& size)
+void ParallelTopology::convertGlobalFaceListWithTwins(const mcIdType* face_list, mcIdType nbface, mcIdType*& local, int*& ip, mcIdType*& full_array,mcIdType& size)
 {
   size=0;
-  for (int i=0; i< nbface; i++)
+  for (mcIdType i=0; i< nbface; i++)
     {
       //int count = _face_glob_to_loc.count(face_list[i]);
       //if (count >1) MESSAGE_MED("face en doublon "<<face_list[i]);
-      size+= _face_glob_to_loc.count(face_list[i]);
+      size+= ToIdType(_face_glob_to_loc.count(face_list[i]));
     }
-  int index=0;
+  mcIdType index=0;
   ip=new int[size];
-  local=new int[size];
-  full_array=new int[size];
-  for (int i=0; i< nbface; i++)
+  local=new mcIdType[size];
+  full_array=new mcIdType[size];
+  for (mcIdType i=0; i< nbface; i++)
     {
-      typedef INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> >::iterator mmiter;
+      typedef INTERP_KERNEL::HashMultiMap<mcIdType,std::pair<int,mcIdType> >::iterator mmiter;
       std::pair<mmiter,mmiter> range=_face_glob_to_loc.equal_range(face_list[i]);
       for (mmiter it=range.first; it !=range.second; it++)
         { 
@@ -497,11 +498,11 @@ void ParallelTopology::convertGlobalFaceListWithTwins(const int* face_list, int
 
 //!converts a list of global cell numbers
 //!to a distributed array with local cell numbers 
-void ParallelTopology::convertGlobalCellList(const int* cell_list, int nbcell, int* local, int* ip)
+void ParallelTopology::convertGlobalCellList(const mcIdType* cell_list, mcIdType nbcell, mcIdType* local, int* ip)
 {
-  for (int i=0; i<nbcell; i++)
+  for (mcIdType i=0; i<nbcell; i++)
     {
-      INTERP_KERNEL::HashMap<int, std::pair<int,int> >::const_iterator iter = _glob_to_loc.find(cell_list[i]);
+      INTERP_KERNEL::HashMap<mcIdType, std::pair<int,mcIdType> >::const_iterator iter = _glob_to_loc.find(cell_list[i]);
       if (iter == _glob_to_loc.end())
         {
           std::cerr << "proc " << MyGlobals::_Rank << " : KO cell_list[" << i << "] : " << cell_list[i] << std::endl;
@@ -518,11 +519,11 @@ void ParallelTopology::convertGlobalCellList(const int* cell_list, int nbcell, i
 /*!Converts a list of global face numbers
  * to a distributed array with local face numbers
  */ 
-void ParallelTopology::convertGlobalFaceList(const int* face_list, int nbface, int* local, int* ip)
+void ParallelTopology::convertGlobalFaceList(const mcIdType* face_list, mcIdType nbface, mcIdType* local, int* ip)
 {
-  for (int i=0; i< nbface; i++)
+  for (mcIdType i=0; i< nbface; i++)
     {
-      INTERP_KERNEL::HashMap<int, std::pair<int,int> >::const_iterator iter = _face_glob_to_loc.find(face_list[i]);
+      INTERP_KERNEL::HashMap<mcIdType, std::pair<int,mcIdType> >::const_iterator iter = _face_glob_to_loc.find(face_list[i]);
       if (iter == _face_glob_to_loc.end())
         {
           throw INTERP_KERNEL::Exception("ParallelTopology::convertGlobalFaceList : Face not found");
@@ -539,11 +540,11 @@ void ParallelTopology::convertGlobalFaceList(const int* face_list, int nbface, i
  * only the value with domain ip is returned
  * 
  */
-void ParallelTopology::convertGlobalFaceList(const int* face_list, int nbface, int* local, int ip)
+void ParallelTopology::convertGlobalFaceList(const mcIdType* face_list, mcIdType nbface, mcIdType* local, int ip)
 {
-  for (int i=0; i< nbface; i++)
+  for (mcIdType i=0; i< nbface; i++)
     {
-      typedef INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> >::iterator mmiter;
+      typedef INTERP_KERNEL::HashMultiMap<mcIdType,std::pair<int,mcIdType> >::iterator mmiter;
       std::pair<mmiter,mmiter> range=_face_glob_to_loc.equal_range(face_list[i]);
       for (mmiter it=range.first; it !=range.second; it++)
         { 
@@ -558,13 +559,13 @@ void ParallelTopology::convertGlobalFaceList(const int* face_list, int nbface, i
 //replacing a table of global numbering with a table with local numberings
 // type_connectivity contains global connectivity for each type in input
 // type_connectivity contains local connectivity for each type in output
-void ParallelTopology::convertToLocal2ndVersion(int* nodes, int nbnodes, int idomain)
+void ParallelTopology::convertToLocal2ndVersion(mcIdType* nodes, mcIdType nbnodes, int idomain)
 {
-  for (int inode=0; inode<nbnodes; inode++)
+  for (mcIdType inode=0; inode<nbnodes; inode++)
     {
       //      cout <<" inode :"<<inode<< " global = "<<type_connectivity[type][inode];
-      int global = nodes[inode];
-      typedef INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> >::iterator mmiter;
+      mcIdType global = nodes[inode];
+      typedef INTERP_KERNEL::HashMultiMap<mcIdType,std::pair<int,mcIdType> >::iterator mmiter;
       std::pair<mmiter,mmiter> range=_node_glob_to_loc.equal_range(global);
       for (mmiter it=range.first; it !=range.second; it++)
         {
@@ -577,9 +578,9 @@ void ParallelTopology::convertToLocal2ndVersion(int* nodes, int nbnodes, int ido
 /*!
  * \brief Return max global face number
  */
-int ParallelTopology::getMaxGlobalFace() const
+mcIdType ParallelTopology::getMaxGlobalFace() const
 {
-  int max = 0;
+  mcIdType max = 0;
   TGlob2LocsMap::const_iterator g_l_l = _face_glob_to_loc.begin();
   for ( ; g_l_l != _face_glob_to_loc.end(); ++g_l_l )
     if ( g_l_l->first > max )
@@ -587,59 +588,59 @@ int ParallelTopology::getMaxGlobalFace() const
   return max;
 }
 
-int ParallelTopology::getNodeNumber() const
+mcIdType ParallelTopology::getNodeNumber() const
 {
   if (_node_glob_to_loc.empty()) return 0;
-  std::set <int> keys;
-  for (INTERP_KERNEL::HashMultiMap<int, std::pair<int,int> >::const_iterator iter= _node_glob_to_loc.begin(); iter!=_node_glob_to_loc.end(); iter++)
+  std::set <mcIdType> keys;
+  for (INTERP_KERNEL::HashMultiMap<mcIdType, std::pair<int,mcIdType> >::const_iterator iter= _node_glob_to_loc.begin(); iter!=_node_glob_to_loc.end(); iter++)
     {
       keys.insert(iter->first);
     }
-  return keys.size();
+  return ToIdType(keys.size());
 }
 
 /*!
  * retrieving list of nodes in global numbers
  */
-void ParallelTopology::getNodeList(int idomain, int *list) const
+void ParallelTopology::getNodeList(int idomain, mcIdType *list) const
 {
-  for (int i=0; i<_nb_nodes[idomain]; i++) 
+  for (mcIdType i=0; i<_nb_nodes[idomain]; i++) 
     list[i]=_node_loc_to_glob[idomain][i];
 }
 
 /*!
  * retrieving list of nodes in global numbers
  */
-void ParallelTopology::getCellList(int idomain, int *list) const
+void ParallelTopology::getCellList(int idomain, mcIdType *list) const
 {
-  for (int i=0; i<_nb_cells[idomain];i++)
+  for (mcIdType i=0; i<_nb_cells[idomain];i++)
     list[i]=_loc_to_glob[idomain][i];
 }
 
-int ParallelTopology::getFaceNumber() const
+mcIdType ParallelTopology::getFaceNumber() const
 {
   if (_face_glob_to_loc.empty())
     return 0;
-  std::set <int> keys;
-  for (INTERP_KERNEL::HashMultiMap<int, std::pair<int,int> >::const_iterator iter= _face_glob_to_loc.begin(); iter!=_face_glob_to_loc.end(); iter++)
+  std::set <mcIdType> keys;
+  for (INTERP_KERNEL::HashMultiMap<mcIdType, std::pair<int,mcIdType> >::const_iterator iter= _face_glob_to_loc.begin(); iter!=_face_glob_to_loc.end(); iter++)
     {
       keys.insert(iter->first);
     }
-  return keys.size();
+  return ToIdType(keys.size());
 }
 
 /*!
  * retrieving list of faces in global numbers
  */
-void ParallelTopology::getFaceList(int idomain, int *list) const
+void ParallelTopology::getFaceList(int idomain, mcIdType *list) const
 {
-  for (int i=0; i<_nb_faces[idomain];i++)   
+  for (mcIdType i=0; i<_nb_faces[idomain];i++)   
     list[i]=_face_loc_to_glob[idomain][i];
 }
 
-int ParallelTopology::convertGlobalFace(int iglobal, int idomain)
+mcIdType ParallelTopology::convertGlobalFace(mcIdType iglobal, int idomain)
 {
-  typedef INTERP_KERNEL::HashMultiMap<int, std::pair<int,int> >::const_iterator MMiter;
+  typedef INTERP_KERNEL::HashMultiMap<mcIdType, std::pair<int,mcIdType> >::const_iterator MMiter;
   std::pair<MMiter,MMiter> eq = _face_glob_to_loc.equal_range(iglobal);
   for (MMiter it=eq.first; it != eq.second; it++) 
     if (it->second.first == idomain)
@@ -647,9 +648,9 @@ int ParallelTopology::convertGlobalFace(int iglobal, int idomain)
   return -1;
 }
 
-int ParallelTopology::convertGlobalNode(int iglobal, int idomain)
+mcIdType ParallelTopology::convertGlobalNode(mcIdType iglobal, int idomain)
 {
-  typedef INTERP_KERNEL::HashMultiMap<int, std::pair<int,int> >::const_iterator MMiter;
+  typedef INTERP_KERNEL::HashMultiMap<mcIdType, std::pair<int,mcIdType> >::const_iterator MMiter;
   std::pair<MMiter,MMiter> eq = _node_glob_to_loc.equal_range(iglobal);
   for (MMiter it=eq.first; it != eq.second; it++)
     {
@@ -667,7 +668,7 @@ std::vector<MEDPARTITIONER::ConnectZone*>& ParallelTopology::getCZ()
 /*!
  * adding a face to the topology
  */
-void ParallelTopology::appendFace(int idomain, int ilocal, int iglobal)
+void ParallelTopology::appendFace(int idomain, mcIdType ilocal, mcIdType iglobal)
 {
   _face_loc_to_glob[idomain].push_back(iglobal);
   _face_glob_to_loc.insert(std::make_pair(iglobal,std::make_pair(idomain,ilocal)));