<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Aug 12, 2014 at 11:30 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000">
    So, I've tried options with VecScatterCreateToZero but I got error
    message <br>
    <br>
    [0]PETSC ERROR: Nonconforming object sizes<br>
    [0]PETSC ERROR: Vector wrong size 10 for scatter 2 (scatter reverse
    and vector to != ctx from size)<br>
    <br>
    I'm not sure what is wrong. Could you help me? My code I've add to
    attachements.<br></div></blockquote><div><br></div><div>Your vector arguments for the scatter are reversed. You are scattering from the local vector with pixel data</div><div>to the global vector.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000">
    Thank you for your time<br>
    Mari<br>
    <br>
    P.S: I use PETSc 3.5 and SCATTER_BACKWARD is changed to
    SCATTER_REVERSE.<br></div></blockquote><div><br></div><div>Yes, that is right.</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">
<div bgcolor="#FFFFFF" text="#000000">
    <div>On 12.8.2014 17:53, 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 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" target="_blank">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" target="_blank">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="HOEnZb"><font color="#888888">
                      <span><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></font></span></div><span class="HOEnZb"><font color="#888888">
                  </font></span></div><span class="HOEnZb"><font color="#888888">
                </font></span></blockquote><span class="HOEnZb"><font color="#888888">
                <br>
              </font></span></div><span class="HOEnZb"><font color="#888888">
            </font></span></blockquote><span class="HOEnZb"><font color="#888888">
          </font></span></div><span class="HOEnZb"><font color="#888888">
          <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
        </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>