解决牛顿-拉夫森以外的非线性对流扩散系统的方法?


9

我正在做一个项目,在该项目中,我有两个通过各自的源条件进行adv-diff耦合的域(一个域增加质量,另一个域减去质量)。为简便起见,我正在对它们进行稳态建模。这些方程式是您的标准对流扩散输运方程式,其源项如下所示:

c1t=0=F1+Q1(c1,c2)c2t=0=F2+Q2(c1,c2)

其中是物种扩散和对流通量,而是物种的源项。FiiQii

我已经能够使用牛顿-拉夫森方法为我的问题编写求解器,并且已经使用块质量矩阵将两个域完全耦合,即:

Fcoupled=[A100A2][c1,ic2,i]xi[b1(c1,i,c2,i)b2(c1,i,c2,i)]

术语用于确定雅可比矩阵并更新和:Fcoupledc1c2

J(xi)[xi+1xi]=Fcoupled

要么

xi+1=xi(J(xi))1Fcoupled

为了加快速度,我不会每次迭代都计算雅可比行列式-现在我每5次迭代就玩一次,这看起来效果很好,并且可以保持解决方案稳定。

问题是:我将移至两个域都在2D / 2.5D中的更大系统,并且计算Jacobian矩阵将迅速耗尽我的可用计算机资源。我将建立此模型以在以后的优化设置中使用,因此我也不能在每次迭代中都调整阻尼因子等。

我是否应该在其他地方寻找更鲁棒的算法来解决我的问题,还是这样就好了?我研究了准线性化,但是不确定它对我的系统是否适用。

还有其他我可能会错过的光滑算法,可以解决非线性方程组而无需重新计算雅可比行列式吗?


2
您是否考虑过迭代求解器,例如AMG-代数多重网格方法。您可能需要提出基于物理的良好预处理器。
NameRakes '16

1
您可以使用并行线性代数程序包访问可在其中分发雅可比矩阵和解的计算集群吗?
比尔·巴特

不,我没有考虑过AMG,我认为这些仅用于对称系统,不能用于对流占主导的问题。我将在AMG的文献中再次查看。
cbcoutinho

并行计算很困难,因为该项目是作为无法访问此类资源的同事的独立应用程序而开发的。我考虑为我自己而将mpi开发到该项目中,但这会增加其他人的进入门槛,这首先是要解决的问题
。– cbcoutinho

3
为什么计算雅可比行列式有问题?如果您使用的是有限差分/体积/元素,则其稀疏部分应始终相同,而对角线部分则应发生变化,但计算起来却微不足道。
大卫·凯奇森

Answers:


4

我假设2D和3D的局限性在于存储Jacobian。

一种选择是保留时间导数,并使用显式的“伪”时间步长迭代到稳态。通常,扩散和反应性系统所需的CFL数量可能会过小。您可以尝试使用非线性多重网格(也称为“完全近似存储”多重网格)和局部时间步长来加快收敛速度​​。

另一个选择是像现在一样使用完全隐式方案,但不存储全局Jacobian。您可以使用无矩阵隐式方案。

DF(un)δun=F(un)
(哪里 DF 可以使用Krylov子空间求解器(例如GMRES和BiCGStab)求解,
DF(un)δuF(un+ϵδuδu)F(un)ϵ.
这是因为GMRES和BiCGStab不需要LHS矩阵,它们仅需要能够在给定向量计算其乘积。AAxx

现在,使用正确的值(对于双精度浮点数,通常约为),您可以执行牛顿循环,而无需计算或存储雅可比行列式。我知道这一事实,该技术用于解决计算流体动力学中的一些非平凡情况。但是请注意,函数的求值次数将比矩阵存储技术多,而不需要矩阵向量乘积。ϵ107F

要注意的另一件事是,如果您的系统需要强大的预处理器(即Jacobi或block-Jacobi不足),则您可能希望尝试将上述方法用作多网格方案中的平滑器。如果您想尝试点或块式Jacobco预处理器,则可以仅计算和存储Jacobian的对角元素或对角块,这并不多。我还要提到的是,无需显式存储雅可比行列式就可以实现高斯-赛德尔(Gauss-Seidel)或SSOR预处理器。本文介绍了在计算流体动力学的背景下,采用无矩阵对称高斯-赛德尔预条件预处理的无矩阵GMRES的实现。


1

根据我对Navier-Stokes方程的经验,如果没有完全隐式的方案,则可以做得很好。

如果您只想为时间演化的解决方案提供一个快速的数值方案,请查看IMEX(隐式-显式)方案。参见例如Ascher,Ruuth,Spiteri 隐式-显式Runge-Kutta方法的本文,它是关于时间相关的偏微分方程的

您甚至可以尝试仅使用具有步长控制的显式高阶时间积分方案(例如Matlab的方案ODE45)。但是,由于系统的刚性(可能来自扩散部分),您可能会遇到麻烦。幸运的是,扩散部分是线性的,因此可以隐式地对待(这是IMEX方案的思想)。


0

最初,我考虑仅添加一个备注,但是空间不够,因此我对我在该主题上的经历进行了简要描述。

首先,查看您对表示法,我看不到耦合形式,我想和都将依赖于和。此外,如果和是和的近似值的矩阵表示,则它们不仅应不仅取决于,而且还取决于邻居值,但这可能只是对您的表示法的错误理解。Fcoupledb1b2c1,ic2,iA1A2F1F2ci

作为一般性评论,我想补充一点,使用解析雅可比行列式似乎是获得非线性迭代求解器(即您所用的牛顿-拉夫森求解器)二次收敛的唯一方法。您是否观察到您的情况?这非常重要,因为否则您的近似值(线性化)可能会引起误解。

在我参与的所有应用程序中(其中一些应用程序包含大规模计算),我们从来都没有涉及组装Jacobian的时间问题,而最耗时的问题始终是使用线性求解器。由于二次收敛,解析雅可比行列式(如果有的话)一直在我一直在首选的应用程序中。在极少数情况下,此类非线性求解器会生成一个矩阵,从而对迭代线性求解器的收敛性造成问题,因此我们尝试使用比解析雅可比矩阵更简单的线性化方法来帮助线性求解器。依赖于非线性代数系统的线性化,在非线性和线性代数求解器的行为之间进行这种折衷总是很棘手的,我无法给出一般性建议。

但是您是对的,解析雅可比矩阵对PDE系统的缺点(或性质)是它会产生耦合代数系统,因此,如果以任何方式解耦该系统,例如通过迭代拆分分别求解每个PDE的近似值方法,然后再次松开全局求解器的二次收敛性。但是,至少如果您分别解决每个离散的(解耦的)PDE,则可以使用Newton-Raphson方法再次加快解决此特定问题的速度。


Howdy @Peter,您对耦合是正确的,我已经编辑了主要方程以显示,并且和都是和函数。在这种情况下,矩阵和是两个系统的刚度矩阵,它们是使用有限元方法开发的。这些仅是节点坐标的函数,而不是状态变量的函数。和是向量,因此它们是状态变量的向量的函数,而不仅仅是一个变量。我使用有限差分来数值计算雅可比行列式。到目前为止,我还没有研究过解析雅可比矩阵。b1b2c1c2A1A2F1F2
cbcoutinho
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.