<div class="gmail_extra">On Fri, Apr 27, 2012 at 3:50 PM,  <span dir="ltr">&lt;<a href="mailto:tibo@berkeley.edu" target="_blank">tibo@berkeley.edu</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi,<br>
<br>
I am using petsc in a Fortran code to solve large systems of linear<br>
equations Ax = b where A is a matrix resulting from a discretization of a<br>
reaction diffusion problem: A is block-tridiagonal, and each of the three<br>
blocks is sparse. It turns out that I know exactly the sparsity structure<br>
of each block (ie the number and position of non-zeros per row).<br>
<br>
For now, I am only writing a sequential code. From the petsc manual, it<br>
seems there are two ways to create my matrix A: Either using<br>
MatCreateSeqAIJ, or using MatCreateSeqBAIJ. The second approach seems<br>
recommended since A is indeed a Block matrix.<br></blockquote><div><br></div><div>No, I think you just want AIJ. BAIJ is for matrices made of small dense blocks in</div><div>a sparse pattern, not big sparse blocks in a dense pattern.</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">
However, the command MatCreateSeqAIJ allows me to specify the number of<br>
non zeros per row, therefore allowing me to take advantage of knowing the<br>
sparsity structure of my blocks (but losing the advantage of using the<br>
fact that the matrix is a block matrix). It seems that the command<br>
MatCreateSeqBAIJ only allows me to specify the number of non zeros blocks<br>
per block rows, therefore losing the available information on the sparsity<br>
of each block.<br>
<br>
My question is then: Is there a way to declare the matrix to take<br>
advantage of both the fact that my matrix is a block matrix (or even<br>
better, that it is a block tridiagonal matrix) and that I know the<br>
sparsity structure of the blocks ?<br>
<br>
I am asking this question because If I use the block matrix approach as<br>
described above (just specifying the number of non zeros blocks per block<br>
rows) versus the AIJ approach with specifying the number of non zeros for<br>
each row, the computing time increases by a factor of 5, every other<br>
parameters being unchanged.<br>
<br>
Thank you<br>
<br>
</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<br>
</div>