> On Feb 27, 2015, at 7:25 PM, Sun, Hui <hus...@ucsd.edu> wrote:
> 
> Thank you Barry. Another question: I observe that in those ksp examples, 
> whenever multigrid is used, DMDA is also used, besides, 
> KSPSetComputeOperators and KSPSetComputeRHS are also used. 
> 
> Is it true that 
> 1) Only DMDA can use mg? 

   No this is not true

> 2) We have to set up matrices and rhs using KSPSetComputeOperators  and 
> KSPSetComputeRHS?

   No you do not have to

> We cannot create a matrix and add it to KSP if we want to use mg? 

    Yes you can.

   There are many many variants of multigrid one can do with PETSc; we don't 
have the time to have examples of all the possibilities.

More details

> 1) Only DMDA can use mg? 

   Because DMDA provides structured grids with easy interpolation between 
levels and it is easy for users to write Jacobians we have many examples that 
use the DMDA. However, so long as YOU (or something) can provide interpolation 
between the multigrid levels you can use multigrid. For example PCGAMG uses 
algebraic multigrid to generate the interpolations. If you have your own 
interpolations you can provide them with PCMGSetInterpolation() (when you use 
PCMG with DMDA PETSc essentially handles those details automatically for you).

> 2) We have to set up matrices and rhs using KSPSetComputeOperators  and 
> KSPSetComputeRHS? 

   Normally with geometric multigrid one discretizes the operator on each level 
of the grid. Thus the user has to provide several matrices (one for each 
level). KSPSetComputeOperators() is ONE way that the user can provide them. You 
can also provide them by call PCMGetSmoother(pc,level,&ksp) and then call 
KSPSetOperators(ksp,...) for each of the levels (KSPSetComputeOperators() 
essentially does the book keeping for you).

> We cannot create a matrix and add it to KSP if we want to use mg? 

    As I said in 2 normally multigrid requires you to provide a discretized 
operator at each level. But with Galerkin coarse grids (which is what algebraic 
multigrid users and can also be used by geometric multigrid) the user does not 
provide coarser grid operators instead the code computes them automatically 
from the formula R*A*P where R is the restriction operator used in multigrid 
and P is the interpolation operator (usually the transpose of P). 

   If you are looking for a simple automatic multigrid then you want to use 
PCGAMG in PETSc, it does algebraic multigrid and doesn't require you provide 
interpolations or coarser operators. However algebraic multigrid doesn't work 
for all problems; though it does work for many. Try it with -pc_type gamg 

  Barry

> 
> Best,
> Hui
> 
> ________________________________________
> From: Barry Smith [bsm...@mcs.anl.gov]
> Sent: Friday, February 27, 2015 5:11 PM
> To: Sun, Hui
> Cc: petsc-users@mcs.anl.gov
> Subject: Re: [petsc-users] DMDA with dof=4, multigrid solver
> 
>> On Feb 27, 2015, at 6:36 PM, Sun, Hui <hus...@ucsd.edu> wrote:
>> 
>> I'm trying to work on 4 Poisson's equations defined on a DMDA grid, Hence 
>> the parameter dof in DMDACreate3d should be 4, and I've set stencil width to 
>> be 4, and stencil type to be star.
> 
>  Use a stencil width of 1, not 4. The stencil width is defined in terms of 
> dof.
>> 
>> If I run the code with -pc_type ilu and -ksp_type gmres, it works alright.
>> 
>> However, if I run with pc_type mg, it gives me an error saying that when it 
>> is doing MatSetValues, the argument is out of range, and there is a new 
>> nonzero at (60,64) in the matrix. However, that new nonzero is expected to 
>> be there, the row number 60 corresponds to i=15 and c=0 in x direction, and 
>> the column number 64 corresponds to i=16 and c=0 in x direction. So they are 
>> next to each other, and the star stencil with width 1 should include that. I 
>> have also checked with the memory allocations, and I'm found no problem.
>> 
>> So I'm wondering if there is any problem of using multigrid on a DMDA with 
>> dof greater than 1?
> 
>  No it handles dof > 1 fine.
> 
>  Send your code.
> 
>  Barry
> 
>> 
>> Thank you!

Reply via email to