Actual source code: ex145.c
2: static char help[]="This program illustrates the use of parallel 1D FFTW for both real and complex precision";
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: ptrdiff_t f_alloc_local,f_local_n0,f_local_0_start;
13: ptrdiff_t f_local_n1,f_local_1_end;
14: ptrdiff_t b_alloc_local,b_local_n0,b_local_0_start;
15: ptrdiff_t b_local_n1,b_local_1_end;
16: PetscErrorCode ierr;
17: PetscMPIInt size,rank;
19: PetscInitialize(&argc,&args,(char *)0,help);
20: fftw_mpi_init();
21: MPI_Comm_size(PETSC_COMM_WORLD, &size);
22: MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
23: if (size==1){
24: SETERRQ(PETSC_COMM_WORLD,PETSC_ERR_SUP,"Works only for parallel FFTW 1D with more than 1 process");
25: } else {
26: 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);
27: 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);
28: }
29: printf("Forward n0 and forward n1 are %ld and %ld\n",f_local_n0,f_local_n1);
30: printf("Backward n0 and backward n1 are %ld and %ld\n",b_local_n0,b_local_n1);
31: PetscFinalize();
32: return 0;
33: }