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.
> 
> 

Reply via email to