Optical-beams-MEEP 원본 실행 기록
Optical-beams-MEEP 원본 실행 기록
이 폴더는 재현 코드와 원본 소스를 보관합니다. 게시된 그림·실행 검사·출처는
assets/meep/optical-beams/에 있습니다.
아래 명령을 실행하면 이 코드 폴더에 새 결과와 그림이 생성됩니다.
Daniel Kotik와 Jörg Götte의 Optical-beams-MEEP에서 제공하는 Gauss2d.py를 실제 PyMeep로 실행한 교육용 예제입니다. 원본 이미지의 재사용이 아니라 이번 실행의 전자기장 데이터를 새로 그렸습니다.
실행한 조건
| 항목 | 값 |
|---|---|
| 경계면 | planar dielectric interface |
| 편광 | s 편광, 2D에서 Ez |
| 굴절률 | n1=1.54, n2=1.00 |
| 입사각 | 30도와 45도, 경계면 법선 기준 |
| 셀 / PML | 5a × 5a / 0.25a |
| 주파수 | 12 c/a, 진공파장 a/12 |
| 해상도 | 184.8 pixels/a; 높은 굴절률 매질 파장당 10픽셀 |
| 실행 시간 | 10 a/c = 진공 광학 주기 120개 |
| 자원 | MPI 1 process, OMP/BLAS/MKL 각 1 thread |
입사각 30도만 원본 기본값 45도에서 변경했습니다. 45도 사례는 원본 물리·수치 기본값을 그대로 사용했습니다. 해상도, PML, 소스, Courant=0.5와 종료시간을 변경하지 않았습니다. 길이 단위 a의 실제 길이를 지정하지 않았으므로 이 예제에 마이크로미터 단위를 붙이지 않습니다.
결과를 읽는 방법
-
wavefront_comparison.png: 두 조건의 실제 최종 순간장 Ez(t)를 회색 유전율 배경에 표시합니다. 두 조건은 동일한 발산형 색상 척도를 사용합니다. 약한 장을 배경과 합성하기 위한 불투명도 sqrt(Ez /공통최대값)는 표시만 바꾸며 데이터는 변경하지 않습니다. -
intensity_comparison.png: 마지막 두 광학 주기의 실제 샘플에 cos/sin/DC 최소제곱 적합을 수행해 얻은 시간평균 Ez²=phasor ²/2입니다. 선형 hot 척도와 공통 최대값을 사용합니다. 이것은 Poynting flux 또는 투과효율이 아닙니다. planar30.gif,planar45.gif: 마지막 두 주기에 수집한 62개 실제 FDTD 순간장입니다. 표시용으로 공간 격자를 3칸 간격으로 사용하고 느리게 재생합니다. phasor를 인위적으로 회전시킨 애니메이션이 아닙니다.- 각 사례의
planar/*e2_s*.h5: 원본 코드가 출력한 실수 순간장 제곱 Ez(t)²입니다. 시간평균 세기 그림과 구분해야 합니다.
임계각은 asin(1/1.54)=40.4927도입니다. 30도 입사에서 평면파 Snell 굴절각은 50.3539도이고, 투과 영역의 국소 phasor 위상 기울기로 구한 각은 50.6618도입니다(법선 기준, 차이 0.3080도). 반사 방향은 전역 +x축 기준 30도 사례에서 119.9757도(기대 120도), 45도 사례에서 90.8507도(중심 입사파 기대 90도)입니다. 이 값은 빔 중심 또는 에너지 흐름의 직접 측정이 아닌 국소 위상 진단입니다.
45도는 중심 입사파가 임계각을 넘는 조건입니다. 유한 폭 Gaussian beam은 각도 분포를 가지므로 전체 투과가 정확히 0이라고 단정하지 않습니다. 마지막 두 주기 조화파 적합의 상대 L2 잔차는 각각 0.0822%, 0.0207%입니다. 격자 수렴, PML 수렴, 입사장 분리와 flux 정규화는 수행하지 않았습니다.
재현
기존 WSL conda pmp 환경의 Python 3.11.15 / Meep 1.33.0 / optbeam 2.1.2 / NumPy 2.4.6 / SciPy 1.17.1 / h5py 3.16.0을 사용했습니다. Scheme/Guile 실행 파일이 없어 같은 프로젝트에서 공식 제공하는 Python 스크립트를 실행했습니다. optbeam 원본의 순수 Python 경로를 사용하므로 Cython 설치나 원본 수정이 필요하지 않았습니다.
이 폴더에서 PyMeep 환경을 활성화한 뒤:
export OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1 MKL_NUM_THREADS=1
python run_original.py --upstream source --output planar30 --chi 30 > planar30.log 2>&1
python run_original.py --upstream source --output planar45 --chi 45 > planar45.log 2>&1
python render_results.py --data-dir . > render.log 2>&1
run_original.py는 원본 Gauss2d.py를 수정하지 않고 호출합니다. 추가한 관측 콜백만으로 마지막 두 주기를 저장하며 원본 HDF5 출력도 실행합니다. checks.json에는 실제 실행 환경, 배열 유한성, 원본 순간장 제곱과 HDF5의 일치, 위상 방향 진단, 제한 사항을 보관했습니다. result.json은 사이트용 요약입니다.
출처와 라이선스
- 원본 설명: https://danielkotik.github.io/Optical-beams-MEEP/
- 실행 소스: https://github.com/DanielKotik/Optical-beams-MEEP/tree/ca145119e5bd0f0804d846ea42e35e4c3daa91de
Gauss2d.py및optbeam/는 v2.1.2 릴리스와 동일함을 git diff로 확인했습니다. 현재 고정 commit의 추가 변경은 문서, 인용 정보, 빌드 설정에 있습니다.- 버전별 소프트웨어 인용: Daniel Kotik & Jörg Götte, Optical-beams-MEEP v2.1.2 (2021), https://doi.org/10.5281/zenodo.5211251
- Zenodo는 이 레코드를 software로 분류합니다. 별도의 동료심사 논문이라고 표기하지 않습니다.
- 원본 코드는 MIT License, Copyright (c) 2018 Daniel Kotik입니다. 배포 시
source/LICENSE를 함께 보존합니다.
source/에는 실제 실행한 원본 소스의 복사본, MIT 전문, CITATION.cff를 포함했습니다. 두 개의 wrapper/render 스크립트는 이 교육용 재현을 위해 추가했습니다.