<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">The matrix is rectangular. What do you need from it? Just its action? Or you need to know the entries to compute Matrix-matrix operations?<div class="">If you just need the action, have you considered using a MATSHELL?<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Aug 13, 2020, at 8:16 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com" class="">knepley@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div dir="ltr" class="">On Thu, Aug 13, 2020 at 1:54 PM Sajid Ali <<a href="mailto:sajidsyed2021@u.northwestern.edu" class="">sajidsyed2021@u.northwestern.edu</a>> wrote:<br class=""></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" class=""><div class=""><div class="">Hi PETSc-developers, <br class=""><br class=""></div>When assembling a matrix, what would the relative performance of the following be :<br class="">[a] 
loop over the rows owned by the mpi-rank

twice, first to compute the values and set preallocation for this mpi-rank and then again to fill in the values (as recommended in the manual)<br class=""></div>[b] loop over the rows once, preallocate and set the values for each row.<br clear="all" class=""><div class=""><div class=""><div class=""><br class="">I'm refactoring an application that follows approach [a] but computes the elements of the matrix twice (once to fill in the nnz arrays and once to set the values) and I want to know if computing, preallocating and setting the elements by row instead would be better (so as to not compute the matrix entries twice which involves calls to boost-geometry). <br class=""></div></div></div></div></blockquote><div class=""><br class=""></div><div class="">I am not sure what you mean by [b]. I do not believe the obvious interpretation is possible in PETSc. We allocate the</div><div class="">matrix once, not row-by-row, so you could not preallocate just a few rows.</div><div class=""><br class=""></div><div class="">However, why not have a flag so that on the first pass you do not compute entries, just the indices?</div><div class=""><br class=""></div><div class="">  Thanks,</div><div class=""><br class=""></div><div class="">     Matt</div><div class=""> </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" class=""><div class=""><div class=""><div class=""></div><div class="">I'm attaching a plot that  shows 
(Left)

the number of non-zeros per row for a typical matrix used in this application and (Right) the histogram of the number of non zeros per row, should this be useful. Note that this matrix has global dimensions [12800 rows, 65586 columns].<br class=""><br class=""></div><div class="">PS : 
This matrix is used for a TAO optimization problem and generating the matrix takes between ~10 and ~25% of the time (longer on a smaller number of nodes).<br class=""></div><div class=""><br class=""><div class=""><span id="cid:ii_kdt3858t0"><image.png></span><br class=""><br class=""></div></div><div class="">Thank You, <br class=""></div><div class=""><div dir="ltr" class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div style="font-size:12.8px" class="">Sajid Ali | PhD Candidate<br class=""></div><div style="font-size:12.8px" class="">Applied Physics<br class=""></div><div style="font-size:12.8px" class="">Northwestern University</div><div style="font-size:12.8px" class=""><a href="http://s-sajid-ali.github.io/" target="_blank" class="">s-sajid-ali.github.io</a></div></div></div></div></div></div></div></div></div></div></div>
</blockquote></div><br clear="all" class=""><div class=""><br class=""></div>-- <br class=""><div dir="ltr" class="gmail_signature"><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class=""><div dir="ltr" class=""><div class="">What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br class="">-- Norbert Wiener</div><div class=""><br class=""></div><div class=""><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank" class="">https://www.cse.buffalo.edu/~knepley/</a><br class=""></div></div></div></div></div></div></div></div>
</div></blockquote></div><br class=""></div></body></html>