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