<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, 21 May 2020 at 08:55, Yang Bo (Asst Prof) <<a href="mailto:yang.bo@ntu.edu.sg">yang.bo@ntu.edu.sg</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">Hi Everyone,<br>
<br>
I have a question about adding values to the matrix. The code I have is<br>
<br>
<br>
for (int i=0;i<row.size();i++) {<br>
MatSetValue(A,row[i],column[i],h[i],INSERT_VALUES);<br>
}<br>
<br>
where row.size() is a large number. It seems the running time of this procedure does not scale linearly with row.size(). As row.size() gets bigger, the time it takes increases exponentially. </blockquote><div><br></div><div>It sounds like your matrix is not properly preallocated. Could this be the case?</div><div><br></div><div>You can confirm / deny this by running with the command line options (shown in bold)<br></div><div><br></div><div>./your-exec <your-options><b> -info | grep malloc</b><br></div><div><br></div><div>If all is good you will see something like this</div><div><br></div><div>[0] MatAssemblyEnd_SeqAIJ(): Number of mallocs during MatSetValues() is 0<br>    <b>total number of mallocs used during MatSetValues calls=0</b></div><div><br></div><div>If the reported number of mallocs in your code is not 0, please read these pages:</div><div><br></div></div><div class="gmail_quote"><a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSeqAIJSetPreallocation.html">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSeqAIJSetPreallocation.html</a><div><br></div><div><a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatMPIAIJSetPreallocation.html</a></div><div><br></div><div><br></div><div>You may like to use the generic preallocator (depending on the type of you Mat).</div><div><br></div><div><a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatXAIJSetPreallocation.html">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatXAIJSetPreallocation.html</a></div><div><br></div><br><div>Thanks</div><div>Dave<br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Am I doing something wrong and can I do better than that?<br>
<br>
Thanks and stay healthy!<br>
<br>
Cheers,<br>
<br>
Yang Bo<br>
________________________________<br>
<br>
CONFIDENTIALITY: This email is intended solely for the person(s) named and may be confidential and/or privileged. If you are not the intended recipient, please delete it, notify us and do not copy, use, or disclose its contents.<br>
Towards a sustainable earth: Print only when necessary. Thank you.<br>
</blockquote></div></div>