FDTD操作案例

合集下载

fdtd api python代码

fdtd api python代码

fdtd api python代码FDTD API Python代码:模拟电磁波传播的利器FDTD(Finite-Difference Time-Domain)方法是一种数值求解电磁波传播问题的方法,它将Maxwell方程组离散化为差分方程,通过时间步进的方式求解电磁场的分布。

FDTD方法在电磁波传播问题的数值模拟中得到了广泛应用,而Python作为一种高效的编程语言,也提供了FDTD API Python代码,使得使用FDTD方法进行电磁波传播问题的模拟变得更加简单和方便。

FDTD API Python代码的使用方法非常简单,只需要导入相应的库,设置模拟参数,然后进行模拟即可。

下面是一个简单的FDTD API Python代码示例:```pythonimport fdtdimport numpy as np# 设置模拟参数nx, ny, nz = 100, 100, 100dx, dy, dz = 0.01, 0.01, 0.01dt = 0.01# 创建模拟对象sim = fdtd.Simulation(nx, ny, nz, dx, dy, dz, dt)# 设置边界条件sim.set_boundary_conditions(fdtd.BC_PERIODIC, fdtd.BC_PERIODIC, fdtd.BC_PERIODIC)# 设置电磁场源source = fdtd.GaussianPulseSource(0.5, 0.5, 0.5, 0.1, 0.1, 0.1, 0.5, 0.5, 0.5, 0.1, 0.1, 0.1)sim.add_source(source)# 进行模拟for i in range(100):sim.update()# 获取电磁场分布ex = sim.get_array('ex')ey = sim.get_array('ey')ez = sim.get_array('ez')hx = sim.get_array('hx')hy = sim.get_array('hy')hz = sim.get_array('hz')# 可以对电磁场分布进行进一步的处理和分析```在上面的代码中,我们首先导入了fdtd库和numpy库,然后设置了模拟参数,包括模拟区域的大小和分辨率,时间步长等。

三维电磁场FDTD程序(3D-FDTD matlab)PEC边界

三维电磁场FDTD程序(3D-FDTD matlab)PEC边界

三维电磁场FDTD程序(3D-FDTD matlab)PEC边界% FDTD Main Function Jobs to Workers %%******************************************************************** ***% 3-D FDTD code with PEC boundaries%******************************************************************** ***%% This MATLAB M-file implements the finite-differencetime-domain% solution of Maxwell's curl equations over a three-dimensional % Cartesian space lattice comprised of uniform cubic grid cells. %% To illustrate the algorithm, an air-filled rectangular cavity % resonator is modeled. The length, width, and height of the % cavity are X cm (x-direction), Y cm (y-direction), and% Z cm (z-direction), respectively.%% The computational domain is truncated using PEC boundary% conditions:% ex(i,j,k)=0 on the j=1, j=jb, k=1, and k=kb planes % ey(i,j,k)=0 on the i=1, i=ib, k=1, and k=kb planes % ez(i,j,k)=0 on the i=1, i=ib, j=1, and j=jb planes % These PEC boundaries form the outer lossless walls of the cavity. %% The cavity is excited by an additive current source oriented % along the z-direction. The source waveform is a differentiated % Gaussian pulse given by% J(t)=-J0*(t-t0)*exp(-(t-t0)^2/tau^2),% where tau=50 ps. The FWHM spectral bandwidth of this zero-dc- % content pulse is approximately 7 GHz. The grid resolution % (dx = 2 mm) was chosen to provide at least 10 samples per % wavelength up through 15 GHz.%% To execute this M-file, type "fdtd3D" at the MATLAB prompt. % This M-file displays the FDTD-computed Ez fields at every other % time step, and records those frames in a movie matrix, M, which % is played at the end of the simulation using the "movie" command. %%******************************************************************** ***function [Ex,Ey,Ez]=FDTD3D_Main(handles)global SimRunStop% if ~isdir('C:\MATLAB7\work\cavity\figures')% mkdir 'C:\MATLAB7\work\cavity\figures'% end%******************************************************************** ***% Grid Partition%******************************************************************** ***p.ip = get(handles.XdirPar,'Value');p.jp = get(handles.YdirPar,'Value');p.PN = get(handles.PartNo,'Value');%******************************************************************** ***% Grid Dimensons%******************************************************************** ***ie = get(handles.xslider,'Value'); %number of grid cells in x-directionje = get(handles.yslider,'Value'); %number of grid cells in y-directionke = get(handles.zslider,'Value'); %number of grid cells in z-directionib=ie+1;jb=je+1;kb=ke+1;%******************************************************************** ***% All Domains Fields Ini.%******************************************************************** ***Ex=zeros(ie,jb,kb);Ey=zeros(ib,je,kb);Ez=zeros(ib,jb,ke);Hx=zeros(ib,je,ke);Hy=zeros(ie,jb,ke);Hz=zeros(ie,je,kb);***% Fundamental constants%******************************************************************** ***=2.99792458e8; %speed of light in free spaceparam.muz=4.0*pi*1.0e-7; %permeability of free space param.epsz = 1.0/(**param.muz); %permittivity of free space%******************************************************************** ***% Grid parameters%******************************************************************** ***param.is = get(handles.xsource,'Value'); %location ofz-directed current sourceparam.js = get(handles.ysource,'Value'); %location ofz-directed current sourceparam.kobs = floor(ke/2); %Surface of observationparam.dx = get(handles.CellSize,'Value');; %space increment of cubic latticeparam.dt = param.dx/(2.0*); %time stepparam.nmax = get(handles.TimeStep,'Value');; %total number of time steps%******************************************************************** ***% Differentiated Gaussian pulse excitation%******************************************************************** ***param.rtau=get(handles.tau,'Value')*100e-12;param.tau=param.rtau/param.dt;param.ndelay=3*param.tau;param.Amp = get(handles.sourceamp,'Value')*10e11;param.srcconst=-param.dt*param.Amp;***% Material parameters%******************************************************************** ***param.eps= get(handles.epsilon,'Value');param.sig= get(handles.sigma,'Value');%******************************************************************** ***% Updating coefficients%******************************************************************** ***param.ca=(1.0-(param.dt*param.sig)/(2.0*param.epsz*param.eps))/(1.0+( param.dt*param.sig)/(2.0*param.epsz*param.eps));param.cb=(param.dt/param.epsz/param.eps/param.dx)/(1.0+(param.dt*para m.sig)/(2.0*param.epsz*param.eps));param.da=1.0;param.db=param.dt/param.muz/param.dx;%******************************************************************** ***% Calling FDTD Algorithm%******************************************************************** ***ex=zeros(ib,jb,kb);ey=zeros(ib,jb,kb);ez=zeros(ib,jb,kb);hx=zeros(ib,jb,kb);hy=zeros(ib,jb,kb);hz=zeros(ib,jb,kb);[X,Y,Z] = meshgrid(1:ib,1:jb,1:kb); % Grid coordinatesPsim = zeros(param.nmax,1);Panl = zeros(param.nmax,1);if ((p.ip == 1)&(p.jp == 0))x = ceil(ie/p.PN)param.a = [1:x-1:ie-x];param.b = [x+1:x-1:ie];param.c = [1,1];param.d = [je,je];m2 = 1;for n=1:1:param.nmaxform1=1:1:p.PN[ex,ey,ez]=Efields(param,handles,ex,ey ,ez,hx,hy,hz,ie,je,ke,ib,jb,kb,n,m1,m2,p);[hx,hy,hz] =Hfields(param,hx,hy,hz,ex,ey,ez,ie,je,ke,ib,jb,kb,n,m1,m2,p);end[Psim(n),Panl(n)] =Cavity_Power(param,handles,ex,ey,ez,n);field_viz(param,handles,ex,ey,ez,X,Y,Z,n,Psim,Panl,p);Dyn_FFTpause(0.01);endelseif ((p.ip == 0)&(p.jp == 1))y = ceil(je/p.PN);param.c = [1:y-1:je-y];param.d = [y+1:y-1:je];param.a = [1,1];param.b = [ie,ie];m1 = 1;for n=1:1:param.nmaxfor m2=1:1:p.PN[ex,ey,ez]=Efields(param,handles,ex,ey ,ez,hx,hy,hz,ie,je,ke,ib,jb,kb,n,m1,m2,p);[hx,hy,hz] =Hfields(param,hx,hy,hz,ex,ey,ez,ie,je,ke,ib,jb,kb,n,m1,m2,p);end[Psim(n),Panl(n)] =Cavity_Power(param,handles,ex,ey,ez,n);field_viz(param,handles,ex,ey,ez,X,Y,Z,n,Psim,Panl,p);pause(0.01);endelseif ((p.ip == 1)&(p.jp == 1))x = ceil(ie/p.PN);param.a = [1:x-1:ie-x];param.b = [x+1:x-1:ie];y = ceil(je/p.PN);param.c = [1:y-1:je-y];param.d = [y+1:y-1:je];for n=1:1:param.nmaxfor m2=1:1:p.PNfor m1=1:1:p.PN[ex,ey,ez]=Efields(param,handles,ex,ey ,ez,hx,hy,hz,ie,je,ke,ib,jb,kb,n,m1,m2,p);[hx,hy,hz] =Hfields(param,hx,hy,hz,ex,ey,ez,ie,je,ke,ib,jb,kb,n,m1,m2,p);endend[Psim(n),Panl(n)] =Cavity_Power(param,handles,ex,ey,ez,n);field_viz(param,handles,ex,ey,ez,X,Y,Z,n,Psim,Panl,p);pause(0.01);endelseparam.a = 1;param.b = ie;param.c = 1;param.d = je;m1 = 1;m2=1;for n=1:1:param.nmax[ex,ey,ez]=Efields(param,handles,ex,ey ,ez,hx,hy,hz,ie,je,ke,ib,jb,kb,n,m1,m2,p);[hx,hy,hz] =Hfields(param,hx,hy,hz,ex,ey,ez,ie,je,ke,ib,jb,kb,n,m1,m2,p);SimRunStop =get(handles.Stop_sim,'value');if SimRunStop == 1h = warndlg('Simulation Run is Stopped by User !','!! Warning !!');waitfor(h);break;end[Psim(n),Panl(n)] =Cavity_Power(param,handles,ex,ey,ez,n);if n>=2Panl(n)=Panl(n) + Panl(n-1);endfield_viz(param,handles,ex,ey,ez,X,Y,Z ,n,Psim,Panl,p);pause(0.01);endend%文件2% Cavity Field Viz. %function [] = field_viz(param,handles,ex,ey,ez,X,Y,Z,n,Psim,Panl,p)%******************************************************************** ***% Cross-Section initialization%******************************************************************** ***tview = squeeze(ez(:,:,param.kobs));sview = squeeze(ez(:,param.js,:));ax1 = handles.axes1;ax2 = handles.axes2;ax3 = handles.axes3;%******************************************************************** ***% Visualize fields%******************************************************************** ***timestep=int2str(n);ezview=squeeze(ez(:,:,param.kobs));exview=squeeze(ex(:,:,param.kobs));eyview=squeeze(ey(:,:,param.kobs));xmin = min(X(:));xmax = max(X(:));ymin = min(Y(:));ymax = max(Y(:));zmin = min(Z(:));daspect([2,2,1])xrange = linspace(xmin,xmax,8);yrange = linspace(ymin,ymax,8);zrange = 3:4:15;[cx cy cz] = meshgrid(xrange,yrange,zrange);% sview=squeeze(ez(:,param.js,:));rect = [-50 -35 360 210];rectp = [-50 -40 350 260];axes(ax1);axis tightset(gca,'nextplot','replacechildren');E_total = sqrt(ex.^2 + ey.^2 + ez.^2);etview=squeeze(E_total(:,:,param.kobs));sview = squeeze(E_total(:,param.js,:));surf(etview');shading interp;caxis([-1.0 1.0]);colorbar;axis image;title(['Total E-Field, time step = ',timestep],'fontname','Times New Roman','fontsize',12,'FontWeight','BOLD');xlabel('i coordinate');ylabel('j coordinate');set(gca,'fontname','Times New Roman','fontsize',10);% F1 = getframe(gca,rect);% M1 = frame2im(F1);% filename =fullfile('C:\MATLAB7\work\cavity\figures',strcat('XY_ETotal',num2str( n),'.jpeg'));% imwrite(M1,filename,'jpeg')axes(ax2);axis tightset(gca,'nextplot','replacechildren');surf(sview');shading interp;caxis([-1.0 1.0]);colorbar;axis image;title(['Ez(i,j=13,k), time step = ',timestep],'fontname','Times New Roman','fontsize',12,'FontWeight','BOLD');xlabel('i coordinate');ylabel('k coordinate');set(gca,'fontname','Times New Roman','fontsize',10);% F2 = getframe(gca,rect);% M2 = frame2im(F2);% filename =fullfile('C:\MATLAB7\work\cavity\figures',strcat('XZ_ETotal',num2str( n),'.jpeg'));% imwrite(M2,filename,'jpeg')%******************************************************************** ***% Cavity Power - Analitic expression%******************************************************************** ***axes(ax3);% axis tight% set(gca,'nextplot','replacechildren');t = [1:1:param.nmax];Psim = 1e3*Psim./max(Psim);Panl = 1e3*Panl./max(Panl);semilogy(t,Psim,'b.-',t,Panl,'rx-');str(1) = {'Normalized Analytic Vs. Simulated Power'};str(2) = {'as function of time-steps'};title(str,'fontname','Times NewRoman','fontsize',12,'FontWeight','BOLD' );xlabel('Time Step');ylabel('Log(Power)');legend('Simulation','Analytic','location','SouthEast');set(gca,'fontname','Times New Roman','fontsize',10);% F3 = getframe(gca,rectp);% M3 = frame2im(F3);% filename =fullfile('C:\MATLAB7\work\cavity\figures',strcat('Power',num2str(n),' .jpeg'));% imwrite(M3,filename,'jpeg')%文件3% Source waveform functionfunction [source]=waveform(param,handles,n)ax1 = handles.axes1;type = get(handles.sourcetype,'value');amp = get(handles.sourceamp,'value')*1e4;f = get(handles.Frequency,'value')*1e9;switch typecase 2source =param.srcconst*(n-param.ndelay)*exp(-((n-param.ndelay)^2/param.tau^2) );case 1source = param.srcconst*sin(param.dt*n*2*pi*f);case 3source =param.srcconst*exp(-((n-param.ndelay)^2/param.tau^2))*sin(2*pi*f*(n-p aram.ndelay)*param.dt);otherwisesource =param.srcconst*(n-param.ndelay)*exp(-((n-param.ndelay)^2/param.tau^2) );end%文件4function [hx,hy,hz] =Hfields(param,hx,hy,hz,ex,ey,ez,ie,je,ke,ib,jb,kb,n,x,y,p)a = param.a(x);b = param.b(x);c = param.c(y);d = param.d(y);hx(a+1:b,c:d,1:ke)=...hx(a+1:b,c:d,1:ke)+...param.db*(ey(a+1:b,c:d,2:kb)-...ey(a+1:b,c:d,1:ke)+...ez(a+1:b,c:d,1:ke)-...ez(a+1:b,c+1:d+1,1:ke));hy(a:b,c+1:d,1:ke)=...hy(a:b,c+1:d,1:ke)+...param.db*(ex(a:b,c+1:d,1:ke)-...ex(a:b,c+1:d,2:kb)+...ez(a+1:b+1,c+1:d,1:ke)-...ez(a:b,c+1:d,1:ke));hz(a:b,c:d,2:ke)=...hz(a:b,c:d,2:ke)+...param.db*(ex(a:b,c+1:d+1,2:ke)-...ex(a:b,c:d,2:ke)+...ey(a:b,c:d,2:ke)-...ey(a+1:b+1,c:d,2:ke));%文件5function[ex,ey,ez]=Efields(param,handles,ex,ey,ez,hx,hy,hz,ie,je,ke,ib,jb,kb, n,x,y,p)a = param.a(x);b = param.b(x);c = param.c(y);d = param.d(y);if (param.is>=a)&(param.is<=b)|(param.js>=c)&(param.js<=d) source = waveform(param,handles,n);elsesource = 0;endex(a:b,c+1:d,2:ke)=...param.ca*ex(a:b,c+1:d,2:ke)+...param.cb*(hz(a:b,c+1:d,2:ke)-...hz(a:b,c:d-1,2:ke)+...hy(a:b,c+1:d,1:ke-1)-...hy(a:b,c+1:d,2:ke));ey(a+1:b,c:d,2:ke)=...param.ca*ey(a+1:b,c:d,2:ke)+...param.cb*(hx(a+1:b,c:d,2:ke)-...hx(a+1:b,c:d,1:ke-1)+...hz(a:b-1,c:d,2:ke)-...hz(a+1:b,c:d,2:ke));ez(a+1:b,c+1:d,1:ke)=...param.ca*ez(a+1:b,c+1:d,1:ke)+...param.cb*(hx(a+1:b,c:d-1,1:ke)-...hx(a+1:b,c+1:d,1:ke)+...hy(a+1:b,c+1:d,1:ke)-...hy(a:b-1,c+1:d,1:ke));ez(param.is,param.js,1:ke)=ez(param.is,param.js,1:ke)+source;。

一个二维的FDTD程序说课讲解

一个二维的FDTD程序说课讲解

一个二维的FDTD程序% 本程序实现2维TM波FDTD仿真% 此程序用PML设置吸收边界条件% FDTD_2D_kongqi_PML% 仅含有Ez,Hx,Hy分量clear;clc; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1.初始化T=200; % 迭代次数IE=100; %JE=100;npml=8; % PML的网格数量c0=3*10^8; % 波速f=1.5*10^(9); % 频率lambda=c0/f; % 波长wl=10;dx=lambda/wl;dy=lambda/wl;pi=3.14159;dt=dx/(2*c0); % 时间间隔epsz=1/(4*pi*9*10^9); % 真空介电常数epsilon=1; % 相对介电常数sigma=0; % 电导率spread=6; % 脉冲宽度t0=20; % 脉冲高度ic=IE/2; % 源的X位置jc=JE/2; % 源的Y位置for i=1E+1;for j=1:JE+1;dz(i,j)=0; % z方向电荷密度ez(i,j)=0; % z方向电场hx(i,j)=0; % x方向磁场hy(i,j)=0; % y方向磁场ihx(i,j)=0;%ihy(i,j)=0;iz(i,j)=0; % z方向求和参量,频域卷积转化为时域求和end;end;for i=2E; %for j=2:JE;ga(i,j)=1;end;end; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %PML参数的设置for i=1E;gi2(i)=1;gi3(i)=1;fi1(i)=0;fi2(i)=1.0;fi3(i)=1.0;endfor j=1:JE;gj2(j)=1;gj3(j)=1;fj1(j)=0;fj2(j)=1;fj3(j)=1;endfor i=1:npml+1; %设置PML层中的参数xnum=npml+1-i;xn=0.33*(xnum/npml)^3;gi2(i)=1.0/(1+xn);gi2(IE-1-i)=1/(1+xn);gi3(i)=(1-xn)/(1+xn);gi3(IE-1-i)=(1-xn)/(1+xn);xn=0.25*((xnum-0.5)/npml)^3;fi1(i)=xn;fi1(IE-2-i)=xn;fi2(i)=1.0/(1+xn);fi2(IE-2-i)=1/(1+xn);fi3(i)=(1-xn)/(1+xn);fi3(IE-2-i)=(1-xn)/(1+xn);endfor i=1:npml+1;xnum=npml+1-i;xn=0.33*(xnum/npml)^3;gj2(i)=1.0/(1+xn);gj2(JE-1-i)=1/(1+xn);gj3(i)=(1-xn)/(1+xn);gj3(JE-1-i)=(1-xn)/(1+xn);xn=0.25*((xnum-0.5)/npml)^3;fj1(i)=xn;fj1(JE-2-i)=xn;fj2(i)=1.0/(1+xn);fj2(JE-2-i)=1/(1+xn);fj3(i)=(1-xn)/(1+xn);fj3(JE-2-i)=(1-xn)/(1+xn);end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 2.迭代求解电场和磁场for t=1:T;for i=2E; % 为了使每个电场周围都有磁场进行数组下标处理for j=2:JE;dz(i,j)=gi3(i)*gj3(j)*dz(i,j)+gi2(i)*gj2(j)*0.5*(hy(i,j)-hy(i-1,j)-hx(i,j)+hx(i,j-1));end;end; % 电场循环结束pulse=sin(2*pi*f*t*dt); % 正弦波源dz(ic,jc)=dz(ic,jc)+pulse; % 软源for i=1E; % 为了使每个电场周围都有磁场进行数组下标处理for j=1:JE;ez(i,j)=ga(i,j)* dz(i,j); %反映煤质的情况都是放到这里的% iz(i,j)=iz(i,j)+gb(i,j)*ez(i,j) ;end;end; % 电荷密度循环结束for j=1:JE;ez(1,j)=0;ez(IE,j)=0;endfor i=1E;ez(i,1)=0;ez(i,JE)=0;end;for i=1E; % 为了使每个磁场周围都有电场进行数组下标处理for j=1:JE-1;curl_e=ez(i,j)-ez(i,j+1);ihx(i,j)=ihx(i,j)+fi1(i)*curl_e;hx(i,j)=fj3(j)*hx(i,j)+fj2(j)*0.5*(curl_e+ihx(i,j));end;end; % 磁场HX循环结束for i=1E-1; % 为了使每个磁场周围都有电场进行数组下标处理for j=1:JE;curl_e=ez(i+1,j)-ez(i,j);ihy(i,j)=ihy(i,j)+fj1(j)*curl_e;hy(i,j)=fi3(i)*hy(i,j)+fi2(i)*0.5*(curl_e+ihy(i,j));end;end; % 磁场HY循环结束end;end;在Maxwell 旋度方程的差分表示中,按照Yee 氏的空间网格设置,将出现半空间步长,通过前一时刻的磁、电场值得到时刻的电、磁场值,并在每一时刻上,将此过程算遍整个空间中随时间变化的电、磁场值的解,但在编程计算中不使用1/2的空间表示,而要通过一定的相互关系把它表达出来,在自制的C 程序中采用数组来表示上面的表达式中各场值及系数,其表达式在程序中表示如下所示:ez[k+1][i][j]=CA[i][j]*ez[k][i][j]+CB[i][j]*CD*(hy[k][i+1][j]-hy[k][i][j] (6)+hx[k][i][j]-hx[k][i][j+1])hx[k+1][i][j+1]=hx[k][i][j+1]+CD*(ez[k][i][j]-ez[k][i][j+1]) (7) hy[k+1][i+1][j]=hy[k][i+1][j]+CD*(ez[k][i+1][j]-ez[k][i][j]) (8)由于各场值起始均赋零,时间步数从零开始,每一时间步均按上面的顺序在整个模拟区计算一遍,这样场的实际那关系和空间关系就完全被体现出来。

FDTD案例分析续篇

FDTD案例分析续篇

11

纳米粒子散射
12

实例二 :纳米线栅偏振器
1、纳米线网格偏振镜紧凑光子偏振控制元素——与解决方 案设计和优化FDTD • 高对比度极化控制装置的组成sub-wavelength金属光栅纳米线偏振器件——正在取代网格批量光学元素。纳米线 网格偏振器件提供改进消光比对比,最小的吸收来解决高 亮度照明,紧凑的形式因素促进大规模生产和集成在小型 光学组件。然而,纳米线偏振器件是富有挑战性的网格组 件来设计,特别是如果制造缺陷都考虑进去。在这个应用 程序中,我们将展示FDTD解决方案可以用来最大化对比度 的纳米线偏振镜网格任意角度,同时保持高传播。
33

SPR纳米光刻
• 第三步:分析了表面等离子体共振光刻近场数据 详细的研究结果和数值的解决方案,所有复杂的光学波的 交互的接口的许多材料,包括硅基片上的反射,准确地对待。 一个阴谋的近场强度在截面通过银丝面膜层(y=0到60海里) 和光刻胶层(y = -50到0 nm)显示在对数。表面等离子体模 式是清楚地看到在银胶面罩/接口。周期性结构允许入射光 束夫妇counter-propagating表面等离子体波,这引起了亚波 长的变化在光阻层强度的设计思想。
18

纳米线栅偏振器
19

纳米线栅偏振器
• 第四步:模拟得到的响应非正态纳米线网格发病率照明。 铝光栅wiregrid偏振镜有TE传播的大约85%的normallyincident平面波。现在,与一个源呈四十五度角,传播下降到 大约83%。这些结果生成模拟一个时期的wiregrid偏振镜,然 后使用复杂的脚本的环境,在解决方案将FDTD响应从单个光 栅牙的反应,multi-tooth组成部的铝光栅。
36

6-1 FDTD举例

6-1 FDTD举例

4. 编程 (1) 点源在中间(空间采样点第31点),编程时要考虑往+Z&-Z 方向传播。 (2) 编程时,以时间做外循环,计算各个时刻的电场E,磁场 H;由于前一时刻的E(H)和后一时刻的H(E)相互 关联,空间做内循环,迭代计算。 (3) ε 0 =8.854e-12;
μ0 =1.256e-6;
课程设计一 用FDTD模拟一维点源Ei(t)=Ex(t)=)sin[2π×109t] 在z方向的传播情况,模拟范围0~1.0m,点源在中间(0.5米 处)。 请画出t=0.5×10-9、10-9、6.0×10-9时刻的Ei~z的波形图; 分析在z=0和z=1.0处加吸收边界条件和不加吸收边界条件的波 形。 1. 推导其FDTD差分方程公式;
n
3. 空间和时间离散 (1) 空间步长:Δs≤(c/f)/12 (2) 时间步长: Δ t ≤ T/12=(1/f)/12 (3) 一维情况中的Courant稳定性条件: Δ t*c ≤ Δ s 根据题目所给条件可取: Δ t=1/f/20=0.05ps; Δ s=(c/f)/18=1/60m; 在1m范围内,可取60个空间步长,最少120个时间采样点。 取K=61(空间采样点),N=120可以符合要求。
Ei,(v/m) 0
-0.2
-0.4
0.4
-0.6
-0.5 0.2
-0.8
-1
0
-1
-1.2
-0.2
0
5
10
15
20 25 Z轴 ,(DS/2)
30
35
40
45
-1.5
0
5
10
15
20 25 Z轴 ,(DS/2)ຫໍສະໝຸດ 303540

FDTD原理及例子

FDTD原理及例子

u
n i 1

2uin

u
n i 1

2u
n i

u
n1 i
t2 c 2O x2 O t2
得: e jt
ct 2
e jk~x
2 e jk~x

2 e jt
x
最后得色散关 系
k~

1 x
cos
1
基础知识
麦克斯韦方程微分形式:
FDTD方式将时间进 行差分,并且磁场与 电场交替迭代更新
对于有耗媒质:
H D J t
E B t
•B 0
•D
时谐场形式:
H

D t

Je, Je
E
B E t Jm , Jm sH
Da Ca , Db Cb
,并注意到E与H在时间上差半个步长,
可以直接从磁场FDTD公式得到电场的FDTD公式。如:
Ex i, j, k, n 1 CaEx i, j, kEx i, j, k, n CbEx i, j, k
H y i, j, k 1, n 1 H y i, j, k, n 1

DbHy i,
j,
k

Ex i,
j,
k
x
1, n
z
Ex i,

j, k, n

H z i, j, k, n 1 DaHz i, j, kH z i, j, k, n
Ex i, j 1, k, n Ex i, j, k, n
数值稳定性问题
二维的Yee算法数值Courant稳定性条件

FDTD电磁建模与可视化的多语言混合编程

FDTD电磁建模与可视化的多语言混合编程

图3—1MMatriX引用我们用VB完成程序图形界面的设计,利用MatrixVB进行矩阵的乘法、求逆、奇异值分解、正交化分解以及特征值求解等运算,程序最终编译成可独立运行的EXE可执行文件,使用十分简便。

这种方法可以克服两种编程语言的不足,充分利用两者的优点。

程序的界面如图3.2所示,用户可选择采样的起始时间步、采样间隔、采样点数、谐振模式数、Pencil参数L以及外推的时间步,计算结果可及时以图形方式显示出来,并给出拟合精度。

幽3-2GPOF信号外推程厅界面点击菜单栏下的File可打开一个选择框,选择需要进行外推的信号;在程序界面左边设鼍完参数后点击Extrapolate进行外推,外推结果和原模拟结果会一起显示在右边的图形显示框里。

按住鼠标左键向右选中图形的某块区域,可对该区域进行放大,便于细致地对外推的结果进行观察:按住鼠标左键往左选取某一矩形,图形便会恢复到外推完成后初次显示的样子;按住鼠标右键不放,在图形显示框里移动便可对图形进行平移操作,观察需要查看的部分。

63.3GPOF信号外推程序的实例验证为了验证GPOF方法的准确性,我们用U型双频天线的FDTD模拟作为实例来验证外推软件的准确性。

在FDTD输出的馈点电压信号中,从稍后的1000到2600时间步中,每隔20个时间步抽样一次,得到80个抽样点,选择了6个复指数函数对信号进行拟合、外推(如图3-3),得到所需的后继20000时间步电压信号,FDTD的模拟计算量减少为原来的1/5。

直接对u型双频天线进行FDTD模拟跟用GPOF方法进行外推后的结果如图3-4所示,外推结果与直接进行FDTD模拟计算结果符合得非常好,精度优于0.6%。

图3—3对数据进行抽样图3-4计算结果跟外推结果比较图3-4中实线部分为直接进行FDTD模拟计算的结果,●为对模拟结果进行取样的点,×是用GPOF进行外推后的结果。

从图中我们可以看出,连接各个×得到的曲线,与实线重合得很好,说明我们进行的GPOF外推结果是可靠的。

FDTD操作案例2

FDTD操作案例2

一基于Au薄膜正三角形孔阵列提取光场强度分布图本例子中取Au薄膜厚度30nm,三角形孔阵周期800nm,小孔直径600nm。

Au的材料模型选取“Au (Gold)–CRC”,或者自建材料模型。

参见hole arrays_E fied profile.fsp文件。

1.添加金薄膜,打开FDTD Solution 软件后点击“structure”,添加长方体模块。

如下图所示。

点击,对几何参数和材料类型等进行编辑。

参照下图。

先将“name”改为“Au 30nm”,在“Geometry”下设置金薄膜的几何尺寸,我们只需要对下图红框所示的左边一栏进行编辑,其中“x span、y span、z span”分别对应金薄膜的长、宽和厚度,而“x、y、z”表示其几何中心的坐标值,均设置为0。

在“x span”中输入“0.8*2+0.6”,“y span”中输入“0.8*sqrt(3)+0.6”,“z span”中输入“0.03”,对应金薄膜厚度为30nm,便可得到如下图所示的结果。

点击“material”,选择所使用的材料类型,如下图所示,选中“Au (Gold) - CRC”,点“OK”保存即可。

现在对金膜的几何尺寸和材料类型设置完成。

2.在金薄膜中添加小孔阵列。

点击中的三角形,在下拉菜单中选择“Photonic crystals”。

然后在屏幕右侧的“Object”一栏中选中“Hexagonal lattice PC array”,点击“Insert”进行添加。

在左侧的结构树“object tree”中选中“hex_pc”,即我们刚才添加进去的六边形阵列,点击对它进行编辑。

各参数设置如下图所示,其中“a”表示小孔之间的间距,即三角形孔阵的周期,“radius”表示小孔半径。

设置完成后,点“ok”保存。

经过上面的步骤,我们搭建的模型的如下图所示。

我们发现经过上面的设置所得到的三角形孔阵列其中两个小孔超出了金膜,为了好看起见,希望将多余的这两个小孔删掉,首先,如下图所示,在结构树下选中“hex_pc”,单击鼠标右键在菜单中选择“break groups”,不进行这项操作无法删掉多余的小孔。

FDTD软件介绍及案例分析一

FDTD软件介绍及案例分析一

21

深紫外线(DUV)光刻仿真
• 第一步:光刻仿真设置在布局编辑 光学光刻技术继续改善,所以也有提高光刻仿真技术。时
域有限差分算法解决方案使用时域有限差分技术严格解决的 对象字段的面具。所有衍射,折射,干扰、吸收和极化效应计 算近场之面具没有近似。时域有限差分算法解决方案也把一 个分级网,这大大降低内存需求和时间每仿真。通过时域有 限差分算法的仿真数据的后处理,空中形象可计算出晶圆片
5

FDTD Solutions软件介绍—特点
• 高性能计算技术 -高速计算引擎 -优化的源代码 -并行计算充分利用多核计算机系统的高性能 -CPU使用的最大化 -支持常用的各种操作系统 -软件授权许可证与硬件、操作系统无关; -避免不必要的计算 -提供各种边界条件 -优化的集成设计 -高级网格化技术
铬二进制掩码是表现为建设布局编辑FDTD的解决方案。面 具的模型由一个周期性阵列的十字形空缺CD = 2λ 。布局编 辑器提供了一个全面的观点的结构模型和数据来源和监视器 用于进行计算。几个例子如何做这个显示在下面。
22

深紫外线(DUV)光刻仿真
23

14

CMOS图像传感器像素设计
• 第三步:优化角度回应的CMOS图像传感器和测量主要射线 角度:增加光学效率、降低光谱光相声
测量光谱光相声,向下的功率流在邻近的sub-pixels可以 计算,结合矢量。光谱光相声一般产生最小光学效率最大化, 但在陡峭的角度入射高浓度的相声观察到,在某种程度上,不 可避免的。更复杂的装置设计,由其他的像素元素(如互连) 也改变时,可以提供一种方法,可以减少整体相声水平。
15

CMOS图像传感器像素设计
16

FDTD原理及例子ppt课件

FDTD原理及例子ppt课件
对于有耗媒质:
H D J t
E B t
•B 0
•D
时谐场形式:
H
D t
Je, Je
E
B E t Jm , Jm sH
• B m
• D e
H j( j )E
E jH
E(x, y, z, t) E0 (x, y, z,t)e jt H (x, y, z, t) H0 (x, y, z,t)e jt
)
z r (k)
只要给定了所有空间点上电/磁场的初值,就可以一步一步地求出任 意时刻所有空间点上的电/磁场值。
一维Maxwell方程的Yee算法
Ex Hy
Ex
n2 n 3/2
Hy Ex
n 1 n 1/ 2
n0
0
1
2
3k
H~
n1/ 2 y
(k
1) 2
H~
n1/ 2 y
(k
1) 2
ct zr (k
FDTD数值分析法
目录
1.麦克斯韦方程的基础知识 2.一维和三维Maxwell方程的Yee算法 3.数值稳定性分析 4.吸收边界条件 5.波源的设置 6.编程思路
麦克斯韦方程微分形式:
BPM 方式
基础知识
H D J t
E B t
•B 0
•D
基础知识
麦克斯韦方程微分形式:
FDTD方式将时间进 行差分,并且磁场与 电场交替迭代更新
DbHy i,
j,
k
Ex i,
j,
k
x
1, n
z
Ex i,
j, k, n
H z i, j, k, n 1 DaHz i, j, kH z i, j, k, n

fdtd 折射率高斯分布

fdtd 折射率高斯分布

FDTD(时域有限差分法)是一种用于解决电磁波传播和散射问题的数值计算方法。

在光学仿真中,折射率的高斯分布常被用来模拟光波在具有渐变折射率介质中的传播。

接下来,我将详细介绍FDTD方法以及如何在其中实现折射率的高斯分布。

1. FDTD方法概述FDTD是由Yee在1966年提出的一种用于求解Maxwell方程组的数值方法。

它通过将连续的时间和空间离散化,将微分方程转换为差分方程,从而在时域内直接模拟电磁场的传播过程。

FDTD具有编程简单、适应性强、易于处理复杂边界条件等优点,在电磁场数值计算领域得到了广泛应用。

2. Maxwell方程组与Yee网格FDTD方法的核心是对Maxwell方程组进行离散化。

Maxwell方程组描述了电磁场的基本规律,包括高斯定律、法拉第电磁感应定律、安培定律和无源位移电流定律。

Yee网格是FDTD中使用的一种交错网格结构,它将电场和磁场分别定义在空间和时间上错开的位置,这样可以更准确地模拟电磁场的耦合关系。

3. 折射率的物理意义在光学中,折射率是描述介质对光波传播影响的物理量。

它定义为光在真空中的速度与光在介质中速度的比值。

当光波从一种介质进入另一种介质时,由于折射率的不同,光波会发生折射或反射现象。

折射率的分布直接影响光波的传播路径和强度分布。

4. 高斯分布的折射率模型高斯分布的折射率模型是一种常见的渐变折射率分布,它可以用来模拟如光纤、波导等光学器件中的折射率变化。

高斯分布通常表达为:\[ n(x, y, z) = n_0 + \Delta n \cdot \exp\left(-\frac{(x-x_0)^2}{2\sigma_x^2}-\frac{(y-y_0)^2} {2\sigma_y^2}-\frac{(z-z_0)^2}{2\sigma_z^2}\right) \]其中,\(n_0\) 是背景折射率,\(\Delta n\) 是折射率变化的幅度,\(x_0, y_0, z_0\) 定义了高斯分布的中心位置,\(\sigma_x, \sigma_y, \sigma_z\) 是高斯分布在各个方向上的标准差,决定了折射率变化的宽度。

FDTD方法模拟一维电磁波传播

FDTD方法模拟一维电磁波传播

FDTD方法模拟一维电磁波传播————————————————————————————————作者:————————————————————————————————日期:燕山大学课程设计说明书题目: FDTD方法模拟一维电磁波传播学院(系):年级专业:学号:学生姓名:指导教师:教师职称:燕山大学课程设计(论文)任务书院(系):基层教学单位:学号学生姓名专业(班级)设计题目 FDTD方法模拟一维电磁波传播设计技术参数共振源频率为f=910Hz;介电常数为ε=1.0;导磁率7-104⨯=πσm(m/Ω)。

设计要求以FDTD计算方法为理论基础,用Matlab软件作为工具,模拟一维电磁波在介质中的传播图像。

工作量15个工作日工作计划第一周(1~5天)找资料,阅读大量参考书;第二周(6~10天)进行设计,编程模拟;第三周(11~15天)写设计论文,并进行修改。

参考资料《电磁波时域有限差分方法》葛德彪(第二版)《激光原理》等指导教师签字基层教学单位主任签字说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。

2012年 7 月 8 日燕山大学课程设计评审意见表指导教师评语:成绩:指导教师:年月日答辩小组评语:成绩:评阅人:年月日课程设计总成绩:答辩小组成员签字:年月日摘要FDTD算法是以Yee元胞为空间电磁场离散单元,将麦克斯韦旋度方程转化为差分方程,表述简明,容易理解,结合计算机技术能耐处理十分复杂的电磁问题;在时间轴上逐步推进求解,有很好的稳定性和收敛性,因而在工程电磁学各个领域备受重视。

文中第一章,详细的介绍了FDTD方法的背景及其在各个领域中的应用。

本文简要地介绍了FDTD方法的基本知识,并对电磁波传播的模拟做出了来论述,通过电磁波在直角坐标系中的三维情况进行讨论,进而得出二维、一维的电磁波模拟图像。

本文第一章系FDTD的历史背景,详细介绍了FDTD的发展和应用。

第二章为模拟一维电磁波的基本理论。

fdtd语法

fdtd语法

FDTD是一种时域有限差分法,用于模拟电磁波在二维或三维空间中的传播。

在FDTD 中,电磁波的电场和磁场分量在空间中离散化,并在时间上连续。

在每个时间步,这些分量通过有限差分近似来更新。

FDTD的语法通常包括以下部分:
1.网格尺寸:定义空间网格的大小。

2.时间步长:定义时间步长的值。

3.初始条件:定义初始时刻的电场和磁场分量。

4.边界条件:定义边界条件,以模拟波在空间中的传播。

5.源:定义激励源,以产生电磁波。

以下是一个简单的FDTD语法示例:
mathematica复制代码
MeshSize: 100x100x100 // 定义网格尺寸为100x100x100
TimeStep: 0.001 // 定义时间步长为0.001
InitCond: E=0, H=0 // 定义初始条件为E和H都为0
BoundaryCond: PerfectE, PerfectH // 定义边界条件为完美电边界和完美磁边界
Source: -1j*omega*mu*ones(x,y,z) // 定义源为均匀的磁场激励
这只是一个简单的示例,实际的FDTD语法可能更加复杂,并需要根据具体的问题进行调整。

FDTD软件介绍及案例分析一

FDTD软件介绍及案例分析一

15

CMOS图像传感器像素设计
16

CMOS图像传感器像素设计
17

CMOS图像传感器像素设计
• 第四步:点扩展函数计算通过时域有限差分算法解CMOS影 像感测器 相声可表征空间光通过点扩展函数——多少接收信号量
3

二:FDTD Solutions软件介绍—特点
2、软件特点: • 该软件用于下一代光子学产品的精确、多功能、高性能仿真
设计 -精确严格求解3维矢量麦克斯韦方程 -是学术界尖端研究和工业界产品开发 -易学易用的设计工具 -及时地充分利用高性能计算技术 • 该软件可解决具有挑战性关键设计的技术 -能高效准确地模拟色散材料的难题 -独有的多系数材料模型 -为准确描述色散材料的性质提供了理想的工具
一:公司背景介绍
1、公司介绍 • FDTD Solutions软件由加拿大Lumerical Solutions公司出品。
该公司成立于2003年,总部位于加拿大温哥华。用户用该 公司软件已发表大量高影响因子论文,并被许多国际著名 大公司和学术团队所使用 • FDTD Solutions:基于矢量3维麦克斯维方程求解,采用时 域有限差分FDTD法将空间网格化,时间上一步步计算,从 时间域信号中获得宽波段的稳态连续波结果,独有的材料 模型可以在宽波段内精确描述材料的色散特性,内嵌高速、 高性能计算引擎,能一次计算获得宽波段多波长结果,能 模拟任意3维形状,提供精确的色散材料模型
铬二进制掩码是表现为建设布局编辑FDTD的解决方案。面 具的模型由一个周期性阵列的十字形空缺CD = 2λ 。布局编 辑器提供了一个全面的观点的结构模型和数据来源和监视器 用于进行计算。几个例子如何做这个显示在下面。
22

复杂有耗色散地层中的FDTD方法以及在冲击探地雷达中的应用

复杂有耗色散地层中的FDTD方法以及在冲击探地雷达中的应用

复杂有耗色散地层中的FDTD方法以及在冲击探地雷达中的应用复杂有耗色散地层中的FDTD方法以及在冲击探地雷达中的应用一、引言冲击探地雷达是一种广泛应用于地质勘探和工程测量的非侵入性探测技术。

通过向地下发射高能量脉冲信号,并记录反射回来的信号,可以获取地下介质的电磁特性信息。

然而,复杂有耗色散地层的存在给冲击探地雷达带来了极大的挑战。

如何克服地层的复杂性以及色散效应对探测结果的影响,成为了研究的重点。

二、复杂有耗色散地层的特点复杂有耗色散地层是指地下介质具有多种不同的物理性质,在不同的频率和方向下表现出色散特性,并且有一定的能量损耗。

这种地层的存在使得传统的FDTD(时域有限差分)方法有很大的局限性,难以准确模拟电磁波在地层中的传播和反射。

三、FDTD方法原理FDTD方法是一种数值计算电磁波传播的常用方法。

它基于Maxwell方程组和真空中的有限差分近似,通过将时间和空间离散化,对电磁场进行时域数值计算。

FDTD方法具有计算参数较少、准确度较高等优点,在冲击探地雷达中得到了广泛应用。

四、复杂有耗色散地层中FDTD方法的改进为了克服复杂地层对传播的影响,研究者对FDTD方法进行了一系列改进。

首先,引入了完美匹配层(PML)来模拟外边界条件,有效避免了边界反射对波形的影响。

其次,在时间和空间上进行自适应网格剖分,使得计算网格在不同地层中具有不同的分辨率,提高了计算效率和准确性。

此外,引入了非局部本构模型,可以更好地描述复杂地层的色散特性。

五、FDTD方法在冲击探地雷达中的应用FDTD方法在冲击探地雷达中有着广泛的应用。

首先,它可以用来模拟冲击探地雷达系统的传输特性,优化系统设计,减少电磁波的信号衰减和波形失真。

其次,FDTD方法可以用于地下介质成像,通过对反射信号的分析,提取出地下介质的电磁参数分布,为勘探人员提供有价值的信息。

此外,FDTD方法还可以用来研究地下介质中的散射现象,分析散射信号的特点,为冲击探地雷达的目标检测和目标识别提供支持。

FDTD使用说明文档

FDTD使用说明文档

FDTD使用说明文档FDTD(Finite-Difference Time-Domain)是一种计算电磁波动方程的数值模拟方法。

它通过将空间和时间离散化,将整个问题转化为了差分方程的求解。

FDTD方法适用于计算二维和三维空间中的电磁波的传播和辐射问题,广泛应用于大气物理、电磁学、光学和电磁兼容等领域。

下面是FDTD的使用说明文档,包括基本原理、步骤和参数设置等。

一、基本原理:FDTD方法基于麦克斯韦方程组,将空间和时间划分为网格进行离散化,通过差分形式的麦克斯韦方程进行求解。

具体步骤如下:1.空间离散化:将计算区域划分为网格,每个网格点上都有电场和磁场分量。

2.时间离散化:使用时间步长Δt,将时间进行离散化。

3.更新电场:根据麦克斯韦方程组的电场更新公式,根据磁场的值更新电场的值。

4.更新磁场:根据麦克斯韦方程组的磁场更新公式,根据电场的值更新磁场的值。

5.边界条件:设置适当的边界条件,如吸收边界条件、周期性边界条件等。

6.重复步骤3-5,直到模拟结束。

二、步骤:使用FDTD方法进行模拟一般可分为以下步骤:1.设定计算区域的大小和网格划分,根据模拟需求确定网格节点数和间距。

2.初始化电场和磁场,设置初始场分布。

3.根据模拟需求设置时间步长Δt,以及计算的总时间或模拟步数。

4.迭代更新电场和磁场,按照FDTD的原理进行计算。

5.设置边界条件和吸收边界条件,确保计算区域的边界不会对计算结果产生影响。

6.输出结果,根据需求选择输出电场、磁场以及网格中其他物理量的数值。

7.模拟结束。

三、参数设置:在使用FDTD方法进行模拟时,一些重要的参数需要进行合理的设置,以保证模拟结果的准确性和稳定性:1.网格分辨率:根据模拟的需求和计算资源,设置合适的网格划分和节点数,以充分捕捉到目标问题的细节。

2.时间步长:时间步长Δt决定了模拟的时间分辨率,需要根据模拟的频率范围和计算精度要求设置。

3.边界条件:选择适当的边界条件,可以是吸收边界条件、周期性边界条件等,以避免计算区域的边界对计算结果的影响。

FDTD_solutions操作案例1

FDTD_solutions操作案例1

以上面图像为例子,设置时只需要设置一个周期,然后将边界设为周期结构即可。

1.打开fdtd软件
2.单击structures设置结构。

3.选中物体单击右键设置参数。

给结构命名,x,y,z确定结构在各个方向上的范围。

5设置选中结构的材料,如果material里有想要的材料直接选中即可,没有的可以通过查询,将其折射率直接输入到index中。

6.当结构重叠时,可勾选下面按钮,设置重叠部分的优先性,数字越小优先性越高。

7.设置基底上的光栅结构,先设置下层Al。

8.设置中间层PMMA
9.设置上层Al
10.单击Simulation选中region设置模拟区域。

Geometry设置单元结构参数,一般选取一个周期即可,所以X span和Y span就是周期,然后在boundary conditions中将x,y都选为periodic。

点击OK.
11.在Source中选取plane wave,genaral中入射方向改为向下入射,geometry中X span和Y span选取的要比周期大,Frequency/wavelength中改变入射波长范围。

12.在Monitor中选取frequency domain field and power探测器。

勾选第一项,将frequency points变为200,将探测器放于光源上方探测反射率。

还可以在选取一个探测器放于下方探测投射,一次模拟可以放入多个探测器。

13.结构设置完成之后,点击RUN,运行,待运行完毕后,选择对应的探测器,可以看出探测到的结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一基于A u薄膜正三角形孔阵列提取光场强度分布图本例子中取Au薄膜厚度30nm,三角形孔阵周期800nm,小孔直径600nm。

Au的材料模型选取“Au (Gold)–CRC”,或者自建材料模型。

参见hole arrays_E fied 文件。

1.添加金薄膜,打开FDTD Solution 软件后点击“structure”,添加长方体模块。

如下图所示。

点击,对几何参数和材料类型等进行编辑。

参照下图。

先将“name”改为“Au 30nm”,在“Geometry”下设置金薄膜的几何尺寸,我们只需要对下图红框所示的左边一栏进行编辑,其中“x span、y span、z span”分别对应金薄膜的长、宽和厚度,而“x、y、z”表示其几何中心的坐标值,均设置为0。

在“x span”中输入“*2+”,“y span”中输入“*sqrt(3)+”,“z span”中输入“”,对应金薄膜厚度为30nm,便可得到如下图所示的结果。

点击“material”,选择所使用的材料类型,如下图所示,选中“Au (Gold) - CRC”,点“OK”保存即可。

现在对金膜的几何尺寸和材料类型设置完成。

2.在金薄膜中添加小孔阵列。

点击中的三角形,在下拉菜单中选择“Photonic crystals”。

然后在屏幕右侧的“Object”一栏中选中“Hexagonal lattice PC array”,点击“Insert”进行添加。

在左侧的结构树“object tree”中选中“hex_pc”,即我们刚才添加进去的六边形阵列,点击对它进行编辑。

各参数设置如下图所示,其中“a”表示小孔之间的间距,即三角形孔阵的周期,“radius”表示小孔半径。

设置完成后,点“ok”保存。

经过上面的步骤,我们搭建的模型的如下图所示。

我们发现经过上面的设置所得到的三角形孔阵列其中两个小孔超出了金膜,为了好看起见,希望将多余的这两个小孔删掉,首先,如下图所示,在结构树下选中“hex_pc”,单击鼠标右键在菜单中选择“break groups”,不进行这项操作无法删掉多余的小孔。

在结构树种选择希望删除掉的小孔,所选择的部分会对应于结构视图中,如下图所示,此时,可单击右键选择“delete”进行删除,或者直接点左侧工具栏中的按钮删除。

这时得到我们希望的金纳米孔阵列如下图。

在左侧工具栏中选择可以对视图进行放大和缩小,鼠标左键放大,右键缩小。

3.添加平面光源。

在“source”下拉菜单中选择“plane wave”,如下图所示。

对光源参数进行设置。

在“general”中设置光源入射方向为z轴正方向,光源在xy面上的大小与金薄膜大小相同,区别在于其z轴位置不同。

在“general”、“geometry”和“frequency/wavelength”下的参数设置如下面三个图所示。

其它选项默认不变。

我们设置光源为单色光,波长为500nm。

设置完成后点击“ok”保存。

4.添加光探测器,仿真之后可得到垂直于z轴的平面上的电场强度分布。

选择“monitor”中的“frequency-domain field profile”。

“frequency-domain field profile”探测器对光场的计算比较精确,如果需要得到如透过率、反射率等与能量相关的量,则要选择“frequency-domain field and power”探测器,这个计算能量更精确一些。

对monitor进行设置。

在“general”下勾选“override golobal monitor setting”选项,设置“frequency point”为1,因为仿真所用光源为单一频率,只记录这个频率下的仿真结果就可以了。

Geometry 下的参数设置如下图。

对于“spectral averaging and apodization”和“advanced”选项,保持默认设置不变。

在“data record”下对于我们不关心的输出选项,比如不勾选“Hx”、“Hy”、“Hz”,仿真运行之后不会保持这些分量的值,可以有效减小仿真数据存储空间。

5.添加仿真区域。

点击“simulation”添加仿真区域。

如下图所示。

对仿真区域进行参数设置,如下面几个图所示。

在“mesh setting”选项中将mesh accuracy设为4,设置的数值越高网格划分约细致,但是我们同时要考虑计算机的内存,如果设置的数值过大,仿真运行时内存可能不够用,会导致仿真无法进行,如果此项数值设置过低,仿真结果可能不准确。

对于具有色散特性的金属材料,需要将“mesh refinement”选项设置为“conformal variant 1”,或者“conformal variant 2”。

“boundary conditions”参数设置如下图。

因为纳米孔阵列具有周期性结构,所以我们需要设置周期性边界条件,这样就可以只对最小单元结构进行仿真来模拟无限大的区域。

我们的结构和光源具有一定的对称性,设置对称性能有效减小仿真计算区域,提高效率。

设置对称性时要注意光源的对称性,如果极化方向与对称平面平行,则选择“symmetric”,如果极化方向与对称平面垂直,则选择“anti-symmetric”,我们选择的是平面光源,电场方向沿X轴极化,根据上面的准则,对称性的设置如下图所示。

6.添加网格覆盖区域。

在仿真计算中,我们往往需要在部分区域对网格结构进行更为精细的划分,以使得仿真计算的结果更加准确。

添加网格覆盖区域,就是对这个区域内的网格重新划分,提高计算精度。

因为本例子中金薄膜的厚度为30nm,计算色散材料需要更精细的网格,所以我们在金膜所在的区域重新划分网格。

在“simulation”的下拉菜单中选择“mesh”添加网格覆盖区域。

对“mesh”参数进行设置,如下图所示。

最小网格精度设置为2nm。

因为我们的金薄膜厚度比较小,所以最小网格尺寸要小一些仿真结果才能比较准确。

设置完成后点”ok”保存。

在运行仿真之前,还有两点需要注意一下。

第一,检查材料特性的拟合。

在“check”下选择“material explore”。

至此仿真模型搭建完毕。

模型结构如下图所示。

7. 在运行仿真之前,还有两点需要注意一下。

第一,检查材料特性的拟合。

在“check”下选择“material explore”。

在如下对话框中选择仿真中所用到的材料类型,本例子中选择“Au(Gold)-CRC”,因为光源设置为单色光,只有单一频率,所以无法考察材料拟合的好坏。

如果仿真计算的光源不是单一的频率,例如波段在400nm-800nm之间,考察材料特性的拟合。

设置的参数如下图所示。

点击“fit and plot”,出现金的介电常数实部和虚部的拟合情况。

从两条曲线可以看出,我们所选的材料在400nm-800nm之间的波段的拟合的很好,说明所选择的材料类型正确。

第二,检查仿真运行所需内存,确保计算机有足够的内存来运行仿真。

在“check”下选择“check simulation and memory requirements”,就可以得到仿真计算所需内存。

如果需要的内存过大,超过了计算机的配置,就要考虑修改参数以减小所需内存。

8.首次运行仿真时,要对计算机进行配置。

点击“resources”,出现下图所示对话框,点“run tests”按钮检查测试是否成功。

如果配置测试通过,下面的“status”一栏中出现“success”。

配置成功后点击“save”保存。

9.运行仿真,点击“run”按钮仿真开始运行。

仿真运行对话框如下图所示。

10.仿真运行结束后,此时工程文件处于分析模式下,可以看到现在文件不能进行编辑了,注意“layout”按钮现在不要去点,所有的仿真数据都被保存在分析模式下,一旦返回“layout”模式下,仿真数据自动清除。

11.提取仿真数据。

选中“monitor”,在“result view”中就会显示仿真数据。

右键单击“result view”下的“E”,选择“new visualizer”,就可以得到电场分布图。

所得到的电场强度分布图如下图所示。

在右侧的“export to ....”下拉菜单中,JPEG表示将结果保存为图片格式,text表示将仿真数据导出到txt文件中。

二金纳米孔阵列透过率仿真在上面例子的基础上,只需要稍加改动,就可以对光穿过金纳米孔阵列的传输特性曲线进行仿真。

搭建模型过程与上面的例子相同,只需要在结构中添加“frequency-domain field and power”即可仿真得到透过率曲线。

见hole 文件。

对刚添加的monitor进行参数设置。

在“general”选项下将“frequency point”设置为200,其它参数的设置如下图。

修改光源参数,由原来的单一波长的光波变为波段在400nm-800nm之间的光波。

参数修改如下图。

仿真透过率时应该注意,如果完全匹配层设置的太少,则仿真结果可能出错,如果得到的透过率曲线中出现负值,则考虑是因为完全匹配层设置的过少的原因,应适当增加完全匹配层PML的层数。

我们仿真透过率时,在“FDTD simulation”下的“advanced options”选项下,修改“minimum pml layer”设置为64,,“maximun pml layers”的值设为128。

如下图所示。

网格覆盖区域的参数设置如下图所示。

考虑到计算机的内存容量,将网格设置的太小时,所需内存过大,则仿真无法进行。

检查仿真计算内存需要,然后运行仿真,计算结束后,进行如下操作,就可以得到金纳米孔的透过率曲线了。

在结构树下单击“monitor”右键,选择“visualize”下的“T”,就可以得到透过率曲线。

得到的透过率曲线如下图所示。

相关文档
最新文档