Abaqus Python脚本指派Connector位移时输入文件出现空单元报错问题
错误根因
你遇到的Element connectivity is missing for element x of type "CONN3D2"报错,本质是只有Connector截面指派的几何定义,没有生成实际的连接单元,也没有建立单元和对应节点的关联关系。GUI仅校验几何层面操作合法性,不会检查网格是否存在,所以提交计算才会报错。
现有代码的核心问题
- 创建Wire时设置了
meshable=OFF,直接禁止了对该线几何划分网格,无法生成CONN3D2单元 - 仅完成了几何边的截面指派,缺少连接单元的网格生成步骤
- Wire的端点未与你指定的
listNodes中的结构节点绑定,即便生成单元也无法和目标结构传递力 - 边界条件的
fastenerSetName参数传入的是几何边集合,Connector边界条件需要对应连接单元集合或连接单元的节点集合才会生效
修复步骤
- 修改Wire创建参数,开启网格权限
将
wires = a.WirePolyLine(points=((p1,p2),), mergeType=IMPRINT, meshable=OFF)
改为
wires = a.WirePolyLine(points=((p1,p2),), mergeType=IMPRINT, meshable=ON)
- 在截面指派完成后添加网格生成逻辑,放在
csa = a.SectionAssignment(...)之后:
# 指定线单元网格控制 a.setMeshControls(regions=edges1, elemShape=LINE, technique=FREE) # 单条Wire仅需要1个CONN3D2单元,设置种子为1个单元 a.seedEdge(edges=edges1, number=1) # 生成当前Wire的网格 a.generateMesh(regions=edges1) # 提取生成的连接单元,创建设置供边界条件调用 conn_els = a.instances[self.instanceName].elements.getByBoundingBox( xMin=new_p1-1e-6, xMax=new_p1+1e-6, yMin=new_p2-1e-6, yMax=new_p2+1e-6, zMin=new_p3-1e-6, zMax=new_p3+1e-6 ) conn_set = a.Set(name='ConnElSet'+str(j), elements=conn_els)
- 修改边界条件的关联设置,将
fastenerSetName改为上述连接单元集合:
fastenerSetName='ConnElSet'+str(j)
- 新增端点耦合逻辑,将Wire的两个顶点和对应的结构节点绑定,放在Wire创建完成后即可:
# 拾取Wire的两个顶点 wire_verts = wires[0].vertices # 和目标结构节点绑定 a.Tie(name='Tie-start'+str(j), master=a.Set(nodes=[self.listNodes[pairElem[0]-1]]), slave=a.Set(vertices=[wire_verts[0]]), positionTolerance=1e-6) a.Tie(name='Tie-end'+str(j), master=a.Set(nodes=[self.listNodes[pairElem[1]-1]]), slave=a.Set(vertices=[wire_verts[1]]), positionTolerance=1e-6)
更稳定的替代方案
可以跳过几何Wire创建步骤,直接基于节点生成连接单元,避免几何拾取、网格匹配的问题:
# 直接创建CONN3D2单元,连通性为指定的两个节点 conn_element = a.Element(nodes=(self.listNodes[pairElem[0]-1], self.listNodes[pairElem[1]-1]), type='CONN3D2') # 后续直接对该单元指派截面、添加边界条件即可
内容的提问来源于stack exchange,提问作者Cosima du Pasquier
相关产品推荐
相关产品推荐

