<div dir="ltr">I don't think you understand COO. Look at the example <a href="https://petsc.org/release/src/mat/tutorials/ex18.c.html">https://petsc.org/release/src/mat/tutorials/ex18.c.html</a><br><div><br></div><div>"MatSetPreallocationCOO" is not a great name because you are giving it the (i,j) indices not just the sizes for memory allocation.</div><div>A MatSetPreallocationCOO that is consistent with MatSeqAIJSetPreallocation would just take one integer: "ncoo" .</div><div>MatSetIndicesCOO might be a better name.<br></div><div><br></div><div>Mark</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 5, 2022 at 8:16 AM Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</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"><div dir="ltr"><div dir="ltr">On Mon, Dec 5, 2022 at 6:48 AM 김성익 <<a href="mailto:ksi2443@gmail.com" target="_blank">ksi2443@gmail.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">Hello,</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">In matrix preallocation procedure, I tried 2
options to preallocate global matrix.<br>
The first is ‘MatSeqAIJSetPreallocation’ and the second is ‘MatSetPreallocationCOO’.</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">When I adopt the first option “MatSeqAIJSetPreallocation(Mat,
nz, nnz)”, I just put overestimated nz for getting enough memory space and also
getting nice performance.</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">However, It couldn’t run without “MatSetOption(Mat,
MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);” And also, there are no speed up compare
with no preallocation case.</span></p></div></blockquote><div>1. This means your nz was not big enough.</div><div><br></div><div>2. I suggest computing the correct length for every row. The easiest way to do this is to use</div><div><br></div><div>  <a href="https://petsc.org/main/docs/manualpages/Mat/MatPreallocatorPreallocate/" target="_blank">https://petsc.org/main/docs/manualpages/Mat/MatPreallocatorPreallocate/</a></div><div><br></div><div>There re instructions on that page. This is how I do it in the library now.</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"><div dir="ltr"><p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span style="font-size:10pt"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">When in the second option “MatSetPreallocationCOO(Mat,ncoo,coo_i,coo_j)”,
I put correct size parameters(ncoo, coo_i, coo_j). However, It couldn’t run without
“MatSetOption(Mat, MAT_NEW_NONZERO_ALLOCATION_ERR, PETSC_FALSE);” Regarding
this problem, I suspect that it is a problem caused by mapping a small-sized
local matrix with a different order from the order of coo_i and coo_j to the
global matrix by using “matsetvalue”. And also, there are no speed up compare with
no preallocation case.</span></p></div></blockquote><div><br></div><div>If you cannot run without that flag, it means that you are inserting different nonzeros then you did with MatSetPreallocationCOO(). You need to tell</div><div>it _exactly_ the same nonzeros as you input with MatSetValues().</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">

<p style="margin:0cm 0cm 8pt 38pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">1.<span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:7pt;line-height:normal;font-family:"Times New Roman"">    
</span></span><span lang="EN-US">How can I do proper preallocation
procedure? </span></p>

<p style="margin:0cm 0cm 8pt 38pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">2.<span style="font-variant-numeric:normal;font-variant-east-asian:normal;font-stretch:normal;font-size:7pt;line-height:normal;font-family:"Times New Roman"">    
</span></span><span lang="EN-US">Why in my cases there are no speed
up?</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US"> </span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">Thanks,</span></p>

<p class="MsoNormal" style="margin:0cm 0cm 8pt;text-align:justify;line-height:107%;font-size:10pt;font-family:"\00b9d1\00c740  \00ace0\00b515""><span lang="EN-US">Hyung Kim</span></p></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>
</blockquote></div>