X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDPartitioner%2FMEDPARTITIONER_ParallelTopology.hxx;h=fb453c9af0bb437ba0aff1233655e546f18bceb5;hb=b219559763498c4bd10c730cd3d2c62b1eed45db;hp=ac56db37595856040ccb5a7c162257f5d28acfef;hpb=8763c12d01e33d6845dd53be65b001514d00bd42;p=tools%2Fmedcoupling.git diff --git a/src/MEDPartitioner/MEDPARTITIONER_ParallelTopology.hxx b/src/MEDPartitioner/MEDPARTITIONER_ParallelTopology.hxx index ac56db375..fb453c9af 100644 --- a/src/MEDPartitioner/MEDPARTITIONER_ParallelTopology.hxx +++ b/src/MEDPartitioner/MEDPARTITIONER_ParallelTopology.hxx @@ -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&); - ParallelTopology(const std::vector&, + ParallelTopology(const std::vector&); + ParallelTopology(const std::vector&, const std::vector&, - std::vector&, - std::vector&, - std::vector&); + std::vector&, + std::vector&, + std::vector&); 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 & getFusedCellNumbers(int idomain) { return _cell_loc_to_glob_fuse[idomain]; } + std::vector & getFusedCellNumbers(int idomain) { return _cell_loc_to_glob_fuse[idomain]; } - const std::vector& getFusedCellNumbers(int idomain) const { return _cell_loc_to_glob_fuse[idomain]; } + const std::vector& getFusedCellNumbers(int idomain) const { return _cell_loc_to_glob_fuse[idomain]; } /*! retrieving face numbers after merging in parallel mode */ - std::vector & getFusedFaceNumbers(int idomain) { return _face_loc_to_glob_fuse[idomain]; } + std::vector & getFusedFaceNumbers(int idomain) { return _face_loc_to_glob_fuse[idomain]; } - const std::vector& getFusedFaceNumbers(int idomain) const { return _face_loc_to_glob_fuse[idomain]; } + const std::vector& 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 convertGlobalCell(int iglobal) const { return _glob_to_loc.find(iglobal)->second; } + std::pair 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& 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& nodes ); + bool hasCellWithNodes( const MeshCollection&, int dom, const std::set& nodes ); private: //mapping global -> local - typedef INTERP_KERNEL::HashMultiMap > TGlob2DomainLoc; + typedef INTERP_KERNEL::HashMultiMap > TGlob2DomainLoc; TGlob2DomainLoc _glob_to_loc; - std::vector > _loc_to_glob; - INTERP_KERNEL::HashMultiMap > _node_glob_to_loc; + TGlob2DomainLoc _node_glob_to_loc; //mapping local -> global - std::vector > _node_loc_to_glob; + std::vector > _loc_to_glob; + std::vector > _node_loc_to_glob; // global numbers in parallel mode - std::vector > _cell_loc_to_glob_fuse; // glob nums after merging - std::vector > _face_loc_to_glob_fuse; // glob nums after merging + std::vector > _cell_loc_to_glob_fuse; // glob nums after merging + std::vector > _face_loc_to_glob_fuse; // glob nums after merging //mapping global -> local - typedef INTERP_KERNEL::HashMultiMap > TGlob2LocsMap; + typedef INTERP_KERNEL::HashMultiMap > TGlob2LocsMap; TGlob2LocsMap _face_glob_to_loc; //mapping local -> global - std::vector > _face_loc_to_glob; - std::vector _nb_cells; - std::vector _nb_nodes; - std::vector _nb_faces; - int _nb_total_cells; - int _nb_total_nodes; - int _nb_total_faces; + std::vector > _face_loc_to_glob; + std::vector _nb_cells; + std::vector _nb_nodes; + std::vector _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 _connect_zones; + }; } #endif