I am taking a shot at solving a coupled physics problem. I have this matrix formed:

$\mathbf{J}=\begin{bmatrix} \mathbf{A} & \mathbf{B}\\ \mathbf{C} & \mathbf{D} \end{bmatrix}$

where $\mathbf{A}$ and $\mathbf{D}$ represent two different physics, and $\mathbf{C}=-\mathbf{B}^{T}$. Originally, I wanted to use the Schur complement:


But this won't work as shown because $\mathbf{A}$ is non-invertible. It's guaranteed at least one row in $\mathbf{A}$ will be zero.

My question is: what other methods could I apply to solve this problem? Is there any way to take advantage of the fact that:


exists since $\mathbf{D}$ is nonsingular?


The size of $\mathbf{J}$ shouldn't exceed 1000x1000. I'm solving a statics problem for a geometrically nonlinear structure with no PDEs involved. In the past, this problem was solved using a monolithic algorithm, where the $\mathbf{A}$/$\mathbf{D}$ physics are solved independently of one another. I want to try a new approach since a rudimentary algorithm already developed shows significant speed-up over traditional methods. As Jan pointed out below, using $S_{A}$ is an option. Is there a PETSc run-time option to alternate from $S_{D}$ to $S_{A}$ (for background, page 87 in the PETSc manual discusses Schur factorization)? Or do I have to reorganize the $\mathbf{J}$ matrix structure, essentially swapping the $\mathbf{A}$ and $\mathbf{D}$ blocks?

  • 1
    $\begingroup$ Welcome to SciComp. Can you give some more information on the problem. What are the dimensions? Why aren't you satisfied with simply using $S_A$ to decouple the system? $\endgroup$
    – Jan
    Commented Jul 9, 2013 at 6:16
  • $\begingroup$ As far as I know there's not option in PETSc to switch between $S_A$ and $S_D$, but perhaps one of the developers will react. For Schur complement methods in PETSc with $J$ as given, you need to invert $S_D$. Maybe you can provide an approximation for $A^{-1}$ to be used by PETSc in the Schur complement? Or directly provide an approximation for the entire Schur complement? $\endgroup$
    – chris
    Commented Jul 9, 2013 at 8:10

1 Answer 1


For linear problems of size ~1000, you can't beat a direct solver by trying to use an iterative solver. For problems of this size, it also doesn't really matter.

If your problem was any bigger, I would recommend you watch/listen lectures 34 and 38 of the course I recorded this spring: http://www.math.tamu.edu/~bangerth/videos.html .

  • $\begingroup$ Thank you; your video tutorials are great (I like how an occasional lecture on good programming practices is thrown into the mix). I have used a direct solver, but I am insisting on using an iterative solver because it will eventually be needed when moving onto larger systems, and I might as well prototype it now. Since PETSc is being used, I suppose the solution is to change the $\mathbf{J}$ matrix structure, as indicated in the original question. $\endgroup$ Commented Jul 12, 2013 at 20:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.