Ansys Workbench如何利用Python脚本快速批量定义材料

Ansys Workbench如何利用Python脚本快速批量定义材料

Please Share Us

点击此处查看 ✿水哥原创ANSYS视频教程清单 ✿

水哥专属答疑服务已开通,点此此处查看详情

对于使用Workbench的用户而言,定义材料是一个比较繁琐的过程,特别是当材料种类多且又没相应的材料库时。解决方式有两种:

一、采用插入APDL命令流来解决。

APDL可快速定义材料,然而在Mechanical赋值操作比较麻烦,需要定义不同的NS组并使用Emodif命令来修改材料属性,在手动操作方面不是特别方便。

二、采用Python脚本来解决。

WB中的材料定义属于项目流程图界面的操作,所以要实现材料的快速批量定义,只能通过WB流程图的脚本运行窗口来实现。

本文介绍脚本的方法。

WB项目流程图界面的脚本窗口通过如下路径打开:

Ansys Workbench如何利用Python脚本快速批量定义材料

与SC和Mechanical的脚本窗口不同,WB的脚本窗口非常简单,是一种及时响应式窗口,也即用户输入命令后,点击Enter键会马上出现运行结果,与APDL的窗口类似。另外,WB目前所使用的编程语言为IronPython,版本为2.7,基本语法同目前的Python3语法相同,所以用户操作起来难度不大。

关于IronPython与Python的区别,感兴趣的同学可去水哥博客看下面这篇文章:

ANSYS Workbench二次开发- IronPython与Python3的区别与联系

打开后的WB脚本运行窗口如下所示:

Ansys Workbench如何利用Python脚本快速批量定义材料2

如果了解WB项目流程界面的脚本语法,则可在另外的代码编辑器中手戳代码,然后复制到窗口中按Enter即可运行,如果不是特别熟悉代码的同学,可打开WB自带的日志记录功能来实现“半自主化”操作。

点击菜单栏File-Scripting-Record Journal,然后设置日志文件的保存路径即可开始记录在WB界面的操作代码,日志文件的后缀名为wbjn。

设置好记录文件后,我们即可按正常的操作步骤,这里以定义一个钢材BKIN的本构为例,如下所示。

整个操作分为四步:

第一步:在WB界面从左侧工具箱中拖入组件Engineering Data

第二步:打开组件中的Engineering Data模块,建立新材料,名为Q355

第三步:在材料定义界面,从左侧工具箱中拖入Density、Isotropic Elasiticity、Billnear IsotropicHardening属性

第四步:分别填入上述属性的值

Ansys Workbench如何利用Python脚本快速批量定义材料3

Ansys Workbench如何利用Python脚本快速批量定义材料4

操作完成后,打开日志记录文件,代码如下:

template1 = GetTemplate(TemplateName="EngData")
system1 = GetSystem(Name="SYS")
system2 = template1.CreateSystem()
engineeringData1 = system2.GetContainer(ComponentName="Engineering Data")
matl1 = engineeringData1.CreateMaterial(Name="Q355")
matlProp1 = matl1.CreateProperty(
    Name="Density",
    Qualifiers={"Definition": "", "Behavior": ""})
matlProp2 = matl1.CreateProperty(
    Name="Elasticity",
    Behavior="Isotropic",
    Qualifiers={"Definition": "", "Behavior": "Isotropic"})
matlProp3 = matl1.CreateProperty(
    Name="Kinematic Hardening",
    Definition="Bilinear",
    Qualifiers={"Definition": "Bilinear", "Behavior": ""})
matlProp1.SetData(
    Index=-1,
    Variables=["Density"],
    Values=[["7850 [kg m^-3]"]])
matlProp2.SetData(
    Index=-1,
    Variables=["Young's Modulus"],
    Values=[["210000000000 [Pa]"]])
matlProp2.SetData(
    Variables=["Poisson's Ratio"],
    Values=[["0.2"]])
matlProp3.SetData(
    Index=-1,
    Variables=["Yield Strength"],
    Values=[["355000000 [Pa]"]])
matlProp3.SetData(
    Variables=["Tangent Modulus"],
    Values=[["0 [Pa]"]])

根据我们的操作步骤以及代码中出现的关键字眼(例如材料名称,材料属性值)来分解代码,各步骤的操作代码如下。

第一步:在WB界面中定义Engineering Data组件。

template1 = GetTemplate(TemplateName="EngData")
system1 = GetSystem(Name="SYS")
system2 = template1.CreateSystem()

第二步:创建名为Q355的材料

engineeringData1 = system2.GetContainer(ComponentName="Engineering Data")
matl1 = engineeringData1.CreateMaterial(Name="Q355")

第三步:定义材料的各项属性

matlProp1 = matl1.CreateProperty(
    Name="Density",
    Qualifiers={"Definition": "", "Behavior": ""})
matlProp2 = matl1.CreateProperty(
    Name="Elasticity",
    Behavior="Isotropic",
    Qualifiers={"Definition": "", "Behavior": "Isotropic"})
matlProp3 = matl1.CreateProperty(
    Name="Kinematic Hardening",
    Definition="Bilinear",
    Qualifiers={"Definition": "Bilinear", "Behavior": ""})

第四步:分别定义各项属性的值

matlProp1.SetData(
    Index=-1,
    Variables=["Density"],
    Values=[["7850 [kg m^-3]"]])
matlProp2.SetData(
    Index=-1,
    Variables=["Young's Modulus"],
    Values=[["210000000000 [Pa]"]])
matlProp2.SetData(
    Variables=["Poisson's Ratio"],
    Values=[["0.2"]])
matlProp3.SetData(
    Index=-1,
    Variables=["Yield Strength"],
    Values=[["355000000 [Pa]"]])
matlProp3.SetData(
    Variables=["Tangent Modulus"],
    Values=[["0 [Pa]"]])

从上述分解的代码可见,其实整个代码流程非常简单,如果我们要批量定义材料,只需要写个循环,将上述除了第一步外的代码放入循环中,然后将我们的材料变量(材料名+属性值)依次改变即可。

注意这里所有的变量都是以字符型的数据表示,故而如果外部数据为浮点数,要首先使用str方法转为字符型变量。

案例:采用批量方法定义下述20种材料,均采用BKIN,材料的各项属性如下所示。

Ansys Workbench如何利用Python脚本快速批量定义材料5

代码流程如下:

第一步:将上述数据保存在一个txt文档中(Mymat.txt),然后通过python读入。由于这里不需要考虑序号,所以文档中只有后面四列数据。

代码如下:

file="D:\ANSYS_Civil\Mymat.txt"
#定义四个数组用以存储材料属性值
Mymat_Dens=['']*20
Mymat_Prxy=['']*20
Mymat_Ex=['']*20
Mymat_Qufu=['']*20
#读取数据
with open(file,'r') as fin:
  data=fin.readlines()
for i in range(0,20):
  matdata=data[i].split()
  Mymat_Dens[i]=matdata[0]
  Mymat_Prxy[i]=matdata[1]
  Mymat_Ex[i]=matdata[2]
  Mymat_Qufu[i]=matdata[3]

第二步:批量定义材料并输入数据

#创建组件
template1 = GetTemplate(TemplateName="EngData")
system1 = GetSystem(Name="SYS")
system2 = template1.CreateSystem()
#创建材料
for i in range(0,20):
  #定义材料名称为mymat_+序号,注意名字的参数化
  mat_name="Mymat_"+str(i)
  engineeringData1 = system2.GetContainer(ComponentName="Engineering Data")
  matl1 = engineeringData1.CreateMaterial(Name=mat_name)
  #定义材料的属性,这一部分不需要改动,直接复制上述代码
  ###################
  matlProp1 = matl1.CreateProperty(
    Name="Density",
    Qualifiers={"Definition": "", "Behavior": ""})
  matlProp2 = matl1.CreateProperty(
    Name="Elasticity",
    Behavior="Isotropic",
    Qualifiers={"Definition": "", "Behavior": "Isotropic"})
  matlProp3 = matl1.CreateProperty(
    Name="Kinematic Hardening",
    Definition="Bilinear",
    Qualifiers={"Definition": "Bilinear", "Behavior": ""})
  ###############################3
  #定义属性值,注意单位的不同,且需要符号化
  mat_dens=Mymat_Dens[i]+' [kg m^-3]'
  mat_prxy=Mymat_Prxy[i]
  mat_ex=Mymat_Ex[i]+' [GPa]'
  mat_qufu=Mymat_Qufu[i]+' [MPa]'
  #开始定义,数据用参数替换
  matlProp1.SetData(
    Index=-1,
    Variables=["Density"],
    Values=[[mat_dens]])
  matlProp2.SetData(
    Index=-1,
    Variables=["Young's Modulus"],
    Values=[[mat_ex]])
  matlProp2.SetData(
    Variables=["Poisson's Ratio"],
    Values=[[mat_prxy]])
  matlProp3.SetData(
    Index=-1,
    Variables=["Yield Strength"],
    Values=[[mat_qufu]])
  matlProp3.SetData(
    Variables=["Tangent Modulus"],
    Values=[["0 [Pa]"]])

    Variables=["Density"],
    Values=[[mat_dnes]])
  matlProp2.SetData(
    Index=-1,
    Variables=["Young's Modulus"],
    Values=[[mat_ex]])
  matlProp2.SetData(
    Variables=["Poisson's Ratio"],
    Values=[[mat_prxy]])
  matlProp3.SetData(
    Index=-1,
    Variables=["Yield Strength"],
    Values=[[mat_qufu]])
  matlProp3.SetData(
    Variables=["Tangent Modulus"],
    Values=[["0 [Pa]"]])

复制上述代码至脚本运行窗口,运行完毕后,双击Engineering Data查看,如下所示,复核Mymat_14的数据,注意序号是从0开始,所以要核对第15行的材料数据。

Ansys Workbench如何利用Python脚本快速批量定义材料6

Ansys Workbench如何利用Python脚本快速批量定义材料7

经复核后没有问题,说明上述方法可行。

以上方法便为采用WB批量定义材料的方法,前提条件是批量定义的材料属性类型一致,只是属性值不同,适用于根据实测试验数据结果来进行材料的定义。

本文内容主要体现了Python脚本在ANSYS中处理重复化操作的便利,如果有学员需要彻底了解ANSYS Workbench脚本的具体操作方式,可参考水哥的Workbench软件二次开发专题教程,点击如下链接了解详情:

于Python脚本ANSYS Workbench软件二次开发专题教程

欢迎扫描如下二维码关注本站微信公众号:ANSYS结构院

有时间麻烦帮忙点击下公众号文末的广告哦, 权当码字的辛苦费,感谢大家!

Please Share Us
© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码

    暂无评论内容

YOU MAY LIKE…