dropping columns/rows from matrix?

Barry Smith bsmith at mcs.anl.gov
Fri Nov 23 19:28:52 CST 2007


   Peter,

    We use MatGetSubMatrix() to do this. Rather than dropping/adding  
rows and columns just grab the
part you want and use it then destroy it and grab another part you  
want. We've done this with active set
methods and the time to do the MatGetSubMatrix() has been surprisingly  
small percentage of the time.

    Barry


On Nov 23, 2007, at 6:58 PM, Peter Schröder wrote:

> As part of a greedy basis pursuit algorithm I drop/undrop columns/ 
> rows from a matrix and resolve. I don't want to rebuild the matrix  
> each time. Is there a quick way to do this?
>
> Basically the setup is this. Consider a 2-manifold triangle mesh and  
> a discretization (piecewise linear FE) of the Laplace-Beltrami  
> operator over this mesh (symmetric positive (semi-)definite  
> [constant vector is the only null space vector]). Fix boundary  
> conditions (zero Dirichlet in my case). Solve for a given rhs (I am  
> using CG and absolute Jacobi as a precon with good success). Based  
> on the solution, take out a column (and the same row) and resolve.  
> Repeat this a few times until, say, 10 variables are dropped. Now  
> pick one of them, say, i, and reintroduce it. Based on the solution  
> replace i with i_new. Now visit another variable of the original 10  
> and "move" it. Etc.
>
> Each one of the solves is quick (and I need to do hundreds for  
> matrices with hundreds of thousands to millions of variables). I'd  
> rather not rebuild the matrix each time... Any suggestions?
>
> Thanks much!
>
> Peter
>




More information about the petsc-users mailing list