[petsc-dev] sor smoothers

Mark F. Adams mfadams at lbl.gov
Mon Sep 16 22:05:15 CDT 2013


When I do SOR I record the state, with the intent of checking that state in MatResidual to see if we are good to use the cached Ux.  But the state of the vector is incremented after SOR so it can not be the same.  So I moved the increment before the call to MatSOR.  Fine.

But I still have a stray increment of the state someplace.  I looked through the stack and could not find it.  I am on my Mac and gdb is working like crap today.  So I do this:

//#define PetscObjectStateIncrease(obj) ((obj)->state++,0)
#define PetscObjectStateIncrease(obj) ((obj)->state++,PetscPrintf(PetscObjectComm((PetscObject)obj),"%s:PetscObjectStateIncrease=%d\n",__FUNCT__,(obj)->state))

and I see this:

MatSOR: vec.st=6 m.st=1
VecRestoreArray:PetscObjectStateIncrease=7
        MatResidual_SeqAIJ: vec.st=6 == vstate=7; m.st=1 == mstate=1 ??? n=12100

The first and last lines are print statements that I added.  And you can see that VecRestoreArray is polluting my state.

So I need to change the semantics of state apparently or is this VecRestoreArray:PetscObjectStateIncrease an error?


More information about the petsc-dev mailing list