This MR contains improvements to the performance of the incompressible solver (some of the changes might also help in other cases).
I worked on these changes based on a profiling of the
Cyl.xml example (2D, N=5, using both tris and quads). For this particular case (in serial), I got a reduction of computational cost close to 30%, although I suspect simulations with higher order or in 3D will get more modest improvements.
The main changes are:
- Use a virtual function to make UnsteadySystem skip the FwdTrans it performs after each time step, since this is completely redundant for the incompressible solver
- Introduce a parameter to choose the frequency at which the solver checks for NaNs
- Tweak the default value of the mdswitch parameter for the multilevelstaticcond, and also allow to specify it in the session file
- Include PhysDeriv in a single direction in the Collections, since we need it to compute div(u) for the pressure forcing
- Use symmetric matrices for the interior part of the static cond (whenever possible)
- Several small changes to reduce overhead costs, especially in matrix vector multiplications.