흔한 입력 실수

처음 ORCA를 쓰며 가장 자주 깨지는 지점들을 모았다. 대부분 입력 한 줄 차이다. 표시는 이 가이드를 만들며 ORCA 6.1.1로 직접 돌려 보다 실제로 부딪힌 것이다.

실수증상 · 고치는 법
출력을 리디렉션 안 함orca a.inp만 치면 결과가 화면을 스쳐 사라진다. 항상 orca a.inp > a.out.
최적화 안 한 구조에서 진동수그래디언트가 0이 아닌 점에서 Freq를 돌리면 허수 진동수가 엉뚱하게 뜬다. 같은 레벨로 먼저 Opt.
종마다 다른 기저집합반응 에너지를 비교하는데 종마다 기저집합이 다르면 오차가 상쇄되지 않는다. 모든 종을 같은 기저집합으로.
DFT에 분산 보정 빠짐B3LYP 같은 표준 DFT는 분산력을 못 잡는다. 거의 항상 D4를 같이 켠다.
다중도 오입력* xyz 0 1의 둘째 수가 다중도(2S+1)다. 홀수 전자인데 1을 쓰면 SCF가 깨진다. 라디칼이면 UKS도 함께.
RIJCOSX인데 보조 기저집합 없음RIJCOSX에는 def2/J가 짝이다. 빠뜨리면 느려지거나 오류가 난다.
정상 종료를 성공으로 착각TERMINATED NORMALLY는 “끝까지 돌았다”일 뿐이다. 수렴 · 허수진동수 · ⟨S²⟩를 직접 확인한다.
DLPNO + Extrapolate에 AutoAux 누락! DLPNO-CCSD(T) Extrapolate(3/4,cc)만 쓰면 “보조 기저집합 필요”로 죽는다. AutoAux를 붙인다.
Extrapolate 콤마 뒤 공백Extrapolate(3/4, cc)(공백)는 파싱 실패. Extrapolate(3/4,cc)로 붙여 쓴다.
DFT(D4) → CCSD(T)를 한 $new_jobD4 분산이 CC 단계로 넘어가 “dispersion + correlated method” 오류로 죽는다. CC는 입력 파일을 분리하고 D4를 뺀다.
CCSD(T)에 분산 보정 추가CCSD(T)는 분산을 내재한다. D4를 또 넣으면 이중 계산이다. CC 단계엔 분산 보정 없이.

SCF가 수렴하지 않을 때

매뉴얼 §8.3은 SCF 수렴 실패가 거의 항상 열린 껍질 상황에서 나오고, 해결책의 핵심은 “더 나은 초기 궤도(better starting orbitals)”라고 못 박는다. 권장 전략은 이렇다.

전략 ① — 작은 기저집합으로 먼저 수렴

# 1단계: 작은 기저집합 + 느슨한 수렴 + 강한 감쇠
! BP86 def2-SV def2/J SlowConv LooseSCF
%scf
   MaxIter 300
end
* xyzfile 0 3 mol.xyz

$new_job

# 2단계: 1단계의 궤도를 읽고 큰 기저집합으로 확장
! BP86 def2-TZVP def2/J MOREAD
%moinp "step1.gbw"
%scf
   GuessMode CMatrix
end
* xyzfile 0 3

$new_job

# 3단계: 목표 함수로 마무리
! B3LYP D4 def2-TZVP RIJCOSX def2/J MOREAD
%moinp "step2.gbw"
* xyzfile 0 3

전략 ② — SOSCF 또는 TRAH 활용

DIIS가 0.001 언저리에서 정체되면 2차 SCF(SOSCF)나 TRAH(Trust-Region Augmented Hessian)를 켠다.

%scf
   SOSCF      true     # 2차 SCF
   SOSCFStart 0.001    # DIIS 오차가 이보다 작으면 SOSCF로 전환
end
# 가장 어려운 경우의 마지막 수단: TRAH
! B3LYP def2-TZVP TRAH

전략 ③ — 큰 감쇠와 level shift

%scf
   DampFac    0.90    # 큰 감쇠
   DampErr    0.02    # DIIS 오차가 이 값 이하가 되면 감쇠 끔
   Shift shift 0.5 erroff 0 end   # 가상 궤도를 0.5 Eh 만큼 위로 밀어 올림
end

전략 ④ — 연관된 닫힌 껍질에서 시작

홀수 전자 시스템이 잘 수렴하지 않으면, 양이온이나 음이온의 닫힌 껍질 계산을 먼저 하고 그 궤도를 읽어 오는 방법이 있다. 닫힌 껍질이 대체로 더 잘 수렴한다.

수렴 문제의 8할은 좌표

매뉴얼도 대놓고 말하듯, 수렴 실패의 가장 흔한 원인은 “말도 안 되는 구조”다. 결합 길이가 0.5 Å로 짧거나, 두 원자가 같은 자리에 있거나, 단위가 Å이 아니라 bohr인 채로 들어갔거나 하는 경우다. 방법을 바꾸기 전에 좌표가 화학적으로 말이 되는지부터 확인한다.

최적화가 발산할 때

  1. 최대 step 줄이기: %geom MaxStep 0.1 end (단위 bohr). 진동을 잠재운다.
  2. 좌표계 전환: !COpt로 데카르트 좌표를 시도한다.
  3. 초기 헤시안 강화: 싼 방법으로 헤시안을 계산한 뒤 InHess Read로 읽어 온다. 매뉴얼이 드는 예가 “1단계 NumFreq → 2단계 OptTS” 패턴이다.
  4. SCF 임계값 강화: 평탄한 표면에서는 SCF 잡음이 그래디언트를 흔든다. TightSCF 이상을 권한다.
  5. 적분 격자 강화: DefGrid3으로 DFT 격자 정밀도를 올린다.

진동수에 작은 음수가 섞일 때

허수가 ±10~30 cm⁻¹ 정도로 작으면 대개 “진짜 음의 곡률”이 아니라 수치 잡음이다. 아래 순서로 시도해 본다.

  1. VeryTightSCF DefGrid3로 SCF와 격자 정밀도를 올린 뒤 재최적화 + 재계산.
  2. VeryTightOpt로 최적화 임계값을 강화.
  3. NumFreq CentralDiff true로 양측 차분(시간은 2배가 된다).

반대로 큰 허수(수백 cm⁻¹)는 진짜 음의 곡률이다. 그 모드 방향으로 약간 변위를 줘서 재최적화하면 된다. orca_pltvib를 쓰면 변위된 좌표를 쉽게 만들 수 있다.

메모리 부족

“Please increase MaxCore” 메시지를 만났다면 아래를 점검한다.

  • %maxcore 값을 늘린다 (단위 MB). 가용 메모리의 60~70%까지 배정한다.
  • 병렬 프로세스 수를 줄여 코어당 메모리를 늘린다.
  • 스크래치 디렉토리($ORCA_SCRDIR)가 용량이 넉넉한 빠른 SSD를 가리키는지 확인한다.
  • 가능하면 RI 근사(RIJCOSX, RI-JK)를 켜 메모리를 아낀다.
# 클러스터 작업 스크립트에서 스크래치 설정 예
export ORCA_SCRDIR=/scratch/$USER/orca_$$
mkdir -p $ORCA_SCRDIR
cd $ORCA_SCRDIR
orca $SLURM_SUBMIT_DIR/job.inp > $SLURM_SUBMIT_DIR/job.out
cp -r * $SLURM_SUBMIT_DIR/
cd / && rm -rf $ORCA_SCRDIR

병렬이 느릴 때

코어 수를 늘렸는데 속도가 별로 안 빨라지면 아래를 점검한다.

  • I/O 병목: 네트워크 디스크에서 실행하면 모든 코어가 같은 디스크를 두드려 느려진다. 반드시 로컬 디스크(NVMe SSD 이상)를 스크래치로 쓴다.
  • 과도한 병렬화: RI-DFT는 16코어 이상에서 효율이 떨어진다. CCSD(T)는 8~16코어가 무난하다.
  • OpenMPI 통신: 노드 간 통신(infiniband 등)이 없으면, 한 노드 안에서만 병렬화하는 게 좋다.
  • NumFreq, NEB처럼 “독립적인 변위·이미지”가 많은 작업은 nprocs_group으로 변위 단위 병렬화를 쓰면 좋다.

스핀 오염

UKS/UHF 계산에서 ⟨S²⟩이 이상값에서 벗어나면 “스핀 오염”이 있다고 한다. 도플렛(S = 1/2)의 이상값은 0.75, 트리플렛(S = 1)은 2.0이다. 벗어남이 5% 이내면 무시할 만하지만, 10%를 넘으면 결과를 믿기 어려워진다.

매뉴얼이 권하는 진단 도구는 !UNO !UCO 조합이다.

! B3LYP D4 def2-SVP UNO UCO TightSCF

* xyzfile 0 1 mol.xyz

출력의 UCO Overlap 테이블에서 0.85 이하 오버랩이 보이면 “스핀-커플드 페어”로 읽는다. 단일항 디라디칼이나 결합이 끊어지는 과정에서 자주 나온다. 이런 시스템은 대체로 단일참조 DFT/HF의 한계 영역이라, 정확한 결과를 원하면 다중참조(CASSCF/NEVPT2)로 넘어가는 게 좋다.

상황별 권장 워크플로우

일반 유기 분자의 정밀 자유에너지

  1. r2SCAN-3c Opt Freq로 구조와 깁스 보정을 얻는다.
  2. DLPNO-CCSD(T)/cc-pVTZ + Extrapolate(3/4,cc) 단일점으로 전자 에너지를 정밀화한다.
  3. 필요하면 SMD로 용매 효과를 더한다.

전이금속 착물 (3d 금속)

  1. TPSSh D4 def2-TZVP Opt Freq — 메타-GGA 하이브리드가 스핀 상태를 잘 묘사.
  2. 스핀 상태가 미묘하면 같은 방법으로 다른 다중도를 모두 계산해 비교한다.
  3. UV-Vis는 TDDFT, EPR g-tensor는 !EPRNMR로 추가 계산한다.

유기 광물리 (UV-Vis, 형광)

  1. 기저 상태: B3LYP D4 def2-TZVP Opt.
  2. 흡수: 위 구조에서 TDDFT NRoots=20.
  3. 형광: %tddft IRoot 1 end !Opt로 S1 최적화 후 다시 TD-DFT.
  4. 전하 이동 의심: CAM-B3LYP 또는 wB97X-V로 재계산하여 비교.

반응 메커니즘

  1. 반응물·생성물을 r2SCAN-3c로 최적화.
  2. !XTB NEB-TS로 빠르게 TS 1차 추정.
  3. DFT 수준으로 OptTS + AnFreq + IRC. 정확히 하나의 허수 모드 확인.
  4. 모든 상태점에 DLPNO-CCSD(T) 단일점 + SMD 보정.
  5. ΔG, ΔGrxn 산출.

매뉴얼이 강조하는 일반 원칙

기저집합의 일관성

매뉴얼 §8.2가 강조하듯, 최소 기저집합(STO-3G)나 3-21G 같은 작은 split-valence 기저집합은 정량적 결과엔 부적합하다. Karlsruhe def2 시리즈를 일관되게 쓰는 게 좋다. 반응물·생성물·전이 상태 모두 같은 기저집합을 써야 오차가 상쇄된다.

DFT는 격자가 정확도의 한계

큰 기저집합(예: def2-QZVPP)로 작업할 때 DFT 적분 격자가 DefGrid2에 머물러 있으면, 정확도가 격자 잡음에 묶인다. 큰 기저집합을 쓸 때는 DefGrid3으로 격자도 같이 올린다. 매뉴얼의 표현을 빌리면 “격자에서 온 수치 잡음으로 애써 얻은 정확도를 깎아 먹지 말 것”.

분산 보정은 거의 무료

D3·D4 보정은 계산 시간을 거의 늘리지 않으면서 정확도를 크게 끌어올린다. 함수가 분산력을 자체 처리(VV10 내장)하는 경우가 아니면 거의 항상 켜는 게 좋다.

정상 종료가 곧 정확한 결과는 아니다

ORCA TERMINATED NORMALLY가 떠도 결과가 저절로 믿을 만해지는 건 아니다. (1) SCF 수렴 여부, (2) 최적화 수렴 여부, (3) 진동수가 모두 양수인지(TS는 허수 하나인지), (4) ⟨S²⟩가 합리적인지, (5) 출력의 WARNING 메시지를 반드시 직접 확인한다.

매뉴얼의 마지막 조언

매뉴얼 §8.2 끝에 인상적인 한마디가 있다. “문제를 푸는 건 컴퓨터가 아니라 사람이다. 숫자 한두 개를 더 정확하게 만든다고 해서, 그게 우리가 다루는 분자의 화학·분광학을 이해하는 데 곧장 도움이 되는 건 아니다. 기술적 디테일에 갇혀 본래의 통찰을 놓치는 위험은 실제로 있다.” 계산의 정확도를 좇는 건 좋지만, 그게 화학적 통찰을 대신해 주지는 않는다는 걸 잊지 말자.

여기까지가 이 가이드의 마지막 장이다. 일상 연구에 조금이라도 도움이 됐으면 한다. 더 깊은 옵션이나 특수한 사용 사례는 ORCA 매뉴얼 6.0.0판(공식 PDF)을 직접 펴 보면 된다. 그리고 막히는 데가 있으면 공식 포럼(orcaforum.kofo.mpg.de)에서 비슷한 사례를 찾아보는 게 큰 도움이 된다.

ORCA 한국어 사용자 가이드 · ORCA Manual 6.0.0 기반 · 비공식 정리물이다.