Skip to content

COMPASS픽셀 설정 하나, 9개의 EM 솔버, 교차 검증.

오픈소스 CMOS 이미지 센서 광학 플랫폼 — 픽셀 스택을 한 번 정의하면 9개의 RCWA/FDTD/TMM 백엔드로 QE·크로스토크·필드 맵을 교차 검증합니다.

COMPASS

COMPASS를 선택하는 이유 ​

COMPASS는 전자기 이론과 실용적인 CMOS 이미지 센서 설계 사이의 간극을 해소합니다. 픽셀 스택을 한 번 정의하고, 모든 솔버로 실행하고, 결과를 비교하세요 -- 모두 Python에서 가능합니다.

멀티 솔버 엔진

하나의 YAML 설정으로 동일한 픽셀 구조를 RCWA(torcwa, grcwa, meent, fmmax)와 FDTD(flaport, Meep, fdtdz) 솔버로 실행합니다. 결과를 직접 비교할 수 있습니다.

GPU 가속

PyTorch 및 JAX GPU 백엔드를 활용하여 대규모 병렬 파장 스윕을 수행합니다. 넓은 파라미터 공간에서 CPU 전용 솔버 대비 10-100배 속도 향상을 달성합니다.

dJ/dx

미분 가능 시뮬레이션

솔버를 통한 자동 미분으로 기울기 기반 역설계가 가능합니다. 마이크로렌즈 프로파일, BARL 스택, 컬러 필터 두께를 직접 최적화할 수 있습니다.

OK

교차 검증

내장된 솔버 비교 프레임워크로 물리적 정확성을 보장합니다. 에너지 균형(R+T+A=1), QE 스펙트럼, 필드 분포를 솔버 간 비교합니다.

풍부한 분석

픽셀별/파장별 QE, 크로스토크 행렬, 에너지 균형, 필드 분포를 계산합니다. 내장된 matplotlib 및 3D PyVista 뷰어로 결과를 시각화합니다.

오픈 소스

MIT 라이선스. 이론 가이드, 쿡북, API 레퍼런스가 포함된 완전한 문서를 제공합니다. 확립된 오픈 소스 EM 솔버 생태계 위에 구축되었습니다.

아키텍처 ​

깔끔한 5단계 파이프라인이 YAML 설정에서 출판 가능한 결과까지 안내합니다. 각 단계를 클릭하면 자세히 알아볼 수 있습니다.

1설정YAML픽셀 스택광원솔버 파라미터2기하학PixelStack마이크로렌즈컬러 필터실리콘 + DTI3솔버SolverBaseRCWAFDTDTMM4분석analysis/QE 계산에너지 균형비교5결과HDF5 / PlotQE 스펙트럼필드 맵크로스토크

솔버 백엔드 ​

COMPASS는 세 가지 전자기 방법에 걸쳐 9개 솔버 백엔드에 대한 통합 인터페이스를 제공합니다. 솔버를 클릭하면 세부 정보를 확인할 수 있습니다.

RCWA4 백엔드
FDTD4 백엔드
TMM1 백엔드

브라우저 기반 시뮬레이터 ​

Python 솔버 파이프라인 외에도, COMPASS는 빠른 탐색과 직관 형성을 위한 20+ 개의 브라우저 기반 시뮬레이터를 제공합니다. 전부 클라이언트에서 실행되어 설치나 Python이 필요 없으며, 교육·설계 공간 탐색·본격 RCWA/FDTD 실행 전 sanity check 용도로 적합합니다.

  • 광학 스택 — TMM QE, 박막 설계기, 에너지 버짓
  • 성능 — SNR, 다이나믹 레인지, EMVA 1288, 광자 전달 곡선
  • 파동 물리 — Si 흡수, 마이크로렌즈 광선 추적, 파브리-페로, 회절 PSF
  • 시스템 — MTF, 색 정확도(ΔE), 픽셀 스케일링, 암전류

모든 시뮬레이터 둘러보기 →

빠른 예제 ​

하나의 YAML 설정으로 시뮬레이션을 정의하고 세 줄의 Python으로 실행하세요:

yaml
# config.yaml
pixel:
  pitch: 1.0          # um
  unit_cell: [2, 2]   # 2x2 베이어 패턴

solver:
  name: torcwa
  type: rcwa
  fourier_order: 9

source:
  wavelength:
    mode: sweep
    sweep: { start: 0.4, stop: 0.7, step: 0.01 }
  polarization: unpolarized
python
from compass.runners.single_run import SingleRunner

result = SingleRunner.run("config.yaml")

for pixel, qe in result.qe_per_pixel.items():
    print(f"{pixel}: peak QE = {qe.max():.2%}")