<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#ffffff" text="#000000">
    On 31/03/2011 19:06, Matthew Knepley wrote:
    <blockquote
      cite="mid:AANLkTi=_q_gmDz2W_g3nNdLjQhDOV2cziofarGG5KrEV@mail.gmail.com"
      type="cite">
      <meta http-equiv="Context-Type" content="text/html;
        charset=ISO-8859-1">
      <div>On Thu, Mar 31, 2011 at 10:10 AM, gouarin <span>&lt;<a
            moz-do-not-send="true"
            href="mailto:loic.gouarin@math.u-psud.fr">loic.gouarin@math.u-psud.fr</a>&gt;</span>
        wrote:<br>
        <div>
          <blockquote>
            Thanks for the reply.
            <div>
              <div><br>
                <br>
                On <a moz-do-not-send="true"
                  href="tel:31%2F03%2F2011%2016">31/03/2011 16</a>:48,
                Hong Zhang wrote:<br>
                <blockquote>
                  Loic,<br>
                  <br>
                  <blockquote>
                    I want to do the same for MATMPI. This is what I do:<br>
                    <br>
                    MatGetLocalMat(A,MAT_INITIAL_MATRIX,&amp;Aloc);<br>
                    MatGetRowIJ(Aloc, 1, PETSC_FALSE,
                    PETSC_FALSE,&amp;(Acsr.n),&amp;(Acsr.ia),<br>
                    &amp;(Acsr.ja),&amp;done);<br>
                    MatGetArray(Aloc,&amp;(Acsr.a));<br>
                    <br>
                    Now, I need to know on what process the non local
                    points are.<br>
                  </blockquote>
                  Each process get its own local submatrix. See<br>
                  <a moz-do-not-send="true"
href="http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateMPIAIJ.html">http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/docs/manualpages/Mat/MatCreateMPIAIJ.html</a><br>
                  on data structure of MPIAIJ format. Applying your
                  statements above to<br>
                  the example listed on the page (a 8x8 matrix), Proc0
                  will get<br>
                  Aloc=A(0:2,:), ..., Porc2 gets Aloc=A(6:7,:).<br>
                  <blockquote>
                    Is there a petsc function that gives this partition
                    ?<br>
                  </blockquote>
                  MatGetOwnershipRange()<br>
                </blockquote>
              </div>
            </div>
            I use this function to know the local points index. In the
            same way, with this function I know the non local index.<br>
            <br>
            But this function doesn't give the process. I give you an
            example. I have this matrix:<br>
            <br>
            1 0 | 0 1<br>
            1 2 | 1 0<br>
            -----------<br>
            0 0 | 1 0<br>
            0 2 | 0 1<br>
            <br>
            I want this kind of format<br>
            <br>
            for proc 0<br>
            a = {1,1,1,2,1}<br>
            ia = {0,2,5}<br>
            ja = {0,3,0,1,2}<br>
            rank = {0,0,1,1}<br>
            <br>
            for proc 1<br>
            a = {1,2,1}<br>
            ia = {0,1,3}<br>
            ja = {0,2,1}<br>
            rank = {1,1,0}<br>
            <br>
            rank give me the process for each non zero column. Local
            rows should have numbers 1,...N and offdiagonal entries with
            j&gt;N.<br>
          </blockquote>
          <div><br>
          </div>
          <div>The ownership range is the row partition. However, MPIAIJ
            matrices are not stored as you indicate above.</div>
          <div><br>
          </div>
          <div>Different storage formats make the process you describe
            fragile. WHy do you need the CSR form of the matrix? If you
            really</div>
          <div>do, use MatGetSubMatrix() to get a &nbsp;SEQAIJ matrix on each
            process and pull out the values.</div>
          <div><br>
          </div>
        </div>
      </div>
    </blockquote>
    I want to use this format because I try to create a new multigrid PC
    with this method:<br>
    <br>
    <a class="moz-txt-link-freetext" href="http://homepages.ulb.ac.be/~ynotay/AGMG/userguide/index.html">http://homepages.ulb.ac.be/~ynotay/AGMG/userguide/index.html</a><br>
    <br>
    I don't understand why it's not possible to have the process
    partition. When you create a MPIAIJ matrix and you use a KSP to
    solve the system, you know what values to exchange. No? Where is
    this information ?<br>
    <br>
    I can also use MatGetOwnershipRange() and MPI_Allgather to have this
    information.<br>
    <br>
    Loic<br>
    <br>
    <br>
    <br>
    <br>
    <blockquote
      cite="mid:AANLkTi=_q_gmDz2W_g3nNdLjQhDOV2cziofarGG5KrEV@mail.gmail.com"
      type="cite">
      <div>
        <div>
          <div>&nbsp;&nbsp; Matt</div>
          <div>&nbsp;</div>
          <blockquote>
            I suppose that I have no information about the structure of
            MPIAIJ.<br>
            <br>
            Loic<br>
            <br>
          </blockquote>
        </div>
        <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>
      </div>
    </blockquote>
    <br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Loic Gouarin
Laboratoire de Math&eacute;matiques 
Universit&eacute; Paris-Sud  
B&acirc;timent 425 
91405 Orsay Cedex
France 
Tel: (+33) 1 69 15 60 14
Fax: (+33) 1 69 15 67 18</pre>
  </body>
</html>