给定包含节点集的Abaqus odb文件(例如“ALL_SECS”)
可以通过以下模式在节点集的节点处提取坐标('COORD')或位移('U')等节点量:
如何在节点集的节点处提取/插值积分点数量? 如何使用abaqus python请求节点位置的fieldoutput
from odbAccess import *
import numpy as np
# Helper function
def values_to_array(values, dim=2, item='data'):
length = len(values)
array = np.zeros((length, dim), dtype='float64')
for index in range(length):
array[index, :] = getattr(values[index], item)
return array
# Prepare and open
odb = openOdb(path='job.odb') # Solution of 2D-plane-stress model
instances = odb.rootAssembly.instances
instance = instances['PART']
sett = instance.nodeSets['ALL_SECS']
step = odb.steps.keys()[-1]
# Get coordinates and number of nodes in node set
frame = odb.steps[step].frames[-1]
values_xy = frame.fieldOutputs['COORD'].getSubset(region=sett).values
xy = values_to_array(values=values_xy, dim=2, item='dataDouble')
nbr_xy = len(values_xy)
print('len(values_xy)')
print(len(values_xy))
# Get nodal-quantity and number of nodes in node set
uvw = np.zeros((nbr_xy, 2), dtype=float)
outp = odb.steps[step].frames[-1].fieldOutputs['U']
values_u = outp.getSubset(region=sett).values
uvw = values_to_array(values=values_u, dim=2, item='dataDouble')
print('len(values_u)')
print(len(values_u))
eps = np.zeros((nbr_xy, 4), dtype=float)
outp = odb.steps[step].frames[-1].fieldOutputs['E']
values_eps = outp.getSubset(position=ELEMENT_NODAL, region=sett).values
# values_eps = outp.getSubset(position=ELEMENT_NODAL).getSubset(region=sett).values
print('len(values_eps)')
print(len(values_eps))
values_eps_nodal = outp.getSubset(position=NODAL, region=sett).values
print('len(values_eps_nodal)')
print(len(values_eps_nodal))
输出:
len(values_xy)
147
len(values_u)
147
len(values_eps)
408
len(values_eps_nodal)
0
以下解决方案是在节点集“ALL_SECS”中指定的节点处获取总应变(Fieldoutput“E”)的一种变通方法。由于提取的节点的顺序未知,因此也提取位置信息,即节点的坐标。
eps
中的第i个应变是xy
中第i个坐标处的应变。 Abaqus API中似乎不存在此功能。 节点特定的数据,如位移,可以很容易地提取,请参见uv
。 提取元素节点和位置应变数据的关键步骤:nodeLabel
->index
注:二维模型odb
相关问题 更多 >
编程相关推荐