> On Apr 12, 2018, at 10:43 AM, Ali Berk Kahraman <aliberkkahra...@yahoo.com> 
> wrote:
> Dear Barry,
> Thank you very very much for your response.
> Unfortunately, I use finite differences on an unstructured grid, so my matrix 
> is not symmetric.
> That is exactly why I want to know the null space, so I can remove it from 
> the RHS vector. Or as I understand it from the online documentation, so petsc 
> can solve a least-squares problem using a MatNullSpace object. You suggestion 
> should also work. I am fine with all of these methods. The problem is, I 
> still have to know the left null space, or its norm in your suggestion, to 
> use these methods.

   I don't think you need to know the null space. As I said, just run GMRES 
until the residual norm becomes fixed (but non-zero) and you have your 
solution. No need to remove the transpose null space from the right hand side 


> On 12-04-2018 17:37, Smith, Barry F. wrote:
>>    A few thoughts,
>>> On Apr 12, 2018, at 7:47 AM, Ali Berk Kahraman <aliberkkahra...@yahoo.com> 
>>> wrote:
>>> Dear All,
>>> I am trying to solve a Poisson problem with a known source function with 
>>> all Neumann BCs.
>>    If you are using finite elements then the matrix should be symmetric and 
>> hence its transpose nullspace is the same as the original matrix.
>>    Presumably you want to know the transpose null space so you can remove it 
>> from the right hand side to get a consistent linear system? With
>> GMRES you don't need to actually remove it from the right hand side. Just 
>> apply GMRES to the inconsistent system, what will happen, if you
>> use a good preconditioner is that GMRES will converge to a solution that 
>> minimizes the residual. So the residual norm will not be zero but the 
>> solution to GMRES is a valid solution to the linear system. In fact the 
>> "left over" residual will be in the null space of the transpose; in your 
>> case it will be the null space (since it is one dimensional).
>>    Barry
>>> Hence, I know that my problem does not always have a solution, at those 
>>> times it has a transpose nullspace of one vector. If I know that vector, I 
>>> can inform petsc of its existence using a MatNullSpace object.
>>> Currently, I am trying to find the nullspace vector by solving a linear 
>>> system where TrJacobian*nullvec = e, but an arbitrary row of the TrJacobian 
>>> (ith row) is replaced with all zeros except for the ith column, and every 
>>> entry of e is 0 except for the ith entry which is 1. However, sometimes the 
>>> KSP that solves this either does not converge, or even if it converges the 
>>> nullvec it creates does not help with the original problem's ksp.
>>> Is there a more reliable way to find the transpose nullspace of a matrix?
>>> Best Regards,
>>> Ali Berk Kahraman
>>> M.Sc. Student, Mechanical Eng.
>>> Bogazici Uni. Istanbul, Turkey

Reply via email to