방법 고르기

옵션방법
(없음) 또는 --gfn 2GFN2-xTB. 기본값
--gfn 1GFN1-xTB
--gfn 0GFN0-xTB. SCF 없음
--gfnffGFN-FF 힘장

특별한 이유가 없으면 GFN2를 쓴다. 차이는 ORCA 가이드 16장의 표에 정리했다.

전하와 스핀

xtb는 스핀 다중도 대신 짝짓지 않은 전자 수를 받는다. 삼중항은 --uhf 2, 이중항은 --uhf 1이다. ORCA의 다중도 3이 xtb의 --uhf 2에 해당하므로 옮겨 적을 때 헷갈리기 쉽다.

xtb anion.xyz   --chrg -1
xtb triplet.xyz --uhf 2
xtb cation.xyz  --chrg 1 --uhf 1

같은 디렉터리에 .CHRG, .UHF 파일을 두고 숫자 하나씩 적어 두면 옵션 없이도 읽힌다. CREST도 이 파일을 읽으므로, 이온이나 라디칼을 다룰 때 한 번 만들어 두면 편하다.

구조 최적화

xtb ala.xyz --opt           # 기본 수렴 기준 (normal)
xtb ala.xyz --opt tight     # 진동수 계산 전에는 tight 이상

수렴 기준은 느슨한 것부터 crude, sloppy, loose, lax, normal, tight, vtight, extreme 순이다.

최적화가 끝났는지 확인

출력에 GEOMETRY OPTIMIZATION CONVERGED가 있어야 한다. 최대 반복 수에 걸려 끝난 경우에도 xtbopt.xyz는 만들어지므로, 파일이 있다는 것만으로 수렴했다고 보면 안 된다.

진동수와 열화학

xtb xtbopt.xyz --hess        # 주어진 구조에서 헤시안만
xtb ala.xyz --ohess tight    # 최적화 후 곧바로 헤시안

헤시안을 계산하면 영점 에너지, 엔탈피, 엔트로피를 거쳐 TOTAL FREE ENERGY가 출력된다. 저주파수 모드는 조화진동자 대신 자유 회전자 쪽으로 보간하는 보정(mRRHO)이 기본으로 들어가서, 엔트로피가 부풀려지는 문제를 덜어 준다. 구조가 최소가 아니면 허수 진동수가 음수로 찍힌다.

예제: 기체상 최적화와 진동수

알라닌 다이펩타이드를 기체상에서 최적화하고 진동수를 계산했다.

xtb ala.xyz --gfn 2 --opt tight   > opt.out
xtb ala.xyz --gfn 2 --ohess tight > ohess.out
항목값
전체 에너지 (Eh)−32.975847892266
HOMO–LUMO 갭 (eV)4.480
φ / ψ (°)−81.4 / 74.0 (C7eq)
자유에너지 (Eh, 298 K)−32.833577987317
가장 낮은 진동수 (cm⁻¹)51.78, 63.82, 81.38, 102.62 (허수 진동수 없음)
벽시계 시간최적화 0.52초, 최적화+진동수 0.68초 (8코어)

최적화는 분자 내 N–H···O=C 수소결합이 7원 고리를 이루는 C7eq 구조로 갔다. 허수 진동수가 없으니 극소가 맞다. 영점 에너지는 0.1806 Eh(113 kcal/mol)이고, 자유에너지는 여기에 열 보정과 엔트로피 항을 더한 값이다. 100 cm⁻¹ 아래에 모드가 세 개 있는데, mRRHO 보정은 이런 저주파수 모드의 엔트로피를 가장 크게 바꾼다.

제약 조건과 스캔

원자 간 거리나 이면각을 고정하거나 훑으려면 자세한 입력 파일을 --input으로 넘긴다. 원자 번호는 xyz 파일 순서대로 1부터 센다(ORCA는 0부터).

$constrain
   force constant=1.0
   dihedral: 2, 4, 5, 7, -60.0
$end
$scan
   1: -180.0, 180.0, 37
$end
xtb ala.xyz --opt --input scan.inp > scan.out

$scan의 1:은 $constrain에서 첫 번째로 정의한 제약을 가리킨다. 위 예는 φ를 −180°에서 180°까지 37점으로 나눠, 각 점에서 나머지를 최적화한다. 결과는 xtbscan.log에 쌓인다. 원자를 아예 움직이지 않게 하려면 $fix 블록에 atoms: 1-5처럼 적는다.