[petsc-users] PCLU diverges where PCILU converges on Dense Matrix
Ali Berk Kahraman
aliberkkahraman at yahoo.com
Mon Mar 12 05:59:59 CDT 2018
Thank you for your answers. Barry's answer allowed me to get up to 50x
faster code, so it was a huge help. I decided not to use ksp context
altogether for this small operation.
Thank you again,
Ali
On 11-03-2018 18:53, Matthew Knepley wrote:
> On Sun, Mar 11, 2018 at 1:14 AM, Smith, Barry F. <bsmith at mcs.anl.gov
> <mailto:bsmith at mcs.anl.gov>> wrote:
>
>
> 1) Run the problem with -ksp_view_mat and -ksp_view_rhs and mail
> petsc-maint at mcs.anl.gov <mailto:petsc-maint at mcs.anl.gov> the
> resulting file produced called binaryoutput
>
> 2) By default PCLU does a reordering to reduce fill that could
> introduce a zero pivoit, PCILU does not do a reordering by
> default. You can use -pc_factor_mat_ordering_type none to force no
> reordering (PCLU does not do numerical pivoting for stability so
> can fail with zero pivots).
>
> 3) If you need to solve these tiny 7 by 7 systems many times
> (presumably you are solving these to set up a large algebraic
> system solved afterwards) then you probably don't want to use KSP
> to solve them. You can use the low level kernel
> PetscKernel_A_gets_inverse_A_7() that does do pivoting followed by
> a multiply like
>
> s1 = v[0]*x1 + v[6]*x2 + v[12]*x3 + v[18]*x4 + v[24]*x5 + v[30]*x6;
> s2 = v[1]*x1 + v[7]*x2 + v[13]*x3 + v[19]*x4 + v[25]*x5 +
> v[31]*x6;
> s3 = v[2]*x1 + v[8]*x2 + v[14]*x3 + v[20]*x4 + v[26]*x5 +
> v[32]*x6;
> s4 = v[3]*x1 + v[9]*x2 + v[15]*x3 + v[21]*x4 + v[27]*x5 +
> v[33]*x6;
> s5 = v[4]*x1 + v[10]*x2 + v[16]*x3 + v[22]*x4 + v[28]*x5 +
> v[34]*x6;
> s6 = v[5]*x1 + v[11]*x2 + v[17]*x3 + v[23]*x4 + v[29]*x5 +
> v[35]*x6;
>
> where v is the dense 7 by 7 matrix (stored column oriented like
> Fortran) an the x are the seven values of the right hand side.
>
>
> Note that PCPBJACOBI will do this automatically.
>
> Matt
>
> Barry
>
>
>
>
>
> > On Mar 10, 2018, at 5:22 AM, Ali Berk Kahraman
> <aliberkkahraman at yahoo.com <mailto:aliberkkahraman at yahoo.com>> wrote:
> >
> > Hello All,
> >
> > I am trying to get the finite difference coefficients for a
> given irregular grid. For this, I follow the following webpage,
> which tells me to solve a linear system.
> >
> > http://web.media.mit.edu/~crtaylor/calculator.html
> <http://web.media.mit.edu/%7Ecrtaylor/calculator.html>
> >
> > I solve a 7 unknown linear system with a 7x7 dense matrix to get
> the finite difference coefficients. Since I will call this code
> many many many times in my overall project, I need it to be as
> fast, yet as exact as possible. So I use PCLU. I make sure that
> there are no zero diagonals on the matrix, I swap required rows
> for it. However, PCLU still diverges with the output at the end of
> this e-mail. It indicates "FACTOR_NUMERIC_ZEROPIVOT" , but as I
> have written above I make sure there are no zero main diagonal
> entries on the matrix. When I use PCILU instead, it converges
> pretty well.
> >
> > So my question is, is PCILU the same thing mathematically as
> PCLU when applied on a small dense matrix? I need to know if I get
> the exact solution with PCILU, because my whole project will
> depend on the accuracy of the finite differences.
> >
> > Best Regards,
> >
> > Ali Berk Kahraman
> > M.Sc. Student, Mechanical Engineering Dept.
> > Boğaziçi Uni., Istanbul, Turkey
> >
> > Linear solve did not converge due to DIVERGED_PCSETUP_FAILED
> iterations 0
> > PCSETUP_FAILED due to FACTOR_NUMERIC_ZEROPIVOT
> > KSP Object: 1 MPI processes
> > type: gmres
> > restart=30, using Classical (unmodified) Gram-Schmidt
> Orthogonalization with no iterative refinement
> > happy breakdown tolerance 1e-30
> > maximum iterations=10000, initial guess is zero
> > tolerances: relative=1e-05, absolute=1e-50, divergence=10000.
> > left preconditioning
> > using PRECONDITIONED norm type for convergence test
> > PC Object: 1 MPI processes
> > type: lu
> > out-of-place factorization
> > tolerance for zero pivot 2.22045e-14
> > matrix ordering: nd
> > factor fill ratio given 5., needed 1.
> > Factored matrix follows:
> > Mat Object: 1 MPI processes
> > type: seqaij
> > rows=7, cols=7
> > package used to perform factorization: petsc
> > total: nonzeros=49, allocated nonzeros=49
> > total number of mallocs used during MatSetValues calls =0
> > using I-node routines: found 2 nodes, limit used is 5
> > linear system matrix = precond matrix:
> > Mat Object: 1 MPI processes
> > type: seqaij
> > rows=7, cols=7
> > total: nonzeros=49, allocated nonzeros=49
> > total number of mallocs used during MatSetValues calls =0
> > using I-node routines: found 2 nodes, limit used is 5
> >
> >
>
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which
> their experiments lead.
> -- Norbert Wiener
>
> https://www.cse.buffalo.edu/~knepley/ <http://www.caam.rice.edu/%7Emk51/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20180312/88d58277/attachment-0001.html>
More information about the petsc-users
mailing list