FDTD快速入门之Lumerical脚本语言Pickup(三)结构(Structure)搭建


前言

这一篇我们来介绍一下如何搭建一个物体的仿真模型(Structure)。FDTD solution中的仿真模型包含两个核心部分:材料(material)和几何结构(structure)。通常用包含吸收参数的材料的复折射率控制material属性,而用3D模型参数控制structure属性。下面介绍几种常用的structure。


一、(长方体)矩形(Rectangle)

一个典型的矩形结构可以由如下代码生成:

addrect;
set("name","rect");#名称                   
set("material","SiO2 (Glass) - Palik");#材料
set("render type","wireframe");   # 渲染方式:线框,减小显卡压力
set("x",0);#设置x中心点坐标   
set("y",0);#设置y中心点坐标
set("x span",1e-6);#设置x方向宽度
set("y span",1e-6);#设置y方向宽度
set("z max",1e-7);#设置z方向最大值
set("z min",-1e-6);#设置z方向最小值
set("first axis","x");#设置第一转轴
set("rotation 1",45);#设置第一旋转角

效果如下:
在这里插入图片描述

下面详细介绍每段代码的用途:
addrect:随机生成一个一定大小,材料为一定折射率介电材料的矩形模型。
set(“name”,“rect”):名称。设定矩形的名称为“rect”
set(“material”,“SiO2 (Glass) - Palik”):材料——这里的材料必须是材料库中存在的,且必须按照材料库中原有的名字命名。设定矩形的材料为二氧化硅
set(“render type”,“wireframe”):渲染方式——有detailed和wireframe两种,系统默认为detailed,如有需要,可改为wireframe。设定矩形的渲染方式为线框
set(“x”,“0”):中心坐标(x轴),类似地还可设置y和z的中心坐标。设定矩形的中心坐标(x轴)为0
set(“x span”,“1e-6”):x轴向宽度(或范围),类似地还可设置y和z的轴向宽度。设定矩形的x轴向宽度为1e-6,即1微米
set(“z max”,“1e-7”):z方向最大值,类似地还有z min、x max、x min、y max、y min。设定矩形的z方向最大为1e-7,即100纳米
set(“first axis”,“x”):第一转轴。设定矩形的第一转轴(first axis)为x轴
set(“rotation 1”,45):绕第一转轴的旋转角。设定矩形绕x轴的转角为45°


二、多棱柱体(Ploygon)

1.多棱柱(Ploygon)

一个典型的多边形结构可以由如下代码生成:

um=1e-6;
nm=1e-9;
vtx=[2,0;1,1;-1,1;
     -2,0;-1,-1;1,-1]*um;  #向量组
addpoly;
set("name","poly");#名称
set("index",1.5);#折射率
set("vertices",vtx);#控制向量组
set("x",0.5*um);#中心坐标
set("y",1*um);
set("z",-0.5*um);
set("z span",0.4*um);#z方向宽度

效果如下:
在这里插入图片描述

与矩形相同的部分我们不作过多介绍,这里只介绍和矩形不同的部分:
addpoly:添加一个参数随机的多边形结构。
set(“index”,1.5):折射率。多边形材料为介电材料,折射率为1.5
set(“vertices”,vtx):向量组。设置多边形的xy面二维形状,由传入的向量组vtx中的参数控制

关于vtx中的参数解释:
vtx是一个n*2的矩阵,每一行都是多边形上一个顶点的相对坐标,以设置的"x",“y”,"z"参数作为相对坐标原点,按在矩阵中的顺序顺次连接成多边形。

2.三棱柱(triangle)

一个典型的三角形柱体结构可以由如下代码生成:

um=1e-6;
nm=1e-9;
vtx=[3,0;0,4;-2,0]*um;  #向量组
addtriangle;
set("name","triangle");#名称
set("index",1.5);#折射率
set("vertices",vtx);#控制向量组
set("x",0.5*um);#中心坐标
set("y",1*um);
set("z",-0.5*um);
set("z span",0.4*um);#z方向宽度

效果如下:
在这里插入图片描述
多边形生成代码和三角形生成代码基本一致,这里不作过多介绍。


三、(椭)圆柱体(Circle)

一个典型的(椭)圆柱体结构可以由如下代码生成:

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

addcircle;
set("name","circle");
set("material","Au (Gold) - Palik");
set("x",0);
set("y",0);
set("z",0);
set("z span",400*nm);
set("radius",600*nm);#半径/x轴半径
set("make ellipsoid",1);#生成椭圆
set("radius 2",800*nm);#y轴半径

效果如下:
在这里插入图片描述
同样的,这里只对和矩形结构生成代码不同的部分作一些说明:
set(“radius”,600*nm):半径/x轴半径。若是圆柱体,radius为圆的半径;若是椭圆柱体,radius为椭圆在x轴方向的半轴长(可能是长半轴或短半轴,由radius和radius的相对大小决定)。这里表示椭圆短半轴为600nm
set(“make ellipsoid”,1):生成椭圆。“make ellipsoid”可取两个值:0和1。其中,0表示生成的为圆柱体,1表示生成椭圆柱体(也可以认为1是enable椭圆参数radius 2,为0则radius 2被disable,只生成半径为radius的圆柱)。这里参数为1表示生成一个椭圆柱体。
set(“radius 2”,800*nm):y轴半径,椭圆的第二半轴长。生成一个第二半轴长为800*nm的椭圆柱体。

四、(椭)球体(Sphere)

一个典型的(椭)球可以由如下代码生成:

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

addsphere;
set("name","sphere");
set("index",1.5);
set("x",0);
set("y",0);
set("z",0);
set("radius",200*nm);#半径/x轴半径
set("make ellipsoid",1);#生成椭球
set("radius 2",400*nm);#y轴半径
set("radius 3",2*um);#z轴半径

效果如下:
在这里插入图片描述
球体的代码和椭圆柱的代码十分相似,区别仅在于多了一个第三半径(radius 3)(事实上是控制了z轴方向的大小),这里不作过多说明。

五、圆环(体)(Ring)

一个典型的圆环柱体可以由如下代码生成:

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

addring;
set("name","ring");
set("index",1.5);
set("x",0);
set("y",0);
set("z",0);
set("z span",600*nm);
set("outer radius",400*nm);#外圆半径
set("inner radius",200*nm);#内圆半径
set("theta start",0);#起始角
set("theta stop",135);#终止角

效果如下:
在这里插入图片描述
柱体默认以xy平面作底面,z轴方向宽度作高。关于环柱体参数控制的详细说明可参考注释部分

六、角椎体(Pyramid)

一个典型的角锥体可以由如下代码生成:

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

addpyramid;
set("name","pyramid");
set("index",1.5);
set("x",0);
set("x span bottom",600*nm);#梯形下底长(x轴向)
set("x span top",100*nm);#梯形上底长(x轴向)
set("y",0);
set("y span bottom",400*nm);#梯形下底长(y轴向)
set("y span top",200*nm);#梯形上底长(y轴向)
set("z",0);
set("z span",600*nm);

效果如下:
在这里插入图片描述
其中参数"x span bottom"、“y span bottom”、“x span top”、"y span top"分别控制该角锥体下、上底面的矩形大小。

以下是一个简单的Lumerical脚本,可用于计算波导光限制因子: ``` # 设置仿真参数 central_wavelength = 1550e-9 # 中心波长 n_eff = 2.5 # 有效折射率 wg_width = 500e-9 # 波导宽度 wg_height = 220e-9 # 波导高度 # 定义波导 wg = fdtd.addrect() wg['name'] = 'waveguide' wg['x span'] = wg_width wg['y span'] = wg_height wg['z span'] = fdtd.getglobal('simulation time') wg['x'] = -wg_width / 2 wg['y'] = 0 wg['z'] = 0 wg['material'] = 'silicon' # 定义光源 source = fdtd.addplane() source['name'] = 'source' source['x span'] = fdtd.getglobal('simulation region x span') source['y span'] = fdtd.getglobal('simulation region y span') source['z'] = 0 source['wavelength start'] = central_wavelength source['wavelength stop'] = central_wavelength source['polarization angle'] = 0 source['angle theta'] = 0 source['angle phi'] = 0 # 定义探测器 detector = fdtd.addpower() detector['name'] = 'detector' detector['monitor type'] = 'linear x' detector['x span'] = fdtd.getglobal('simulation region x span') detector['y'] = 0 detector['z'] = fdtd.getglobal('simulation time') detector['wavelength start'] = central_wavelength detector['wavelength stop'] = central_wavelength # 运行仿真 fdtd.run() # 计算波导光限制因子 F = detector.getpower() / source.getpower() * (central_wavelength / (2 * n_eff * wg_width)) print('波导光限制因子:', F) ``` 该脚本创建了一个矩形波导、一个光源和一个探测器,并运行了FDTD仿真。在仿真结束后,脚本从探测器和光源的监视器数据中计算波导光限制因子,并输出结果。
评论 120
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ArcSight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值