Alexander,<div>I'm curious about why do you need parallel C=A^T*B?</div><div>How large your matrices are?</div><div><br></div><div>In petsc-dev, we have MatTransposeMatMult() for mpiaij and mpiaij, but not mpiaij and mpidense.</div>
<div>We may add support of MatTransposeMatMult_MPIAIJ_MPIDense() if there is such need.</div><div><br></div><div>Hong</div><div><br><br><div class="gmail_quote">On Tue, Feb 7, 2012 at 1:18 PM, <a href="mailto:agrayver@gfz-potsdam.de">agrayver@gfz-potsdam.de</a> <span dir="ltr"><<a href="mailto:agrayver@gfz-potsdam.de">agrayver@gfz-potsdam.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hong,<br><br>Thanks for explanation. I will try this tomorrow. Good to have this stuff in the help now.<br><br>And sorry for misleading you initially.<br>
<br>Regards,<br>Alexander<div class="HOEnZb"><div class="h5"><br><br><div>----- Reply message -----<br>From: "Hong Zhang" <<a href="mailto:hzhang@mcs.anl.gov" target="_blank">hzhang@mcs.anl.gov</a>><br>To: "For users of the development version of PETSc" <<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>><br>
Subject: [petsc-dev] MatMatMult gives different results<br>Date: Tue, Feb 7, 2012 19:09<br><br></div><br>Alexander :<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#ffffff" text="#000000"><br>
    There is something I didn't get yet, I hope you could clarify it. <br>
    <br>
    So, when I use flag MAT_INITIAL_MATRIX in test program it works
    fine.<br></div></blockquote><div>Good to know :-)</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">
    If I put this flag in my original program I get dozens of exceptions
    like:<br>
    [42]PETSC ERROR: Argument out of range!<br>
    [42]PETSC ERROR: New nonzero at (1336,153341) caused a malloc!<br></div></blockquote><div>You cannot do </div><div> <span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatCreateMPIAIJ()</span></div>

<div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatTranspose(A,MAT_INITIAL_MATRIX,&AT);</span></div><div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px"><br>

</span></div><div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatCreateMPIAIJ() creates AT and preallocates approximate nonzeros, which does not match exactly the nonzeros in </span></div>

<div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatTranspose(A,MAT_INITIAL_MATRIX,&AT);</span></div><div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatTranspose(A,MAT_INITIAL_MATRIX,&AT) creates matrix AT and sets correct nonzero pattern and values in AT. </span></div>

<div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatTranspose() only takes in "</span><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MAT_INITIAL_MATRIX" - for a new AT,</span></div>

<div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">and "MAT_REUSE_MATRIX" when AT is created with </span><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatTranspose(A,MAT_INITIAL_MATRIX,&AT)</span></div>

<div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">and reuse for updating its values (not nonzero patten).</span></div><div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px"><br>

</span></div><div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">I'm updating petsc help menu on </span><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatTranspose(). Thanks for the report.</span></div>

<div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px"><br></span></div><div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">Hong</span></div>

<div><span style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px"><br></span></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div bgcolor="#ffffff" text="#000000">
    <br>
    I changed this flag to MAT_REUSE_MATRIX and exceptions disappeared,
    but result is incorrect again (same as for MAT_IGNORE_MATRIX)  <br>
    I tried test program with MAT_REUSE_MATRIX and it also gives
    different matrix product.<br>
    <br>
    Since there is no description of MatReuse structure for MatTranspose
    it's a bit confusing what to expect from it. <br><div><div>
    <br>
    <blockquote type="cite">
      <div class="gmail_quote">
        <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div bgcolor="#ffffff" text="#000000">
            <div>
              <blockquote type="cite">
                <div>
                  <div class="gmail_quote">
                    <div><br>
                    </div>
                    <div>Do you mean 'Cm = A'*B;'? </div>
                    <div>'Cm = A.'*B;' gives component-wise matrix
                      product, not matrix product.</div>
                  </div>
                </div>
              </blockquote>
              <br>
            </div>
            .' operator means non-Hermitian transpose. That is what I
            get with MatTranspose (in contrast with
            MatHermitianTranspose)<br>
            component-wise matrix product would be .*</div>
        </blockquote>
        <div>You are correct.</div>
        <div><br>
        </div>
        <div>Hong </div>
        <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div bgcolor="#ffffff" text="#000000">
            <div>
              <div><br>
                <br>
                <blockquote type="cite">
                  <div>
                    <div class="gmail_quote">
                      <div><br>
                      </div>
                      <div>Hong</div>
                      <div><br>
                      </div>
                      <div> </div>
                      <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                        <div bgcolor="#ffffff" text="#000000"> C =
                          PetscBinaryRead('C.dat','complex',true);<br>
                          <br>
                          Matrix C is different depending on number of
                          cores I use. <br>
                          My PETSc is:<br>
                          Using Petsc Development HG revision:
                          876c894d95f4fa6561d0a91310ca914592527960  HG
                          Date: Tue Jan 10 19:27:14 2012 +0100
                          <div>
                            <div><br>
                              <br>
                              On 06.02.2012 17:13, Hong Zhang wrote:
                              <blockquote type="cite">MatMatMult() in
                                petsc is not well-tested for complex -
                                could be buggy.
                                <div>Can you send us the matrices A and
                                  B in petsc binary format for
                                  investigation?</div>
                                <div><br>
                                </div>
                                <div>Hong<br>
                                  <br>
                                  <div class="gmail_quote">On Mon, Feb
                                    6, 2012 at 5:55 AM, Alexander
                                    Grayver <span dir="ltr"><<a href="mailto:agrayver@gfz-potsdam.de" target="_blank">agrayver@gfz-potsdam.de</a>></span>
                                    wrote:<br>
                                    <blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dear

                                      PETSc team,<br>
                                      <br>
                                      I try to use:<br>
                                      call
MatMatMult(A,B,MAT_INITIAL_MATRIX,PETSC_DEFAULT_DOUBLE_PRECISION,C,ierr);CHKERRQ(ierr)<br>
                                      <br>
                                      Where both A and B are
                                      rectangular, but A is sparse and B
                                      is dense. Both are double complex
                                      and distributed.<br>
                                      The product PETSc gives me
                                      contains some errors in some part
                                      of the matrix.<br>
                                      I output A, B and C then computed
                                      product in matlab.<br>
                                      <br>
                                      Attached you see figure plotted
                                      as:<br>
                                      imagesc(log10(abs(C-Cm)))<br>
                                      <br>
                                      Where Cm -- product computed in
                                      matlab.<br>
                                      <br>
                                      The pattern and amplitude vary
                                      depending on the number of cores I
                                      use. This picture is obtained for
                                      48 cores (I've tried 12, 64 cores
                                      as well).<br>
                                      <br>
                                      Where should I look for possible
                                      explanation?<span><font color="#888888"><br>
                                          <br>
                                          -- <br>
                                          Regards,<br>
                                          Alexander<br>
                                        </font></span></blockquote>
                                  </div>
                                  <br>
                                </div>
                              </blockquote>
                              <br>
                              <br>
                            </div>
                          </div>
                          <span><font color="#888888">
                              <pre cols="72">-- 
Regards,
Alexander</pre>
                            </font></span></div>
                      </blockquote>
                    </div>
                    <br>
                  </div>
                </blockquote>
                <br>
                <br>
              </div>
            </div>
            <span><font color="#888888">
                <pre cols="72">-- 
Regards,
Alexander</pre>
              </font></span></div>
        </blockquote>
      </div>
      <br>
    </blockquote>
    <br>
    <br>
    </div></div><span><font color="#888888"><pre cols="72">-- 
Regards,
Alexander</pre>
  </font></span></div>

</blockquote></div><br>

</div></div></blockquote></div><br></div>