HYOWON
독립 개발 중인 C++20 우주론 N-body 시뮬레이터

소속
Personal Research
협업
Independent Project
기간
2026년 7월 - 현재
프로젝트
HYOWON은 ΛCDM 구조 형성을 다루기 위해 독립적으로 개발 중인 C++20 N-body 시뮬레이터입니다. 팽창하는 주기적 상자에서 차가운 암흑물질과 바리온을 하나의 유효한 무충돌 입자 집단으로 표현하고 중력에 따른 진화를 계산합니다.
개발 범위
- 1LPT/2LPT 초기 조건 생성과 PM/TreePM 중력 계산
- 우주론적 KDK 시간 적분과 HDF5 스냅숏·재시작 체크포인트
- 밀도장과 헤일로 분석 출력
2LPT는 1차 초기 조건에 비해 과도 응답을 줄이는 방법이며, TreePM은 장거리 격자 계산과 단거리 트리 계산을 결합합니다(아래 방법론 자료 참고).
공개 v0.0.1 베타는 평탄한 물질–Λ 배경을 사용하며, 가스 유체역학, 냉각·피드백, 복사와 질량을 가진 중성미자의 진화는 포함하지 않습니다.
초기 조건 생성
아래 IC 설명은 개발 소스 youngjinphys/DM_Cosmology_Simulation@53f820b6f80bf4c378ac0e2c7b8296dfdbfb903b (2026-09-12)에 고정되어 있습니다. 이 변경 불가능한 저장소·revision 쌍이 이 절에서 실제로 검토한 개발 트리이며, 공개 youngjinphys/HYOWON v0.0.1 릴리스와는 별도이므로 공개 릴리스의 구현이나 검증 범위가 동일하다는 뜻은 아닙니다.
hyowon_make_ic는 정규 Cartesian 격자의 입자에 1LPT 또는 2LPT 변위와 운동량을 적용해 native HDF5를 생성합니다. CAMB·CLASS를 내부에서 실행하지 않으며 외부 선형 cold+baryon 전력 스펙트럼 P(k)를 읽습니다. 표의 epoch에서 시작 epoch로 옮길 때 자체 평탄한 물질–Λ 성장함수의 비율을 제곱해 P(k)에 곱합니다. 스펙트럼 메타데이터와 SHA-256은 입력의 선언과 바이트를 확인하는 장치이지 물리적 정확성 인증이 아닙니다. σ8 적분 진단도 입력 진폭을 자동으로 보정하지 않습니다.
난수는 Philox의 (seed, mx, my, mz, stream) 주소로 결정되며, m은 물리적 파수가 아니라 정수 Fourier mode입니다. 난수 추출 순서는 loop·thread scheduling에 의존하지 않습니다. gaussian은 진폭과 위상을 표본화하고, fixed는 진폭을 고정합니다. 두 모드는 서로 다른 stream을 사용하므로 같은 seed로 바꾸어도 위상이 일치하지 않습니다. 또한 fixed 표본은 Gaussian ensemble과 동일한 확률분포가 아니므로 평균 예측과 분산·공분산 추정을 구분해야 합니다(아래 fixed/paired 문헌 참고).
Fourier support K는 1차 밀도장과 최종 quadratic 2LPT source 모두에 적용됩니다. 생략하면 floor((N-1)/2)이므로 N을 늘릴 때 초기 대역도 달라집니다. 서로 다른 N을 공통 초기 map으로 비교하려면 IC mesh M과 K, box, seed, spectrum, epochs, amplitude/pairing을 고정하고 각 입자 격자에서 별도로 생성합니다. 이 projected 2LPT map은 제한되지 않은 연속 2LPT 해가 아닙니다.
같은 파라미터와 같은 결과의 차이
같은 우주론 파라미터만으로 하나의 입자 초기상태가 정해지지는 않습니다. 그렇다고 결과가 반드시 달라야 하는 것도 아닙니다. 같은 입력·생성 좌표·생성 알고리즘은 같은 의도된 realization을 정의합니다. 다른 seed의 계산은 별도 표본이며, 원래 계산의 재현이 아닙니다.
independent는 매번 새 seed를 선택한다는 뜻이 아닙니다. 나머지 입력과 seed가 같으면 pair_a와 같은 1차 field를 만들고, pair_b는 그 field의 부호를 반전합니다. 2차 LPT source는 1차 field의 이차식이므로 이 반전에 불변입니다. 따라서 pair B의 최종 변위·운동량 전체가 pair A의 음수인 것은 아닙니다.
재현성은 의도된 realization, 실제 입자 상태, 파일 전체 바이트, 최종 관측량으로 나누어 판단합니다. Libm·FFTW 및 실행 설정이 달라지면 반올림 결과가 달라질 수 있고, 같은 컴퓨터에서도 새로운 FFTW_MEASURE plan을 선택하면 작은 차이가 생길 수 있습니다. 파일 SHA가 다를 때도 먼저 메타데이터 차이와 입자 상태 차이를 분리해야 합니다. 입자 비교에는 epoch·단위를 맞추고 ID별 질량·위치·운동량을 사용합니다. 같은 IC를 읽더라도 중력·시간간격·병렬 실행 경로를 바꾸면 진화 결과가 달라질 수 있으며, 출력 epoch도 KDK 적분 경계에 들어갑니다.
IC 보존과 재시작
동일 초기상태를 사용하는 비교에서는 canonical IC HDF5를 보존·재사용하고, 생성 시 기록된 object SHA-256을 ic.expected_snapshot_sha256에 지정합니다. 이는 해당 실험 입력의 동일성을 확인하는 기준이지 IC를 물리적 참값으로 정하는 것은 아닙니다. 현재 serial·MPI 재시작 경로도 원본 IC를 다시 열어 출처를 확인하므로 checkpoint만 남기고 IC를 삭제해서는 안 됩니다. 파일을 그대로 옮긴 경우에는 경로만 갱신하면 되지만, 다시 생성해 다른 SHA가 된 파일은 기존 restart lineage의 대체물이 아닙니다.
재생성을 위해 generate TOML, 정확한 spectrum bytes, evidence JSON, 소스·빌드·라이브러리 정보도 보관합니다. 실험 재현에는 evolution TOML과 CLI overrides가 추가로 필요합니다. Snapshot-mode 실행은 원래 spectrum이나 evidence JSON을 읽지 않으므로 IC가 남아 있으면 이 파일들의 삭제가 곧 실행 불능을 뜻하지는 않습니다. 반대로 IC를 삭제했다면 recipe에서 재생성을 시도할 수 있어도 seed나 hash만으로 삭제된 입력을 복구할 수는 없습니다. Bitwise 재생성과 물리적 수렴성은 각각 별도로 확인해야 합니다.
최근 6개 시드 캠페인
아래 기록은 Google Drive의 /HYOWON/result/HYOWON-Beta_c1b88689622631c5488094d42e8000fbe1adec4e/L128_N256_M512_PM2LPT_deconvCICfalse_z79to0_dlnA0.05_snaps10 아래에 보관된 완료 런과 각 run_metadata.json, provenance, 진단 산출물을 대조한 결과입니다. 이 캠페인의 producer 소스는 youngjinphys/DM_Cosmology_Simulation@c1b88689622631c5488094d42e8000fbe1adec4e (2026-09-14)이며, 산출물의 build provenance는 HYOWON 0.0.3, release stage Beta를 기록합니다. 이는 공개 v0.0.1 릴리스와 동일한 바이너리라는 뜻이 아닙니다.
공통 과학·수치 조건
- 상자:
L = 128 h⁻¹ Mpc, 입자:256³ = 16,777,216, PM mesh:512³, IC mesh:512³ - 평균 입자 간격:
0.5 h⁻¹ Mpc, 입자 Nyquist 파수:k_Nyq = 2π ≈ 6.28319 h Mpc⁻¹, 유효 IC 최대 정수 mode/axis:K = 127 - 우주론:
h = 0.7,Ωm = 0.3,ΩΛ = 0.7,Ωb = 0.05,σ8 = 0.8,ns = 1.0 - 입자 질량:
1.04073088 × 10¹⁰ h⁻¹ M☉; 이 값은 HYOWON의 내부 질량 단위10¹⁰ M☉/h와 메타데이터의particle_mass = 1.04073088058128에서 환산했습니다. - IC: 2LPT, Gaussian amplitude, independent phase pairing; evolution gravity: pure PM, CIC deconvolution
false - 적분:
z = 79 → 0, globalΔln a = 0.05; 출력 scale factor는0.025, 0.05, 0.1, 1/6, 0.25, 1/3, 0.5, 2/3, 5/6, 1.0의 10개입니다. - 실행: runtime thread 2개, MPI 비활성, disk scratch. 빌드는 OpenMP와 threaded FFTW를 포함하며, 기록된 FFTW는 3.3.10 계열입니다.
- 여섯 완료 런의 관측 peak RSS는 모두 약
3.36 GiB였습니다. 이 값은 프로세스 수준 메모리 진단이며 전체 클라우드 노드 사용량을 뜻하지 않습니다.
런별 기록
- seed 101 — runtime label
20260912T180933+0900; 10개 스냅숏 완료;column_density_evolution.gif10프레임 원본 보관. - seed 202 — runtime label
20260912T215313+0900; 10개 스냅숏 완료;column_density_evolution.gif10프레임 원본 보관. - seed 303 — runtime label
20260913T001242+0900; 10개 스냅숏 완료;column_density_evolution.gif10프레임 원본 보관. - seed 404 — 최신 완료 runtime label
20260913T021302+0900; 10개 스냅숏 완료;column_density_evolution.gif10프레임 원본 보관. - seed 505 — 최신 완료 runtime label
20260913T051605+0900; 10개 스냅숏 완료;column_density_evolution.gif10프레임 원본 보관. - seed 12345 — runtime label
20260913T074127+0900; 10개 스냅숏 완료;column_density_evolution.gif10프레임 원본 보관.
각 GIF 원본은 7200 × 2400이며 10개 저장 epoch의 시각화를 담습니다. 이 애니메이션은 구조 형성의 정성적 시각화이고, 수렴성·힘 정확도·에너지 보존을 입증하는 검증 자료로 취급하지 않습니다.
저장소
2026년 9월 9일 v0.0.1 소스 베타를 공개했습니다. 빌드 방법, 지원 기능과 한계는 해당 버전의 README에 정리되어 있습니다. 과학적 수렴성과 다중 노드 신뢰성은 아직 입증되지 않았습니다.
감사
이 페이지에 기록한 6개 개발 런은 과학기술정보통신부가 지원하고 한국지능정보사회진흥원(NIA)이 운영하는 모두의 AI 실험실(aitestbed.kr)에서 제공받은 클라우드 자원을 활용했습니다. 클라우드 자원 지원에 감사드립니다.
방법론 참고 자료
Transients from initial conditions in cosmological simulations
M. Crocce, S. Pueblas & R. Scoccimarro
Monthly Notices of the Royal Astronomical Society 373, 369–381 (2006)
The cosmological simulation code GADGET-2
V. Springel
Monthly Notices of the Royal Astronomical Society 364, 1105–1134 (2005)
Random123: counter-based random number generators
Random123 project
Project documentation
Cosmological N-body simulations with suppressed variance
R. E. Angulo & A. Pontzen
Monthly Notices of the Royal Astronomical Society: Letters 462, L1–L5 (2016)
FFTW FAQ: different results between runs
M. Frigo & S. G. Johnson
FFTW documentation, question 3.8