去年帮一个风电齿轮箱项目做接触疲劳分析,模型不大,37万个C3D8R单元。我划完网格直接提交Job,跑了6个小时,第43个增量步崩了。打开.msg文件,一行红字:
***ERROR: Element 198472 has excessive distortion. Jacobian = -0.0032
雅可比是负数。一个单元翻了,整个接触对的Newton-Raphson迭代全部发散,6小时白算。
我回去用Verify工具一查,那个齿轮箱壳体齿根圆角过渡区,长宽比超过8的单元有127个,雅可比低于0.5的有43个。这些东西在我提交Job之前就已经躺在那里了,我压根没查过。
从那以后我给自己定了个死规矩:任何Job提交之前,网格质量检查必须跑一遍,没有例外。 今天把我用了三年的检查方法、选型取舍、踩过的坑全部摊开讲。
路径:Mesh模块 → 菜单栏 Mesh → Verify → 选择Part或Assembly → 勾选检查指标 → 点OK。
优势: 零成本、零配置,打开就能用。检查结果直接在视图区用颜色标出来——红色严重、黄色警告、绿色合格。消息区同步打印不合格单元数量和百分比。
我放弃它作为唯一方案的理由:
第一,Verify的结果不可导出。它只在CAE的Message Area里打一段文字,告诉你"Aspect ratio > 5的单元有87个",但你拿不到这87个单元的编号列表。我得手动截图、手动抄。模型一多,这个工作流就断了。
第二,没有批量能力。我有四个装配体、十二个Part要检查,每个都得手动点一遍Verify、手动切视图看高亮,纯体力活。
第三,阈值不可调。Verify内置的判定标准是写死的,我想把长宽比阈值从5调到3(动力学场景),它不支持。
结论:小模型临时看一眼可以,上规模、上流程就不够用了。
通过 mdb.models[...].parts[...].elements 拿到每个单元的节点坐标,手动算长宽比、雅可比、扭曲度,筛选超标单元写入CSV。
优势: 数据完全可控。输出格式、阈值、筛选逻辑全部自己定。可以批量跑十二个Part,一个for循环的事。CSV直接喂给Excel做透视表,按区域统计不合格分布。
我放弃它作为唯一方案的理由:
雅可比计算我自己实现了一遍,跟Abaqus内部算法有细微差异(积分点选取不同),导致边界值附近的单元判定结果跟Verify不一致。团队里两个人用不同脚本查同一个模型,结论不一样,评审会上很被动。
另外,纯Python遍历37万单元,每个单元算边长、算角度、算面积,跑完要4分半钟。模型上到200万单元,十几分钟干等着。
结论:适合做批量导出和自定义阈值筛选,但不能完全替代Verify的权威性。
导入.stp或者.inp文件,用它们自带的网格质量检查面板,指标比Abaqus丰富得多(翘曲角、偏斜度、自由边、T型连接全都有)。
我放弃它的理由: 公司没买HyperMesh的License。而且引入一套新软件意味着新的学习成本、新的文件格式转换风险。我试过把.cae导出成.inp再导入HyperMesh,导入过程中壳单元的截面方向丢了两处。为了查个网格质量引入格式转换风险,不值得。
如果你公司本来就有HyperMesh许可,那用它做复杂装配体的网格检查确实更顺手,指标更全,操作更直观。

进入Mesh模块,左侧模型树切到你要检查的Part。
菜单栏点 Mesh → Verify。弹出对话框,上半部分让你选检查范围:
我一般选Part逐个查,因为Assembly模式下高亮颜色会混在一起,分不清是哪个部件的问题。
下半部分勾选检查项目。我固定勾这几项:Aspect Ratio、Jacobian、Interior Angles、Warp。其他项按需加。
点OK之后,视图区立刻变色。同时Message Area打印一段汇总:
Total elements: 371842
Aspect ratio > 5.0: 127 elements (0.034%)
Jacobian < 0.5: 43 elements (0.012%)
Interior angle < 30°: 12 elements
眼睛先盯红色单元。 红色是硬伤,黄色可以缓一缓。红色超过总数0.1%我就停下来先修,不急着往下走。
Verify看完知道大概情况之后,我跑一个脚本把数据落盘。核心逻辑:
from abaqus import *
from abaqusConstants import *
import math, csv
# ===== 调优参数区(根据项目需求改) =====
MODEL_NAME = 'Gearbox_Model'
PART_NAME = 'Housing_Shell'
JAC_THRESHOLD = 0.6 # 雅可比下限(默认0.6,动力学场景调到0.7)
AR_THRESHOLD = 5.0 # 长宽比上限(静力5.0,动力学3.0)
ANGLE_MIN = 30.0 # 最小内角(度)
ANGLE_MAX = 150.0 # 最大内角(度)
OUTPUT_CSV = 'mesh_report_housing.csv'
# ==========================================
model = mdb.models[MODEL_NAME]
part = model.parts[PART_NAME]
fail_count = 0
with open(OUTPUT_CSV, 'w', newline='') as f:
w = csv.writer(f)
w.writerow(['Elem_Label','Jac_Ratio','Aspect_Ratio','Min_Angle','Max_Angle','Status'])
for elem in part.elements:
jac = elem.jacRatio()
nodes = elem.getNodes()
coords = [n.coordinates for n in nodes]
# 边长极值比近似长宽比
edges = []
for i in range(len(coords)):
for j in range(i+1, len(coords)):
d = math.sqrt(sum((coords[i][k]-coords[j][k])**2 for k in range(3)))
edges.append(d)
ar = max(edges)/min(edges) if min(edges) > 1e-12 else 999.0
# 简化内角检查(四节点面单元取相邻边夹角)
# 此处省略完整角度计算,实际脚本用向量点积
min_ang, max_ang = 90.0, 90.0 # 占位,完整版需逐节点算
status = 'OK'
if jac < JAC_THRESHOLD or ar > AR_THRESHOLD:
status = 'FAIL'
fail_count += 1
w.writerow([elem.label,'%.4f'%jac,'%.2f'%ar,'%.1f'%min_ang,'%.1f'%max_ang,status])
w.writerow([])
w.writerow(['SUMMARY: Total=%d, Failed=%d, Rate=%.3f%%'
% (len(part.elements), fail_count,
100.0*fail_count/len(part.elements))])
print('Report saved: %s | Failed: %d' % (OUTPUT_CSV, fail_count))
【调优标注】 JAC_THRESHOLD 和 AR_THRESHOLD 是我反复试出来的值。Abaqus文档建议雅可比>0.6,但我做齿轮接触分析时发现0.6~0.7之间的那批单元在高压接触下还是会出问题,所以我齿轮项目一律设0.7。长宽比5.0是静力通用值,做跌落碰撞我压到3.0。
运行方式:CAE里 File → Run Script 选这个.py文件。或者命令行 abaqus cae noGUI=check_mesh.py,不弹界面,适合夜间批量跑。
CAE模型 (.cae)
│
├──→ Verify工具 ──→ 视图区颜色高亮 + Message Area文字汇总
│ (快速定性,30秒)
│
├──→ Python脚本 ──→ 遍历elements ──→ 计算指标
│ │
│ └──→ 写入 mesh_report.csv
│ │
│ ├──→ Excel透视表(按区域统计)
│ └──→ 附入评审报告
│
└──→ 修复后重新Verify ──→ 确认红色归零 ──→ 提交Job
拿到CSV里的Element Label列表,回到Mesh模块,Mesh → Edit → 选中对应单元,看它到底哪里有问题。
常见修复手段按优先级排:
修完之后必须重新跑一遍Verify + 脚本,确认数字降下来了再提交。

第一,不要等到Job崩了才查网格。
我那个齿轮箱项目,6小时计算白跑。如果提交前花两分钟点一下Verify,127个红色单元一眼就看到了。现在我团队的规矩是:Job提交checklist里,"Verify通过截图"是必填项,没截图不许提交。
第二,长宽比阈值不要一刀切。
我早期所有项目统一设5.0,结果一个薄壁钣金件(壳单元S4R),长宽比4.8的单元在弯曲载荷下应力集中严重,跟试验对不上。后来壳单元我单独设3.0,问题消失。实体和壳的阈值必须分开定。
第三,Verify的"合格"不等于"计算不会出问题"。
Verify只查几何形状指标。它不管你的材料参数对不对、接触定义有没有穿透、载荷步切得够不够细。我见过网格全绿但第一步就崩的情况,原因是接触面初始穿透0.2mm。网格质量是必要条件,不是充分条件。
第四,脚本路径不能有中文。
我的.py文件放在 D:\项目\齿轮箱\ 下面,脚本报FileNotFoundError。改成 D:\gearbox_project\ 就好了。Abaqus的Python解释器对非ASCII路径支持极差,这个坑我踩了三次才记住。
齿轮箱壳体那个模型,修复前后的Verify输出:
修复前:
Total elements: 371842
Aspect ratio > 5.0: 127 elements (0.034%)
Jacobian < 0.5: 43 elements (0.012%)
Interior angle < 30°: 12 elements
修复后:
Total elements: 369518 (删了碎边重划,总数略减)
Aspect ratio > 5.0: 0 elements
Jacobian < 0.5: 0 elements
Interior angle < 30°: 0 elements
CSV报告里FAIL列清零。重新提交Job,跑了7小时12分钟跑完,没有Excessive distortion,没有负雅可比,接触收敛曲线干净利落。
Python脚本执行时间:37万单元,4分28秒。输出CSV文件1.2MB,Excel打开做透视表,按齿根、齿面、轴承孔三个区域分组统计,不合格率全部归零。