Home Examples Screenshots User manual Bluesky logo YouTube 中文
OghmaNano Simulate organic/Perovskite Solar Cells, OFETs, and OLEDs DOWNLOAD

第 D 部分:求解器稳定性/网格划分

本节聚焦于求解器稳定性与网格选择。一维(1D)仿真通常非常稳定且运行快速。随着维度从 1D 增加到 2D 和 3D,方程数量以及它们之间的耦合项数量都会增长,从而更容易出现数值不稳定。如果在 2D 或 3D 仿真中未谨慎选择设置,仿真可能无法收敛。

这里我们将有意推动几个简单设置以触发不收敛,然后诊断其原因以及如何修复。通过亲自复现实这些常见失败模式,你将学会识别症状并应用正确的补救措施(例如调整网格、减小偏置步长,或缓和极端材料参数)以恢复稳定解。

1. 不现实的低数值

在许多情况下,收敛问题源于非物理输入值。为说明这一点,我们故意将载流子迁移率设置为 0 并检查由此产生的错误。当然,在真实材料中迁移率不可能真正为零——它总是有限值——但该示例展示了当求解器接收到不现实参数时会发生什么。

打开 Electrical Parameters 编辑器(主窗口 → Device 选项卡)并将迁移率设置为 0,如 ?? 所示。现在运行仿真。你应当看到类似于 ?? 的错误界面,其中有两个红色框:一个竖框圈住残差汇总,另一个横框靠近崩溃信息。

如果你查看竖向红框,可以看到 f()=2.54e2,后面还有其他行,其中 f() 非常大(例如 1e151e51e81e7)。这里,f() 是求解器 残差误差:衡量当前耦合方程满足程度的指标。理想情况下,求解器残差应当为零,尽管在实践中这不可能完全实现。残差在 1e−101e−8 的范围表示收敛非常好,而 1e−1 左右仍然可以接受。 相比之下,达到数百(例如 2.54e2)的残差——尤其当伴随分量值高达 1e15 时——清楚表明求解器正在吃力,系统已经变得不稳定。

电学参数编辑器中将迁移率设置为 0,这是一个非物理值,会阻止载流子输运并导致求解器错误。
零迁移率(μ = 0)。 这是一个非物理设置,会完全阻断输运,并通常在 drift–diffusion 中触发不收敛。
将迁移率设置为零后导致的求解器崩溃跟踪信息。
由零迁移率引起的错误。 当 μ = 0 时,输运方程变得不一致,导致仿真报错并最终崩溃。

横向红框通常会报告运行最终中止的原因:Holes asking for 3e5 but only defined in range [min, max]. 这意味着计算得到的准费米能级已超出表格化范围。在开始之前,模型会在较大的能量范围内预先表格化诸如准费米能级与载流子浓度之间的关系——确实比通常在器件中预期出现的范围大得多。当求解器变得不稳定时,模型可能会请求超出该范围的非现实数值;此时求解器无法评估所需量并停止。

简而言之,通过将迁移率设为非物理值(μ = 0),我们迫使方程进入一个毫无物理意义的区域,因此数值方法失败:出现巨大残差,随后请求超出预计算表的数值,进而崩溃。需要强调的是,这并不是模型的弱点或软件错误。 当输入非物理参数时,求解器会被推入一个不存在数学或物理有效解的区域,因此无法给出有意义的结果。

2. 不现实的高数值

在该示例中,我们将载流子迁移率设置为 μ = 1×106 m²·V⁻¹·s⁻¹。这对半导体 drift–diffusion 模型而言是一个刻意设置的非物理数值:如此量级更可能与金属导电区域相关,而不是有机或典型半导体中的跳跃/能带输运。在实际 OFET 仿真中,你不会使用如此大的数值。

若使用该设置运行仿真,你可以观察到求解器难以收敛。在残差读出(报告 f() 的框)中,你会看到极其巨大的误差——例如 1e241e191e21——且不会衰减。残差在最初几次迭代中偏高是正常的,因为求解器正在寻找一致的状态,但它们应当很快趋于较小值。持续巨大的残差清楚表明系统由于所选参数而变得数值刚性很强或非物理。

要点:避免不现实的高迁移率。过大的输运系数会使 PDE 系统非常刚性,导致病态条件与不收敛。请为你的材料体系使用物理合理的 μ 值,并采用适度的偏置步进重新运行以恢复稳定行为。

电学参数编辑器中将迁移率设置为不现实的高值 1×10^6 m²·V⁻¹·s⁻¹,这会使求解器失稳。
不现实的迁移率(μ = 1×106 m²·V⁻¹·s⁻¹)。 极大的输运系数会产生非常刚性的系统,并常导致求解器失败。
由不现实的高迁移率设置导致数值解失稳的求解器错误信息。
由不现实的高迁移率引起的错误。 非常大的 μ 使 PDE 系统过于刚性,导致不稳定并使求解器失败。

3. 不良器件结构

在该示例中,我们打开接触编辑器并将 Source 的接触宽度设置为非常小的值(见 ??),设为一微米。乍看之下这似乎并不成问题,但它会引入一个微妙的问题:仿真基于有限差分网格,电场和载流子密度等量只在定义的网格点上计算。

如果你检查 Electrical Mesh Editor(位于 Electrical 选项卡下),你会注意到这个超薄的一微米接触落在网格点之间(见 ??)。因此,该接触在有限差分网格中实际上被“漏掉”,从而从未被正确施加到器件结构中。这会在所定义的几何与数值网格之间产生不匹配,导致仿真无法收敛。

要修复此问题,你可以增大接触的厚度,使其至少覆盖一个网格点,或提高网格密度(即添加更多点),使有限差分网格能够正确捕捉该接触。

层编辑器中将源极接触设为极薄宽度——远小于网格间距——从而导致不收敛。
源极接触设置为病态的超薄宽度(小于网格间距)。 这类亚网格特征会导致边界条件病态,并通常阻止收敛。
网格设置面板显示典型 2D OFET 网格,X 方向约 10 个划分——稳定的基线配置。
2D OFET 的典型稳定网格:X 方向约 10 个点。 适度的网格可使系统条件良好并通常可收敛。

4. 过多的网格点

初次使用有限差分模型时,一个常见的先入之见是:更多网格点会自动产生更准确的结果。人们往往会这样推理:“五个网格点肯定很差,但一千个一定很好。”在实践中,这并不成立。

OghmaNano 使用一种称为 Scharfetter–Gummel 格式 的离散化方法,它能在网格点之间对载流子密度和电势等量进行精确插值。求解器并非简单假设节点间为直线变化;相反,它使用指数拟合方法,即使在相对粗的网格上也能以很高精度捕捉输运物理。这意味着你可以用出乎意料少的点获得良好精度。

增加网格密度不仅会增加运行时间——它实际上还可能降低稳定性与准确性。更细的网格会生成更大的方程组,使数值问题更难求解。因此,矩阵会更刚性,残差可能增大,求解器也可能难以收敛。

在捕捉物理、保持合理计算时间以及避免不必要数值误差之间,总存在权衡。下方图示说明了这一点:当器件上使用 100 个网格点 时,求解器起初会报告非常大的残差(例如 1e61e5)。只有在许多次迭代之后,它才会稳定到合理的 f() 值。这种不稳定源于网格过细,使系统对求解器而言过于困难。

网格设置面板中将 X 向网格设为 100 个划分,远高于 2D OFET 通常所需。
过度网格化:X 网格 = 100 个点。 过度细化的网格会扩大系统规模与刚性,使 2D 求解器变慢并更易不收敛。
使用过多网格点后出现的求解器错误对话框,红框高亮。
由过度细化网格导致的错误。 过高的网格密度会增加刚性与内存负载,进而导致求解器错误(红框)。