如何解决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 中构建的以及您如何与它们交互。
希望它会有所帮助。祝你好运
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。