ABAQUS二次开发中创建SET

在ABAQUS中创建加载、边界条件时,需要使用set,创建set时需要使用对象集合对象中的Set函数,这个函数需要提供加入对象集合的列表,但这个对象列表好像并不能自行创建,只能通过ABAQUS各类对象集合中的findAt、getSequenceFromMask、getByBoundingSphere、getByBoundingCylinder或getByBoundingSphere函数得到,但这几个函数在直接使用PYTHON编程时都不太好用。

  • findAt必须指定精确的位置(精确到1e-6),这在实际中可能很难达到;
  • getSequenceFromMask这个函数需要传递一个对象掩码,这在程序编写时不可能得到,因而这个函数通常是rpy文件记录的abaqus操作中才会出现;
  • getByBoundingBox、getByBoundingCylinder和getByBoundingSphere三个函数都要求所选择的对象必须完全处于指定的包围盒/柱/球内部,这容易误选中一些目标对象附近较小的对象,并不准确;

好在对象集合中提供了getClosest这个函数,可以得到距离指定的点最近的对象集合,而且可以指定搜索的精度。这个函数返回一个字典,如下所示

{0: (mdb.models['Model-1'].rootAssembly.instances['Part-1-1'].edges[74], (-4156.92193816531, -2400.0, 5250.0))}

返回的这个字典中键为序号,值为一个tuple,tuple中第一项是一个对象,第二项是该对象所处的精确位置,因而可以使用findAt函数通过这个精确的位置坐标获取相应的对象列表传递给Set函数创建相应的Set对象,如下所示。

model1 = mdb.models['Model-1']
rootAss1 = model1.rootAssembly
ins1 = rootAss1.instances['Part-1-1']

e1 = ins1.edges.getClosest(coordinates=((1000,1000, 5250.0)),), searchTolerance=2.0)
e1Set = rootAss1.Set(edges= ins1.edges.findAt(coordinates=(e1[0][1],)), name='e1set0')
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Abaqus二次开发,connectivity是一个非常重要的概念,它描述了模型各个实体(如节点、单元等)之间的连接关系。 在Abaqus,每个单元都由一组节点组成,这些节点按照一定的方式连接在一起形成单元。因此,connectivity描述了节点与单元之间的连接关系,即哪些节点被用于构建哪些单元。 在二次开发,我们可以使用Abaqus提供的API来获取模型各个实体的connectivity信息。例如,我们可以使用以下代码来获取单元的connectivity信息: ```python from abaqus import * from abaqusConstants import * # 获取模型 model = mdb.models['Model-1'] # 获取单元集合 elems = model.rootAssembly.instances['Part-1-1'].elements # 遍历单元并获取其connectivity信息 for elem in elems: connectivity = elem.connectivity print('Element ID:', elem.label) print('Connectivity:', connectivity) ``` 上述代码,我们首先获取了模型的一个实例(即某个部件的实例),然后获取了该实例的所有单元。接下来,我们遍历每个单元并获取其connectivity信息,并将其打印输出。 除了获取connectivity信息,我们还可以使用API来修改模型的connectivity信息。例如,我们可以使用以下代码将一个节点从一个单元删除: ```python from abaqus import * from abaqusConstants import * # 获取模型 model = mdb.models['Model-1'] # 获取要修改的单元 elem = model.parts['Part-1'].elements[0] # 获取单元的connectivity信息 connectivity = elem.connectivity # 删除第一个节点 connectivity.pop(0) # 更新单元的connectivity信息 elem.connectivity = tuple(connectivity) # 提交更改 mdb.Job(name='Job-1', model='Model-1').submit() ``` 上述代码,我们首先获取了模型的一个部件,并从该部件获取了一个单元。接下来,我们获取了该单元的connectivity信息,并从删除了第一个节点。最后,我们使用更新后的connectivity信息来更新单元,并提交更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值