Physics based preconditioning(PBP,基于物理的预条件)是一种用于更高效地使用 JFNK 求解的高级概念。其核心思想是构造一种针对各个物理场分别进行处理的预条件过程。以一种类似 Block-Gauss-Seidel(块高斯–赛德尔)的方法,对预条件矩阵(通常是真实 Jacobian 的一种近似)进行部分求逆。本例中的求解的微分方程组为−𝛻∙𝛻𝑢=0; −𝑢−𝛻∙𝛻𝑓=0,它的雅克比阵为
[𝜕𝑅_𝑢/𝜕𝑢 𝜕𝑅_𝑢/𝜕f
𝜕𝑅_f/𝜕𝑢 𝜕𝑅_f/𝜕f]
我们设置off_diag_row = 'forced' off_diag_column = 'diffused',会导致预处理矩阵M变为
[𝜕𝑅_𝑢/𝜕𝑢 0
𝜕𝑅_f/𝜕𝑢 𝜕𝑅_f/𝜕f]
预处理矩阵在计算线性方程组Mq = p时,如果分块计算,会变为
[𝜕𝑅_𝑢/𝜕𝑢 0
𝜕𝑅_f/𝜕𝑢 𝜕𝑅_f/𝜕f]
*
[q_u
q_f]
=
[p_u
p_f]
如果设定solve_order = 'diffused forced',则先解
(𝝏𝑹_𝒖)/𝝏𝒖 * 𝒒_𝒖=𝒑_𝒖
再解
(𝝏𝑹_𝒇)/𝝏𝒖 * 𝒒_𝒖 + (𝝏𝑹_𝒇)/𝝏𝒇 * 𝒒_𝒇 = 𝒑_𝒇
如果设定preconditioner = 'LU LU',则采用将矩阵分解为下三角矩阵和上三角矩阵的方法求解这两个式子