3. 批量网格划分与质量检查

批量网格划分与质量检查 学习卡片

批量网格划分与质量检查的任务拆解

本案例面向同一拓扑、多组尺寸参数生成的几何变体(例如 6 个厚度/孔径组合的支架),需要一次性完成网格划分、质量指标提取、不合格筛选与报告输出。核心难点不在单次划分,而在于用同一套判据横向比较所有变体,避免“某个变体网格看起来还行”这类主观判断。

推荐采用“几何清单 → 逐件划分 → 指标落表 → 阈值筛选 → 报告归档”的批处理链路。几何文件按 part_001.step ~ part_006.step 命名,网格脚本读取清单后循环处理,每个变体输出独立的网格文件与一行质量记录。

几何变体清单 part_001.step t=2.0 part_002.step t=2.5 part_003.step t=3.0 part_004.step t=3.5 part_005.step t=4.0 part_006.step t=4.5 同一拓扑 · 仅厚度变化 网格划分引擎 全局尺寸 2.0 mm 局部细化:孔边 0.5 mm 单元类型:C3D10 二阶四面体 曲率捕捉:开 最小曲率半径 1.0 mm 输出:.inp + 质量表 每变体独立记录 质量指标提取与筛选 变体 雅可比 长宽比 翘曲度 0010.822.10.03 0020.792.40.04 0030.752.80.05 004 0.61 4.2 0.11 0050.772.60.04 006 0.58 4.8 0.14 判据:雅可比 ≥ 0.70 · 长宽比 ≤ 3.5 · 翘曲度 ≤ 0.08 不合格变体:004、006 原因:厚度增大后孔边过渡区单元畸变加剧 输出:mesh_quality_report.csv 含全部变体指标 + 不合格标记 + 建议 局部加密重划

批量划分脚本的关键实现

以下脚本以 Abaqus/CAE 的 Python 接口为例,读取几何清单、逐件划分、提取质量指标并写入 CSV。脚本不依赖前序章节代码,可独立运行。

# batch_mesh_quality.py
# 运行方式:abaqus cae noGUI=batch_mesh_quality.py
import csv, os
from abaqus import mdb
from abaqusConstants import *

GEOM_DIR = 'geom_variants'
OUT_CSV  = 'mesh_quality_report.csv'
MESH_SIZE = 2.0
HOLE_SIZE = 0.5
ELEM_TYPE = 'C3D10'

# 质量判据
JAC_MIN   = 0.70
AR_MAX    = 3.5
WARP_MAX  = 0.08

def mesh_one(step_file):
    model_name = os.path.splitext(os.path.basename(step_file))[0]
    m = mdb.Model(name=model_name)
    mdb.models[model_name].PartFromGeometryFile(
        name='Part', combine=False,
        geometryFile=step_file, scale=1.0)
    p = mdb.models[model_name].parts['Part']
    p.seedPart(size=MESH_SIZE, deviationFactor=0.1)
    # 孔边局部加密
    for f in p.faces:
        if f.getSize() < 5.0:
            p.seedEdgeBySize(edges=f.getEdges(), size=HOLE_SIZE)
    p.setElementType(elemTypes=(ElemType(elemCode=C3D10, elemLibrary=STANDARD),))
    p.generateMesh()
    return p

def extract_quality(part):
    """返回 (min_jac, max_ar, max_warp)"""
    jac, ar, warp = 1.0, 0.0, 0.0
    for e in part.elements:
        # Abaqus 提供 verify 方法,此处用简化指标演示
        pass
    # 实际工程中调用 part.getMeshStats() 或 verify()
    stats = part.getMeshStats()
    return stats['minJacobian'], stats['maxAspectRatio'], stats['maxWarpage']

rows = []
for fname in sorted(os.listdir(GEOM_DIR)):
    if not fname.endswith('.step'):
        continue
    path = os.path.join(GEOM_DIR, fname)
    part = mesh_one(path)
    jac, ar, warp = extract_quality(part)
    ok = (jac >= JAC_MIN) and (ar <= AR_MAX) and (warp <= WARP_MAX)
    rows.append({
        'variant': fname,
        'min_jacobian': round(jac, 3),
        'max_aspect_ratio': round(ar, 2),
        'max_warpage': round(warp, 3),
        'pass': 'YES' if ok else 'NO'
    })
    print('%s  jac=%.3f  ar=%.2f  warp=%.3f  -> %s' % (fname, jac, ar, warp, 'PASS' if ok else 'FAIL'))

with open(OUT_CSV, 'w', newline='') as fp:
    w = csv.DictWriter(fp, fieldnames=['variant','min_jacobian','max_aspect_ratio','max_warpage','pass'])
    w.writeheader()
    w.writerows(rows)
print('报告已写入', OUT_CSV)
运行前检查:确认 geom_variants/ 下所有 STEP 文件拓扑一致(仅尺寸不同);若某变体孔位数量不同,需先统一几何再进入批量划分,否则质量指标不可横向比较。

质量指标判读与不合格处理

批量检查的价值在于用统一阈值快速定位问题变体。上例中 004 和 006 的雅可比低于 0.70、长宽比超过 3.5,属于典型的不合格网格。处理方式不是直接放弃该变体,而是回到划分参数做局部调整:

  • 孔边加密不足:将孔边种子尺寸从 0.5 mm 降至 0.3 mm,重新划分后观察雅可比是否回升。
  • 厚度增大导致过渡区畸变:在厚度方向增加一层单元,或改用扫掠网格策略。
  • 翘曲度超标:检查曲面区域是否被强制映射为结构化网格,必要时切换为自由网格。

调整后重新运行脚本,CSV 中对应行的 pass 字段应变为 YES。若多次调整仍不达标,则需在报告中标注“几何本身不适合当前单元类型”,建议改用壳单元或六面体主导策略。

批量检查报告字段说明

字段含义合格判据
variant几何变体文件名—
min_jacobian最小雅可比(单元畸变程度)≥ 0.70
max_aspect_ratio最大长宽比≤ 3.5
max_warpage最大翘曲度≤ 0.08
pass综合判定YES / NO
常见误区:不要只看单个变体的网格截图就判断合格。批量场景下必须依赖数值指标和统一阈值,否则不同变体之间的质量差异会被视觉掩盖。另外,雅可比和长宽比的阈值应根据实际求解器要求调整,上表数值为教学示例,不是通用标准。