首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python脚本在abaqus上查找唯一节点处的应力

使用python脚本在abaqus上查找唯一节点处的应力
EN

Stack Overflow用户
提问于 2019-01-25 00:12:07
回答 1查看 1K关注 0票数 0

我来解释我的问题。我绝对需要使用python脚本在我的abaqus模型上找到几个独特节点的应力。首先,我需要找到承受最大主应力的节点,然后我还需要找到最大化某个参数的节点,该参数使用了唯一节点上的应力和应变。

我首先尝试了在这里看到的https://stackoverflow.com/a/43175485/10960993max9111方法,但在使用脚本时遇到了以下问题:

代码语言:javascript
复制
for i in xrange(0,Values.shape[1]):
    unq_sum = np.bincount(unq_idx, weights=Values[:,i])
    ...

我收到以下错误消息:

代码语言:javascript
复制
ValueError: The weights and list don't have the same length.

我不知道该怎么做,我真的需要找到具有最大主应力的唯一节点的id和坐标。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-07 19:16:12

我终于找到了我的问题的解决方案,它可以帮助很多人(至少它帮助了我的同事)。如果你想通过Abaqus脚本知道表面的应力,max9111提出的平均外部节点应力值的解决方案是完美的,也是唯一的解决方案。然而,代码应该修改如下以运行,至少在Abaqus 6.16上:

第一部分没有变化。

代码语言:javascript
复制
Field = session.odbs['ModelName.odb'].steps['StepName'].frames[0].fieldOutputs['S']
Field = Field.getSubset(position = ELEMENT_NODAL)
Values=Field.bulkDataBlocks[0].data
NodeLabels=Field.bulkDataBlocks[0].nodeLabels

NodeLabels_unique, unq_idx = np.unique(NodeLabels, return_inverse=True)
Values_Averaged=np.zeros((NodeLabels_unique.size,Values.shape[1]))
unq_counts = np.bincount(unq_idx)

由于Abaqus使用bulkDataBlocks存储数据的方式,Values变量的创建方式发生了变化:

代码语言:javascript
复制
for i in xrange(0,Values.shape[1]):
    ValuesTemp = [item[i] for item in Values]
    unq_sum = np.bincount(unq_idx, weights=ValuesTemp)
    Values_Averaged[:,i] = unq_sum / unq_counts

    max_ind=np.unravel_index(np.argmax(Values_Averaged),Values_Averaged.shape)

print("The max stress is at NodeLabel "+str(NodeLabels_unique[max_ind[0]])+ " its value is "+ str(Values_Averaged[max_ind]) +" MPa.")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54350924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档