FDTD快速入门之Lumerical脚本语言Pickup(一)序言


前言

FDTD作为一款功能强大的光学仿真软件,已经广泛应用于纳米光学以及超材料仿真领域。但是就软件本身来说,完全上手还需要一定的时间。并且,鉴于很多微纳光学领域的仿真更适合用脚本完成,所以我写了这个脚本语言系列文章,帮助需要的朋友快速上手FDTD。
这里需要注意的是,虽然本系列文章的目的是帮助需要的朋友快速入门FDTD,但是我们的侧重点是用脚本语言实现仿真流程,并不涉及FDTD软件窗口功能的介绍,所以阅读本系列文章的读者最好具备一定的预备知识。FDTD相关的介绍视频可以在百度上很容易地搜到,因此本文文末不再列出。

一个简单的仿真模型

首先应说明一点,作为Lumerical的主流产品之一,FDTD采用的其实是一种叫Lumerical脚本语言(Lumerical Script Language)的命令语言。这种语言和matlab很相似,很多matlab中的语法都可以直接在Lumerical脚本语言中实现。Lumerical脚本保存在一个扩展名为.lsf的文件中,脚本编辑器在下图中的右边栏。
在这里插入图片描述
下面从一个简单的例子开始,介绍FDTD仿真脚本的几个主要组成部分。首先上一个实例:

switchtolayout;

selectall;delete;

nm=1e-9;#纳米单位
um=1e-6;#微米单位

#添加矩形
addrect;
set("name","SiO2");#名称为SiO2                   
set("material","SiO2 (Glass) - Palik");#材料为二氧化硅(玻璃)
set("x",0);#设置x中心点坐标   
set("y",0);#设置y中心点坐标
set("x span",1*um);#设置x方向宽度
set("y span",1*um);#设置y方向宽度
set("z max",100*nm);#设置z方向最大值
set("z min",-1*um);#设置z方向最小值

#添加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.22*um);
set("x min bc","periodic");#设置x方向周期边界条件
set("y min bc","periodic");#设置y方向周期边界条件
set("Mesh type","uniform");#仿真网格为自定义方式
Mesh_size=10*nm;#网格精度10nm
setnamed("FDTD","dx",Mesh_size);
setnamed("FDTD","dy",Mesh_size);

#添加平面波
addplane;
set("injection axis","z");#入射轴与z轴平行
set("direction","backward");#朝向后方入射
set("x",0);
set("x span",0.4*um);
set("y",0);
set("y span",0.4*um);
set("z",1*um);
set("wavelength start",1.5*um);#波长(最小)
set("wavelength stop",1.5*um);#波长(最大)

#添加点监视器
addprofile;
set("name","R");
set("monitor type",1);#点监视器
set("x",0);
set("y",0);
set("z",1.5*um);

#添加时间监视器
addtime;
set("name","time");

run;#运行仿真

#获取结果并分析
select("SiO2");
surface_z=get("z max");
select("source");
source_z=get("z");
select("R");
monitor_z=get("z");
ex=getdata("R","Ex");
R_z=getdata("R","z");
f=getdata("R","f");
f=pinch(f);
lambda=c/f*1e6;
phase=pinch(angle(ex));
phai=phase-2*pi*(source_z+monitor_z-2*surface_z)*f/c;
phai=mod(phai*180/pi,360);
plot(lambda,phai,"lambda um","phase");

这是一段用于验证光从光疏介质入射到光密介质时,反射波中存在半波损失的完整仿真代码。它包含了以下几个部分:

  • 仿真结构(structure)
  • 仿真区域(FDTD)
  • 光源(source)
  • 监视器(monitor)
  • 仿真结果分析(Analysis)

大致的仿真结果如下:
图:仿真模型
图:仿真得到的相位突变值

仿真代码中的关键部分(除了分析模块)我都做了一定的注释,大家可以根据自己的需要结合注释修改代码。关于以上几个仿真模块详细的编写与使用,我们将在后续的文章中介绍。

参考链接

由于本系列文章主要作为入门级的一些介绍,更详细的脚本命令和相关设置还请参考以下链接:
模型:Simulation objects.
脚本命令:Lumerical scripting language - By category.
PS:其他技术相关的具体问题也可在Lumerical官网以及kx论坛上找到。

猜你喜欢

转载自blog.csdn.net/weixin_44224652/article/details/112677982