xTB는 무엇인가
xTB(extended tight-binding)는 Grimme 그룹이 만든 반경험 방법 계열이다. 최소 원자가 기저와 원소별 파라미터로 해밀토니안을 근사하기 때문에, 같은 분자를 DFT로 계산할 때보다 보통 두세 자릿수 빠르다. 주기율표의 Z = 86(Rn)까지 파라미터가 있어서 유기 분자뿐 아니라 전이금속 착물도 일단 돌아는 간다.
ORCA에서 부를 수 있는 것은 네 가지다.
| 방법 | 키워드 | 특징 |
|---|---|---|
| GFN2-xTB | XTB2, GFN2-xTB | 기본 선택. 다극자 정전기와 D4 분산 보정이 들어 있다. |
| GFN1-xTB | XTB1, GFN-xTB | GFN2보다 먼저 나온 판. 일부 무기·금속 계에서 GFN2보다 나을 때가 있다. |
| GFN0-xTB | XTB0, GFN0-xTB | SCF를 돌리지 않는 판. 몇 배 빠르지만 정확도가 떨어진다. XTB1·XTB2가 둘 다 실패할 때만 쓴다. |
| GFN-FF | XTBFF, GFN-FF | 힘장. 결합이 끊어지지 않으므로 반응에는 못 쓰고, 큰 계의 구조 탐색용이다. |
키워드 없이 ! XTB라고만 쓰면 GFN2-xTB가 된다. 이 장의 예제는 전부 XTB2로 적었다.
ORCA에서 쓰기 위한 준비
ORCA 6.0은 xTB를 직접 계산하지 않고 Grimme 그룹의 xtb 프로그램을 호출한다.
그래서 xtb 실행 파일을 ORCA 실행 파일이 있는 디렉터리에 otool_xtb라는 이름으로 넣어 둬야 한다.
# xtb 6.7.1 이상 (github.com/grimme-lab/xtb/releases 또는 conda-forge)
ORCA_DIR=$(dirname $(which orca))
cp /path/to/xtb-6.7.1/bin/xtb $ORCA_DIR/otool_xtb
6.7.1보다 오래된 xtb는 ORCA 6과 호환이 온전하지 않아서, 용매 모델이 켜지지 않는 식으로 조용히 틀어질 수 있다.
또 리눅스에서는 /bin/sh가 bash나 dash 같은 POSIX 셸이어야 인터페이스가 동작한다.
클러스터의 공용 ORCA 모듈처럼 실행 파일 디렉터리에 쓰기 권한이 없다면, ORCA를 개인 디렉터리에 따로 설치하고
그 옆에 otool_xtb를 두는 편이 가장 확실하다.
다만 먼저 모듈의 bin 디렉터리부터 확인해 볼 만하다. 이 장의 예제를 돌린 NUS HPC Vanda 클러스터에서는
module load ORCA/6.1.0-gompi-2023b-avx2가 불러오는 디렉터리에 otool_xtb(xtb 6.7.1)가
이미 들어 있어서 따로 할 일이 없었다. 이 모듈은 OpenMPI 4.1.6도 함께 불러온다.
module load ORCA/6.1.0-gompi-2023b-avx2
ls $(dirname $(which orca))/otool_xtb # 있으면 준비 끝
실제로 쓰였는지는 출력에서 확인한다. xTB 단계마다 ORCA가 부른 명령줄이 program call 줄에 찍힌다.
예제 출력에서는 모듈 경로의 otool_xtb가 -P 8 --alpb WATER로 호출됐다.
%pal nprocs 8이 그대로 xtb의 코어 수로 넘어간 것이다.
기본 입력
전하와 스핀 다중도는 DFT 입력과 똑같이 좌표 줄에 쓴다. 기저집합은 적지 않는다.
# 구조 최적화
! XTB2 Opt
%pal nprocs 8 end
* xyzfile 0 1 mol.xyz
최적화, 제약 조건과 표면 스캔, NEB, IRC, MD, QM/MM이 모두 DFT와 같은 문법으로 동작한다.
다만 해석적 헤시안이 없어서 Freq는 그래디언트를 여러 번 불러 수치로 계산한다.
xTB 그래디언트 하나가 1초도 안 걸리는 크기라면 이 차이는 거의 느껴지지 않는다.
# 최적화 + 진동수
! XTB2 Opt Freq
* xyzfile 0 1 mol.xyz
용매 모델
xTB에는 DFT와 다른 용매 모델 세 가지가 붙는다.
| 키워드 | 모델 |
|---|---|
ALPB(water) | analytical linearized Poisson–Boltzmann. xTB와 같이 파라미터화돼서 보통 이것을 쓴다. |
DDCOSMO(water) | domain-decomposition COSMO |
CPCMX(water) | 확장 CPCM |
! XTB2 Opt ALPB(water)
ALPB는 xTB 전용이다. 같은 분자를 DFT로 이어서 계산할 때는 9장의
CPCM(water)나 SMD로 바꿔 써야 한다.
DFT 앞단의 사전 최적화
실무에서 xTB를 가장 많이 쓰는 곳은 DFT 최적화의 출발 구조를 만드는 일이다. 손으로 그리거나 다른 프로그램에서 가져온 구조는 결합 길이와 각도가 제멋대로라서, 그대로 DFT에 넣으면 앞쪽 수십 스텝을 비싼 계산으로 낭비한다. xTB로 먼저 최적화하면 DFT는 이미 가까운 곳에서 시작한다.
# step1.inp: xTB 최적화 + 진동수 → step1.xyz, step1.hess
! XTB2 Opt Freq ALPB(water)
* xyzfile 0 1 start.xyz
# step2.inp: xTB 구조와 헤시안에서 r2SCAN-3c 최적화 시작
! r2SCAN-3c Opt Freq CPCM(water)
%geom
InHess Read
InHessName "step1.hess"
end
* xyzfile 0 1 step1.xyz
헤시안을 읽어 오면 최적화기가 처음부터 곡률 정보를 알고 출발한다. 특히 OptTS에서는
7장에서 말한 초기 헤시안 계산을 xTB 헤시안으로 대신할 수 있어서 비용이 크게 준다.
예제: 알라닌 다이펩타이드
알라닌 다이펩타이드(Ace-Ala-NMe, 원자 22개)를 암묵적 물 용매에서 두 가지 방법으로 최적화하고 진동수까지 계산해 비교했다. r2SCAN-3c 계산은 xTB 최적 구조에서 출발했다. 두 계산 모두 NUS HPC의 ORCA 6.1.0에서 8코어로 돌렸다.
| GFN2-xTB / ALPB | r2SCAN-3c / CPCM | |
|---|---|---|
| 벽시계 시간 (8코어) | 9.9 s | 14 min 27 s (866.6 s) |
| 최적화 사이클 | 20 | 23 |
| φ / ψ (°) | −82.6 / 72.8 (C7eq) | −85.9 / 73.9 (C7eq) |
| 가장 낮은 진동수 (cm⁻¹) | 50.8, 69.1, 85.4 | 44.2, 73.3, 94.7 |
| 허수 진동수 | 0 | 0 |
| 최종 에너지 / G (Eh) | −32.991364 / −32.848402 | −495.775841 / −495.628066 |
두 방법이 같은 C7eq 극소에 도착했고, 이면각 차이는 3° 남짓이다. 둘 다 허수 진동수가 없어서 극소임이 확인된다.
시간은 약 87배 차이가 난다. r2SCAN-3c 출력 끝의 모듈별 시간을 보면 SCF 반복이 45%, 진동수 계산의 응답 방정식과
2차 미분 적분이 합쳐서 31%, 그래디언트가 12%를 차지했다. 이 예제는 xTB 구조만 읽고 헤시안은 읽지 않았으므로,
앞 절처럼 InHess Read를 쓰면 최적화 사이클이 더 줄 여지가 있다.
최종 에너지는 아래에서 말하듯 기준이 달라서 두 방법끼리 뺄 수 없다.
입력과 출력 원본은 examples/07-xtb-md/에 있다
(o01 입력 ·
o01 출력 ·
o02 입력 ·
o02 출력).
경로 탐색과 컨포머 탐색
7장의 ! XTB NEB-TS처럼, 반응 경로의 첫 추정을 xTB로 얻고
전이 상태만 DFT로 다듬는 방식이 흔하다. 경로 전체를 DFT로 훑는 것보다 훨씬 싸고, 대부분 같은 안장점에 도착한다.
ORCA 6에는 컨포머와 전역 최소를 찾는 GOAT도 있다. ! XTB GOAT로 xTB 위에서 컨포머 앙상블을 만들 수 있다.
같은 일을 하는 도구로는 xtb 쪽의 CREST가 더 오래 쓰여 왔다. xtb 가이드에서 같은 분자로 CREST를 돌려 본다.
어디까지 믿을 수 있나
- 구조: 유기 분자의 결합 길이와 각도는 대체로 DFT와 가깝다. 수소결합과 비틀림각은 더 흔들린다.
- 상대 에너지: 컨포머 간 에너지 순서는 참고할 만하지만, 수 kcal/mol 오차는 흔하다. 순위를 정할 때는 DFT로 다시 계산한다.
- 반응 에너지와 장벽: 정량적으로 쓰면 안 된다. 경로의 모양과 대략적인 구조만 얻는 용도다.
- 전이금속: 계산은 돌아가지만 스핀 상태의 에너지 순서는 믿기 어렵다.
- 절대 에너지: xTB의 전체 에너지는 DFT 에너지와 기준이 달라서 서로 빼거나 비교할 수 없다.
%xtb 블록
대부분 키워드 줄로 충분하고, 세부 조정이 필요할 때만 블록을 쓴다.
| 키워드 | 뜻 |
|---|---|
XTBINPUTSTRING | otool_xtb 명령줄에 그대로 붙일 문자열 |
NPROCS | xtb가 쓸 코어 수. 기본은 ORCA의 %pal 값 |
ACCURACY | xtb의 --acc 값 |
ETEMP | 전자 온도(--etemp). 금속성·작은 갭 계에서 SCF 수렴을 도울 때 올린다. |
DOALPB, ALPBSOLVENT | 키워드 줄의 ALPB(...)와 같은 설정 |
%xtb
ETEMP 1000
NPROCS 4
end
GFN2-xTB: Bannwarth, Ehlert, Grimme, J. Chem. Theory Comput. 2019, 15, 1652. ALPB: Ehlert, Stahn, Spicher, Grimme, J. Chem. Theory Comput. 2021, 17, 4250. 개관: Bannwarth 외, WIREs Comput. Mol. Sci. 2021, 11, e1493.