<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 12, 2014 at 9:22 AM, Mari Pecha <span dir="ltr"><<a href="mailto:pecha.mari@gmail.com" target="_blank">pecha.mari@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
Okay. I understand my explanation it sees to be chaotic. I try to
describe my problem on simple simple.<br>
<br>
Process with rank zero loads grayscale image from OpenCV library
then I'd like to distribute values of pixels to grid (DMDA). And I
can't find any solution for this problem.<br></div></blockquote><div><br></div><div>The right thing to do is to create a custom scatter for this case. However, you can do this in two parts. First,</div><div>read it in on proc 0, and then scatter to all procs using</div>
<div><br></div><div> <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecScatterCreateToZero.html">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Vec/VecScatterCreateToZero.html</a></div>
<div><br></div><div>where you SCATTER_BACKWARD. Then use</div><div><br></div><div> <a href="http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMDANaturalToGlobalBegin.html">http://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMDANaturalToGlobalBegin.html</a></div>
<div><br></div><div>to permute from the natural ordering that you read in to the PETSc ordering. You could do this in one</div><div>step if you allow each process to read its piece of the vector independently.</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-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
<br>
Thank you<br>
Mari<br>
<br>
<div>On 12.8.2014 16:12, Matthew Knepley
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div class="gmail_extra">
<div class="gmail_quote">On Tue, Aug 12, 2014 at 8:53 AM, Mari
Pecha <span dir="ltr"><<a href="mailto:pecha.mari@gmail.com" target="_blank">pecha.mari@gmail.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Good
morning,<br>
<br>
I'm Mari and I'm beginner PETSc user and I'd like to ask
about tough problem, especially for me.<br>
I solve problem of data-set distribution, which are saved
only on zero-rank process, to DMDA global vector. It means
that every process stores a appropriate subset of
data-set. I used DMDAGlobalToNaturalAllCreate and
DMDANaturalAllToGlobalCreate function, and then
VecScatterBegin and VecScatterEnd functions ... see please
code below<br>
</blockquote>
<div><br>
</div>
<div>I have no idea what you really want to do. How about
describing your problem with</div>
<div>2 procs and 3 values per proc.</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
...<br>
<br>
ierr = DMDAGlobalToNaturalAllCreate( da,
&tolocalall ); CHKERRQ(ierr);<br>
ierr = DMDANaturalAllToGlobalCreate( da,
&fromlocalall ); CHKERRQ(ierr);<br>
<br>
if( rank == 0 )<br>
{<br>
<br>
ierr = VecCreateSeq( PETSC_COMM_SELF, SIZE,
&localall );<br>
<br>
ierr = VecScatterBegin( tolocalall, x, localall,
ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr);<br>
ierr = VecScatterEnd( tolocalall, x, localall,
ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr);<br>
</blockquote>
<div><br>
</div>
<div>This will not work since you have a collective call
(VecScatterBegin) inside if(!rank)</div>
<div><br>
</div>
<div> Matt</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
ierr = VecGetArray( x, &vlocal );
CHKERRQ(ierr);<br>
<br>
PetscInt s;<br>
VecGetSize( localall, &s );<br>
<br>
ierr = VecView( localall, PETSC_VIEWER_STDOUT_SELF
); CHKERRQ( ierr );<br>
<br>
//create data on zero rank process<br>
for ( int i = 0; i < s; i++) *vlocal++ = i;<br>
<br>
ierr = VecRestoreArray( localall, &vlocal );
CHKERRQ(ierr);<br>
<br>
ierr = VecScatterBegin(fromlocalall, localall, x,
ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr);<br>
ierr = VecScatterEnd( fromlocalall, localall, x,
ADD_VALUES, SCATTER_FORWARD_LOCAL ); CHKERRQ(ierr);<br>
}<br>
<br>
....<br>
<br>
But the piece of code gets and distributes only
vector-values belong to zero-rank process. So, I haven't
any idea how can I solve my problem only with PETSc
functions. I'd like to get all values from global vector
to zero-rank process and put back all data-set only from
zero-rank to global vector. Can you help me, please?<br>
<br>
Thanks for your response<span><font color="#888888"><br>
Mari<br>
</font></span></blockquote>
</div>
<br>
<br clear="all"><span class=""><font color="#888888">
<div><br>
</div>
-- <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
</font></span></div>
</div>
</blockquote>
<br>
</div>
</blockquote></div><br><br clear="all"><div><br></div>-- <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
</div></div>