想象一个场景:您在某些假设前提下求解了一个模型,却在分析结果时发现这些假设不成立,所以不得不添加新的物理场特征或改变研究类型来修正分析。那么,如何将这一过程自动完成呢?今天,我们将讨论如何使用 COMSOL Multiphysics® 软件 5.3 版本中新增的模型方法 功能来实现这一自动操作。
自定义求解过程的优势
我们经常会根据部分信息做出建模决策。例如,流体流动会一直保持层流状态还是会变成湍流?固体会保持弹性,还是会在指定的载荷和约束下变成塑性?变形是否大到应当运行几何非线性分析,还是适合小变形理论?有时,极限分析可以解答这些问题。如果我们能在求解之前知道问题的答案,就可以直接选择合适的模型。如果不能,一个低成本的办法是先求解简单模型,然后只有在求解无效的情况下,才切换为更复杂的模型。
举例来说,第一步完成弹性分析,然后只有当第一个分析得到的最大应力高于弹性极限时,才转换为弹塑性分析。类似地,先假设求解层流,然后在第一个分析得出的雷诺数足够高的情况下,再在模型中引入湍流。
根据初步结果,有时我们不得不改变建模方法,所以工作流程自动化可以减少大量工作。第一项研究所输出的信息还可以重复使用,以提高后续研究的计算效率。今天,我们将演示如何通过编写代码来自动完成弹塑性分析。代码会运行弹性分析,检查最大应力是否超过材料的屈服应力,并在必要时运行塑性模型。
在 COMSOL Multiphysics® 中创建模型方法
在 Windows® 操作系统平台中使用 COMSOL Multiphysics® 软件时,您可以开发拥有自定义用户界面的仿真 App,并通过编写方法添加更多功能。在Windows® 系统中构建的仿真App,可在任意操作系统中运行,还支持与同事、客户和学生们分享。
在 COMSOL® 软件的 5.3 版本中,我们发布了一个名为模型方法的新功能。它支持通过在 COMSOL Multiphysics 图形用户界面(GUI)中编写代码来扩展软件功能,即使您不打算开发 App 也可以使用它。“App 开发器”中的录制代码、编辑器工具、语言元素 和模型表达式 功能可以帮您轻松地生成编写模型方法所需的 Java® 代码。
要添加模型方法,请打开 开发工具选项卡,然后单击 运行模型方法,并选中一个方法。
要运行模型方法,请打开 开发工具选项卡,单击 运行模型方法,然后选择一种方法。
在之前发布的博客中,我们讨论了模型方法的运行机制,并演示了如何使用它创建随机几何。今天,我们将把这个主题延伸到物理场和研究设置中。
利用模型方法自动完成弹塑性分析
为了演示如何在物理场选择和研究序列中使用模型方法,我们选择以“案例库”中带孔板的弹塑性分析模型为例。示例模型是在预先判断压力必然超过弹性极限的前提下设置的,所以在分析中引入了塑性。今天,我们将编写一个模型方法,它能够自动检查材料属性的临界转变,如果确定塑性是必要条件,可自动引入这一属性。
我们预期自动执行的过程包含以下步骤:
- 运行无塑性的弹性研究。
- 检查最大应力是否超过材料的初始屈服应力。
- 如果最大应力小于初始屈服应力,则停止。反之,运行弹塑性研究。
- 如果塑性是必要条件,则重复使用弹性研究中的信息,以避免在弹性范围内执行冗余的非线性分析。
我们添加了两个研究,并在第一个研究中禁用了塑性。在第二个研究中,我们在弹塑性分析中增加了一个辅助扫描 来进行载荷递增。在第一个研究中,我们在全局定义 中将 para 设置为 1,从而施加了满载荷。在第二个研究中,我们利用参数 p_low 和 p_next 使研究生效。这些参数设定均基于第一次研究的结果。
第二个研究只有在第一项研究中的假设不正确时才会开始进行计算。
在结果 栏中,我们添加了一个派生值 节点来评估第一项研究中的最大应力。这一步骤也可以使用最大组件耦合 算子来完成。以帕斯卡为单位(如表面最大值 1 的“设置”窗口所示)的最大应力值将与同样以帕斯卡为单位的初始屈服应力值进行比较。为此,我们引入了参数 SY_scaled。
SYield 和 SY_scaled 分别应用到 材料节点和模型方法。
最大组件耦合算子可以替代此项操作。
现在我们获得了所需的全部数据,下面可以开始编写模型方法。
用于自动进行有效弹塑性分析的模型方法。
上图中,两行代码需要进行简要的说明:
- 第 12 行:
- 第一个研究是使用载荷参数 1 而完成的。如果第 9 行中的
StressRatio
大于 1,其倒数可以帮助我们得到弹性极限下的载荷参数。请注意,在此例中,我们能这样做的原因是:塑性是此问题中唯一可能的非线性。此模型中不存在几何非线性或接触。
- 第一个研究是使用载荷参数 1 而完成的。如果第 9 行中的
- 第 14 行:
- 如果需要引入塑性,我们选择以 0.05 的步长完成辅助扫描。我们使用 Java® Math 类中的 ceil(向上取整)方法来获取载荷参数的最小值,该值是 0.05 的倍数,并且超过了上述弹性极限下的载荷参数。
根据这些信息,第二个研究(如果需要的话)只需在弹性区域内求解一次,也就是弹性极限处。我们可以在结果 栏中查看使用了哪些载荷参数值。
使用弹性研究来计算参数的最小值(突出显示)。
如果返回全局定义,就可以看到模型方法对初始值为零的参数 p_low 和 p_next 进行了更新。
基于初步研究的结果,借助模型方法修改参数值。
结束语
在本文中,我们展示了如何借助方法建立高效的物理场选择和研究序列。此类任务可以通过编程来完成。不过,用户也可以借助模型方法,轻松地使用“App 开发器”中的相同功能来获取所需的模型对象和方法。必要时,这些方法可以通过常规的 Java® 类(例如第一个示例中使用的 Math 类)或自定义的类进行扩展。
有关演示模型方法在物理场和求解器设置中的应用,我们只展示了一种操作方式。当然,您可以选择其他方式和改进的方法。举例来说,当分析弹塑性时,我们在“模型开发器”中添加了两项研究,这时您也选择使用单个研究,然后通过模型方法启用或禁用研究中的塑性和辅助扫描特征。
在以上案例中,我们必须在研究之间做出合乎逻辑的决策。如果您不打算做出决策,只是计划简单地参考另一个研究(比如,使用一个研究作为后续研究的预计算步骤),那么可以使用研究参考 功能。详细信息请参阅 COMSOL Multiphysics Reference Manual 中的研究参考 一节。
如果您对本文讨论的内容或 COMSOL Multiphysics 的使用操作有任何疑问,请通过下面的按钮与我们联系。
更多相关资源
- 了解模型方法的一般工作原理,以及如何访问内置的方法和对象
- 阅读如何在预处理中使用模型方法来创建随机几何
- 学习如何在后处理中使用模型方法来聆听变速箱中的振动和噪音
- 查看压力容器的应力分析 COMSOL App,它在弹塑性分析中采用了与本文类似的策略
Microsoft 和 Windows 是微软公司在美国和/或其他国家/地区的注册商标或商标。Oracle 和 Java 是 Oracle 和/或其附属公司的注册商标。
评论 (0)