首页 > 解决方案 > 如何在 Abaqus 中使用 Python 脚本创建刚度(节点力/位移)等值线图?

问题描述

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

我尝试使用 Create Field Output --> From Fields 来定义我们自己的输出变量。可以使用 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:字段上的关键字错误

您知道可能导致错误的原因以及脚本的外观吗?

标签: pythonabaqus

解决方案


推荐阅读