Lumerical官方案例、FDTD时域有限差分法仿真学习(十一) 您所在的位置:网站首页 瑞利散射仿真大气偏振模式分布图 Lumerical官方案例、FDTD时域有限差分法仿真学习(十一)

Lumerical官方案例、FDTD时域有限差分法仿真学习(十一)

2024-07-06 05:41| 来源: 网络整理| 查看: 265

官网链接

我们模拟二维介电圆柱体的 Mie 散射。 将 FDTD 模拟的角散射结果与解析解进行比较。

在这里插入图片描述

一、结构设置

1.1 光源

全场散射场(total-field scattered-field,TFSF)源注入有限跨度的平面波,并将计算区域划分为两个区域。在源区内部同时存在入射场和散射场,而在源区外部只存在散射场。全场散射场源的工作原理是在其边界处,减去直接透射通过源区域或从平坦基板反射的任何光。因此,只有被完全包含在源区域内部的特征散射的光,才能穿过边界并传播到散射场区域。

1.2 分析组

总场监视器 在这里插入图片描述 Scirpt:

#################################################### # Total field # This object can be used to calculate nano-particle # cross sections. # # 这个对象可以用来计算纳米粒子的横截面。 # Output properties # sigma: cross section 横截面 # lam: vector of wavelengths 波长向量 # f: vector of frequencies 频率向量 # # Tags: FDTD total field monitor # # Copyright 2012 Lumerical Solutions Inc ################################################################ f=getdata("y2","f"); # get frequency data lam=c/f*1e9; # convert to wavelength in nm. # Calculate power flowing outwards in each direction in # scattered field region. # Note minus sign for bottom and left monitors. # 计算散射场区域每个方向向外流动的功率。 # 注意底部和左侧显示器的减号。 Ptop = transmission("y2"); if(havedata("y1")) { Pbottom = -transmission("y1"); } else { Pbottom = Ptop; } Pright = transmission("x2"); if(havedata("x1")) { Pleft = -transmission("x1"); } else { Pleft = Pright; } # Calculate total power flowing outwards. # power scattered (in Watts) # 计算向外流动的总功率。 # 功率分散(以瓦特为单位) Pscat = (Ptop + Pbottom + Pleft + Pright)*sourcepower(f); # Calculate scattering cross-section # 计算散射截面,也即面积 sigma=Pscat/sourceintensity(f);

havedata 在这里插入图片描述 sourcepower

在这里插入图片描述 在这里插入图片描述 sourceintensity

在这里插入图片描述 散射场监视器 在这里插入图片描述 Scirpt:

#################################################### # Scattered field # This script calculates scattering cross-section # and far field projection. # # 这个脚本计算散射截面和远场投影。 # Input properties # do far field: 0 for no, 1 for yes # # Output properties # theta: vector of angles for far field projection 远场投影的角度向量 # E2_far: vector of far field intensities at angles theta 1 mm from cylinder # 距离圆柱 1 毫米角度的远场强度矢量 # sigma: scattering cross section 距离圆柱 1 毫米角度的远场强度矢量 # lam: vector of wavelengths 波长向量 # f: vector of frequencies 频率向量 # # # Tags: FDTD scattered field monitor # # Copyright 2012 Lumerical Solutions Inc ################################################################ f=getdata("y2","f"); # get frequency data lam=c/f*1e9; # convert to wavelength in nm. # Calculate power flowing outwards in each direction in # scattered field region. # Note minus sign for bottom and left monitors. Ptop = transmission("y2"); if(havedata("y1")) { Pbottom = -transmission("y1"); } else { Pbottom = Ptop; } Pright = transmission("x2"); if(havedata("x1")) { Pleft = -transmission("x1"); } else { Pleft = Pright; } # Calculate total power flowing outwards. # power scattered (in Watts) Pscat = (Ptop + Pbottom + Pleft + Pright)*sourcepower(f); # Calculate scattering cross-section sigma=Pscat/sourceintensity(f); ########################################################### # far field calculation if(%do far field%) { #define a vector of angles for far field calculation # 定义远场计算的角度向量 theta=linspace(0,180,200); #calculate the X and Y vertices at a radius of 1mm from the cylinder #these are the locations where the far field calculation is done #计算距离圆柱1mm半径的X和Y顶点 #这些是远场计算完成的位置 r0=1e-3; x=r0*cos(theta*pi/180); y=r0*sin(theta*pi/180); #read the monitor frequencies #读取监视器频率 far_fj=matrix(2); # find indices of wavelengths for far field proj. # 找到远场项目的波长指数,1um和2um。 far_fj(1)=find(c/f,1e-6); far_fj(2)=find(c/f,2e-6); #allocate a matrix for the result 为结果分配一个矩阵 E2_far = matrix(2,length(theta)); # loop over all angles and far field positions # 循环所有角度和远场位置 for(j=1:2){ # the frequency points tempE = farfieldexact("x2",x,y,far_fj(j))-farfieldexact("x1",x,y,far_fj(j)) +farfieldexact("y2",x,y,far_fj(j))-farfieldexact("y1",x,y,far_fj(j)); # tempE大小为200×3,即L×3 # sum over all field components E2 = |Ex|^2 + |Ey|^2 + |Ez|^2 # 对所有场分量求和 E2 = |Ex|^2 + |Ey|^2 + |Ez|^2 E2_far(j,1:length(theta)) = sum(abs(tempE)^2,2); #第二个维度求和,即各场分量 } }

farfieldexact

在这里插入图片描述 在这里插入图片描述 数据mie_cylinder 在这里插入图片描述 数据以 3(行)X 1000 列的行/列格式组织 第一行是以度为单位的散射角 第二行是 lambda = 1 微米的散射幅度 第三行是 lambda = 2 微米的散射幅度

(注:列数太多了,所以没有完整显示为一行)

mie_theory_2d.lsf

########################################################################### # Scriptfile: mie_theory_2d.lsf # # Description: # This script analyses the results of mie_theory_2d.fsp # # Copyright 2009, Lumerical Solutions, Inc. ########################################################################### do_far_field = 1; # set 0 to not perform this test, 1 to perform the test # 设置 0 不执行此测试,设置 1 执行测试 do_cross_sections = 0; # set 0 to not perform this test, 1 to perform the test select("scat"); set("do far field",do_far_field); runanalysis; ########################################################################### # Far field projections if (do_far_field) { E2_far = getdata("scat","E2_far"); theta = getdata("scat","theta"); for(j=1:2){ # the frequency points E2_far(j,1:length(theta)) = E2_far(j,1:length(theta))/E2_far(j,1); } #load analytic result from file, there are 1000 points #从文件中加载解析结果,有1000个点 mie_theory_data = readdata("mie_cylinder.txt"); theta_analytic = mie_theory_data(1,1:1000); # plot data for the 2 wavelengths E2_analytic_1=interp(mie_theory_data(2,1:1000),theta_analytic,theta); E2_analytic_2=interp(mie_theory_data(3,1:1000),theta_analytic,theta); plot(theta,E2_far(1,1:length(theta)),E2_analytic_1, E2_far(2,1:length(theta)),E2_analytic_2, "angle (degrees)","scattered intensity (log scale)", "scattered intensity (log scale)","logplot");#"logplot"表示绘制对数图 legend("FDTD 1 micron","Analytic 1 micron","FDTD 2 microns","Analytic 2 microns"); # polar(theta*pi/180,E2_far(1,1:length(theta)),E2_analytic_1, E2_far(2,1:length(theta)),E2_analytic_2); # legend("FDTD 1 micron","Analytic 1 micron","FDTD 2 microns","Analytic 2 microns"); } ########################################################################### # Cross sections if (do_cross_sections) { ?" Calculating scattering and absorption cross sections"; # collect data on wavelength range f=getdata("scat","f"); # get freqency data lambda=c/f; # convert to wavelength r = getnamed("circle","radius"); # the radius of the mie particle # Calculate scattering cross-section sigmascat = getdata("scat","sigma"); Qscat = sigmascat/(2*r); # Calculate absorption cross-section sigmaabs = -getdata("total","sigma"); Qabs=sigmaabs/(2*r); # calculate the size parameter size_parameter = (2*r)/lambda; # Plot results plot(size_parameter,Qscat, Qabs ,"size parameter (d/lambda)","Mie efficiency","cross section"); legend("Scattering","Absorption"); }

readdata

在这里插入图片描述 interp 在这里插入图片描述

二、结果

打开并运行名为 mie_theory_2d.fsp 的仿真文件。 模拟在下面创建 mpeg 电影。 全场散射场 (TFSF) 源用于产生入射到介质圆柱体上的平面波。 只有被圆柱体散射的光传播到 TFSF 边界之外。

在这里插入图片描述 mie_theory_2d_movie_TM

运行模拟后,运行名为 mie_theory_2d.lsf 的脚本文件。 脚本文件计算 2 个波长的一系列远场投影,并将结果与存储在文件 cylinder.txt 中的电介质圆柱体散射的分析数据进行比较。 请注意,监视器记录了 25 个波长,但分析组中的脚本选择了 1 和 2 微米的监视器数据。 结果图(对数刻度)如下所示。 分析和模拟结果在所有角度都非常吻合,超过 5 个数量级。

在这里插入图片描述 该脚本还可以计算散射和吸收截面。 吸收将为零,因为圆柱体是由没有吸收的电介质组成的。 要计算横截面,请编辑脚本并将 do_cross_sections 变量设置为 1。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有