Salome HOME
Indices are stored as mcIdType type instead of int to support switch to 64bits indexing
[tools/medcoupling.git] / src / MEDPartitioner / MEDPARTITIONER_ParallelTopology.hxx
index ac56db37595856040ccb5a7c162257f5d28acfef..fb453c9af0bb437ba0aff1233655e546f18bceb5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2019  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -22,8 +22,6 @@
 
 #include "MEDPARTITIONER.hxx"
 #include "MEDPARTITIONER_Topology.hxx"
-#include "MEDPARTITIONER_ParaDomainSelector.hxx"
-
 
 #include "InterpKernelHashMap.hxx"
 
@@ -34,7 +32,7 @@ namespace MEDPARTITIONER
 {
   class Graph;
   class MeshCollection;
-  class MEDPARTITIONER_FaceModel;
+  class ParaDomainSelector;
 
   class MEDPARTITIONER_EXPORT ParallelTopology : public Topology
   {
@@ -42,12 +40,12 @@ namespace MEDPARTITIONER
   public:
 
     ParallelTopology();
-    ParallelTopology(const std::vector<ParaMEDMEM::MEDCouplingUMesh*>&);
-    ParallelTopology(const std::vector<ParaMEDMEM::MEDCouplingUMesh*>&,
+    ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMesh*>&);
+    ParallelTopology(const std::vector<MEDCoupling::MEDCouplingUMesh*>&,
                      const std::vector<MEDPARTITIONER::ConnectZone*>&,
-                     std::vector<int*>&,
-                     std::vector<int*>&,
-                     std::vector<int*>&);
+                     std::vector<mcIdType*>&,
+                     std::vector<mcIdType*>&,
+                     std::vector<mcIdType*>&);
     ParallelTopology(Graph* graph, Topology* oldTopology, int nbdomain, int mesh_dimension);
     ~ParallelTopology();
     
@@ -56,135 +54,141 @@ namespace MEDPARTITIONER
     /*! converts a list of global cell numbers
      * to a distributed array with local cell numbers
      */
-    void convertGlobalNodeList(const int*, int,int*,int*);
-    void convertGlobalNodeList(const int*, int,int*,int);
-    void convertGlobalNodeListWithTwins(const int* face_list, int nbnode, int*& local, int*& ip, int*& full_array, int& size);
+    void convertGlobalNodeList(const mcIdType*, mcIdType,mcIdType*,int*);
+    void convertGlobalNodeList(const mcIdType*, mcIdType,mcIdType*,int);
+    void convertGlobalNodeListWithTwins(const mcIdType* face_list, mcIdType nbnode, mcIdType*& local, int*& ip, mcIdType*& full_array, mcIdType& size);
 
     /*! converts a list of global node numbers
      * to a distributed array with local cell numbers
      */
-    void convertGlobalCellList(const int*, int , int*, int *);
+    void convertGlobalCellList(const mcIdType*, mcIdType , mcIdType*, int *);
 
     /*! converts a list of global face numbers
      *  to a distributed array with local face numbers
      */
-    void convertGlobalFaceList(const int*, int , int*, int *);  
-    void convertGlobalFaceList(const int*, int , int*, int);  
-    void convertGlobalFaceListWithTwins(const int* face_list, int nbface, int*& local, int*& ip, int*& full_array,int& size);
+    void convertGlobalFaceList(const mcIdType*, mcIdType , mcIdType*, int *);  
+    void convertGlobalFaceList(const mcIdType*, mcIdType , mcIdType*, int);  
+    void convertGlobalFaceListWithTwins(const mcIdType* face_list, mcIdType nbface, mcIdType*& local, int*& ip, mcIdType*& full_array,mcIdType& size);
 
     /*! converting node global numberings to local numberings */
-    void convertToLocal2ndVersion(int* nodes, int nbnodes, int idomain);
+    void convertToLocal2ndVersion(mcIdType* nodes, mcIdType nbnodes, int idomain);
 
     /*! converting node local numbering to global */
-    int convertNodeToGlobal(int ip, int icell) const { return _node_loc_to_glob[ip][icell]; }
+    mcIdType convertNodeToGlobal(int ip, mcIdType icell) const { return _node_loc_to_glob[ip][icell]; }
 
     /*! converting face local numbering to global */
-    int convertFaceToGlobal(int ip, int iface) const { return _face_loc_to_glob[ip][iface]; }
+    mcIdType convertFaceToGlobal(int ip, mcIdType iface) const { return _face_loc_to_glob[ip][iface]; }
 
     /*! converting cell global numbering to local */
-    int convertCellToGlobal(int ip, int icell) const { return _loc_to_glob[ip][icell]; }
+    mcIdType convertCellToGlobal(int ip, mcIdType icell) const { return _loc_to_glob[ip][icell]; }
 
-    void convertNodeToGlobal(int ip, const int* local, int n, int *global) const
+    void convertNodeToGlobal(int ip, const mcIdType* local, mcIdType n, mcIdType *global) const
     {
-      for (int i=0; i<n; i++)
+      for (mcIdType i=0; i<n; i++)
         global[i]=_node_loc_to_glob[ip][local[i]];
     }
 
-    void convertCellToGlobal(int ip, const int* local, int n, int *global) const
+    void convertCellToGlobal(int ip, const mcIdType* local, mcIdType n, mcIdType *global) const
     {
-      for (int i=0; i<n; i++)
+      for (mcIdType i=0; i<n; i++)
         global[i]=_loc_to_glob[ip][local[i]];  
     }
 
-    void convertFaceToGlobal(int ip, const int* local, int n, int *global) const
+    void convertFaceToGlobal(int ip, const mcIdType* local, mcIdType n, mcIdType *global) const
     {
-      for (int i=0; i<n; i++) 
+      for (mcIdType i=0; i<n; i++) 
         global[i]=_face_loc_to_glob[ip][local[i]];
     }
 
     int nbDomain() const { return _nb_domain; }
 
-    int nbCells() const { return _nb_total_cells; }
+    mcIdType nbCells() const { return _nb_total_cells; }
     
-    int nbNodes() const { return _nb_total_nodes; }
+    mcIdType nbNodes() const { return _nb_total_nodes; }
 
-    int nbCells( int idomain) const { return _nb_cells[idomain]; }
+    mcIdType nbCells( int idomain) const { return _nb_cells[idomain]; }
 
     /*! retrieving number of nodes */
-    int getNodeNumber(int idomain) const { return _nb_nodes[idomain]; }
+    mcIdType getNodeNumber(int idomain) const { return _nb_nodes[idomain]; }
 
-    int getNodeNumber() const;
+    mcIdType getNodeNumber() const;
 
-    void getNodeList(int idomain, int* list) const;
+    void getNodeList(int idomain, mcIdType* list) const;
 
     /*! retrieving cell numbers after merging in parallel mode */
-    std::vector<int> & getFusedCellNumbers(int idomain) { return _cell_loc_to_glob_fuse[idomain]; }
+    std::vector<mcIdType> & getFusedCellNumbers(int idomain) { return _cell_loc_to_glob_fuse[idomain]; }
     
-    const std::vector<int>& getFusedCellNumbers(int idomain) const { return _cell_loc_to_glob_fuse[idomain]; }
+    const std::vector<mcIdType>& getFusedCellNumbers(int idomain) const { return _cell_loc_to_glob_fuse[idomain]; }
 
     /*! retrieving face numbers after merging in parallel mode */
-    std::vector<int> & getFusedFaceNumbers(int idomain) { return _face_loc_to_glob_fuse[idomain]; }
+    std::vector<mcIdType> & getFusedFaceNumbers(int idomain) { return _face_loc_to_glob_fuse[idomain]; }
 
-    const std::vector<int>& getFusedFaceNumbers(int idomain) const { return _face_loc_to_glob_fuse[idomain]; }
+    const std::vector<mcIdType>& getFusedFaceNumbers(int idomain) const { return _face_loc_to_glob_fuse[idomain]; }
 
     /*! retrieving number of nodes */
-    int getCellNumber(int idomain) const { return _nb_cells[idomain]; }
+    mcIdType getCellNumber(int idomain) const { return _nb_cells[idomain]; }
 
-    int getCellDomainNumber(int global) const { return (_glob_to_loc.find(global)->second).first; }
+    mcIdType getCellDomainNumber(int global) const { return (_glob_to_loc.find(global)->second).first; }
 
-    void getCellList(int idomain, int* list) const;
+    void getCellList(int idomain, mcIdType* list) const;
 
-    int getFaceNumber(int idomain) const { return _nb_faces[idomain]; }
+    mcIdType getFaceNumber(int idomain) const { return _nb_faces[idomain]; }
 
-    int getFaceNumber() const;
+    mcIdType getFaceNumber() const;
 
-    void getFaceList(int idomain, int* list) const;
+    void getFaceList(int idomain, mcIdType* list) const;
 
     /*! converting a global cell number to a local representation (domain + local number) */
-    std::pair<int,int> convertGlobalCell(int iglobal) const { return _glob_to_loc.find(iglobal)->second; }
+    std::pair<int,mcIdType> convertGlobalCell(mcIdType iglobal) const { return _glob_to_loc.find(iglobal)->second; }
 
-    int convertGlobalFace(int iglobal, int idomain);
+    mcIdType convertGlobalFace(mcIdType iglobal, int idomain);
 
-    int convertGlobalNode(int iglobal, int idomain);
+    mcIdType convertGlobalNode(mcIdType iglobal, int idomain);
     
+    std::vector<MEDPARTITIONER::ConnectZone*>& getCZ();
+
     //adding a face to the topology
-    void appendFace(int idomain, int ilocal, int iglobal);
+    void appendFace(int idomain, mcIdType ilocal, mcIdType iglobal);
 
     //return max global face number
-    int getMaxGlobalFace() const;
+    mcIdType getMaxGlobalFace() const;
 
   private:
-    bool hasCellWithNodes( const MeshCollection&, int dom, const std::set<int>& nodes );
+    bool hasCellWithNodes( const MeshCollection&, int dom, const std::set<mcIdType>& nodes );
 
   private:
     //mapping global -> local
-    typedef INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> > TGlob2DomainLoc;
+    typedef INTERP_KERNEL::HashMultiMap<mcIdType,std::pair<int,mcIdType> > TGlob2DomainLoc;
 
     TGlob2DomainLoc _glob_to_loc;
-    std::vector<std::vector<int> >  _loc_to_glob;
-    INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> > _node_glob_to_loc;
+    TGlob2DomainLoc _node_glob_to_loc;
 
     //mapping local -> global
-    std::vector<std::vector <int> > _node_loc_to_glob;
+    std::vector<std::vector<mcIdType> >  _loc_to_glob;
+    std::vector<std::vector <mcIdType> > _node_loc_to_glob;
 
     // global numbers in parallel mode
-    std::vector<std::vector <int> > _cell_loc_to_glob_fuse; // glob nums after merging
-    std::vector<std::vector <int> > _face_loc_to_glob_fuse; // glob nums after merging
+    std::vector<std::vector <mcIdType> > _cell_loc_to_glob_fuse; // glob nums after merging
+    std::vector<std::vector <mcIdType> > _face_loc_to_glob_fuse; // glob nums after merging
 
     //mapping global -> local
-    typedef INTERP_KERNEL::HashMultiMap<int,std::pair<int,int> > TGlob2LocsMap;
+    typedef INTERP_KERNEL::HashMultiMap<mcIdType,std::pair<int,mcIdType> > TGlob2LocsMap;
     TGlob2LocsMap _face_glob_to_loc;
 
     //mapping local -> global
-    std::vector<std::vector <int> > _face_loc_to_glob;
-    std::vector<int> _nb_cells;
-    std::vector<int> _nb_nodes;
-    std::vector<int> _nb_faces;
-    int _nb_total_cells;
-    int _nb_total_nodes;
-    int _nb_total_faces;
+    std::vector<std::vector <mcIdType> > _face_loc_to_glob;
+    std::vector<mcIdType> _nb_cells;
+    std::vector<mcIdType> _nb_nodes;
+    std::vector<mcIdType> _nb_faces;
+    mcIdType _nb_total_cells;
+    mcIdType _nb_total_nodes;
+    mcIdType _nb_total_faces;
     int _nb_domain;
     int _mesh_dimension;
+
+    //links to connectzones
+    std::vector<MEDPARTITIONER::ConnectZone*> _connect_zones;
+
   };
 }
 #endif