COMSOL Multiphysics® 仿真的输出结果中往往包含一个或多个物理量。根据物理量的数量、几何的复杂性和得到足够精度结果所需的网格密度,仿真可能包含数百万个自由度(degree of freedom,简称 DOF)。通常情况下,只需储存一个或几个标量,或小型几何零件的结果便足够了。在这篇博客文章中,我们将探讨可用于存储选定输出量,以及减小模型文件大小和缩短显示数据所需时间的工具。
存储重要仿真结果的两种方法
在 COMSOL Multiphysics 中,您可以通过两种方法使仿真输出中仅包含选定部分的解。第一种方法是定义一个或多个选择,并在选择中添加目标点、边界或域,这样便可以控制研究输出,使其仅包含这些选择所指定几何部分的物理场。如果您只想获取特定几何部分的仿真输出,同时能像往常一样对其进行后处理并访问场和导出量,这种方法将会十分简明实用。
请注意,如果您要存储某些边界或点上的解,该方法只能保存求解物理量(因变量)的结果。这便意味着因变量导数以及与导数相关的物理量(例如应力和通量)均无法获得,因为计算这类变量需要用到域内的因变量结果。如果您希望存储一些派生结果(例如数个相关的边界或点上的应力),那么第二种方法是您的最佳选择。
第二种方法是添加常微分和微分代数方程接口,从而定义一个新的因变量,然后将目标物理量转换为这个新变量。这个物理量可以是一个全局标量,例如某个量的最大值或平均值,或者某个边界上的物理量。(对于后一种情况,上文的选择法能够更方便地获取相同的结果。)也就是说,若您的目标输出是一个全局标量值,并已经将它转换成简单代数方程变量所表示单个自由度,那么该方法十分适用。如上所述,如果您希望获取的物理量是一个基于导数的派生结果(例如应力和通量),第二种方法也将适用。
创建选择以存储选定部分的解
为了只对选定几何部分的解进行储存,我们需要在模型树中“组件”下创建一个命名选择。具体步骤是:首先右键单击定义,并从选择子菜单中挑选一个合适的选择。若您希望在选择中加入多个特定的几何实体(例如域、边界或点),那么显式选择必然最为方便。随后为选择节点添加一个描述性标签,例如周围空气或衬底接触。您可以使用多个选择节点来表示不同的几何部分,并将它们组合在一起,这样您就可以用于确定输出的存储对象,或者对这些选择节点进行布尔操作(例如并集或交集)来创建另一个选择节点。最后,将所创建的选择应用到研究步骤的设置中,最终确定存储特定几何部分的解。
应用案例:用于存储机械设计中顶面变形的选择
在固体力学仿真中,目标面或点上的变形(位移)值很可能是有价值的信息,因此只需存储它们的仿真输出就足够了,例如下方“图形”窗口中进料器夹钳模型几何的选定顶面。
固体力学仿真模型的选定表面。
为了仅存储这些表面(边界)的解,我们要创建一个显式选择,并将选择中的输入实体设为几何的四个顶面,也就是计划存储的解所对应的几何结构。如果需要存储的面或点并非所创建的几何结构的一部分,您可以在几何序列中额外添加曲线或点节点以分割边界,或者在目标位置上添加一个点(和一个网格节点)。显式选择节点的设置如下图所示。
显式选择节点的设置。
在这里,为了反映选择中包含的对象,将标签更改为变形面。
现在可以指定需要存储的对象。在研究步骤节点的设置窗口中找到因变量值一栏,并对其进行扩展。这一栏包括在输出中存储物理场设置,您可以从它的下拉菜单中选定用于选择,然后单击添加按钮,便打开了可用选择的列表。在本案例中,我们选中变形面这一选择,然后单击确定。
用于存储选定几何面变形的设置。
现在,您便可以运行仿真了。此时仅会输出顶面的解,您可以用表面绘图的形式来查看输出结果。
选定的几何面在y轴方向上的位移。剩余几何结构没有解输出。
对于点上的解,您可以利用派生值下的点计算节点对其输出进行后处理、显示总位移,以及执行其他操作。您还可以使用一维绘图组下的点图节点绘制点上位移随时间变化的曲线,或者随参数化扫描中的参数变化的曲线。
创建存储在输出中的目标变量
如果您感兴趣的是一个标量,便只需要一个表示输出中该物理量的单个自由度(变量)。您可以通过全局常微分和微分代数方程接口来定义全局方程,随之创建作为简单代数方程求解量的变量。这个接口以及类似定义域内或点上的常微分和微分代数方程的接口,都位于添加物理场窗口和“模型向导”中的数学 >常微分和微分代数方程接口下。最后,在全局方程节点的设置窗口中定义希望仿真输出的变量名和代数方程。
除此之外,标量耦合算子同样也是 COMSOL Multiphysics 中用于实现这一目标的重要特征。借助这些极其强大的工具,您可以在模型中创建全局可用的标量。
应用案例:表示平均温度的变量
假设您的研究重点是模型几何中的平均温度。为了获取平均温度值,您可以添加一个平均值耦合算子(例如aveop1
),并对其进行设置,使之在整个几何结构(所有域)或目标域内有效。随后,您可以将该算子应用到全局代数方程中,并保证它作为标量存储在仿真结果中。假如您想要存储的是最高温度,那么可以使用最大值耦合算子。
全局常微分和微分代数方程接口可用于求解
不过在这个案例中,我们只需要将方程的变量值设置为等于平均温度值。因此,若您已经将代数方程的变量定义为avtemp
,便只需输入aveop1(T)-avtemp
即可。请记住,全局常微分和微分代数方程接口表示表达式等于零,因此求解的方程为avtemp = aveop1(T)
。在这里,T表示几何结构中的温度场,我们要对该变量进行求解,但并不需要将它存储在输出中。下方屏幕截图显示了本案例中全局常微分和微分代数方程接口下全局方程节点的设置窗口。
全局方程节点设置用于创建一个存储在输出中的变量。
请注意上图中设置窗口内的单位栏。为了避免单位不统一,并保证求解变量的单位正确无误,您应当对因变量和源项的单位分别进行设置。
最后一步是对仿真进行设置,使其仅存储刚刚定义的新标量变量。下图显示了瞬态仿真中几何结构的平均温度变化曲线,此图表是通过一维绘图组中全局绘图得到的。
平均温度随时间变化的曲线,我们将其作为瞬态仿真中唯一的标量输出进行计算。
控制输出中的存储对象
对于要执行的研究,首先右键单击研究节点并选择显示默认求解器,以便能顺利地访问求解器配置。然后,通过单击求解器配置 > 解 > 因变量来访问因变量设置。对于上文的案例,您会看到两个节点:物理场节点(温度)和状态节点(平均温度)。物理场节点表示几何结构的整个温度场,而状态节点表示平均温度的变量。
接着,单击温度节点以显示其设置窗口。查看通用栏的底部,并清除在输出中存储复选框,这样求解器便不会将温度场存储在输出中。
在温度节点设置中清除输出中存储复选框。
完成求解后,您可以通过全局计算节点将需要查看标量变量结果显示在图表中,同时还可以绘制全局图表,以显示位移随时间变化的曲线或平均温度随参数化解参数变化的曲线。因为没有场变量的解,所以只要绘制显示了这类变量,或者是使用这类变量的物理量,绘图中的值都会显示为零。
应用案例:顶面有效应力的代数方程
现在让我们以进料器夹钳模型为例,向您演示如何使用代数方程来存储顶面上的有效应力(von Mises 应力)值。进行这一操作前,首先需添加边界常微分和微分代数方程接口,此接口位于添加物理场窗口和“模型向导”中的数学 > 常微分和微分代数方程接口下。
接着,在边界常微分和微分代数方程接口的设置窗口中将相同的位移边界选择应用于顶面。然后务必确保指定单位与应力量相匹配,完成此操作需要选择应力张量作为因变量物理量和源项物理量的单位。实际上,它是固体力学接口的 von Mises 应力。
用于创建机械应力的边界常微分和微分代数方程接口设置。
然后在分布式常微分方程子节点中将代数方程的表达式定义为bndstress-nojac(solid.mises)
,并使新因变量bndstress(仅定义在顶面)的值等于固体力学接口的 von Mises 应力 (预定义的solid.mises变量)。
此处需要使用nojac()
算子,这是因为我们不希望该方程对整个模型的 Jacobian 矩阵(系统矩阵)有任何贡献。在分布式常微分方程子节点设定区的源项中输入该表达式,并将所有其他系数设置为零,以求解方程0 = bndstress-nojac(solid.mises)
(即bndstress = nojac(solid.mises)
)。
分布式常微分代数方程节点的设置,该设置用于定义边界应力的代数方程。
在进行求解之前,一定要记得清除输出中存储复选框,该复选框位于求解器序列中因变量下的位移场节点内。随后即可执行计算,并只存储顶面上的应力值,同时可使用表面绘图对结果进行绘制。
绘图显示了 von Mises 应力,其中只有顶面的应力值存储在输出中。
借助存储解技术优化仿真
正如我们今天演示的,只需简单的几步操作,便能在仿真中只对部分物理场、甚至是一个或多个感兴趣的目标标量进行求解,从而将这些指定对象存储在输出中。这些建模技术不仅可以大幅度压缩模型文件的大小,还能缩短计算和显示目标标量的时间。如果仿真中包含大型参数化扫描,或者需执行详细的长时间瞬态研究时,这一技术带来的优势便更加明显。
如您希望了解 COMSOL Multiphysics 中更多用于优化仿真工作流程的工具,请浏览“COMSOL 博客”中的核心功能分类下的博客文章。如果您对本文演示的建模技术有任何疑问,请随时联系我们。
评论 (0)