Abaqus 脚本中的节点应力和应变 |一个节点有两个不同的压力值?
Node stress and strain in Abaqus scripting | One node with two different values of stress?
我正在尝试从 .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]
Output of my code
非常感谢您的帮助。
实际上,您不是在查看节点值,而是在查看积分点处的值。 Abaqus 在积分点处计算结果。并且由于积分点位置不同,所以数值不同
要获得节点应力或应变结果,您可以使用 session.writeFieldReport
命令。此命令写入字段输出数据
将屏幕上显示的实体保存到一个文件中。
因此,要在屏幕上显示所需的节点,
创建叶子对象并显示在屏幕上。
import displayGroupOdbToolset as dgo
leaf = dgo.LeafFromNodeSets(nodeSets=('Node_Set', ))
session.viewports['Viewport: 1'].odbDisplay.displayGroup.replace(leaf=leaf)
或者您也可以从节点标签创建叶对象,
import displayGroupOdbToolset as dgo
leaf = dgo.LeafFromModelNodeLabels(nodeLabels=(('PART-1-1', ('10', '11','12')),))
session.viewports['Viewport: 1'].odbDisplay.displayGroup.replace(leaf=leaf)
其中,'Node_Set'
是节点集,'10', '11','12'
是节点标签。
现在您可以使用 writeFieldReport
命令作为
session.writeFieldReport(fileName='outData.dat', append=ON,
sortItem='Node Label', odb=odb, step=0, frame=1, outputPosition=NODAL,
variable=(('S', INTEGRATION_POINT, ((INVARIANT, 'Max. Principal'), )), ))
有关详细信息,请查看 Abaqus 脚本指南。
我正在尝试从 .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]
Output of my code
非常感谢您的帮助。
实际上,您不是在查看节点值,而是在查看积分点处的值。 Abaqus 在积分点处计算结果。并且由于积分点位置不同,所以数值不同
要获得节点应力或应变结果,您可以使用 session.writeFieldReport
命令。此命令写入字段输出数据
将屏幕上显示的实体保存到一个文件中。
因此,要在屏幕上显示所需的节点,
创建叶子对象并显示在屏幕上。
import displayGroupOdbToolset as dgo
leaf = dgo.LeafFromNodeSets(nodeSets=('Node_Set', ))
session.viewports['Viewport: 1'].odbDisplay.displayGroup.replace(leaf=leaf)
或者您也可以从节点标签创建叶对象,
import displayGroupOdbToolset as dgo
leaf = dgo.LeafFromModelNodeLabels(nodeLabels=(('PART-1-1', ('10', '11','12')),))
session.viewports['Viewport: 1'].odbDisplay.displayGroup.replace(leaf=leaf)
其中,'Node_Set'
是节点集,'10', '11','12'
是节点标签。
现在您可以使用 writeFieldReport
命令作为
session.writeFieldReport(fileName='outData.dat', append=ON,
sortItem='Node Label', odb=odb, step=0, frame=1, outputPosition=NODAL,
variable=(('S', INTEGRATION_POINT, ((INVARIANT, 'Max. Principal'), )), ))
有关详细信息,请查看 Abaqus 脚本指南。