Mark, Who would be doing the "diagonal scaling". Under normal conditions we never want to be passing to any preconditioner a diagonally scaled matrix (for exactly the issue you point out) so why are you worried about that case?
Barry On Apr 2, 2012, at 6:40 PM, Mark F. Adams wrote: > > On Apr 2, 2012, at 7:24 PM, Jed Brown wrote: > >> On Mon, Apr 2, 2012 at 07:44, Jed Brown <jedbrown at mcs.anl.gov> wrote: >> The block size is used if you don't provide any other information. The >> preferred approach with petsc-dev is to use MatSetNearNullSpace(). (I'll >> make sure this is currently working with ML and reply to this message.) >> >> I pushed ML support for user-provided null spaces to petsc-dev. Call >> MatSetNearNullSpace() to provide the information. You can use >> MatNullSpaceCreateRigidBody() if you have nodal coordinates. >> >> >> Mark, what is the best way to make PCGAMG use this interface? > > It looks like you are adding this to the Mat, so I can check to see if > coordinates have been set and if not check the matrix. This should be easy > to do; I'll look at the ML code to clone the API. > > One thing to keep in mind is that diagonal scaling breaks the null space (ie, > the rigid body modes have to be scaled appropriately). Who owns the diagonal > scaling? If it is Mat then we might want MatSetNearNullSpace to do this, > otherwise we should think of a good way to deal with this. It is very error > prone to not do the right thing here, we should at least throw an error. > >
