Improve conditioning of MpXA local problems
keileg opened this issue · comments
A core part of the Mpfa and Mpsa discretizations is the construction of basis functions on subcells see (review paper) for details. This is implemented as inversion of a block diagonal matrix, which contains local problems on the form
The unknowns are the pressure gradient
The goal of the MpXa discretization is to solve the equation for
Note the scaling of these equations: The first scales with face area
The suggested remedy is to scale the linear system before inversion, so that the equations become more balanced. This should be done on the level of interaction regions, e.g., separate scaling for each local linear system. The suggested approach is to define a local typical grid size
For this to work, it is paramount that the gradients are scaled back after computations so that the computed fluxes are correct. This should not be difficult, but the right way to do so is not immediately clear.
It seems the trick is not to scale back, but rather to scale the right hand side (the
We also need to scale the various right hand sides. Two questions arise:
- Do we need to pass the scaling matrix around to various subfunctions that compute various right hand sides? This is relevant in particular for poro-elasticity.
- Do boundary conditions need special care? My intuition says no, but I have learned not to trust myself.
A final question:
3.: How do we do permeability scaling, and stiffness for the elasticity? Likely, we want eigenvalues of the tensors, I'll need to think of that.
Test cases must also be defined. Right now, my thinking is we need not introduce extra formal tests, but I may leave some functionality that enables monitoring of condition numbers for the local systems, should we ever be interested in that.