Skip to content

오픈소스 RCWA / FDTD 광학 솔버 종합 조사 ​

조사일: 2026-02-11 | COMPASS 프로젝트 참고용


1. RCWA 솔버 ​

1.1 COMPASS에 이미 통합된 솔버 ​

솔버언어GPU / AD라이선스⭐ / 상태비고
torcwaPython/PyTorchCUDA / ✅ PyTorchLGPL~171 ⚠️ 저활성S-matrix, 메타서피스 역설계에 적합. 개발 정체
grcwaPython/autograd❌ / ✅ autogradGPL~94 ❌ 중단CPU 전용. 토폴로지 최적화. 사실상 방치
meentPython (NumPy/JAX/PyTorch)JAX·PyTorch / ✅MIT~112 ✅ 활발3개 백엔드 지원, ML 통합 최적. 한국 기업(KC-ML2) 개발

평가: meent가 라이선스(MIT), 유지보수, 유연성 면에서 가장 우수. grcwa는 장기적으로 통합 유지 재고 필요.

1.2 통합 후보 (높은 우선순위) ​

솔버언어GPU / AD라이선스⭐ / 상태핵심 강점
fmmaxPython/JAXJAX / ✅MIT~137 ✅ 활발최고 수준 벡터 FMM (Li 역규칙 확장), Brillouin zone 적분, 배칭 지원. AR/VR 광학
torchrditPython/PyTorchCUDA / ✅GPL-3.0~11 ✅ 활발고유값분해 불필요 (R-DIT), 기존 RCWA 대비 16.2× 속도향상, GDS import/export
S4 (phoebe-p fork)C++/Lua/Python❌ / ❌GPL-2.0~166 ⚠️ ForkRCWA 레퍼런스 구현, Li 역규칙, Solcore/RayFlare 통합. 25년 역사

fmmax 상세:

  • Meta Reality Labs에서 AR/VR 회절광학 설계용으로 개발
  • 4가지 벡터 FMM 공식 (Pol, Normal, Jones, Jones-direct) → 수렴성 최고
  • JAX JIT 컴파일 + 배칭으로 다중 구성 동시 계산
  • 이방성(anisotropic) 및 자성 재료 지원

torchrdit 상세:

  • 전통적 RCWA의 병목인 고유값분해를 제거한 R-DIT(Rigorous Diffraction Interface Theory)
  • PyTorch 기반 → 기존 torcwa 코드와 유사한 인터페이스 가능
  • 빠른 Fourier Factorization (POL, NORMAL, JONES, JONES_DIRECT)
  • 분산 재료 자동 유전율 피팅

1.3 특수 용도 / 참고용 ​

솔버언어GPU라이선스⭐핵심 특징
inkstonePython/NumPy❌AGPL-3.0~63텐서 유전율/투자율 (이방성, 자기광학, 자이로자성). 부분 재계산 최적화
nannosPython✅GPL-3.0~20다중 FMM 공식, AD, GPU 가속. GitLab 호스팅
rcwa_tfPython/TensorFlowCUDABSD-3~51TF 기반, Lorentzian broadening (그래디언트 안정화), 배치 최적화
rcwa (edmundsj)Python❌MIT~134refractiveindex.info 내장 DB, TMM+RCWA, 타원편광측정
EMUstackFortran/Python❌GPL-3.0~28하이브리드 2D-FEM + 산란행렬. 금속/플라즈모닉 구조에 강점
MESHC++❌(MPI)GPL-3.0~33RCWA + 열복사 전달 (근장/원장). Stanford Fan Group
RETICOLOMATLAB❌FreewareN/A산업계 표준 (Zeiss, Intel, Apple, Samsung). V10(2025.01) 이방성 지원. 25년 역사
rcwa4dPython❌MIT~40비정합 주기 (뒤틀린 이중층/moiré 구조). Stanford Fan Group
RCWA.jlJuliaCUDAGPL-3.0~46S-matrix + ETM, 고유값-free 알고리즘, CUDA 5× 속도향상
EMpyPython❌MIT~219TMM + RCWA + 모드 솔버. 가장 많은 GitHub 스타

2. FDTD 솔버 ​

2.1 COMPASS에 이미 통합된 솔버 ​

솔버언어GPU / AD라이선스⭐ / 상태비고
MeepC++/Python❌ / ✅ adjointGPL-2.0+~1,500 ✅ 활발가장 성숙한 오픈소스 FDTD. MPI 병렬화. GPU 미지원이 단점
flaport/fdtdPython/PyTorchCUDA / ✅ PyTorchMIT~650 ⚠️ 저활성교육/프로토타이핑용. 단순한 API. 고급 재료모델 부재
fdtdzC++/CUDA/JAXCUDA / ✅ JAXMIT~146 ✅ 활발Meep 대비 ~100× 속도. 2.5D 한정. 단순 유전체만 지원

평가: Meep = 범용 레퍼런스, fdtdz = 속도 특화(2.5D), flaport = 교육용. 범용 3D GPU FDTD가 부족.

2.2 통합 후보 (높은 우선순위) ​

솔버언어GPU / AD라이선스⭐ / 상태핵심 강점
FDTDXPython/JAXJAX 멀티GPU / ✅MIT~203 ✅ 매우 활발대규모 3D 역설계 최적. 멀티GPU. Maxwell 시간역행 활용 메모리 효율적 그래디언트. JOSS 출판
Khronos.jlJuliaCUDA/ROCm/Metal/OneAPI / ✅MIT~66 ✅ 활발멀티벤더 GPU (NVIDIA+AMD+Apple+Intel). 순수 Julia. 미분가능
cevichePython/autograd❌ / ✅MIT~390 ⚠️ 저활성미분가능 EM의 선구자. 2D FDFD+FDTD. Stanford Fan Group

FDTDX 상세:

  • JAX 기반 완전 미분가능 3D FDTD
  • 멀티GPU 스케일링 → 수십억 그리드셀 시뮬레이션 가능
  • Maxwell 방정식의 시간 가역성을 활용한 메모리 효율적 그래디언트
  • JOSS(Journal of Open Source Software) 출판 (2025)
  • MIT 라이선스 + 활발한 개발 → 장기 통합에 유리

Khronos.jl 상세:

  • Meta Research 개발
  • 유일한 멀티벤더 GPU 지원 (CUDA, ROCm, Metal, OneAPI)
  • KernelAbstractions.jl 기반으로 벤더 독립적 GPU 코드
  • DFT 모니터 + 수렴 기반 자동 중단
  • Julia 생태계 의존성이 단점

2.3 특수 용도 / 참고용 ​

솔버언어GPU라이선스⭐핵심 특징
openEMSC++/MATLAB/Python❌(OpenMP/MPI)GPL-3.0~628EC-FDTD, 원통좌표, RF/안테나/마이크로파 특화
gprMaxPython/CythonCUDAGPL-3.0~788GPR(지중레이더) 특화, CUDA 30× 속도향상. 토양 모델
EMOPTPython/C❌(MPI)BSD-3~110FDFD(2D/3D) + CW-FDTD, 형상 최적화 (경계 스무딩), 인접법
fdtd3dC++CUDA/MPIGPL-3.0~150MPI+OpenMP+CUDA, 크로스 아키텍처 (x64/ARM/RISC-V/Wasm)
GSvitC/C++CUDAGPL-2.0N/A나노스케일 광학 (SNOM, 거칠기), GPU 가속
Luminescent.jlJuliaCUDAMIT~60미분가능 FDTD (Zygote.jl), 반도체 포토닉스+음향+RF
AngoraC++❌GPLSmall생의학 산란 특화

2.4 상용 / 비오픈소스 (참고) ​

솔버비고
Tidy3D (Flexcompute)Python 클라이언트는 LGPL이나 연산 엔진은 상용 클라우드. 로컬 실행 불가. 매우 빠름
Lumerical (Ansys)완전 상용. 산업 표준 GUI. CUDA GPU 솔버. 학술 할인 있음

3. 기술 트렌드 분석 ​

3.1 미분가능 EM 시뮬레이션 (Differentiable EM) ​

2024-2026 가장 큰 트렌드. 역설계(inverse design)와 토폴로지 최적화를 위해 AD(자동미분) 내장이 필수화되는 추세.

세대대표 솔버AD 프레임워크성능
1세대 (2019)ceviche, grcwaautograd (CPU)느림, 2D
2세대 (2021-23)torcwa, flaport/fdtdPyTorchGPU 가속, 3D 제한적
3세대 (2024-26)fmmax, FDTDX, fdtdz, meentJAXJIT+멀티GPU, 대규모 3D

결론: JAX 생태계가 EM 솔버의 주류로 부상. PyTorch 기반도 건재하나, JAX의 JIT 컴파일 + vmap + pmap이 EM 시뮬레이션에 더 적합.

3.2 GPU 가속 현황 ​

접근법솔버 예시속도향상
PyTorch CUDAtorcwa, flaport5-20×
JAX JIT+CUDAfmmax, FDTDX, fdtdz, meent10-100×
커스텀 CUDA 커널fdtdz~100× (Meep 대비)
Julia CUDA.jlKhronos.jl, RCWA.jl5-10×
멀티GPUFDTDX, Khronos.jl선형 스케일링

3.3 라이선스 분포 ​

라이선스솔버 수상용 활용
MIT10 (meent, fmmax, fdtdz, FDTDX, ceviche, rcwa4d, EMpy, flaport, Khronos.jl, Luminescent.jl)✅ 자유
BSD-32 (rcwa_tf, EMOPT)✅ 자유
GPL/LGPL12+ (torcwa, grcwa, S4, nannos, RCWA.jl, Meep, openEMS, gprMax, torchrdit 등)⚠️ 제한적
AGPL1 (inkstone)❌ 매우 제한적

4. COMPASS 통합 권장사항 ​

Tier 1: 강력 추천 (MIT 라이선스, 활발한 개발, 높은 성능) ​

솔버유형이유
fmmaxRCWAMIT, Meta 지원, 최고 수렴성 (벡터 FMM), JAX 배칭. meent의 JAX 백엔드와 시너지 가능
FDTDXFDTDMIT, 멀티GPU 3D, 완전 미분가능, JOSS 출판. fdtdz의 2.5D 한계를 보완

Tier 2: 검토 권장 (특수 강점) ​

솔버유형이유
torchrditRCWA(R-DIT)고유값분해 제거로 대폭 속도향상. GPL이 걸림돌
S4 (phoebe-p fork)RCWAC++ 성능의 레퍼런스 구현. 검증용으로 유용. GPL
cevicheFDTD/FDFD2D 미분가능 EM. 빠른 프로토타이핑용. MIT

Tier 3: 장기 관찰 ​

솔버유형이유
Khronos.jlFDTD멀티벤더 GPU가 매력적이나 Julia 의존성
inkstoneRCWA텐서 유전율 지원이 유일하나 AGPL
Luminescent.jlFDTDJulia 미분가능 FDTD. 아직 초기 단계

기존 통합 솔버 평가 ​

솔버유지 권장비고
meent ✅적극 유지MIT, 활발, 3개 백엔드, 최고의 유연성
torcwa ⚠️유지하되 주시LGPL, 개발 정체. meent로 대체 가능성
grcwa ❌폐기 검토GPL, 2020년 이후 중단. CPU 전용. 열위
Meep ✅적극 유지범용 레퍼런스. GPU 미지원이 아쉬움
flaport ⚠️유지하되 주시MIT, 저활성. 교육/프로토타입용으로만 가치
fdtdz ✅유지MIT, Google 지원, 극한 속도. 2.5D 한계 인지

5. 전체 솔버 요약표 ​

RCWA (20개) ​

#솔버언어GPU / AD라이선스⭐ / 상태
1meentPy (NumPy/JAX/PyTorch)✅ / ✅MIT112 ✅ 활발
2fmmaxPy/JAX✅ / ✅MIT137 ✅ 활발
3torcwaPy/PyTorch✅ / ✅LGPL171 ⚠️
4S4C++/Lua/Py❌ / ❌GPL-2.0166 ⚠️ Fork
5EMpyPy❌ / ❌MIT219 ✅
6rcwa (edmundsj)Py❌ / ❌MIT134 ⚠️
7grcwaPy/autograd❌ / ✅GPL94 ❌ 중단
8inkstonePy/NumPy❌ / ❌AGPL63 ⚠️
9rcwa_tfPy/TF✅ / ✅BSD-351 ⚠️
10RCWA.jlJulia✅ / ❌GPL-3.046 ✅
11rcwa4dPy❌ / ❌MIT40 ⚠️
12MESHC++❌ / ❌GPL-3.033 ⚠️
13EMUstackFortran/Py❌ / ❌GPL-3.028 ⚠️
14nannosPy✅ / ✅GPL-3.020 ⚠️
15torchrditPy/PyTorch✅ / ✅GPL-3.011 ✅
16RETICOLOMATLAB❌ / ❌FreewareN/A ✅
17PPMLMATLAB❌ / ❌FreeN/A ⚠️
18-20교육용 3종Py❌ / ❌Various<10 ⚠️

FDTD (17개) ​

#솔버언어GPU / AD라이선스⭐ / 상태
1MeepC++/Py❌ / ✅ adjGPL-2.0+1,500 ✅ 활발
2gprMaxPy/CythonCUDA / ❌GPL-3.0788 ✅
3flaport/fdtdPy/PyTorch✅ / ✅MIT650 ⚠️
4openEMSC++❌ / ❌GPL-3.0628 ✅
5cevichePy❌ / ✅MIT390 ⚠️
6FDTDXPy/JAX✅ 멀티 / ✅MIT203 ✅ 매우 활발
7Tidy3DPy☁️ / ✅LGPL/상용164 ✅ (비오픈소스)
8fdtd3dC++CUDA·MPI / ❌GPL-3.0150 ✅
9fdtdzC++/CUDA/JAX✅ / ✅MIT146 ✅
10EMOPTPy/C❌ / ✅ adjBSD-3110 ⚠️
11PhotonTorchPy/PyTorch✅ / ✅MIT81 ⚠️ (회로 시뮬)
12Khronos.jlJulia✅ 멀티벤더 / ✅MIT66 ✅
13Luminescent.jlJulia✅ / ✅MIT60 ✅
14GSvitC/C++CUDA / ❌GPL-2.0N/A ✅
15AngoraC++❌ / ❌GPLSmall ⚠️
16MaxwellFDTD.jlJulia❌ / ❌N/ASmall ⚠️
17REMSRust❌ / ❌N/ATiny ❌ (1D PoC)

RCWA vs FDTD 솔버 비교

RCWA와 FDTD 솔버의 양자 효율(QE) 시뮬레이션 곡선을 비교합니다. 픽셀 피치와 솔버 매개변수를 조정하여 결과와 성능 변화를 확인하세요.

RCWA (Fourier 차수 = 9)
0%20%40%60%80%100%400500600700파장 (nm)QE (%)빨강초록파랑
FDTD (격자 = 20 nm)
0%20%40%60%80%100%400500600700파장 (nm)QE (%)빨강초록파랑
RCWA
예상 시간:137 ms
메모리:6 MB
주기 구조:예
임의 형상:제한적
FDTD
예상 시간:188 ms
메모리:3 MB
주기 구조:예
임의 형상:예
일치도
최대 |Delta QE|:2.2%
평균 |Delta QE|:0.9%
상태:양호한 일치

참고: Rust 기반 RCWA 솔버는 현재(2026) 존재하지 않음. FDTD는 1D PoC(REMS)만 존재.