Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Abaqus中使用Python脚本创建刚度(节点力/位移)等高线图?_Python_Abaqus - Fatal编程技术网

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

如何在Abaqus中使用Python脚本创建刚度(节点力/位移)等高线图?,python,abaqus,Python,Abaqus,我想根据现场输出结果创建刚度等高线图。为此,我必须将NFORC2(节点力向量的Y分量)除以U2(Y方向的位移) 我尝试从可以定义自己的输出变量的字段中使用Create Field Output-->创建字段输出。可以使用getScalarField()从向量中提取标量,但Abaqus显示错误,因为NFORC是整元素变量,而U是节点变量 因此,似乎唯一的方法是编写一个脚本来转换NFORC。我发现了一个可以将变量保存为节点元素的代码。它是为在积分点计算的应力而设计的,所以我不确定它是否能正确转换NF

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

我尝试从可以定义自己的输出变量的字段中使用Create Field Output-->创建字段输出。可以使用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上的关键字错误


您知道错误的原因以及脚本应该是什么样子吗?

您好,麻烦您提供一个您收到的错误消息的示例?这将帮助其他人找出问题所在。您好,当然,错误指向脚本中的以下行:newField=frame.FieldOutput(name=newOutputFieldName,field=Values\u Averaged),消息是:TypeError:field上的关键字error。您可以编辑问题以包含错误,以便其他人可以在问题中看到它。这也会将您的问题刷新到活动问题列表的顶部。您对
FieldOutput
的使用可能是问题所在。
字段
关键字应该是另一个
FieldOutput
对象。我认为在您的例子中,您应该使用采用name、type和description参数的变体创建新的
FieldOutput
。然后使用
addData
方法添加计算值。在Abaqus API中使用numpy数组时,您可能还需要小心。使用Abaqus脚本参考中定义的数据类型会更安全。这个问题解决了吗?。。我自己似乎拿不到。。我试过这样的方法:part1=odb.Part(name='Part-1',embeddedSpace=THREE\u D,type=DEFORMABLE\u BODY)a=odb.rootAssembly instance1=a.Instance(name='Part-1-1',object=part1)newField=frame.FieldOutput(name=newOutputFieldName,description='nodalS11',=SCALAR)contigs11=np.ascontiguousarray(平均值[:,1]).addData(position=NODAL,instance=instance1,labels=NodeLabels_unique,data=contigs11)odb.save()odb.close()无效34-34.6