借助模型方法自动完成物理场选择和研究

2017年 6月 28日

想象一个场景:您在某些假设前提下求解了一个模型,却在分析结果时发现这些假设不成立,所以不得不添加新的物理场特征或改变研究类型来修正分析。那么,如何将这一过程自动完成呢?今天,我们将讨论如何使用 COMSOL Multiphysics® 软件 5.3 版本中新增的模型方法功能来实现这一自动操作。

自定义求解过程的优势

我们经常会根据部分信息做出建模决策。例如,流体流动会一直保持层流状态还是会变成湍流?固体会保持弹性,还是会在指定的载荷和约束下变成塑性?变形是否大到应当运行几何非线性分析,还是适合小变形理论?有时,极限分析可以解答这些问题。如果我们能在求解之前知道问题的答案,就可以直接选择合适的模型。如果不能,一个低成本的办法是先求解简单模型,然后只有在求解无效的情况下,才切换为更复杂的模型。

举例来说,第一步完成弹性分析,然后只有当第一个分析得到的最大应力高于弹性极限时,才转换为弹塑性分析。类似地,先假设求解层流,然后在第一个分析得出的雷诺数足够高的情况下,再在模型中引入湍流。

根据初步结果,有时我们不得不改变建模方法,所以工作流程自动化可以减少大量工作。第一项研究所输出的信息还可以重复使用,以提高后续研究的计算效率。今天,我们将演示如何通过编写代码来自动完成弹塑性分析。代码会运行弹性分析,检查最大应力是否超过材料的屈服应力,并在必要时运行塑性模型。

在 COMSOL Multiphysics® 中创建模型方法

在 Windows® 操作系统平台中使用 COMSOL Multiphysics® 软件时,您可以开发拥有自定义用户界面的仿真 App,并通过编写方法添加更多功能。在Windows® 系统中构建的仿真App,可在任意操作系统中运行,还支持与同事、客户和学生们分享。

在 COMSOL® 软件的 5.3 版本中,我们发布了一个名为模型方法的新功能。它支持通过在 COMSOL Multiphysics 图形用户界面(GUI)中编写代码来扩展软件功能,即使您不打算开发 App 也可以使用它。“App 开发器”中的录制代码编辑器工具语言元素模型表达式功能可以帮您轻松地生成编写模型方法所需的 Java® 代码。

COMSOL Multiphysics GUI 截图突出显示‘模型方法’按钮。
要添加模型方法,请打开开发工具选项卡,然后单击运行模型方法,并选中一个方法。

COMSOL Multiphysics GUI 截图显示了如何运行模型方法。
要运行模型方法,请打开开发工具选项卡,单击运行模型方法,然后选择一种方法。

在之前发布的博客中,我们讨论了模型方法的运行机制,并演示了如何使用它创建随机几何。今天,我们将把这个主题延伸到物理场和研究设置中。

利用模型方法自动完成弹塑性分析

为了演示如何在物理场选择和研究序列中使用模型方法,我们选择以“案例库”中带孔板的弹塑性分析模型为例。示例模型是在预先判断压力必然超过弹性极限的前提下设置的,所以在分析中引入了塑性。今天,我们将编写一个模型方法,它能够自动检查材料属性的临界转变,如果确定塑性是必要条件,可自动引入这一属性。

我们预期自动执行的过程包含以下步骤:

  1. 运行无塑性的弹性研究。
  2. 检查最大应力是否超过材料的初始屈服应力。
  3. 如果最大应力小于初始屈服应力,则停止。反之,运行弹塑性研究。
  4. 如果塑性是必要条件,则重复使用弹性研究中的信息,以避免在弹性范围内执行冗余的非线性分析。

我们添加了两个研究,并在第一个研究中禁用了塑性。在第二个研究中,我们在弹塑性分析中增加了一个辅助扫描来进行载荷递增。在第一个研究中,我们在全局定义中将para设置为1,从而施加了满载荷。在第二个研究中,我们利用参数p_lowp_next使研究生效。这些参数设定均基于第一次研究的结果。

截图显示 COMSOL Multiphysics 中的稳态弹性研究设置。

截图显示 COMSOL Multiphysics 中的稳态弹塑性研究。
第二个研究只有在第一项研究中的假设不正确时才会开始进行计算。

结果栏中,我们添加了一个派生值节点来评估第一项研究中的最大应力。这一步骤也可以使用最大组件耦合算子来完成。以帕斯卡为单位(如表面最大值 1的“设置”窗口所示)的最大应力值将与同样以帕斯卡为单位的初始屈服应力值进行比较。为此,我们引入了参数SY_scaled

截图突出显示 COMSOL Multiphysics 软件中的‘参数’设置。
SYield 和 SY_scaled 分别应用到材料节点和模型方法。

截图显示 COMSOL Multiphysics 中‘表面最大值’的‘设置’窗口。
最大组件耦合算子可以替代此项操作。

现在我们获得了所需的全部数据,下面可以开始编写模型方法。

截图突出显示‘App 开发器’中的模型方法。
用于自动进行有效弹塑性分析的模型方法。

上图中,两行代码需要进行简要的说明:

  • 第 12 行:
    • 第一个研究是使用载荷参数 1 而完成的。如果第 9 行中的StressRatio大于 1,其倒数可以帮助我们得到弹性极限下的载荷参数。请注意,在此例中,我们能这样做的原因是:塑性是此问题中唯一可能的非线性。此模型中不存在几何非线性或接触。
  • 第 14 行:
    • 如果需要引入塑性,我们选择以 0.05 的步长完成辅助扫描。我们使用 Java® Math 类中的ceil(向上取整)方法来获取载荷参数的最小值,该值是 0.05 的倍数,并且超过了上述弹性极限下的载荷参数。

根据这些信息,第二个研究(如果需要的话)只需在弹性区域内求解一次,也就是弹性极限处。我们可以在结果栏中查看使用了哪些载荷参数值。

截图显示‘二维绘图组’设置中的参数值选项。
使用弹性研究来计算参数的最小值(突出显示)。

如果返回全局定义,就可以看到模型方法对初始值为零的参数p_lowp_next进行了更新。

COMSOL Multiphysics GUI 截图显示一组参数值。
基于初步研究的结果,借助模型方法修改参数值。

结束语

在本文中,我们展示了如何借助方法建立高效的物理场选择和研究序列。此类任务可以通过编程来完成。不过,用户也可以借助模型方法,轻松地使用“App 开发器”中的相同功能来获取所需的模型对象和方法。必要时,这些方法可以通过常规的 Java® 类(例如第一个示例中使用的 Math 类)或自定义的类进行扩展。

有关演示模型方法在物理场和求解器设置中的应用,我们只展示了一种操作方式。当然,您可以选择其他方式和改进的方法。举例来说,当分析弹塑性时,我们在“模型开发器”中添加了两项研究,这时您也选择使用单个研究,然后通过模型方法启用或禁用研究中的塑性和辅助扫描特征。

在以上案例中,我们必须在研究之间做出合乎逻辑的决策。如果您不打算做出决策,只是计划简单地参考另一个研究(比如,使用一个研究作为后续研究的预计算步骤),那么可以使用研究参考功能。详细信息请参阅COMSOL Multiphysics Reference Manual中的研究参考一节。

如果您对本文讨论的内容或 COMSOL Multiphysics 的使用操作有任何疑问,请通过下面的按钮与我们联系。

更多相关资源

Microsoft 和 Windows 是微软公司在美国和/或其他国家/地区的注册商标或商标。Oracle 和 Java 是 Oracle 和/或其附属公司的注册商标。


评论 (0)

正在加载...
浏览 COMSOL 博客
Baidu
map