기본 사용법
구조 최적화는 키워드 라인에 Opt만 더하면 된다. 아래는 포름알데히드(HCHO)를 B3LYP/SV(P) 수준에서 최적화하는 예다.
! B3LYP D4 def2-SVP Opt
* int 0 1
C 0 0 0 0.000 0.000 0.00
O 1 0 0 1.203 0.000 0.00
H 1 2 0 1.107 122.016 0.00
H 1 2 3 1.107 122.016 180.00
*
순수 GGA 함수(예: BP86)에서는 RI 근사가 기본으로 켜지니 따로 옵션이 필요 없다.
하이브리드 함수라면 RIJCOSX def2/J를 같이 켜는 게 표준이다.
# RI + BP86 — 매우 빠른 최적화
! BP86 D4 def2-SVP Opt
# 하이브리드는 RIJCOSX와 함께
! B3LYP D4 def2-TZVP RIJCOSX def2/J Opt
좌표계 — 데카르트와 redundant internal
ORCA 6의 Opt 키워드는 기본으로 redundant internal coordinates를 쓴다.
이 좌표계는 화학적으로 의미 있는 결합 길이·각도·이면각의 조합이라, 대개 가장 빨리 수렴한다.
데카르트 좌표를 강제할 수도 있는데, 아래 같은 특수한 경우에만 권한다.
| 키워드 | 좌표계 | 사용 시점 |
|---|---|---|
Opt | Redundant internal | 대부분의 분자 — 기본 선택. |
COpt | Cartesian | 큰 시스템, 단편(fragment) 최적화, 매우 평탄한 표면. |
수렴 임계값 읽기
최적화는 단계마다 수렴 지표 5개를 평가한다. 다섯 개가 모두 임계값 아래로 떨어지면 “converged”로 판정한다.
*********************HURRAY********************
*** THE OPTIMIZATION HAS CONVERGED ***
*************************************************
------------------------|Geometry convergence|---------------------------
Item value Tolerance Converged
---------------------------------------------------------------------------
Energy change -0.0000001234 Eh 0.0000050000 YES
RMS gradient 0.0000234567 Eh/bohr 0.0001000000 YES
MAX gradient 0.0000456789 Eh/bohr 0.0003000000 YES
RMS step 0.0001234567 bohr 0.0020000000 YES
MAX step 0.0002345678 bohr 0.0040000000 YES
---------------------------------------------------------------------------
임계값은 NormalOpt(기본) → TightOpt → VeryTightOpt로 단계를 올릴 수 있다.
| 지표 | NormalOpt | TightOpt | VeryTightOpt |
|---|---|---|---|
| Energy change (Eh) | 5e-6 | 1e-6 | 2e-7 |
| Max gradient (Eh/bohr) | 3e-4 | 1e-4 | 3e-5 |
| RMS gradient | 1e-4 | 3e-5 | 1e-5 |
| Max step (bohr) | 4e-3 | 2e-3 | 6e-4 |
| RMS step | 2e-3 | 1e-3 | 3e-4 |
진동수 계산을 뒤에 붙일 거라면 최적화를 TightOpt 이상으로 수렴시키는 게 좋다.
안 그러면 평형에서 살짝 벗어난 점에서 진동수를 계산하게 돼,
엉뚱한 허수 진동수가 튀어나올 수 있다.
제약 조건 최적화
반응 경로 일부를 고정하거나 특정 결합·각도를 묶어 두고 싶을 때 쓴다.
%geom Constraints 블록에 아래 문법으로 적는다.
! B3LYP D4 def2-SVP Opt
%geom Constraints
{ B 0 1 1.25 C } # 0-1 결합 길이를 1.25 Å로 고정
{ A 2 0 3 120.0 C } # 2-0-3 각도를 120°로 고정
{ D 3 1 0 2 180.0 C } # 3-1-0-2 이면각 180°로 고정
{ C 5 C } # 5번 원자 데카르트 좌표 전체 고정
end
end
* xyzfile 0 1 mol.xyz
중괄호 안 첫 글자가 제약 종류를 정한다.
| 유형 | 문법 | 의미 |
|---|---|---|
| 결합 길이 | { B N1 N2 값 C } | 원자 N1-N2 사이 거리를 “값”(Å)으로 고정. |
| 결합 각도 | { A N1 N2 N3 값 C } | N1-N2-N3 각도를 “값”(°)으로 고정. |
| 이면각 | { D N1 N2 N3 N4 값 C } | 네 원자의 이면각을 고정. |
| 데카르트 | { C N1 C } | 원자 N1의 (x,y,z)를 모두 고정. |
“값”은 선택이다. 생략하면 입력 구조의 현재 값이 그대로 고정된다. 데카르트 제약에는 값을 줄 수 없고 늘 초기 위치가 쓰인다. 원자 번호는 0부터 센다(좌표 입력의 “int” 모드와 정반대니 헷갈리지 말 것).
와일드카드와 범위
여러 좌표를 한 번에 묶을 수도 있다.
%geom Constraints
{ B 3 * C } # 3번 원자가 관여하는 모든 결합 길이
{ B * * C } # 모든 결합 길이
{ A * 5 * C } # 5번이 중앙인 모든 각도
{ C 10:17 C } # 10~17번 원자의 데카르트 고정
end
end
역제약(InvertConstraints)
좌표 몇 개만 풀고 나머지를 전부 고정하고 싶으면, 풀 좌표를 적은 뒤 invertConstraints true를 더한다.
%geom Constraints
{ B 0 1 C }
end
invertConstraints true # C-O 거리만 최적화하고 나머지는 모두 고정
end
수소만 최적화 · 부분 최적화
큰 단백질 활성자리나 X-선 구조에서 수소만 따로 최적화하고 싶을 때 쓴다.
%geom optimizehydrogens true
end
완화 표면 스캔 (Relaxed Scan)
한 좌표를 한 값에서 다른 값까지 조금씩 바꿔 가며, 각 점에서 나머지를 전부 최적화하는 작업이다. 반응 좌표나 컨포머 변화를 훑을 때 가장 자주 쓴다.
# H2O2의 H-O-O-H 이면각을 0°에서 180°까지 19점으로 스캔
! B3LYP D4 def2-SVP Opt
%geom Scan
D 0 1 2 3 = 0.0, 180.0, 19 # 이면각 0 → 180, 19개 점
end
end
* xyz 0 1
H 0.000 0.872 0.873
O 0.000 0.625 -0.085
O 0.000 -0.625 -0.085
H 0.000 -0.872 0.873
*
스캔이 끝나면 ORCA가 basename.relaxscanact.dat에 각 점의 (좌표값, 에너지) 쌍을 찍어 준다.
중간 구조도 전부 basename_trj.xyz에 쌓이니 그대로 시각화에 쓸 수 있다.
반응 좌표 스캔은 “안에서 밖으로(짧은 거리 → 긴 거리)”보다 “밖에서 안으로(긴 거리 → 짧은 거리)”가 더 매끄럽게 풀리는 경우가 많다. 긴 거리에서 시작하면 이미 구조가 어느 정도 풀린 상태에서 출발하는 셈이라, 국소 최소에 잘 안 갇힌다.
다차원 스캔
두 좌표를 동시에 스캔하면 표면이 만들어진다.
%geom Scan
B 0 1 = 3.0, 1.0, 15
B 1 2 = 1.0, 3.0, 15
end
end
기본적으로 위 두 스캔은 “격자(grid)”로 엮여 총 15 × 15 = 225개 점이 계산된다.
두 스캔을 같은 인덱스끼리 짝지어(15점만) 동시에 돌리고 싶으면 Simul_Scan true를 더한다.
초기 헤시안 선택
최적화 알고리즘은 단계마다 헤시안(2차 미분 행렬)의 근사가 필요하다.
기본값은 모델 헤시안(Almloef)이고, 웬만한 유기 분자에서는 이걸로 충분하다.
까다로운 시스템이면 아래 옵션을 시도해 볼 수 있다.
%geom
InHess Almloef # 기본값. 안정적.
end
| 옵션 | 설명 |
|---|---|
Almloef | 기본값. Almlöf 모델. |
Lindh | Lindh 모델. 평탄한 표면에 효과적. |
Swart | Swart 모델. 전이금속에서 안정적. |
Schlegel | Schlegel 모델. 일반 유기. |
Unit | 단위 행렬. 매우 어려운 경우의 마지막 보루. |
Read | 이전 진동수 계산의 .hess 파일을 읽음. |
이전 헤시안 읽어 오기
싼 방법(예: 준경험적)으로 헤시안을 미리 구해 두면, 까다로운 최적화에서 큰 도움이 된다.
# 1단계: XTB로 헤시안 빠르게 계산
! XTB2 NumFreq
* xyzfile 0 1 mol.xyz
$new_job
# 2단계: 위 헤시안을 초기값으로 사용한 정밀 최적화
! B3LYP D4 def2-TZVP Opt TightSCF
%geom
InHess Read
InHessName "mol_job1.hess"
end
* xyzfile 0 1
잘 풀리지 않을 때
최적화가 발산하거나 진동할 때 꺼내 볼 카드들이다.
- 최대 반복 횟수 늘리기:
%geom MaxIter 500 end로 늘려 본다. - 최대 step 크기 줄이기:
%geom MaxStep 0.1 end(bohr 단위). - 데카르트 좌표로 전환:
!COpt를 시도해 볼 만하다. - 초기 헤시안을 정밀하게: 위에서 설명한
InHess Read패턴. - 좌표 입력 점검: 결합 길이가 비현실적으로 짧거나 길지 않은지, 원자가 겹쳐 있지 않은지 확인한다.
안정점을 찾았으면, 그 점이 정말 최소인지(허수 진동수가 없는지)는 진동수 계산으로 확인할 차례다.