本文将要介绍的是使用FDTD仿真软件仿真透射式聚焦超透镜的流程。
一、本文的主要工作
1.1 复现一种几何(PB)相位超透镜
参考文献:基于PB相位的等离子体超透镜设计-夏习成,姚赞。文中采用了在金属膜上刻蚀矩形孔的方法形成一种PB相位超原子。见下图。
图 1
根据PB相位理论,使用圆偏振入射,出射光中有一部分将会变成相反的手性,并且获得和旋转角度成2倍关系的附加相位。
图 2
1.2 复现一种全电介质几何相位超透镜
1.1中提到的超透镜在可见光波段聚焦效率不高,因而本文又复现了一种全电介质材料超透镜。
参考文献:Metalenses at visible wavelengths: Diffraction-limited focusing and subwavelength resolution imaging-Mohammadreza Khorasaninejad, Wei Ting Chen, Robert C. Devlin, Jaewon Oh, Alexander Y. Zhu, Federico Capasso
(上面这篇文章来自Capasso课题组,他们在超透镜领域做的工作很好,广义斯涅尔定律就是他们提出来的)
![]() | ![]() |
偏振转化率随波长的变化;左边是原文仿真结果,右边是本文复现结果。 |
图 3
1.3 一种简单的传播相位超透镜设计及优化
几何相位(PB相位)要求入射光为圆偏振光。为了解除这种限制,本文利用90°旋转对称的超原子构成偏振不敏感超透镜进行仿真。
图 4
二、超原子设计及优化
2.1 结构生成
首先构建图1中的超原子,原文中给出的参数为:金膜厚度为40nm;刻蚀孔长215nm,宽60nm。文中没有给出仿真光源的位置以及基底的厚度。一般来说,光源可以距离结构近一些以减小仿真空间,但也要留一定空间方便后续添加光阑、监视器等。
可以采用图形界面交互或者脚本控制来构建结构。本文先用脚本生成基本结构,再用图形界面交互的方法调整。脚本可以写在右边栏Script File Editor(脚本编辑器)中,也可以写在左边物品栏的结构组中,注意二者会相互冲突。
下面是一段使用脚本编辑器构建图1中超原子的代码。这段代码包含了基本结构、由两个正交的线偏振光构成的圆偏振光、仿真区域与仿真边界等。此脚本缺少监视器,可以通过图形界面交互的方式给出。(监视器在下面的分析组提及)
nm=1e-09;
um=1e-06;
deleteall;
hight=0.04*um;#金膜及刻蚀孔厚度
lambda=0.6e-6;#光源波长
p=0.35*um;#周期
#基底
addrect;
set("name","substrate");
set("x",0);set("x span",0.4*um);
set("y",0);set("y span",0.4*um);
set("z max",0);set("z min",-0.1*um);
set("material","SiO2 (Glass) - Palik");
#金薄膜
addrect;
set("name","gold-layer");
set("x",0);set("x span",0.4*um);
set("y",0);set("y span",0.4*um);
set("z max",hight);set("z min",0);
set("material","Au (Gold) - Palik");
#添加刻蚀孔
addrect;
set("name","etch");
set("x",0);set("x span",0.215*um);
set("y",0);set("y span",0.06*um);
set("z max",hight);set("z min",0);
set("material","etch");
#添加光源
addplane;
set("name","Source_x");
set("injection axis","z");
set("direction","Backward");
set("plane wave type",1);
set("x",0);set("x span",0.4*um);
set("y",0);set("y span",0.4*um);
set("z",2*hight);
set("wavelength start",lambda);
set("wavelength stop",lambda);
addplane;
set("name","Source_y");
set("injection axis","z");
set("direction","Backward");
set("plane wave type",1);
set("polarization angle",90);set("phase",90);
set("x",0);set("x span",0.4*um);
set("y",0);set("y span",0.4*um);
set("z",2*hight);
set("wavelength start",lambda);
set("wavelength stop",lambda);
#仿真区域
addfdtd;
set("dimension",2); # 1 = 2D, 2 = 3D
set("x",0);
set("x span",p);
set("y",0);
set("y span",p);
set("z max",0.1*um);
set("z min",-0.8*um);
set("mesh accuracy",2);
set("x min bc",3); #这里用序号而不是Periodic的名称
set("y min bc",3);
set("z min bc",1);
set("z max bc",1);
#刻蚀孔处划分更细致的网格
addmesh;
set("based on a structure",1);
set("structure","etch");
#规定旋转主轴
setnamed("etch","first axis","z");
2.2 参数扫描
我们关心的超原子的两个参数:附加相位和透射率。对于PB相位的超原子来说,后者(透射率)即偏振转化率。偏振转化率即和入射光手性相反的那部分出射光的功率和入射光功率之比。
PB相位超原子的作用类似于半波片,可以用琼斯矩阵推导附加相位的变化。推导过程参考文献《长波红外宽带消色差超透镜研究》-邬灏。结果见下式,理论上附加相位是超原子旋转角度的两倍。
至于偏振转化率,它是波印廷矢量的面积分与入射光功率之比:
下面介绍参数扫描的具体流程。
扫参有两项:附加相位随旋转角度的变化;偏振转化率随入射光波长的变化。
1. 分析组及监视器
相位监视器要使用点监视器,偏振转化率监视器则是面监视器。
图5 分析组
添加监视器后右键可以改变位置,将监视器移到分析组下面看到它自动缩进即可。
图6 相位监视器和透射率(偏振转化率监视器)放在分析组内
附加图1 相位监视器参考参数
附加图2 透过率监视器参考参数
2. 定义扫参变量
需要的扫参变量分别为波长lambda和刻蚀孔旋转主轴rotation1的旋转角度。rotation1在结构构建脚本中已经设定为刻蚀孔etch的旋转主轴,不需要额外定义。以下是定义变量lambda的流程:
依次点击model>Edit object:
依次点击setup>variables>add:
然后切换到script:
3. 定义扫参结果
依次点击anlysis group>edit object:
依次点击analysis>script,处理运行工程文件后产生的数据。
Ex=getdata("phase","Ex");
Ey=getdata("phase","Ey");
E_R=Ex+1i*Ey;
E_L=Ex-1i*Ey;
Phase1=angle(E_R);
Phase2=angle(E_L);#phase1和phase2分别是两种手性出射光的相位
T_1=getresult("T1","T");
T_2=-T_1.T;
f=getdata("T1","f");
x = getdata("T1","x");
y = getdata("T1","y");
Ex = getdata("T1","Ex");
Ey = getdata("T1","Ey");
Hx = getdata("T1","Hx");
Hy = getdata("T1","Hy");
E_r = (Ex - 1i*Ey)/sqrt(2);
E_l = (Ex + 1i*Ey)/sqrt(2);
H_r = (-1i*Hx +Hy)/sqrt(2);
H_l = (1i*Hx + Hy)/sqrt(2);
# 计算波印廷矢量的z分量
Pz_r = E_r*conj(H_l); #复共轭
Pz_l = E_l*conj(H_r);
# 积分
Tr_r=-integrate(real(Pz_r)/2,1:2,x,y)/sourcepower(f); # 在x,y面积分
Tr_l=-integrate(real(Pz_l)/2,1:2,x,y)/sourcepower(f);
上述代码得到右旋圆偏振出射光的相位phase1和偏振转化率Tr_l以及左旋圆偏振出射光的相位phase2和偏振转化率Tr_r。然后点击variables,在results中添加扫参结果量。
4. 扫参进程
扫参可以在右边栏的optimization and sweeps中设置,它一般和脚本在同一个窗口,如果没有可以在view>windows中打开。点击下图框中按钮添加扫参进程。下面两个是对相位和偏振转化率(PCR)扫参的项目。
首先示范相位扫参进程设置方法:
新建一个扫参进程,右击,选择Edit。
弹出窗口如下。主要有三部分:命名、参数和结果。
命名随意设置,方便区分记忆即可。
Parameters(参数)这一部分,Type可以选择一段范围(Ranges),这样扫参的数据点将根据后面设定的起始值和点的数目(Number of points)均匀划分;或者Type选择数值(Values),那么具体的扫参数据点需要用户给出。方便起见这里采用前者。
点击右侧的add,见下图:
附加相位由结构的旋转引起,这里的参数应是刻蚀孔的旋转角度。
找到parameter>model>objects>etch,选中rotation1(在结构构建的脚本中已将rotation1设定为z轴的旋转角度)。
起始数值分别为0和360。可以给参数命名。设置完成界面如下:
下面设置扫参结果(Results)。在model>objects>analysis group>results中找到phase1/phase2,它是前面在分析组中定义的左旋/右旋圆偏振光相位。
设置完成界面如下:
运行扫参进程,注意要点击窗口内的运行按钮,不要点击顶部栏的运行按钮。
运行完成后点击这个运行进程,默认在左下栏出现扫参结果。下图表明仿真结果符合PB相位理论。
偏振转化率扫参进程的设置与相位扫参差别不大.
下图是本文构建的超原子的偏振转化率(左)和原文(右)的对比.
三、超透镜仿真及优化
3.1 构建超透镜
透射式聚焦超透镜将平面波前调制成球面波前。
其相位分布公式为:
假设超表面结构在一个二维平面上,将平面网格化。 根据PB相位理论,得到每个格点所需的旋转角度。
使用Matlab计算得到“旋转角度-平面坐标”数据集合(当然也可以在lumerical FDTD中计算,不过lumerical的语法和matlab不太一样,需要另写脚本)。
%单位使用微米
clc;clear;
f=4;
D=10;
p=0.35;
lambda=0.7;
n=floor(D/p);
k=1;
for i=1:n
for j=1:n
x=-(n*p/2-p/2)+p*(j-1);
y=-(n*p/2-p/2)+p*(i-1);
s=sqrt(x^2+y^2);
if s<=D/2
Po(k,1)=x;Po(k,2)=y;
Po(k,3)=180*(f-sqrt(x^2+y^2+f^2))/lambda;
k=k+1;
end
end
end
[Po(k,1),Po(k,2)]=size(Po);
Po;
save("P70.mat","Po");
上面这段代码定义了设计透镜的焦距f、直径D、网格周期p。最后需要生成一个.mat文件,该文件是旋转角度与坐标点对应的数据表。
selectall;
delete;
nm=1e-09;
um=1e-06;
hight=0.04*um;#金膜及刻蚀孔厚度
lambda=0.7e-6;#光源波长
L=0.215*um;
W=0.06*um;#刻蚀孔的长宽
p=0.35*um;#周期
D=10*um;#直径
matlabload("P70");
#基底
addrect;
set("name","substrate");
set("x",0);set("x span",10.5*um);
set("y",0);set("y span",10.5*um);
set("z max",0);set("z min",-0.1*um);
set("material","SiO2 (Glass) - Palik");
#金薄膜
addrect;
set("name","gold-layer");
set("x",0);set("x span",10.5*um);
set("y",0);set("y span",10.5*um);
set("z max",hight);set("z min",0);
set("material","Au (Gold) - Palik");
#添加刻蚀孔
addgroup;
set("name","structure");
m=640;#微结构数量
for (i=1:m){
addrect;#添加矩阵
name="etch"+num2str(i);
set("name",name);#设置物体的名称
set("material","etch");#设置材料
set("render type","wireframe");#默认是细节渲染,也就是detailed
set("x",Po(i,1)*um);#设置x坐标,p矩阵第一列,单位微米
set("y",Po(i,2)*um);#设置y坐标,p矩阵第二列,单位微米
set("x span",L);
set("y span",W);
set("z min",0);
set("z max",hight);#尺寸设置
set("first axis","z");
set("rotation 1",Po(i,3));#旋转角设置
addtogroup("structure");
}
#添加光源
addplane;
set("name","Source_x");
set("injection axis","z");
set("direction","Backward");
set("plane wave type",1);
set("x",0);set("x span",11*um);
set("y",0);set("y span",11*um);
set("z",2*hight);
set("wavelength start",lambda);
set("wavelength stop",lambda);
addplane;
set("name","Source_y");
set("injection axis","z");
set("direction","Backward");
set("plane wave type",1);
set("polarization angle",90);set("phase",90);
set("x",0);set("x span",11*um);
set("y",0);set("y span",11*um);
set("z",2*hight);
set("wavelength start",lambda);
set("wavelength stop",lambda);
#在光源和结构之间添加光阑
x_span = D+0.5*um; # x span of structure
y_span = D+0.5*um; # y span of structure
R = D/2; # 通光孔半径
x = R*cos(linspace(0,2*pi,80));
y = R*sin(linspace(0,2*pi,80));
V = [x,y;
x_span/2,0;
x_span/2,-y_span/2;
-x_span/2,-y_span/2;
-x_span/2, y_span/2;
x_span/2, y_span/2;
x_span/2,0];
add2dpoly;
set("name","aperture");
set("vertices",V);
set("x",0);set("y",0);set("z",-0.05*um);
set("material","PEC (Perfect Electrical Conductor)");
#仿真区域
addfdtd;
set("dimension",2); #1 = 2D, 2 = 3D
set("x",0);
set("x span",10.25*um);
set("y",0);
set("y span",10.25*um);
set("z max",0.1*um);
set("z min",-5*um);
set("mesh accuracy",2);
set("x min bc",1); #这里用序号而不是Periodic的名称
set("y min bc",1);#1是PML边界;3是周期性边界
set("z min bc",1);
set("z max bc",1);
addpower;
set("x",0);set("x span",0.4*um);
set("y",0);set("y span",0.4*um);
set("z",-0.05*um);
set("name","T1");
addpower;
set("monitor type",5);
set("y",0);set("y span",10*um);
set("z max",0);set("z min",-5*um);
set("x",0);
set("name","T2");
上面是构建超透镜结构的代码,新建一个空表的脚本新进去即可。 此脚本是构建整个透镜的脚本,与前面所述的与超原子有关的脚本不相干。
此脚本包括光源(波长700纳米)、基底、基底上的超原子、仿真区域、光阑(因仿真区域为长方体,所以要加入一片圆形的通光孔)、监视器等。此脚本里面可以暂时不用添加监视器,待明确了要获取的数据后再手动添加也好。
上图中的绿色区域即脚本中所指的“PEC” ,PEC是完美导体,起到屏蔽电磁场的作用。
3.2 超透镜仿真
如果仿真区域包含光源,超透镜结构以及焦点所在的空间,这种方式可以称为直接仿真;如果仿真区域不包含焦点在内则称为间接仿真.间接仿真方法留在后面讨论,下面先介绍直接仿真。
1. 直接仿真
光源沿着z轴的负方向入射,此时位于YZ平面(或者是XZ平面)上监视器能够记录焦点一侧空间中的光强分布(实际是电场强度的平方)。
clc;
clear;
E=getresult("T2","E");
x=getdata("T2","x");
y=getdata("T2","y");
z=getdata("T2","z");
f=getdata("T2","f");
E1=getattribute(E);
E2=E.E2;#|E|^2,前面的E2只是一个名称,是任意的,后面的E2是平方的意思,是固定用法
E3 = E.E; # get all components in a single matrix. An extra dimension of length 3 will be added to the matrix, for each vector component.
E33=abs(E.Ex)^2+abs(E.Ey)^2+abs(E.Ez)^2;
E4=pinch(E2,4);
E4=pinch(E4,1);
E4=pinch(E4,1,length(y)/2);
plot(-z*1e6,E4,"z(um)","E^2");legend("z_line_plot");
po=findpeaks(E4);
zmax=-z(po)*1e6;
E5=pinch(E2,1);
E5=pinch(E5,3);#择去x和lambda
E5=pinch(E5,2,po);
plot(y*1e6,E5,"y(um)","E^2");legend("focal_plane_plot");
#计算半高宽
po2=findpeaks(E5);
top=E5(po2);
E5=-abs(E5-top/2);
plot(y*1e6,E5);
po3=findpeaks(E5,2);
FWHM=abs(y(po3(2))-y(po3(1)))*1e6;
如果取z轴上光强最大处为实际焦点的位置, 那么实际焦距3.8微米与设计焦距4微米有一定差距。所以如果要获得焦平面的光强分布,还需要在实际焦点位置设置监视器进行二次仿真。
直接仿真由于仿真区域大而占用了较大的内存,所需时间较多。二次仿真又使仿真时间增长一倍。而间接仿真可以有效地缩减所需内存和所用时间。
2. 间接仿真
根据表面等效原理:如果一个给定的电磁结构,例如共振天线或者散射体,可以由一个具有一定的电流和磁流密度分布的等效封闭表面来代替。可以证明位于表面内的源向表面外辐射的场可以由表面上的场分量精确地确定。由于Maxwell方程是线性的,表面外的场可以通过计算表面上每个区域的远场投影,然后求和得到。
间接仿真不仅能够节约仿真时间,还能在不重复仿真的情况下做任意空间位置的投影。在实际仿真的过程中,本文使用近场平面的电磁场信息做远场投影,这就要求该平面据结构足够近以接收更多的散射光。
下面是间接仿真相关的一个脚本案例。其中“full_lens.fsp”是在直接仿真一节中构建的超透镜工程文件。在间接仿真的工程里面,不再需要在特定位置放置监视器(T1/T2),而需要在距离超表面结构不远处放置一个近场监视器T。下面这段代码主要是对函数farfieldexact3d的应用。
um=1e-6;
load("full_lens.fsp");
switchtolayout;
select("T1");
delete;
select("T2");
delete;
select("FDTD");
set("z min",-0.5*um);
addpower;
set("name","T");
set("x",0);set("x span",11*um);
set("y",0);set("y span",11*um);
set("z",-0.4*um);#基底的最底端是-0.1微米
#save("full_lens_farfield.fsp");
#load("full_lens_farfield.fsp");
if (haveresult("T")==false)
{
run;
}
#轴向方向上的远场投影
z=linspace(-0.1*um,-5*um,200);
x=0;y=0;
E_far=farfieldexact3d("T",x,y,z,{"field":"E and H"});
E2=E_far.E2;
E2=pinch(E2,4);
E2=pinch(E2);
plot(-z*1e6,E2,"z(um)","|E|^2");legend("E-z");
pos=findpeaks(E2);
z_f=z(pos);
#焦平面上的远场投影
x=linspace(-4*um,4*um,150);
y=linspace(-4*um,4*um,150);
E_far_focal=farfieldexact3d("T",x,y,z_f,{"field":"E and H"});
E3=E_far_focal.E2;
E3=pinch(E3,4);
E3=pinch(E3);
#visualize("E3");
image(x,y,E3,"x(um)","y(um)","|E|^2");
#电场强度分布曲线
E4=0.5*(pinch(E3,2,length(y)/2)+pinch(E3,2,length(y)/2+1));
plot(x*1e6,E4,"x(um)","|E|^2");legend("E-x");
E6=E4;
x6=x;
#计算半高宽
po2=findpeaks(E4);
top=E4(po2);
E4=-abs(E4-top/2);
#plot(y*1e6,E4);
po3=findpeaks(E4,2);
FWHM=abs(x(po3(2))-x(po3(1)))*1e6;
#YZ平面电场强度分布
y=linspace(-5*um,5*um,150);
z=-linspace(0*um,5*um,150);
x=0;
E_far_YZ=farfieldexact3d("T",x,y,z,{"field":"E and H"});
E5=E_far_YZ.E2;
E5=pinch(E5);
#plot(y,z,E5,"y(um)","z(um)","|E|^2");
image(y,z,E5,"y(um)","z(um)","|E|^2");
下面对比直接仿真和间接仿真的结果是否一致。
直接仿真和间接仿真的对比。(a)(b)分别是直接仿真和间接仿真
在YZ平面上的光强分布;(c)沿Z轴的光强曲线
四、聚焦效率半高宽等参数的评估
本文采用一种常用的定义来计算聚焦效率:在焦平面内,以焦斑中心为圆点,3倍半高宽为直径内的圆内的透过功率与透过光阑的总功率之比即为聚焦效率(此外还有一种基于艾里斑的定义)。
4.1 聚焦效率
在运行过超透镜的仿真之后,首先投影出Z轴上光强并找出极值,该极值即为实际焦点。然后投影出焦点所在平面的场分布,积分计算透过功率。
um=1e-6;
load("full_lens.fsp");
switchtolayout;
#delete("T1");
select("T1");
delete;
select("T");
delete;
select("T2");
delete;
select("FDTD");
set("z min",-0.5*um);
addpower;
set("name","T");
set("x",0);set("x span",11*um);
set("y",0);set("y span",11*um);
set("z",-0.4*um);#基底的最底端是-0.1微米
setnamed("aperture","z",0.05*um);
addpower;
set("name","T1");
set("x",0);set("x span",11*um);
set("y",0);set("y span",11*um);
set("z",0.045*um);
save("full_lens_efficiency.fsp");
load("full_lens_efficiency.fsp");
if (haveresult("T")==false)
{
run;
}
#轴向方向上的远场投影
z=linspace(-0.1*um,-5*um,200);
x=0;y=0;
E_far=farfieldexact3d("T",x,y,z,{"field":"E and H"});
E2=E_far.E2;
E2=pinch(E2,4);
E2=pinch(E2);
plot(-z*1e6,E2,"z(um)","|E|^2");legend("E-z");
pos=findpeaks(E2);
z_f=z(pos);
#焦平面上的远场投影
x=linspace(-4*um,4*um,150);
y=linspace(-4*um,4*um,150);
E_far_focal=farfieldexact3d("T",x,y,z_f,{"field":"E and H"});
E3=E_far_focal.E2;
E3=pinch(E3,4);
E3=pinch(E3);
#visualize("E3");
image(x,y,E3,"x(um)","y(um)","|E|^2");
#电场强度分布曲线
E4=0.5*(pinch(E3,2,length(y)/2)+pinch(E3,2,length(y)/2+1));
plot(x*1e6,E4,"x(um)","|E|^2");legend("E-x");
#计算半高宽
po2=findpeaks(E4);
top=E4(po2);
E4=-abs(E4-top/2);
#plot(y*1e6,E4);
po3=findpeaks(E4,2);
FWHM=abs(x(po3(2))-x(po3(1)))*1e6;
#三倍半高宽区域内积分
f=E_far_focal.f;
pz=E_far_focal.Ex*conj(E_far_focal.Hy)-E_far_focal.Ey*conj(E_far_focal.Hx);
pz=pinch(pz);
pz=real(pz);
x_center=0; # integration range in m, set by user
y_center=0;
radius=1.5*FWHM*um;
X=meshgridx(x,y);
Y=meshgridy(x,y);
filter = (radius)>=sqrt((X-x_center)^2+(Y-y_center)^2);
T_filtered = 0.5* integrate(pz*filter,1:2,x,y);
T1=getresult("T1","T");T1=T1.T;
T_filtered = T_filtered/sourcepower(f);
T_filtered=T_filtered/T1;
# Plot filter and transmission
image(x*1e9,y*1e9,filter,"x (nm)","y (nm)", " integration region");
#plot(f/1e12,T_filtered*100,"frequency (THz)","Power"," filter");
上面这段代码与3.2-2中有共同片段。
最终得到该超透镜的聚焦效率为36.76%。 在构建该超透镜的过程中,光阑被放在了金膜之后。实际上光阑放置在金膜之前(即光源与金膜之间)更为合理。所以,这个聚焦效率是偏高的。不过,即使是36.76%这个数值对于超透镜的聚焦效率来说也不算高。
4.2 半高宽
根据弗朗禾费圆孔衍射理论,聚焦焦斑为一系列明暗相间的圆环,其光强分布为:
其中 ,
是一阶贝塞尔函数。设焦平面上一点到焦斑中心的距离为r,则有
,绘制出
曲线,与归一化的焦斑垂切曲线对比。matlab中内置有贝塞尔函数。
%Ip=I0*J1(2m)^2/m^2,m=pi*R*sin()/lambda
%长度单位是微米
R=8;
f=6;
lambda=0.45;
%画离散的贝塞尔函数
z=-2:0.001:2;
for i=1:length(z)
sin(i)=z(i)/sqrt(z(i)^2+f^2);
m2(i)=2*pi*R/lambda*sin(i);
J(i)=besselj(1,m2(i));
m(i)=m2(i)/2;
I(i)=J(i)^2/m(i)^2;
x(i)=z(i);
end
plot(x,I);
hold on;
ylabel("归一化强度");
xlabel("Y(um)");
d=xlsread("聚焦光斑与夫朗和费衍射.xlsx",2);
d(:,1)=d(:,1)*1e6;
p=max(d(:,2));
d(:,2)=d(:,2)/p;
scatter(d(:,1),d(:,2),'.');
legend("衍射极限强度分布","仿真数据");
![]() | ![]() |
(a)和(b)分别是直接仿真与间接仿真下的焦斑垂切与衍射极限曲线。而此时的衍射极限聚焦半高宽(NA是数值孔径)。这说明该超透镜实现了接近衍射极限的聚焦行为。
五、写在后面
这篇文章的开头提及了三种超透镜,但后两种目前不打算写了。这三种超透镜结构都很简单也很相似,掌握基本方法即可。
不过后面的仿真其实也有问题:传播相位超透镜基本实现了偏振不敏感性,但聚焦焦斑不是圆形,而是在入射光偏振方向存在长轴的微椭圆;以及没有实现连续消色差超透镜等。
初学者学习fdtd,一定好好利用官方资源。官方提供了丰富的脚本指令说明,简单案例等。一些资源门户)https://innovationspace.ansys.com/forum/forums/topic/ansys-insight-lumerical-jishuziyuanjiqis-hiyongyaoqiu/
一些官方案例:
本文完结,欢迎讨论。