FDTD boundary condition에 관해서 이해가 되지 않는 부분에 대해 질문드립니다!

unwrap
phase
angle

#1

안녕하세요, FDTD에 대해 잘 알지 못하는 초보입니다. 제가 시뮬레이션을 돌리다가 이해가 되지 않는 부분이 있어서 질문드립니다.
제가 아래 왼쪽 사진과 같이 substrate 위에 직육면체 형태의 안테나 구조를 올리고, 아래에서 plane wave를 쪼여 투과한 빛의 E field 위상을 보려고 합니다. 그 결과 아래 오른쪽 사진과 같은 위상 결과를 보이게 됩니다.


그런데 여기서 제가 FDTD 시뮬레이션 공간을 넓혀서 아래 왼쪽과 같이 같은 크기의 안테나 구조를 하나 추가하고, 시뮬레이션을 돌려 위상을 확인한 결과 아래 오른쪽처럼 결과가 다르게 나옵니다.

제가 시뮬레이션을 돌릴 떄 boundary condition을 x, y에 대해 periodic하게 한 상태에서 돌리면 한 개의 안테나 구조가 x,y 방면으로 반복되는 구조를 나타내야 하는 것 아닌가요? 그렇다면 안테나가 한 개이던 두 개던간에 위상 결과에는 차이가 없어야 하는 것 아닌가요?

읽어주셔서 감사합니다.


#2

안녕하세요, @dunnyle1004.

무한한 주기를 갖는 구조를 시뮬레이션할 때, 시뮬레이션 영역에 포함시켜주는 주기의 갯수를 달리하더라도 동일한 결과를 얻습니다. 위의 경우에, 두 주기를 포함시킨 결과에서 z=0.55 um 위치의 위상 값이 discontinuous 하게 보이는 것은 pi 와 -pi 로 그 값이 뛰기때문인데, 이들은 visualizer 상에서는 서로 다른 색깔로 표시되어 다른 값을 가지는 것처럼 보이지만 결국은 동일한 위상을 가리킵니다. 따라서, 한 주기를 시뮬레이션한 결과와 두주기를 시뮬레이션한 결과는 동일하다고 할 수 있습니다.

Visualizer 의 ‘Angle’ 은 이처럼 -pi/pi 에서 비연속적인 data format 을 가지는데, 만약 이를 연속적으로 표현해주려면 ‘unwrap’ 이라는 스크립트 명령어를 이용하면 됩니다. 첨부한 [ 시뮬레이션 파일 (278.2 KB) ]을 실행한 후 아래의 스크립트를 실행하면 unwrap 처리를 한경우와 하지 않은 경우의 차이점을 분명하게 볼 수 있습니다.

E=getresult(“monitor”,“E”);
Ex = pinch(E.Ex); # remove z-dimension
Ex = pinch(Ex,3,6); # select 6-th frequency point
x = E.x;
y = E.y;

theta1 = angle(Ex);
theta2 = unwrap(angle(Ex));

image(x1e6,y1e6,theta1,“x (um)”,“y (um)”,“Phase - wrapped”);
image(x1e6,y1e6,theta2,“x (um)”,“y (um)”,“Phase - unwrapped”);