使用 Ansys Mechanical 和 Stochos 进行材料模型校准第一部分:使用 PyANSYS 运行 DOE

介绍

上一篇文章中,我们详细介绍了完全在 Ansys Workbench 中使用 optiSlang 为 Ansys Mechanical 校准材料模型的过程。在本系列文章中,我们将详细介绍使用 PyAnsys 和 Probabilistic Intelligence 的 Stochos 6.0.2 Python 3.12 库、Ansys Workbench 和外部 Python 脚本的相同过程。

完成整个校准需要执行以下步骤;粗体项目将在当前文章中讨论:

  1. 参数定义:边界和类型
  2. Workbench 模型设置和验证
  3. Stochos 优化和约束函数定义
  4. 使用 Stochos 开始生成实验设计 (DOE)
  5. 通过使用 PyAnsys 将参数传递给 Workbench 来开始生成 DOE 结果
  6. DIMGP 模型校准和优化循环以及 Stochos 建议的下一个设计点
  7. 优化结果和最终参数选择

安装 PyAnsys 和 Stochos

PyAnsys 和 Stochos 是 Python 3.12 库。建议创建一个虚拟环境,或者更好的是,创建一个 Anaconda Python 环境,您可以在其中安装 PyAnsys 和 Stochos。我们不会在本文中进一步讨论这些问题。

参数定义

回顾上一篇文章中详述的模型设置,我们指定了 Voce 硬化材料模型参数的边界和单位,如下所示,并注意所有这些参数都是连续类型

参数

单位

边界

杨氏模量 (Young's Modulus),E兆帕[160000, 200000]
初始屈服应力 S0兆帕[1100, 1600]
线性硬化系数 (Linear Hardening Coefficient),R0兆帕[1, 1000]
指数硬化系数 (Exponential Hardening Coefficient),R英孚兆帕[400, 900]
指数饱和度参数 b没有[160, 400]

 

Stochos 要求边界和类型位于列表中。以下是所述参数定义的代码片段:

 

Workbench 模型设置和验证

我们使用的 Workbench 模型是上一篇文章中使用的模型的简化版本。在这里,我们只要求维护 Parameter Set(参数集),如下所示,并注意输入参数 ID:

 

为了保持参数信息井井有条,我们在 Python 中设置了一个字典:

 

在项目 user_files 目录中,我们有参考信号文件 force_displacement_ref.txt,其格式如下,请注意我们在开头添加了一个 (0,0) 点

 

求解模型时,APDL 命令将生成相同格式的文件 force_displacement_sim.txt,并将其存储在 dp0\SYS\MECH 项目文件夹中。我们将在每个模型求解后读取此文件,并将其作为优化过程的一部分进行处理。

最后,我们必须确保模型可以在整个参数边界范围内求解,以便我们可以自动进行参数研究。此模型已在所有极端情况下运行,并显示出在所有情况下收敛。

Stochos 优化和约束函数

Python 导入

对于整体代码,我们导入以下库:

 

Stochos 定义

Stochos 通过庞大的示例库提供现成的目标和约束函数。在这里,我们将仿真信号回归为参考信号,因此我们修改示例函数以实现以下内容:

  1. 最小化仿真信号和参考信号之间差值的平均值和标准差。
  2. 计算仿真信号的最小梯度,拒绝任何具有负梯度的仿真信号;我们不允许在材料模型曲线的末端出现负斜率,因为这会导致仿真问题。

 

请注意优化器定义中的 acq_func=“SEI” 行,该行适用于信号回归。

使用 Stochos 开始生成 DOE

要开始优化过程,我们需要运行启动 DOE 来生成用于 DIMGP 模型训练的数据。根据 optimization 和 constraint 函数,Stochos 很容易创建一个最佳的空间填充设计:

 

我们将生成的 “DOE_start_design_matrix.csv” 文件存储在与 Workbench 模型相同的目录中,以便于检索。

使用 PyAnsys 和 Workbench 启动 DOE 结果

使用 PyWorkbench 启动和控制 Workbench

PyWorkbench 是一个 PyAnsys 模块,我们使用它来通过外部 Python 脚本启动和控制 Workbench。首先,我们定义重要的目录和路径:

 

接下来,我们需要 IronPython 格式的 Workbench 命令字符串,用于控制 Workbench 并在 Workbench 中设置参数值。

 

有了这些控制字符串,我们启动 Workbench 2025 R1,使用以下代码显示 GUI:

 

在完整 Python 脚本结束时,我们使用以下命令正常关闭 Workbench:

 

运行和分析所有设计点的结果的功能

运行和分析起始 DOE 设计点的函数应用以下算法:

  1. 创建空的 Pandas 结果 DataFrame。
  2. 阅读 DOE 矩阵并遍历每个设计点,执行以下作:
    1. 将参数值传递给 Workbench。
    2. 更新 Workbench 项目以求解模型并生成 force_displacement_sim.txt 文件。
    3. 对仿真结果信号进行线性插值,使其与参考信号具有相同的长度和横坐标。
    4. 计算仿真信号的最小梯度,如果 min(gradient) >= 0,则保留 reject
    5. 计算仿真信号和参考信号之间的 L2 距离。
    6. 将保留的仿真信号存储在 results DataFrame 中。
    7. 将 L2 距离和参数值存储在摘要结果 DataFrame 中。
    8. 返回所有适当的 DataFrame。

以下是此函数的代码分为两部分:

 

 

用于实现流程的控制代码

以下代码片段显示了用于控制进程的代码,但请注意某些参数未显示:

 

Start DOE 的结果

运行起始 DOE 后,我们获得了 13 个(共 30 个)有效的仿真信号(在所有位置都有正梯度)。

 

此外,我们还从 Stochos 获得了启动敏感性分析,该分析显示了哪些参数最重要。显然,R0不是一个重要的参数。

 

最后,摘要数据显示,运行 5 与参考信号的 L2 距离最低,但需要进行优化以获得更好的校准。

 

结论

总之,我们展示了使用 Stochos 和 PyAnsys 在 Ansys Mechanical 中优化材料模型的过程的第一部分。我们展示了如何使用 PyWorkbench 自动化更新参数和求解模型的过程。此外,我们还展示了 Stochos 如何提供起始 DOE 来训练 DIMGP 模型,以用于未来的优化。最后,我们展示了如何使用简单的 Python 脚本来自动化整个过程。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

David WangYang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值