2편에서는 정이십면체를 세분해 삼각형 주 격자와 오각형·육각형 쌍대 격자를 만들고 방향 있는 모서리의 순환으로 $\nabla\times$를 계산하는 방법을 정했습니다. 이제 이 공간 연산자를 시간에 따라 움직여야 합니다. 이번 편의 질문은 네 전자기장 성분을 어디에 놓고 어떤 순서로 갱신해야 파동이 구면을 따라 전파하는가다.
핵심은 모든 값을 한곳에 겹쳐 두지 않는 데 있습니다. 전기장과 자기장을 서로 다른 셀과 반경 평면에 놓고 시간에서도 반 스텝씩 어긋나게 갱신합니다. 이 배치가 정해지면 한 스텝은 네 개의 유한한 연산으로 정리됩니다.
TM-r와 TE-r 평면에서 전기장과 자기장의 배치
TM과 TE라는 이름부터 풀어 보자. 여기서는 지구 중심에서 바깥쪽으로 향하는 방사 방향 $r$을 기준으로 삼습니다. TM-r(transverse magnetic to $r$) 평면에서는 자기장이 방사 방향을 향하지 않으므로 $H_r$가 없고 대신 방사 전기장 $E_r$와 구면에 접한 자기장 $H_t$를 계산합니다. TE-r(transverse electric to $r$) 평면에서는 반대로 $E_r$가 없으며 방사 자기장 $H_r$와 접선 전기장 $E_t$를 계산합니다.
TM-r 평면은 오각형·육각형 셀로 이루어집니다. 각 셀의 중심에는 $E_r$가 있고 셀을 둘러싼 모서리에는 $H_t$가 놓입니다. 육각형이라면 여섯 개, 오각형이라면 다섯 개의 $H_t$가 하나의 $E_r$를 감싸는 구조입니다. 앙페르 법칙을 적용할 때는 이 $H_t$들을 셀 둘레 방향에 맞춰 더해 중심의 $E_r$를 갱신합니다.
TE-r 평면은 삼각형 셀로 이루어집니다. 삼각형은 TM 셀의 꼭짓점을 중심으로 만들어지고 중심에는 $H_r$, 세 모서리에는 $E_t$가 놓입니다. 이번에는 세 $E_t$의 순환으로 중심의 $H_r$를 갱신합니다. TE-r 평면은 TM-r 평면보다 방사 방향으로 반 층 떨어져 있습니다. 두 평면을 같은 자리에 겹치는 대신 서로 엇갈리게 쌓아 한쪽의 장이 다른 쪽 갱신에 바로 쓰이게 만든 것입니다.
이 두 평면을 방사 방향으로 번갈아 쌓으면 3차원 격자가 됩니다. 공간에서는 TM-r와 TE-r 평면이 반 층씩 어긋나고 시간에서는 전기장과 자기장이 반 스텝씩 어긋납니다. 먼저 현재 전기장으로 자기장을 반 스텝 앞으로 보내고 갱신된 자기장으로 전기장을 다음 정수 시각까지 보냅니다. 이것이 직교 Yee 격자의 개구리 뜀뛰기(leapfrog)를 구면의 오각형·육각형–삼각형 격자로 옮긴 모습입니다.
네 번의 업데이트
한 스텝은 결국 네 개의 갱신으로 이뤄집니다. 각각은 맥스웰 방정식의 두 법칙(패러데이 전자기 유도 법칙과 앙페르·맥스웰 법칙)을 격자 위에서 적분 형태로 쓴 다음, 그에 딸린 길이나 면적으로 나눈 것입니다. 복잡한 수식 대신, 각 갱신이 무엇을 무엇으로 미는지만 그림과 함께 짚어 봅니다.
① 접선 자기장 $H_t$ — 모서리를 사이에 둔 두 지점의 $E_r$ 차이(표면 방향 기울기)와 위아래 평면에 놓인 $E_t$의 차이(방사 방향 변화)를 합쳐 $H_t$를 전진시킵니다.
② 방사 자기장 $H_r$ — 삼각형 하나의 세 모서리를 따라 $E_t$를 한 바퀴 돌며 더한 값(순환)을 삼각형 넓이로 나눕니다. 딱 패러데이 법칙(“자기장의 변화는 둘레를 도는 전기장의 순환”) 그대로입니다.
③ 방사 전기장 $E_r$ — 이번엔 앙페르 법칙입니다. 쌍대 셀(오각형 또는 육각형)의 둘레를 따라 $H_t$를 한 바퀴 돌아 더하고 셀 넓이로 나눕니다. 파원 전류 $J_r$는 바로 이 자리에서 더해집니다.
④ 접선 전기장 $E_t$ — 모서리를 가로지르는 두 삼각형 중심의 $H_r$ 차이에서 위아래 평면의 $H_t$ 차이를 뺀 값으로 $E_t$를 전진시킵니다.
전도성이 있는 물질에서는 파동이 흡수되며 감쇠하는데, 이 손실은 전기장 갱신에 들어가는 두 개의 계수로 미리 계산해 둡니다. 위치마다 물질이 달라도 시간 루프 안에서 조건 분기 없이 곱셈만으로 처리되도록 한 것입니다.
반경 간격은 균일할 필요가 없다
수평 방향 연결 관계는 모든 층이 공유하지만 방사 방향 노드 간격까지 똑같을 이유는 없습니다. 이 점을 활용하면 해수면 근처의 얇은 이상 구조는 1.25 km처럼 촘촘하게 나누고 멀리 떨어진 곳은 훨씬 성긴 간격으로 둘 수 있습니다.
다만 공짜는 아닙니다. 가장 좁은 방사 간격이 전체 시간 간격의 한계를 정합니다. 시간 간격을 너무 크게 잡으면 계산이 발산해 버리기 때문에 FDTD에는 안정성을 지키는 상한(쿠랑 조건)이 있습니다. 이 구현은 가장 작은 주 모서리, 쌍대 모서리, 방사 간격을 모두 반영해 보수적인 상한을 추정하고 사용자가 그보다 큰 시간 간격을 요청하면 조용히 불안정한 계산을 돌리는 대신 아예 거부합니다. 평평한 격자에서 쓰는 단순한 조건만으로는 이 불규칙한 구면 격자의 실제 사정을 담아낼 수 없기 때문입니다.
격자에 스냅하지 않는 파원
성긴 격자에서 파원을 다룰 때 흔한 함정이 하나 있습니다. 파원을 가장 가까운 격자점에 그냥 갖다 붙이면, 그 어긋남이 수백에서 수천 킬로미터에 이를 수 있습니다. 위치가 곧 물리인 문제에서 이건 그냥 넘길 오차가 아닙니다.
그래서 파원은 격자점에 반올림하는 대신 가중치로 흩뿌립니다. 수평 방향으로는 파원을 품은 삼각형의 세 꼭짓점에 무게중심 가중치로 나눠 담고 방사 방향으로는 위아래 두 평면에 선형 가중치로 나눕니다. 이 둘을 곱하면 최대 여섯 개의 자리에 걸친 가중치가 나오고 그 합은 정확히 1이 됩니다. 파원이 마침 어떤 평면 위에 정확히 놓이면 방사 방향은 한 층으로 줄어듭니다.
핵심은 파원이 배열의 인덱스가 아니라 물리적 위치를 가리키게 한다는 것입니다. 격자를 더 촘촘하게 하거나 불균일하게 바꿔도 파원의 정의는 그대로 유지됩니다.
무엇이 맞고, 무엇이 남았나
전 지구 격자에는 수치 오차를 뒤로 흘려보낼 흡수 경계층이 없습니다. 닫힌 구면에서는 파동이 행성을 한 바퀴 돌아 다시 계산 영역으로 들어오므로 위상 오차와 방향 편향이 계속 누적됩니다. 그래서 한두 장의 그럴듯한 장 분포보다 격자 수렴성과 수신기 파형을 통한 검증이 중요합니다.
격자 테스트는 격자가 제대로 닫혀 있는지, 오각형·육각형의 이웃 관계와 방향이 맞는지, 넓이 합이 $4\pi$로 닫히는지를 확인합니다. 풀이기 테스트는 정지 상태에서 장이 0으로 유지되는지, 파원이 유한한 장을 만드는지, 물질 손실로 감쇠가 일어나는지, 파원의 전류 모멘트가 보존되는지, 불균일 방사 간격이 동작하는지, 불안정한 시간 간격이 거부되는지를 확인합니다. NumPy와 PyTorch 두 구현이 여러 스텝 뒤에도 배정밀도로 일치하는지도 검사합니다.
더 어려운 시험은 전 지구 검증입니다. 파형의 모양과 균질 모델의 수렴성은 고무적이고 격자에서 비롯되는 방향 비대칭은 격자를 촘촘히 할수록 줄어듭니다. 논문급인 세분화 레벨 7 격자에서는 측정된 방향 편차가 관측 대역 전체에서 0.295% 아래에 머뭅니다. 반면 지형을 반영한 실제 모델에서는 동서 비대칭이 물리적으로 뚜렷하게 되살아나지만 발표된 그림과 피크의 순서·간격까지 그대로 맞추지는 못했고 엄격한 감쇠 허용 오차도 통과하지 못했습니다. 오차의 원인은 부동소수점 정밀도만이 아니라, 지구물리 입력의 불확실성과 유한한 방사·지각 모델링, 그리고 격자에서 생기는 수치 분산이 함께 얽혀 있습니다.
그래서 시간 갱신과 검증은 떼어 놓고 볼 수 없습니다. 위상적으로 완벽하게 옳은 갱신식이라도, 수치적으로는 여전히 덜 촘촘하거나 불안정할 수 있습니다.
다음 4편에서는 이 네 개의 갱신식을 NumPy로 옮깁니다. 특히 오각형과 육각형의 순환을 파이썬 반복문 없이 한 번에 계산하게 해 주는 접속 표(incidence table)를 이용한 벡터화 기법을 다룹니다.