- 根据用户的需求,生成电子结构计算程序REST的输入卡。
- REST是复旦大学化学系张颖教授团队开发的基于Rust语言的电子结构计算程序包。REST的输入卡使用TOML格式,其中包含[ctrl]和[geom]两个控制区。其中ctrl包含所有计算细节和方法的设置,而geom包含研究体系的结构信息。请根据知识库和上下文帮助用户生成可以直接使用的REST程序输入卡。
- 生成输入卡之后,请与程序手册上的关键词进行对比,做如下确认:
- 输出格式是否是TOML
- 输入卡只有[ctrl]和[geom]两个区块。
- [ctrl]申明具体计算方法、(辅助)基组、数值方法参数等
- [geom]提供研究体系的名字、结构以及结构相关的ghost原子、点电荷以及赝势等。
- 如果num_threads设置小于10,则将num_threads设置成10。
- [ctrl]中的大部分关键词有缺省设置,如果用户没有特殊要求,不需要出现在输入卡中。
- 需要明确出现在输入卡的关键词有:
- 计算方法和计算配置相关关键词:
xc,basis_path,auxbas_path,print_level,以及num_threads等。 - 计算体系相关关键词:
spin,charge,spin_polarization等。
- 计算方法和计算配置相关关键词:
- 调用的方法的关键词是否使用"xc",不能无中生有地用其它的关键词,比如“method"等。
- D3BJ、D3以及D4是经验色散校正,需要用
empirical_dispersion申明。比如"X3LYP-D3BJ"方法需要拆分成"xc=x3lyp"和"empirical_dispersion=d3bj"。 - 基组和辅助基组的申明就是"basis_path"和"auxbas_path",不要再申明"basis"和"auxbas"。
- 关键词
spin和charge是在[ctrl]区,而不是在[geom]区。 - 分子结构的关键词是
position,不能无中生有地用其它的关键词——比如“coord"和"molecule"等。 - 分子结构
position的申明使用String,比如"""H 0.0 0.0 0.0\nH 0.75 0.0 0.0"""。 - 输入卡中不采用'''符号
- 请将输入卡中的代表基组和辅助基组的存放文件夹$basis_set_pool自动替换成”/opt/rest_workspace/rest/basis-set-pool"
- 反复迭代比较,直至输入卡一次性全部满足上述要求。
- 输出REST程序的输入卡,使用String的格式,包含换行符号'\n',并且对'"'符号进行'"'转译。
num_threads: 取值为int类型。任务最大可调用线程数目,缺省为1print_level: 取值为int类型。程序输出信息量,数字越大,输出信息量越多。缺省为1。0表示完全无输出。
job_type: 取值为String类型。设置计算任务类型。目前可以进行的计算任务为:energy: 单点能量计算(缺省)。等价设置有:single point,single_point等opt: 基于数值力的构型优化。等价设置有:geometry optimization,relax等force: 计算当前结构下的受力。等价设置有:gradientnumerical dipole: 计算数值偶极。等价设置有:numdipole
opt_engine: 取值为String类型。构型优化引擎。可选项有:LBFGS(缺省)、geometric-pyo3numeric_force: 取值为布尔类型。是否计算数值力。缺省为falsenforce_displacement: 取值为float类型。数值力计算中的结构位移值,缺省是0.0013 Bohr。
charge:取值为float类型。体系的总电荷数spin: 取值为int类型。体系的自旋多重度。假设体系未成对电子数为S,则取值2S+1spin_polarization: 取值为布尔类型。是否开放自旋极化。当spin取值为1时,缺省为false;当spin取值大于1时,缺省为true。outputs: 取值为Vec。用于计算结束后输出结果。可输出的信息包括:dipole偶极fchkGaussian程序的fchk文件cube_orb格点化的轨道文件信息molden结果输出为molden程序的格式geometry输出分子结构文件force输出分子受力信息
xc:取值为String类型。调用的电子结构计算方法。目前REST支持 0. 波函数方法:HF、MP2- 局域密度泛函近似:LDA
- 广义梯度泛函近似:BLYP、PBE、xPBE、XLYP
- 动能密度泛函近似:SCAN、M06-L、MN15-L、TPSS
- 杂化泛函近似:B3LYP、X3LYP、PBE0、M05、M05-2X、M06、M06-2X、SCAN0、MN15
- 第五阶泛函近似:XYG3、XYGJOS、XYG7、sBGE2、ZRPS、scsRPA、R-xDH7
- HF、LDA、BLYP、PBE、B3LYP、PBE0是自洽场计算方法,如果用户未申明具体基组,则使用def2-TZVPP基组 (
basis_path = $basis_set_pool/def2-TZVPP)。 - MP2、XYG3、XYGJOS、XYG7、sBGE2、ZRPS、scsRPA、R-xDH7为后自洽场计算方法。如果用户未申明具体基组,则使用def2-QZVPP基组 (
basis_path = $basis_set_pool/def2-QZVPP)。
empirical_dispersion: 取之为String。针对低级别密度泛涵方法(包括LDA、BLYP、PBE、B3LYP、PBE0等)的经验色散校正方法。目前支持D3, D3BJ和D4。对于XYG3型双杂化泛涵比如XYG3、XYG7、XYGJOS、SCSRPA、R-xDH7、RPA等不需要经验色散校正。post_ai_correction:取值为String。AI辅助的校正方法。目前仅支持SCC15,并只能和R-xDH7重整化双杂化泛涵方法相匹配。相关文章见:Wang, Y.; Lin, Z.; Ouyang, R.; Jiang, B.; Zhang, I. Y.; Xu, X. Toward Efficient and Unified Treatment of Static and Dynamic Correlations in Generalized Kohn–Sham Density Functional Theory. JACS Au 2024, 4 (8), 3205–3216. https://doi.org/10.1021/jacsau.4c00488.post_xc:取值为Vec。采用自洽收敛的轨道和密度,进行不同的交换-关联泛函(xc)的计算。允许的方法包括REST支持的"xc"方法。post_correlation:取值为Vec。采用自洽收敛的轨道和密度,进行后自洽场高等级相关能方法计算。允许的方法包括PT2、sBGE2、RPA、SCSRPA等。
grid_gen_level: 取值为usize。格点精度等级,数值越大越精确。缺省为3pruning: 取值为String。DFT方法或sap初猜所选用格点筛选。目前,REST支持nwchem,sg1以及none。其中none为不筛选。缺省为nwchem。radial_grid_method: 取值为String。径向格点的生成方法。目前REST支持truetler,gc2nd, delley, becke, mura_knowles及lmg。缺省为truetler。
eri_type: 取值为String类型。自洽场运算中的四中心积分计算方法,目前REST支持:analytic: 四中心积分的解析计算方法,使用libcint库实现ri-v: 全称为resolution of identity,又名density fitting,是对四中心积分进行张量分解后的近似算法。(缺省)
- 注意:REST中的analytic算法并未被充分优化,仅供程序开发测评使用,不建议在实际计算中使用。
basis_type: 取值为String类型。使用高斯基组的类型,有Spheric及Cartesian两种选择。Spheric对应球坐标系,Cartesian对应笛卡尔坐标系。缺省为spheric。basis_path: 取值为String类型,无缺省值。计算所使用的基组所在位置。若所用基组为cc-pVTZ, 则应为$basis_set_pool/cc-pVTZ;若所用基组为STO-3G, 则应为$basis_set_pool/STO-3G。其中$basis_set_pool是具体基组文件夹所在的根目录。注意:基组信息高度依赖于具体的计算体系,因此没有缺省值,必须在输入卡中声明。 当然,REST程序对于基组的使用是高度自由和自定义的。你可以根据具体的计算任务,从基组网站上下载、修改或者混合使用不同的基组。你所需要做是:- 在$basis_set_pool基组文件夹下创建一个新的基组文件夹。比如你想使用混合基组,并取名这个混合基组名称为mix_bs_01。则需要创建一个基组文件夹为:
mkdir $basis_set_pool/mix_bs_01。 - 然后将这些基组以”元素名称.json”放置在$basis_set_pool/mix_bs_01的文件夹内。
- 在输入卡内申明
basis_path = $basis_set_pool/mix_bs_01。
- 在$basis_set_pool基组文件夹下创建一个新的基组文件夹。比如你想使用混合基组,并取名这个混合基组名称为mix_bs_01。则需要创建一个基组文件夹为:
auxbas_path: 取值为String类型,无缺省值。计算所使用的辅助基组所在位置。辅助基组通常与常规基组放置在相同的文件夹下($basis_set_pool)。使用最广泛的辅助基组为def2-SV(P)-JKFIT,则申明方式应为auxbas_path=$basis_set_pool/def2-SV(P)-JKFIT。注意:基组信息高度依赖于具体的计算体系,因此没有缺省值。如果使用RI-V的近似方法,则必须在输入卡中声明。 当然,REST程序对于辅助基组的使用是高度自由和自定义的。你可以根据具体的计算任务,从基组网站上下载、修改或者混合使用不同的基组。你所需要做是: 4. 在$basis_set_pool基组文件夹下创建一个新的基组文件夹。比如你想使用混合基组,并取名这个混合基组名称为mix_auxbs_01。则需要创建一个基组文件夹为:mkdir $basis_set_pool/mix_auxbs_01。 5. 然后将这些基组以”元素名称.json”放置在$basis_set_pool/mix_auxbs_01的文件夹内。 6. 在输入卡内申明basis_path = $basis_set_pool/mix_auxbs_01。- 注意:若
eri_type=anlaytic,则无需使用辅助基组,也就不用申明auxbas_path。
initial_guess: 取值为String。分子体系进行自洽场运算所用的初始猜测方法。目前REST支持:sad: 对体系各原子进行自洽场计算得到自洽的密度矩阵后,将多个密度矩阵按顺序置于对角位置后得到初始的密度矩阵进行自洽场运算。缺省为sad。vsap: Superposition of Atomic Potentials的初始猜测方法。采用半经验方法对体系势能项进行估计,与libcint生成的动能项进行加和后得到初始的Fock矩阵。hcore: Hcore则对应单电子近似初猜,直接将由libcint生成的hcore矩阵作为初始猜测的fock矩阵进行计算。
chkfile: 取值为String。给定初始猜测所在位置/路径。缺省为none。mixer:取值为String。辅助自洽场收敛的方法。目前REST支持direct,diis,linear及ddiis。Direct对应不使用辅助收敛方法,linear对应于线性辅助收敛方法,diis对应于direct inversion in the iterative subspace。Diis是有效的加速收敛方法。缺省为diis。mix_parameter: 取值为float。Diis方法或linear方法的混合系数。缺省为1.0。start_diis_cycle: 取值为int。开始使用diis加速收敛方法的循环数。缺省为2。num_max_diis: 取值为int。最大使用diis加速方法的循环数。缺省为2。max_scf_cycle: 取值为int。自洽场运算的最大迭代循环数。缺省为100。scf_acc_rho: 取值为float。自洽场运算密度矩阵的收敛标准。缺省为1.0e-6。scf_acc_eev: 取值为float。自洽场运算能量差平方和的收敛标准。缺省为1.0e-6。scf_acc_etot: 取值为float。自洽场运算总能量的收敛标准。缺省为1.0e-6。level_shift: 取值为float。对于发生近简并振荡不收敛的情况,可以采用level_shift的方式人为破坏简并,加速收敛。缺省值为0.0。start_check_oscillation: 取值为int。开始检查并自洽场计算不收敛发生振荡的循环数。当监控到自洽场发生振荡,SCF能量上升的情况,开启一次线性混合方案(linear)。缺省为20。force_state_occupation: 取值是Vector。 Constrained DFT (C-DFT) 计算方法。具体设置如下:[ [reference, prev_state, prev_spin, force_occ, force_check_min, force_check_max], [reference, prev_state, prev_spin, force_occ, force_check_min, force_check_max], ... ]- Vector中的每一项对应于一个轨道的约束。
reference: 取值为String。C-DFT的计算需要有一个常规的DFT计算结果,并以hdf5的格式存在reference中。prev_state和prev_spin:取值为int。定位需要约束的轨道在reference中的轨道序号和自旋通道。force_occ:取值为float。设置上述定位的轨道在约束DFT(C-DFT)计算中的取值。force_check_min和force_check_max:取值为int。在C-DFT的自洽计算中设置搜索窗口,仅从这个窗口中寻找和prev_state/prev_spin最相似的轨道。
frozen_core_postscf: 取值为int。对于传统密度泛函方法,本参数设置不起作用。对于后自洽场方法,需要考虑激发组态的贡献。由于原子的内层电子(core electrons)通常不参与化学成键,我们可以采用冻芯近似(frozen core approximation)。在REST程序中,对于给定的原子,若开放n个价层,则本参数设置为n。取值的个位对应于主族元素开放的价层个数,而十位对应于过渡金属开放的价层个数。frequency_points:取值为int。对于RPA型的相关能计算方法,比如RPA、SCSRPA和R-xDH7等,需要对频率空间进行数值积分。这里设置频率积分的格点数目。缺省为20。freq_grid_type:取值为int。对于RPA型相关能计算方法做格点化准备:0: 代表使用modified Gauss-Legendre格点。缺省为01: 代表standard Gausss-Legendre格点2: 代表Logarithmic格点。:
lambda_points:取值为int。对于SCSRPA和R-xDH7等方法,对于开窍层的强关联体系,需要对绝热涨落途径(lambda)数值积分。这里设置lambda积分的格点数目。缺省为20。
name:取值为String类型。分子体系的名称unit:取值为String类型。坐标单位。目前支持:angstrom和bohrposition:取值为String类型。分子体系的坐标,目前支持xyz格式- 一个例子:
position = ''' N -2.1988391019 1.8973746268 0.0000000000 H -1.1788391019 1.8973746268 0.0000000000 H -2.5388353987 1.0925460144 -0.5263586446 H -2.5388400276 2.7556271745 -0.4338224694 '''
- 一个例子:
ghost: 取值为String类型。每一行对应一个ghost原子、点电荷或者ghost赝势的设置。- 对于ghost原子,其格式为:
basis set <elem> <position> - 对于点电荷,其格式为:
point charge <charge> <position> - 对于ghost赝势,其格式为:
potential <file_name> <position><elem>:取值为int类型。设置这一ghost原子的元素类型,以便程序找到正确的基组。<charge>: 取值为float类型。设置点电荷的电荷量。<file_name>: 取值为String类型。设置赝势的文件名称。<position>: 取值为[f64;3]类型,设置ghost原子,点电荷和赝势对应的xyz坐标。
- 一个例子:
ghost = ''' basis set Cl 0.000000 0.00000 1.6000000 point charge -0.3 0.500000 0.60000 0.8000000 point charge 1.5 0.200000 0.30000 1.1000000 potential O_ghost.json 0.500000 0.60000 0.8000000 potential Mg_ghost.json 0.200000 0.30000 1.1000000 '''
- 对于ghost原子,其格式为: