Abaqus部件间Cohesive单元建立之部件合并法

在Abaqus复杂装配体分析领域,部件间Cohesive单元的建立一直是技术难点。继之前分享的《Abaqus部件间Cohesive单元建立之共面识别技术》、《Abaqus部件间Cohesive单元建立之单元和节点对提取技术》和《Abaqus部件间Cohesive单元模拟的困境与解决方案》三篇博文后,今天我将为大家带来一种全新的解决方案——基于部件合并的Cohesive单元建立方法。

一、之前的部件间Cohesive单元建立的深层瓶颈

在Abaqus复杂装配体的有限元分析中,部件间Cohesive单元的建立始终是技术难点所在。回顾我们之前探讨的多种解决方案,这些方法虽然在特定场景下有效,但在处理大规模复杂装配体时仍面临诸多挑战。

问题的本质在于部件独立性带来的数据隔离。每个部件在Abaqus中维护着独立的几何拓扑和网格体系,这种设计虽然保证了建模的模块化,却在部件间连接模拟上设置了天然屏障。当我们尝试在不同部件间建立共享节点的Cohesive单元时,就如同要在两个独立的数字王国之间架设桥梁,需要克服节点编号体系、坐标系统、网格密度等多重障碍。

# 之前的方法面临的典型困境
部件A节点体系: [1, 2, 3, 4, ...]  # 独立的编号空间
部件B节点体系: [1, 2, 3, 4, ...]  # 相同的编号,不同的物理实体

# 即使空间坐标完全对应,节点编号的独立性使得直接连接变得异常复杂
部件A节点1: (x1, y1, z1)
部件B节点1: (x1, y1, z1)  # 相同坐标,不同标识!

二、部件合并法的核心创新思路

基于对之前的方法局限性的深刻认识,我们提出了一种逆向思维的解决方案:既然部件间的连接如此困难,何不先将部件合并,再在合并后的单一部件内部识别连接界面?

这种思路的转变具有现实意义。之前的方法试图在保持部件独立性的前提下建立连接,而合并法则通过消除部件边界来从根本上解决问题。具体而言:

之前的思路:部件间连接 → 复杂匹配算法 → 跨部件数据协调

合并法思路:部件合并 → 内部界面识别 → 直接建立连接

合并法的实施包含两个核心环节:

(1) 智能部件合并

在Abaqus/CAE中执行部件合并操作时,必须选择"保留边界"(Retain Boundary)选项。这一选择确保了合并后的部件虽然在外观上是单一的,但在内部仍然保持着原有部件的几何边界信息。

# 合并操作的几何意义
原始状态: [部件A] + [部件B] = 两个独立的几何实体
合并操作: Merge with "Retain Boundary"
结果状态: [部件A|部件B] = 单一部件,包含多个Cell
(2) 内部边界智能识别

合并后的部件包含多个Cell(原部件),我们需要精确识别这些Cell之间的接触界面。这通过分析面的连接特性来实现:

def analyze_part_faces(part_obj):
    """
    基于几何拓扑的面类型智能识别
    """
    external_faces_dict = {}
    interface_faces = []
    
    # 初始化每个Cell的外表面存储
    cell_count = len(part_obj.cells)
    for cell_index in range(cell_count):
        external_faces_dict[cell_index] = []
    
    # 核心识别逻辑
    for face in part_obj.faces:
        cell_indices = face.getCells()
        
        if len(cell_indices) == 1:
            # 外表面:只连接一个Cell
            cell_index = cell_indices[0]
            external_faces_dict[cell_index].append(face)
        elif len(cell_indices) >= 2:
            # 内部边界面:连接多个Cell,即Cohesive单元的候选位置
            interface_faces.append(face)
    
    return external_faces_dict, interface_faces

三、基于合并法的自动化处理

(1)多层次集合管理体系

为了支持后续的Cohesive单元建立,我们需要在识别出的边界面上创建系统的集合和表面:

def create_sets_and_surfaces(part_obj, part_name, external_faces_dict, interface_faces, cleanup_first=True):
    """
    建立层次化的几何特征管理体系
    """
    clean_part_name = part_name.replace('-', '_').replace(' ', '_')
    
    # 1. 创建全局公共表面
    if interface_faces:
        surface_name = "Interface_{}".format(clean_part_name)
        # 将所有内部边界面聚合为单一表面,便于批量操作
        face_array = part_obj.faces[interface_faces[0].index:interface_faces[0].index+1]
        for i in range(1, len(interface_faces)):
            face_array = face_array + part_obj.faces[interface_faces[i].index:interface_faces[i].index+1]
        
        part_obj.Surface(name=surface_name, side1Faces=face_array)
    
    # 2. 为每个Cell创建独立的外表面集合
    for cell_index, external_faces in external_faces_dict.items():
        if external_faces:
            set_name = "Ext_Cell{}_{}".format(cell_index, clean_part_name)
            # 创建按Cell分类的外表面集合
            face_array = part_obj.faces[external_faces[0].index:external_faces[0].index+1]
            for i in range(1, len(external_faces)):
                face_array = face_array + part_obj.faces[external_faces[i].index:external_faces[i].index+1]
            
            part_obj.Set(name=set_name, faces=face_array)
    
    # 3. 创建详细的公共面对集合
    for interface_face in interface_faces:
        connected_cells = interface_face.getCells()
        if len(connected_cells) == 2:
            set_name = "Interface_Cell{}_{}_{}".format(
                connected_cells[0], connected_cells[1], clean_part_name)
            # 为每对相邻Cell创建专门的界面集合
            part_obj.Set(name=set_name, faces=[interface_face])

(2) 装配体级别的扩展应用

合并法的优势不仅体现在单一部件层面,在复杂装配体中同样表现出色:

def analyze_assembly_faces(instances, skip_suppressed=True):
    """
    装配体级别的面分析,支持多实例协同处理
    """
    all_interface_faces = []
    all_external_faces = []
    
    for instance_name, instance_obj in instances.items():
        # 智能状态检测,自动跳过被抑制的实例
        if skip_suppressed and hasattr(instance_obj, 'suppressed') and instance_obj.suppressed:
            continue
            
        # 实例级别的面分析
        for face in instance_obj.faces:
            cell_indices = face.getCells()
            
            if len(cell_indices) == 1:
                all_external_faces.append({
                    'face': face,
                    'cell_index': cell_indices[0],
                    'instance_name': instance_name,
                    'instance_obj': instance_obj
                })
            elif len(cell_indices) >= 2:
                all_interface_faces.append({
                    'face': face,
                    'cell_indices': cell_indices,
                    'instance_name': instance_name,
                    'instance_obj': instance_obj
                })
    
    return all_external_faces, all_interface_faces

四、圆柱体-带孔板合并实例验证

为了直观验证部件合并法在识别内部公共面方面的可行性和有效性,我们设计了一个典型的圆柱体-带孔板装配模型。

(1) 模型建立与合并

1. 初始几何配置:

我们创建了两个独立的部件:

带孔板(Part-1):10× 10 × 2的板件,中心包含直径4的通孔。

圆柱体(Part-2):直径4,高度5;

image-20251104121759282

image-20251104121722123

2. 关键合并操作

在Abaqus/CAE中执行合并操作:

  1. Assembly模块下选择带孔板和圆柱体两个部件实例
  2. 使用"Merge/Cut"功能中的"Merge"选项
  3. 勾选"Retain boundary edges"选项
  4. 生成新的合并部件"Part-3"
# 合并后的几何结构
合并后部件: Merged_Part
包含Cell数量: 2个
Cell-0: 原带孔板(去除圆柱重叠部分)
Cell-1: 原圆柱体
内部边界: 圆柱面与孔面的接触区域

image-20251104121938508

(2)公共面识别结果

运行我们的识别程序后,获得了显著的成果:

def find_common_faces_main():
    """
    主程序执行结果
    """
    print("=== 圆柱体-带孔板模型分析结果 ===")
    print("模型名称: Cylinder_Plate_Model")
    print("分析类型: 部件级别")
    
    # 分析结果统计
    external_faces_dict, interface_faces = analyze_part_faces(merged_part)
    
    print("部件包含Cell数量: {}".format(len(merged_part.cells)))
    print("识别出的外表面数量: {}".format(
        sum(len(faces) for faces in external_faces_dict.values())))
    print("识别出的内部边界面数量: {}".format(len(interface_faces)))
    
    # 创建集合和表面
    create_sets_and_surfaces(merged_part, "Merged_Part", 
                           external_faces_dict, interface_faces)

程序输出结果:

=== 开始处理模型 'Model-1' 的部件 ===
找到 3 个部件

处理部件: Part-1
  部件只有 1 个体,跳过处理

处理部件: Part-2
  部件只有 1 个体,跳过处理

处理部件: Part-3
  部件包含 2 个体,开始分析面...
  找到 1 个内部边界面, 9 个外表面
    内部边界面 7: 连接体 (0, 1)

** 清理部件中之前创建的集合和表面 **
  删除集合: Ext_Cell0_Part_3
  删除集合: Ext_Cell1_Part_3
  删除集合: Interface_Cell0_1_Part_3
  删除表面: Interface_Part_3
  总共删除了 3 个集合和 1 个表面
  成功创建表面: Interface_Part_3 (包含 1 个面)
  成功创建集合: Ext_Cell0_Part_3 (实际包含 6 个面)
  成功创建集合: Ext_Cell1_Part_3 (实际包含 3 个面)
  ** 创建公共面集合 **
  成功创建公共面集合: Interface_Cell0_1_Part_3 (连接体: [0, 1])
  总共创建了 1 个公共面集合
  ** 创建结果验证 **
  表面 'Interface_Part_3' 包含 1 个面
  集合 'Ext_Cell0_Part_3' 包含 6 个面
  集合 'Ext_Cell1_Part_3' 包含 3 个面
  ** 公共面集合验证 **
  公共面集合 'Interface_Cell0_1_Part_3' 包含 1 个面
  
  === 模型 'Model-1' 部件处理完成 ===

Abaqus中对应的结果如下:

image-20251104122541846

image-20251104122651738

image-20251104122744912

五、结语

"在工程仿真的世界里,最复杂的难题往往需要最简单的解决方案。"部件合并法的提出,正是这种思想的体现。通过将复杂的部件间问题转化为简单的部件内问题,我们不仅找到了技术上的解决方案,更重要的是展示了一种面对工程挑战时的创新思维方式。

圆柱体-带孔板模型的成功验证,不仅证明了该方法在技术上的可行性,更展现了其在工程实践中的巨大潜力。从简单的轴孔配合到复杂的多体装配,部件合并法为我们提供了一条高效、精确的Cohesive单元建立途径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值