gpt4 book ai didi

python - 使用 Python 脚本的 Abaqus ODB 输出不一致

转载 作者:行者123 更新时间:2023-11-28 18:14:41 27 4
gpt4 key购买 nike

我正在使用 Python 脚本从 Abaqus 有限元模型中提取和后处理结果,但在处理来自 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]]

最佳答案

您可能正在查看外推错误(这可能是由您的网格或分析设置问题引起的)。请注意,ELEMENT_NODAL 数据通常是在每次请求数据时从分析中使用的集成点推断出来的,除非它已明确存储为作业的字段输出。

参见 Abaqus Scripting User's Guide (第 10.10.8 节)了解更多信息:

If the requested field values are not found in the output database at the specified odb_Enum::ELEMENT_NODAL or odb_Enum::CENTROID positions, they are extrapolated from the field data at the odb_Enum::INTEGRATION_POINT position.

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com