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

[后处理] 后处理提取应力值,怎么都不出来值,请教一下

[复制链接]
发表于 2016-2-25 21:53:50 | 显示全部楼层 |阅读模式 来自 黑龙江哈尔滨
悬赏5仿真币已解决
写了非常简单的两段程序,一个提取几个节点的位移,另一个提取应力值,但是第二段程序,运行完了一点反应都没有,什么数都不出。如下:
1.提取位移,正常出结果:
#!/user/bin/python
#-*-coding:UTF-8-*-
from abaqus import*
from abaqusConstants import*

from odbAccess import*

odb=openOdb(path='job-12.odb')
step1=odb.steps['Step-cutting']
lastFrame=step1.frames[100]

center1=odb.rootAssembly.nodeSets['SET-12']  
displacement=lastFrame.fieldOutputs['U'].getSubset(region=center1)
for v1 in displacement.values:   
print v1.nodeLabel,v1.data[0],v1.data[1]

第二段提取应力值,如下:
#!/user/bin/python
#-*-coding:UTF-8-*-
from abaqus import*
from abaqusConstants import*

from odbAccess import*

odb=openOdb(path='job-16.odb')
step1=odb.steps['Step-cutting']
lastFrame=step1.frames[100]

center1=odb.rootAssembly.nodeSets['SET-12']  
stress=lastFrame.fieldOutputs['S'].getSubset(region=center1)
for v2 in stress.values:
print v2.Mises

odb.close()

但是为什么运行后,什么数都不出,大家帮我看看吧,很着急

odb.close()

最佳答案

查看完整内容

分享个程序给你,希望能对你有所启发: #coding=utf-8 from abaqus import * from abaqusConstants import * from odbAccess import * import numpy as np OdbFilePath = 'E:\SD2014\TEST\' #OdbFileName = 'TEST.odb' #OdbFile = OdbFilePath + OdbFileName OdbFile='E:\SD2014\TEST\TEST.odb' outfilename = OdbFilePath + 'STRESS.txt' nodesetname='NSET-SZ' #intancename='PART-1-1' #如采用默认的instance, 请屏蔽此行. # ...
发表于 2016-2-25 21:53:51 | 显示全部楼层 来自 美国
Simdroid开发平台
分享个程序给你,希望能对你有所启发:

#coding=utf-8
from abaqus import *
from abaqusConstants import *
from odbAccess import *
import numpy as np

OdbFilePath = 'E:\SD2014\TEST\'
#OdbFileName = 'TEST.odb'
#OdbFile = OdbFilePath + OdbFileName
OdbFile='E:\SD2014\TEST\TEST.odb'
outfilename = OdbFilePath + 'STRESS.txt'
nodesetname='NSET-SZ'
#intancename='PART-1-1' #如采用默认的instance, 请屏蔽此行.

#打开ODB文件
Odb = odbAccess.openOdb[OdbFile]
if not intancename: intancename = Odb.rootAssembly.instances.keys()[-1]
nodeset = Odb.rootAssembly.instances[intancename].nodeSets[nodesetname]
lastStep  = Odb.steps.keys()[-1]
lastFrame = Odb.steps[lastStep].frames[-1]

# 提取YY方向应力, 如需要XX或其它方向应力, 可更改x.data[0]或其它
stress_field = lastFrame.fieldOutputs['S']
stress_field_nodset = stress_field.getSubset(region=nodeset, position=ELEMENT_NODAL)
nset_val = stress_field_nodset.values
stress_data = map(lambda x:[x.nodeLabel, x.data[2]], nset_val)

# 如果要提取最大等效应力或最大主应力, 请解开如下三行屏蔽
#nset_val = stress_field_nodset.getScalarField(invariant=MISES).values
#nset_val = stress_field_nodset.getScalarField(invariant=MAX_INPLANE_PRINCIPAL).values
#stress_data = map(lambda x:[x.nodeLabel, x.data], nset_val)

# 平均各节点的应力. 由于ELEMENT_NODAL输出的为单元节点值,故一个节点上会有多个应力值, 故需要进行平均.
stress_data_dict = {}
for sd in stress_data:
    nodeLabel, data = sd
    if nodeLabel not in stress_data_dict: stress_data_dict[nodeLabel]=[]
    stress_data_dict[nodeLabel].append(data)

new_stress_data = sorted([[x, np.mean(stress_data_dict[x])] for x in stress_data_dict], key=lambda x:x[2])

# 将节点号和应力值写入文件
outfile = open(outfilename, 'w')  
for da in new_stress_data:
    print >>outfile, "%10d, %20.9f " % (da[0], da[1])
outfile.close()

#如果要写出各节点的坐标请打开如下如下引号屏蔽掉的
'''
# 提取节点集各节点编号及坐标
coords  = map(lambda x:[x.label, x.coordinates], nodeset.nodes)
coords_dict= {};
for c in coords: coords_dict[c[0]] = c[1]
new_stress_data = sorted([[x, np.mean(stress_data_dict[x]), coords_dict[x][0], coords_dict[x][1], coords_dict[x][2]] for x in stress_data_dict], key=lambda x:x[0])
outfile = open(outfilename, 'w')  
for da in new_stress_data:
    print >>outfile, "%10d, %20.9f, %20.9f , %20.9f, %20.9f" % (da[0], da[1], da[2], da[3], da[4])
outfile.close()
'''
回复

使用道具 举报

 楼主| 发表于 2016-2-25 22:06:55 | 显示全部楼层 来自 黑龙江哈尔滨
明白了
我设定的是nodes的集合,而应力值是单元的集合
那么请问如果我想要  每个节点处的应力值  我改如何提取呢?
回复

使用道具 举报

发表于 2016-4-27 10:36:45 | 显示全部楼层 来自 黑龙江哈尔滨
report ——fieldoutput——unique nodal好像可以直接提取,这样可以吗
回复

使用道具 举报

 楼主| 发表于 2016-4-29 21:02:16 | 显示全部楼层 来自 黑龙江哈尔滨
直到世界尽头 发表于 2016-4-27 10:36
report ——fieldoutput——unique nodal好像可以直接提取,这样可以吗

还是python提取的号
不过提取的只是节点的值
因为我要的是节点内的精确值,所以还要插值算法
回复

使用道具 举报

发表于 2016-5-13 21:33:32 来自手机 | 显示全部楼层 来自 陕西西安
请问下面语句如何解读?谢谢
回复

使用道具 举报

发表于 2016-5-13 21:34:13 来自手机 | 显示全部楼层 来自 陕西西安
new_stress_data = sorted([[x, np.mean(stress_data_dict[x])] for x in stress_data_dict], key=lambda x:x[2])
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 17:11 , Processed in 0.034924 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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