<div dir="ltr">You can't change the size of the vector after it has been created. You can reuse the memory if you manage it separately (by calling VecCreateMPIWithArray()). Don't try to "trick" the Vec.<div>
<br></div><div style>I'm pretty sure your performance anxiety is premature. Just call VecDestroy() and create a new Vec for the next iteration.</div><div style><br></div><div style>Note: it's inappropriate to think of a Vec as a dynamic array that you're using to accumulate an unknown amount of data. The Vec is meant to be used for linear algebra (including collective semantics). If you're building something dynamically, build it with a dynamic data structure and then put into a Vec once the structure is built.</div>
<div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 16, 2013 at 8:01 AM, Weston Lowrie <span dir="ltr"><<a href="mailto:wlowrie@uw.edu" target="_blank">wlowrie@uw.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<font face="verdana,sans-serif">On a related note:  </font><div><font face="verdana,sans-serif">When using VecGetArray(), it uses the info from VecSetSizes(), which is set on Vec creation.  Can this be updated after the Vec has been used?</font><div>

<font face="verdana,sans-serif"><br></font></div><div><font face="verdana,sans-serif">My issue is that even if I know the proper local size that I want, when I call VecGetArray() it's going to use the local size determined on Vec creation.</font></div>

<div><font face="verdana,sans-serif"><br></font></div><div><font face="verdana,sans-serif">To avoid this problem I could use VecSetValues() for the range I am interested in, rather then using the pointer generated from VecGetArray()?</font></div>

<div><font face="verdana,sans-serif"><br></font></div><div><font face="verdana,sans-serif">Wes<br></font><div><div class="h5"><br><div class="gmail_quote">On Tue, Jan 15, 2013 at 5:31 PM, Weston Lowrie <span dir="ltr"><<a href="mailto:wlowrie@uw.edu" target="_blank">wlowrie@uw.edu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><font face="verdana, sans-serif">I don't think there is a inefficiency here.  It will be just one extra empty vector since all the other "real" ones are identical size.  Sounds like a good strategy to me.</font></div>


<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">I'm not quite at the stage where I can profile yet.  I will send if I can get it to a point where it might be significant.</font></div>

<div>
<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">Thanks for the help,</font></div><div><font face="verdana, sans-serif">Wes</font></div><font face="verdana,sans-serif"><div><font face="verdana,sans-serif"><br>


</font></div><br></font><br></div><div><div><div class="gmail_quote">On Tue, Jan 15, 2013 at 5:26 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr"><div>On Tue, Jan 15, 2013 at 4:21 PM, Weston Lowrie <span dir="ltr"><<a href="mailto:wlowrie@u.washington.edu" target="_blank">wlowrie@u.washington.edu</a>></span> wrote:<br></div><div class="gmail_extra">


<div class="gmail_quote"><div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><font face="verdana,sans-serif">That's interesting.  If I understand you correctly, I would create a vector of the size I want specifically for calculating the ownership range, then use that on the real vectors.  </font><span style="font-family:verdana,sans-serif">Sounds like that would work.</span><div>




<span style="font-family:verdana,sans-serif"><br></span></div><div><span style="font-family:verdana,sans-serif">In my case, with many vectors, it does not make sense to copy them to a resized vector every time I want them to grow leading to many creates and destroys.</span></div>



</blockquote><div><br></div></div><div>You can't dynamically resize vectors like that, and the global offsets change when you resize.</div><div><br></div><div>Please profile before jumping to the conclusion that there is some terrible inefficiency here. Unless all your loop does is create Vecs of different sizes, chances are that the VecCreate is insignificant. If you have a profile in which it's a big deal, please send the profile and explain what you are doing and why.</div>


<div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">Wes<br></font><div><div><div><font face="verdana,sans-serif"><br></font><br><div class="gmail_quote">On Tue, Jan 15, 2013 at 5:15 PM, Jed Brown <span dir="ltr"><<a href="mailto:jedbrown@mcs.anl.gov" target="_blank">jedbrown@mcs.anl.gov</a>></span> wrote:<br>




<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">VecGetOwnershipRange()<div><br></div><div>You can use VecCreateMPIWithArray() using your own array preallocated to be as long as you want. If you profile, you'll probably find this is not a meaningful optimization.</div>





</div><div><div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Jan 15, 2013 at 4:12 PM, Weston Lowrie <span dir="ltr"><<a href="mailto:wlowrie@uw.edu" target="_blank">wlowrie@uw.edu</a>></span> wrote:<br>




<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<font face="verdana,sans-serif">Hi,</font><div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">I have a problem where I want to grow the size of a Vec (or Mat) many times during program execution.  I think for efficiency purposes I would just want to allocate a maximum size, and then only use the portion that I need.  In the vector case, it is rather simple, just use the beginning of the vector, and add values to the end.</font></div>






<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">This leads to me to the problem of processor ownership ranges.  From a previous email I noticed one could use the PetscLayout object and keep adjusting it as the useful part of the vector grows.  Does this sound like a good approach?  </font></div>






<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">I noticed the PetscLayout is not available in Fortran bindings.  Any workarounds for this?  I suppose I can just manually calculate the processor ranges?</font></div>






<div><font face="verdana, sans-serif"><br></font></div><div><font face="verdana, sans-serif">Thanks for the help,</font></div><div><font face="verdana, sans-serif">Wes</font></div><div><font face="verdana, sans-serif"><br>






</font></div><div><font face="verdana, sans-serif"><br></font><div><font face="verdana,sans-serif"><br></font></div><div><font face="verdana,sans-serif"><br></font></div></div>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div></div><br></div></div>
</blockquote></div><br>
</div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div></div>