Appearance
第 3 章:Placements 节、Interpolate 节与网格生成器节
本章继续介绍命令文件的各个节,包括 Placements 节(放置节)、Interpolate 节(插值节)、AxisAligned 节(对齐轴节)、Offsetting 节(偏置节)。
Placements 节
Placements 节由细化和分布实例集组成。这些实例在器件中的位置必须指定,并且必须引用 Definitions 节中给出的定义。
细化区域在此节中的顺序很重要。网格生成器根据 Placements 节中描述的细化区域顺序来选择应用哪个细化条件。
Placements 节语法
Placements {
AnalyticalProfile "instance name" {parameters}
Constant "instance name" {parameters}
Multibox "instance name" {parameters}
Particle "instance name" {parameters}
Refinement "instance name" {parameters}
SubMesh "instance name" {parameters}
...
}注意:分布实例的顺序仅在使用 Replace 选项时重要。
几何元素
要指定 Placements 节,必须使用几何元素。几何元素是用于选择或定位数据的几何对象,它们不是网格单元的一部分。这些对象的坐标是相对于器件坐标定义的。
允许的几何元素以及必须指定的坐标值数量取决于器件的维度 d。
设 x = [x₁, ..., x_d] 表示一个点,定义以下几何元素:
| 元素 | 维度 | 描述 |
|---|---|---|
| Point | 1D | 点 (x₁) |
| Line | 2D | 线段 (x₁, x₂) |
| Rectangle | 2D | 矩形 (x₁, x₂) |
| Polygon | 2D/3D | 多边形 (x₁, ..., x_m), m > 2 |
| Complex polygon | 2D | 复杂多边形,由多个 lump 组成 |
| Cuboid | 3D | 长方体 (x₁, x₂) |
| Polyhedron | 3D | 多面体 |
注意:简单多边形通过在线段 x₁ = [x₁, ..., x_d] 和 x_m = [x₁, ..., x_d] 之间添加线段来内部闭合。只允许简单的闭合多面体。所有面都必须描述。
GeoBrep {string} 元素接受以文件形式给出的边界表示(brep)路径,用于选择或定位 brep 中存在的所有界面(不包括外部界面)。
GeoPointCloud {string} 元素用于选择指定文本文件中定义的点云。
表:各维度中用于指定窗口的几何元素
| 功能 | 1D | 2D | 3D |
|---|---|---|---|
| Placements 节中分布的 EvaluateWindow | line | rectangle, polygon | cuboid, polyhedron |
| 解析分布的 ReferenceElement | point | line | rectangle, polygon |
| Placements 节中细化的 RefineWindow | line | rectangle, polygon | cuboid, polyhedron |
非几何元素
| 元素 | 语法 |
|---|---|
| Material 元素 | material [<DATEX material 名称列表>] |
| Region 元素 | region [<区域名称列表>] |
| Composite 元素 | element {<几何元素列表>} |
| Sweep 元素 | sweepElement {<sweep 元素参数>} |
细化或评估窗口可以使用 material 或 region 关键字限制在特定 material 或 region 上工作。
放置解析分布(Placing Analytic Profiles)
Placements {
AnalyticalProfile "instance name" {
Reference = "string"
ReferenceElement {
Element = element
Direction = positive | negative
}
EvaluateWindow {
Element = geometric element | material [<list>] |
region [<list>]
DecayLength = value | GaussDecayLength = value
}
LocalReplace
NotEvalLine
Replace
}
}参数说明:
- Reference — 指定要使用的解析分布。仅允许引用解析分布。
- ReferenceElement —
ReferenceElement的法线方向定义了解析分布的方向。当对新生成网格的网格点求函数值时,将这些点投影到 Element 上。用法线距离来求 Function 的值。投影到 Element 边界的距离用来计算 LateralFunction。 - EvaluateWindow — 将解析分布的放置限制在特定窗口、material 或 region。
- LocalReplace — 使用 Replace 选项时,所有计算的种类都设为零,并用给定分布实例的值设置。使用 LocalReplace 选项时,仅将在相应 Definitions 节中定义的种类设为零并使用当前分布实例重新计算。
- NotEvalLine — 如果指定此选项,则不在参考元素的位置对分布求值。
- Replace — 一般情况下,Placements 节中定义的每个分布实例在每个新生成网格的点上的值都作为和计算。
放置常量分布(Placing Constant Profiles)
Placements {
Constant "instance name" {
Reference = "string"
EvaluateWindow {
Element = geometric element | material [<list>] |
region [<list>]
DecayLength = value | GaussDecayLength = value
}
LocalReplace
Replace
}
}EvaluateWindow — 定义评估分布的区域,并在窗口边界附近应用衰减长度。
衰减函数用于减少舍入误差,可以是误差函数或高斯函数。使用误差函数时指定 DecayLength。使用高斯衰减函数时指定 GaussDecayLength。
如果没有定义 EvaluateWindow,则分布之间的转换是突变的。如果 DecayLength=0,则不应用衰减函数。
注意:当分布在整个器件内有效且不需要衰减函数时,应避免使用
EvaluateWindow,因为几何元素的评估非常耗时。
放置 Multibox 区域
Placements {
Multibox "instance name" {
Reference = "string"
RefineWindow = geometric element
}
}放置粒子分布(Placing Particle Profiles)
Placements {
Particle "instance name" {
Reference = "string"
EvaluateWindow {
Element = material [<list>] | region [<list>]
}
LocalReplace
Replace
}
}放置细化区域(Placing Refinement Regions)
Placements {
Refinement "instance name" {
Reference = "string"
RefineWindow = geometric element | material [<list>] |
region [<list>]
}
}RefineWindow 可以多次指定。当存在多个 RefineWindow 时,Sentaurus Mesh 仅细化这些细化窗口的公共部分。
放置子网格(Placing Submeshes)
Placements {
SubMesh "instance name" {
Reference = "string"
EvaluateWindow {
Element = geometric element | material [<list>] |
region [<list>]
DecayLength = value | GaussDecayLength = value
}
Ignoremat
LocalReplace
MatchMaterialType
Reflect = X | Y | Z
Replace
Rotation {
Angle = value
Axis = X | Y | Z
}
ShiftVector = vector
}
}Ignoremat — 如果指定此选项,则忽略子网格中的 material。标准行为是仅当点在具有相同 material 的区域中时才接受插值。
MatchMaterialType — 指定此选项后,子网格尝试匹配等效的 material 类型(例如 semiconductor、insulator、conductor),而不是在查找要插值的值时匹配 material 名称。
Reflect — 指定沿指定坐标轴的反射。
Rotation — 围绕轴执行逆时针旋转。旋转中心是坐标系的原点。
ShiftVector — 将子网格平移到新位置。
注意:
Reflect、Rotation和ShiftVector操作按照它们在命令文件中出现的顺序执行。
Interpolate 节
此可选节控制在网格生成器完成后的数据插值。
Interpolate {
interpolateElements = true | false
interpolateInterfaces = true | false
keepTotalConcentration = true | false
lateralDiffusion = true | false
}interpolateElements(false)— 插值元素类型(标量和向量)数据集。
interpolateInterfaces(false)— 如果子网格有界面区域,则在生成网格上插值在源子网格上定义的所有数据集。
keepTotalConcentration(false)— 在输出文件中保存 TotalConcentration 字段。
lateralDiffusion(false)— 允许解析分布的侧向扩展,类似于 Synopsys Taurus™ Medici 工具的效果。
AxisAligned 节
本节控制 axis-aligned 网格生成器。该生成器接收器件的 brep 和一系列用户定义的细化标准,按以下步骤创建网格:
- 使用组合简化(decimation)和重建(reconstruction)算法修复边界
- 通过应用
xCuts、yCuts和zCuts参数对结构边界框进行初始粗离散化 - 使用用户定义的细化标准细化基本网格
- 将 boxes 压在边界上,产生表面 axis-aligned 图案
- 将 boxes 与边界合并
AxisAligned 节语法
AxisAligned {
binaryTreeSplitBox = (floatlist)
binaryTreeSplitFactorX = integer
binaryTreeSplitFactorY = integer
binaryTreeSplitFactorZ = integer
convexTriangulation = true | false
fitInterfaces = true | false
hintBoxSize = float
imprintAccuracy = float
imprintCoplanarFacesOnly = true | false
imprintCoplanarityAngle = float
imprintCoplanarityDistance = float
latticeCellSize = (float float float)
latticeDimensions = (integer integer integer)
maxAngle = float
maxAspectRatio = float
maxBoundaryCutRatio = float
maxNeighborRatio = float
overscan = true | false
overscanResolution = float
skipSameMaterialInterfaces = true | false
smoothing = true | false
spacingMethod = even | regular | smooth
splitDisconnectedRegions = true | false
virtualSpacing = true | false
xCuts = (floatlist)
yCuts = (floatlist)
zCuts = (floatlist)
}关键参数说明
- binaryTreeSplitFactorX/Y/Z(1)— 在 x/y/z 方向将细化步骤中使用的最终二叉树按指定因子分割。
- convexTriangulation(false)— 创建包含凸区域的 3D 模型的最小三角剖分。输入 3D 边界必须是凸模型。
- fitInterfaces(false)— 自动计算 xCuts、yCuts 和 zCuts,首先沿 axis-aligned 界面细化。
- maxAngle(2D 为 90,3D 为 165)— 限制二叉树中产生的最大角度。
- maxAspectRatio(1e6)— 细化步骤结束时二叉树单元允许的最大长宽比。
- maxBoundaryCutRatio(0.01)— 定义 axis-aligned box 与边界相交的相邻线段之间允许的最大长度比。
- maxNeighborRatio(2D 为 2,3D 为 4)— 指定相邻单元之间的大小比率。
- overscan(false)— 扫描 axis-aligned 单元以检测字段变化,从而证明更细化的合理性。
- skipSameMaterialInterfaces(false)— 细化期间忽略两侧具有相同 material 的界面。
- spacingMethod(even)— 指定细化算法在两条指定线之间扩展细化时使用的进展类型:
even(均匀分布)、regular(规则分布)、smooth(平滑渐变)。 - virtualSpacing(false)— 指定由 xCuts、yCuts、zCuts 参数定义的值对生成的扩展线是显式线还是虚拟线。
- xCuts, yCuts, zCuts — 在任何用户定义的细化之前引入到网格中的细化线。这些线定义了一个直线网格,作为细化的起点。
Offsetting 节
Offsetting 网格生成器使用 Offsetting 节创建沿器件界面分布的层状网格。这些层与 axis-aligned 网格生成器生成的 axis-aligned 网格相结合。Offsetting 网格生成器首先生成 axis-aligned 网格,然后在其上添加 offsetting 层,并清除与层重叠的 axis-aligned 元素。
注意:在命令文件的 IOControls 节中指定
EnableOffset或EnableSections选项以激活 Offsetting 网格生成器。
Offsetting 节语法
Offsetting {
# Offsetting 全局节
includeExterior = true | false
noffset {
factor = float
hlocal = float
maxlevel = integer
}
normalSmoothing = true | false
# Offsetting 界面节
noffset material | region "string" "string" {
factor = float
hlocal = float
window = [(float float float) (float float float)]
}
# Offsetting 区域节
noffset material | region "string" {
maxlevel = integer
}
}关键参数说明
- factor(1.3)— 当前进时,层厚度按此因子增加。
- hlocal(0)— 设置第一层的厚度(微米)。默认
hlocal=0表示完全不进行分层。 - includeExterior(false)— 为指定 offsetting 区域或 materials 时的 "All" 关键字提供更清晰的定义。
- maxlevel(200)— 设置 Offsetting 网格生成器创建的层数。当前沿与其他前沿或表面碰撞时,网格生成器提前停止。
- normalSmoothing(false)— 在高曲率区域重新调整表面法线方向,以避免构造解析层时出现表面缠结。
- window — 指定用于限制分层创建的立方体。对于大界面,此参数允许将分层限制在感兴趣的空间区域,从而减少网格的大小。