<div>Dear Barry:</div>
<div>&nbsp;</div>
<div>&nbsp;&quot;Note also:<br>PCComputeExplicitOperator - Computes the explicit preconditioned operator.<br>this means it computes B*A or A*B (depending on left or right preconditioning). This beasty<br>(unless you use Jacobi preconditioning) is always dense and it makes no sense to store in<br>
sparse format except for fun.&quot;</div>
<div>&nbsp;</div>
<div>Regarding the above comments, I have checked the array of the explicit preconditioner obtained&nbsp;in PCComputeExplicitOperator(). It is sparse. Why say it is dense?</div>
<div>thanks a lot.</div>
<div>&nbsp;</div>
<div>Regards,</div>
<div>Yujie<br><br></div>
<div class="gmail_quote">On Fri, May 2, 2008 at 9:50 AM, Barry Smith &lt;<a href="mailto:bsmith@mcs.anl.gov">bsmith@mcs.anl.gov</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br>&nbsp;Application of a preconditioner is almost always a dense operator. The only exception is sparse<br>approximate inverse and in fact this is why the sparse approximate inverse is a lousy preconditioner.<br>
So I don&#39;t think you would ever want to compute the preconditioner into a sparse matrix.<br><br>&nbsp;If you want the SPAI preconditioner explicitly as a PETSc sparse matrix you should go into that<br>code, figure out how the SPAI stores its computed preconditioner and convert it to the PETSc<br>
format.<br><br>&nbsp;Note also:<br>PCComputeExplicitOperator - Computes the explicit preconditioned operator.<br>this means it computes B*A or A*B (depending on left or right preconditioning). This beasty<br>(unless you use Jacobi preconditioning) is always dense and it makes no sense to store in<br>
sparse format except for fun.<br><font color="#888888"><br>&nbsp; Barry</font> 
<div>
<div></div>
<div class="Wj3C7c"><br><br><br>On May 1, 2008, at 8:08 PM, Yujie wrote:<br><br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px; BORDER-LEFT: #ccc 1px solid">when 1 processor is used, the matrix M in PCComputeExplicitOperator(pc,&amp;M) uses MATSEQDENSE type. Now, I want to use MATSEQAIJ, I change the codes as follows:<br>
1563 if (size == 1) {<br>1564 //05/01/08<br>1565 //ierr = MatSetType(*mat,MATSEQDENSE);CHKERRQ(ierr);<br>1566 //ierr = MatSeqDenseSetPreallocation(*mat,PETSC_NULL);CHKERRQ(ierr);<br>1567 ierr = MatSetType(*mat,MATSEQAIJ);CHKERRQ(ierr);<br>
1568 ierr = MatSeqAIJSetPreallocation(*mat,0,PETSC_NULL);CHKERRQ(ierr);<br>1569<br>1570 } else {<br>1571 ierr = MatSetType(*mat,MATMPIAIJ);CHKERRQ(ierr);<br>1572 ierr = MatMPIAIJSetPreallocation(*mat,0,PETSC_NULL,0,PETSC_NULL);CHKERRQ(ierr);<br>
1573 }<br><br>PCApply is fast when running. However, &nbsp;MatSetValues() is very very slow when some arraies need to set. I find that the problem likely lies in<br>MatSeqXAIJReallocateAIJ(A,A-&gt;rmap.n,1,nrow,row,col,rmax,aa,ai,aj,rp,ap,imax,nonew,MatScalar) in MatSetValues_SeqAIJ() after debugging the codes.<br>
I can&#39;t further figure out where is the problem. Because it is difficult to debug. Could you give me some advice? thanks a lot.<br><br>the version of PETSc is 2.3.3-p8.<br><br>thanks a lot.<br><br>Regards,<br>Yujie<br>
<br><br><br><br></blockquote><br></div></div></blockquote></div><br>