我试图从.odb中提取节点的最大主应力和应变(S和E)。我模拟了一根承受机械疲劳的梁。我是Abaqus脚本新手,所以我尝试从特定节点打印压力S11值。我没有想到的是,在运行脚本之后,我为同一个节点找到了两个不同的值。我决定打印坐标,它们匹配。我知道节点属于两个元素,但值不应该相同吗?我错过什么了吗?有人能解释一下为什么会这样吗
# data_extraction.py
from abaqus import *
from odbAccess import *
from abaqusConstants import *
from odbSection import *
import odb
mypath = 'C:/Users/jjb21183/Desktop/Mauro/Abaqus/Exercise-MasterShiWang/T3/'
myodb = 'Job-M4.odb'
odb = openOdb(path = mypath+myodb)
lastframe = odb.steps['Step-1'].frames[-1]
stress = lastframe.fieldOutputs['S']
elementAmount = len(stress.values[0].instance.elements)
myinstance = odb.rootAssembly.instances['PART-1-1']
for i in range(0, elementAmount):
element = myinstance.elements[i]
for j in range(0, 8):
nodes = element.connectivity[j]
N = myinstance.nodes[nodes-1]
nodeCoordinateX = N.coordinates[0]
nodeCoordinateY = N.coordinates[1]
nodeCoordinateZ = N.coordinates[2]
# l1 = [nodeCoordinateX, nodeCoordinateY, nodeCoordinateZ]
# print l1
if (nodeCoordinateX == 4.0 and nodeCoordinateY == 10.0 and nodeCoordinateZ == 0.0):
el_stress = stress.getSubset(region = element)
print [nodeCoordinateX, nodeCoordinateY, nodeCoordinateZ]
print el_stress.values[0].data[0]
非常感谢你的帮助
实际上,你看的不是节点值,而是积分点的值。Abaqus计算积分点的结果。由于积分点位于不同的位置,因此数值不同。
要获得节点应力或应变结果,可以使用
session.writeFieldReport
命令。此命令用于写入字段输出数据 用于将屏幕上显示的实体转换为文件因此,要在屏幕上显示所需的节点, 创建叶对象并显示在屏幕上
或者也可以从节点标签创建叶对象
其中,
'Node_Set'
是节点集,'10', '11','12'
是节点标签。 现在您可以使用writeFieldReport
命令作为有关更多详细信息,请查看Abaqus的脚本指南
相关问题 更多 >
编程相关推荐