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 | } |