使用 python 脚本在 abaqus 上查找独特节点处的应力
Find stresses at unique nodal on abaqus with python script
我解释一下我的问题。我绝对需要使用 python 脚本在我的 abaqus 模型上找到几个独特节点处的应力。首先,我需要找到承受最大主应力的节点,然后我还需要找到使某个参数最大化的节点,该参数在唯一节点处使用应力和应变。
我首先尝试了 max9111 I saw here 的方法,但我在使用脚本的以下行遇到了问题:
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 和坐标。
感谢您的帮助!
我终于找到了可以帮助很多人(至少它帮助了我的同事)的问题的解决方案。
max9111 提出的外部节点平均应力值的解决方案是完美且唯一的解决方案,如果您想通过 Abaqus 脚本了解表面的应力。但是,至少在 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.")
我解释一下我的问题。我绝对需要使用 python 脚本在我的 abaqus 模型上找到几个独特节点处的应力。首先,我需要找到承受最大主应力的节点,然后我还需要找到使某个参数最大化的节点,该参数在唯一节点处使用应力和应变。
我首先尝试了 max9111 I saw here
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 和坐标。
感谢您的帮助!
我终于找到了可以帮助很多人(至少它帮助了我的同事)的问题的解决方案。 max9111 提出的外部节点平均应力值的解决方案是完美且唯一的解决方案,如果您想通过 Abaqus 脚本了解表面的应力。但是,至少在 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.")