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 언저리에서 시작하는 걸 권한다.

첫 계산을 끝까지 돌려 봤으면 절반은 온 셈이다. 남은 건 입력 파일을 원하는 대로 쓰는 법인데, 그건 바로 다음 장의 몫이다.