What you are looking for is:

https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatCreateBAIJ.html

indoe is optimization for AIJ type - where you might not have a simple block 
size like 3 that you have.

BAIJ will perform better than AIJ/with-inode

To verify indoe usage - you can run the code with '-log_info' option - and do a 
'grep inode'

Satish

On Wed, 6 May 2020, Thomas S. Chyczewski wrote:

> 
> All,
> 
> I'm relatively new to PETSc and have relied pretty heavily on the example 
> codes included in the distribution to figure out the finer points of using 
> the PETSc library that I couldn't deduce from the manual. One thing I can't 
> figure out is how to solve block matrix systems and I couldn't find an 
> example in Fortran. I'm writing a 2D incompressible CFD solver so I have a 
> 3x3 block Imax*Jmax system. The closest I've come to finding an example is 
> ex19.c in the snes directory, but that is in c and for the nonlinear solver.
> 
> I have been able to run PETSc but unwrapping the block matrix into a 
> monolithic system. But the manual says "Block matrices represent an important 
> class of problems in numerical linear algebra and offer the possibility of 
> far more efficient iterative solvers than just treating the entire matrix as 
> black box." However, in the FAQs I saw a comment that PETSc scans the AIJ 
> matrices for rows that have the same column layout and can deduce if it's a 
> block system and use the more efficient solvers. I also saw in the archives 
> for this email list a thread where it seems workaround for building fields in 
> a Fortran code is discussed ("Back to struct in Fortran to represent field 
> with dof > 1"), so I'm beginning to suspect building a block system in 
> Fortran might not be straight forward.
> 
> All that being said, my questions:
> 
> Is there a significant advantage to building the block system as opposed to 
> the analogous monolithic system if PETSc can figure out that it's a block 
> system? Can you confirm that PETSc does figure this out?
> If there is an advantage to loading the matrix as a block matrix, is there an 
> example Fortran code that builds and solves a linear block system?
> 
> Thanks,
> Tom C
> 
> 

Reply via email to