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<br><br><div id="htc_header" style="">----- Reply message -----<br>From: "Hong Zhang" <hzhang@mcs.anl.gov><br>To: "For users of the development version of PETSc" <petsc-dev@mcs.anl.gov><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 class="Apple-style-span" style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatCreateMPIAIJ()</span></div>
<div><span class="Apple-style-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 class="Apple-style-span" style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px"><br>
</span></div><div><span class="Apple-style-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 class="Apple-style-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 class="Apple-style-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 class="Apple-style-span" style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">MatTranspose() only takes in "</span><span class="Apple-style-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 class="Apple-style-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 class="Apple-style-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 class="Apple-style-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 class="Apple-style-span" style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px"><br>
</span></div><div><span class="Apple-style-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 class="Apple-style-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 class="Apple-style-span" style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px"><br></span></div><div><span class="Apple-style-span" style="border-collapse:collapse;color:rgb(80,0,80);font-family:arial,sans-serif;font-size:14px">Hong</span></div>
<div><span class="Apple-style-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 class="h5">
<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 class="HOEnZb"><font color="#888888"><pre cols="72">--
Regards,
Alexander</pre>
</font></span></div>
</blockquote></div><br>