Ansys Workbench如何利用Python脚本快速批量定义材料 |
您所在的位置:网站首页 › ansys设置材料属性 › Ansys Workbench如何利用Python脚本快速批量定义材料 |
点击此处查看 ✿水哥原创ANSYS视频教程清单 ✿ 水哥专属答疑服务已开通,点此此处查看详情 对于使用Workbench的用户而言,定义材料是一个比较繁琐的过程,特别是当材料种类多且又没相应的材料库时。解决方式有两种: 一、采用插入APDL命令流来解决。 APDL可快速定义材料,然而在Mechanical赋值操作比较麻烦,需要定义不同的NS组并使用Emodif命令来修改材料属性,在手动操作方面不是特别方便。 二、采用Python脚本来解决。 WB中的材料定义属于项目流程图界面的操作,所以要实现材料的快速批量定义,只能通过WB流程图的脚本运行窗口来实现。 本文介绍脚本的方法。 WB项目流程图界面的脚本窗口通过如下路径打开: 与SC和Mechanical的脚本窗口不同,WB的脚本窗口非常简单,是一种及时响应式窗口,也即用户输入命令后,点击Enter键会马上出现运行结果,与APDL的窗口类似。另外,WB目前所使用的编程语言为IronPython,版本为2.7,基本语法同目前的Python3语法相同,所以用户操作起来难度不大。 关于IronPython与Python的区别,感兴趣的同学可去水哥博客看下面这篇文章: ANSYS Workbench二次开发- IronPython与Python3的区别与联系打开后的WB脚本运行窗口如下所示: 如果了解WB项目流程界面的脚本语法,则可在另外的代码编辑器中手戳代码,然后复制到窗口中按Enter即可运行,如果不是特别熟悉代码的同学,可打开WB自带的日志记录功能来实现“半自主化”操作。 点击菜单栏File-Scripting-Record Journal,然后设置日志文件的保存路径即可开始记录在WB界面的操作代码,日志文件的后缀名为wbjn。 设置好记录文件后,我们即可按正常的操作步骤,这里以定义一个钢材BKIN的本构为例,如下所示。 整个操作分为四步: 第一步:在WB界面从左侧工具箱中拖入组件Engineering Data 第二步:打开组件中的Engineering Data模块,建立新材料,名为Q355 第三步:在材料定义界面,从左侧工具箱中拖入Density、Isotropic Elasiticity、Billnear IsotropicHardening属性 第四步:分别填入上述属性的值 操作完成后,打开日志记录文件,代码如下: 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,材料的各项属性如下所示。 代码流程如下: 第一步:将上述数据保存在一个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行的材料数据。 经复核后没有问题,说明上述方法可行。 以上方法便为采用WB批量定义材料的方法,前提条件是批量定义的材料属性类型一致,只是属性值不同,适用于根据实测试验数据结果来进行材料的定义。 本文内容主要体现了Python脚本在ANSYS中处理重复化操作的便利,如果有学员需要彻底了解ANSYS Workbench脚本的具体操作方式,可参考水哥的Workbench软件二次开发专题教程,点击如下链接了解详情: 于Python脚本ANSYS Workbench软件二次开发专题教程欢迎搜索关注本站微信公众号:ANSYS结构院 如果觉得本网站的文章和资源对您的研究具有一定的帮助,欢迎给网站捐助,您的支持是我坚持下去的动力!
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |