一、参考FDTD官网transmission命令介绍:
https://optics.ansys.com/hc/en-us/articles/360034406254-stackrt-Script-command
1、使用分析转移矩阵法来进行一个平面波通过多层叠层结构的反射和透射。这个函数返回S和P偏振光的透过率和反射率(Ts, Tp,Rs,Rp)和透射和反射系数(ts, tp, rs, rp)。所有的结果作为频率和入射角(可选)的函数返回到一个数据集中。
备注:从2022 R1.2开始,stackrt脚本命令通过指定九个二级折射率指数张量来支持全部各项异性和色散材料的计算。对于各项异性材料,反射光的偏振态随着入射光偏振态变化而变化。后缀sp和ps表明偏振态如何在返回的功率和系数中的变化。sp代表s偏振态入射光和p偏振态反射光/透过光。
为了计算堆叠结构中的场,请查看stackfield命令(链接https://optics.ansys.com/hc/en-us/articles/360034406294-stackfield)
二、语法
语法 | 描述 |
RT=stackrt(n,d,f) | n:每层结构的折射率。n的尺寸可以是:
备注:只支持在z轴(nx=ny≠nz)的双折射。这个命令将会报错,除非nx=ny。
备注:我们将二阶折射率张量展平成一个矩阵。张量中第三个维度表示位置。比如,位置索引“1”“2”“3”“4”和“5”相当于n11,n21,n31,n12和n22。 d: 每层的厚度。尺寸是N层。 f:频率矢量,长度为N额频率。 |
RT=stackrt(n,d,f,theta); | theta:角度矢量,单位°。可选项。 |
关于复数系数的更多信息可以查看Stack optical solver overview (链接https://optics.ansys.com/hc/en-us/articles/360034914653)
附:色散是指材料的折射率随入射光频率的改变而改变的性质,可分为正常色散和反常色散。正常色散是指随着光频率升高介质折射率增大的色散;反之,反常色散是指随着光频率升高介质折射率降低的色散。
三、示例
(1)示例1:五层各项同性材料的叠层结构
计算5层叠层结构的反射,透射和场分布
代码如下:
f = linspace(c/400e-9, c/1000e-9,100); # frequency vector,频率矢量,波长对应范围400-1000nm; theta = 0:1:45; # angle vector,角度矢量,0-45,step 1°; d = [0; 200e-9; 300e-9; 400e-9; 0]; # air/SiO2/Si/SiO2/air,叠层结构空气/SiO2/Si/SiO2/空气的厚度0/200/300/400/0 nm; nf = length(f); #频率数量; nd = length(d);#厚度数量; # refractive index of each layer (non-dispersive),每层折射率(非色散); n1 = [1; 1.5; 2.5; 1.5; 1]; # refractive index of each layer (dispersive),每层折射率(色散); n2 = matrix(nd,nf);#定义一个nd*nf阶矩阵; n2(1,1:nf) = 1; # air,定义空气层的折射率; n2(2,1:nf) = getfdtdindex("SiO2 (Glass) - Palik",f,min(f),max(f));#采用getfdtdindex函数来获取数据库中名称为“SiO2 (Glass)-Palik”在指定频率f下的折射率,要拟合的频率范围为min(f)~max(f),即上述定义的频率范围; n2(3,1:nf) = getfdtdindex("Si (Silicon) - Palik",f,min(f),max(f));#获取数据库中名称为“Si (Siilcon)-Palik”在指定频率f下的折射率; n2(4,1:nf) = getfdtdindex("SiO2 (Glass) - Palik",f,min(f),max(f)); n2(5,1:nf) = 1; # air RT1 = stackrt(n1,d,f); # non-dispersive index data, and theta=0,通过stackrt函数计算无色散下(单一折射率)和入射角度为0°下的透过率和反射率; RT2 = stackrt(n2,d,f,theta); # dispersive data index data, and theta from 0 to 45 deg,通过stackrt函数计算色散和入射角度0-45°下的透过率和反射率; visualize(RT1);#在可视化工具中将RT1数据库中的数据进行画图显示; visualize(RT2); plot(RT1.lambda*1e6,RT1.Rp,RT1.Rs,RT1.Tp,RT1.Ts,"wavelength (um)","Power","non-disperisive, theta=0");#以RT1数据集中波长为x轴,数据集RT1中Rp,Rs,Tp,Ts为y轴进行作图; legend("Rp","Rs","Tp","Ts");#对曲线进行命名Rp,Rs,Tp,Ts image(RT2.lambda*1e6,RT2.theta,RT2.Rp,"wavelength (um)","theta (deg)","Rp, dispersive example");#进行二维曲面图绘制,RT2数据集中波长为x轴,RT2数据集中theta角度为y轴,RT2数据集中Rp为z轴进行绘图,图表名称为“Rp, dispersive example”
(2)示例2:空气中的双折射层
代码如下:
N_layers = 3;#三层 Nfreqs = 100;#100个频率 n = matrix(N_layers, Nfreqs, 3);#定义3*100*3阶矩阵n; n(1, :, :) = 1; # air,第一层空气层; n(2, :, 1) = 2.1; # nx,第二层双折射材料层,其中nx=ny≠nz; n(2, :, 2) = 2.1; # ny n(2, :, 3) = 2.5; # nz n(3, :, :) = 1; # air,第三层空气层 d = [0; 1e-6; 0]; # air/ birefringent slab / air,三层结构的厚度; f = linspace(c/1e-6, c/1.5e-6, Nfreqs);#折射率取值范围,对应波长为1000~1500nm; theta = 0:1:45; RT = stackrt(n,d,f,theta); visualize(RT);
(3)示例三:空气中完全各项异性和色散的膜层
下载并运行附加的脚本stackrt_anisotropic.lsf.
备注:我们使用脚本文件中32-46行所示的欧拉角定义来旋转对角化的介电常数矩阵,然后到处折射率矩阵。