<div dir="ltr"><div>Hi,</div><div> </div><div>I am using Petsc to solve a linear system contain variable size of nnz for each row.</div><div>The maximal nnz in some cases could be several hundreds times of minimal nnz so I was trying to use following,</div>

<div> </div><div>Mat A;</div><div>int N;</div><div>PetscInt * d_nnz;</div><div><div><a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscMalloc.html#PetscMalloc" target="_blank"><font color="#0066cc">PetscMalloc</font></a>((N)*<font color="#4169e1">sizeof</font>(<a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscInt.html#PetscInt" target="_blank"><font color="#0066cc">PetscInt</font></a>), &d_nnz); </div>

</div><div> </div><div>*** assigning d_nnz ***</div><div> </div><div><a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreate.html#MatCreate" target="_blank"><font color="#0066cc">MatCreate</font></a>(<a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PETSC_COMM_WORLD.html#PETSC_COMM_WORLD" target="_blank"><font color="#0066cc">PETSC_COMM_WORLD</font></a>, &A);<br>

<a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetSizes.html#MatSetSizes" target="_blank"><font color="#0066cc">MatSetSizes</font></a>(A, <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE" target="_blank"><font color="#0066cc">PETSC_DECIDE</font></a>, <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PETSC_DECIDE.html#PETSC_DECIDE" target="_blank"><font color="#0066cc">PETSC_DECIDE</font></a>, N, N);<br>

<a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetFromOptions.html#MatSetFromOptions" target="_blank"><font color="#0066cc">MatSetFromOptions</font></a>(A);<br><a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html#MatMPIAIJSetPreallocation" target="_blank"><font color="#0066cc">MatSeqAIJSetPreallocation</font></a>(A, 0, d_nnz);<br>

</div><div><a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Sys/PetscFree.html#PetscFree" target="_blank"><font color="#0066cc">PetscFree</font></a>(d_nnz);<br></div><div> </div><div>However, by doing this I noticed that it became really slow during SetValues stage and the reason is that it was allocating memory.</div>

<div> </div><div><font color="#000000" size="3" face="Times New Roman">

</font><p style="margin:0in 0in 0pt"><font size="3"><font color="#000000"><font face="Calibri">[0]PETSC ERROR: MatSetValues_SeqAIJ() line 353 in
src/mat/impls/aij/seq/aij.c</font></font></font></p><font color="#000000" size="3" face="Times New Roman">

</font><p style="margin:0in 0in 0pt"><font size="3"><font color="#000000"><font face="Calibri">[0]PETSC ERROR: MatSetValues() line 1106 in
src/mat/interface/matrix.c</font></font></font></p><font color="#000000" size="3" face="Times New Roman">

</font><p style="margin:0in 0in 0pt"><font size="3"><font color="#000000"><font face="Calibri">[0]PETSC ERROR: --------------------- Error Message
------------------------------------</font></font></font></p><font color="#000000" size="3" face="Times New Roman">

</font><p style="margin:0in 0in 0pt"><font size="3"><font color="#000000"><font face="Calibri">sumintoj: 7980</font></font></font></p><font color="#000000" size="3" face="Times New Roman">

</font><p style="margin:0in 0in 0pt"><font size="3"><font color="#000000"><font face="Calibri">[0]PETSC ERROR: Argument out of range!</font></font></font></p><font color="#000000" size="3" face="Times New Roman">

</font><p style="margin:0in 0in 0pt"><font size="3"><font color="#000000"><font face="Calibri">[0]PETSC ERROR: New nonzero at (79800,79800) caused a
malloc!</font></font></font></p><font color="#000000" size="3" face="Times New Roman">

</font></div><div> </div><div> </div><div>The problem went away after I did</div><div>PetscInt d_nz = max(d_nnz);</div><div><a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html#MatMPIAIJSetPreallocation" target="_blank"><font color="#0066cc">MatSeqAIJSetPreallocation</font></a>(A, d_nz, d_nnz);<br>

 </div><div>But like I mentioned the size of nnz varied and it can be very different from row to row and it ran out memory pretty quick if the problem is large.</div><div> </div><div>I have checked my d_nnz array and it is correct and  I wonder someone can point out anything I missed.</div>
<div> </div><div>Thanks for the help,</div><div> </div><div>Kan</div>
<div><br>-- <br></div><p><strong>Cheers</strong></p>
</div>