E-field data를 matlab으로 export하여서 plotting하는 방법은 무엇인가요?

matlab
e-field
dataexport

#1

이러한 시스템에서 저장된 2차원 혹은 3차원 E-field data를 추출하여서,
matlab으로 전송(exporting)한 후 data를 matlab상에서 plotting하는 방법을 알고 싶습니다.


FDTD 레이아웃 바꾸기
FDTD 계산에서 전기장의 단위(the unit of E-field)는 무엇이며, 계산된 전기장은 어떻게 확인할 수 있나요?
#2

아래 그림과 같이 d=100 nm Ag NP 위에 planewave source (400-700nm, 10 freq. points)가 아래 방향으로 입사되고 있고, 2차원 monitor인 y_normal_profile monitor에 파장에 따른 E-field data가 결과가 저장됩니다. (FDTD Solutions 모델 파일과 스크립트 파일을 업로드 했으니 참고하시기 바랍니다.)

[Model_File]E-field_Export_AgNP.fsp (249.9 KB)
E-field_Export_AgNP.lsf (1.8 KB)

E-field 데이타를 추출하여 Matlab에 전송하기 위한 스크립트 내용은 아래 Fig 1과 같습니다.

  • 좌표(x,y,z), 주파수 등의 정보는 getdata라는 명령어를 이용하여 추출할 수 있고, squared E-field intensity (|Ex|^2+|Ey|^2+|Ez|^2)의 데이타는 getelectric 명령어를 이용하여 다음과 같이 추출합니다.

  • Etemp = getelectric(m); (여기서 m은 monitor의 이름을 의미합니다.) 이 Etemp 4차원 행렬 데이타를 image 명령어로 시각화할 수가 없기 때문에 차원을 줄여는 pinch 명령어가 필요합니다.

  • getelectric으로 추출한 데이타는 4차원의 크기(Ex, Ey, Ez, frequency)를 가지고 있는 행렬입니다. Etemp의 차원은 (31,1,31,10) 입니다. Script Prompt 창에서 ?size(Etemp); 를 입력하시면 행렬의 차원을 확인할 수 있습니다.

  • 평면 monitor인 profile monitor(2D-Y-Normal)로 부터 데이터를 추출하였기 때문에 행렬의 2번째 차원은 그 크기가 1이 됩니다 (singleton). 또한, 이 시뮬레이션에서는 frequency points를 10개로 정했기 때문에 4번째 차원의 크기는 10입니다. 행렬의 1, 3번 차원은 x, z축의 E-field의 갯수이며, 이 크기는 override mesh의 크기와 mesh accuray 등에 따라 결정됩니다.

  • pinch 명령어를 이용하여, 700nm 파장(첫 번째)에서의 E-field 정보를 아래와 같이 추출할 수 있습니다.
    Ey = pinch(Etemp, 4, freq_set); (freq_set은 선택할 주파수의 순서를 의미하여, 이 경우 freq_set = 1)
    위 명령어는 4번째 차원인 파장 정보 중에서 첫 번째 파장(700nm)을 빼내와서(take-out), 행렬의 차원을 줄이게 됩니다. 즉 행렬의 차원이 4차원에서 (Ex,Ey,Ez,freq) --> 3차원으로(Ex,Ey,Ez) 축소되었습니다.
    다시, ?size(Ey); 명령어를 이용하여 Ey 행렬의 차원과 크기를 확입니다 : (31,1,31).

  • 데이터의 차원이 3차원까지 (Ex,Ey,Ez) 줄어들었다면, FDTD Solution에서 image라는 명령어를 이용하여 데이타를 2D 이미지로 시각화할 수 있습니다 (Fig 2 참고). (물론, pinch 명령어를 이용하여 행렬을 2차원으로 줄이고 시각화할 수도 있습니다.)

  • 다음으로는 matlabput이란 명령어를 이용하여 필요한 변수를 선택하여 matlab으로 전송하는 작업을 합니다. matlabput(x,y,z,f,lambda,freq_set,Ey);. 위 명령어를 입력하면 MATLAB Command Window (Fig 3 참고) 이란 팝업창이 생기게 됩니다.

  • FDTD Solutions의 Script File Editor 창에서 Matlab의 명령어들을 사용하여 스크립트 작업을 하기 위해서는, matlab(" 스크립트 내용 "); 이라는 명령어를 추가로 사용해야합니다. 이 안에 들어가는 명령어들은 위에서 작업한 FDTD Solution의 명령들과는 유사하지만 분명한 차이점이 존재합니다.

  • Matlab에서 3차원 혹은 4차원 행렬 데이터를 이미지로 플롯팅하기 위해서는 2차원으로 차원을 줄여주는 과정을 필요로 하므로, FDTD Solutions에서 보다 조금 더 복잡한 프로세를 거치게 됩니다. 첫째, squeeze라는 명령어를 이용하여 행렬의 singleton을 제거하여 차원을 줄여주는 과정, 둘째, 행렬을 전치화(transpose, .’)해주는 과정이 필요합니다.

  • pcolor(x,z,squeeze(Ey).’);. matlab에서 pcolor 명령어를 이용하여 E-field profile의 이미지를 표현할 수 있습니다. squeeze(Ey)를 통해서 행렬의 차원을 줄이고[(31,1,31) --> (31,31)], 행렬을 전치(.’)시켜줍니다. 즉, squeeze는 행렬 중 singleton 차원(크기가 1인)을 제거해주는 역할을 합니다. 화면에 검점 grid가 보여지기 때문에 shading flat;이란 명령어로 grid를 제거합니다. xlabel, ylabel, title 등의 명령어를 이용하여 축제목, 플롯 제목 등을 기입합니다. colorbar 명령어로 플롯의 우측에 intensity의 색상 정보를 추가합니다.

Fig 1. FDTD Solutions의 Scirpt File Editor에서 작업한 스크립트 내용

Fig 2. FDTD Solutions에서 image 명령어를 이용한 E-field profile 이미지 화면

Fig 3. matlabput이란 명령어를 사용할 때 나타나는 MATLAB Command Window 팝업창

Fig 4. Matlab에서 pcolor 명령어를 이용한 E-field profile 이미지 화면

Lumerical KB 사이트 "2D image plot"에도 Matlab에서 2D 데이타를 시각화하는 방법이 설명되어 있으니 참고하시기 바랍니다. 다음에 기회가 된다면, FreeMat이라는 무료 수치해석 소프트웨어를 이용하여 plotting하는 방법을 알아보도록 하겠습니다.


field 데이터로 current plot 하는 방법?
특정 방향으로 편광된 빛의 투과도 script.
#3

혹시라도 Matlab 명령어 중에서 singleton(42p), transpose(12p), 다차원 행렬(29p) 등에 관심있는 유저분들은 Matlab Programming 자료를 참고하시면 좋을 것 같습니다.