<div dir="ltr"><div class="gmail_extra">Hi Barry,</div><div class="gmail_extra"><br></div><div class="gmail_extra">>  Are you free to pick whatever (parallel) data structure for the lower and upper triangular parts you want? Or are they given to you?<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Yes I am free to pick any data structure, of course it must be possible for me to work with or be able to convert from a different format (say CSR / COO). I do not care yet about how efficient is the conversion part.</div><div class="gmail_extra"><br></div><div class="gmail_extra">>  Are you doing many triangular solves at the same time with different right hand sides, or are you doing them one at a time?</div><div class="gmail_extra"><br></div><div class="gmail_extra">My current intention is to work with one vector at a time.</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Mar 9, 2015 at 10:38 AM, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><br>
> On Mar 8, 2015, at 10:40 PM, Hoang-Vu Dang <<a href="mailto:dang.hvu@gmail.com">dang.hvu@gmail.com</a>> wrote:<br>
><br>
> Sorry for causing the confusion, I should have clarify the term "triangular solver".<br>
><br>
> What I mean is that I do not need a factorization from a general matrix to LU form.<br>
><br>
>  I already have the matrix in lower/upper triangular form. So the solver is really just backward/forward substitution.<br>
<br>
</span>  The details of the backward/forward substitution depend in great deal on the (parallel) data structure used to store the lower and upper triangular part. This is why the lower/upper triangular solvers are tied to the same code that does the factorization; for example I cannot factor with MUMPS and then do the triangular solves with SuperLU_Dist since they assume different and complicated (parallel) data structures.<br>
<br>
   Are you free to pick whatever (parallel) data structure for the lower and upper triangular parts you want? Or are they given to you? Are you doing many triangular solves at the same time with different right hand sides, or are you doing them one at a time?<br>
<span class=""><font color="#888888"><br>
  Barry<br>
</font></span><div class=""><div class="h5"><br>
><br>
> See here, I got the terminology from <a href="http://www.mcs.anl.gov/papers/P1658.pdf" target="_blank">http://www.mcs.anl.gov/papers/P1658.pdf</a><br>
><br>
> The algorithm "sparse triangular solve", unless I misunderstood the paper. The paper specifically mentioned PETSC so that's where I'm starting from.<br>
><br>
> I hope that makes thing clearer,<br>
><br>
> Cheers,<br>
> Vu<br>
><br>
> On Sun, Mar 8, 2015 at 9:28 PM, Hong <<a href="mailto:hzhang@mcs.anl.gov">hzhang@mcs.anl.gov</a>> wrote:<br>
> Hoang-Vu :<br>
> If I do not need the full solver/factorization but just the backward subs, do i need any special treatment ? Is there a way to hint the solver to apply only the last step to reduce overhead ?<br>
><br>
> What do you mean " do not need the full solver/factorization"?<br>
> Do you need incomplete matrix factorization, e.g., ILU, instead of full factorization?<br>
> The backward subs are steps AFTER matrix factorization.<br>
><br>
> Hong<br>
><br>
> On Mar 8, 2015 6:26 PM, "Barry Smith" <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
><br>
>   PETSc provides sparse parallel LU (and Cholesky) factorizations and solves via the external packages SuperLU_Dist, MUMPS, and Pastix. You need to first configure PETSc to use one or more of those packages for example ./configure --download-superlu_dist --download-metis --download-parmetis.<br>
><br>
>   It is generally best to use the linear solvers via the PETSc KSP interface (even for direct solvers such as LU). So you create a KSP object, provide the matrix object and call KSPSolve(). You can control the solver used via the options database; to use the installed SuperLU_Dist you would use -pc_type lu -pc_factor_mat_solver_package superlu_dist<br>
><br>
>   The MatrixMarket format is no good for parallel computing so you must first convert the file from MatrixMarket format to the PETSc binary format (see <a href="http://www.mcs.anl.gov/petsc/documentation/faq.html#sparse-matrix-ascii-format" target="_blank">http://www.mcs.anl.gov/petsc/documentation/faq.html#sparse-matrix-ascii-format</a> ) and then  you can use MatLoad() to load the matrix in parallel and then pass it to the KSP solver. For example src/ksp/ksp/examples/tutorials/ex10.c does this.<br>
><br>
><br>
>   Barry<br>
><br>
> > On Mar 8, 2015, at 6:08 PM, Hoang-Vu Dang <<a href="mailto:dang.hvu@gmail.com">dang.hvu@gmail.com</a>> wrote:<br>
> ><br>
> > Hi,<br>
> ><br>
> > I would like to use petcs to perform parallel backward/forward substitution for sparse triangular matrices in a distributed memory cluster (with MPI).<br>
> ><br>
> > Could someone provide me some pointers on how to do this or whether petsc is good for this task ?<br>
> ><br>
> > I think there is MatSolve method, but unsure whether it supports good algorithm for sparse triangular matrices and how to provide an input in a MartrixMarket format / CSR format.<br>
> ><br>
> > Thank you<br>
> > Vu<br>
><br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div></div>