<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Apr 20, 2018 at 4:57 PM, Jed Brown <span dir="ltr"><<a href="mailto:jed@jedbrown.org" target="_blank">jed@jedbrown.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Junchao, If you need to access off-process values and put them into a<br>
new vector, you should use VecScatter.<br></blockquote><div><br></div><div>Does no one read my replies. I said that 3 mails ago.</div><div><br></div><div>  Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
"Smith, Barry F." <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> writes:<br>
<br>
>   Setting large contiguous blocks of values is not a common use case. In finite elements the values are not contiguous.<br>
><br>
>> On Apr 20, 2018, at 3:45 PM, Zhang, Junchao <<a href="mailto:jczhang@mcs.anl.gov">jczhang@mcs.anl.gov</a>> wrote:<br>
>> <br>
>> I agree the extra overhead can be small, but users are forced to write a loop where one single line gives the best.<br>
>> <br>
>> --Junchao Zhang<br>
>> <br>
>> On Fri, Apr 20, 2018 at 3:36 PM, Smith, Barry F. <<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>> wrote:<br>
>> <br>
>>    When setting values into matrices and vectors we consider the "extra" overhead of needing to pass in the indices for all the values (instead of being able to set an arbitrary block of values without using indices for each one) to be a minimal overhead that we can live with. <br>
>> <br>
>>    Barry<br>
>> <br>
>> <br>
>> > On Apr 20, 2018, at 3:33 PM, Junchao Zhang <<a href="mailto:jczhang@mcs.anl.gov">jczhang@mcs.anl.gov</a>> wrote:<br>
>> > <br>
>> > <br>
>> > On Fri, Apr 20, 2018 at 3:18 PM, Matthew Knepley <<a href="mailto:knepley@gmail.com">knepley@gmail.com</a>> wrote:<br>
>> > On Fri, Apr 20, 2018 at 4:10 PM, Junchao Zhang <<a href="mailto:jczhang@mcs.anl.gov">jczhang@mcs.anl.gov</a>> wrote:<br>
>> > To pad a vector, i.e., copy a vector to a new one, I have to call VecSetValue(newb,1,&idx,...) for each element. But to be efficient, what I really needs is to set a block of values in one call. It looks PETSc does not have a routine for that(?). I looked at VecSetValuesBlocked, but it looks it is not for that purpose.<br>
>> > Should we have something like VecSetValuesBlock(Vec v,PetscInt i,PetscInt cnt,PetscScalar *value, InsertMode mode) to set cnt values starting at index i?<br>
>> > <br>
>> > Use VecGetArray().<br>
>> > Did you mean VecGetArray b and newb, do a memcpy from b to new and then restore them? If yes, it does not work since some of the values I want to set might be remote.<br>
>> > E.g, I have 4 processors. b's size is 181 and is distributed as 46, 45,45,45, newb is distributed as 48,45,45,45 to match a matrix of block size 3.<br>
>> >  <br>
>> > <br>
>> >   Matt<br>
>> >  <br>
>> > --Junchao Zhang<br>
>> > <br>
>> > <br>
>> > <br>
>> > -- <br>
>> > 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<br>
>> > <br>
>> > <a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~<wbr>knepley/</a><br>
>> > <br>
>> <br>
>> <br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><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.caam.rice.edu/~mk51/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div>
</div></div>