在此博客文章中,我们介绍了Comsol中使用的两类算法,用于求解解决任何有限元问题时出现的线性方程系统。这些信息与理解求解器的内部运作以及了解记忆需求如何随着问题大小增长而言是重要的。
线性静态有限元问题
让我们考虑一个线性静态有限元问题,由三个节点和三个元素组成:
每个元素都由两个节点界定。其中一个节点是在刚性壁上,我们知道位移将为零,因此我们不需要求解该节点。正如我们在之前的博客文章中看到的那样线性静态有限元问题,我们可以为每个节点写一个力量:
我们可以将其写为:
甚至更紧凑:
我们可以使用Newton-Raphson迭代方法解决此问题,由于这是一个线性静态问题\ Mathbf {U} _ {init} = \ Mathbf {0},给我们这个解决方案:
现在,这个问题只有两个未知数或自由度(DOF),并且可以用笔和纸很容易解决。但是总的来说,您的矩阵将拥有数千至数百万的DOF,而找到上述方程的解决方案通常是问题中最需要的部分。在计算机上求解这样的线性方程系统时,还应注意条件编号,衡量解决方案对负载变化的敏感程度的度量。尽管Comsol从未直接计算条件号(这样做和解决问题一样昂贵),但我们确实以相对的方式谈论了条件编号。该数字使用用于求解线性方程系统的数值方法。
有两种基本类别的算法用于解决\ bf {k^{ - 1} b}:直接的和迭代方法。我们将介绍这两种方法,并在下面查看它们的一般属性和相对性能。
直接方法
Comsol使用的直接求解器是腮腺炎,,,,帕迪索, 和齿轮求解器。所有求解器均基于lu分解。
这些求解器都将针对所有条件有限的有限元问题提供相同的答案,这是它们的最大优势,甚至可以解决一些问题不足的问题。从解决方案的角度来看,您选择的直接求解器之一是无关紧要的,因为它们将返回相同的解决方案。直接求解器的相对速度主要不同。腮腺炎,pardiso和spooles求解器各自都可以利用单台计算机上的所有处理器芯,但是pardiso往往是最快的,并且口径最慢。线轴还倾向于使用所有直接求解器的最少内存。所有直接求解器的确需要大量的RAM,但是腮腺炎和pardiso可以存储解决方案核心,这意味着他们可以将一些问题卸载到硬盘上。mumps求解器还支持群集计算,使您可以使用比任何单个计算机上通常可用的更多内存。
如果您要解决一个没有解决方案的问题(例如负载的结构性问题,但没有约束),则直接求解器仍将尝试解决该问题,但会返回看起来与以下方式相似的错误消息:
未能找到解决方案。相对残差(0.06)大于相对公差。返回的解决方案没有收敛。
如果您收到此类型的错误消息,则应检查以确保您的问题是否正确约束。
迭代方法
comsol中的迭代求解器涵盖了各种方法,但在概念上都非常简单地理解最高水平,与一个基本类似于共轭梯度法。其他变体包括广义最小剩余方法和双轭梯度稳定方法,并且在这些方面有很多变化,但它们的行为类似。
与直接求解器相反,迭代方法逐渐接近溶液,而不是在一个大计算步骤中。因此,当用迭代方法解决问题时,您可以观察到解决方案中的误差估计值随迭代次数的减少。对于条件良好的问题,这种融合应该非常单调。如果您正在处理未经良好条件的问题,那么收敛性会慢。迭代求解器的振荡行为通常表明该问题无法正确设置,例如当问题不够充分约束时。迭代求解器的典型收敛图如下所示:
默认情况下,当迭代求解器中的估计误差低于10时,该模型被视为收敛-3。这是在求解器设置窗口中控制的:
对于更快的溶液或更紧密的溶液,可以使这种耐受性更宽松,以提高当前网格的精度。公差必须始终大于取决于机器精度的数字(2.22×10-16)和条件编号(这取决于问题)。但是,通常没有任何意义,因为对您的模型的输入(例如材料属性)通常不准确地超过几位数字,因此容忍度太高了。如果您要改变相对容忍度,我们通常建议以一个数量级和比较解决方案的增量增量使公差更紧密。请记住,您只能在当前使用的网格上解决更严格的耐受性,并且完善网格通常更合理。
迭代求解器的最大优势是它们的内存使用情况,它的内存使用量明显少于相同大小的问题的直接求解器。迭代求解器的最大缺点是他们并不总是“只是工作”。不同的物理学确实需要不同的迭代求解器设置,具体取决于要解决的管理方程的性质。
幸运的是,Comsol已经为所有预定义物理接口具有内置默认求解器设置。comsol将自动检测到正在解决的物理和问题大小,并为这种情况选择求解器(直接或迭代)。选择默认的迭代求解器以最高的鲁棒性和最低的内存使用方式选择,并且不需要用户的任何交互来设置它们。
关于直接和迭代解决方案方法的结论
在求解模拟的线性方程系统时,Comsol将自动检测最佳求解器,而无需任何用户交互。直接求解器将使用比迭代求解器更多的内存,但可以更强大。迭代求解器逐渐接近溶液,如果需要,可以改变收敛耐受性。
评论(6)
anu das
2015年10月7日我试图将泊松eqn和稀释物种的运输搭配。但这并没有融合。以下是我尝试解决它的简短说明:
(3D几何形状是针板电极),但我使用了2D轴对称[仅取1 kV时的针头边界,上升时间1e-6 US,下板使用静电仪在0 V处。
电荷连续性eqn即Del(rhe)/del(t) + div(-rhe*meu*e)= a*e*e*exp(-b/e)使用稀释物种的运输。
所使用的BC为对流通量在电极边界处为零。即n.grad(rhe)= 0
通过空间电荷密度> RHE在静电中耦合两个物理
使用的pardiso,时间范围[0,1E-8,1E-7]。模型没有收敛。请给我您的提示,以解决此问题。
沃尔特·弗莱
2015年10月14日你好anu,
这些问题落在这里的范围之外。相反,您需要直接与Comsol支持团队联系以寻求帮助。
Moez El-Massry
2016年3月2日我可以手动使求解器使用直接或迭代解决方案方法吗?(当我进行一个模拟时,该模拟停止并报告“在LU分解过程中失踪”的错误,并且根据博客,直接解决方案方法可能会有所帮助。)
尼古拉斯·戈德林
2016年6月8日我实际上有一个完全相同的问题。我想手动选择一个求解器,该求解器的内存较少,因为我当前收到相同的错误消息。
沃尔特·弗莱
2016年6月9日你好,
关于不可存储的问题,请参阅此KB:
//www.dvdachetez.com/support/knowledgebase/1030/
BastiánRodríguezLópez
2020年5月12日你好!谢谢你的解释。我正在尝试模拟铝之间的两块硬件,并在它们之间使用接触点。我想知道我应该使用哪个求解器。哪一种是一种明确的方法,而一种是隐式的?先感谢您。