Its best to keep the discussion on the list [or petsc-maint] - as others would 
have answers to some of these qestions.

Wrt -info - yeah this is the correct option [my mistake in suggesting -log_info]

Wrt understanding performance -log_view should help

Satish


On Thu, 7 May 2020, Thomas S. Chyczewski wrote:

> Satish,
> 
> Thanks for your help. Sorry for not being able to figure it out on my own. I 
> had a little trouble following the discussion in the manual. I got the block 
> version working now and the linear solver time is cut in half compared to the 
> monolithic version for a given set of parameters. I have experimented with a 
> number of solver and preconditioner options as well as solver convergence 
> criteria. But I'm wondering if there are any other parameters I should be 
> playing with. I ask because I also had some trouble following the 
> PCFIELDSPLIT discussion in the manual and I'm wondering if the default is the 
> best option for me.
> 
> The -log_info option isn't available in the Fortran version, so I couldn't 
> check the inode information as you suggested. However, below is the output 
> when I run with the -info option. I know that having no mallocs during 
> MatSetValues is good, but that's about it.
> 
> Thanks,
> Tom
> 
> [0] PetscGetHostName(): Rejecting domainname, likely is NIS arl19814.(none)
> [0] petscinitialize_internal(): (Fortran):PETSc successfully started: procs 1
> [0] PetscGetHostName(): Rejecting domainname, likely is NIS arl19814.(none)
> [0] petscinitialize_internal(): Running on machine: arl19814
> [0] PetscCommDuplicate(): Duplicating a communicator 2 2 max tags = 100000000
> [0] MatAssemblyEnd_SeqBAIJ(): Matrix size: 374400 X 374400, block size 3; 
> storage space: 11199240 unneeded, 5606640 used
> [0] MatAssemblyEnd_SeqBAIJ(): Number of mallocs during MatSetValues is 0
> [0] MatAssemblyEnd_SeqBAIJ(): Most nonzeros blocks in any row is 5
> [0] MatCheckCompressedRow(): Found the ratio (num_zerorows 0)/(num_localrows 
> 124800) < 0.6. Do not use CompressedRow routines.
> [0] PCSetUp(): Setting up PC for first time
> [0] PetscCommDuplicate(): Duplicating a communicator 1 3 max tags = 100000000
> [0] PetscCommDuplicate(): Using internal PETSc communicator 1 3
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> [0] PCSetUp(): Leaving PC with identical preconditioner since operator is 
> unchanged
> 
> 
> 
> -----Original Message-----
> From: Satish Balay <[email protected]> 
> Sent: Wednesday, May 6, 2020 4:05 PM
> To: Thomas S. Chyczewski <[email protected]>
> Cc: petsc-users <[email protected]>
> Subject: Re: [petsc-users] [EXTERNAL] Re: Example code of linear solve of a 
> block matrix system in Fortran
> 
> You can use 
> https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatSetValuesBlocked.html
> 
> MatSetValues() will also work - but MatSetValuesBlocked() is more efficient 
> wrt BAIJ
> 
> Satish
> 
> On Wed, 6 May 2020, Thomas S. Chyczewski wrote:
> 
> > Thanks Satish. I have seen that page and can create a block matrix. It's 
> > not clear to me how to fill it and use it in a Fortran code.
> > 
> > -----Original Message-----
> > From: Satish Balay <[email protected]> 
> > Sent: Wednesday, May 6, 2020 3:43 PM
> > To: Thomas S. Chyczewski <[email protected]>
> > Cc: [email protected]
> > Subject: [EXTERNAL] Re: [petsc-users] Example code of linear solve of a 
> > block matrix system in Fortran
> > 
> > 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