Statistics
| Branch: | Revision:

root / synthbench / euroben-ports / base / C-MPI / mod2f / btrans.c @ 0:839f52ef7657

History | View | Annotate | Download (853 Bytes)

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