root / synthbench / euroben-ports / base / C-MPI / mod2f / btrans.c @ 0:839f52ef7657
History | View | Annotate | Download (853 Bytes)
1 |
#include "mpiargs.h" |
---|---|
2 |
|
3 |
void btrans( int n1, int n2, double *a, double **t, int dir ) |
4 |
// ---------------------------------------------------------------------
|
5 |
// --- 'btrans' performs a blockwise local transposition. Input is a
|
6 |
// 1-D array 'a', output is a 2-D array 't'
|
7 |
// ---------------------------------------------------------------------
|
8 |
{ |
9 |
int i, j, k, l;
|
10 |
int dim1, dim2, m1, m2, shift;
|
11 |
// ---------------------------------------------------------------------
|
12 |
if ( dir == 0 ) { |
13 |
dim1 = 0;
|
14 |
dim2 = 1;
|
15 |
} |
16 |
else {
|
17 |
dim1 = 1;
|
18 |
dim2 = 0;
|
19 |
} |
20 |
l = 0; m2 = sizes[me][dim2];
|
21 |
for( k = 0; k < nodes; k++ ) { |
22 |
shift = offset[k][dim1]; |
23 |
m1 = sizes[k][dim1]; |
24 |
for( j = 0; j < m2; j++ ) { |
25 |
for( i = 0; i < m1; i++ ) { |
26 |
t[j][i+shift] = a[l]; |
27 |
l++; |
28 |
} |
29 |
} |
30 |
} |
31 |
} |