ABAQUS 脚本,参考点上的边界条件 1.为什么代码会抛出异常?2.为什么会发生这种情况?3.怎么办?4.未来的其他提示

问题描述

我已经在 Abaqus GUI 中创建了一个参考点并对其应用了边界条件,但是当我将这些命令的文本从 .rpy 文件复制到我的脚本并运行它时,我收到了消息:

File "C:/...../script.py",line 110 in <module> refPoints1=(r1[8],)  KeyError:8

代码如下:

#Here is code for creation of reference point:
a = mdb.models['Model-1'].rootAssembly
e11 = a.instances['Part-1-1'].edges
a.ReferencePoint(point=a.instances['Part-1-1'].InterestingPoint(edge=e11[1],rule=MIDDLE))
#Here is code for boundary condition assignment:
a = mdb.models['Model-1'].rootAssembly
r1 = a.referencePoints
refPoints1=(r1[8],)
region = a.Set(referencePoints=refPoints1,name='Set-1')
mdb.models['Model-1'].DisplacementBC(name='BC-1',createStepName='Initial',region=region,u1=SET,u2=SET,u3=UNSET,ur1=UNSET,ur2=UNSET,ur3=UNSET,amplitude=UNSET,distributionType=UNIFORM,fieldName='',localCsys=None)

有什么问题?

为什么 Abaqus 编写的代码在从外部脚本重新运行时会抛出异常?

解决方法

1.为什么代码会抛出异常?

在您的代码中,KeyError:8 仅表示容器 a.referencePoints 中的此类索引下没有元素。

2.为什么会发生这种情况?

在 GUI 中工作时,您可能定义了比脚本定义的更多的参考点(例如,因为您只使用了 Abaqus 编写的部分代码)。

3.怎么办?

首先,在 Abaqus 中,最好不要通过索引访问对象,除非不可能以不同的方式进行访问和/或您手动进行编号。因此,如果可能,请尝试使用坐标访问对象(例如,可以使用 FindAt 方法来查找 edge 对象)。

不幸的是,在 Abaqus 中,参考点是功能有限的对象(与节点和顶点相比​​)。因此,最好在创建后跟踪参考点对象。你可以这样做:

  • 定义变量:
rp1 = a.ReferencePoint(
    point=a.instances['Part-1-1'].InterestingPoint(edge=e11[1],rule=MIDDLE)
)
  • 和/或创建一个 Set
rp1_set = a.Set(
    name='my_RP-1_set',referencePoints=(a.referencePoints[rp1.id],)
)

注意:方法 ReferencePoint 返回一个 Feature 对象,而不是 ReferencePoint 对象。为了访问 ReferencePoint,您必须通过索引访问它,该索引可以在相应的 Feature 对象中找到。

4.未来的其他提示。

不要忘记,在窗口底部的 Abaqus GUI 中,您有一个 Python 解释器,可用于测试。

例如,如果您在 GUI 中运行脚本,您可以尝试“调查”a.referencePoints 容器:

  • 检查它的类型:
type(a.referencePoints)
  • 检查它的长度:
len(a.referencePoints)

这样的调查可以让您更好地了解不同对象是如何在 Abaqus 中构建的以及您如何与它们交互。

希望它会有所帮助。祝你好运

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...