用于批量生成Q-Chem计算X-ray的程序
📜 qchem_xray.py 详细使用说明
本程序由wangsy于2025年11月02日完成。
如有需要,请联系wang.sy@vip.163.com 。
1. 脚本概述
qchem_xray.py 是一个用于自动生成 Q-Chem 量子化学计算输入文件的 Python 脚本,专门针对 X 射线光谱 (XAS) 相关的计算。
该脚本的核心功能包括:
- 解析配置文件: 自动读取
input.ini文件中的所有设置。 - 读取结构: 从指定的 XYZ 文件(如
pyridine.xyz)中提取分子结构。 - 生成输入文件: 根据用户指定的计算类型,自动生成 Q-Chem 输入文件 (
.in)。 - 目录管理: 为每个计算的原子和计算类型创建独立的目录结构 (
1/GS/,1/FCH/,1/FCH_R/,1/LUMO/,1/TD_XAS/,1/TD_XES/,1/Z+1/)。 - 依赖管理: 自动处理激发态计算(FCH, FCH_R, LUMO, TD_XAS, TD_XES)对基态 (GS) 计算的依赖。
- 轨道检测: 自动调用外部脚本
extract_orbital_composition.py来分析 GS 计算的.fchk文件,确定芯轨道的位置,并将其缓存在[num]/GS/[num]GS_orbital.cache文件中。 - 作业提交: (可选) 自动将生成的输入文件提交到计算队列 (通过
[submit]中的命令)。
2. 核心逻辑与工作流程
A. 配置文件 (input.ini)
脚本的所有行为都由 input.ini 控制。它分为几个关键部分:
[submit]: 定义如何提交作业 (qsub 命令)。[xyz]: 定义结构文件名 (filename) 和每种计算类型的电荷/多重度。[keys]: 定义每种计算类型所需的 Q-Chem 关键字 (REM 变量)。[excited]: 定义要计算的原子 (num)、激发原子的基组 (basis) 以及电离哪个自旋轨道 (ionization_spin)。[non_excited]: 定义非激发原子的基组,用于构建混合基组。
B. 依赖关系 (GS -> 激发态)
这是一个至关重要的流程:
- 必须首先运行基态 (GS) 计算 (
qchem_xray.py GS)。 - 必须等待 GS 计算正常完成 (脚本会检查
.out文件中是否包含 "Have a nice day.")。 - GS 计算完成后,才能运行所有其他依赖于 GS 轨道的计算,包括
FCH,FCH_R,LUMO,TD_XAS,TD_XES和CACHE。 Z+1计算不依赖于 GS,可以与 GS 同时运行。
C. 芯轨道自动检测 (缓存机制)
为了运行 FCH, FCH_R, LUMO, TD_XAS, TD_XES 和 CACHE 的计算,脚本必须知道要激发哪个芯轨道 (例如,N 1s)。这个过程是自动的:
- 当运行激发态计算(或
CACHE)时,脚本会首先在[num]/GS/目录中寻找[num]GS_orbital.cache缓存文件。 - 如果缓存文件不存在,或者脚本发现缓存中的轨道局域化程度很差(默认阈值 \< 95.0%),它将自动调用
extract_orbital_composition.py脚本。 extract_orbital_composition.py脚本会读取[num]/GS/目录下的.fchk文件,生成[num]GS_orbital.cache文件(未找到extract_orbital_composition.py的情况), 局域化并覆盖当前[num]GS_orbital.cache文件(找到extract_orbital_composition.py,但是相应芯轨道阈值 \< 95.0%的情况)。extract_orbital_composition.py的更多用法请查阅其手册。- 脚本随后读取这个缓存文件,根据
[excited]->ionization_spin(alpha 或 beta) 的设置,找到能量最低的芯轨道及其编号 (eo)。 - 这个轨道编号 (eo) 将被用于生成激发态计算的输入文件 (写入
$occupied、$reorder_mo或者$alist部分)。 -
[num]GS_orbital.cache文件内容示例如下(此格式由extract_orbital_composition.py生成并由qchem_xray.py读取):n_alpha=21 n_beta=21 2|98.83 2|98.83 2|49.63 2|49.63 9|54.20 9|54.20 3|49.30 3|49.30 19|45.25 19|45.25 -------------------------------------------------- 警告: 原始fchk文件轨道百分比 < 95.0% (Max: 49.63%) LOCALIZED: LMO_A | LMO_B | ORIG_A | ORIG_B --------------------------------------------------此文件包括局域化后的结果,如果原本波函数的芯轨道就是局域化的,就没有最右两列和最后四行内容,如下所示:
n_alpha=21 n_beta=21 2|98.83 2|98.83 9|54.20 9|54.20 19|45.25 19|45.25
3. 计算类型与选项详解
A. 支持的计算类型
脚本支持以下 8 种计算类型,必须在命令行中指定一种:
GS(Ground State): 基态计算。这是后续所有激发态计算的基础。FCH(Final Core-Hole): 芯激发态计算(芯电离)。通过在$occupied部分移除一个芯轨道来实现。FCH_R(FCH Reorganization): 芯激发态重排计算。通过$reorder_mo关键字实现,将芯轨道放到最外层轨道,然后控制电荷数来控制最外层电子电离(芯轨道)(通常用于 ROKS/ROHF 计算)。LUMO(LUMO Excitation): 芯激发到 LUMO 或 LUMO+N 的近似计算。通过在$occupied部分将电子从芯轨道移动到指定的未占据轨道。TD_XAS(Time-Dependent DFT): TDDFT 计算,用于模拟 XAS 吸收谱。通过$alist关键字指定芯轨道。TD_XES(TDDFT for XES): TDDFT 计算,用于模拟 XES 发射谱。通过$alist关键字指定芯轨道,内置了FCH的计算。Z+1(Z+1 Approximation): Z+1 近似计算。将目标原子替换为周期表中的下一个元素(例如 N -> O)来模拟芯激发。此计算不依赖 GS。CACHE(Cache Only): 仅生成或更新轨道缓存。用于检查 GS 计算的轨道局域化情况,或在运行激发态计算前强制生成缓存。
B. 命令行选项
[计算类型]: (必需) 上述 8 种类型之一。-h, --help: 显示详细的帮助信息。-r, --retry: 仅重试上次失败或跳过的原子。它会读取[calc_type]_skipped.log文件。-y, --yes: 自动确认,覆盖所有已存在的计算目录。-c CONFIG: 指定配置文件的路径 (默认:input.ini)。-l LEVEL(仅用于 LUMO): (LUMO 专用选项) 指定激发能级,激发到LUMO + LEVEL。-l 0(默认) 表示激发到 LUMO。-l 1表示激发到 LUMO+1。
-a ATOMS: 手动指定要计算的原子列表 (例如: '1 5 10-15 C'),这将覆盖input.ini中的[excited]->num设置。-co ORBITALS(高级): 手动覆盖芯轨道号,跳过自动检测。格式: 'atom1:orb1 atom2:orb2' (例如: '1:2 5:3')。
4. 完整运行示例
以下是使用示例 input.ini 和 pyridine.xyz 文件运行计算的完整分步指南。
A. 准备文件
- 创建一个新的工作目录。
- 在该目录中创建以下两个文件:
文件 1: input.ini
# ====================================================================
# 重要提示:
# 此配置文件中的所有值都必须由三引号 """ ... """ 包裹。
# 这是为了确保程序能正确读取,请不要删除或修改这些引号。
# 您只需要修改引号内部的内容即可。
# ====================================================================
# ==========================================================
# Q-Chem 作业提交配置
# ==========================================================
[submit]
# 设置用于提交计算的命令,如果留空或加#则不自动提交
qsub = """
qqchem 1 2 old
"""
# ==========================================================
# 分子结构与电荷/多重度配置
# ==========================================================
[xyz]
# xyz坐标文件名
filename = """
pyridine.xyz
"""
# 1. 基态 (GS) 的电荷和自旋多重度
GS_charge_mult = """
0 1
"""
# 2. 芯电离 (FCH / UKS) 的电荷和自旋多重度
FCH_charge_mult = """
1 2
"""
# 3. 芯电离 (FCH_R / ROKS) 的电荷和自旋多重度
FCH_R_charge_mult = """
1 2
"""
# 4. LUMO+N 芯激发 (LUMO) 的电荷和自旋多重度 (中性激发)
LUMO_charge_mult = """
0 1
"""
# 5. 芯激发 (TDDFT/XAS) 的电荷和自旋多重度
TD_XAS_charge_mult = """
0 1
"""
# 6. XES 发射谱 (TD_XES) 的电荷和自旋多重度 (与FCH相同)
TD_XES_charge_mult = """
1 2
"""
# 7. Z+1 近似的电荷和自旋多重度
Z+1_charge_mult = """
1 1
"""
# ==========================================================
# Q-Chem 计算关键词 ($rem 部分)
# ==========================================================
[keys]
# ----------------- 1. 基态 (GS) 计算关键词 -----------------
GS = """
METHOD bp86
BASIS mixed
PURECART 1111
GEN_SCFMAN true
SCF_ALGORITHM diis
BASIS2 def2-svp
UNRESTRICTED true
SCF_GUESS_MIX 5
SCF_CONVERGENCE 8
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
NBO true
"""
# ----------------- 2. 芯电离 (FCH / UKS) 计算关键词 -----------------
FCH = """
METHOD bp86
BASIS mixed
PURECART 1111
GEN_SCFMAN false
SCF_ALGORITHM diis
SCF_GUESS read
UNRESTRICTED true
MOM_START 1
MOM_METHOD imom
SCF_CONVERGENCE 6
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""
# ----------------- 3. 芯电离 (FCH_R / ROKS) 计算关键词 -----------------
FCH_R = """
METHOD bp86
BASIS mixed
PURECART 1111
GEN_SCFMAN false
SCF_ALGORITHM sgm
SCF_GUESS read
UNRESTRICTED false
SCF_CONVERGENCE 6
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""
# ----------------- 4. 芯激发 (LUMO+N) 计算关键词 -----------------
LUMO = """
METHOD bp86
BASIS mixed
PURECART 1111
GEN_SCFMAN false
SCF_ALGORITHM diis
SCF_GUESS read
UNRESTRICTED true
MOM_START 1
MOM_METHOD imom
SCF_CONVERGENCE 6
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""
# ----------------- 5. 芯激发 (TDDFT/XAS) 计算关键词 -----------------
TD_XAS = """
EXCHANGE bp86
BASIS mixed
PURECART 1111
SKIP_SCFMAN true
SCF_GUESS read
UNRESTRICTED true
CIS_N_ROOTS 300
CIS_TRIPLETS false
TRNSS true
TRTYPE 3
N_SOL 1
FAST_XAS true
! XAS_EDGE 6
! XAS_SCREEN_LEVEL 1
! REL_SHIFT 6
"""
# ----------------- 6. XES 发射 (TDDFT/XES) 计算关键词 -----------------
TD_XES = """
EXCHANGE bp86
BASIS mixed
PURECART 1111
SCF_GUESS read
UNRESTRICTED true
MOM_START 1
MOM_METHOD imom
SCF_CONVERGENCE 6
CIS_N_ROOTS 5
CIS_TRIPLETS false
"""
# ----------------- 7. Z+1 近似计算关键词 -----------------
Z+1 = """
METHOD bp86
BASIS mixed
PURECART 1111
GEN_SCFMAN true
SCF_ALGORITHM diis
BASIS2 def2-svp
UNRESTRICTED true
SCF_GUESS_MIX 5
SCF_CONVERGENCE 8
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
"""
# ==========================================================
# 基组定义 ($basis 部分)
# ==========================================================
# ----------------- 激发原子配置 -----------------
[excited]
# 定义被激发的原子 (可以用原子序号、范围、元素符号)
# 示例: "1 3-5 N" 表示第1个原子、第3到5个原子、以及所有的N原子
num = """
N 2
"""
# 为激发原子指定的基组
basis = """
6-311g
"""
# 指定从 'alpha' 还是 'beta' 轨道激发 (默认为 'beta')
ionization_spin = """
beta
"""
# ----------------- 非激发原子配置 -----------------
# 可以定义多组非激发原子及其基组
# 命名规则: num1/basis1, num2/basis2, ...
[non_excited]
num1 = """
1
"""
basis1 = """
3-21G
"""
num2 = """
C
"""
basis2 = """
6-31G
"""
num3 = """
H
"""
basis3 = """
STO-3G
"""
# 如果不需要第4组,可以将其留空
num4 = """
"""
basis4 = """
"""
文件 2: pyridine.xyz
11
N -1.21390500 -0.76688800 0.00000000
C -1.23050600 0.58519600 0.00000000
C -0.07028600 1.38150500 0.00000000
C 1.18362600 0.74775800 0.00000000
C 1.21742000 -0.65680000 0.00000000
C 0.00000000 -1.36257100 0.00000000
H -2.22120100 1.05147700 0.00000000
H -0.15352900 2.47192200 0.00000000
H 2.10854100 1.33207700 0.00000000
H 2.16639700 -1.20029000 0.00000000
H -0.00439300 -2.45750200 0.00000000
B. 步骤 1: 运行基态 (GS) 和 Z+1 计算
[excited] -> num 设置为 "N 2",脚本会将其解析为 "所有 N 原子 (原子 1)" 和 "原子 2 (C 原子)"。
运行命令:
qchem_xray.py GS
qchem_xray.py Z+1
脚本行为:
- 创建目录
1/GS/和2/GS/。 - 在
1/GS/中生成1GS.in,在2/GS/中生成2GS.in。 - 创建目录
1/Z+1/和2/Z+1/。 - 在
1/Z+1/中生成1Z+1.in(N -> O),在2/Z+1/中生成2Z+1.in(C -> N)。 - 在每个新创建的目录中执行
qqchem 1 2 old命令提交作业。
示例: 生成的 1GS.in 文件内容
(注意 BASIS mixed 和混合基组的定义)
$rem
METHOD bp86
BASIS mixed
PURECART 1111
GEN_SCFMAN true
SCF_ALGORITHM diis
BASIS2 def2-svp
UNRESTRICTED true
SCF_GUESS_MIX 5
SCF_CONVERGENCE 8
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
MAX_SCF_CYCLES 300
NBO true
$end
$nbo
naomo
$end
$molecule
0 1
N -1.21390500 -0.76688800 0.00000000
C -1.23050600 0.58519600 0.00000000
C -0.07028600 1.38150500 0.00000000
C 1.18362600 0.74775800 0.00000000
C 1.21742000 -0.65680000 0.00000000
C 0.00000000 -1.36257100 0.00000000
H -2.22120100 1.05147700 0.00000000
H -0.15352900 2.47192200 0.00000000
H 2.10854100 1.33207700 0.00000000
H 2.16639700 -1.20029000 0.00000000
H -0.00439300 -2.45750200 0.00000000
$end
$basis
N 1
6-311g
****
C 2
6-31G
****
C 3
6-31G
****
C 4
6-31G
****
C 5
6-31G
****
C 6
6-31G
****
H 7
STO-3G
****
H 8
STO-3G
****
H 9
STO-3G
****
H 10
STO-3G
****
H 11
STO-3G
****
$end
注意:
non_excited中num1=1(3-21G) 被num2=C(6-31G) 的规则覆盖了,因为原子 1 (N) 匹配了excited规则,而原子 2-6 (C) 匹配了num2规则。注意: 如果计算关键词中含有
NBO,将会自动添加以下模块:$nbo naomo $end
C. 步骤 2: (可选) 检查/生成轨道缓存
注意:如果不运行该步骤,不会生成[num]GS_orbital.cache文件。但是后续运行依赖于GS的计算类型,也会自动调用extract_orbital_composition.py生成[num]GS_orbital.cache文件,因此此步骤不是必选。但是推荐计算完所有GS后,进行此步骤,查看有没有异常轨道或者未局域化轨道,防止造成计算资源浪费。
等待步骤 1 中的 GS 计算全部完成。
运行命令:
qchem_xray.py CACHE
脚本行为:
- 脚本开始处理原子 1 (N) 和 2 (C)。
- 它将调用
extract_orbital_composition.py(因为缓存尚不存在)。 - 该脚本会分析
1/GS/1GS.fchk和2/GS/2GS.fchk。 - 如果轨道局域化程度低,
extract_orbital_composition.py可能会提示用户是否使用 MOKIT 进行局域化(这是交互式的)。 - 最终生成
1/GS/1GS_orbital.cache和2/GS/2GS_orbital.cache。 - 同时生成一个总结文件
orbital.cache。
D. 步骤 3: 运行激发态计算 ( FCH, FCH_R, LUMO, TD_XAS, TD_XES )
等待 GS 计算完成后,您可以运行所有依赖 GS 的计算。
运行命令:
qchem_xray.py FCH
qchem_xray.py FCH_R
qchem_xray.py LUMO
qchem_xray.py TD_XAS
qchem_xray.py TD_XES
脚本行为 (以 FCH 为例):
- 创建
1/FCH/和2/FCH/。 - 读取缓存: 脚本读取
1/GS/1GS_orbital.cache和2/GS/2GS_orbital.cache(如果缓存不存在,它会像步骤 2 一样自动生成它们)。 - 确定轨道: 根据
[excited]->ionization_spin = beta,它会查找 beta 轨道的最低芯轨道。假设对于原子 1 (N),它找到的是轨道 2。 - 生成输入: 生成
1/FCH/1FCH.in。 - 提交作业: 在
1/FCH/目录中运行qqchem 1 2 old。
示例: 生成的 1FCH.in 文件内容
(假设 GS 有 21 个 alpha 和 21 个 beta 电子, 且 N 1s (beta) 是轨道 2)
$occupied
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
$end
$rem
METHOD bp86
BASIS mixed
PURECART 1111
GEN_SCFMAN false
SCF_ALGORITHM diis
SCF_GUESS read
UNRESTRICTED true
MOM_START 1
MOM_METHOD imom
SCF_CONVERGENCE 6
INTEGRAL_SYMMETRY false
POINT_GROUP_SYMMETRY false
IQMOL_FCHK true
*MAX_SCF_CYCLES 300
$end
$molecule
1 2
N -1.21390500 -0.76688800 0.00000000
C -1.23050600 0.58519600 0.00000000
C -0.07028600 1.38150500 0.00000000
C 1.18362600 0.74775800 0.00000000
C 1.21742000 -0.65680000 0.00000000
C 0.00000000 -1.36257100 0.00000000
H -2.22120100 1.05147700 0.00000000
H -0.15352900 2.47192200 0.00000000
H 2.10854100 1.33207700 0.00000000
H 2.16639700 -1.20029000 0.00000000
H -0.00439300 -2.45750200 0.00000000
$end
$basis
N 1
6-311g
****
C 2
6-31G
****
C 3
6-31G
****
C 4
6-31G
****
C 5
6-31G
****
C 6
6-31G
****
H 7
STO-3G
****
H 8
STO-3G
****
H 9
STO-3G
****
H 10
STO-3G
****
H 11
STO-3G
****
$end
(注意 $occupied 部分的 beta 轨道 (第二行) 中将会去掉轨道 2, 表示电离的芯轨道是2。)
E. 步骤 4: LUMO 专用额外计算
LUMO 计算的行为与 FCH 类似,但它会将电子移动到未占据轨道,并且受 -l 选项控制。
运行命令 (情况 A: 默认激发到 LUMO):
qchem_xray.py LUMO
- 这等同于
qchem_xray.py LUMO -l 0。 - 脚本会将电子从芯轨道 (例如轨道 2) 移动到
LUMO(即n_beta + 1,如果 n_beta=21,则移动到轨道 22)。 - 生成的
1LUMO.in中$occupied的 beta 列表将是:1 3 4 ... 21 22。
运行命令 (情况 B: 激发到 LUMO+2):
qchem_xray.py LUMO -l 2
- 脚本使用
LEVEL = 2。- 脚本会创建
LUMO+2文件夹。 - 脚本会将电子从芯轨道 (例如轨道 2) 移动到
LUMO + 2(即(n_beta + 1) + 2,如果 n_beta=21,则移动到轨道 24)。 - 生成的
1LUMO+2.in中$occupied的 beta 列表将是:1 3 4 ... 21 24。
- 脚本会创建
5. 高级选项详解
A. -r, --retry (重试失败/跳过选项)
-
功能:
--retry选项允许您仅重试在上一次运行中生成失败或被用户手动跳过(例如,在提示覆盖时选择了 'n')的原子。 -
适用场景:
假设您正在为 20 个原子运行FCH计算。- 在第一次运行时,原子 1-15 成功生成。
- 原子 16 的 GS 计算未完成,导致生成失败。
- 当脚本提示是否覆盖原子 17 的现有目录时,您不小心选了 "n" (否),导致它被跳过。
- 原子 18-20 成功。
在这种情况下,您不需要重新运行所有 20 个原子。您可以先修复原子 16 的问题(例如,重新运行 GS 计算),然后使用
--retry标志。 -
工作原理:
- 日志文件: 当
qchem_xray.py运行GS之外的计算时,它会在print_summary函数中评估哪些原子生成失败 (self.failed_generations) 或被跳过 (self.skipped_atoms)。 - 它会将这些失败/跳过的原子编号列表写入一个日志文件,命名格式为
[calc_type]_skipped.log(例如FCH_skipped.log)。 - 重试模式: 当您使用
qchem_xray.py FCH -r再次运行脚本时:- 脚本会查找
FCH_skipped.log文件。 - 它会读取该文件中的所有原子编号。
- 它会忽略
input.ini中[excited]->num的设置,转而只对从日志文件中读取的原子(在此例中为 16 和 17)执行计算。
- 脚本会查找
注意: 此选项仅对
FCH,FCH_R,LUMO,TD_XAS,TD_XES有效,因为它对GS或Z+1没有意义。 - 日志文件: 当
示例命令:
# 重试上次未生成的`FCH`计算任务, 读取的是`FCH_skipped.log`文件中的原子列表,可以自己调整。
qchem_xray.py FCH -r"
B. -co ORBITALS, --core-orbital ORBITALS (手动指定芯轨道)
-
功能:
这是一个非常高级的选项,允许您手动覆盖并指定用于计算的芯轨道编号,完全跳过脚本的自动轨道检测(即读取.cache文件或调用extract_orbital_composition.py的过程)。 -
格式:
必须使用'atom1:orb1 atom2:orb2'的格式,例如:-co "1:2 5:3"。 -
适用场景:
- 自动检测失败:
extract_orbital_composition.py脚本可能因各种原因(如轨道混合严重、NBO 分析失败)无法正确识别您想要的 1s 芯轨道。 - 选择特定轨道: 您可能不想激发能量最低的芯轨道(例如,对于硫 (S),您可能想激发 1s,但自动检测却错误地选择了 2s/2p)。
- 节省时间: 您已经通过其他方式(例如,手动检查
GS.fchk或GS.out)知道了芯轨道的编号,不想等待(可能很慢的)extract_orbital_composition.py脚本再次运行。
- 自动检测失败:
-
工作原理:
- 解析: 脚本启动时会解析您提供的字符串 (例如
"1:2 5:3"),并将其转换为一个字典:{1: 2, 5: 3}。 - 传递: 这个字典被传递给
QchemInputGenerator。 - 覆盖: 当脚本为激发态(如
FCH)准备输入文件时,在_get_excited_orbital函数中,它会首先检查当前原子编号是否在您的 "覆盖字典" 中。 - 跳过检测:
- 如果原子在字典中 (例如原子 1),脚本会打印一条 "命令行覆盖" 消息,并立即使用您指定的轨道号 (轨道 2)。它不会尝试读取
1GS_orbital.cache文件,也不会运行extract_orbital_composition.py。 - 如果原子不在字典中 (例如原子 2),脚本将回退到标准的自动检测流程(读取缓存或运行外部脚本)。
- 如果原子在字典中 (例如原子 1),脚本会打印一条 "命令行覆盖" 消息,并立即使用您指定的轨道号 (轨道 2)。它不会尝试读取
- 解析: 脚本启动时会解析您提供的字符串 (例如
示例命令:
假设 input.ini 中 num = "N 2" (即原子 1 和 2)。自动检测发现原子 1 的芯轨道是 2,但原子 2 (C) 的检测失败了。您手动检查发现原子 2 的芯轨道是 3。您可以使用以下命令:
# 运行 FCH
# - Atom 1: 使用 -co 指定的轨道 2
# - Atom 2: 使用 -co 指定的轨道 3
qchem_xray.py FCH -co "1:2 2:3"
C. 自定义计算类型
-
功能:
这是一个非常灵活的选项,允许您自定义一个计算类型, 您只需要修改该程序表头部分, 指定一个计算类型, 并标记其采用的轨道处理类型即可。 -
修改.py格式:
# ============================================================================== # 全局配置区域: 计算模式与轨道处理策略定义 # ============================================================================== # 您可以在此处添加自定义的计算类型。 # 格式说明: # '计算类型名': { # 'description': '描述文本', # 'strategy': '轨道处理策略', # 可选值: 'none' (无操作), 'occupied' ($occupied), # 'reorder' ($reorder_mo), 'alist' ($alist), 'lumo' (LUMO+N) # 'requires_gs': True/False, (是否需要读取GS的轨道缓存和MO文件) # 'handler': '处理逻辑', # 可选值: 'standard' (标准生成), 'z_plus_1' (Z+1近似), 'cache' (仅缓存) # } # === 在下方添加您的自定义计算类型 === # 'CUSTOM': { # 'description': '自定义计算示例', # 'strategy': 'occupied', # 假设使用 $occupied 方法 # 'requires_gs': True, # 假设基于GS # 'handler': 'standard' # }, # =================================== -
修改.ini格式:
在
[xyz]部分添加相应计算类型的电荷和自旋多重度, 例如:CUSTOM_charge_mult = """ 1 2 """在
[keys]部分添加相应计算类型的关键词部分, 例如:CUSTOM = """ PURECART 1111 INTEGRAL_SYMMETRY false POINT_GROUP_SYMMETRY false IQMOL_FCHK TRUE MAX_SCF_CYCLES 300 """