找回密码
 注册
Simdroid-非首页
查看: 1220|回复: 10

[后处理] abaqus odb文件用python提取平均应力应变

[复制链接]
发表于 2017-10-20 17:55:59 | 显示全部楼层 |阅读模式 来自 德国

各位前辈好,我的模型是一个三种材料组成的RVE,想要求它的参数弹性模量和剪切模量,由于节点和单元太多,有30万个elemente,节点就更多,用abaqus自身的后处理画xy图根本画不出来,只有编写python来计算,请问我是应该求节点的应力平均值还是单元的应力平均值,我之前都是求单元的平均值,py程序怎么写呢,
 楼主| 发表于 2017-10-23 18:10:31 | 显示全部楼层 来自 德国
各位帮忙看看啊,

点评

http://forum.simwe.com/thread-1116064-1-1.html  发表于 2017-10-23 19:00
回复 不支持

使用道具 举报

发表于 2017-10-27 09:44:44 | 显示全部楼层 来自 辽宁大连
楼主你好!我和你遇到的是同一问题,我也是想求等效模量和剪切模量等弹性指标,我的qq是1399344137,可以一起讨论。
回复 不支持

使用道具 举报

 楼主| 发表于 2017-10-27 23:12:12 | 显示全部楼层 来自 德国
我参考了论坛里几个朋友的py程序写得下面的,前处理在field output
里选了S,E,Evol,不知道这个程序是否可以求模型的平均应力和平均应变的比值,也就是E模量的值,请各位提提意见
from abaqus import*
from abaqusConstants import*
import regionToolset
import math
import material
from odbAccess import*
odb = openOdb(path='Seed0521.odb')
region = odb.rootAssembly.elementSets['SETALLELEM']
field1=odb.steps.values()[-1].frames[-1].fieldOutputs['S']
field2=odb.steps.values()[-1].frames[-1].fieldOutputs['EVOL']
field3=odb.steps.values()[-1].frames[-1].fieldOutputs['E']
subField1=field1.getSubset(region=region)
subField2=field2.getSubset(region=region)
subField3=field3.getSubset(region=region)
sum_s22=0
sum_e22=0
vol=0
j=0
while j<len(subField2.values):
                val1=subField1.values[j].data[1]
                val2=subField2.values[j]
                val3=subField3.values[j].data[1]
                s22=val1*val2.data
                e22=val3*val2.data
                vol=vol+val2.data
                sum_s22=sum_s22+val1
                sum_e22=sum_e22+val3
                j+=1
                ave_e22=sum_e22/vol
                ave_s22=sum_s22/vol
               
               
print 'ave_s22 =', ave_s22
print 'ave_e22 =', ave_e22
print 'vol =', vol
print 'E22 =', ave_s22*1000000/ave_e22

回复 不支持

使用道具 举报

发表于 2017-11-7 21:36:53 | 显示全部楼层 来自 陕西宝鸡
smwiyang 发表于 2017-10-27 23:12
我参考了论坛里几个朋友的py程序写得下面的,前处理在field output
里选了S,E,Evol,不知道这个程序是否可 ...

平均应力不是这么求的,应该是每个单元的应力与面积乘积求和,然后除模型的面积
回复 不支持

使用道具 举报

发表于 2017-11-7 21:49:59 | 显示全部楼层 来自 陕西宝鸡
qeqtrqfdsf 发表于 2017-11-7 21:36
平均应力不是这么求的,应该是每个单元的应力与面积乘积求和,然后除模型的面积 ...

from odbAccess  import*

#
# get field
#

odb = openOdb(path='Job-shikeli.odb')
framesnumber=len(odb.steps['Step-1'].frames)
print "framesnumber=",framesnumber
i=0
while i<framesnumber:
        endSet = odb.rootAssembly.elementSets['WHOLE']   #zhe ge dan yuan ji he shi step li mian de shu chu de dan yuan ji he
        field1=odb.steps['Step-1'].frames.fieldOutputs['S']
        field2=odb.steps['Step-1'].frames.fieldOutputs['EVOL']
        subField1=field1.getSubset(region=endSet)
        subField2=field2.getSubset(region=endSet)
        sum_mises=0
        vol=0
        for val_2 in subField2.values:
            for val_1 in subField1.values:
                if val_2.elementLabel == val_1.elementLabel:
                       
                       mises = val_2.data * val_1.mises
                       break
            sum_mises = sum_mises + mises
            vol = vol + val_2.data
            ave_mises= sum_mises/vol
        
        print ave_mises
        i+=1
希望能帮到你
回复 不支持

使用道具 举报

 楼主| 发表于 2017-11-8 16:36:30 | 显示全部楼层 来自 德国
qeqtrqfdsf 发表于 2017-11-7 21:49
from odbAccess  import*

#

你好,我要求的不是miese平均应力,而是y方向上的平均应力,那该怎么求呢,
回复 不支持

使用道具 举报

 楼主| 发表于 2017-11-14 20:42:21 | 显示全部楼层 来自 德国
qeqtrqfdsf 发表于 2017-11-7 21:49
from odbAccess  import*

#

我上面的代码求的是x方向的平均应力和应变
回复 不支持

使用道具 举报

 楼主| 发表于 2017-11-16 23:12:37 | 显示全部楼层 来自 德国
smwiyang 发表于 2017-10-27 23:12
我参考了论坛里几个朋友的py程序写得下面的,前处理在field output
里选了S,E,Evol,不知道这个程序是否可 ...

这个程序没有乘以体积,下面是改正的
from abaqus import*
from abaqusConstants import*
import regionToolset
import math
import material
from odbAccess import*
odb = openOdb(path='Seed0521.odb')
region = odb.rootAssembly.elementSets['SETALLELEM']
field1=odb.steps.values()[-1].frames[-1].fieldOutputs['S']
field2=odb.steps.values()[-1].frames[-1].fieldOutputs['EVOL']
field3=odb.steps.values()[-1].frames[-1].fieldOutputs['E']
subField1=field1.getSubset(region=region)
subField2=field2.getSubset(region=region)
subField3=field3.getSubset(region=region)
sum_s22=0
sum_e22=0
vol=0
j=0
while j<len(subField2.values):
                val1=subField1.values[j].data[1]
                val2=subField2.values[j]
                val3=subField3.values[j].data[1]
                s22=val1*val2.data
                e22=val3*val2.data
                vol=vol+val2.data
                sum_s22=sum_s22+s22
                sum_e22=sum_e22+e22
                j+=1
                ave_e22=sum_e22/vol
                ave_s22=sum_s22/vol
               
               
print 'ave_s22 =', ave_s22
print 'ave_e22 =', ave_e22
print 'vol =', vol
print 'E22 =', ave_s22*1000000/ave_e22
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 00:20 , Processed in 0.032242 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表