Hi, I tried using PETSc multigrid on my 2D CFD code. I had converted ksp eg. ex29 to Fortran and then added into my code to solve the Poisson equation.
The main subroutines are: call KSPCreate(PETSC_COMM_WORLD,ksp,ierr) call DMDACreate2d(PETSC_COMM_WORLD,DMDA_BOUNDARY_NONE,DMDA_BOUNDARY_NONE,DMDA_STENCIL_STAR,i3,i3,PETSC_DECIDE,PETSC_DECIDE,i1,i1,PETSC_NULL_INTEGER,PETSC_NULL_INTEGER,da,ierr) call DMSetFunction(da,ComputeRHS,ierr) call DMSetJacobian(da,ComputeMatrix,ierr) call KSPSetDM(ksp,da,ierr) call KSPSetFromOptions(ksp,ierr) call KSPSetUp(ksp,ierr) call KSPSolve(ksp,PETSC_NULL_OBJECT,PETSC_NULL_OBJECT,ierr) call KSPGetSolution(ksp,x,ierr) call VecView(x,PETSC_VIEWER_STDOUT_WORLD,ierr) call KSPDestroy(ksp,ierr) call DMDestroy(da,ierr) call PetscFinalize(ierr) Since the LHS matrix doesn't change, I only set up at the 1st time step, thereafter I only called ComputeRHS every time step. I was using HYPRE's geometric multigrid and the speed was much faster. What other options can I tweak to improve the speed? Or should I call the subroutines above at every timestep? Thanks! -- Yours sincerely, TAY wee-beng
