【FDTDLumericalsweep扫描参数数据提取及可视化【以S参数为例】】FDTD Lumerical sweep扫描参数数据提取及可视化【以S参数为例】
本⽂以Lumerical官⽅提供的超透镜例程中的单元结构的S参数扫描为例,主要介绍这些代码中涉及到的脚本函数的含义,超透镜例程链接:
⼀、背景介绍
上图摘⾃Lumerical官⽅的超透镜例程,在使⽤FDTD进⾏超透镜研究时,我们经常需要参考这个例程中对超结构单元的仿真,使⽤软件分析组库中提供的S参数分析组来提取不同尺⼨参数的超结构单元的复振幅(突变相位、振幅)等参数。但由于S参数给出的数据往往需要我们进⼀步处理(提取、分析、可视化等)才能得到我们需要的结果,最后对结果进⾏可视化分析,这就要求我们编写Lumerical脚本来获得所
需的最终结果。 下图即官⽅例程中对单元的height和radius进⾏S参数扫描后得到的"height"扫描结果(注意height扫描中嵌套了radius)。海滩拍照
⼆、各重要脚本指令的含义
以下仅详细介绍针对上述案例使⽤的相关指令,具体扩展信息可以前往官⽹按字母顺序查询学习。下⾯按第三部分给出的实例代码中各指令出现的顺序进⾏介绍。
1. getsweepdata指令
先进先出#下⽂中"sweep_name"为分析对象,"data"为对象中数据参数
getsweepdata; #返回所有扫描、优化和蒙特卡罗分析对象的名称 getsweepdata(“sweep_name”); #返
回存储在扫描、优化或蒙特卡洛分析对象中的所有可⽤数据的名称。 out = getsweepdata(“sweep_name”, “data”); #返回参数扫描、优化或蒙特卡罗分析数据
2. getsweepresult指令
getsweepresult; #返回具有有效结果的所有扫描、优化、蒙特卡罗和S参数扫描对象的名称。
getsweepresult(“sweep_name”); #返回指定的具有有效结果的扫描、优化、蒙特卡罗和S参数扫描对象的名称 out = getsweepresult(“sweep_name”, “result”); #从指定的参数扫描、优化、蒙特卡罗或 S 参数扫描任务返回结果数据集
3. length指令
y = length(x); #返回矩阵中元素的个数
4.angle指令
out = angle(x); #以弧度返回复数或矩阵x的相位,相位在 - π 和 π 之间
5.pinch指令
out = pinch(x); #删除矩阵的所有单维度
pinch(x,i); #删除矩阵的指定维度(第i维)
pinch(x,i,j); #删除第 i 维度,但保留删除维度 i 的特定索引 j 。
6.image指令
image(x,y,z, “x label”, “y label”, “title”, “options”);
#创建带有轴标签和标题的2D图像,可以设置“options”参数选择绘制其他图像如:极坐标图
7.tplot指令
tplot; #创建⼀个字符串,其中列出了当前选定图窗的所有图窗属性。
tplot(“property”, “property value”); #设置当前选定图形的特定属性的属性值。
8.find指令
out = find(x,n); #返回 x 中与n最接近的值所对应的第⼀个元素的索引。
#返回等于、⼤于和⼩于n的所有x值的索引。
out = find(x==n);
out = find((x>=n) & (x<m));
9.unwrap指令
out = unwrap(x); #⽤于从⼀维数组中消除由于超过2 π相位导致的数据突变,使其变得连续
10.plot指令
plot(x,y, “x label”, “y label”, “title”, “options”);
美的电饭煲维修#“options”的可选参数参见下表:
日本冈山大学11.getnamed指令
getnamed(“name”); #返回名为"name"的对象的属性列表;交友观
out = getnamed(“name”, “property”); #返回命名对象的特定属性的值。
12.savedata指令
savedata(“filename”, var1, var2,…); #以“filename”为⽂件名保存特定变量
三、S参数扫描结果提取
Lumerical软件提供的S参数分析组会⽣成四个 S 参数分析结果。其中,“S”是主输⼊偏振和相同输出偏振的S参数(例如,如果光源是s偏振,它只计算s偏振透射和反射光的结果)。⽽ “S_polarization”是主输⼊偏振和两个⽅向输出偏振的S参数,在光线极化⽅向被超材料旋转时使⽤。⽽“T”和“R”分别是透射功率和反射功率。 下⾯脚本中S21_Gn表⽰的是透射光相对⼊射光的复振幅表⽰,同理S11_Gn则表⽰反射光相对⼊射光的复振幅表⽰,通过使⽤angle指令即可提取我们所需要的相位。
1.⾸先读取扫描参数
2.超结构单元相位及透射率提取
3.提取特定⾼度值的相位及透射率并进⾏可视化
4.保存所需数据sname = "height"; # 可以使⽤?getsweepdata 指令查看**height**对象中包含哪些参数 #读取扫描对象“height”中的“height”和“radius”参数,按扫描点数等分后得到的⼀维数组height = getsweepdata(sname,"height"); radius = getsweepdata(sname,"radius"); #读取扫描对象“height”中的“S”和“T”参数S = getsweepresult(sname,"S");T = getsweepresult(sname,"T");nd = length(radius); #获得半径扫描点数1
2
铅的熔点是多少度3
4
5
6
7
8
9# S21_Gn 的维度为[frequency,radius,height]pha = pinch(angle(S.S21_Gn),1,1); # 绘制相位随⾼度和半径变化的⼆维图像image(radius*1e6,height*1e6,pha,"Radius (um)","Height (um)","Pha");# 设置图像颜⾊条的取值范围tplot("colorbar min",-pi); tplot("colorbar max",pi);# T_Gn 的维度为[frequency,radius,height]T0 = pinch(T.T_Gn,1,1); image(radius*1e6,height*1e6,T0,"Radius (um)","Height (um)","Transmission");tplot("colorbar min",0); tplot("colorbar max",1);
1
2
3
4
5
6
7耶利亚女郎原唱
8
9
10
11hi = find(height*1e6,1.3e-6);# 对提取得到的相位数据进⾏连续性处理unwrap norm_pha = pinch(unwrap(pha(:,hi))-pha(1,hi));plot(radius*1e6,norm_pha,"Radius (um)","Pha (rad)","Height = "+num2str(height(hi)*1e6)+" (um)","linewidth=2");tplot("show legend",fal);plot(radius,T0(:,hi),"Radius (um)"," Transmission","Height = "+num2str(height(hi)*1e6)+" (um)","linewidth=2");tplot("y min",0);tplot("y max",1);tplot("show legend",fal);
1
2
3
4
5
6
7
8# 保存特定波长下的数据wavelength = getnamed("s_params::source","center wavelength");height = height(hi);period = getnamed("::model","period");mat_TiO2_Unit = getnamed("TiO2_Unit","material");index_TiO2_Unit = getnamed("TiO2_Unit","index");mat_sub = getnamed("substrate","material");index_sub = getnamed("substrate","index");pha = norm_pha;savedata('pha_vs_radius',wavelength,height,period,mat_TiO2_Unit,index_TiO2_Unit,mat_sub,index_sub,pha,radius);1
2
3
4
三级科目5
6
7
8
9
10