加速模型收敛与符号分化

2020年10月29日

您是否知道ComsolMultiphysics®软件包含符号分化引擎,每当您设置并解决非线性问题时会自动使用?此功能可确保在求解此类模型时该软件的较高鲁棒性,但确实有一些成本。今天,我们将在一些不同的例子中研究这种能力,并研究其收益和权衡。

解决一个简单的非线性问题和符号分化

首先,让我们研究一个相对简单,单一的自由,非线性问题 - 隐式方程:

t = q/(1+t^2/100)

我们可以说t代表系统的总温度;代表热负荷;以及上述方程式的分母,(1+T^2/100),代表系统导电。

我们想解决参数的不同值。解决此类非线性问题的解决方案可以通过抑制牛顿的方法,可以通过写出残差来在comsol多物理学中完成:

r(t)= t-q/(1+t^2/100)

然后将其输入全局方程接口,如下屏幕截图所示。

comsol多物理学中全局方程接口的屏幕截图,具有求解非线性方程的残差。
全局方程界面,用于求解我们的非线性方程。

我们可以解决此方程的一系列不同值并绘制解决方案,如下所示。

图将解决方案绘制到具有单个自由度的非线性问题的解决方案。
解决单一自由的非线性问题。

出于说明目的,让我们绘制一系列值的残差t,以及针对的选择值,在下面的图中。零交叉处的点是上述图的解。

图绘制Q不同值的残差的图,该Q表示非线性问题中的热载荷。
剩余的绘图,用于参数的不同值。的价值t从零交叉开始是非线性方程的解决方案。

让我们还绘制相同范围的残差(雅各布)的相应衍生物t和值以下。

图绘制残差的衍生物的图形,以q。
残留的衍生物的图,以不同的值的不同值

我们看到,增加了,Jacobian是一个更非线性的函数。我们还可以(对于这种简单的情况)手动写出衍生物:

\ frac {\ partial r(t)} {\ partial t} = 1+\ frac {2tq} {100(1+t^2/100)^2}

请记住,该软件可以自动通过符号分化并在牛顿步骤中使用它。

现在,是残留物的第二部分的分母使该表达有点复杂(回想一下,可以将该术语视为系统的热电阻)。事实证明,如果我们愿意,我们可以通过包装来忽略这个术语nojac()关于分母中的术语的操作员:

r(t)=(t  -  q/nojac(1+t^2/100))

并修改全局方程,如下面的屏幕截图所示。

comsol多物理中的“全局方程设置”窗口演示了如何使用nojac()操作员。
屏幕截图显示如何使用nojac()操作员。

结果,nojac()符号分化引擎将忽略操作员。也就是说,该操作员内的条款对雅各布没有任何贡献。残余的衍生物相对于t现在简单:

\ frac {\ partial r(t)} {\ partial t} = 1

我们可以检查一下,这种简化的衍生物只是低值的良好近似值,其效果是求解器无法收敛到解决方案的所有值。因此,我们通过避免使用某些术语(在这种情况下)的开销(在这种情况下)的开销(在这种情况下很小)使问题变得更加简单,但是在某些情况下我们使其无法解决。

在comsolMultiphysics®中使用NOJAC()操作员

我们还考虑其他几种可以使用的方式nojac()操作员。

如果我们要编写我们的全局方程式:

r(t)= nojac(t  -  q/(1+t^2/100))

然后,衍生物将完全为零,并且根本无法解决此问题,因此这种情况并不有趣。

我们也尝试申请nojac()仅一个学期:

r(t)= t  -  q/(1+nojac(t)*t/100)

现在,我们的导数是:

\ frac {\ partial r(t)} {\ partial t} = 1+\ frac {tq} {100(1+t^2/100)^2}

这非常接近确切的残差,至少在这种情况下,求解器将收敛于所有值,即使是雅各布的近似。尽管计算成本尚未下降,但这里值得注意的是我们可以应用nojac()操作员到我们剩余条款的任何子集。

那么,到目前为止,我们学到了什么?

  1. 您可以使用nojac()操作员省略对雅各布的贡献的条款
  2. 省略术语将影响非线性求解器的收敛性
  3. 省略术语减少了计算模型的大小

不过,最后一点并不是这个小例子那么明显。

减少大型非线性模型的大小

现在让我们看一下三个维度的较大型号。我们在1厘米立方体上解决了传热问题,并应用非常好在这部分上网格,为我们提供更大的模型;约300万自由度。

带有标记的参数的传热问题的示意图。
简单的传热问题的示意图,以使用极为细的网格进行调查。

我们还将材料属性成为温度的函数,并使用类似于已经看到的材料属性,我们通过用户定义的表达来定义材料导热率:

(1+(t [1/k])^2/100)[w/m/k]

这是直接在物理接口中完成的,如下屏幕截图所示。

用手动定义的温度电导率设置在固体接口中进行传热的设置窗口。
热导率手动定义为温度的函数。

当我们使用所有默认设置解决此问题时,该模型将需要抑制牛顿方法的四个迭代来求解,花费大约135秒的墙壁锁定时间,并在典型的台式计算机上使用12 GB的内存超过12 GB。在解决方案过程中,我们还会在日志中收到一条消息:

发现非对称矩阵。

此消息是材料特性中温度依赖项的结果。也就是说,材料属性中的非线性项使雅各布矩阵非对称,因此模型将需要更多的记忆来解决。现在让我们将整个材料属性表达式包装在nojac()操作员:

nojac(1+(t [1/k])^2/100)[w/m/k]

重新设计了该模型,我们看到该模型仍然收敛,并需要大约10 GB来解决,但是现在需要进行五个默认阻尼牛顿方法的五次迭代。也就是说,内存需求已经下降,但是收敛的迭代次数已经上升。最有趣的是,壁式解决方案时间为125秒,比以前少一点!为什么是这样?求解器需要更多的迭代来收敛,但是每次迭代需要更少的时间,因为雅各布矩阵是对称的,并且需要使用较少的数据。

因此,在这种情况下,使用nojac()尽管需要更多的迭代来收敛到解决方案,但操作员既减少壁锁解决方案时间并减少了所需的内存!另请注意,我们收敛到同一解决方案,因为使用更新的材料属性表达式仍然正确评估了材料属性本身。

避免非本地耦合术语

让我们再说一个例子:粉碎一个含有可压缩气体的薄壁容器,如下图所示。这可以用结构力学模块中可用的配方。

带有可压缩气体的薄壁罐的模型,并承受外部负载,演示了如何使用符号分化来加速模型收敛。
一个薄壁的储罐,其中包含带有外部压碎负荷的可压缩气体。

经过利用对称性,我们可以将模型减少到完整模型的1/8。我们应用分布式载荷,该载荷近似于压碎,以及代表内部压缩气体的压力载荷。为了表示可压缩气体,我们使用计算变形容器体积的方法,类似于我们的示例中所做的事情压缩充满空​​气密封的密封。也就是说使用集成耦合操作员,我们在储罐的整个表面上施加均匀的压力载荷,并根据整个储罐的变形计算这种压力。

这种非局部耦合的效果是,储罐的每个部分的变形会影响压力,压力会影响到处的变形,因此我们的Jacobian矩阵变得非常密集。当使用默认设置解决此问题时非常好网格设置,该模型需要大约12 GB的内存和400秒来解决这个约22,000度的自由模型。

面部负载设置窗口显示了修改后的压力作为压碎坦克模型的输入。
屏幕截图显示了压碎罐模型中的修饰压力。

但是,只需包装nojac()操作员关于我们的施加压力,我们省略了非本地耦合,并且记忆要求和解决方案时间降低了。这样,我们只需要3 GB的内存和10秒即可收敛到同一解决方案!

总结思想

默认情况下,该软件将始终采用确切的Jacobian,因为这为我们提供了收敛的最大可能性。通常,我们宁愿牺牲一些时间和记忆来尽可能鲁棒。但是,我们看到我们确实具有省略Jacobian矩阵中选定术语的能力和灵活性。如果我们想使用此功能,我们必须明确修改材料属性,修改基础管理方程式,或在模型中写下我们自己的变量表达式,因此这是一个高级用户功能。

当然,使用此功能将近似雅各布,这有时会减慢甚至预防收敛性,因此在这种情况下不要使用它。但是,如果模型确实与nojac()使用运算符,然后它仍然会收敛到与完整的Jacobian评估相同的解决方案,并且可能会使用更少的时间和内存,因此当您构建复杂的多物理模型时,它是一个很好的功能。


评论(0)

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