X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDPartitioner%2FMEDPARTITIONER_ConnectZone.cxx;h=5ebd4ba895670738155b04592c5f1171327612f8;hb=ffb8188e28b2b60ee207a8644286821bc4e8fcdc;hp=eb60723b522b88d307b0c288be407fc297554d4b;hpb=378cb2ebe08f8f4543ef632b2bd5f77fe180f978;p=tools%2Fmedcoupling.git diff --git a/src/MEDPartitioner/MEDPARTITIONER_ConnectZone.cxx b/src/MEDPartitioner/MEDPARTITIONER_ConnectZone.cxx old mode 100755 new mode 100644 index eb60723b5..5ebd4ba89 --- a/src/MEDPartitioner/MEDPARTITIONER_ConnectZone.cxx +++ b/src/MEDPartitioner/MEDPARTITIONER_ConnectZone.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D +// Copyright (C) 2007-2020 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 @@ -19,13 +19,19 @@ #include "MEDPARTITIONER_ConnectZone.hxx" +#include "MEDCouplingSkyLineArray.hxx" + #include +using namespace MEDCoupling; + MEDPARTITIONER::ConnectZone::ConnectZone(): _name("") ,_description("") ,_local_domain_number(0) ,_distant_domain_number(0) + ,_local_mesh(0) + ,_distant_mesh(0) ,_node_corresp(0) ,_face_corresp(0) { @@ -33,11 +39,9 @@ MEDPARTITIONER::ConnectZone::ConnectZone(): MEDPARTITIONER::ConnectZone::~ConnectZone() { - delete _node_corresp; - delete _face_corresp; - for(std::map < std::pair ,SkyLineArray * >::iterator iter=_entity_corresp.begin(); iter!=_entity_corresp.end();iter++) + for(std::map < std::pair ,MEDCouplingSkyLineArray * >::iterator iter=_entity_corresp.begin(); iter!=_entity_corresp.end();iter++) { - delete iter->second; + iter->second->decrRef(); } } @@ -46,6 +50,8 @@ MEDPARTITIONER::ConnectZone::ConnectZone(const ConnectZone & myConnectZone): ,_description(myConnectZone._description) ,_local_domain_number(myConnectZone._local_domain_number) ,_distant_domain_number(myConnectZone._distant_domain_number) + ,_local_mesh(0) + ,_distant_mesh(0) ,_node_corresp(myConnectZone._node_corresp) ,_face_corresp(myConnectZone._face_corresp) ,_entity_corresp(myConnectZone._entity_corresp) @@ -72,19 +78,19 @@ int MEDPARTITIONER::ConnectZone::getLocalDomainNumber() const return _local_domain_number; } -ParaMEDMEM::MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getLocalMesh() const +MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getLocalMesh() const { return _local_mesh; } -ParaMEDMEM::MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getDistantMesh() const +MEDCouplingUMesh *MEDPARTITIONER::ConnectZone::getDistantMesh() const { return _distant_mesh; } -bool MEDPARTITIONER::ConnectZone::isEntityCorrespPresent(int localEntity, int distantEntity) const +bool MEDPARTITIONER::ConnectZone::isEntityCorrespPresent(mcIdType localEntity, mcIdType distantEntity) const { - typedef std::map, SkyLineArray*>::const_iterator map_iter; + typedef std::map, MEDCouplingSkyLineArray*>::const_iterator map_iter; for(map_iter iter=_entity_corresp.begin(); iter != _entity_corresp.end(); iter++) { if ((iter->first).first==localEntity && (iter->first).second==distantEntity) @@ -93,86 +99,123 @@ bool MEDPARTITIONER::ConnectZone::isEntityCorrespPresent(int localEntity, int di return false; } -const int *MEDPARTITIONER::ConnectZone::getNodeCorrespIndex() const +const mcIdType *MEDPARTITIONER::ConnectZone::getNodeCorrespIndex() const { return _node_corresp->getIndex(); } -const int *MEDPARTITIONER::ConnectZone::getNodeCorrespValue() const +const mcIdType *MEDPARTITIONER::ConnectZone::getNodeCorrespValue() const { - return _node_corresp->getValue(); + return _node_corresp->getValues(); } -int MEDPARTITIONER::ConnectZone::getNodeNumber() const +mcIdType MEDPARTITIONER::ConnectZone::getNodeNumber() const { return _node_corresp->getNumberOf(); } -const int *MEDPARTITIONER::ConnectZone::getFaceCorrespIndex() const +const MEDCouplingSkyLineArray * MEDPARTITIONER::ConnectZone::getNodeCorresp() const +{ + return (const MEDCouplingSkyLineArray *)_node_corresp; +} + +const mcIdType *MEDPARTITIONER::ConnectZone::getFaceCorrespIndex() const { return _face_corresp->getIndex(); } -const int *MEDPARTITIONER::ConnectZone::getFaceCorrespValue() const +const mcIdType *MEDPARTITIONER::ConnectZone::getFaceCorrespValue() const { - return _face_corresp->getValue(); + return _face_corresp->getValues(); } -int MEDPARTITIONER::ConnectZone::getFaceNumber() const +mcIdType MEDPARTITIONER::ConnectZone::getFaceNumber() const { return _face_corresp->getNumberOf(); } -const int *MEDPARTITIONER::ConnectZone::getEntityCorrespIndex(int localEntity, - int distantEntity) const +const MEDCouplingSkyLineArray * MEDPARTITIONER::ConnectZone::getFaceCorresp() const { - typedef std::map, SkyLineArray*>::const_iterator map_iter; + return _face_corresp; +} + +const mcIdType *MEDPARTITIONER::ConnectZone::getEntityCorrespIndex(mcIdType localEntity, + mcIdType distantEntity) const +{ + typedef std::map, MEDCouplingSkyLineArray*>::const_iterator map_iter; for(map_iter iter=_entity_corresp.begin();iter!=_entity_corresp.end();iter++) - { - if ((iter->first).first==localEntity && (iter->first).second==distantEntity) - return iter->second->getIndex(); - } + { + if ((iter->first).first==localEntity && (iter->first).second==distantEntity) + return iter->second->getIndex(); + } return 0; } -const int *MEDPARTITIONER::ConnectZone::getEntityCorrespValue(int localEntity, - int distantEntity) const +const mcIdType *MEDPARTITIONER::ConnectZone::getEntityCorrespValue(mcIdType localEntity, + mcIdType distantEntity) const { - typedef std::map, SkyLineArray*>::const_iterator map_iter; + typedef std::map, MEDCouplingSkyLineArray*>::const_iterator map_iter; for (map_iter iter=_entity_corresp.begin();iter!=_entity_corresp.end();iter++) - { - if ((iter->first).first==localEntity && (iter->first).second==distantEntity) - return iter->second->getValue(); - } + { + if ((iter->first).first==localEntity && (iter->first).second==distantEntity) + return iter->second->getValues(); + } return 0; } -int MEDPARTITIONER::ConnectZone::getEntityCorrespNumber(int localEntity, - int distantEntity) const +mcIdType MEDPARTITIONER::ConnectZone::getEntityCorrespNumber(mcIdType localEntity, + mcIdType distantEntity) const { - typedef std::map, SkyLineArray*>::const_iterator map_iter; + typedef std::map, MEDCouplingSkyLineArray*>::const_iterator map_iter; for(map_iter iter=_entity_corresp.begin();iter!=_entity_corresp.end();iter++) - { - if((iter->first).first==localEntity && (iter->first).second==distantEntity) - return iter->second->getNumberOf(); - } + { + if((iter->first).first==localEntity && (iter->first).second==distantEntity) + return iter->second->getNumberOf(); + } + return 0; +} + +mcIdType MEDPARTITIONER::ConnectZone::getEntityCorrespLength(mcIdType localEntity, + mcIdType distantEntity) const +{ + typedef std::map, MEDCouplingSkyLineArray*>::const_iterator map_iter; + + for (map_iter iter=_entity_corresp.begin(); iter != _entity_corresp.end(); iter++) + { + if ((iter->first).first==localEntity && (iter->first).second==distantEntity) + return iter->second->getLength(); + } return 0; } -int MEDPARTITIONER::ConnectZone::getEntityCorrespLength(int localEntity, - int distantEntity) const +const MEDCouplingSkyLineArray * +MEDPARTITIONER::ConnectZone::getEntityCorresp(mcIdType localEntity, mcIdType distantEntity) const { - typedef std::map, SkyLineArray*>::const_iterator map_iter; - + typedef std::map, MEDCouplingSkyLineArray*>::const_iterator map_iter; + for (map_iter iter=_entity_corresp.begin(); iter != _entity_corresp.end(); iter++) + { + if ((iter->first).first==localEntity && (iter->first).second==distantEntity) + return iter->second; + } + return 0; +} + +std::vector< std::pair< mcIdType,mcIdType > > MEDPARTITIONER::ConnectZone::getEntities() const +{ + std::vector< std::pair< mcIdType,mcIdType > > types; + + std::map, MEDCouplingSkyLineArray*>::const_iterator + iter = _entity_corresp.begin(); + for ( ; iter != _entity_corresp.end(); iter++) { - if ((iter->first).first==localEntity && (iter->first).second==distantEntity) - return iter->second->getLength(); + types.push_back( iter->first ); } - return 0; + + return types; } void MEDPARTITIONER::ConnectZone::setName(const std::string& name) @@ -195,89 +238,104 @@ void MEDPARTITIONER::ConnectZone::setLocalDomainNumber(int localDomainNumber) _local_domain_number=localDomainNumber; } -void MEDPARTITIONER::ConnectZone::setLocalMesh(ParaMEDMEM::MEDCouplingUMesh * localMesh) +void MEDPARTITIONER::ConnectZone::setLocalMesh(MEDCouplingUMesh * localMesh) { _local_mesh=localMesh; } -void MEDPARTITIONER::ConnectZone::setDistantMesh(ParaMEDMEM::MEDCouplingUMesh * distantMesh) +void MEDPARTITIONER::ConnectZone::setDistantMesh(MEDCouplingUMesh * distantMesh) { _distant_mesh=distantMesh; } /*! transforms an int array containing * the node-node connections - * to a SkyLineArray + * to a MEDCouplingSkyLineArray */ -void MEDPARTITIONER::ConnectZone::setNodeCorresp(int * nodeCorresp, int nbnode) +void MEDPARTITIONER::ConnectZone::setNodeCorresp(const mcIdType * nodeCorresp, mcIdType nbnode) { - std::vector index(nbnode+1),value(2*nbnode); - for (int i=0; i indexArr( DataArrayIdType::New() ); + MCAuto valueArr( DataArrayIdType::New() ); + indexArr->alloc( nbnode+1 ); + valueArr->alloc( 2*nbnode ); + mcIdType * index = indexArr->getPointer(); + mcIdType * value = valueArr->getPointer(); + for (mcIdType i=0; i arr(array); + _node_corresp = arr; } /*! transforms an int array containing * the face-face connections - * to a SkyLineArray + * to a MEDCouplingSkyLineArray */ -void MEDPARTITIONER::ConnectZone::setFaceCorresp(int * faceCorresp, int nbface) +void MEDPARTITIONER::ConnectZone::setFaceCorresp(const mcIdType * faceCorresp, mcIdType nbface) { - std::vector index(nbface+1),value(2*nbface); - for (int i=0; i indexArr( DataArrayIdType::New() ); + MCAuto valueArr( DataArrayIdType::New() ); + indexArr->alloc( nbface+1 ); + valueArr->alloc( 2*nbface ); + mcIdType * index = indexArr->getPointer(); + mcIdType * value = valueArr->getPointer(); + for (mcIdType i=0; i arr (array); + _face_corresp = arr; } /*! transforms an int array containing * the entity-entity connections - * to a SkyLineArray + * to a MEDCouplingSkyLineArray * - * the resulting SkyLineArray is put in the map + * the resulting MEDCouplingSkyLineArray is put in the map */ -void MEDPARTITIONER::ConnectZone::setEntityCorresp(int localEntity, int distantEntity, - int *entityCorresp, int nbentity) +void MEDPARTITIONER::ConnectZone::setEntityCorresp(mcIdType localEntity, mcIdType distantEntity, + const mcIdType *entityCorresp, mcIdType nbentity) { - std::vector index(nbentity+1),value(2*nbentity); - for (int i=0; i indexArr( DataArrayIdType::New() ); + MCAuto valueArr( DataArrayIdType::New() ); + indexArr->alloc( nbentity+1 ); + valueArr->alloc( 2*nbentity ); + mcIdType * index = indexArr->getPointer(); + mcIdType * value = valueArr->getPointer(); + for (mcIdType i=0; i, MEDCouplingSkyLineArray * >::iterator it; + it = _entity_corresp.insert + ( std::make_pair( std::make_pair(localEntity,distantEntity), nullArray )).first; + if ( it->second != nullArray ) it->second->decrRef(); + it->second = array; } - - - - - - -