Advertisement
LBoksha

Petsc FFTW

Oct 25th, 2012
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. #include <math.h>
  2. #include <petscvec.h>
  3. #include <petscmat.h>
  4.  
  5. int main(int argc,char **args)
  6. {
  7.         int out = 0;
  8.         int dimensions[] = {2000};
  9.         int ndims = sizeof(dimensions)/sizeof(int);
  10.         int N = 1;
  11.         int i;
  12.         PetscScalar v;
  13.         Vec inputvec, backtransform;
  14.         Mat fftwa;
  15.         Vec fftwin,fftwout, fftwbackout;
  16.    
  17.     PetscInitialize(&argc,&args,(char *)0,"");
  18.    
  19.     for (i = 0; i < ndims; i++)
  20.         N *= dimensions[i];
  21.    
  22.     VecCreateSeq(PETSC_COMM_SELF,N,&inputvec);
  23.     VecCreateSeq(PETSC_COMM_SELF,N,&backtransform);
  24.     MatCreateFFT(PETSC_COMM_WORLD,ndims,dimensions,MATFFTW,&fftwa);
  25.     MatGetVecsFFTW(fftwa,&fftwin,&fftwout,&fftwbackout);
  26.    
  27.     for (i = 0; i < N; i++)
  28.     { // fill the input vector with a sinewave
  29.         v = sin(double(i)/60.0);
  30.         VecSetValues(inputvec,1,&i,&v, INSERT_VALUES);
  31.     }
  32.     VecAssemblyBegin(inputvec);
  33.     VecAssemblyEnd(inputvec);
  34.    
  35.     VecScatterPetscToFFTW(fftwa,inputvec,fftwin);
  36.     MatMult(fftwa,fftwin,fftwout);
  37.     MatMultTranspose(fftwa,fftwout,fftwbackout);
  38.     VecScatterFFTWToPetsc(fftwa,fftwbackout,backtransform);
  39.  
  40.     VecView(inputvec, PETSC_VIEWER_DRAW_WORLD); PetscSleep(-1);
  41.     VecView(fftwout, PETSC_VIEWER_DRAW_WORLD); PetscSleep(-1);
  42.     VecView(backtransform, PETSC_VIEWER_DRAW_WORLD); PetscSleep(-1);
  43.    
  44.     VecDestroy(&fftwin); VecDestroy(&fftwout); VecDestroy(&fftwbackout);
  45.     VecDestroy(&inputvec); VecDestroy(&backtransform); MatDestroy(&fftwa);
  46.  
  47.     PetscFinalize();
  48.     return out;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement