<div dir="ltr">Oh, this is BAIJ. Sure.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, May 17, 2019 at 11:01 AM Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
  BAIJ and SBAIJ it is the number of block rows, so the row sizes divided by the bs. For AIJ the number of rows.<br>
<br>
> On May 17, 2019, at 9:55 AM, William Coirier <<a href="mailto:William.Coirier@kratosdefense.com" target="_blank">William.Coirier@kratosdefense.com</a>> wrote:<br>
> <br>
> Mark:<br>
> <br>
> Should the size of d_nnz and o_nnz be the number of rows accessed on this processor or the number of block rows?<br>
> ________________________________________<br>
> From: Smith, Barry F. [<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>]<br>
> Sent: Friday, May 17, 2019 9:15 AM<br>
> To: Mark Adams<br>
> Cc: William Coirier; <a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>; Michael Robinson; Andrew Holm<br>
> Subject: Re: [petsc-users] MatCreateBAIJ, SNES, Preallocation...<br>
> <br>
>  I don't understand. For BAIJ and SBAIJ it is the number of block nonzeros in the two parts of the matrix. It is not the number of nonzeros per row.<br>
> For Mat[MPI]AIJSetPreallocation() it is the number of nonzeros (even if a block size has been set) because for AIJ matrices the block size does not affect the storage of the matrix and it is merely informative.<br>
> <br>
>   For MatXAIJSetPreallocation() however (which can be used with AIJ, BAIJ, and SBAIJ) the nonzero blocks are for all three matrix formats. MatXAIJSetPreallocation is a convenience function that allows the user to avoid needing to allocate three sets of arrays and fill them up separately for each of the AIJ, BAIJ, and SBAIJ formats.<br>
> <br>
>   Is everything now clear, if not please feel free to ask more specific questions to clarify.<br>
> <br>
>  Barry<br>
> <br>
>> On May 17, 2019, at 6:16 AM, Mark Adams <<a href="mailto:mfadams@lbl.gov" target="_blank">mfadams@lbl.gov</a>> wrote:<br>
>> <br>
>> <br>
>> <br>
>> On Thu, May 16, 2019 at 6:28 PM William Coirier via petsc-users <<a href="mailto:petsc-users@mcs.anl.gov" target="_blank">petsc-users@mcs.anl.gov</a>> wrote:<br>
>> Ok, got it. My misinterpretation was how to fill the d_nnz and o_nnz arrays.<br>
>> <br>
>> Thank you for your help!<br>
>> <br>
>> Might I make a suggestion related to the documentation? Perhaps I have not fully read the page on the MatMPIBAIJSetPreallocation so you can simply disregard and I'm ok with that! The documentation has for the d_nnz:<br>
>> <br>
>> d_nnz   - array containing the number of block nonzeros in the various block rows of the in diagonal portion of the local (possibly different for each block row) or NULL. If you plan to factor the matrix you must leave room for the diagonal entry and set it even if it is zero.<br>
>> <br>
>> Am I correct in that this array should be of size numRows, where numRows is found from  calling MatGetOwnershipRange(J,&iLow,&iHigh) so numRows=iHigh-iLow.<br>
>> <br>
>> yes, this interface does not change if you set the block size or not. It is at the equation level.<br>
>> <br>
>> <br>
>> I think my error was allocating this only to be numRows/bs since I thought it's a block size thing.<br>
>> <br>
>> <br>
>> This documentation looks wrong to me, and at least confusing. "number of block nonzeros" reads wrong to me. We now have:<br>
>> <br>
>> d_nz- number of block nonzeros per block row in diagonal portion of local submatrix (same for all local rows)<br>
>> d_nnz- array containing the number of block nonzeros in the various block rows of the in diagonal portion of the local (possibly different for each block row) or NULL. If you plan to factor the matrix you must leave room for the diagonal entry and set it even if it is zero.<br>
>> o_nz- number of block nonzeros per block row in the off-diagonal portion of local submatrix (same for all local rows).<br>
>> o_nnz- array containing the number of nonzeros in the various block rows of the off-diagonal portion of the local submatrix (possibly different for each block row) or NULL.<br>
>> <br>
>> I can suggest:<br>
>> <br>
>> d_nz- number of nonzeros per row in diagonal portion of local submatrix (same for all local rows)<br>
>> d_nnz- array containing the number of nonzeros in each row of the diagonal portion of the local matrix (the same for each row within a block) or NULL. You must have a diagonal entry and set it even if it is zero if you plan to factor the matrix.<br>
>> o_nz- number of nonzeros per row in the off-diagonal portion of local submatrix (same for all local rows).<br>
>> o_nnz- array containing the number of nonzeros in each row of the off-diagonal portion of the local submatrix (the same for each row within a block) or NULL.<br>
>> <br>
>> I can change this if this is acceptable.<br>
> <br>
<br>
</blockquote></div>