Appearance
SProcess Ch10:网格生成
> 来源:sprocess_ug.pdf(Sentaurus Process User Guide, W-2024.09) > 章节范围:Chapter 10,文档目录页标注约 p.802–852(PDF 物理页约 802–852)
章节导读
本章描述 Sentaurus Process 中可用的网格算法和网格参数。Sentaurus Process 使用 Sentaurus Mesh 作为其网格生成引擎。网格生成过程从二分算法开始,然后在用户指导下放置网格点,随后使用改进的 Delaunay 网格算法创建网格元素。
10.1 网格生成概述
Sentaurus Process 自动按需生成网格。自动网格生成方案的行为因模拟维度不同而有所差异,因为生成网格需要时间。在一维和二维中,网格在每次几何操作(如蚀刻和沉积)后生成。在三维中,网格仅在实际需要体网格的步骤(如 diffuse 或 implant 命令)之前以及结构保存之前生成。该方案可以减少在多次几何变更步骤之间(中间没有 diffuse、implant 或任何其他需要网格的步骤)所花费的时间。
Sentaurus Process 使用 Sentaurus Mesh 作为其网格生成引擎。由于 Sentaurus Mesh 是一套工具,在讨论其不同的网格算法时,为简化起见,本章使用 Sentaurus Mesh。
网格生成过程从二分算法开始,该算法按用户指导放置网格点。之后,使用改进的 Delaunay 网格算法创建网格元素。详见 Sentaurus™ Mesh User Guide。
Sentaurus Process 中生成的网格可以自适应、精简或两者的组合进行细化。细化可以使用以下主要类型的细化框之一指定:
- 基于场(自适应网格)
- 基于掩膜
- 均匀(标准)
- 界面对齐
- 界面偏移(沿界面法线偏移)
所有这些细化类型都是用户可控制的。此外,Sentaurus Mesh 强制执行网格平滑以限制相邻元素之间的元素大小变化。这对于力学精度和收敛行为很重要(参见"网格细化")。
影响细化行为的一个重要算法是 UseLines 算法。该算法在引入任何其他线之前,将使用 line 命令创建的线插入内部二分算法。进一步的网格细化通过二分 UseLines 线创建的框来执行。这具有将结构的静态区域与因几何操作而边界移动的区域隔离的效果。几何移动自然会导致网格线的扰动。UseLines 线将此网格移动分隔化,以最小化因插值导致的解退化。
> 注意:由于 Sentaurus Process 中的二分算法与用于在独立 Sentaurus Mesh 工具中创建网格细化的算法不同,因此无法创建与 Sentaurus Mesh 创建的完全相同的网格。但是,元素质量、稳定性和 Delaunay 属性应该是定性地相同。
10.2 网格细化
网格细化是一个两步过程:
- 首先,定义细化框。
- 其次,在下次重网格时细化网格,可以是显式
grid remesh调用,也可以在标准几何修改(如 etch、deposit、clip 或原生层形成)期间。
细化框保持有效,除非使用 refinebox clear 命令清除细化框列表。
所有细化框都有细化标准,这些标准添加网格,并可以使用约束来空间限制网格细化的位置。每种类型的细化框有一种类型的网格细化标准,并且这些标准本质上定义了框类型。网格细化标准和细化框类型可以是静态的或自适应的。所有类型的细化框可以根据需要在命令文件中混合使用。
> 注意:一个 refinebox 命令中只能定义一种类型的网格细化。
细化框空间约束与网格细化标准一起在 refinebox 命令中指定,可以在一个命令中组合。
空间约束
可用的空间约束包括:
- 材料约束:使用
materials参数,接受材料列表。 - 区域约束:使用
regions参数,接受区域名称列表。 min和max参数:限制细化框的大小(默认适用于所有空间)。- 掩膜约束:使用
mask、extrusion.min和extrusion.max参数限制细化框的大小。
Viewing Mesh Refinement
为帮助设置网格细化,可以使用以下命令将当前每个方向的最小边长存储为字段:
tcl
pdbSet Grid Set.Min.Edge 1指定后,Sentaurus Process 计算每个方向的最小边长并将其保存在三个字段中:
MinXEdgeLengthMinYEdgeLength(对于 2D 或 3D 结构)MinZEdgeLength(对于 3D 结构)
此外,它还会将平均边长打印到屏幕。
10.3 静态网格细化
本节讨论静态(非自适应)网格细化。
Standard Refinement Boxes
标准细化框允许使用 xrefine、yrefine 和 zrefine 参数列表分别在 x、y 和 z 方向上的三个位置指定细化框内平滑变化的网格密度。
每个 xrefine、yrefine 和 zrefine 参数列表可以包含一到三个值。如果指定了所有三个值,则网格密度在该方向上呈二次方变化。如果指定了两个,则变化是从顶部到底部的线性变化。如果只指定了一个值,则假定为恒定网格密度。
示例:
tcl
refinebox min={-0.25 0.4 0.0} max={0.4 0.6 1.0} \
xrefine={0.1 0.06 0.1} yrefine={0.1 0.01 0.1} \
zrefine={0.01} oxide
refinebox min={0.6 0.6} max={0.8 0.8} xrefine=0.1 silicon
grid remesh第一个细化框仅适用于由 –0.25 ≤ x ≤ 0.4、0.4 ≤ y ≤ 0.6、0.0 ≤ z ≤ 1.0 限定的立方体内的氧化物。它为 x 和 y 指定了二次方变化的网格密度,为 z 指定了恒定网格密度。
Interface Axis-Aligned Refinement Boxes
可以在全局指定界面附近的细化,也可以在细化框内空间约束细化。可以设置一个大的全局默认最小界面网格间距,例如,在框内设置一个较小的局部值。
影响界面细化的参数:
tcl
# 设置界面附近的全局网格标准
pdbSet Grid SnMesh min.normal.size <n>
# 设置远离界面的边大小增长率
pdbSet Grid SnMesh normal.growth.ratio.2d <n>
pdbSet Grid SnMesh normal.growth.ratio.3d <n>
# 在细化框内局部设置
refinebox min.normal.size=<n> normal.growth.ratio=<n> \
normal.growth.depth=<n> \
[interface.materials=<list> | interface.mat.pairs=<list>]Interface Offsetting Refinement Boxes
Sentaurus Mesh 偏移算法可用于创建与界面对齐的偏移层,而不是与坐标轴对齐:
tcl
refinebox offsetting min.normal.size=<n> normal.growth.ratio=<n> \
[interface.mat.pairs=<list> | interface.region.pairs=<list>]
refinebox offsetting.maxlevel=<i> \
[interface.materials=<list> | interface.regions=<list>]Refinement Inside a Mask
基于掩膜的细化类似于标准细化。但是,约束由通过挤压现有多边形掩膜指定的 polyhedral volume 定义。
Refinement Near Mask Edges or Mark Corners
细化也可以被约束在掩膜边缘或掩膜角附近。refinebox 命令中提供以下参数:
对于掩膜边缘细化:
mask.edge.refine.extentmask.edge.mnsmask.edge.ngr
对于掩膜角细化:
mask.corner.refine.extentmask.corner.mnsmask.corner.ngr
示例:
tcl
polygon name=p1 segments={1.0 1.0 1.0 5.0 3.0 5.0 3.0 2.5 \
2.0 2.5 2.0 1.0}
mask name=m1 polygons=p1
refinebox clear
# 防止网格传播,定义规则粗网格
refinebox yrefine=0.5 zrefine=0.5
# 添加基于边缘的细化
refinebox mask=m1 mask.edge.mns=0.08 mask.edge.refine.extent=0.25
grid remeshMask-Based Offsetting
Sentaurus Mesh 偏移算法也可用于创建基于掩膜的偏移细化:
tcl
refinebox offsetting
axis.aligned OR !axis.aligned
mask=L0_n extrusion.min=0.0 extrusion.max=2
name=offset
interface.materials={Silicon}
min.normal.size=0.4
normal.growth.ratio=2Uniform Mesh Scaling
均匀网格细化常用于研究网格效应或收敛性。定义所有其他网格细化标准后,可以沿每个方向按指定因子均匀拆分网格:
tcl
pdbSet Grid SnMesh binarytree.split.factor.x 4
pdbSet Grid SnMesh binarytree.split.factor.y 2
pdbSet Grid SnMesh binarytree.split.factor.z 1
grid remesh> 注意:分割因子必须以 2 的幂指定。
10.4 自适应网格细化
使用静态细化框将网格定制到特定问题可能既繁琐又耗时。此外,对于某些应用,掺杂分布在工艺过程中变化很大,以至于开始时需要较细网格的区域与最终需要较细网格的区域非常不同。
为准确捕获整个演变过程,静态网格需要在结构的大部分区域上放置细网格,导致模拟时间长和内存使用量大。Sentaurus Process 中的自适应网格解决了这些问题。
自适应网格功能有一个主要组件:基于场的细化。
Adaptive Refinement Criteria
可用的细化函数来处理不同场和情况。所有函数都涉及相邻节点上值之间的某种比较以及相邻节点之间可能值的比较。可用的细化标准包括:
- 相对差异(默认)
- 绝对差异
- 对数差异
- 反双曲正弦(asinh)差异
- 梯度
- 局部剂量误差
- 区间细化
这些细化可以全局应用(默认),也可以按以下方式限制:
- 按框
- 按材料
- 按区域
自适应网格默认关闭。要开启自适应网格,请使用:
tcl
pdbSet Grid Adaptive 1
pdbSet Grid SnMesh UseLines 1 # 与自适应网格一起推荐Relative Difference Criteria
两个相邻节点之间的相对差异计算如下:
如果该表达式的值大于最大相对差异,则分割节点 1 和节点 2 之间的边:
tcl
pdbSet Grid <Field> Refine.Rel.Error <n>
# 或
refinebox def.rel.error=<n> rel.error=<n>Absolute Difference Criteria
两个相邻节点之间的绝对差异计算为:
如果该值大于最大绝对差异,则分割边:
tcl
pdbSet Grid <Field> Refine.Max.Difference <n>Logarithmic Difference Criteria
对数(以 10 为底)差异:
> 注意:对数差异标准仅适用于始终为正的场。对于可以具有负值(如应力)的场,请使用反双曲正弦差异标准。
Inverse Hyperbolic Sine (asinh) Difference Criteria
asinh 差异:
Gradient Criteria
两个相邻节点之间的梯度:
Local Dose Error Criteria
如果两个相邻节点之间的边未分割,则局部剂量误差计算为:
Interval Refinement Criteria
区间细化提供了一种细化网格的方法,使得特定区间内的场值得到良好解析。区间细化在场值在指定区间内的任何位置产生指定长度的网格边。
Summary of Refinement Parameters
| refinebox 参数 | 对应的 PDB 参数 |
|---|---|
def.rel.error, rel.error | Grid <Field> Refine.Rel.Error |
def.abs.error, abs.error | Grid <Field> Refine.Abs.Error |
def.max.difference, max.difference | Grid <Field> Refine.Max.Difference |
def.max.logdiff, max.logdiff | Grid <Field> Refine.Max.LogDiff |
def.max.asinhdiff, max.asinhdiff | Grid <Field> Refine.Max.AsinhDiff |
def.max.gradient, max.gradient | Grid <Field> Refine.Max.Gradient |
def.max.dose.error, max.dose.error | Grid <Field> Refine.Max.DoseError |
min.value | Grid <Field> Refine.Min.Value |
max.value | Grid <Field> Refine.Max.Value |
target.length | Grid <Field> Target.Length |
target.length.scaling | Grid <Field> Target.Length.Scaling |
Adaptive Meshing During Diffusion
扩散期间的自适应网格在开启自适应网格时默认开启。阻止低温下自适应网格的额外控制:
tcl
pdbSet Grid Min.Adaptive.Temp <温度C>默认情况下,氧化、硅化或外延期间不执行自适应网格。可以通过设置开启:
tcl
pdbSet Diffuse Compute.Regrid.Steps <n> # 惰性退火期间
pdbSet Diffuse Growth.Regrid.Steps <n> # 氧化和硅化期间
pdbSet Diffuse Epi.Regrid.Steps <n> # 外延期间> 注意:不建议将自适应网格与任何上述移动边界操作一起使用。
Adaptive Meshing During Implantation
注入期间的自适应网格在开启自适应网格时处于活动状态。它也可以使用 implant 命令的 Adaptive 选项为每个注入步骤激活或停用。
Tips for Adaptive Meshing
使用自适应网格时的一些有用建议:
- 设置框-wise 网格标准时,请记住您指定的任何全局标准仍然在框内适用。
- 要开启自适应网格并使用所有默认值,只需
pdbSet Grid Adaptive 1。调整细化量的主要参数是pdbSet Grid AdaptiveField Refine.Rel.Error,默认为 1.5。在许多情况下,这细化得不够。减小该值会导致更多细化。不建议使用小于 0.25 的值。 - 默认注入损伤的细化设置可能给出过细的网格。将
Grid Damage Refine.Target.Length从默认值 0.002 增加以减少细化。
10.5 UseLines:保留用户定义的网格线
UseLines 算法在引入任何其他线之前,将使用 line 命令创建的线插入内部二分算法。这具有将结构的静态区域与因几何操作而边界移动的区域隔离的效果。
默认情况下,使用 spacing 参数创建的刻度线是 Sentaurus Mesh 尽可能强制执行的硬线。由于此类线穿过整个结构,如果 spacing 参数使用较小的值,它们可能导致不必要的细化。
使用 virtual.spacing 选项,在 line 命令之间创建的刻度线变成软线:
tcl
line virtual.spacing
line x loc=0 spacing=0.001
line x loc=1 spacing=0.001
line y loc=0 spacing=0.001
line y loc=1 spacing=0.001UseLines and the transform Command
刻度线必须与 transform 命令一起以特殊方式处理。
- Reflection:使用
transform reflect时,在反射区域中,刻度线在沿适当平面进行横向反转后创建。 - Stretch:在给定方向上对给定坐标应用
transform stretch时,伸长区域中的现有刻度线按伸长量平移。 - Rotation:应用
transform rotate时,刻度线也会旋转并在 x-ticks、y-ticks 和 z-ticks 之间正确转移。 - Translation:
transform translate命令按指定量移动刻度线。 - Cut:使用
transform cut时,结构中被切割部分的线被删除。
10.6 Sentaurus Mesh 设置
可以通过多个参数控制 Sentaurus Mesh 的行为,这些参数设置网格生成过程的不同方面。这些参数可分为以下类别:
Delaunay 网格生成和偏移参数
| 参数 | 默认值 | 描述 |
|---|---|---|
CoplanarityAngle | 175° | 任何一对面的角度≥ CoplanarityAngle 被视为共面 |
CoplanarityDistance | 1.0e-6 µm | 交换共享一对相邻面的边时对边界造成的最大变形 |
DelaunayTolerance | 1.0e-4 | 指定脊线和边界面对 Delaunay 准则的符合程度 |
DelaunayType | conformal | 网格类型:box method、conformal 或 constrained |
EdgeProximity | 0.05 | 分割边时生成边的最小比率 |
FaceProximity | 0.05 | 分割面时生成面的最小比率 |
max.lateral.size | 10 µm | 界面方向上元素之间的最大横向间距 |
MaxAspectRatio | 1e6 | 二叉树中元素的最大允许纵横比 |
MaxBoundaryCutRatio.2d | 0.01 | 切割材料边界时相邻轴对齐边的最大允许长度比率(2D) |
MaxConnectivity | 1e3 | 最终网格中连接到一个点的最大元素数 |
MaxNeighborRatio | 3.0 | 二叉树中相邻共线边的比率 |
MaxPoints | 500000 | Sentaurus Mesh delaunization 模块允许的最大点数 |
min.normal.size | 8e-4 µm | 界面上任何一侧的最小法向(至界面)网格元素大小 |
minedge | 2.0e-6 µm | 最小边长请求 |
normal.growth.ratio.2d | 2.0 | 从界面法线方向增加元素大小的因子(2D) |
normal.growth.ratio.3d | 3.0 | 从界面法线方向增加元素大小的因子(3D) |
offsetting.maxlevel | 3 | 使用 Sentaurus Mesh 偏移时界面处的偏移层数 |
StoreDelaunayWeight | 1 | 存储 box method 库的 Delaunay-Voronoï 权重 |
边界表示 (brep) 预处理参数
| 参数 | 默认值 | 描述 |
|---|---|---|
Apply.Brep.DelPSC | false | 是否在网格生成步骤开始时对边界应用 Delaunay 细化 |
Apply.Brep.DelPSC.Accuracy | 1e-4 µm | DelPSC 算法在高曲率区域的精度 |
Apply.Brep.DelPSC.Resolution | 1e-2 µm | DelPSC 算法中三角小尺寸的控制 |
Apply.Brep.DelPSC.Ridge.Angle | 150° | 检测几何特征的角阈值 |
Apply.Brep.DualContouring | false | 在网格生成之前应用双重轮廓算法重建边界(3D) |
10.7 最小可执行示例
以下示例验证网格生成与细化环境:
tcl
# ch10_min_mesh.cmd
go sprocess
# 1) 定义初始网格线
line x location=0.00 spacing=0.05 tag=top
line x location=1.00 spacing=0.10 tag=bot
line y location=0.00 spacing=0.05 tag=left
line y location=1.00 spacing=0.10 tag=right
region Silicon xlo=top xhi=bot ylo=left yhi=right substrate
# 2) 初始化结构
init wafer.orient={1 0 0} notch.direction={1 1 0} slice.angle=-90
init field=Boron concentration=1e15
# 3) 定义标准细化框(局部细化)
refinebox min={0.3 0.3} max={0.7 0.7} \
xrefine={0.02 0.01 0.02} yrefine={0.02 0.01 0.02} silicon
# 4) 定义界面细化
refinebox min.normal.size=0.005 normal.growth.ratio=2 \
interface.materials={silicon oxide}
# 5) 开启自适应网格
pdbSet Grid Adaptive 1
pdbSet Grid SnMesh UseLines 1
# 6) 执行扩散触发重网格
diffuse temperature=900<C> time=30<s>
# 7) 保存结构
struct tdr=out/ch10_m1.tdr !Gas
exit10.8 关键参数速查表
| 类别 | 参数/命令 | 作用 | 常见取值/示例 |
|---|---|---|---|
| 自适应网格 | Grid Adaptive 1 | 开启自适应网格 | 默认关闭 |
| UseLines | Grid SnMesh UseLines 1 | 保持用户定义网格线 | 与自适应网格一起推荐 |
| 界面细化 | min.normal.size | 界面附近最小网格大小 | 8e-4 µm(默认) |
| 增长率 | normal.growth.ratio.2d/3d | 远离界面时边大小增长 | 2.0(2D)/ 3.0(3D) |
| 相对误差 | Refine.Rel.Error | 自适应细化相对误差 | 1.5(默认),0.5(细网格) |
| 绝对误差 | Refine.Abs.Error | 自适应细化绝对误差 | 场相关单位 |
| 细化框清除 | refinebox clear | 清除所有细化框 | 在重新定义细化前使用 |
| 二叉树分割 | binarytree.split.factor.x | x 方向均匀分割因子 | 必须是 2 的幂 |
| Delaunay 类型 | DelaunayType | 网格生成算法 | conformal/box method/constrained |
| 最大点数 | MaxPoints | delaunization 允许的最大点数 | 500000(默认) |
10.9 常见问题与诊断步骤
问题 1:网格元素质量差或畸变严重
诊断步骤:
- 检查
minedge和min.normal.size是否设置得过小。 - 验证
MaxAspectRatio设置——过高的值允许极端纵横比元素。 - 检查 Delaunay 类型:
conformal通常给出最佳质量。 - 确认
normal.growth.ratio不要设置得太高(会导致大跳跃)。
问题 2:自适应网格产生过多网格点
诊断步骤:
- 增加
Refine.Rel.Error(默认值 1.5 可以增加到 2.0-3.0)。 - 对于剂量误差标准,增加
Grid Damage Refine.Target.Length(从 0.002 µm 开始)。 - 检查
AdaptiveField Refine.Rel.Error——这是主要控制参数。 - 使用
refinebox clear后定义更具体的细化区域。
问题 3:注入/扩散后网格不满足细化标准
诊断步骤:
- 确认
pdbSet Grid Adaptive 1已设置。 - 检查
Compute.Regrid.Steps设置——对于扩散,默认是 4 步检查一次。 - 验证
Refine.Check参数——如果设置为 0,则强制重网格而不检查。 - 对于注入,确认
Adaptive选项在implant命令中使用。
问题 4:UseLines 算法未能保持用户定义线
诊断步骤:
- 确认
pdbSet Grid SnMesh UseLines 1已设置。 - 检查是否在几何操作前定义了 line 命令。
- 验证 transform 操作是否与 UseLines 兼容——某些操作(如 cut)会删除线。
- 对于 virtual.spacing,确保在
line命令之前使用line virtual.spacing。