[原创]Abaqus中材料参数不为常数的Python处理方法

[原创]Abaqus中材料参数不为常数的Python处理方法

在有限元计算中,可能会碰到材料参数(这里以线弹性材料弹性模量E为例)在模型中并不为常值的情况,例如,E与某一坐标相关。大家知道,abaqus材料中材料是在*section对截面属性定义的时候对单元组进行赋值的。并且GUI中也没有提供变参数的接口(这里顺路提一下,载荷是可以通过函数给出变载荷的,GUI中有接口)。这就需要我们采取一些特殊的措施。在CAE-lab前文《Abaqus中计材料参数不为常数的两种处理方法》中, 给大家介绍了‘编辑inp文件’和‘使用Umat’两种方法,这里就给大家介绍一下用python脚本实现的方法。

 

方法

难度

编辑inp

会一门编程语言,能够完成对文本文件的读取和写入

4

使用Umat

会使用abaqusUmat用户子程序,计算文件中不需要使用其它的用户子程序

3(如果对abaqus用户子程序不熟悉,则为5)

Python脚本

会python基础,对python编写abaqus脚本了解

3(如果对python脚本不熟悉,则为5)


Python大法在abaqus前后处理中具有举足轻重地位和天然的优势,通过python给单元赋材料属性非常简单,本例中,假设每个单元的弹性模量不一样,并且是一个函数,我们的思路就是遍历所有的单元,给每一个单元定义一种材料。具体实现如下:

 

1.模型

    以简单的Cube模型为例,如图1,注意由于我们是遍历单元赋材料,Abaqus中模型必须在划分好网格后在进行赋材料属性。

[原创]Abaqus中材料参数不为常数的Python处理方法的图1

1 网格模型图

2. python脚本

    下面的代码较为简单,注释也比较清楚,本例中的E的变化是贴主随意给的,实际中E可能是各种形式,具体案例具体分析。

mymodel=mdb.models['Cube'] # 获取模型
mypart=mdb.models['Cube'].parts['Cube'] #获取part
for ele_index in mypart.elements:     #单元循环
    ele=ele_index.label                #单元编号
    node=ele_index.getNodes()          #单元节点坐标
    Matname='Steel'+str(ele)           #材料名
    mySteel = mymodel.Material(name=Matname)  #创建材料
    EE=ele*1000+100.E3 # 变化的材料参数  可以是坐标的函数 或者其他
    elasticProperties = (EE, 0.3)
    mySteel.Elastic(table=(elasticProperties, ) ) #设置材料参数
    sectionname='CubeSec'+str(ele)
    mySection = mymodel.HomogeneousSolidSection(name=sectionname,material=Matname,
    thickness=1.0)#创建section
    elements=mypart.elements[0]
    setname='set'+str(ele)
    region = mypart.Set(elements=mypart.elements[ele-1:ele], name=setname)  
    # 这里elements要为A sequence of MeshElement objects 即类型为tuple  
    mypart.SectionAssignment(region=region, sectionName=sectionname)  #赋材料属性

3.结果

 

赋材料后,以材料区分来显示模型,可见每个单元的材料都不一样,在模型树菜单也可以看到,python脚本建立了125种材料(共125个单元)

[原创]Abaqus中材料参数不为常数的Python处理方法的图2   [原创]Abaqus中材料参数不为常数的Python处理方法的图3


 

 图2 不同单元的材料

blob.png

图3 计算结果

4.总结

    我们介绍的三种方法都能很好的解决材料参数不为常数的问题,编辑inppython对单元较少时运行效率较高,但是单元较多时,Umat用起来可能更方便,大家可以都尝试一下

 

     最后伙伴们可以扫下面二维码关注我的公众号‘CAE仿真实验室’哦,我们将定期给大家分享有限元仿真干货,谢谢~

https://mmbiz.qlogo.cn/mmbiz_jpg/ZKtYgmRdvjvCyNCM9Bib9iakX2vLpPqRNWLEV4jh9kyegl0hp4KRWIE0z3ZDXib8xzeKsh8NjQGV86sPSPUNVt5cQ/0?wx_fmt=jpeg


 

结构CAEANSYSLS-DYNAABAQUSHyperWorks显式动力学及仿真材料工程机械电子汽车工程NVH多体动力学及仿真

[原创]Abaqus中材料参数不为常数的Python处理方法的评论11条

  • 蓝牙
    0
    用umat实现连续梯度结构的有限元分析才是umat大器的用武之地!
  • 蓝牙
    20
    "但是单元较多时,Umat用起来可能更方便" 这句话是不是有问题,Umat可以做这件事吗?

[原创]Abaqus中材料参数不为常数的Python处理方法的相关案例教程

from abaqus import * from abaqusConstants import * backwardCompatibility.setValues(includeDeprecated=True,reportDeprecated=False) # Create a model. myModel = mdb.Model(name='Beam') # Create a new view
例如:cell4 = mdb.models['block'].parts['crankcase'].cells[4],要把part模块中编号为4的体赋值给cell4,就需通过路径mdb→models→part→cells(4号体属性),其中'block'、'crankcase'、分别是model和part的名字。 在草图Sketch中画线: s = mdb.models[' block '].Co
1、前言 考虑材料参数空间变异性的岩土工程对象的数值分析是岩土工程研究中重要分支。当前,考虑材料参数空间变异性(即参数随机场)的分析手段中,除了极少数非主流的数值分析软件可以实现一键式随机场分析以外,大多数复杂的随机场实现都存在较高的门槛,且难以实现复杂的岩土对象相互作用分析。在主流岩土工程分析软件中,如,flac和abaqus中,前者需要使用fish编程,且基本要借助第三方软件计算随机场才能实现
在讲解 findAt() 方法之前,先让我们简单回顾一下Abaqus中需要指定区域(region)的情况吧~ Load命令:使用region参数指定施加荷载的区域 Mesh命令:使用region参数指定单元类型、网格种子的定义区域 Set命令:使用region参数定义节点集、单元集 当我们在CAE中建立模型后,软件会自动为他们进行编号,如节点编号、单元编号、各条边等,如果我们在编写脚本的时候选用模
本次学习了手机抓包的相关知识,了解了Charles-mitmproxy-Appium的基本使用,通过对当当图书评论的爬取,得以实践。 / 01 / Charles Charles是一个APP抓包工具,与我之前最先使用的Filddler相似,可以得到手机App运行过程中发生的所有网络请求和响应内容。 这里简单说一下安装。 电脑端下载安装完Charles后,需要配置证书,最后开启SSL监听,这个具体大
硕士/仿真工程师
影响力
粉丝
内容
获赞
收藏
    项目客服
    培训客服
    31 6