Singular stiffness matrix when applying Dirichlet BC with constraint matrix

40 views
Skip to first unread message

Anders Ström

unread,
Aug 24, 2016, 9:02:33 AM8/24/16
to deal.II User Group
Hello,

I'm solving a 2 by 2 block system on the form
[A  -B' ; B A] * [y ; u] = [c ; d]
where the matrix B is a stiffness matrix from a Laplace operator,
−∆y=u,
when I set Dirichlet BC on y (or u, or both) the corresponding rows in B are set to zero, even the diagonal element.

So, my question is if this is expected? Since this makes B singular which should not be the case for a stiffness matrix? The reason this is an issue is that the block B is used in a solver when preconditioning.

I use a constraint matrix with interpolate_boundary_values and then use distribute_local_to_global on the whole system to apply the BC.

My guess is that this keeps the diagonal of A and sets the rest of the corresponding row to zero, including B. Is there some other way to set the BC to avoid making B singular?

Regards,
Anders  


Wolfgang Bangerth

unread,
Aug 24, 2016, 11:22:38 AM8/24/16
to dea...@googlegroups.com

Anders,

> I'm solving a 2 by 2 block system on the form
> [A -B' ; B A] * [y ; u] = [c ; d]
> where the matrix B is a stiffness matrix from a Laplace operator,
> −∆y=u,
> when I set Dirichlet BC on y (or u, or both) the corresponding rows in B
> are set to zero, even the diagonal element.

Correct. The algorithm just looks at the overall matrix (with row and
column space defined by the DoFHandler). That you subdivide the matrix
somehow or other is not of concern to the algorithm.


> So, my question is if this is expected? Since this makes B singular
> which should not be the case for a stiffness matrix? The reason this is
> an issue is that the block B is used in a solver when preconditioning.

Well, B is not the stiffness matrix. It is the matrix that results from
the operator
(nabla phi_i, nabla psi_j)
where phi_i and psi_j are the trial and test functions of the two
variables. It would be easier to see that it can't be *exactly* the
stiffness matrix if you imagined using different function spaces for y
and u (think, using Q2 elements for y, and Q1 elements for u). In your
case, it is also the matrix that is formed by considering *all* shape
functions, including those at the boundary, as test functions, but we
will have to eliminate these.


> My guess is that this keeps the diagonal of A and sets the rest of the
> corresponding row to zero, including B. Is there some other way to set
> the BC to avoid making B singular?

No. Because then the linear system that results would not solve the
problem you want to solve. The matrix really needs to look like it
looks, with B singular.

But what you could consider is not using B as the preconditioner, but
some "related" \tilde B. This matrix could, for example, have ones on
the diagonal. You wouldn't use it for forming the product with your
overall matrix in GMRES or whatever other method you use, but you'd use
it when preconditioning.

Best
W.

--
------------------------------------------------------------------------
Wolfgang Bangerth email: bang...@colostate.edu
www: http://www.math.colostate.edu/~bangerth/

Anders Ström

unread,
Aug 25, 2016, 11:29:45 AM8/25/16
to deal.II User Group, bang...@colostate.edu
Thank you Wolfgang for the response. This cleared things up a bit.
Reply all
Reply to author
Forward
0 new messages