<html>
<head><title></title></head>
<body><div class="iw_mail" dir="ltr">
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";">Dear Barry,</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><br></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";">Thanks for your kind answer. You are right. I will try to write my own block ILU with the properties I need. However, my primary problem is the matrix storage. As I understand, each process keeps a portion of a matrix and has access to that portion only. Additionally, I have not found any routine that enables the access of one process to the portion of the matrix that is saved on the memory of another process. However, some algorithms like ILU need such access, and despite spending much time investigating the code, I still do not understand how such a thing is done.</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><br></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";">I</span><span style="font-size:16px;font-family:"Times New Roman","serif";"> am a very experienced programmer in the field of numerical analysis, but PETSc is a very huge and complicated code. Therefore, I have to apologize for taking your precious time if you find the solution to my problem too obvious, but I will be really really grateful if you could give me a hint.</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><br></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><br></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><br></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";">Dear Jed,</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><br></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";">Thank you for your kind answer. I have a multi-component fluid flow simulator, which produces valid results using a direct solver (like MKL DGESV). However, direct solvers are useless if the problem size increases, no other available combinations of PC/KSP could solve the system. The simulator must solve a system of nonlinear PDEs for each node, and the primary unknowns are pressure and fluid compositions. However, at some pressures, the fluid is vaporized/liquefied (A.K.A undergoes phase change), and the number of PDEs for that node is increased (phase equilibrium equations have to be solved for that node, too). Therefore, in the discretized then linearized system, we have a block of equations for each node, but the block size is variable, depending on the fluid phase status in that node. The block preconditioners can handle the problem but only if they are designed for such a variable size block matrix. Thanks to Barry, we have a variable block sized BJacobi preconditioner (PCVPBJACOBI), but it does not provide the required precision in a few cases, and more effective preconditioning is needed. Also, I have found that others may need such variable block size handling, as it can be found in PETSc mailing lists:</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";"><a href="https://lists.mcs.anl.gov/pipermail/petsc-users/2011-October/010491.html" style="user-select: auto;">https://lists.mcs.anl.gov/pipermail/petsc-users/2011-October/010491.html</a></span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";"><a href="https://lists.mcs.anl.gov/pipermail/petsc-users/2018-August/036028.html" style="user-select: auto;">https://lists.mcs.anl.gov/pipermail/petsc-users/2018-August/036028.html</a></span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";">Since I have always loved to contribute to open source projects, and PETSc helped me a lot in my other researches, I decided to add variable size block ILU preconditioner to PETSc. However, PETSc is too complicated, andI cannot accomplish such a task efficiently without help.</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";"><br></span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";">Many thanks,</span></p>
<p style="margin: 0in 0in 0.0001pt; font-size: 15px; font-family: Calibri, sans-serif;"><span style="font-size:16px;font-family:"Times New Roman","serif";color:black;">Ali</span></p>
<div style="display:none;margin:0;font-family:Helvetica,sans-serif;font-size:13px;font-weight:300;line-height:150%;letter-spacing:normal;color:#333333;">----- Original Message -----</div>
<br><hr style="width:100%;padding:0;margin:10px 0;color:#888888;background-color:#888888;border-color:#DDDDDD;" width="100%" size="1">
<br>From: Jed Brown (<a href="mailto:jed@jedbrown.org" style="font-family: Helvetica, sans-serif; font-size: 12px; font-weight: 300; line-height: 150%; color: rgb(0, 136, 204); text-decoration: none; user-select: auto;">jed@jedbrown.org</a>)<br>Date: 13/09/97 05:09<br>To: Smith, Barry F. (<a href="mailto:bsmith@mcs.anl.gov" style="font-family: Helvetica, sans-serif; font-size: 12px; font-weight: 300; line-height: 150%; color: rgb(0, 136, 204); text-decoration: none; user-select: auto;">bsmith@mcs.anl.gov</a>), Ali Reza Khaz'ali (<a href="mailto:arkhazali@cc.iut.ac.ir" style="font-family: Helvetica, sans-serif; font-size: 12px; font-weight: 300; line-height: 150%; color: rgb(0, 136, 204); text-decoration: none; user-select: auto;">arkhazali@cc.iut.ac.ir</a>)<br>Cc: <a href="mailto:petsc-dev@mcs.anl.gov" style="font-family: Helvetica, sans-serif; font-size: 12px; font-weight: 300; line-height: 150%; color: rgb(0, 136, 204); text-decoration: none; user-select: auto;">petsc-dev@mcs.anl.gov</a><br>Subject: <span style="font-family:Helvetica, sans-serif;font-size:12px;font-weight:300;line-height:150%;color:#333;text-decoration:none;font-weight:bold;">Re: [petsc-dev] Implementing of a variable block size BILU preconditioner</span><br><div class="iw-reply-block" dir="ltr" style="font-size: 13px;font-family:Helvetica,sans-serif;line-height:150%;">
<br><br><div>"Smith, Barry F. via petsc-dev" <<a href="mailto:petsc-dev@mcs.anl.gov" style="user-select: auto;">petsc-dev@mcs.anl.gov</a>> writes:<br><br>>> On Dec 3, 2018, at 4:49 PM, Ali Reza Khaz'ali <<a href="mailto:arkhazali@cc.iut.ac.ir" style="user-select: auto;">arkhazali@cc.iut.ac.ir</a>> wrote:<br>>><br>>> Hi,<br>>><br>>> I think that the topic is more suited for PETSc-developers than its users; therefore, I move it to the dev list.<br>>><br>>> Continuing the discussion on implementing a variable-block size BILU preconditioner, would it be possible to change the block size parameter (bs) on BAIJ format such that it can handle variable block sizes? (i.e., instead of it being a scalar, it can be an array). Although BILU does not necessarily require rectangular blocks, I think, it leads to less         messy code.<br>><br>>    That is an alternative to using the AIJ format. The problem with this approach is you will need to write a lot of code for the variable block size BAIJ; MatSetValues_SeqVBAIJ, MatMult_SeqVBAIJ, etc etc. While if you reuse the AIJ you only need to write new factorization and solve routines (much less code).<br><br>Sure, but the result isn't really different (modulo associativity) from<br>normal ILU applied to a block matrix (at least unless you start<br>considering fill with incomplete blocks).<br><br>Ali, what are you hoping to achieve with variable block ILU?<br><br>>> Also, being a newbie on PETSc code, I do not understand some parts of the code, especially distributed matrix storage and some of the implemented numerical algorithms. Is there any reference that I can use for this?<br>><br>>    There is a little discussion at the end chapters of the users manual, plus you should read the developers manual. But there is not a lot of detail except in the actual code.<br>><br>>     Barry<br>><br>>><br>>>  <br>>> --<br>>> Ali Reza Khaz'ali<br>>> Assistant Professor of Petroleum Engineering,<br>>> Department of Chemical Engineering<br>>> Isfahan University of Technology<br>>> Isfahan, Iran<br>>></div>
<br>
</div>
<br>
</div></body>
</html>