Actual source code: ex145.c
1: /* This program illustrates use of paralllel real FFT*/
2: static char help[]="This program illustrates the use of parallel i1D complex fftw";
3: #include <petscmat.h>
4: #include <fftw3.h>
5: #include <fftw3-mpi.h>
9: PetscInt main(PetscInt argc,char **args)
10: {
11: const ptrdiff_t N0=50;
12: fftw_plan bplan,fplan;
13: fftw_complex *out,*in1,*in2;
14: ptrdiff_t f_alloc_local,f_local_n0,f_local_0_start;
15: ptrdiff_t f_local_n1,f_local_1_end;
16: ptrdiff_t b_alloc_local,b_local_n0,b_local_0_start;
17: ptrdiff_t b_local_n1,b_local_1_end;
19: // PetscInt i,j,indx[100],n1;
20: PetscInt size,rank;//n,N,*in,N_factor;
21: // PetscScalar *data_fin,value1,one=1.0,zero=0.0;
22: // PetscScalar a,*x_arr,*y_arr,*z_arr,enorm;
23: // Vec fin,fout,fout1,x,y;
26: PetscInitialize(&argc,&args,(char *)0,help);
27: fftw_mpi_init();
28: MPI_Comm_size(PETSC_COMM_WORLD, &size);
29: MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
30: if (size==1){
31: SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Works only for parallel FFTW 1D");}
32: else {
33: f_alloc_local = fftw_mpi_local_size_1d(N0,PETSC_COMM_WORLD,FFTW_FORWARD,FFTW_ESTIMATE,&f_local_n0,&f_local_0_start,&f_local_n1,&f_local_1_end);
34: b_alloc_local = fftw_mpi_local_size_1d(N0,PETSC_COMM_WORLD,FFTW_BACKWARD,FFTW_ESTIMATE,&b_local_n0,&b_local_0_start,&b_local_n1,&b_local_1_end);
35: }
36: printf("Forward n0 and forward n1 are %ld and %ld\n",f_local_n0,f_local_n1);
37: printf("Backward n0 and backward n1 are %ld and %ld\n",b_local_n0,b_local_n1);
39: }