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

您所在的位置:网站首页 适合写脚本的语言 FDTD快速入门之Lumerical脚本语言Pickup(一)序言

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

2024-06-04 08:56| 来源: 网络整理| 查看: 265

目录 前言一个简单的仿真模型参考链接

前言

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论坛上找到。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3