如何在Abaqus中使用Python脚本创建刚度(节点力/位移)等高线图?

2024-06-26 00:01:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据现场输出结果创建刚度等高线图。为此,我必须将NFORC2(节点力向量的Y分量)除以U2(Y方向的位移)

我尝试使用创建字段输出-->;从我们可以定义自己的输出变量的字段。可以使用getScalarField()从向量中提取标量,但Abaqus显示错误,因为NFORC是整元素变量,而U是节点变量

因此,似乎唯一的方法是编写一个脚本来转换NFORC。我发现了一个可以将变量保存为节点元素的代码。它是为在积分点计算的应力而设计的,所以我不确定它是否能正确转换NFORC,但这是迄今为止我唯一的选择。它保存了一些输出,所以我认为它是正确的

然而,Abaqus仍然不允许我将这个新变量除以U2。看来我得先把它转换成唯一的节点。为此,我找到了另一个Python脚本,并将其添加到第一个脚本中。显然我做错了什么,因为错误出现了

以下是合并为一个脚本的两个脚本:

from abaqusConstants import *
from odbAccess import *
import numpy as np

# ***********************************************
odbPath="path_to_odb_file"
stepName="Step-1"
frameNumber=-1 #last frame in the stepName
sourceOutputFieldName='NFORC2' #element forces field
newOutputFieldName='NFORC2_at_NODES_UNIQUE'
# ************************************************
odb=session.openOdb(name=odbPath,readOnly=FALSE)
step=odb.steps[stepName]
frame=step.frames[frameNumber]
sourceField=frame.fieldOutputs[sourceOutputFieldName]
subField=sourceField.getSubset(position=ELEMENT_NODAL)
Values=subField.bulkDataBlocks[0].data
NodeLabels=subField.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)
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
newField=frame.FieldOutput(name=newOutputFieldName, field=Values_Averaged)
odb.save()
odb.close()

我得到的错误指向以下代码行:

newField=frame.FieldOutput(name=newOutputFieldName, field=Values_Averaged) 

错误消息是:TypeError:field上的关键字错误

您知道什么可能导致错误,以及脚本应该是什么样子吗


Tags: import脚本field节点错误npframevalues