some sor questions

Barry Smith bsmith at
Tue Sep 22 13:38:34 CDT 2009

On Sep 22, 2009, at 8:47 AM, Stephan Kramer wrote:

> Hi all,
> I have some questions basically about the MatRelax_SeqAIJ routine:
> If I understand correctly there are 2 versions of the sor routine  
> depending on whether or not there is a zero guess, so that with a  
> zero guess in the forward sweep you don't need to multiply the upper  
> diagonal part U with the part of the x vector that is still zero.  
> Why then does it look like that both versions log the same number of  
> flops? I would have expected that the full forward sweep (i.e. no  
> zero guess) takes 2*a->nz flops (i.e. the same as a matvec) and not  
> a->nz.

    You are right. This is an error in our code. It will be in the  
next patch.

> Why does the Richardson iteration with sor not take the zero guess  
> into account, i.e. why does PCApplyRichardson_SOR not set  
> SOR_ZERO_INIT_GUESS in the call to MatRelax if the Richardson ksp  
> has a zero initial guess set?

    This appears to be a design limitation. There is no mechanism to  
pass the information that the initial guess is zero into  
PCApplyRichardson(). We could add support for this by adding one more  
argument to PCApplyRichardson() for this information. I don't see a  
simpler way.  If one is running, say 2 iterations of Richardson then  
this would be a measurable improvement in time. If one is running many  
iterations then the savings is tiny. Perhaps this support should be  

> In parallel if you specify SOR_LOCAL_FORWARD_SWEEP or  

> calls MatRelax on the local part of the matrix, mat->A, with  
> its=lits and lits=PETSC_NULL (?).

> However the first line of MatRelax_SeqAIJ then says: its = its*lits.  
> Is that right?

    This is all wrong. It should be passing 1 in, not PETSC_NULL. This  
was fixed in petsc-dev but not in petsc-3.0.0 I will fix it in  
petsc-3.0.0 and it will be in the next patch.

    Thanks for pointing out the problems.

    If you plan to use SOR a lot, you might consider switching to  
petsc-dev since I have made some improvements there. Also consider the  
Eisenstat trick preconditioner.


> Please tell me if I'm totally misunderstanding how the routine  
> works, thanks for any help.
> Cheers
> Stephan
> -- 
> Stephan Kramer  <s.kramer at>
> Applied Modelling and Computation Group,
> Department of Earth Science and Engineering,
> Imperial College London

More information about the petsc-users mailing list