dune-composites (2.5.1)

parallelPartition.hh
1#include <array>
2
3#ifndef PARALLEL_PARTITION__HH
4#define PARALLEL_PARTITION__HH
5
6namespace Dune{
7 namespace Composites{
8
10 template<int d>
11 class YaspPartition : public Dune::YLoadBalance<d>
12 {
13 private:
14 int numProc ; // number of processes
15 public:
16 YaspPartition(int num_proc_,std::array<int, 3> myDim_) : numProc(num_proc_), myDim(myDim_) {};
17 typedef std::array<int, d> iTupel;
18 iTupel myDim;
19
20 virtual ~YaspPartition() {}
21
22 virtual void loadbalance (const iTupel& size, int P, iTupel& dims) const
23 {
24 dims = myDim;
25
26 if(dims[0]*dims[1]*dims[2]!=numProc){
27
28 if(int(sqrt(numProc))*int(sqrt(numProc)) == numProc){
29 dims[0] = sqrt(numProc);
30 dims[1] = sqrt(numProc);
31 }
32 else{
33 if(int(numProc/8)*8 == numProc){
34 dims[0] = 8;
35 dims[1] = int(numProc/8);
36 dims[2] = 1;
37 }
38 else{
39 dims[0] = numProc;
40 }
41 }
42 }
43 }
44 };
45
46 }
47}
48
49#endif
Partition yaspgrid for parallelism.
Definition: parallelPartition.hh:12
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Sep 3, 22:42, 2025)