FDTD快速入门之Lumerical脚本语言Pickup(四)仿真区域FDTD

文章目录

  • 前言
  • 一、一个实例
  • 二、自定义网格


前言

前面的文章介绍了如何搭建一个具体物体的几何结构(Structure)。在这篇文章里,我们来聊一聊如何建立仿真区域FDTD。从这篇文章开始,直到后面的分析部分,我们将在同一仿真物体基础上添加FDTD、光源、监视器等仿真模型,以便进行后续的说明。


一、一个实例

首先,我们用如下的代码搭建一个物体(Structure)的仿真模型:

um=1e-6;
nm=1e-9;

addrect;
set("name","SiO2");  
set("material","SiO2 (Glass) - Palik");
set("x",0);
set("y",0);
set("x span",1*um);
set("y span",1*um);
set("z max",100*nm);
set("z min",-1*um);

addrect;
set("name","Si");                   
set("material","Si (Silicon) - Palik");
set("x",0);   
set("y",0);
set("x span",1*um);
set("y span",1*um);
set("z max",300*nm);
set("z min",100*nm);

addrect;
set("name","etch");                   
set("material","etch");
set("x",0);  
set("y",0);
set("x span",100*nm);
set("y span",1*um);
set("z max",300*nm);
set("z min",100*nm);

大概长这样:
FDTD快速入门之Lumerical脚本语言Pickup(四)仿真区域FDTD_第1张图片
这是一个由硅和二氧化硅构成的光栅结构。下面,我们搭建一个用于分析光波在透过该光栅时发生衍射的FDTD仿真区域,代码如下:

addfdtd;
set("dimension",2);#三维仿真区域
set("x",0);
set("y",0);
set("z min",-10*nm);
set("z max",2*um);
set("x span",0.2*um);
set("y span",0.4*um);
set("x min bc","periodic");#设置x方向周期边界条件
set("y min bc","periodic");#设置y方向周期边界条件
set("Mesh type","auto non-uniform");#仿真网格为自动精度
set("Mesh accuracy",3);#高精度

在这段代码中,有很多是前面的文章中已经出现过的内容,这里不作赘述。我们重点介绍几个和FDTD本身相关的部分:
set(“dimension”,2):仿真空间维度,“dimension”参数一般有两个值:1和2,其中1表示仿真的区域是二维区域,2表示仿真三维区域。这里设置为2,表示我们仿真的是一个三维区域
set(“x min bc”,“periodic”):边界条件,根据实际的仿真区域(维度)设置,有"x max bc",“x min bc”,“y max bc”等多个边界,可选用的边界条件见下表:

边界条件 说明
PML 完美匹配层
Metal 金属边界
Periodic 周期边界
Symmetric 对称边界
Anti-Symmetric 非对称边界
Bloch 适合斜入射
PMC 理想磁导体

关于各种边界详细的说明与使用条件请在Lumerical官网和有关论坛上查找。
set(“Mesh type”,“auto non-uniform”):网格类型,有“auto non-uniform”、“custom non-uniform”、"uniform"三种可选,一般默认为“auto non-uniform”,若不需更改网格类型,本条代码可不写。这里使用的是默认的自动精度
set(“Mesh accuracy”,3):自动网格精度,在“auto non-uniform”模式下设置。有1~8一共8个等级,精度随着数字的增大而提高,一般默认为2,不建议太高,容易给CPU带来很大的负担。这里设置为3,属于高精度仿真

二、自定义网格

除了使用系统自动计算的网格,也可以使用自定义精度的网格,代码如下:

addfdtd;
set("dimension",2);#三维仿真区域
set("x",0);
set("y",0);
set("z min",-10*nm);
set("z max",2*um);
set("x span",0.2*um);
set("y span",0.4*um);
set("x min bc","periodic");#设置x方向周期边界条件
set("y min bc","periodic");#设置y方向周期边界条件
set("Mesh type","uniform");#仿真网格为自定义精度
setnamed("FDTD","dx",20*nm);#x方向网格精度为20*nm
setnamed("FDTD","dy",20*nm);#y方向网格精度为20*nm
setnamed("FDTD","dz",10*nm);#z方向网格精度为10*nm

这里设置的“dx”、“dy”、“dz”参数即为自定义的网格精度(最小网格大小)。

你可能感兴趣的:(FDTD,matlab)