[petsc-users] How to zeros all entries of a set of columns of a matrix

Barry Smith bsmith at mcs.anl.gov
Thu Feb 25 12:54:13 CST 2010


   We get this question a lot so it has its own FAQ.

When
solving a symmetric system with Dirichlet boundary conditions I can use
MatZeroRows() to eliminate the Dirichlet rows but this results in a
non-symmetric system. How come there is no MatZeroColumns() to keep the
matrix symmetric?<br>
             <br>
             </span>For the default PETSc sparse matrix data  
structures (parallel and sequential) which are row based, zeroing  
certain columns is very expensive (it would require either searches or  
additional data structures). Hence we don't provide this  
functionality. One can solve Dirichilet boundary condition problems  
using symmetric methods two ways. (1) Manually call MatGetSubMatrix()  
to extract your symmetric subproblem or (2) call MatZeroRows() then  
use the PCREDISTRIBUTE preconditioner to solve the reduced system using
symmetric methods. See its manual page.
             <hr> </td>

Does this help you understand the situation? Or are you dealing with a  
very different situation?


    Barry

On Feb 25, 2010, at 11:08 AM, rlchen2008 wrote:

> Dear all,
>
>   Who can tell me how to zero all entries of a set of COLUMNS of a  
> matrix and let all diagonals of eliminated COLUMNS be 1.0?
>   Thanks!
>
> Rongliang
>
>



More information about the petsc-users mailing list