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