Assemble global inverse from cell-wise block inverse

I am solving a problem

\begin{bmatrix} \pmb{A} & \pmb{B}\\ \pmb{C} & \pmb{D} \end{bmatrix} \begin{pmatrix} \pmb{x}\\ \pmb{y} \end{pmatrix} = \begin{pmatrix} \pmb{f_x}\\ \pmb{f_y} \end{pmatrix}

and want to have

\pmb{K_y} = \pmb{D} - \pmb{C}\pmb{A}^{-1}\pmb{B}
\pmb{b_y} = \pmb{f_y} - \pmb{C}\pmb{A}^{-1}\pmb{f_x}

so that I can solve \pmb{K_y}\pmb{y}=\pmb{b_y}.

\pmb{A} is cell-wise block and so can be inverted in parallel cell-wise. I can do the cell-wise inversion (Cell-wise assembly in v10.0.0 - #2 by dokken) but I am unclear how to compile the cell-wise inverses into global inverse \pmb{A}^{-1}.

See the static condensation demo: dolfinx/python/demo/demo_static-condensation.py at 076c7ae1cd2d76a901a5400bc4aefea80369e3ff · FEniCS/dolfinx · GitHub

1 Like