如何在 Python 上使用 Drift-diffusion 模型模拟基本半导体模型?

计算科学 pde 计算物理学 模拟
2021-12-07 17:15:05

我正在尝试为教学目的模拟基本的半导体模型——从漂移扩散模型开始。虽然我不想使用现成的半导体模拟器——我将学习其他(常见的、最近的或不知名的)模型,但我确实想使用现成的 PDE 求解器。

但即使对于简单的一维情况,漂移扩散模型也包含许多耦合的非线性偏微分方程。

电流密度方程:

Jn=qn(x)μnE(x)+qDnn
Jp=qp(x)μpE(x)qDpp

连续性方程:

nt=1qJn+Un
pt=1qJp+Up

泊松方程:

(ϵV)=(pn+ND+NA)

和一些边界条件。

是否有一个包(最好是开源的)可以以这种形式采用这些方程并求解它们?或者工具所需的变分形式是否不那么难?无论如何,我有什么选择?

2个回答

我无法为您提供可以为您求解方程的求解器。

但是,我将提供警告:

如果您想使用有限元方法,尤其是所谓的连续 Galerkin 方法,您需要方程的弱形式。对于您提供的方程,获得形式并非易事,但也不是特别难以获得。如果您选择有限元方法并导出方程的弱形式,您应该能够将 FEniCS(https://fenicsproject.org/)用于其他所有方法。

求解所得到的线性方程组耦合系统并不困难(使用牛顿或牛顿-坎托罗维奇方法),但如果您想要获得可接受的执行时间,则需要一些思考。总而言之:求解器的定制实现将非常耗时(您必须对其进行测试),因此请尽量避免它,除非您真的想了解求解器可能出现的问题。

我的背景:我在一位朋友(数值数学)的硕士论文中建议了他如何解释他从解决 Nernst-Planck-Poisson 方程的最优控制问题中获得的数值结果(这基本上是你提供的方程)。不过,他正在用 2D 解决它(如果你也算时间的话,也可以用 2+1 D 解决它),而我们正在使用我的 C++。

我开发了一个开源,它使用 Python 前端以脚本形式指定 PDE。

https://devsim.org

所有这一切的一个关键点是,Scharfetter-Gummel 方法在历史上一直是求解漂移扩散方程的最成功的方法。这种方法与使用有限体积方法最兼容。有一些混合方法使用有限元和有限体积的组合形式。

请在此处查看接受的答案:

漂移扩散和相关模型的 PDE 求解器

二极管仿真结果如下所示:

https://devsim.com/1d-diode-junction/ https://devsim.com/1d-diode-junction-part-ii/

无论您是想编写解决方案,还是尝试我的项目,请随时联系项目邮件列表。