RCWA 상세 설명
RCWA(엄밀 결합파 해석법)는 COMPASS의 두 가지 주요 솔버 유형 중 하나입니다. 픽셀 구조를 공간 주파수 성분(푸리에 급수)으로 분해한 다음, 각 성분에 대해 맥스웰 방정식을 푸는 방법이라고 생각하면 됩니다. 픽셀 배열과 같은 주기 구조에 특히 빠릅니다.
엄밀 결합파 해석법(Rigorous Coupled-Wave Analysis, RCWA)은 COMPASS의 주요 솔버 방법입니다. 주파수 영역에서 전기장을 푸리에 고조파(Fourier Harmonics)로 전개하여 주기 구조에 대한 맥스웰 방정식을 풉니다.
핵심 개념
RCWA는 문제를 두 부분으로 분해합니다:
- 수평 방향(xy): 주기적인 유전율과 전기장을 절단된 푸리에 급수로 전개합니다.
- 수직 방향(z): 각 층 내에서 푸리에 계수가 만족하는 결합 상미분방정식(Coupled ODE) 계를 고유값 분해(Eigendecomposition)로 풉니다.
그런 다음 산란 행렬(S-matrix) 재귀를 사용하여 모든 계면에서의 경계 조건을 적용하며 층을 연결합니다.
단계별 알고리즘
1. 유전율의 푸리에 전개
주기
여기서
COMPASS에서 푸리에 차수는 솔버 설정에서 지정합니다:
solver:
name: torcwa
params:
fourier_order: [9, 9] # Nx=Ny=9 -> 19x19 = 361 harmonics2. 고유값 문제
각 층 내에서 푸리에 전개를 맥스웰 방정식에 대입하면, 차원이
행렬
균일한 층의 경우,
3. S 행렬 재귀
개별 층의 S 행렬은 **레드헤퍼 스타곱(Redheffer Star Product)**을 사용하여 결합되며, 이는 전달 행렬(T-matrix) 연쇄의 수치적 불안정성을 방지합니다:
여기서
4. 전기장 계산
전역 S 행렬을 구하면, 반사 및 투과 회절 차수를 직접 구할 수 있습니다:
여기서
푸리에 인수분해
RCWA의 수렴성은 유전율의 푸리에 계수를 계산하는 방법에 결정적으로 의존합니다. 급격한 재료 경계(예: 금속 격자)가 있는 구조에서는 기존 방법으로 TM 편광에 대한 수렴이 느립니다.
**리의 역규칙(Li's Inverse Rule)**은 적절한 전기장 성분에 대해
| 인수분해 방법 | 적용 조건 | COMPASS 설정 |
|---|---|---|
| 나이브(로랑 규칙) | 연속 유전율 프로파일 | fourier_factorization: "naive" |
| 리 역규칙 | 불연속 경계 (금속 격자, DTI) | fourier_factorization: "li_inverse" |
| 법선 벡터법 | 복잡한 2D 패턴 | fourier_factorization: "normal_vector" |
수렴성
RCWA의 정확도는 푸리에 차수가 증가함에 따라 개선되지만, 연산 비용도 함께 증가합니다(고유값 문제의 스케일링이 fourier_order를 3에서 25까지 변화시키며 QE 대 차수를 도시합니다:
RCWA Convergence Demo
See how increasing the Fourier order N improves the accuracy of permittivity reconstruction and RCWA reflectance/transmittance convergence for a binary grating.
solver:
convergence:
auto_converge: true
order_range: [5, 25]
qe_tolerance: 0.011 um 피치 픽셀에 간단한 컬러 필터 패턴이 있는 경우, 차수 9가 일반적으로 충분합니다. 더 미세한 구조(금속 격자, DTI)의 경우 차수 15~21이 필요할 수 있습니다.
COMPASS의 RCWA 솔버
COMPASS는 세 개의 RCWA 라이브러리를 래핑합니다:
| 솔버 | 라이브러리 | GPU 지원 | 비고 |
|---|---|---|---|
torcwa | torcwa | CUDA (PyTorch) | 기본값. GPU 가속 스윕에 최적. |
grcwa | grcwa | CUDA (JAX/PyTorch) | 대안 GPU 백엔드. |
meent | meent | CUDA/CPU | 해석적 고유값 분해 지원. |
세 솔버 모두 동일한 SolverBase 인터페이스를 구현하므로, 설정 파일에서 solver.name만 변경하면 솔버를 전환할 수 있습니다.