[petsc-users] Values of a column in a parallel matrix

Barry Smith bsmith at mcs.anl.gov
Mon Mar 20 23:05:20 CDT 2017


> On Mar 20, 2017, at 10:48 PM, Daralagodu Dattatreya Jois, Sathwik Bharadw <sdaralagodudatta at wpi.edu> wrote:
> 
> Hey Barry, 
> I am already using MatZeroRows. I was actually stuck precisely while applying non zero Dirchlet boundary conditions. But to account for non zero value traditionally we subtract the corresponding column with the right hand side vector. If we zero the rows and columns we can only have value zero for solutions at the boundary. 

  Not sure what you mean. Take a look at, for example MatZeroRowsColumns_SeqAIJ() src/mat/impls/aij/seq/aij.c

   It first updates the right hand side (by subtracting the corresponding column times the correct value in the solution (i.e. the Dirichlet value provided in the x input vector )) and then it zeros the entry in the matrix. 

   Barry

Perhaps you are concerned about multiple sequential linear solves with the same matrix and different right hand sides? In that case you are correct, since you have removed those columns entries you cannot call it again for the next right hand side. In that case you need to use MatZeroRows().


 

> 
> Get Outlook for Android
> 
> From: Barry Smith <bsmith at mcs.anl.gov>
> Sent: Monday, March 20, 2017 11:33:20 PM
> To: Daralagodu Dattatreya Jois, Sathwik Bharadw
> Cc: petsc-users at mcs.anl.gov
> Subject: Re: [petsc-users] Values of a column in a parallel matrix
>  
> 
> > On Mar 20, 2017, at 6:07 PM, Daralagodu Dattatreya Jois, Sathwik Bharadw <sdaralagodudatta at wpi.edu> wrote:
> > 
> > Hey all,
> > 
> >  I am using  AIJ matrix to solve Laplace problem in finite element framework. To apply Neumann boundary conditions I need to obtain values of first and last few columns and subtract it with the corresponding right hand side vector. I understand that MatGetColumnVector andMatGetValues are not collective. Is there any other alternative petsc calls to achieve this in parallel? 
> 
>   Hmm, I think you mean non-zero Dirichlet boundary conditions. In that case the recommended approach is calling MatZeroRows() or if you want to preserve symmetry MatZeroRowsColumns(). There are also MatZeroRowsLocal() and MatZeroRowsColumnsLocal() and a few other variants.
> 
>   Barry
> 
> 
> >   
> > Thanks,
> > Sathwik 



More information about the petsc-users mailing list