利用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科技工作室。