File: decomp.cpp

package info (click to toggle)
adios2 2.10.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 33,764 kB
  • sloc: cpp: 175,964; ansic: 160,510; f90: 14,630; yacc: 12,668; python: 7,275; perl: 7,126; sh: 2,825; lisp: 1,106; xml: 1,049; makefile: 579; lex: 557
file content (32 lines) | stat: -rw-r--r-- 728 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
 * decomp.h
 *
 *  Created on: Oct 2018
 *      Author: Norbert Podhorszki
 */

#include "decomp.h"

void decompColumnMajor(const size_t ndim, const size_t rank, const size_t *decomp, size_t *pos)
{
    // pos[k] = rank / prod(decomp[i], i=0..k-1) % decomp[k]

    size_t prod = 1;
    for (size_t k = 0; k < ndim; ++k)
    {
        pos[k] = rank / prod % decomp[k];
        prod *= decomp[k];
    }
}

void decompRowMajor(const size_t ndim, const size_t rank, const size_t *decomp, size_t *pos)
{
    // pos[k] = rank / prod(decomp[i], i=k+1..n-1) % decomp[k]

    size_t prod = 1;
    for (int k = static_cast<int>(ndim) - 1; k >= 0; --k)
    {
        pos[k] = rank / prod % decomp[k];
        prod *= decomp[k];
    }
}