ABAQUS python编程 接触关系的建立、查找find_contacts()、观察.doc

上传人:ng****60 文档编号:2984289 上传时间:2019-05-15 格式:DOC 页数:31 大小:383.50KB
下载 相关 举报
ABAQUS python编程 接触关系的建立、查找find_contacts()、观察.doc_第1页
第1页 / 共31页
ABAQUS python编程 接触关系的建立、查找find_contacts()、观察.doc_第2页
第2页 / 共31页
ABAQUS python编程 接触关系的建立、查找find_contacts()、观察.doc_第3页
第3页 / 共31页
ABAQUS python编程 接触关系的建立、查找find_contacts()、观察.doc_第4页
第4页 / 共31页
ABAQUS python编程 接触关系的建立、查找find_contacts()、观察.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

1、ABAQUS python 编程 接触关系的建立、查找 find_contacts()、观察 模型看似形状简单,但是所需要建立的接触对却非常多,共有 206 个接触对。如果按照把脚本记录语句拷贝来完成,则脚本代码会非常长(根据 abaqus.rpy 记录,多达两万多行语句。因为脚本代码最终还是一个一个地建立相应的接触对,如前言部分例子所示)。虽然可以通过界面操作方式下的通用接触对查找来进行,但往往接触对的检查、确认工作量较大。而且当模型需要改变时,该接触对就无效了。很多人的模型不收敛或者计算时间非常长,很多时候问题均出 在接触对的设置上。下面详细介绍本人自行编写的通用接触对相关的函数。这些函数

2、可以使接触对的建立简单易行。 3.1. 接触对的通用查找函数 find_contacts()的介绍 函数原型如下。 def find_contacts(action=tie, master_parts=, slave_parts=, master_insts=, slave_insts=, master_set=, slave_set=, baseOn=slave, method=sets,find, byseed=no, one_one=no, prop=Frictionless, step=step1): 该函数根据不同的设定条件自动查找接触对,并生成相应的接触对。 find_contac

3、ts()的默认形式为建立 tie。也可以设置默认为 contact。即 find_contacts (action=contact) 。由于篇幅有限,本文不再列出该函数的具体内容。 基本原理:已知一个实例(称为 base inst)的一个面 (base face),要查找与其相配对接触的另一个实例 (称为 mate inst)的配对面( mate face),主要有两种方法:一种是 find 的方法(最底层的操作是 findAt()函数);另外一种是 search 的方法(已知 x,y,z 范围、方向、形状等,查找符合此特征的所有面)。第一种方法又可以细分为两种方法:粗查和细查。这些方法描述如

4、下。 1)、粗查法。根据 base face 的 pointOn,利用 ABAQUS 自带的 findAt()函数查找 mate face(图 3)。假如这两个 inst 的交界处剖分合理 (partition,也可保证有足够多的接触单元,和建立良好的 接触关系,有利于收敛 ),通常都能找到 mate face。 find_contacts()函数中,称这种方法为 method = find, byseed=no 。但有时 base face 的 pointOn 不一定落在 mate face 上,导致该 base face 找不到其 mate face。如下所示。这种方法可适用于平面和曲面的

5、接触面。 2)、细查法。这种方法在方法 1 的基础上作了改进。即在 base face 上布置很多点 (seeds, 包含 pointOn)(图 4),这些点总有一个点落在 mate face 上 。只要有一个点落在 mateface 上,这个 mate face 就找到了。当然,一个 base face 也有可能找到多个 mate face。布点方案如下所示,可以有多种,如六点法和十点法。这种方法在 find_contacts()函数中称为 method=find, byseed=yes 。很显然,布点越多,就越能找到 mate face,但运行时间就会增加。这种方法适用于平面 (平行于坐标

6、平面或者倾斜 )的接触面。 3)、 search 方法(或称 crossrange 方法)。首先,一个 mate face 的范围 (x, y, z)和其它特征(法线方向、形状、曲率半径等)可获知,再根据自行编写的 face_select()函数,在 mate inst 中搜索。这种方法需要检查 mate inst 的所有面,判断每一个面是否与base face 有交集(即交叠)。若有则选中。这种搜索方法精度最高,但该 base face 最好是平行于坐标轴平面的面。在这种要求下,两个相接触的面是相切的,而且相切面平行于坐标轴平面。在 find_contacts()函数中,这种方法被称为 me

7、thod=search ,与布点种子 (seed)无关。 如何获 得 base face? 可以在 part 中选择某些面建立一些 face set。通常每个 part的哪些面会参与接触都是预先知道的,可以建立相应的 face set。这样,在生成的 instance 中,也都继承了这些 face set。具体到 find_contacts()函数的参数,可能有四种情形: 1). master_set 3). master_set 4). master_set = and slave_set = 前三种根据指定的 face set 来查找,第四种根据 base inst 的每个 face se

8、t 来查找。 如果根本不提供 face set,而且 part 也没有创建 face set,则只能根据两个实例的交集来寻找他们的接触对。此时,要求这两个实例的相切面是平行于坐标轴平面的。 事实上,在建模过程中,建立 part 的 face set 是很方便也很有必要的。因为 ABAQUS的很多操作,除了建立接触对之外,还有建立 约束、对称、施加载荷、以及模型观察等都需要在 set 的基础上操作。从某种意义上说, Python 面向对象的操作,一种表现就是面向 set 的操作。 所以,从根本上说, find_contacts()函数应用了两种方法: 1)根据 face sets 来查找 (参考

9、引言部分的 Python 脚本记录语句,可以说 GUI 操作下的通用接触对的查找原理也是根据 face sets 来的 ); 2)根据交集 (crossrange) 来查找。 find_contacts()函数中,当利用 face sets 方法没有查找到接触对时,就会自动尝试根据交集来查 找; 反过来,当利用交集方法没有找到接触对时,就会自动尝试根据 face sets 来查找。目的都是为了找到接触对。通常,在建立 face set 的情况下,都能很快找到接触对。 由于篇幅所限, find_contacts()函数的具体内容摘录如下。仅供参考。 baseOn = baseOn.lower()

10、 if baseOn = master: base_insts = master_insts base_parts = master_parts base_set = master_set mate_insts = slave_insts mate_parts = slave_parts mate_set = slave_set elif baseOn = slave: base_insts = slave_insts base_parts = slave_parts base_set = slave_set mate_insts = master_insts mate_parts = mas

11、ter_parts mate_set = master_set action = action.lower() byseed = byseed.lower() one_one = one_one.lower() if type_of(method) = STR: method = method if (find not in method) and (search not in method): method.append(find) obj_names = if base_insts = : if base_parts : base_insts = insts_byset(base_set)

12、 obj_names = base_set + _ elif base_insts = : base_insts = a.instances.values() # a = mdb.modelsModel1.rootAssembly obj_names = all_instances_ if obj_names else: obj_names = obj_names:1 + (master)= if mate_insts = : if mate_parts : mate_insts = insts_byset(mate_set) obj_names = obj_names + mate_set

13、elif mate_insts = : mate_insts = a.instances.values() obj_names = obj_names + all_instances if obj_names1 = _: obj_names = obj_names:1 inst_names = for inst1 in base_insts: inst_names.append(inst1.name) if inst1.name not in insts_range.keys(): insts_rangeinst1.name = poi_range(inst1) #获取实例的空间范围 for

14、inst2 in mate_insts: if inst2.name not in insts_range.keys(): insts_rangeinst2.name = poi_range(inst2) if action = tie: total_0 = len(_m.constraints) cont_func = s2s_tie elif action = contact: total_0 = len(_m.interactions) cont_func = s2s_contact . . if action = tie: # cont_func 是一个函数名变量 cont_func

15、= s2s_tie # 指向建立 tie 关系 (即 constraint)的 s2s_tie()函数 elif action = contact: cont_func = s2s_contact # 指向建立 contact关系 (即 interaction)的 s2s_contact()函数。 . . # Situation 4 if base_set = mate_set = : if sets in method: sets_tried = True for inst1 in base_insts: part = _m.partsinst1.partName # _m = mdb.mo

16、delsModel1 for setname in part.sets.keys(): if setname0:3 = fc_: found = False prefix = 3 setrange1 = set_range(inst1,setname) # 获取 set 的空间范围 for inst2 in mate_insts: if inst2.name = inst1.name: continue space2 = insts_rangeinst2.name cross = intersect(setrange1,space2) # 获取 face set 与 mate inst 的交集

17、 if cross = False: continue print print Finding mate faces of,inst1.name,by its setname=,setname,(method= + str(method) + , byseed= + byseed + , one_one= + one_one + ). faces1,faces2 = faces_pair(setname,inst1,inst2,method=method,byseed=byseed)#查找 mate face if len(faces2) 0: found = True if baseOn = master:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。