<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>