怎樣畫出nanowire HMM的波長隨kx/k0的分佈圖

fdtd

#1

老師您好。我目前想要研究Nanowire Hyperbolic Metamaterial的特性,現在想要畫出一個波段的dipole的光在HMM中propogate時, 波長和 kx/k0的圖。
示意如這個Multilayer HMM。
nnano.2013.276.pdf (2.9 MB) 中的Figure 2.

其中kx是光在HMM中傳播時,wavevector k在x方向上的分量; k0是光在真空中的波矢。

*我的方法是:
1.對於每一個波長,用“monitor_bottom”記錄Ez隨著x、y的分佈。
2.對於每一個波長的k0, 設定kx/k0在某個範圍內,如
kx/k0=d=[-30, 30];
3.利用 Ek=czt(Ez,x,y,kx,ky); 語句,得到該波長的空間頻譜圖, 則Ik=abs(Ek)^2為該波長下的空間頻譜能量圖。
4.將同kx值,不同ky的值疊加起來,最終得到單一波長下能量隨kx/k0的分佈圖。
5. 依次畫出其它波長,最終形成400-800nm下的spatial spectrum

最終得到的圖形如下:

我的問題是:

  1. 為什麼我的kx/k0的範圍這麼大??是我的czt語句有什麼問題嗎?
  2. 為什麼的能量這麼大?最小也有10^2.
    3.我的monitor需要設定time apodization以避免收到dipole的 Ez嗎?
  3. 為什麼我的圖中沒有paper類似的一條條明顯的能量帶?

謝謝老師的解答。


#2

首先你需要了解文献中的Kx(K0)是什么意思?是kx/k0 吗?

你知道fft需要用2的整数倍的点数,我看到你用了czt,不过为了得到较好的结果,你可能需要用很细的网格,参见这个例子

czt本身没有乘间隔,所以结果比较大。你乘上dx=x(2)-x(1)再看看。

很可能你需要将dipole的 Ez过滤,仅考虑系统谐振部分的结果,但是如何设置time apodization参数,你需要测试,用几个时间监视器在不同位置,看看需要记录那个时间段的比较合适。


#3
  1. 是的。 文献中的kx(k0) 的意思是 以k0为单位的kx值,即kx/k0.
  2. 我的文件的mesh 是1.51.51.5nm, 已经很细了。
  3. 您说的 乘以间隔是什么意思? 是我原本得到了

    之后再乘以对应像素的dx=x(i)-x(i-1)吗?
  4. 如何判断我的time apodization保留了系统谐振的信息,而确实滤除了dipole的 Ez? 因我认为dipole发出光到HMM里,这两件事是同时发生的。

#4

A2:你知道现在是做空间傅立叶变换,要得到很好(精细)的K空间结果,一般需要很细的,均匀网格。请把你难道喜欢网格扩展到整个XY平面;
A3:是的,还要乘Y方向的像素值,如果你做2D变换的话;
A4:这个只能将时间监视器的结果画出来查看了,光源部分是第一个脉冲,后面的脉冲才是结构产生的。由于结构比较大,可能你需要选的time apodization要以较远地方的时间监视器结果为准,此时你可能会丢掉谐振不强的频率,不过应该不影响你的结果,因为你需要的是谐振强的波长部分。


#5

孙老师您好:

  1. 通过参看网上的例程,我看到他们是如下做修改的:
    特别是这句:
    filt=cos(pi*X/(max(x)-min(x)))cos(piY/(max(y)-min(y)));
    和我原来写的: Ezf = czt(Ez1,x,y,kx,ky); 的差别的意义是什么?
  2. 现在我在原来的kx.fsp的文件的基础上,在我想要的monitor中心放置了一个time monitor.kx.fsp (735.9 KB)
    得到的real(E)随t变化为:

    而dipole的signal为:

    这是否说明我可以在t=15 us以后进行"start"的 time apodization?

#6

A1:我用这个Filt的目的是为了将仿真区边缘上的场将为零,以满足傅立叶变换的条件。不满足此条件,你的结果可能不光滑,也可能不正确。你可以改为高斯窗口。

A2:应该以离偶极子光源最远地方的信号为准,因为需要一定的时间传播。如果我看这个时间信号,窗口函数应该次内阁20或者25开始(不是中心啊,是Start)。


#7
  1. 好的,那您说的那个乘以 dx 的问题还需要考虑吗??因为在傅立叶变换的公式里我找不到需要修改的这一项?
  2. 好的,我目前选用的start center=25fs, width=10fs.

#8

A1:需要,傅立叶变换的公式里没有所以才需要乘上积分的微面积或者长度。
你先测试吧。可能需要调整参数。


#9

老师您好。 修改了time apodization后,我重新画出了 波长随着kx/k0的分布图。

我的问题是:

  1. 为什么我要在
    filt=cos(piX/(max(x)-min(x)))cos(piY/(max(y)-min(y)));
    Ezf = czt(Ez1
    filt,x,y,kx,ky);
    这之后乘以 Ezf = Ezf*mesh; 这个语句, 它的物理意义是什么?
  2. Ezf=Ezfmesh , 和 Ezf=Ezfmesh ^2 这两种写法,物理意义上有什么区别?
  3. 为了分析出dipole在我的Nanowire Hyperbolic Metamaterial的材料里发出的光能透出多少到真空中去,并且计算其远场的pattern, 我在HMM 下方15nm处放置了一个monitor。 这个monitor应该不用设置time apodization吧?

#10

A1:你知道filt是一个窗口函数,作用是为了尽量满足傅立叶变换定理; czt只计算变换部分,没有乘积分的空间间隔。Ezf = Ezfmesh; 才是乘过(前提是mesh=dxdy);
A2:一维积分乘dx,二维乘mesh=dx*dy。 不知道你的mesh代表什么。
A3:不需要。


#11

A1: 您说要乘以dx*dy是因为傅立叶变换的这个原理吗?


#12

不是啊。
因为傅立叶变换就是一种积分,而czt表示式中
没有乘dx*dy,所以要计算绝对量需要乘这个增量。