Appearance
第 6 章:掺杂与细化示例
本章介绍如何使用命令文件的 Definitions 和 Placements 节,以及如何使用 Offsetting 节生成层状网格。
简单二极管(Simple Diode)
本节介绍命令文件 diode.cmd,用于演示本章其余部分的示例。
维度无关部分
Title "minimal example: simple diode"
Definitions {
# Profiles
Constant "n-type region" {
Species = "PhosphorusActiveConcentration"
Value = 1e+18
}
Constant "p-type region" {
Species = "BoronActiveConcentration"
Value = 1e+17
}
}Definitions 节指定维度无关的数据,对于所有维度都无需修改即可使用。
维度相关部分(Placements)
Placements {
# Profiles
Constant "n-type region instance" {
Reference = "n-type region"
EvaluateWindow {
Element = cuboid [(1 0 0), (2 3 2)]
}
}
Constant "p-type region instance" {
Reference = "p-type region"
EvaluateWindow {
Element = cuboid [(0 0 0), (1 3 2)]
}
}
}EvaluateWindow 定义分布的有效域。对于 3D 情况,p-type region 的有效域是器件的下半部分。如果未定义 EvaluateWindow,则分布在整个器件域内有效。
细化与评估窗口
细化条件可以通过细化窗口来限制,可以是简单的矩形、多边形、多面体、region 或 material。
使用多边形细化
多边形细化窗口示例:
Definitions {
Refinement "global" {
MaxElementSize = (4, 4)
MinElementSize = (.04 .04)
RefineFunction = MaxTransDiff(Variable="DopingConcentration",
Value=0.5)
}
Refinement "refpol" {
MaxElementSize = (0.3 0.1)
}
Constant "bor" {
Species = "BoronConcentration"
Value=1e+17
}
}
Placements {
Refinement "global" {
Reference = "global"
RefineWindow = rectangle [(-2 -2), (14 14)]
}
Refinement "refpol" {
Reference = "refpol"
RefineWindow = polygon [(1 2) (0.75 2) ... (1 2)]
}
Constant "bor" {
Reference = "bor"
EvaluateWindow {
Element = polygon [...]
}
}
}使用复合元素
可以将多个几何元素组合成复合元素,用于定义弯曲的参考元素:
AnalyticalProfile "MyProfile" {
Reference = "MyProfileReference"
ReferenceElement {
Element = {
line [(-1 2), (4 2)]
line [(4 2), (6 4)]
line [(6 4), (7 4)]
}
}
}所有组件必须彼此相邻,不能有间隙。
Region-wise 与 Material-wise 细化
Placements {
Refinement "A" {
Reference = "A"
RefineWindow = region ["Ox_Region"]
}
Refinement "B" {
Reference = "B"
RefineWindow = material ["Oxide"]
}
}使用解析函数指定掺杂
使用 Eval 函数定义解析掺杂分布:
AnalyticalProfile "NoName_0" {
Species = "DopingConcentration"
Function = Eval(init="a=10",
function = "a*sin(x)*cos(y)",
value = 0)
ReferenceElement {
Element = line [(0 0), (10 10)]
}
}从 2D 截面创建 3D 分布
使用 sweepElement 将 2D 分布扩展到三维:
sweepElement {
base = <2D Element>
distance = <double>
}
sweepElement {
base = <2D Element>
vector = (x1,y1,z1)
}
sweepElement {
base = <2D Element>
path = [(x1,y1,z1)...(xn,yn,zn)]
}
sweepElement {
base = <2D Element>
angle = <double>
}
sweepElement只能在EvaluateWindow语句中使用。
晶界解析分布与细化
使用 GeoPointCloud 和 MaxLenPointCloud
Definitions {
Refinement "Refinement" {
MaxElementSize = (0.2 0.2 0.2)
MinElementSize = (0.01 0.01 0.01)
RefineFunction = MaxLenPointCloud(
fileName = "traps.txt",
value = 0.025, factor = 1.2)
}
AnalyticalProfile "Traps" {
Species = "PhosphorusConcentration"
Function = Gauss(PeakPos = 0, PeakVal = 1, StdDev = 0.5)
LateralFunction = Gauss(Factor = 0.0)
}
}
Placements {
Refinement "Refinement" {
Reference = "Refinement"
}
AnalyticalProfile "Traps" {
Reference = "Traps"
ReferenceElement {
Element = GeoPointCloud{"traps.txt"}
}
}
}使用 GeoBrep 和 MaxLenInt
Definitions {
Refinement "Refinement" {
MaxElementSize = (0.2 0.2 0.2)
MinElementSize = (0.01 0.01 0.01)
RefineFunction = MaxLenInt(
Interface("Silicon", "All"),
Value = 0.025, doubleside, factor = 1.2,
brep = "output.tdr")
}
AnalyticalProfile "buried n-channel" {
Species = "PhosphorusConcentration"
Function = Gauss(PeakPos = 0, PeakVal = 1, StdDev = 0.25)
LateralFunction = Gauss(Factor = 0.3)
}
}界面细化
RefineFunction = MaxLenInt(Interface("Silicon","Oxide"),
Value = 0.02, Factor = 1.4)常用选项:
- 细化所有界面:
Interface("All","All") - 细化接触处:
Interface("All","Contact") - 双面细化:
DoubleSide
Offsetting 网格生成
简单示例
Offsetting {
noffset {
hlocal=0
}
noffset material "Silicon" {
maxlevel = 5
}
noffset material "Oxide" {
maxlevel = 5
}
noffset material "Silicon" "Oxide" {
hlocal=0.002
factor=1.5
}
noffset material "Oxide" "Silicon" {
hlocal=0.002
factor=1.5
}
}hlocal:第一层厚度(微米)factor:层厚度增长因子maxlevel:最大层数
使用 Cuts 局部化细化
使用 xCuts、yCuts、zCuts 定义初始网格线:
AxisAligned { xCuts = (4.837 7.156) }这在参数化结构变化时特别有用,可以保持其他区域的网格不变。
解析函数细化示例
使用一般解析函数指定细化:
Definitions {
Refinement "Region_1" {
MaxElementSize = (1 1)
MinElementSize = (0.01 0.01)
RefineFunction = MaxTransDiff(
Variable = "ElectrostaticPotential",
Value = 0.01)
}
AnalyticalProfile "Profile_1" {
Species = "ElectrostaticPotential"
Function = General(init="a=0.1",
function = "a*sin(x)*sin(y)",
value = 0)
}
}
Placements {
Refinement "Region_1" {
Reference = "Region_1"
}
AnalyticalProfile "Profile_1" {
Reference = "Profile_1"
EvaluateWindow {
Element = rectangle [(0 0), (9.43 9.43)]
}
}
}3D 解析函数细化示例:
Function = General(init="a=0.1",
function = "a*x*x*y*y*z*z",
value = 0)