<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div dir="ltr">
<div dir="ltr">
<div dir="ltr"><br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, Jan 22, 2019 at 4:08 PM Jed Brown <<a href="mailto:jed@jedbrown.org">jed@jedbrown.org</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">
It is not supported at this time.  What does your use case look like?<br>
Do roots have degree greater than 1?<br>
</blockquote>
<div>Yes. Imagine a vecscatter x[0]->y[0], x[1]->y[0], x[1]->y[1],x[2]->y[1]. I build an SF for SCATTER_FORWARD. Now I wan to do SCATTER_REVERSE with ADD_VALUES.</div>
<div>To solve this problem without creating another SF and without breaking current SF API, I propose to add PetscSFBcastAndOp(sf, unit, rootdata, leafdata, op)</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">
<br>
"Zhang, Junchao via petsc-dev" <<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>> writes:<br>
<br>
> On Tue, Jan 22, 2019 at 1:35 PM Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a><mailto:<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>>> wrote:<br>
> On Tue, Jan 22, 2019 at 2:23 PM Zhang, Junchao via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a><mailto:<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>>> wrote:<br>
> I want to add root values to leaves, and keep root unchanged. PetscSFBcast came to my mind, but unfortunately it only broadcasts roots and does not have an MPI_Op argument like PetscSFReduce for me to choose from INSERT_VALUES, ADD_VALUES, etc.<br>
> Any tips? Thanks.<br>
><br>
> PS: I met this problem when I tried to implement VecScatter in SF.  In VecScatter, multiple entries of vec x can be scattered to the same entry of vec y, and one entry of x can also be scattered to multiple entries of y.  I want to use one SF for all combinations
 of SCATTER_FORWARD/BACKWARD, INSERT/ADD_VALUES. It seems impossible with current SF interface.<br>
><br>
> I think you might want this: <a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PetscSF/PetscSFFetchAndOpBegin.html" rel="noreferrer" target="_blank">
https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/PetscSF/PetscSFFetchAndOpBegin.html</a><br>
><br>
> I read it as: Leaves are accumulated to root (root is changed), and leaves get a snapshot of the root before each atomic update. It is not what I want.<br>
><br>
>   Thanks,<br>
><br>
>     Matt<br>
><br>
> --Junchao Zhang<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/~knepley/</a><<a href="http://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">http://www.cse.buffalo.edu/~knepley/</a>><br>
</blockquote>
</div>
</div>
</div>
</body>
</html>