1. 程式人生 > 實用技巧 >利用Matlab處理Lumerical FDTD的三角奈米片電場分佈模擬結果

利用Matlab處理Lumerical FDTD的三角奈米片電場分佈模擬結果

FDTD計算得到的電場分佈,但是FDTD通過另存為jpg或者截圖所得到的圖片解析度很低,得到的圖片往往不能直接使用。因此,可以通過指令碼輸入到Maltab,然後再利用Matlab處理圖片並輸出。
  但是將資料從FDTD輸出到Matlab中,並不是想象中那麼簡單,經歷了好幾次坑,反覆摸索之後,得到了一種比較可行的方案,介紹如下。

1. FDTD原始結果

  這裡我們選用三角奈米片的電場分佈模擬結果進行舉例。圖1是FDTD直接輸出的結果(截圖),可以明顯看出,x方向和y方向的比例並不相同,而且不容易調節成比例尺相同,我目前有兩個可行的方案可以解決這個問題,一種是先建立一個方形的圖片,利用簽字筆在電腦螢幕上畫出方形的邊界,然後再反覆調節FDTD的圖片,使其邊界和畫出的邊界重合;第二種方案相對更精準也更方便,借用Snipaste截圖軟體建立一個方形的貼圖,這個好處是這個貼圖可以一直置於頂層,然後再調節FDTD中圖片的邊界即可。這兩種方案都是調節好之後進行截圖,因為直接另存,FDTD輸出的圖片更加模糊,而且也沒有在FDTD Solutions軟體中找到可以設定解析度的選項(FDTD Solutions版本為2018版),因此可以使用高解析度截圖軟體或者較高解析度的軟體,然後將圖片放到PS或者AI中進行解析度的進一步調節。FDTD中能夠調節的著實比較少,很有必要繼續調整。

2. FDTD結果匯出到Matlab

  FDTD資料匯入到Matlab主要參考Lumerical官網的介紹文件matlabsave。
  可以通過如下指令碼實現電場的讀取:

1
2
3
4
E=getresult("z=0","E");
E2=getelectric("z=0");
E1=sqrt(E2);
matlabsave("tri120.mat",E,E1);

其中E得到的是一個struct結果:

1
2
3
4
5
6
7
8
9
包含以下欄位的struct:

E:[48841×3double]
Lumerical_dataset:[1×1struct]
f:4.2827e+14
lambda:7.0000e-07
x:[221×1double]
y:[221×1double]
z:0

struct中E是一個包含三個x, y, z三個方向的電場分佈,是向量資訊,而通過getelectric並開根號得到的是電場的標量數值。值得一說的是,對結構體struct中內容的呼叫可以採用E.x等命令進行直接讀取。
值得注意的是,FDTD和Matlab採用的矩陣規則不同,輸出後的結果需要進行非共軛轉置,才能夠和FDTD的結果進行對應。
x,y, E 等的資訊除了利用getdata或getresult獲取以外,也可以通過右鍵單擊,將結果輸出到指令碼,可以得到相同的效果。

3. Matlab作圖

將電場結果,x,y,z資料匯出到matlab中之後,作圖可以有多種方案,contour,contourf,pcolor等均可以實現,pcolor更為方便。

contourf和pcolor的語句如下:

1
2
[C,h]=contourf(E,M)%counterf,M越大,越精細
h=pcolor(x,y,E)%pcolor

如圖3為pcolor輸出的結果。作圖後,仍需進行如下調整:

1
2
3
4
set(h,'LineStyle','none');%線型設定為無
colorbar%色標
colormapjet%色標模式選用jet
axisequal%x,y等比例尺

最後,如果有模擬相關需求,歡迎通過微信公眾號聯絡我們。

微信公眾號:320科技工作室。