<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
Dear developers,
<div class=""><br class="">
</div>
<div class="">To avoid zero pivot error in IC/ILU preconditioners,  I plan to permute matrix before solving the linear system. I referred example ex10(<a href="https://petsc.org/main/src/ksp/ksp/tutorials/ex10.c.html" class="">https://petsc.org/main/src/ksp/ksp/tutorials/ex10.c.html</a>)
 and ex18(<a href="https://petsc.org/main/src/ksp/ksp/tutorials/ex18.c.html" class="">https://petsc.org/main/src/ksp/ksp/tutorials/ex18.c.html</a>), and was confused that why vector b is permuted by column permutation index set:</div>
<div class=""><br class="">
</div>
<div class="">// in ex18.c</div>
<div class="">
<pre width="80" style="font-variant-ligatures: normal; orphans: 2; widows: 2; text-decoration-thickness: initial;" class=""><a name="line174" class="">174: </a>  <font color="#4169E1" class="">if</font> (permute) {
<a name="line175" class="">175: </a>    <a href="https://petsc.org/main/docs/manualpages/Mat/Mat/" class="">Mat</a> Aperm;
<a name="line176" class="">176: </a>    <a href="https://petsc.org/main/docs/manualpages/MatOrderings/MatGetOrdering/" class="">MatGetOrdering</a>(A, ordering, &rowperm, &colperm);
<a name="line177" class="">177: </a>    <a href="https://petsc.org/main/docs/manualpages/Mat/MatPermute/" class="">MatPermute</a>(A, rowperm, colperm, &Aperm);
<span style="background-color: rgb(255, 38, 0);" class=""><a name="line178" class="">178: </a>    <a href="https://petsc.org/main/docs/manualpages/Vec/VecPermute/" class="">VecPermute</a>(b, colperm, <a href="https://petsc.org/main/docs/manualpages/Sys/PETSC_FALSE/" class="">PETSC_FALSE</a>);</span>
<a name="line179" class="">179: </a>    <a href="https://petsc.org/main/docs/manualpages/Mat/MatDestroy/" class="">MatDestroy</a>(&A);
<a name="line180" class="">180: </a>    A = Aperm; <font color="#B22222" class="">/* Replace original operator with permuted version */</font>
<a name="line181" class="">181: </a>  }</pre>
<div class="">As far as I understand, vector b should be only  affected by permuting rows in matrix A, instead of column permutation. How to understand that permuting vector b with column permutation index set of matrix A?</div>
</div>
<div class=""><br class="">
</div>
<div style="orphans: 2; widows: 2;" class="">Another question is why  <span style="color: var(--pst-color-primary); font-family: -apple-system, system-ui, "Segoe UI", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: var(--pst-font-size-h1); orphans: 2; widows: 2; background-color: rgb(255, 255, 255);" class="">MatReorderForNonzeroDiagonal
 function </span><span style="color: var(--pst-color-primary); font-family: -apple-system, system-ui, "Segoe UI", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; orphans: 2; widows: 2; background-color: rgb(255, 255, 255); font-size: 14px;" class="">only
 works for type MATSEQAIJ? If it works for other matrix types, then this function will meet my </span><font face="-apple-system, system-ui, Segoe UI, Helvetica Neue, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol" class=""><span style="font-size: 14px;" class="">requirement.</span></font></div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">Thanks,</div>
<div class=""><br class="">
</div>
<div class="">Xiaofeng</div>
</body>
</html>