<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p></p>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">Hello,</span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
<span style="font-family: "Courier New", monospace;"></span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">I am working on a PDE solver which uses petsc to solve its sparse distributed linear systems. I am mainly dealing with MPIAIJ matrices.</span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
<span style="font-family: "Courier New", monospace;"></span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;"><span style="font-family: "Courier New", monospace;">In some situations, it may happen that the matrices considered does not have non-zero term on the diagonal. For instance I work on a case which have a
 stokes like saddle-point structure (in a MPIAIJ, not a MATNEST</span><span style="font-family: "Courier New", monospace;">)</span><span style="font-family: "Courier New", monospace;">:</span></span><br>
<span style="font-family: "Courier New", monospace;"></span><br>
<span style="font-family: "Courier New", monospace;"></span><span style="font-family: "Courier New", monospace;">[A Bt][U]=[F]</span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">[B 0 ][L] [0]</span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
<span style="font-family: "Courier New", monospace;"></span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">I d</span><span style="font-family: "Courier New", monospace;">o not insert null terms in the zero block.</span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;"><br>
</span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">In some cases, I use the function `</span><span style="font-size: 12pt;"><span style="font-family: "Courier New", monospace;">MatZeroRowsColumns` to handle "Dirichlet" </span><span style="font-family: "Courier New", monospace;">boundary
 conditions</span><span style="font-family: "Courier New", monospace;">. In this particular case, I apply Dirichlet </span><span style="font-family: "Lucida Console", Monaco, monospace;"><span style="font-family: "Courier New", monospace;">BCs only on dofs
 of "U". But I </span><span style="font-family: "Courier New", monospace;">get an error `</span><span style="font-family: "Courier New", monospace;">Matrix is missing diagonal entry in row X</span><span style="font-family: "Courier New", monospace;">` from
 the function `</span><span style="font-family: "Courier New", monospace;">MatZeroRowsColumns</span><span style="font-family: "Courier New", monospace;">`, where X is a row related to "L". </span></span></span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
<span style="font-family: "Courier New", monospace;"></span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;"><span style="font-family: "Courier New", monospace;">My first question is: is it normal that I get an error for a missing diagonal in the function </span><span style="font-family: "Courier New", monospace;">`MatZeroRowsColumns`</span><span style="font-family: "Courier New", monospace;">
 entry for a dof that is not involved in the list of dofs that I pass to </span></span><span style="font-family: "Courier New", monospace;">`MatZeroRowsColumns`?</span><br>
<span style="font-family: "Courier New", monospace;"></span><span style="font-size: 12pt; font-family: "Courier New", monospace;"><br>
</span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-size: 12pt; font-family: "Courier New", monospace;"><span style="font-family: "Courier New", monospace;">I then tried to make my code to detect that there are some missing diagonal entries, and add an explicit zero to them. My code which adds
 the missing diagonal entries looks like what follows. This is certainly not the best way to do that, as in my test case
</span><span style="font-family: "Courier New", monospace;">about</span><span style="font-family: "Courier New", monospace;"> ~80% of the total computation time is spent in this piece of code (more precisely in `</span><span style="font-family: "Courier New", monospace;">MatSetValue(D,
 k, k, 0., ADD_VALUES)`</span><span style="font-family: "Courier New", monospace;">).</span><br>
<span style="font-family: "Courier New", monospace;">So my second question is: what would be the most efficient way to detect the missing diagonal entries, and ad explicit zeros on the diagonal at these places?</span></span></p>
<span style="font-size: 16px; font-family: "Courier New", monospace;"></span>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</p>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">Many thanks,</span><br>
<span style="font-family: "Courier New", monospace;">Olivier</span></p>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</p>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    ...</span></p>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
</p>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY);</span></div>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
</p>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</p>
<p style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
</p>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    Mat D;</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    MatGetDiagonalBlock(A, &D);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    PetscBool missing;</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    MatMissingDiagonal(D, &missing, NULL);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    if (missing) {</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      IS </span><span style="font-family: "Courier New", monospace;">missingDiagEntryRows;</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      </span><span style="font-family: "Courier New", monospace;">MatFindZeroDiagonals(D, &</span><span style="font-family: "Courier New", monospace;">missingDiagEntryRows</span><span style="font-family: "Courier New", monospace;">)</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;"></span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      PetscInt size;</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      ISGetLocalSize(missingDiagEntryRows, &size);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      const PetscInt *ptr;</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      ISGetIndices(missingDiagEntryRows, &ptr);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace; font-size: 12pt;">      for (Index i = 0; i < size; ++i) {</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">        PetscInt k = ptr[i];</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">        MatSetValue(D, k, k, 0., ADD_VALUES);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      }</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      MatAssemblyBegin(D, MAT_FINAL_ASSEMBLY);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      MatAssemblyEnd(D, MAT_FINAL_ASSEMBLY);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<br>
</div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">      ISRestoreIndices(missingDiagEntryRows, &ptr);</span></div>
<div style="font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols; font-size: 16px;">
<span style="font-family: "Courier New", monospace;">    }</span></div>
<br>
<p></p>
<p><br>
</p>
<div id="Signature">
<div id="divtagdefaultwrapper" dir="ltr" style="font-size: 12pt; color: rgb(0, 0, 0); font-family: Calibri, Helvetica, sans-serif, EmojiFont, "Apple Color Emoji", "Segoe UI Emoji", NotoColorEmoji, "Segoe UI Symbol", "Android Emoji", EmojiSymbols;">
<p><span style="font-size:12pt"></span></p>
_________________________________________<br>
<table width="450" style="color:rgb(33,33,33); font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif,serif,EmojiFont; font-size:12px">
<tbody>
<tr>
<td><span style="font-size:1.1em; color:rgb(212,0,0)"><b><span style="color:rgb(0,111,201)">Olivier Jamond</span></b></span></td>
</tr>
<tr>
<td style="color:rgb(0,0,1)">
<div valign="middle"><b>Research Engineer</b> <br>
French Atomic Energy and Alternative Energies Commission<br>
DES/ISAS/DM2S/SEMT/DYN<br>
91191 Gif sur Yvette, Cedex, France</div>
</td>
</tr>
<tr>
<td><span style="color:rgb(212,0,0)"><span style="color:rgb(0,111,201)">Email</span><span style="color:rgb(0,111,201)">:</span>
<span style="color:rgb(0,0,0)">olivier.jamond</span></span>@cea.fr <span style="color:rgb(212,0,0)"><span style="color:rgb(0,111,201)">Phone</span><span style="color:rgb(0,111,201)">:</span> </span>+336.78.18.18.25</td>
</tr>
</tbody>
</table>
<p><span style="font-size:12pt"><br>
</span></p>
</div>
</div>
</div>
</body>
</html>