Alsvinn  0.5.3
The fast FVM simulator with UQ support
rank_index.hpp
Go to the documentation of this file.
1 /* Copyright (c) 2018 ETH Zurich, Kjetil Olsen Lye
2  * This program is free software: you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation, either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program. If not, see <http://www.gnu.org/licenses/>.
14  */
15 
16 
17 #pragma once
18 #include "alsfvm/types.hpp"
19 
20 namespace alsfvm {
21 namespace mpi {
22 namespace cartesian {
23 
31 int getRankIndex(const ivec3& coordinate, const ivec3& numberOfProcessors) {
32  int x = coordinate.x;
33  int y = coordinate.y;
34  int z = coordinate.z;
35 
36  const int nx = numberOfProcessors.x;
37  const int ny = numberOfProcessors.y;
38  const int nz = numberOfProcessors.z;
39 
40  if (x < 0) {
41  x += nx;
42  }
43 
44  if (x > nx - 1) {
45  x -= nx;
46  }
47 
48  if (y < 0) {
49  y += ny;
50  }
51 
52  if (y > ny - 1) {
53  y -= ny;
54  }
55 
56 
57  if (z < 0) {
58  z += nz;
59  }
60 
61  if (z > nz - 1) {
62  z -= nz;
63  }
64 
65  return x + y * nx + z * nx * ny;
66 }
67 }
68 }
69 }
T z
Definition: vec3.hpp:28
Definition: vec3.hpp:25
int getRankIndex(const ivec3 &coordinate, const ivec3 &numberOfProcessors)
Definition: rank_index.hpp:31
size_t nx
Definition: VolumeFactory.cpp:87
size_t ny
Definition: VolumeFactory.cpp:88
size_t nz
Definition: VolumeFactory.cpp:89
T y
Definition: vec3.hpp:27
Various utility functions to implement the tecno flux.
Definition: types.hpp:30
T x
Definition: vec3.hpp:26