4. 网格文件格式与数据交换

在 Sentaurus 工作流中,网格从来不是“画完就固定”的静态产物。结构编辑器生成网格、器件仿真器读取网格、可视化工具渲染网格、脚本工具后处理网格,每一步都涉及网格数据在不同工具之间的传递。理解 TDR、DF-ISE、Grd 等格式的定位与差异,是避免“网格明明画好了,仿真却报错”这类问题的前提。

一、三类格式的定位差异

Sentaurus 生态中常见的网格相关格式可以按“角色”分为三层:

  • TDR(Taurus Data Repository):Sentaurus 的原生容器格式,基于 HDF5。它不只存网格,还存掺杂、材料、电极、数据集(如电场、载流子浓度)以及仿真状态。TDR 是“网格 + 物理场 + 元数据”的一体化载体,也是 Sentaurus Workbench 中默认的节点间传递格式。
  • DF-ISE(ISE Data Format):早期 ISE TCAD 体系的数据格式,由 dfise 库读写,通常以 .grd(网格)和 .dat(数据集)成对出现。它结构清晰、文本可读性好,常用于与旧版工具或第三方脚本交换网格。
  • Grd / 纯网格文件:只描述几何、节点、单元连接关系和区域/电极归属,不携带物理场。它是最“轻”的交换格式,适合把网格单独交给外部工具做质量检查或重划分。

三者的关系可以概括为:Grd 是骨架,DF-ISE 是骨架加标签,TDR 是骨架、标签、物理场和仿真状态的完整快照。选择哪种格式,取决于你要传递的是“几何”还是“几何 + 结果”。

网格数据在 Sentaurus 工具链中的传递与格式转换 SDE / 结构编辑器 生成初始网格 SNMESH / 重划分 加密 / 粗化 / 质量优化 SVisual / 后处理 渲染与数据提取 TDR 网格+物理场+状态 DF-ISE .grd + .dat 成对 Grd / 纯网格 仅几何与连接关系 SDevice 器件物理仿真 SPROCESS 工艺仿真 外部脚本 / Python 质量检查与转换 dfise 转换 剥离数据集 传递原则:几何用 Grd,几何+标签用 DF-ISE,几何+物理场+状态用 TDR;跨工具转换时优先保留区域与电极命名一致性

二、TDR 格式解析要点

TDR 基于 HDF5,可以用 h5ls、h5dump 或 Python 的 h5py 直接查看内部结构。一个典型的 TDR 文件包含以下层级:

/collection/          # 数据集集合
  /dataset/           # 物理场数据(电场、浓度等)
  /geometry/          # 网格几何
    /vertex/          # 节点坐标
    /element/         # 单元连接
    /region/          # 区域划分
    /boundary/        # 边界与电极
/state/               # 仿真状态与求解器信息
/parameters/          # 材料与模型参数

实际使用中最容易出问题的是 /geometry/region 与 /geometry/boundary 的命名。SDevice 在读取 TDR 时,会按区域名和电极名去匹配物理模型与接触条件。如果 SDE 中定义的是 R.Source,而重划分后变成了 R.Source_1,仿真就会报“找不到接触”或“区域未定义”。因此,在 TDR 传递前后,建议用 tdx 或 Python 脚本先列出区域与电极清单,确认命名未漂移。

TDR 是二进制 HDF5,不要用文本编辑器直接修改。需要改网格或区域时,应回到 SDE 或 SNMESH 重新生成,而不是在 TDR 层面“打补丁”。

三、DF-ISE 与 Grd 的转换操作

DF-ISE 格式通常由 .grd 和 .dat 两个文件组成。转换时最常用的命令是 dfise 工具集:

# 将 TDR 转为 DF-ISE 网格
tdx -m tdr2ise -i input.tdr -o output

# 生成 output.grd 与 output.dat

# 仅提取网格,剥离数据集
dfise -g output.grd -o mesh_only.grd

# 查看网格统计信息
dfise -s mesh_only.grd

转换过程中需要重点检查三类信息:

  • 节点与单元数量:转换前后应一致。若数量变化,说明有单元被丢弃或合并,通常与退化单元或重复节点有关。
  • 区域与材料映射:DF-ISE 用 region 和 material 字段描述,转换后要确认材料名与 SDevice 材料库一致(如 Silicon 而非 Si)。
  • 电极边界:电极在 DF-ISE 中通常以 contact 形式出现在边界段,转换后要确认每个电极仍有对应的边界节点集。

四、跨工具传递的常见陷阱与处理

网格数据在工具间传递时,问题往往不在“格式能不能读”,而在“读进来之后语义是否还对”。以下三类陷阱最常见:

第一,坐标系与单位不一致。 SDE 默认长度单位是微米,但某些外部网格生成器可能用纳米或米。转换后如果节点坐标整体差 1000 倍,仿真区域会变成“巨大”或“极小”,收敛行为完全改变。处理方式是在转换脚本中显式检查坐标范围,例如用 Python 读取 .grd 后打印 min/max 坐标,与预期器件尺寸比对。

第二,区域命名与材料绑定丢失。 纯 Grd 文件只保留几何,不保留材料语义。如果直接把 Grd 交给 SDevice,仿真器无法知道哪个区域是硅、哪个是氧化层。正确做法是:要么在 DF-ISE 层面保留 material 字段,要么在 SDevice 命令文件中用 Region 语句显式重新绑定材料。

第三,数据集与网格不匹配。 把旧网格的 .dat 强行套到新网格上,会出现“节点数不一致”或“插值错误”。TDR 内部通过数据集与几何的引用关系避免这个问题,但 DF-ISE 的 .grd 与 .dat 是分离文件,必须成对更新。重划分网格后,旧 .dat 应丢弃或通过插值工具重新映射。

不要用“先转成文本、再手工改几行”的方式修复网格。DF-ISE 的 .grd 虽然可读,但节点编号与单元连接是强耦合的,手工改动极易引入孤立节点或负体积单元,导致仿真直接失败。

五、一个可复用的转换检查清单

下面这份清单可直接用于每次网格格式转换后的快速验证,字段和判断依据都来自实际工程经验:

检查项 检查方法 合格判据
节点/单元数量 dfise -s 或 h5dump 统计 转换前后一致,偏差为 0
坐标范围 读取顶点坐标 min/max 与器件设计尺寸一致(如 0~1 μm)
区域清单 列出所有 region 名称 与 SDE 中定义完全一致,无后缀漂移
材料绑定 检查 material 字段 材料名在 SDevice 材料库中存在
电极边界 统计 contact 节点数 每个电极节点数 > 0,且与预期接触面积匹配
单元质量 检查最小角、体积 无负体积、无零面积单元

把这份清单固化到脚本里,每次转换后自动跑一遍,比等到 SDevice 报错再回头排查要高效得多。网格格式本身并不复杂,复杂的是格式背后承载的语义——区域、材料、电极、单位、数据集引用。只要在传递的每个环节都确认这些语义没有丢失,TDR、DF-ISE、Grd 之间的转换就可以做到稳定可控。