-// 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
#include "MEDPARTITIONER.hxx"
#include "MEDPARTITIONER_Topology.hxx"
-#include "MEDPARTITIONER_ParaDomainSelector.hxx"
-
#include "InterpKernelHashMap.hxx"
{
class Graph;
class MeshCollection;
- class MEDPARTITIONER_FaceModel;
+ class ParaDomainSelector;
class MEDPARTITIONER_EXPORT ParallelTopology : public Topology
{
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();
/*! 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