Ryan Yan vyan2000 at
Sun Sep 20 10:20:29 CDT 2009

Hi All,
I have a large size application. Mesh size is 30000 nodes, with dof 25 on
each vertex. And it's 3d unstructured,  Tet, and Hex mesh. In the following
I will denote blksize=25

I am testing how to build up a PETSc matrix object quick and fast.

The data I have is Block Compressed Sparse Row(BCSR) files. And my objective
is to read BCSR files and generate PETSc Binaries

Firstly, I choose the MATMPIAIJ, I opened the BCSR data files on each
processor, and set up the preallocation use
MatMPIAIJSetPreallocation(A,blksize,PETSC_NULL,blksize,PETSC_NULL); The
reason why I choose 25 as the number for d_nz and o_nz is that I do not have
access to the ordering of the vertices. So it's the worst case set up, and
it takes about 7 minutes on 30 MIPS node(180 processors) to write the output
into PETSc binaries.

Secondly, I choose the MatMPIBAIJ, and same procedure as above, but also set
here blksize = 25 and it's also the worst case; This experiments takes
forever and could not generate the PETSc binaries.

I guess the reason why it takes so long in the MATMPIBAIJ case is that I did
not set up the preallocation accurately. Alougth I think the preallocation
is also not accurate in the MATMPIAIJ case, but it seems like the
preallocation effect is not as serious as for the MPIBAIJ. Correct me
please, if there are other reasons.

Can I anyone please give a hint on how to set up the preallocation right for
a unstructured mesh without knowing the mesh ordering?

Thank you very much in advance,

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the petsc-users mailing list