简介:这份PDF面向有限元前处理初学者与有一定基础的CAE工程师,聚焦Hypermesh网格划分中的常见疑难与实操技巧,适合在建模、改网格、查质量时随查随用。全文以问答形式梳理了十余类问题,包括几何面上提取线并project到目标面、网格节点移动、不同comp网格的自由边与重节点合并、六面体8节点转20节点的order change、通过节点创建单元、灰线变红线的surface成因、QI质量导引的含义,以及对称网格copy与reflect后check edges节点equilance等;还涉及节点编号分离、bellcurve渐变网格、solidmap中vertices增减、3D单元节点位置手动调整等细节。资源共1个PDF文件,压缩包约16KB,体积轻便,可直接在线阅读或打印摘录。目前已有2089人浏览学习。读者可据此建立一套排查网格连续性、单元阶次与质量评价的思路,减少重复试错。
1. 从 CAD 到网格:HyperMesh 网格划分前必须做的三项判断
把 STEP 导进 HyperMesh,选中一张面,点 automesh,回车,屏幕上立刻冒出一片红黄相间的坏单元,接着就是一小时的手动微调。等我回头看模型,发现几何本身有三条自由边、一张重复面、两处被圆角断开的焊点。HyperMesh 网格划分真正的分水岭不在 automesh 面板里,而在动手之前:几何能不能被离散、离出来的单元能不能让求解器收敛,这两件事在清理那一刻就已经定了。
这篇内容面向做过一两轮仿真、但总被网格质量反复卡住的人,讲的是从几何导入到 Abaqus 求解这条链路上,哪些参数必须提前定、哪些操作可以脚本化、哪些地方肉眼看着没问题但检查器一定报错。要提前判的三件事是:几何拓扑是否闭合、结构的受力特征用壳还是实体表达、目标单元尺寸与最小特征尺寸的比值有没有跌破工艺下限。任何一项不成立,后面画的网格都是返工。
下面按几何清理、二维壳网格、三维实体网格、质量巡检与求解器对接的顺序展开,每个环节给出可抄的参数、命令和检查阈值。
2. 几何清理与 hypermesh 延伸面处理:网格划分的第一道关
导入几何之后先别画网格。HyperMesh 里打开 topology 显示,模型上会浮出四种颜色的边,这四种颜色基本决定了后面网格能不能做干净。跳过这一步直接 automesh,常见后果是边上节点对不上、壳单元之间传不了力、实体网格在 T 形连接处憋出尖角。几何清理的顺序是「看 — 改 — 缝」,看拓扑、改面和边、缝点。
2.1 用 topology 与 edge 面板识别自由边、T 形边和重复面
在模型树里打开边显示,HyperMesh 会按共享关系给每条边着色,含义和后续影响如下。
| 颜色 | 含义 | 对网格的影响 | 处理动作 |
|---|---|---|---|
| 红 | 自由边 | 两侧单元不连续,载荷传不过去 | equivalence 缝合,或补面 |
| 绿 | 共享边 | 正常连接 | 无需处理 |
| 蓝 | T 形连接 | 节点被压到边上才连上,实体网格易出错 | toggle edge 删多余边后再缝 |
| 黄 | 重复面 | 单元重叠,接触面定义混乱 | delete 掉多余面 |
识别动作本身可以用一行命令刷新。
# 把所有几何面选进标记 1,然后按当前全局容差重建边显示 *createmark surfaces 1 "all" *findedges surfaces 1 0*createmark负责圈选对象,*findedges按共享关系重算边,末尾的 0 表示沿用当前全局容差,不额外指定。全局容差在 Preferences 里改:钣金件一般 0.05 mm 到 0.1 mm,砂型铸件可以放到 0.5 mm。容差给太大,两条本该分开的边会被强行合上;给太小,本该合并的短边留着,网格上就会长出一批长宽比 20 以上的窄条单元,后面怎么平滑都救不回来。
重复面的识别要单独走一遍。同一位置叠了两张面,网格划出来就是两层单元贴在一起,求解器要么报重复单元,要么在接触定义里选出两套面互相打架。实际操作是在面选择器里逐个点开可疑区域,比较面的边界节点坐标,坐标完全重合的直接删。
2.2 hypermesh 延伸面(extend surface)与中面抽取的取舍
几何清理里最耗时间的是面与面之间的缺口。删掉小圆角、小凸台之后,原本相接的两张面之间会留出一段缝隙,直接划网格会在缝隙处断开,壳单元在这里就传不了弯矩。extend surface 面板的作用就是把一张面沿自身走向或切线方向往外长,长到和相邻面相交,再在交线处裁剪。
延伸方式有三种,选择依据差别不小:
- along surface:沿曲面自身的走向延长,适合曲率平缓、走向明确的面,延伸后形状自然。
- linear:沿末端边界的直线方向拉伸,适合平面和近似平面的区域,结果可预测。
- point:延伸到指定点,一般用于把一个面拉到某个基准位置再统一裁剪。
真正要盯的是延伸距离和裁剪开关。距离给小了接不上,给大了会伸过相邻面、和无关实体交叉,凭空多出一圈新的干扰边,反而比不延伸更麻烦。我的习惯是先量出缝隙的实际宽度,延伸距离按这个宽度的 1.2 倍给,打开 trim to surface,让系统在交线处自动切掉多余部分。延伸完必须重新看一遍 topology,确认新增的边都是绿色共享边。
中面抽取是另一条路。当壁厚与整体尺寸之比小于 1:10 时,壳单元比实体单元更划算,抽中面能把单元数量压下来一到两个数量级。但抽完中面,原来面与面之间的连接关系全部丢失,必须用 extend surface 把相邻中面接起来再 equivalence 缝合。
提示:抽中面之前先把厚度方向上的圆角做对称处理,否则中面会整体偏移,抽出来的面根本没法用。
2.3 几何清理的容差设定与 equivalence 实操
容差不是随手填的数字,它和结构的最小特征尺寸挂钩。按下面的区间取,同时保证容差小于最小圆角半径的五分之一。
| 模型尺度 | 建议 equivalence 容差 | 说明 |
|---|---|---|
| 毫米级小件 | 0.01–0.05 mm | 特征密集,容差必须小 |
| 常规钣金冲压件 | 0.05–0.2 mm | 兼顾短边清理与边界保真 |
| 大尺寸铸件、焊接总成 | 0.2–1.0 mm | 缝隙本身较宽,容差可放宽 |
缝合动作本身很短。
# 以 0.1 的容差把当前显示内容里的所有点按距离合并 *createmark points 1 "displayed" *equivalence points 1 0.1 0 0 0 0 0 0*createmark points 1 "displayed"只圈显示出来的点,所以先隐藏不关心的组件,避免误缝。*equivalence后面的一串 0 是各项附加开关,默认不启用,只需要在前两位给出容差和是否同时重建边。缝完之后再跑一次*findedges,红色边的数量应该明显下降;如果没降,多半是容差小于实际缝隙宽度,或者缝隙里夹着必须保留的圆角。
3. 二维壳网格划分:automesh 参数与质量闭环
壳网格是 HyperMesh 用得最多的一环,也是最容易「划完就走」的一环。automesh 面板上真正影响结果的只有四五个参数,剩下的都是质量闭环的活。
3.1 automesh 面板的单元尺寸、网格形态与算法选择
下面几个参数决定了单元分布,改之前最好想清楚每一处受力位置。
| 参数 | 常见取值 | 怎么定 |
|---|---|---|
| element size | 1–10 mm | 取最小特征尺寸的 1/3 到 1/5;应力集中区单独加密 |
| mesh style | size and bias / fixed points | 要控制边上节点数,用 fixed points |
| biasing | 0.1–1.0 | 沿边渐变,相邻单元尺寸比不要超过 2:1 |
| algorithm | 1 / 2 / 3 | 1 偏四边形规整,2 兼顾四边形与过渡,3 允许更多三角形 |
| 后处理开关 | smoothing / quality optimize | 至少开 smoothing,quality optimize 视质量阈值决定 |
先看单元尺寸。取 4 mm 不意味着全模型都该 4 mm,圆角处、焊缝附近、接触面这些位置要单独加种子点。单元尺寸与最小特征尺寸的比值低于 1 的时候,网格会在细特征上「长不出来」,出现局部拥挤和畸形单元,这时候要么加密,要么先把特征简化掉。
再看算法。算法 1 尽量生成规则四边形,适合外形接近矩形的冲压件;算法 2 在有曲率和过渡的区域表现更稳;算法 3 允许更多三角形,只在完全没法规则划分的地方用。四边形单元在弯曲工况下比三角形准得多,三角形比例能压到 5% 以下就不要往上抬。
批量执行时用命令比点面板快。
# 对 shell_comp 组件下的面按 4 mm 划分,算法 2,开启平滑,四边形优先 *createmark surfaces 1 "by collector" "shell_comp" *automesh surfaces 1 2 4 0.0 0.0 1 1 0 1 0 0 0第一个参数是标记编号,第二个是算法,第三个是单元尺寸,后面依次是偏置系数和各开关位。0.0的偏置表示沿边不做渐变;如果要做渐变,把偏置改成 0.3 到 0.5 之间,让靠近焊缝的一侧更密。这些开关位在不同版本上顺序略有出入,第一次用的时候对照本机*automesh的帮助确认一遍,之后就能固定下来。
3.2 网格质量检查与失败单元重划
划完立刻跑质量检查,不要等导出了再看。常用的几个指标的合理区间如下。
| 指标 | 理想值 | 可接受下限 | 超标后果 |
|---|---|---|---|
| aspect ratio | < 3 | < 5 | 单元刚度失真,弯曲偏刚 |
| jacobian | > 0.7 | > 0.5 | 出现负体积、求解直接中断 |
| skew | < 40° | < 60° | 剪切自锁,结果偏硬 |
| warpage | < 5° | < 15° | 壳单元面外弯曲不准 |
| min angle | 四边形 > 45° | > 30° | 应力集中假象 |
| max angle | 四边形 < 135° | < 150° | 单元退化 |
| taper | < 0.4 | < 0.6 | 四边形退化成三角形 |
检查用 quality index 面板设置阈值,点 highlight 之后超标单元会被单独标出来。脚本方式更省事。
# 对当前显示单元做一次质量检查,结果按 quality criteria 着色 *createmark elems 1 "displayed" *checkelements 1*checkelements读取的是 Preferences 里那套 quality criteria,所以阈值要提前配好再跑。检查完的重划手法就四种:split 把一个坏单元劈成两个、combine 把两个合成一个、replace 用相邻的规整单元替换、smooth 挪节点位置。长宽比超标优先 smooth,雅可比接近 0 优先 split,尖角优先 replace。重划之后一定要再跑一遍检查,别凭眼睛判断。
注意:连续做三次 smooth 之后如果还有超标单元,说明这个区域的几何本身有问题,回去改几何比继续调单元划算。
3.3 用 tcl 批处理多个模型的网格划分
同一批零件几十个 hm 文件,逐个手点不现实。HyperMesh 支持在批处理模式下跑 tcl,把导入、划分、导出串起来。
# mesh_all.tcl:遍历当前目录下的 hm 文件,划分后另存 foreach f [glob -nocomplain *.hm] { *openfile "$f" 0 *createmark surfaces 1 "all" *automesh surfaces 1 2 4 0.0 0.0 1 1 0 1 0 0 0 *checkelements 1 *savefile "[file rootname $f]_meshed.hm" }glob -nocomplain在没有匹配文件时不报错,避免脚本空跑中断。*openfile第二个参数 0 表示不弹额外对话框,适合无人值守。每个文件划分完立刻存成带后缀的新文件,原始几何保持不动,后面查问题还能回溯。命令行执行:
hmbatch -tcl mesh_all.tcl批处理跑完最好抽查两三个模型的坏单元数量,确认质量一致性,因为批处理环境下的 quality criteria 和交互界面可能不是同一套配置。
4. 三维实体网格划分:四面体、六面体与过渡单元的选型落地
到了实体网格,选型带来的差别比参数调节大得多,先想清楚用什么单元,再谈怎么划。
4.1 四面体和六面体到底差在哪,什么时候必须上六面体
同样尺寸下,二阶四面体单元数量大约是一阶六面体的六倍,自由度更多,求解规模更大。但四面体对几何几乎没有要求,任何形状都能铺满。
| 维度 | 二阶四面体 C3D10 | 一阶六面体 C3D8 |
|---|---|---|
| 同尺寸单元数 | 约 6 倍 | 基准 |
| 前处理难度 | 低 | 高,需要可映射拓扑 |
| 弯曲精度 | 二阶尚可 | 需减缩积分配合 |
| 剪切锁定 | 一阶 C3D4 严重 | 全积分 C3D8 明显 |
| 接触分析 | 需用 C3D10M | 常规 |
选型逻辑是:几何复杂、以传热或低阶应力为主、时间紧,用二阶四面体;结构以弯曲为主、要算疲劳或大变形、模型能切成规则块,上六面体。铸件、焊接总成、橡胶件这类自由形状结构,硬上六面体会把前处理时间翻好几倍,收益不成比例。
提示:接触分析里别用未修正的 C3D10,接触面上的压力会异常,换成 C3D10M。
4.2 用 solid map 生成六面体的完整操作链
六面体生成的核心思路是「先切块,再画源面,最后映射」。切块这一步最费功夫,也最影响成败。
操作顺序:
- 用 solid edit 的 trim with plane 和 trim with surface,把实体切成若干个可以用一条路径扫出来的块。
- 在每个块的源面上先用 automesh 划好二维网格,源面网格质量直接决定体网格质量。
- 打开 solid map 面板,选 one volume 或 line drag,指定源面、目标面和路径。
- 给出沿路径的层数,层数与路径长度的比值尽量接近源面单元尺寸。
- 生成后立刻检查雅可比和翘曲,源面改一处,体网格要整块重生成。
脚本方式大致长这样。
# 对 solid_geom 的实体沿路径映射,源面网格密度 4 层 *createmark solids 1 "by collector" "solid_geom" *createmark surfaces 2 "by collector" "source_face" *createmark surfaces 3 "by collector" "target_face" *solidmap_onevolume 1 2 3 4 0 0 1参数依次是实体标记、源面标记、目标面标记、沿路径层数,后面的 0 是偏置和附加开关。层数给少,单元在厚度方向拉长,长宽比直接超标;层数给多,单元数量白涨。经验值是按厚度方向上至少铺三层,关心弯曲的位置铺到四到五层。
4.3 四面体区域、金字塔过渡与混合网格的质量控制
当几何既有规则块又有自由形状区域,最省事的做法是分区处理:规则块生成六面体,剩下的区域用四面体填充,两者交界面上补一层金字塔单元。
金字塔生成用 solid map 面板的 hexa 过渡选项,或者直接用 tetra mesh 里的金字塔填充。要盯的是金字塔底面的四边形质量,因为金字塔的底面承接的是六面体的面,如果底面本身翘曲大,金字塔会直接变成负体积。做法是先检查交界面上的四边形雅可比,低于 0.5 的先用 2.3 节那套手法修掉,再生成金字塔。
混合网格导进求解器之后,交界面上容易出现应力不连续,这是单元阶次和形函数不同带来的,不是错误,但解读结果时要绕开交界面取样。
5. 网格质量巡检与 Abaqus 导出:HyperMesh 到求解器的对接清单
网格在 HyperMesh 里看着合规,导进 Abaqus 报错的情况很常见,差别主要出在两边的检查项和阈值不完全对齐。
5.1 HyperMesh quality index 与 Abaqus 检查项的对应关系
| HyperMesh 指标 | Abaqus 对应提示 | 建议阈值 |
|---|---|---|
| jacobian | zero or negative jacobian | > 0.5 |
| aspect ratio | excessively distorted | < 5 |
| min angle | distorted element | 四面体 > 20°,四边形 > 30° |
| warpage | warped element | < 15° |
| skew | distorted element | < 60° |
| taper | distorted element | < 0.6 |
HyperMesh 的 quality criteria 比 Abaqus 的检查更严,按上面的阈值收紧配置,一般能避免导出后被拦下来。反过来,把 HyperMesh 阈值放得比 Abaqus 松,就会出现「这边全绿、那边报错」的情况。
5.2 导出 inp 的单元类型选择与 datacheck 验证
导出面板里选 Abaqus 模板,Standard 和 Explicit 对应不同的单元类型默认值,别混用。壳单元一般 S4R,实体用 C3D8R 或 C3D10M,接触面用基于面的集合导出。导出的集合命名保持和 Abaqus 输入文件一致,避免后面靠手工映射。
abaqus job=model_check datacheck cpus=4 interactivedatacheck只做输入文件检查,不进入求解,几秒钟就能跑完,能在正式计算前把负体积、重复节点、集合引用错误全部挑出来。cpus=4对 datacheck 阶段没有实际加速意义,写上是保持和正式提交一致,省得改来改去。检查通过之后再把datacheck换成完整分析。
5.3 一个可复用的质量巡检 tcl 脚本
正式提交之前跑一遍巡检,把每个组件的单元数和超标数量打出来,比逐个点开面板看快得多。
# quality_report.tcl:逐组件统计单元总数与雅可比低于阈值的数量 proc qualityReport { jacMin } { foreach c [hm_getcollectornames elems] { *createmark elems 1 "by collector" $c set total [hm_marklength elems 1] *checkelements_jacobian 1 $jacMin set bad [hm_marklength elems 2] puts [format "%-20s total=%-8d bad=%-6d" $c $total $bad] } } qualityReport 0.6hm_getcollectornames elems取出模型里所有单元组件的名字,逐个圈选。*checkelements_jacobian按给定下限筛出超标单元,结果落到下一个自由标记里,hm_marklength用来数数量。输出格式对齐是为了方便直接粘进表格比对。把这个脚本挂在批处理流程末尾,每次划完网格自动出一份报告,哪一批零件的哪个组件超标,一眼就能定位。
本文还有配套的精品资源,点击获取