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%}")