Statistics
| Branch: | Revision:

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

History | View | Annotate | Download (1.2 kB)

1 0:839f52ef7657 louridas
#include <mpi.h>
2 0:839f52ef7657 louridas
#include <math.h>
3 0:839f52ef7657 louridas
#include "mpiargs.h"
4 0:839f52ef7657 louridas
#include <stdio.h>
5 0:839f52ef7657 louridas
6 0:839f52ef7657 louridas
void twiddle( int m, int n, double **ar, double **ai )
7 0:839f52ef7657 louridas
// ---------------------------------------------------------------------
8 0:839f52ef7657 louridas
// --- 'twiddle' does a complex multiplication with the appropriate
9 0:839f52ef7657 louridas
//    twiddle factors for the elements of 'ar' & 'ai' which represent
10 0:839f52ef7657 louridas
//    the Real and Imaginary parts of a 1-D 'm*(n*nodes)' length FFT,
11 0:839f52ef7657 louridas
//    factored as a sequence of 'n*nodes' FFTs of length 'm'. 'nodes'
12 0:839f52ef7657 louridas
//    is the number of processors over which the 'm'-length FFTs are
13 0:839f52ef7657 louridas
//    distributed.
14 0:839f52ef7657 louridas
// ---------------------------------------------------------------------
15 0:839f52ef7657 louridas
{
16 0:839f52ef7657 louridas
   int    i, j, nbase;
17 0:839f52ef7657 louridas
   double arg, fac, fr, fi, temp;
18 0:839f52ef7657 louridas
// ---------------------------------------------------------------------
19 0:839f52ef7657 louridas
   fac   = 8.0*atan( 1.0 )/(m*n*nodes);
20 0:839f52ef7657 louridas
   nbase = me*m;
21 0:839f52ef7657 louridas
   for( i = 0; i < m; i++ ) {
22 0:839f52ef7657 louridas
      for( j = 0; j < n; j++ ) {
23 0:839f52ef7657 louridas
         arg       = ( j*( nbase + i ) )*fac;
24 0:839f52ef7657 louridas
         fr        = cos( arg );
25 0:839f52ef7657 louridas
         fi        = sin( arg );
26 0:839f52ef7657 louridas
//printf( "me =%2d; i =%2d; j =%2d; fr =%7.3f; fi =%7.3f\n", me, i, j, fr, fi );
27 0:839f52ef7657 louridas
         temp      = ar[i][j]*fr - ai[i][j]*fi;
28 0:839f52ef7657 louridas
         ai[i][j]  = ar[i][j]*fi + ai[i][j]*fr;
29 0:839f52ef7657 louridas
         ar[i][j]  = temp;
30 0:839f52ef7657 louridas
      }
31 0:839f52ef7657 louridas
   }
32 0:839f52ef7657 louridas
}