关于fdtd算法中的网格尺寸的设置目的


#1

这个帖子及相关帖子中,再谈网格以及细化网格的使用
我们反复讨论了网格尺寸大小的设置。但是,可能一些用户并不清楚为什么要设置细网格。还有的用户用Override mesh将本想细化的网格变粗了,特别是在介电常数虚部非常大以至于自动网格需要超过计算机内存的情况下,错误地以为用Override mesh能大大降低内存需求。

FDTD是一种时域空域离散算法,因此,无论是时间信号还是空间场,都需要离散。而一般软件所用的是受Courant–Friedrichs–Lewy (CFL)限制的显性算法,所以时间步长受限于空间网格尺寸:空间网格越小,时间步长越小,要仿真一定的时间长度(即光传播的时间),所用的CPU时间就越长(用户看到的计算机计算所用的时间)。 在其他设置正确的情况下,网格越细结果精度越高(数值色散Numerical Dispersion 越小)。 因此,FDTD仿真重要的是空间网格尺寸。

空间网格尺寸的设置目的主要有两个:
1:得到一定精度的结果。
2:分辨几何细节。例如在光波段仿真,有一层结构只有几个纳米的厚度并且不能将其表征为表面电导率,那就要用1个或多个网格来分辨它,取决于所期望的结果精度以及谐振波长的准确性。仿真的谐振波长偏离理论结果的主要原因就是网格不足够细。理论上讲,当网格无限细的情况下,仿真的结果可以无限逼近理论结果。

总之,应该是根据“需要”设置网格尺寸,即Set the mesh size as needed. 你要了解这种需要,就需要对FDTD算法及其误差等有个基本概念。比如,如果某个方向需要很细的网格来分辨细节,而其它方向即使不用细化网格,也已经有足够的精度(通过FDTD的自动网格),为了节省内存和加快仿真,那就没有必要在所有的方向上都用同样的细化网格。换句话说,一些情况下,仅需要在一个方向添加细化网格。

当然,在一些仿真中,如果光的传播主要限制在一定的角度范围内,我们可以适当增大个别方向网格尺寸,目的是为了减小内存需求来加快仿真。参见这个连接 https://kb.lumerical.com/en/index.html?cmos_simulation_tips.html


#2