我正在使用一个python脚本从Abaqus-FE模型中提取和后处理结果,但是在处理odb文件中的数据时会遇到不一致的情况。下面给出一个例子。

odbObj = session.openOdb(name=JobName+'.odb', readOnly=True)
step = odbObj.steps['LC5']
set = odbObj.rootAssembly.instances['DETAILEDTOPPLATE-1#TOPPLATE-1'].nodeSets['FD3_N1A']

>>> print
step.frames[1].fieldOutputs['S'].getSubset(region=set,position=
   ELEMENT_NODAL,elementType='S8R').bulkDataBlocks[0].data
[[  1.29479978e-42  -2.41047720e+07   0.00000000e+00   3.10530625e+05]
 [ -1.08975990e+07  -2.39987960e+07   0.00000000e+00   3.74051719e+05]
 [ -1.10543630e+07  -2.40516500e+07   0.00000000e+00   3.66518000e+05]
 [ -1.10951790e+07  -2.41662480e+07   0.00000000e+00   3.20761438e+05]]
>>> print
step.frames[1].fieldOutputs['S'].getSubset(region=set,position=
   ELEMENT_NODAL,elementType='S8R').bulkDataBlocks[0].data
[[  4.87651866e-43  -2.41047720e+07   0.00000000e+00   3.10530625e+05]
 [ -1.08975990e+07  -2.39987960e+07   0.00000000e+00   3.74051719e+05]
 [ -1.10543630e+07  -2.40516500e+07   0.00000000e+00   3.66518000e+05]
 [ -1.10951790e+07  -2.41662480e+07   0.00000000e+00   3.20761438e+05]]
>>> print
step.frames[1].fieldOutputs['S'].getSubset(region=set,position=
   ELEMENT_NODAL,elementType='S8R').bulkDataBlocks[0].data
[[  5.60519386e-45   5.60519386e-45   2.38220739e-44   1.92838405e+31]
 [  5.42138869e-11   1.77519978e+28   1.25672711e-14   3.72739562e+05]
 [ -1.10543630e+07  -2.40516500e+07   0.00000000e+00   3.66518000e+05]
 [ -1.10951790e+07  -2.41662480e+07   0.00000000e+00   3.20761438e+05]]
>>> print step.frames[1].fieldOutputs['S'].getSubset(region=set,position=
ELEMENT_NODAL,elementType='S8R').bulkDataBlocks[0].data
[[  2.24207754e-44   5.60519386e-45   0.00000000e+00   3.10530625e+05]
 [ -1.08975990e+07  -2.39987960e+07   0.00000000e+00   3.74051719e+05]
 [ -1.10543630e+07  -2.40516500e+07   0.00000000e+00   3.66518000e+05]
 [ -1.10951790e+07  -2.41662480e+07   0.00000000e+00   3.20761438e+05]]

从上面可以看出,尽管调用完全相同,因此数据应该相同,但数组并不一致。我可以理解并接受,真正小的数字是不同的,但所有大小的数字都会改变。
我希望有人能帮我解决这个问题或给我一个解决办法。
提前谢谢。
基于评论的附加信息。
有人提出了两种解决方法(下面所示的示例与上面的数据集不同)。方法1)解决问题。
1)tmp=x.bulkDataBlocks,它执行任务
tmp=step.frames[1].fieldOutputs['S'].getSubset(
   region=set,position=ELEMENT_NODAL,elementType='S8R').bulkDataBlocks
print tmp[0].data
[[-20119512.     -7074813.5           0.     -2039073.375]
 [-20130472.     -7037518.            0.     -1930314.125]
 [-20122654.     -6948099.            0.     -2073283.625]
 [-20107980.     -6968545.5           0.     -1941211.375]]
print tmp[0].data
[[-20119512.     -7074813.5           0.     -2039073.375]
 [-20130472.     -7037518.            0.     -1930314.125]
 [-20122654.     -6948099.            0.     -2073283.625]
 [-20107980.     -6968545.5           0.     -1941211.375]]
print tmp[0].data
[[-20119512.     -7074813.5           0.     -2039073.375]
 [-20130472.     -7037518.            0.     -1930314.125]
 [-20122654.     -6948099.            0.     -2073283.625]
 [-20107980.     -6968545.5           0.     -1941211.375]]

2)tmp=np.copy(x.bulkDataBlocks),这使得更不一致
tmp=np.copy(step.frames[1].fieldOutputs['S'].getSubset(
   region=set,position=ELEMENT_NODAL,elementType='S8R').bulkDataBlocks)
print tmp[0].data
[[  2.24207754e-44   5.60519386e-45   0.00000000e+00  -1.78478850e+06]
 [ -1.63939740e+07  -7.07835200e+06   0.00000000e+00  -1.76956088e+06]
 [ -1.63960690e+07  -7.07548150e+06   0.00000000e+00  -1.79225850e+06]
 [ -1.63969780e+07  -7.07681000e+06   0.00000000e+00  -1.79695375e+06]]
print tmp[0].data
[[  1.68155816e-44   5.60519386e-45   0.00000000e+00  -1.78478850e+06]
 [ -1.63939740e+07  -7.07835200e+06   0.00000000e+00  -1.76956088e+06]
 [ -1.63960690e+07  -7.07548150e+06   0.00000000e+00  -1.79225850e+06]
 [ -1.63969780e+07  -7.07681000e+06   0.00000000e+00  -1.79695375e+06]]
print tmp[0].data
[[  5.60519386e-45   5.60519386e-45   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]
 [  0.00000000e+00   0.00000000e+00   0.00000000e+00   0.00000000e+00]]

最佳答案

您可能正在查看外推错误(这可能是由网格或分析设置的问题引起的)。请注意,元素节点数据通常在每次请求数据时从分析中使用的积分点外推,除非它已显式存储为作业的字段输出。
有关更多信息,请参见Abaqus Scripting User's Guide(第10.10.8节):
如果在指定的odb_Enum::ELEMENT_NODAL或odb_Enum::CENTROID位置的输出数据库中找不到所请求的字段值,则从odb_Enum::INTEGRATION_POINT位置的字段数据外推它们。

关于python - 使用Python脚本从Abaqus ODB输出不一致,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49110702/

10-09 17:42