计算小型自动时间步骤的策略

2020年3月16日

在上一篇博客文章中,我们讨论了用于选择时间步骤和离散订单对于BDF时步骤方案。这些机制旨在根据规定的公差来确保解决方案的准确性,并在效率和鲁棒性之间取决于权衡。在此后续行动中,我们解释了应采取哪些措施来提高遇到较小的自动时间步骤的模拟效率。我们将查看一些示例,并讨论可以调整哪些求解器设置。

跟踪求解器日志中的时间步长和离散订单

当使用BDF时间启动方案检查求解器对求解器对数时,BDF方案的顺序和时间步长根据中描述的机制而变化。以前的博客文章。我们可能会在三种潜在情景之一中发现自己:

方案1:不同的时间步长和离散订单

从求解器日志中,我们发现nlfail = 0tfail = 0(对于时间依赖性和代数求解器,没有记录故障),但是时间步长和离散订单都在变化。

这是行为良好模型的典型情况和预期行为。当局部截断误差很小时,时间步长会增加。越来越多的离散顺序表明单独衰减的高阶时间导数的平滑解决方案。代数求解器照顾了非线性的效果,并由一些额外的代数求解器迭代或一些额外的Jacobian更新反映出,但这不会影响其他任何方式踏上时间。

通常,但并非总是需要对求解器设置进行调整。但是,总有风险的容忍度太大,无法实现手头的问题,并且遗漏了解决方案中的某些效果或细节。该解决方案的分解不足。即使在所有时间步骤中都得出了错误估计,也可能发生这种情况。因此,降低公差并重复模拟始终是一个好主意。这应该导致较小的时间步骤,并以更高的CPU时间价格提高解决方案的准确性。另外,请注意,代数终止标准与时间求解器的公差直接相关,因此不仅会影响时间离散误差,而且会影响终止代数问题迭代的错误风险。

因此,在某些情况下,降低公差可能会更好地解决解决方案的细节并导致更平滑的误差估计,从而导致更大的时间步骤。这有点违反直觉,因为在这些情况下降低公差也会导致更有效的时间(更快)步入时间。

示例:一维粘性汉堡的方程式

让我们考虑汉堡的方程式

\ partial_t u -c \ partial_x^2 u + \ alpha \ partial_x u + \ beta u \ partial_x u = 0

以平滑的步长函数为初始值和扩散系数C = 0.001,对流系数\ alpha = 1和非线性对流系数\ beta = 1

我们在间隔中使用二次lagrange元素离散求解(0,t] \ times(0,1)使用默认求解器设置的均匀dirichlet边界条件。由于非线性,形成了粘性冲击曲线。我们首先进行网格收敛分析,以确定合理的网格尺寸和公差。

参考解决方案u _ {\ rm ref}计算t = 0.15最大元素大小h _ {\ rm max} = 1e-6(对应于2e6自由程度),相对耐受性r = 1e-5和855个时间步骤。我们确定最大点错误e_ {p1}:= {\ rm max} _ {t \ in(0,t]} | u(t,0.2)-u _ {\ rm ref}(t,0.2)|,,,,e_ {p2}:= {\ rm max} _ {t \ in(0,t]} | u(t,0.35)-u _ {\ rm ref}(t,0.35)|和整体错误e_i:= {\ rm max} _ {t \ in(0,t]} \ int_0^1 | u(t,x)-u _ {\ rm ref}(t,x)| dx。如果网格太粗或相对耐受性太大,解决方案中有视觉尖峰(请参阅下表中的红色值;尖峰反映e_ {p2}仅有的)。

r = 0.01 r = 0.001 r = 0.0001 r = 0.00001
h _ {\ rm max} E_ {P1} e_ {p2} E_I E_ {P1} e_ {p2} E_I E_ {P1} e_ {p2} E_I E_ {P1} e_ {p2} E_I
1E-2 106 1.5e-2 4.9e-1 8.1e-3 195 5.5e-3 1.6e-1 1.8e-3 272 9.3e-4 1.6e-1 1.7e-3 380 1.6e-3 1.6e-1 1.7e-3
1E-3 109 2.7e-2 4.2e-1 8.0e-3 246 6.0E-3 1.6e-1 1.8e-3 508 1.7e-3 2.1E-3 8.3e-5 904 9.0E-7 1.8e-4 3.7E-6
1E-4 109 2.7e-2 4.2e-1 8.0e-3 246 6.0E-3 1.6e-1 1.8e-3 461 1.7e-3 1.2e-3 8.3e-5 833 1.2e-8 3.8e-7 1.4e-6
1E-5 109 2.7e-2 4.2e-1 8.0e-3 246 6.0E-3 1.6e-1 1.8e-3 510 1.7e-3 1.3e-3 8.3e-5 855 9.8e-9 6.3e-8 3.5e-9

#表示时间步长的数量。

从第一列中,我们可以看到,如果较小的网格无法减少错误相对耐受性太大了。默认公差需要降低。我们还发现,当网格太粗糙时,仅降低公差并不会减少误差。即使对于较小的公差,特定网格尺寸的误差也存在饱和。当公差降低时,时间步长的数量会增加(请注意,绝对公差与相对公差耦合)。在模拟过程中,前几步的时间步长下降,它们略有增加直到结束。最大的接受宽容是r = 0.0001在此示例中。对于足够小的公差,误差幅度取决于网格分辨率。请注意,更精细的网格不会给出更多的时间步骤。

我们进一步发现,通过减少公差因子从1到0.1,我们可以减少所采用的时间步数(未显示在表中)。原因是代数求解器对此设置的公差较低,并且代数误差对瞬态误差的污染较小。从求解器日志中,我们发现BDF顺序保持在5之前,直到模拟结束(否则,由于代数误差而减小)。总测量的误差保持在计算较小的时间步长时的级别大致相同。这是一个很好的例子,证明更紧密的公差可以使时间更有效(更快)步入。这也是一个很好的例子,说明如何在求解PDE时如何考虑空间和时间误差。

在此示例中,没有记录的失败tfail或者nlfail,BDF订单迅速从1增加到5,并在2到5之间变化(当公差因子没有减少)。对于这个简单的示例,代数求解器运行良好。我们也可以从常数(牛顿)自动(牛顿)并获得相同的行为,即使该求解器正在使用更昂贵的Jacobian更新策略(每次迭代)。为了自动非线性(牛顿)但是,求解器,我们发现nlfail迅速增加,我们平均每第二步都会失败。原因是该求解器从保守的阻尼因子开始,即使是出于良性问题,通常也不会在4次迭代中收敛。可以说明这些故障如何导致时间步长将时间步长降低至1E-5左右,而不是1E-3。(需要100倍的步骤!)这是对时间的表现的戏剧性恶化。非线性求解器的故障和较小的时间步长可以通过增加最大迭代次数为了完全耦合从4到6的求解器(使代数求解器有机会完成工作)。

对于选择,还观察到非线性求解器的频繁失败常数(牛顿)阻尼因子\ Omega = 0.5最大迭代次数限制为2。我们发现时间步长比以前小。增加公差因子到10,记录了失败nlfailtfail。弄乱代数求解器可能看起来很奇怪,但它可以用作一个不良设置的代数求解器,破坏了时间依赖时间的解决方案过程。这些错误也持续存在\ beta = 0被使用(线性问题)。增加公差因子进一步只给出错误tfail(代数求解器接受大错误)。

图形绘制X坐标的图形,以在comsol多物理中的许多因变量。
图表显示时间步长如何根据步长的倒数发生变化。

方案2:NLFAIL大于零

从求解器日志中,我们发现nlfail> 0

时间依赖性求解器在每个时间步骤中计算出代数问题(可能是非线性)的解决方案。每次代数求解器失败时,nlfail列是增加的。代数迭代的Jacobian(或Jacobians)的计算相对昂贵。因此,默认情况下,雅各布的重新评估很少(很少)Jacobian更新最小)。如果代数求解器不融合,时间步长会减少,则重新计算雅各布式(或雅各布人),并再次解决代数问题。这很昂贵。请注意,由于时间步长是Jacobian Matrix的一部分,最小雅各布策略还可能导致线性问题无法融合。

如果代数求解器失败,因为时间步骤变得太大,并且它一遍又一遍地发生,那么我们可以通过启用这种情况来改善情况非线性控制器时间步入设置,可以进行更保守的时间步长控制 - 尤其是对于高度非线性问题。

如果代数求解器仍然失败,请增加最大迭代次数。其次,更改Jacobian更新每次迭代(或至少要每次步骤一次)。接下来,我们可以尝试不同的加速度或鲁棒化方法。安德森加速隔离代数求解器。这可能有助于切换到完全耦合求解器(如果可用的内存允许的数量)。为了完全耦合求解器,降低恒定阻尼因子或使用自动的阻尼方法可能会有所帮助。

如果代数求解器仍未收敛,我们可以更改求解器日志详细的从而获得单个因变量的错误估计(如ComsolMultiphysics®版本5.5)。此信息不仅打印到日志视图,而且还显示在单独的收敛图窗户。有了这些信息,我们可以追踪哪个变量主导代数错误,这使我们深入了解收敛问题。请注意,因变量的误差权重受该变量的缩放率和绝对公差的选择影响。

直接影响代数求解器终止的另一个重要参数是公差因子。一个值1意味着代数问题的终止标准与本地时间步长误差大致相同。某些物理接口将此因素修改为较小的数字。增加此因素使收敛标准更容易实现,但与此同时,代数错误会污染解决方案的风险。选择此因素时需要注意一些护理。

代数求解器的故障也可能是由线性求解器的故障引起的。线性求解器有一个自动的误差检查机制可防止代数求解器终止。如果列中的数字用于Linerr和/或Linres在里面日志窗户不小。为了验证实际上是这种情况,我们可以设置检查错误估计对于线性求解器是的(在下面错误部分)。一旦有线性矩阵问题无法通过请求的准确性解决,这将停止时间步进的时间并出现错误。

为一个直接的线性求解器,我们可以通过实现迭代精致(请参阅错误部分直接的线性求解器)和选项在非线性求解器中使用。为迭代线性求解器,终止标准可以通过增加错误估计因素,但这必须谨慎完成,因为否则它可能会导致更多代数错误污染解决方案。

迭代线性求解器,请密切关注LinerrLinres数字。如果这些数字不够小,则问题可能是对求解的矩阵的质量不高。我们可以首先检查无需尝试调整前提条件,而是首先检查线性迭代求解器设置是否实际上是针对要求解的矩阵(使用的矩阵显示默认求解器)。

示例:多弯线圈的磁场

让我们研究使用正弦电流激发的铜多发射线圈的时间相关磁场磁场与二次元素的接口。铜线圈被空气包围,并被软铁片悬挂,该块具有非线性本构的关系(非线性B-H曲线)。

铜多弯线圈的3D模型。
由铜制成的多弯线圈的2D模型。

时代时间相关求解器设置为范围(0,0.1,10)和默认求解器设置(完全耦合,,,,常数(牛顿),,,,直接的, 和最小的Jacobian更新)和10 a的正弦线圈激发,我们发现跨越5个时期(结束时间10 s)的溶液在大约100个时步中实现。重要的是要注意,这种物理学的默认时间步长方案正在使用中间的设置求解器采取的步骤。结果,指定的输出时间在时间​​步骤中将上限为0.1 s。通过检查求解器日志可以看出这一点。如果激发增加到30 a,则需要降低按输出时间的上层步长约束(例如,总计约200个时步);否则就没有融合解决方案。

Let’s investigate the time-stepping behavior in more detail for a coil excitation of 40 A. The strategy to lower the maximum step constraint by means of the output times does not seem to be productive (even the step constraint, 0.001 s, is not working). For时代等于范围(0,0.05,10),我们发现几个失败nlfail在109个时间步骤之后,求解器确实会放弃错误消息:

求解器日志的屏幕快照20个时间步。

时间步长90至109的求解器日志的屏幕截图。
激发器的求解器日志40 A和默认设置,其输​​出间隔为0.05 s,用于多元电流线圈模型的磁场。

失败的原因可以在最后一行:10重复nlfail。10失败后,求解器在下一步之前放弃。在这一点上,它以1/4倍的倍数减少了时间步骤。这对应于1,000,000倍的时间步骤。步骤大小可能不是这里的问题。对于每次尝试,非线性求解器不会在最大迭代次数内收敛。

我们正在模拟五个整个线圈电流,10 s。由于零线圈电流的向量电势为零,因此我们需要对尺度进行一些思考。我们可以检查日志,并发现磁性向量电势已获得“ 1”的自动刻度。通过在求解器停止时绘制矢量电势,而求解器的电流不处于零交叉处,我们可以估计磁矢量电位的比例约为1e-2 wb/m。由于自动缩放的默认值是根据解决方案的规范更新绝对公差,因此最好将其更改为向量电位的手动缩放。

更改求解器设置的策略

让我们遵循上述方案2下的建议程序。

  1. 改成手动缩放对于磁矢量电势,至1E-2。通过再次尝试,不改进。
  2. 改变最大迭代次数为了完全耦合求解器到10。通过再次尝试,没有改进。这似乎是一个相当非线性的问题。
  3. 改变Jacobian更新策略每次阶段一次。通过再次尝试,我们发现解决方案是在大约200个时间步骤中实现的,没有报告任何失败nlfail(但是我们仍然无法放松时间步长的约束)。
  4. 改变Jacobian更新策略每次迭代。通过再次尝试,我们看到这确实有所作为!我们现在可以解决自由的时间步入28个时间步长(错误稍大,但误差估计仍可以满足规定的公差)。
  5. 接下来,我们需要问问自己的结果是否与中间的时间步进和最大步骤0.05 s是准确的结果。向量电势被计算为约1E-2 Wb/m,除了在零交叉点(在t = 0.5 s的倍数处),其中它约为1e-16 wb/m。缩放似乎是正确的。制作解决方案的副本以供参考,并以更严格的公差进行新的计算。
  6. 通过更改相对耐受性在研究为0.0001。请注意,这也对应于加强绝对耐受性。通过解决100次小型公差的问题,我们对模型进行了艰苦而良好的测试。它再次花费大约200个时间步骤,并增加5%的代数迭代。没有失败nlfail和不tfail。该计算结果和副本之间的名义差异为1E-5 WB/M的顺序,因此我们可以得出结论,时间离散化具有较小的错误。在此博客文章中未考虑空间错误。
  7. 为了激发100 A的激发,具有调整后求解器设置和最大时间步长的解决方案仍然产生结果,结果少于1%的误差中间的时间步进和默认公差。

在此实验中,我们发现默认的求解器设置对于10-A激发非常好。如果打开激发,则非线性效应要强得多。对于求解器而言,这是低成本和健壮性之间的权衡。在更非线性的政权中,我们必须手动增加鲁棒性。另一方面,在降低激发的情况下,更健壮的设置将给予性能处罚。

方案3:TFAIL大于零

从求解器日志中,我们发现tfail> 0

时间相关求解器采取的时间步的故障意味着无法满足相对于公差的误差,并且需要以较小的步长重复时间步长。新的步骤大小是通过先前概述的机制确定的。对于每个失败,tfail列是增加的。这应该被视为时间步长控制器的故障,因为它不能正确预测局部误差的正确变化。

该步骤的时间步骤和重新计算的减少是紧急操作。如果这是由于解决方案中的瞬态而发生的(由于其非常短暂的性质),那么这可能很难改进(而不必为所采用的步骤添加更多控制)。另一方面,如果这种情况定期发生并且没有任何解决方案瞬变,则会有改进的空间。

一个常见的原因是,误差估计不平稳,因此从步骤到步骤都有很大的变化。这是由使用的低阶(与BDF求解器)所表现出来的。有时,减少相对耐受性,或减少代数公差因子抑制代数错误是补救措施。当解决PDE问题时,原因也可能是空间网格太粗糙。补救措施可以是完善网格或引入更多的空间稳定。这种情况的最后手段是使用手动的相反的时间(为此tfail是不可能的,但也没有错误控制)。进一步的选项包括使用较小的初步步骤或应用最大步骤约束在里面时间步入部分。

两个都nlfailtfail也可能增加。代数求解器的误差可以连接到时间步长选择机制的失败。在这种情况下,应调整代数求解器和时间步变机制。但是,只有在提出问题的情况下,这种策略才能成功,否则所有赌注都关闭了。

示例:流体阻尼器

流体阻尼器示例建模用于冲击隔离或抑制地震引起的摇动和风引起的振动的设备。该模型模拟了设备中粘性加热的现象。

该模型是时间步长如何在模拟过程中变化的一个很好的例子。使用默认求解器设置,记录了几个故障tfail

图绘制模拟时间步长的变化。
显示流体阻尼器模型的仿真结果的图像。

让我们看看如何防止这些失败以及如何改善模拟的性能。由于周期载荷,流体会互换上下移动。这意味着速度和压力梯度场将改变方向并经过零交叉(在短时间内所有DOF)。在这种情况下,绝对公差的自动更新会导致并发症,因为绝对公差将在转弯点附近获得很小的值。通过检查日志并将其与周期性活塞位移进行比较,事实证明tfail发生在这些点附近。另一方面,鳞片差异很大。

第一个想法是关闭更新缩放的绝对耐受性与时间相关的求解器上的复选框绝对宽容部分。这不起作用。请注意,在代数变量设置部分,误差估计被设定为排除代数公差因子为了压力(comp1.p)设置为0.05。

让我们尝试在变量节点上使用手动量表因变量节点。放方法在里面缩放部分手动的并使用规模1E7压力,1E2温度和1e1速度场地。另外,使用公差因子压力和温度为0.1,速度为0.5。没有更多tfail,但相反,有6个nlfail。主要好处是仅使用大约400个时间步长而不是1300。nlfail可以通过设置最大迭代次数隔离节点为15并设置迭代空间的尺寸例如,安德森加速到8。这些更改节省了很多计算时间。

示例:放大器电路中的电感器

放大器电路中的电感器示例说明了如何将电路模拟与有限元模拟相结合。在此博客文章的背景下,这是调整公差因子优化时间步态方案的行为。在这种情况下,额外的代数步骤最小设置Jacobian更新足以保存工作。在模型中存储的求解器设置后,我们发现固定和时间依赖性研究2的解在170步中,10tfail,1nlfail

通过降低公差因子到0.1并增加最大迭代次数到6,我们发现步骤数减少到127tfail和0nfail不触摸设置Jacobian更新。其余tfail起源于初始步骤。例如,例如将初始步骤降低到1e-9s,也可以避免它们。但是,这是边缘的好处。在此示例中,更严格的公差也导致更有效的解决方案过程。

关于自动时间步骤和订单选择的结论

在这篇博客文章中,我们介绍了求解器设置中“旋转”的策略,以及从与时间相关的求解器日志中阅读的内容。有关这些主题的更多信息可以在Comsol的知识库中找到。

相关资源

从Comsol知识库中了解这些文章的更多信息:


评论(0)

发表评论
乐动体育app
加载...
探索comsol乐动体育赛事播报博客