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