X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDPartitioner%2FMEDPARTITIONER_MeshCollection.hxx;h=4816631bbeb8e596c13c601b9ae27bf8f7b4f1e7;hb=b832b15337be013a56e0976170e5e235b89fcb03;hp=4c6c02612c65a4f368df923e18144e97773d0269;hpb=fb512e2b77325290aaa2b4c9fd8f22d5949b6369;p=tools%2Fmedcoupling.git diff --git a/src/MEDPartitioner/MEDPARTITIONER_MeshCollection.hxx b/src/MEDPartitioner/MEDPARTITIONER_MeshCollection.hxx index 4c6c02612..4816631bb 100644 --- a/src/MEDPartitioner/MEDPARTITIONER_MeshCollection.hxx +++ b/src/MEDPartitioner/MEDPARTITIONER_MeshCollection.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D +// Copyright (C) 2007-2024 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -23,8 +23,7 @@ #include "MEDPARTITIONER.hxx" #include "MEDPARTITIONER_Graph.hxx" #include "MEDPARTITIONER_Utils.hxx" - -#include "MEDCouplingUMesh.hxx" +#include "MEDCouplingSkyLineArray.hxx" #include #include @@ -32,10 +31,11 @@ #include "BBTree.txx" -namespace ParaMEDMEM +namespace MEDCoupling { class MEDCouplingUMesh; class DataArrayInt; + class MEDCouplingSkyLineArray; } namespace MEDPARTITIONER @@ -43,12 +43,11 @@ namespace MEDPARTITIONER class Topology; class MeshCollectionDriver; class ParaDomainSelector; - class SkyLineArray; class ConnectZone; class JointFinder; typedef enum{MedAscii, MedXml, Undefined} DriverType; - typedef std::multimap, std::pair > NodeMapping ; + typedef std::multimap, std::pair > NodeMapping ; typedef std::vector > NodeList; class MEDPARTITIONER_EXPORT MeshCollection @@ -75,9 +74,9 @@ namespace MEDPARTITIONER void setDriverType(MEDPARTITIONER::DriverType type) { _driver_type=type; } //creation of the cell graph - void buildCellGraph(MEDPARTITIONER::SkyLineArray* & array,int *& edgeweights ); + void buildCellGraph(MEDCoupling::MEDCouplingSkyLineArray* & array,int *& edgeweights ); //creation of the cell graph - void buildParallelCellGraph(MEDPARTITIONER::SkyLineArray* & array,int *& edgeweights ); + void buildParallelCellGraph(MEDCoupling::MEDCouplingSkyLineArray* & array,int *& edgeweights ); //creation and partition of the associated graph Topology* createPartition(int nbdomain, Graph::splitter_type type = Graph::METIS, @@ -89,29 +88,29 @@ namespace MEDPARTITIONER //getting mesh dimension int getMeshDimension() const; int getNbOfLocalMeshes() const; - int getNbOfGlobalMeshes() const { return _mesh.size(); } - int getNbOfLocalCells() const; - int getNbOfLocalFaces() const; + int getNbOfGlobalMeshes() const { return (int)_mesh.size(); } + mcIdType getNbOfLocalCells() const; + mcIdType getNbOfLocalFaces() const; //getting a reference to mesh vector - std::vector& getMesh(); - std::vector& getFaceMesh(); - std::vector >& getGroupMeshes(); + std::vector& getMesh(); + std::vector& getFaceMesh(); + std::vector >& getGroupMeshes(); - ParaMEDMEM::MEDCouplingUMesh* getMesh(int idomain) const; - ParaMEDMEM::MEDCouplingUMesh* getFaceMesh(int idomain); - std::vector& getGroupMeshes(int idomain); + MEDCoupling::MEDCouplingUMesh* getMesh(int idomain) const; + MEDCoupling::MEDCouplingUMesh* getFaceMesh(int idomain); + std::vector& getGroupMeshes(int idomain); - std::vector& getCellFamilyIds() { return _cell_family_ids; } - std::vector& getFaceFamilyIds() { return _face_family_ids; } + std::vector& getCellFamilyIds() { return _cell_family_ids; } + std::vector& getFaceFamilyIds() { return _face_family_ids; } - std::map& getMapDataArrayInt() { return _map_dataarray_int; } - std::map& getMapDataArrayDouble() { return _map_dataarray_double; } + std::map& getMapDataArrayInt() { return _map_dataarray_int; } + std::map& getMapDataArrayDouble() { return _map_dataarray_double; } - std::map& getFamilyInfo() { return _family_info; } + std::map& getFamilyInfo() { return _family_info; } std::map >& getGroupInfo() { return _group_info; } - ParaMEDMEM::DataArrayDouble* getField(std::string descriptionField, int iold); + MEDCoupling::DataArrayDouble* getField(std::string descriptionField, int iold); std::vector& getFieldDescriptions() { return _field_descriptions; } void prepareFieldDescriptions(); void filterFaceOnCell(); @@ -122,8 +121,9 @@ namespace MEDPARTITIONER //getting a pointer to topology Topology* getTopology() const ; ParaDomainSelector* getParaDomainSelector() const { return _domain_selector; } + void setParaDomainSelector(ParaDomainSelector* pds) { _domain_selector = pds; } //setting a new topology - void setTopology(Topology* topology); + void setTopology(Topology* topology, bool takeOwneship); //getting/setting the name of the global mesh (as opposed //to the name of a subdomain \a nn, which is name_nn) @@ -131,50 +131,58 @@ namespace MEDPARTITIONER void setName(const std::string& name) { _name=name; } void setDomainNames(const std::string& name); + void setNonEmptyMesh(int number) { _i_non_empty_mesh=number;} + //getting/setting the description of the global mesh std::string getDescription() const { return _description; } void setDescription(const std::string& name) { _description=name; } //creates the node mapping between an old collection and the present one void createNodeMapping(MeshCollection& initialCollection, - std::multimap,std::pair >& nodeMapping); + std::multimap,std::pair >& nodeMapping); void castCellMeshes(MeshCollection& initialCollection, - std::vector > >& new2oldIds); + std::vector > >& new2oldIds, + std::vector & o2nRenumber); //creates faces on the new collection void castFaceMeshes(MeshCollection& initialCollection, - const std::multimap, std::pair >& nodeMapping, - std::vector > >& new2oldIds); + const std::multimap, std::pair >& nodeMapping, + std::vector > >& new2oldIds); //constructing connect zones - void buildConnectZones(); + void buildConnectZones( const NodeMapping& nodeMapping, + const std::vector & o2nRenumber, + int nbInitialDomains ); + + // Find faces common with neighbor domains and put them in groups + void buildBoundaryFaces(); private: - void castIntField(std::vector& meshesCastFrom, - std::vector& meshesCastTo, - std::vector& arrayFrom, + void castIntField(std::vector& meshesCastFrom, + std::vector& meshesCastTo, + std::vector& arrayFrom, std::string nameArrayTo); void castAllFields(MeshCollection& initialCollection, std::string nameArrayTo); - void findCommonDistantNodes(std::vector > >& commonDistantNodes); + void findCommonDistantNodes(std::vector > >& commonDistantNodes); void remapIntField(int inew, int iold, - const ParaMEDMEM::MEDCouplingUMesh& sourceMesh, - const ParaMEDMEM::MEDCouplingUMesh& targetMesh, - const int* fromArray, + const MEDCoupling::MEDCouplingUMesh& sourceMesh, + const MEDCoupling::MEDCouplingUMesh& targetMesh, + const mcIdType* fromArray, std::string nameArrayTo, const BBTreeOfDim* tree); void remapDoubleField(int inew, int iold, - ParaMEDMEM::DataArrayDouble* fromArray, + MEDCoupling::DataArrayDouble* fromArray, std::string nameArrayTo, std::string descriptionField); - void createJointGroup( const std::vector< int >& faces, + void createJointGroup( const std::vector< mcIdType >& faces, const int inew1, const int inew2, const bool is2nd ); @@ -193,32 +201,29 @@ namespace MEDPARTITIONER ParaDomainSelector* _domain_selector; //links to meshes - std::vector _mesh; - std::vector _face_mesh; + std::vector _mesh; + std::vector _face_mesh; //index of a non empty mesh within _mesh (in parallel mode all of meshes can be empty) int _i_non_empty_mesh; - //links to connectzones - std::vector _connect_zones; - //family ids storages - std::vector _cell_family_ids; - std::vector _face_family_ids; + std::vector _cell_family_ids; + std::vector _face_family_ids; //DataArrayInt* storages - std::map _map_dataarray_int; + std::map _map_dataarray_int; //DataArrayDouble* storages - std::map _map_dataarray_double; + std::map _map_dataarray_double; //fields to be partitioned std::vector _field_descriptions; //group family conversion - std::map _family_info; + std::map _family_info; std::map > _group_info; - //list of groups that are not to be splitted + //list of groups that are not to be split std::vector _indivisible_regions; //name of global mesh