static char help[] = "Illustrate how to use mpi FFTW and PETSc-FFTW interface \n\n"; /* Compiling the code: This code uses the complex numbers version of PETSc, so configure must be run to enable this */ #include #include int main(int argc,char **args) { PetscErrorCode ierr; PetscMPIInt rank,size; PetscInt N,DIM; Vec x,y,z; Vec test; ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; ierr = MPI_Comm_size(PETSC_COMM_WORLD, &size);CHKERRQ(ierr); ierr = MPI_Comm_rank(PETSC_COMM_WORLD, &rank);CHKERRQ(ierr); PetscInt i; Mat A; PetscInt dim[2]; DIM = 2; N = 256; dim[0] = N; dim[1] = N; if (!rank) printf("Use PETSc-FFTW interface...%d-DIM: %d\n",(int)DIM,(int)N); ierr = MatCreateFFT(PETSC_COMM_WORLD,DIM,dim,MATFFTW,&A);CHKERRQ(ierr); /* Create vectors that are compatible with parallel layout of A - must call MatCreateVecs()! */ ierr = MatCreateVecsFFTW(A,&x,&y,&z);CHKERRQ(ierr); /* Test vector*/ //ierr = VecDuplicate(x,&test);CHKERRQ(ierr); ierr = MatCreateVecsFFTW(A,&test,NULL,NULL);CHKERRQ(ierr); ierr = VecDestroy(&test);CHKERRQ(ierr); ierr = VecDestroy(&x);CHKERRQ(ierr); ierr = VecDestroy(&y);CHKERRQ(ierr); ierr = VecDestroy(&z);CHKERRQ(ierr); ierr = MatDestroy(&A);CHKERRQ(ierr); ierr = PetscFinalize(); return 0; }