name = action[:3] + '_' + inst1.name + '_' + setname[prefix + len(inst1.partName) + 1:] + '(m)//' + inst2.name
created = cont_func (master_inst= inst1, slave_inst=inst2, name=name, m s prop=prop)
elif baseOn == 'slave':
name=action[:3] + '_' + inst2.name + '(m)//' + inst1.name + '_' + setname[prefix + len(inst1.partName) + 1:]
created = cont_func(master_inst=inst2,slave_inst=inst1,name=name, m s prop=prop)
if created:
find_num = find_num + 1
print '★num =',find_num, \\
if one_one == 'yes': ## 假如一个实例只是跟另外一个实例而不是另外多个实例相接触的话。
break
if not found:
print '★No mate faces was found in mate insts based on setname=',setname,'of',inst1.name
## Situation5 (cross‐range method)
if find_num == 0:
print ' '
if sets_tried == True:
print 'Failed by face sets method. ',
print 'Trying cross‐range method... ★★★'
cross_tried = True
for inst1 in base_insts:
space1 = insts_range[inst1.name]
for inst2 in mate_insts:
if inst2.name == inst1.name:
continue
space2 = insts_range[inst2.name]
cross = intersect(space1,space2) ## 获取两个实例之间的交集
if cross <> False:
range_x, range_y, range_z, cross_type = cross
if cross_type <> 'flat_tangent':
continue
print ' '
print 'Finding mate faces of', inst1.name, 'in', inst2.name,'...'
if 'find' in method:
faces1 = face_select(inst1,x=range_x,y=range_y,z=range_z, external=True)
faces1,faces2 = faces_pair(faces1,inst1,inst2,method=['find'],byseed=byseed)
elif 'search' in method:
faces1 = face_select(inst1,x=range_x,y=range_y,z=range_z, external=True)
faces2 = face_select(inst2,x=range_x,y=range_y,z=range_z, external=True)
if len(faces1) > 0 and len(faces2) > 0:
if baseOn == 'master':
name = inst1.name + '(m)//' + inst2.name
created = cont_func(master_inst=inst1, slave_inst=inst2, name=name, m s prop=prop)
elif baseOn == 'slave':
name=inst2.name + '(m)//' + inst1.name
created = cont_func(master_inst=inst2, slave_inst=inst1, name=name, m s prop=prop)
if created:
find_num = find_num + 1
print '★num =',find_num, ', find by flat_tangent cross‐range between two instances:', inst1.name, '//',inst2.name
......
从find_contacts()函数的原型可知,该函数的使用是非常灵活的。可以不提供任何参数,也可以只提供部分参数。完全不提供任何参数时,所建立的部分接触对的主从面或者类型(contact或tie)可能需要更改,这和ABAQUS CAE中的通用接触的界面操作情况是一样的。当提供参数时,所建立的接触对通常不需要修改了。部分具体使用形式如下所示:
## Interactions
## find_contacts('tie',slave_parts=beam2,master_parts=beam1)
## find_contacts('tie',slave_parts=[beam3,beam4],master_parts=beam2,method='cross')
## find_contacts('tie',slave_parts=sup,master_parts=beam2,method='sets')
## find_contacts('tie',slave_parts=sup,master_parts=panel,baseOn='master')
## find_contacts('tie',slave_parts=sup,master_parts=panel,method='cross')
## find_contacts('tie',slave_parts=sup,master_parts=panel,slave_set='fc_sup_top',master_set='fc_panel_rail_left')
## find_contacts('tie',slave_parts=sup,master_parts=panel,slave_set='fc_sup_top', method='find',byseed='no')
## find_contacts('tie',slave_set='fc_sup_top',master_set='fc_panel_rail_left') ##只提供face set
##
## find_contacts('tie',slave_parts=[rope1,rope2,rope3,rope4],master_parts=beam1,method='cross')
## find_contacts('contact',slave_parts=beam2,master_parts = con2)
find_contacts() ##完全不提供任何参数。
下面在参数全部缺省的情况下的让find_contacts()函数自动查找和建立接触对。该函数还可以通过检查 防止建立重复的接触对。该函数对每一个接触对的主从面均建立face set以便检查接触对的实际接触面积。部分查找过程的输出信息如下:
>>> find_contacts()
...
Finding mate faces of panel_A6 by its setname= fc_panel_rail_right (method=['sets', 'find'], byseed=no, one_one=no)...
Refine the source face set fc_panel_rail_right in panel_A6 ...