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/NumPyAGPL-3.0~63텐서 유전율/투자율 (이방성, 자기광학, 자이로자성). 부분 재계산 최적화
nannosPythonGPL-3.0~20다중 FMM 공식, AD, GPU 가속. GitLab 호스팅
rcwa_tfPython/TensorFlowCUDABSD-3~51TF 기반, Lorentzian broadening (그래디언트 안정화), 배치 최적화
rcwa (edmundsj)PythonMIT~134refractiveindex.info 내장 DB, TMM+RCWA, 타원편광측정
EMUstackFortran/PythonGPL-3.0~28하이브리드 2D-FEM + 산란행렬. 금속/플라즈모닉 구조에 강점
MESHC++❌(MPI)GPL-3.0~33RCWA + 열복사 전달 (근장/원장). Stanford Fan Group
RETICOLOMATLABFreewareN/A산업계 표준 (Zeiss, Intel, Apple, Samsung). V10(2025.01) 이방성 지원. 25년 역사
rcwa4dPythonMIT~40비정합 주기 (뒤틀린 이중층/moiré 구조). Stanford Fan Group
RCWA.jlJuliaCUDAGPL-3.0~46S-matrix + ETM, 고유값-free 알고리즘, CUDA 5× 속도향상
EMpyPythonMIT~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 Solver Comparison

Compare simulated quantum efficiency (QE) curves from RCWA and FDTD solvers. Adjust pixel pitch and solver parameters to see how results and performance change.

RCWA (Fourier order = 9)
0%20%40%60%80%100%400500600700Wavelength (nm)QE (%)RedGreenBlue
FDTD (grid = 20 nm)
0%20%40%60%80%100%400500600700Wavelength (nm)QE (%)RedGreenBlue
RCWA
Time estimate:137 ms
Memory:6 MB
Periodic structures:Yes
Arbitrary geometry:Limited
FDTD
Time estimate:188 ms
Memory:3 MB
Periodic structures:Yes
Arbitrary geometry:Yes
Agreement
Max |Delta QE|:2.2%
Avg |Delta QE|:0.9%
Status:Good agreement

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