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