Home Science Coding Design Etc. AboutMe

물리학과 학부졸업논문 소개 - Development of FDTD simulation using MATLAB

Nov. 23, 2019   /   6 mins read   /  

물리학과 졸업요건 (학부 졸업논문 포스터)

학부 때 저는 물리학화학을 복수전공 했습니다. 두 과 모두 졸업요건으로 졸업논문 발표가 있었는데요. 학부과정동안 배운 내용을 토대로 포스터를 만들고, 사람들 앞에서 발표하는 형식입니다. 학부 졸업인데 말만 들어보면 굉장히 거창해 보이네요. 그렇지 않다는 걸 깨닫는 건 대학원 진학 후에 금방 알게 됐습니다. ^^;;


다음과 같은 것들을 만들고, 결과물들을 모아 포스터로 발표했습니다.

FDTD simulation @ MatLab

유전율이 1.5인 1 cm 두께의 물질을 투과할때, 시간 영역(time domain)에서의 변화(위) 및 주파수 영역(frequency domain)에서의 반사/투과율(아래)


학부 졸업논문이 무슨 큰 의미를 갖는 것도 아니지만 제 나름대로 열심히 준비했던 자료인데 그냥 묻혀만 두긴 아쉽더군요. 그런 의미에서 오늘은 제가 물리학과에서 발표한 졸업논문을 간단하게 소개 겸 기록해 놓으려 합니다. 혹시라도 어디선가 헤매고 있을 물리학도가 있다면 도움이 될 지도 모르니까요. 그런데 초라한 학부졸업논문 까려니까 부끄럽네요. 음..😐





같은 자연과학이니까 공통점이 있지 않을까?

과가 다르니 다른 점도 있지만 같은 자연과학 순수학문이니까 공통점으로 겹치는 부분도 제법 있었습니다. 이런 점을 적극 활용해서, 사실 당시에는 2개 다 퉁쳐서 할 수 있겠구나(...) 라는 생각에 공통되는 부분을 발표에 담기로 했었죠. 물론 그래도 메인 주제는 다르긴 합니다.

어찌되었건, 저는 화학과에서 SERS (Surface Enhanced Raman Spectroscopy, 표면증강라면분광법)라는 주제로 연구를 진행하고 있었습니다. SERS의 증강효과는 전기장의 세기에 4제곱에 비례함이 알려져 있습니다. [1]

즉, 시간에 따라 전기장이 어떻게 변화하는 가?를 관찰할 필요가 있었습니다. 그리고 이런 툴이 바로 FDTD (Finite-Difference Time-Domain) method 입니다. 한국어로는 대략 유한차분시간영역법 정도로 읽습니다.




대학교 3학년 때 배운 MATLAB

그러고보니 대학교 3학년 때 MATLAB을 배웠던 게 있었습니다. 물리학과 지도교수님과 의논하여, 졸업논문 주제를 MATLAB을 이용해서 FDTD 시뮬레이션을 구현하기로 정했습니다.

우선 목표는 화학과에서 써봤던 FDTD 프로그램처럼 3d 버전으로 개발하는 것이었습니다. 프로그램을 만들어서 라이센스 달고 팔릴 정도로 코드를 짜는게 첫번째 목적이었습니다. (정확히는 그 프로그램에서 부족한 부분을 충당하기 위해...? 원하는 기능이 없었습니다.)

당시에도 농담 반 진담 반이긴 했지만, 그만큼 정말 그럴싸 한 프로그램을 만드는 게 목표였습니다. 결과는... 😂



전자기학, Maxwell's Equation

FDTD은 시간에 따라 전자기장의 세기를 보여주는 것이니, 기본적으로 전자기학 지식이 필요하더군요.

우선 맥스웰 방정식 (Maxwell's Equation)이 필요합니다. 고전역학은 뉴턴의 $$\vec{F} = m\vec{a}$$, 양자역학은 슈뢰딩거의 방정식(Schrodinger equation)이 대표한다면, 전자기학은 맥스웰 방정식이 핵심이라고 할 수 있죠.



전기장과 자기장이 서로 상호작용하고 있다는 사실은 매우 중요합니다. 자연계에서는 전기장(E)과 자기장(B)이 끊임없이 변화하며 전자기장이라는 형태로 보여지거든요.

그것을 나타낸 식이 오른쪽의 두 식입니다. 역삼각형() 그리고 곱셈 기호(×)랑 E, B가 쓰여있는 식이요. (각각 Nabla, Cross)

오른쪽 두 식의 핵심은 자기장(B)의 시간에 따른 변화가 전기장(E)을 형성하고, 전기장(E)의 시간에 따른 변화가 다시 자기장(B)을 형성한다는 것 입니다. (엄밀하게는 전류 및 자화율과 유전율을 고려해야 합니다. 본문에서 다루려는 부분이 아니므로 생략하겠습니다.)




시뮬레이션과 한정된 컴퓨터 리소스 - 어떻게 ∂/∂t를 구현할 것인가

그런데 이것을 시뮬레이션으로 표현할 때 문제가 발생합니다. 실제 자연계의 전자기장을 구현하려면 미분(∂/∂t)을 사용해야 하는데, 즉, 시간을 무한히 쪼개야 하는 문제가 발생합니다.

결국, 한정된 컴퓨터 리소스때문에 미분 대신 적당히 작은 (거의 0에 가까운) 시간간격(Δt)로 타협을 봐야하죠.

이러한 아이디어가 바로 Finite-Difference Time-Domain입니다.

  1. 초기 조건을 넣어주고, 맥스웰 방정식을 풀어서 적당~히 작은 시간 (Δt) 뒤의 변화한 결과를 얻습니다.
  2. 이 때 얻은 결과를 이용, 다시 맥스웰 방정식을 풀어서 적당~히 작은 시간 (Δt) 뒤의 변화한 결과를 얻습니다.
  3. 이 과정을 계속 반복합니다. 언제까지? 원하는 결과 얻을 때까지요.

FDTD는 이런 방식으로 시간에 따른 전기장(E)과 자기장(B)의 변화를 보여줍니다.

작은 시간간격(Δt, 한 스텝)마다 각 필드의 전기장, 자기장을 계산한다.




시뮬레이션과 한정된 컴퓨터 리소스 - 어떻게 실제 공간에서의 물리적 현상의 연속 분포를 구현할 것인가

이제 시간에 대해서는 어느정도 해결한 것 같습니다. 그런데 공간을 어떻게 분석할 지도 생각을 좀 해봐야겠네요.

우리가 관심있는 실제 자연계에서 어떠한 물리적 현상들은 위 첫번째 이미지(Real physical phenomenon)처럼 연속적입니다. 예를 들어 온도분포나, 등고선, 기압 분포처럼요. 이러한 분포를 시뮬레이션으로 표현하려면 또 문제가 발생합니다. 앞서 시간을 미분할 때와 비슷한 맥락인데요, 이번엔 공간을 무한히 쪼개야 하는 문제가 있습니다.

그래서 이번에는 공간을 적당히 작은 크기(Δx, Δy, Δz)의 격자(grid)로 나누는 방식을 활용합니다. 그리고 이렇게 만들어진 것들을 하나의 cell(또는 dot)로 표현합니다.


Yee's Grid

여기서 Kane S. Yee라는 사람이 1966년에 한가지 아이디어를 고안합니다.



변화하는 전기장과 자기장을 계산할 때 필연적으로 Curl 연산(×E, ×B)의 결과를 구해야 하는데요.

이러한 Curl 연산을 통해 특정 cell의 전기장(E)을 구하려면 인접한 주변의 자기장(B)에 대해 알아야합니다. 그러다 보니 전기장에 대한 cells과 자기장에 대한 cells을 따로 분리하고, 이를 엇빗겨놓으면 한점에서 전기장, 자기장을 모두 계산할 때 보다 계산이 매우 쉬워집니다.

위 그림의 가장 왼쪽이 포개진 cell, 그리고 가운데와 오른쪽이 cell을 엇빗겨놓은 형태입니다. 보다시피 curl(Ez)을 계산할 때 필요한 HxHy가 동일평면 상에 놓이게 됩니다. (오른쪽 그림의 빨간 원으로 표현된 부분). 마찬가지로 자기장을 계산할때도 동일평면에 위치하므로 계산이 한결 쉬워지죠.

이렇게 엇빗겨놓은 cell 구조를 제안한 Kane S. Yee의 이름을 따서 Yee's grid라고 부릅니다. [2]


이러한 내용들을 토대로 2D FDTD Simulation을 통해, 광학에서의 기본적인 물리 현상들을 시뮬레이션 해보았습니다. 차례대로 얇은 막 간섭, 두 점 파원에서의 간섭무늬, 매질의 굴절률이 변화하는 지점에서의 반사 및 굴절 현상, 초점 거리 F의 볼록 렌즈에 대해 테스트 해보였습니다.






혹시 궁금하신 점 있으면, 메일이나 댓글 남겨주세요. 지금까지 읽어주셔서 감사합니다. 😀



Reference

[1] Physics Review Letter 1997, 78, 1667

[2] IEEE Transactions on Antennas and Propagation 1966, 14, 302-307