1 // Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle 2 // 3 // See the LICENSE.txt file in the Gmsh root directory for license information. 4 // Please report all issues on https://gitlab.onelab.info/gmsh/gmsh/issues. 5 6 #ifndef PARTITION_REGION_H 7 #define PARTITION_REGION_H 8 9 #include "GModel.h" 10 #include "discreteRegion.h" 11 12 class partitionRegion : public discreteRegion { 13 private: 14 std::vector<int> _partitions; 15 GEntity *_parentEntity; 16 17 public: partitionRegion(GModel * model,int num,const std::vector<int> & partitions)18 partitionRegion(GModel *model, int num, const std::vector<int> &partitions) 19 : discreteRegion(model, num), _partitions(partitions), 20 _parentEntity(nullptr) 21 { 22 } partitionRegion(GModel * model,int num)23 partitionRegion(GModel *model, int num) 24 : discreteRegion(model, num), _partitions(), _parentEntity(nullptr) 25 { 26 } partitionRegion(GModel * model,const std::vector<int> & partitions)27 partitionRegion(GModel *model, const std::vector<int> &partitions) 28 : discreteRegion(model), _partitions(partitions), _parentEntity(nullptr) 29 { 30 } ~partitionRegion()31 virtual ~partitionRegion() {} geomType()32 virtual GeomType geomType() const { return PartitionVolume; } setParentEntity(GEntity * r)33 virtual void setParentEntity(GEntity *r) { _parentEntity = r; } getParentEntity()34 virtual GEntity *getParentEntity() { return _parentEntity; } setPartitions(std::vector<int> & partitions)35 virtual void setPartitions(std::vector<int> &partitions) 36 { 37 _partitions = partitions; 38 } getPartitions()39 virtual const std::vector<int> &getPartitions() const { return _partitions; } getPartition(std::size_t index)40 virtual int getPartition(std::size_t index) const 41 { 42 return _partitions[index]; 43 } numPartitions()44 virtual std::size_t numPartitions() const { return _partitions.size(); } 45 }; 46 47 struct Less_partitionRegion 48 : public std::binary_function<partitionRegion *, partitionRegion *, bool> { operatorLess_partitionRegion49 bool operator()(const partitionRegion *e1, const partitionRegion *e2) const 50 { 51 if(e1->numPartitions() < e2->numPartitions()) return true; 52 if(e1->numPartitions() > e2->numPartitions()) return false; 53 for(std::size_t i = 0; i < e1->numPartitions(); i++) { 54 if(e1->getPartition(i) < e2->getPartition(i)) return true; 55 if(e1->getPartition(i) > e2->getPartition(i)) return false; 56 } 57 return false; 58 } 59 }; 60 61 #endif 62