시간 의존성 Gross‑Pitaevskii 방정식 해결을 위한 C 프로그램: 완전 비등방성 트랩 구현
초록
본 논문은 기존 Fortran 구현을 C 언어로 이식하고, OpenMP 기반 멀티코어 병렬화를 적용한 18개의 Gross‑Pitaevskii 방정식 솔버를 제시한다. 1D·2D·3D 대칭 및 완전 비등방성 트랩을 포함한 다양한 형태를 지원하며, 실시간 및 허수시간 전파를 위한 분할‑스텝 Crank‑Nicolson 알고리즘을 그대로 유지한다. 스레드화된 코드들은 거의 선형적인 속도 향상을 보여 현대 멀티코어 시스템에서 실행 시간을 10배 이상 단축한다.
상세 분석
본 연구는 초저온 물리학에서 핵심적인 역할을 하는 Gross‑Pitaevskii(GP) 방정식의 수치해법을 Fortran에서 C로 전환함으로써 접근성을 크게 높였다. GP 방정식은 비선형 슈뢰딩거 방정식의 일종으로, 희박한 보스‑아인슈타인 응축체(BEC)의 파동함수를 기술한다. 시간 의존형 형태를 실시간(real‑time)과 허수시간(imaginary‑time) 전파 두 가지 모드로 풀어, 각각 동역학적 현상과 기저 상태(최저 에너지) 찾기에 활용한다.
알고리즘 핵심은 2차 정확도를 갖는 분할‑스텝 Crank‑Nicolson 방법이다. 공간 차원별로 2차 중앙차분을 적용하고, 비선형 항은 시간 중심에서 평균화한다. 이때 실시간 전파에서는 복소수 파동함수를 직접 전진시키고, 허수시간 전파에서는 파동함수의 노멀라이제이션을 반복적으로 재조정함으로써 수렴을 보장한다. 이러한 절차는 기존 Fortran 코드와 동일하게 유지되어, 검증된 수치적 정확성을 그대로 이어받는다.
C 구현에서는 포인터와 동적 메모리 할당을 활용해 다차원 격자 데이터를 효율적으로 관리한다. 또한, 코드 가독성을 높이기 위해 구조체와 함수 포인터를 도입했으며, 컴파일러 독립적인 Makefile을 제공해 GNU gcc, Intel icc, Clang 등 주요 C 컴파일러에서 손쉽게 빌드할 수 있다.
특히 6개의 2·3차원 알고리즘에 대해 OpenMP 기반 스레드화를 수행하였다. 루프 레벨 병렬화를 통해 격자 포인트마다 독립적인 연산을 다중 코어에 분산시켰으며, #pragma omp parallel for 지시문을 사용해 최소한의 코드 수정으로 병렬 효율을 극대화했다. 실험 결과, 코어 수가 증가함에 따라 실행 시간이 거의 선형적으로 감소했으며, 16코어 환경에서 12배 이상의 가속을 기록했다. 이는 메모리 대역폭과 캐시 일관성 문제가 제한적으로 작용함을 시사한다.
또한, 프로그램은 입력 파라미터 파일을 통해 트랩 형태(1D, 2D, 3D, 원형 대칭, 구형 대칭, 완전 비등방성)와 상호작용 강도, 격자 해상도, 시간 스텝 등을 자유롭게 지정할 수 있게 설계되었다. 출력은 파동함수의 절대값, 위상, 에너지, 화학 퍼텐셜 등을 텍스트 파일 및 VTK 포맷으로 저장해, 후처리 및 시각화 툴과의 연동을 용이하게 한다.
전반적으로 이 논문은 GP 방정식 시뮬레이션을 위한 실용적인 도구 모음을 제공함과 동시에, C 언어와 OpenMP를 활용한 고성능 과학 컴퓨팅 구현 사례를 제시한다. 향후 GPU 가속이나 MPI 기반 클러스터 확장 등 추가적인 병렬화 전략을 적용하면 더 큰 규모의 BEC 연구에도 적용 가능할 것이다.