ORCA란 무엇인가
ORCA는 막스 플랑크 석탄연구소(Max-Planck-Institut für Kohlenforschung)에서 개발하는 범용 양자화학 패키지로, 전이금속 화학과 분광학(CASSCF, NEVPT2, DLPNO-CCSD(T) 등)에 특히 강하고 학술용은 무료다. 프로그램 소개·다운로드·공식 매뉴얼은 모두 공식 포럼에 있으니, 배경이나 버전별 변경점은 그쪽을 보면 된다. 이 가이드는 그 매뉴얼에서 자주 쓰는 부분만 골라 실전 위주로 추린 것이다.
설치 확인
ORCA는 공식 포럼(orcaforum.kofo.mpg.de)에서 학술용 계정으로 가입한 뒤 내려받는다. Linux, macOS, Windows 바이너리가 있고, 이 가이드의 예제는 모두 5.0.2, 5.0.4, 6.0.0에서 돌아간다.
설치하고 가장 먼저 볼 것은 orca 실행 파일이 PATH에 잡혀 있는지다.
터미널에서 아래를 치면 실행 파일 위치가 찍혀야 한다.
# 설치 위치 확인
which orca
병렬 계산에서는 ORCA 바이너리의 절대 경로가 PATH에 들어 있어야 한다.
which orca로 절대 경로를 확인하고
export PATH=/path/to/orca:$PATH 식으로 직접 넣어 준다.
상대 경로나 alias로는 OpenMPI가 병렬 실행 파일을 못 찾아 그냥 죽는다.
OpenMPI 동적 라이브러리 때문에 LD_LIBRARY_PATH도 같이 잡아 두는 편이 안전하다.
첫 실행 — H2O 단일점 에너지
ORCA 입력 파일은 그냥 ASCII 텍스트고, 확장자는 보통 .inp를 쓴다.
물 분자 하나의 단일점 에너지를 B3LYP/def2-SVP 수준에서 계산해 본다.
# my_first.inp — 물 분자 단일점 에너지
! B3LYP def2-SVP
* xyz 0 1
O 0.000000 0.000000 0.119262
H 0.000000 0.763239 -0.477047
H 0.000000 -0.763239 -0.477047
*
각 줄이 무슨 뜻인지만 짧게 짚어 둔다. 자세한 문법은 02. 입력 파일 구조에서 다룬다.
!로 시작하는 줄이 키워드 라인이다. 여기서 방법(B3LYP)과 기저집합(def2-SVP)를 지정한다.*로 둘러싼 블록이 좌표 입력부다.xyz는 데카르트 좌표,0 1은 총 전하 0과 다중도 1(닫힌 껍질)을 뜻한다.#으로 시작하는 줄은 주석이다.
실행은 이렇게 한다.
# Linux / macOS
orca my_first.inp > my_first.out
# Windows (명령 프롬프트)
orca my_first.inp > my_first.out
ORCA는 모든 결과를 표준 출력(stdout)으로 쏟아낸다.
> output_file로 반드시 리디렉션해 둬야 한다. 안 그러면 결과가 화면을 스쳐 지나가 그대로 날아간다.
정상 종료되면 출력 파일 끝에 이런 줄이 찍힌다.
FINAL SINGLE POINT ENERGY -76.321274411145
****ORCA TERMINATED NORMALLY****
FINAL SINGLE POINT ENERGY 줄의 값이 방금 얻은 에너지다(단위는 Hartree).
저 메시지가 떴으면 계산 자체는 일단 끝까지 돌아갔다는 뜻이다.
매뉴얼도 못 박아 두는 부분인데, ORCA TERMINATED NORMALLY가 떠도 결과가 믿을 만하다는 보장은 없다.
구조 최적화가 수렴하지 못한 채 최대 반복 횟수만 채우고 끝나도 똑같이 이 줄이 나온다.
계산이 의도대로 수렴했는지는 결국 출력 파일을 직접 열어 봐야 안다.
출력 파일과 임시 파일
ORCA를 돌리면 입력 파일과 같은 폴더에 부가 파일이 여럿 생긴다. 자주 보게 되는 것만 추리면 이렇다.
| 파일 | 설명 |
|---|---|
basename.out | 표준 출력을 리디렉션한 파일. 사람이 읽는 주 결과물. |
basename.gbw | 이진 형식의 분자 궤도 파일(Geometry-Basis-Wavefunction). 재시작이나 후속 계산의 입력으로 쓰인다. |
basename.xyz | 최적화된 구조의 데카르트 좌표 파일. |
basename_trj.xyz | 최적화 과정의 모든 중간 구조를 담은 trajectory. |
basename.engrad | 에너지와 그래디언트가 저장된 텍스트 파일. |
basename.hess | 진동수 계산 시 생성되는 헤시안 파일. |
basename.property.txt | 각종 분자 특성(쌍극자, 분극도 등)을 정리한 파일. |
basename.*.tmp | 임시 파일. 정상 종료 시 자동으로 지워진다. |
ORCA가 비정상 종료되면 .tmp 파일이 남는다. 다음 실행 전에 치워 주는 게 좋다.
rm basename*.tmp # Linux/macOS
del basename*.tmp # Windows
병렬 실행
ORCA는 OpenMPI(Linux·macOS)나 MS-MPI(Windows)로 병렬 계산을 한다. 코어 수를 지정하는 방법은 두 가지다.
# 방법 1: 단순 키워드 (PAL2 ~ PAL64 지원)
! B3LYP def2-SVP PAL8
# 방법 2: %pal 블록 (임의의 정수)
%pal
nprocs 12
end
매뉴얼이 주는 실용적인 기준은 대략 이렇다.
- RI-DFT: 16개 코어까지는 효율이 잘 나오고, 그 이상은 오버헤드가 커진다.
- 하이브리드 DFT, HF: 16~24개 코어까지 노려볼 만하다.
- Coupled-cluster: 보통 8~16개 코어가 무난하다.
- 수치 미분(NumFreq, NumGrad): 변위 개수가 많아 코어를 많이 먹일 수 있다. 6 × 원자 수 × (4~8)배까지도 잡힌다.
ORCA 6부터는 병렬화를 변위 단위로 더 잘게 쪼갤 수 있다. 예를 들어 프로세스 32개를 “4개 × 8그룹”으로 묶어 변위 여덟 개를 한꺼번에 돌리는 식이다.
%pal
nprocs 32 # 전체 프로세스 수
nprocs_group 4 # 한 변위에 투입할 프로세스 수
end
메모리 설정
상관 계산 모듈(MP2, CCSD, MRCI 등)은 큰 스크래치 배열을 잡는다.
코어 하나가 쓸 메모리를 %maxcore로 정해 주는데,
단위는 메가바이트(MB)다.
# 코어당 4 GB 메모리 (총 사용량 ≈ nprocs × maxcore)
%maxcore 4000
계산 도중 “Please increase MaxCore”가 뜨면서 SCF가 멈추면,
물리 메모리가 허락하는 선에서 %maxcore를 올리면 된다.
단 이 값은 “주 작업 영역”만 가리켜서, 실제 메모리 사용량은 늘 이보다 크다.
가용 메모리의 60~70%쯤 배정하는 게 안전하다.
64 GB 메모리에 8 코어 병렬이라면 %maxcore 5000 언저리에서 시작하는 걸 권한다.
첫 계산을 끝까지 돌려 봤으면 절반은 온 셈이다. 남은 건 입력 파일을 원하는 대로 쓰는 법인데, 그건 바로 다음 장의 몫이다.