NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
降阶模型是从更复杂的物理模型派生的计算量减少的模型,其目的是减少模拟模型所需的时间。这通常是通过在一组参数下多次解决给定问题,然后从中推导出一个更简单的模型来完成的。
ROM 可能有不同的用途:
- 如果最终需要实时计算,它们会很有用。例如,在构建数字孪生时,人们需要实时模拟设备的功能。这不能通过普通的模拟技术来完成,因此在这种情况下需要构建 ROM。
- 在构建一个非常大的系统级仿真时,对每个部分进行仿真并构建 ROM 然后将它们组装在一起会很有用。这将大大降低整个系统模型的仿真时间和内存使用量。
- 优化零件的设计通常需要执行大量模拟来微调所有参数。这样做时,使用第一次模拟的结果来加速未来的模拟可能是相关的。
正如你已经想象的那样,由于该技术涉及执行许多训练模拟,因此在这种情况下,云上的分布式计算非常重要。
在本文中,我们将看到主要的归约技术是如何工作的。然后我们将展示该技术的具体应用以及基于 Python 的PyMOR 库 和 FeniCS 的实现,并在 Qarnot 的平台上完成计算。
我们将首先介绍主要的归约技术。这将需要解释物理方程通常如何通过数值技术求解。如果你不熟悉数学,请不要担心,我们不会在这里深入细节,而只会介绍使用的想法。
1、偏微分方程
首先,让我们定义要解决的问题类型。物理现象,例如通过金属部件的热量传播、平面周围的空气流动或电磁波的传播,都可以用数学方程来描述。这些陈述了物理量的时间和空间变化之间的关系。例如,热方程告诉我们温度如何根据其在某一时间点的空间分布随时间变化。在三个维度上,热方程可以写成:
2、离散化
关于这些偏微分方程有两点需要记住:
- 它们是关于函数的方程。未知数是将值域中的每个点和范围内的每个时间关联的函数。例如,如果我们要查看热量的传播,我们将寻找温度函数 T(t, x, y, z)。因此,这些问题涉及无限量的数据。相反,我们不是在研究只描述宏观数量的模型,比如整个飞机的速度。这种无限的性质使方程式求解相当困难。
- 这些方程将温度随时间的变化与空间的变化联系起来。这就是使它们成为偏导数方程(PDE)的原因。为了理解为什么会出现这些偏导数之间的联系,让我们以温度为例。温度随时间的变化(例如它的时间导数,∂T/∂t)取决于热量的流动。然而,热量从高温点流向低温点。因此,热流的表达涉及到空间温度的变化(∂T/∂x,∂T/∂y,∂T/∂z)。方程将不同的偏导数联系在一起这一事实使得它变得更加困难。
通常不可能在数学上找到这种偏导方程的解。事实上,一些常见的偏微分方程非常难,以至于数学家很难证明任何关于它们的东西。Navier-Stokes 方程(描述流体的流动)就是这种情况,它还没有证明总是存在一个平滑的解决方案(这个问题实际上有 100 万的奖金)。
因此,工程师和科学家通过数值方法寻找近似解。在这些问题中,一些参数可能会发挥作用并且可以改变。例如,如果我们决定用另一种材料替换一种材料,或者我们研究不同可能性的使用,它们可能是材料的物理特性。参数也可以是环境温度,或飞机速度等。由于这些原因,我们可能有相同的几何形状和相同的模型,但是每次我们想研究新集合会发生什么时,我们都需要计算解的参数。
为了数值求解方程,第一步总是从给定的无限方程中推导出一个有限模型。事实上,正如我们所看到的,我们试图求解的模型包含无限数量的未知数,因为我们必须找到每个点和时间的值。这不能由计算机完成,因为它只有有限的内存和计算能力。因此,我们需要使这个问题有限。有几种技术可用于执行此离散化过程,但它们通常共享相同的两个步骤:网格化和方程离散化。这两个步骤都在下面解释。
3、网格化
这一步的思路是说,由于我们无法计算每个点和时间的值,我们只会计算一些点和时间的值。然后,当我们需要知道给定点的值时,我们将使用已计算值的相邻点来推断它。例如,它可以通过线性插值计算(例如取相邻点的平衡平均值)。
一个基本的例子如下。考虑一根长度为 10 的加热金属细条。然后,这块只有一个维度,我们可以将长度分成若干段(假设为 5)。如果我们知道每个极端点的温度,我们可以创建一条接近真实解的线性曲线。
这个过程的中心思想是,现在,我们正在寻找的解决方案完全由有限数量的信息描述。在这里,它是 0、2、4、6、8 和 10 处的值。因此,我们可以说我们现在正在搜索解的空间具有有限维数(此处为 6),或者解具有有限维自由度数 (DOF)。
在更高维度中,离散化空间通常涉及构建网格,将对象划分为小三角形或四面体。在这些基元中的每一个上,最终函数都是线性的。这是 3D 块的网格化。
另一方面,时间很容易通过将总时间窗口切割成小的时间步来离散化。
要理解降阶(reduction order)技术,重要的是要注意,类似于说函数是某些点的值的插值并且它是一些简单函数的线性组合。如果我们回顾之前的例子,可以看到完整的解是用点表示的六个函数的总和:
这些基本函数中的每一个都是更“原始”函数的缩放版本,其值在一个点为 1,在另一个点为 0(这里的值为 10,所以我们可以看得更清楚)。
在数学语言中,这 6 个基本函数被称为我们解决方案空间的基(basis)。这意味着我们正在寻找可以表示为这些函数的线性组合(例如,这些函数的加权和)的解决方案。
4、方程推导
现在我们的问题已经被限制在有限的自由度上,我们必须使方程适应那种解。数学中有一条原则指出,要使系统具有唯一解,则方程的数量必须与自由度一样多。
有不同的技术可以用来做到这一点。最简单的方法是在每个点重写方程,通过 (T(x+Δx) - T(x))/Δx 来近似空间导数,例如通过与相邻点的差异。这被称为有限差分法(Finite Difference Method),虽然它是最简单的一种,但很少使用。最常用的一种是有限元法(FEM)和有限体积法(主要用于流体动力学)。
下面是有限元方法的简要说明。如果你对细节不感兴趣,或者你已经知道了,你可以跳到下一节解释模型降阶的核心思想。
5、有限元法
为了理解有限元方法(Finite Element Method)背后的想法,我们可以回到金属棒的热方程和更自然的有限差分技术。在这种技术中,我们通过与相邻点的差异来近似一个点的导数:∂T/∂x = (T(x+Δx) - T(x))/Δx,其中 Δx 是与下一个点的距离。问题是,正如我们所见,我们将差值除以 Δx 得到一个斜率。如果想要一个精细的网格进行精确计算,那么 Δx 将非常小。因为我们除以那个非常小的数字,∂T/∂x 可以变得非常大并且对数值误差非常敏感。在热方程中,情况更糟,因为我们考虑了在 Δx² 上的二阶导数。
因此,有限差分法是相当不稳定的。它的其他缺点之一是关于该技术的定理不多。例如,我们在使用这种技术时所犯的错误几乎没有结果。
为了解决有限差分的不稳定性问题,有限元法的思想是使用求导的相反运算,积分。由于积分像平均值一样运行,因此它使模型更稳定似乎是合乎逻辑的。但是,在整个域上进行积分会导致信息丢失。事实上,并不是因为两个函数具有相同的平均值,它们就相等。为了解决这个问题并保持函数方程的丰富性,我们将两边乘以一个函数,称为测试函数(在大多数情况下写成 v)。它可以看作是一个只保留部分未知函数的窗口函数。这一次,如果两个方程在每个窗口上具有相同的均值,那么我们可以期望它们相等。事实上,在正确的假设下,我们在两个公式之间存在等价性。
右侧的方程称为弱形式方程,是有限元法中使用的方程。修改表达式后,FEM 的核心思想不仅是在有限维 n 的空间 Vh 中寻找解,而且在同一空间中用函数 v 对其进行检验。由于 Vh 是有限维的并且方程在 v 中是线性的,因此验证 Vh 中所有 v 的方程等效于验证其基 (v1, …, vn) 的所有元素。这自然会导致一组 n 个方程。通过考虑 n 个系数 λ1, …, λn 使得 T = Σ λivi,我们得到一个具有 n 个未知数的 n 方程组。这个系统可以系统地解决。
作为结论,有限元方法在于将方程改写为另一种形式,即弱形式,其中涉及一个测试函数。离散化是通过使用与解空间具有相同自由度的测试函数来完成的。出于数学原因,碰巧因为我们使用了一个弱公式,我们有更多的数学结果,并且对这种技术有更好的理解。例如,Céa 引理给出了我们使用这种离散化技术所犯错误的上限。更准确地说,它给出了实际解决方案与我们的解决方案空间中该解决方案的最佳近似之间的距离的上限。
6、模型降阶
模型降阶的核心思想是在一个特定的基上寻找一个解决方案,它只包含几个元素,但我们知道这足以描述这些解决方案。当我们不知道解会是什么样子时,网格划分部分中举例说明的基类型非常相关。事实上,它提供了很好的灵活性,我们确信我们将能够很好地描述域上的任何功能。然而它也很朴素:
- 首先,我们可以预期解决方案的自由度在某种程度上与参数的数量相当。一个网格可以包含数百万个点,而我们通常只考虑少数几个参数。
- 其次,这个基的元素计算简单方便,但根本不是物理的。实际上,在这些元素中,一个点的值与相邻点完全不相关,而实际上,附近点的值之间存在很强的联系。举个例子,同样的事情也发生在数字图像上。描述一个图像的最基本的方法是告诉每个像素的颜色。这是一个方便和简单的描述,但它没有使用一个像素的颜色通常与周围的颜色相近的事实。从这个评估中,人们有了用其他基(使用傅里叶分解)来表达图像以压缩图像大小的想法。这是图像压缩和 .jpeg 等文件格式的核心
因此,我们的想法是使用全阶模型模拟一些解决方案,然后从中推导出一个更小的基,这个基将能够表达接近全阶的解决方案。然后,我们只需要在这个新的解空间中推导方程。由于该空间的自由度数量有限,因此导出的模型将仅包含相同数量的方程式。因此,几乎可以立即解决。此外,由于解空间被构建为能够描述接近真实解的解,我们知道从我们的降阶模型导出的解将接近全阶解。
关于模型降阶的基础知识并不多。我们现在可以探索一些方法来建立减少基。构建它的最基本方法是简单地进行一些模拟并直接使用解决方案来制作基(我们只会对基进行正交归一化)。但是,可以做得更好。下面是一些可以使用的算法的快速描述。
7、建立约简基的一些算法
适当的正交分解
这种技术接近于一种称为 PCA(主成分分析)的技术,这是一种在数据科学中非常常见的技术。这个想法是提取尽可能描述一些向量的低维基础。因此,当使用 POD 时,管道首先执行一些模拟(比如 100 次),然后提取一个更小的基(比如 20 次),以尽可能地描述获得的结果。
强贪心算法
在这个算法中,想法是逐步建立基。从一组结果开始,我们将选择一个作为归约基的第一个向量。创建与基相关的降阶模型,并且可以从一组参数计算所有其他值的解。然后,将全阶和降阶之间差异最大的解添加到基中。在这样做的过程中,我们降低了描述最差的解决方案的错误。然后一遍又一遍地重复这个操作,直到我们达到所需的向量数量。
弱贪心算法
上述两种算法需要为训练集的每个参数计算解决方案。在弱贪心算法中,我们将遵循强贪心算法的方法,但是,我们不需要计算所有精确解,因为误差不是计算的,而是仅从 ROM 估计的。
要了解有关这些算法的更多信息,我建议阅读本教程,其中更深入地了解了这些算法的工作原理及其优缺点。
原文链接:Introduction to reduced order models
BimAnt翻译整理,转载请标明出处