Вы можете использовать добавку
п- 1aх = ( БTБ )- 1х + ( СTС)- 1х ,
мультипликативный
п- 1мх = ( БTБ )- 1х + ( СTС)- 1( х-А(ВTБ )- 1х ) ,
или симметричный мультипликативный. Методы этого класса доступны в PETSc, используя PCCOMPOSITE в PETSc. Например,
petsc/src/ksp/ksp/examples/tutorials$ ./ex2 -m 100 -n 100 -ksp_monitor \
-pc_type composite -pc_composite_type multiplicative \
-pc_composite_pcs ilu,gamg
0 KSP Residual norm 7.088415699389e+01
1 KSP Residual norm 1.271768323411e+01
2 KSP Residual norm 1.529853612054e+00
3 KSP Residual norm 1.214841683459e-01
4 KSP Residual norm 8.341606406485e-03
5 KSP Residual norm 6.471990946051e-04
6 KSP Residual norm 8.082672366030e-05
7 KSP Residual norm 6.111138513482e-06
Norm of error 6.93786e-06 iterations 7
В руководстве пользователя есть раздел «Объединение предварительных кондиционеров».
В дополнение к превосходному ответу Джеда, метод, который я недавно нашел, заключается в переключении между предварительными кондиционерами на каждом втором этапе гибкой GMRES (FGMRES), как это делается, например, в
источник