为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只萌萌小番薯 2021-10-19 16:48:20
我解释我的问题。我绝对需要使用 python 脚本在我的 abaqus 模型上的几个独特节点上找到应力。首先,我需要找到承受最大主应力的节点,然后我还需要找到使某个参数最大化的节点,该参数在唯一节点处使用应力和应变。我首先尝试了我在这里看到的max9111的方法https://stackoverflow.com/a/43175485/10960993但我在使用脚本的以下行中遇到了问题:for i in xrange(0,Values.shape[1]):    unq_sum = np.bincount(unq_idx, weights=Values[:,i])    ...我有以下错误消息:ValueError: The weights and list don't have the same length.我不知道该怎么做,我真的需要找到具有最大主应力的唯一节点的 id 和坐标。谢谢您的帮助!
查看完整描述

1 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

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


第一部分没有变化


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 变量的创建方式发生了变化:


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.")


查看完整回答
反对 回复 2021-10-19
  • 1 回答
  • 0 关注
  • 264 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信