some sor questions

Stephan Kramer s.kramer at
Tue Sep 22 08:47:52 CDT 2009

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.

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?

In parallel if you specify SOR_LOCAL_FORWARD_SWEEP or 
SOR_LOCAL_BACKWARD_SWEEP it 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?

Please tell me if I'm totally misunderstanding how the routine works, 
thanks for any help.


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