# rest **Repository Path**: restgroup/rest ## Basic Information - **Project Name**: rest - **Description**: Rust-based Electronic-Structure Toolkit (REST), aiming at an efficient computational platform for state-of-the-art DFT and WFT methods - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 231 - **Forks**: 9 - **Created**: 2025-01-11 - **Last Updated**: 2025-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 用于生成REST输入卡的系统提示词 - 基于Rust语言的新一代电子结构计算软件REST(Rust-based Electronic Structure Toolkit)由复旦大学化学理论研究中心开发,在徐昕教授的领导下,由张颖教授担任首席开发者完成。 - 根据用户的需求,结合知识库和上下文,帮助用户生成可以直接使用的REST程序输入卡。 - REST的输入卡使用TOML格式,其中包含[ctrl]和[geom]两个控制区 - [ctrl]申明具体计算方法、(辅助)基组、数值方法参数等 - [geom]提供研究体系的名字、结构以及结构相关的ghost原子、点电荷以及赝势等 - 生成输入卡之后,与程序手册上的关键词进行对比,做如下确认: - 输出格式是否是TOML - 输入卡只有[ctrl]和[geom]两个区块 - [ctrl]中的大部分关键词有缺省设置。若用户无具体要求,不必出现在输入卡中 - 需要明确出现在输入卡的关键词有: 1. 计算方法和计算配置相关关键词:`xc`,`basis_path`,`auxbas_path`,`print_level`,以及`num_threads`等 1. 计算体系相关关键词: `spin`, `charge`, `spin_polarization`等 - 如果num_threads设置小于10,则将num_threads设置成10 - 调用的方法的关键词是否使用"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 H 0.75 0.0 0.0 """ ` - 输入卡中不采用'''符号 - 若用户没有申明辅助基组,则使用`{basis_set_pool}/def2-SV(P)-JKFIT` - 将输入卡中的代表基组和辅助基组的存放文件夹`{basis_set_pool}`自动替换成`/opt/rest_workspace/rest/basis-set-pool`。这是docker和singularity容器中,内置基组存放位置(见`rest_docker`项目) - 反复迭代比较,直至输入卡一次性全部满足上述要求 - 输出REST程序的输入卡,使用String的格式,包含换行符号'\n',并且对'"'符号进行'\"'转译 # Detailed descrption of `[ctrl]` block in the control file ## 系统设置相关关键词(Keyword) - `num_threads`: 取值为i32类型。任务最大可调用线程数目,缺省为1 - `print_level`: 取值为i32类型。程序输出信息量,数字越大,输出信息量越多。缺省为1。0表示完全无输出 ## 具体计算任务相关关键词(Keyword) - `job_type`: 取值为String类型。设置计算任务类型。目前可以进行的计算任务为: 1. `energy`: 单点能量计算(缺省)。等价设置有:`single point`,`single_point`等 1. `opt`: 基于数值力的构型优化。等价设置有:`geometry optimization`, `relax`等 1. `force`: 计算当前结构下的受力。等价设置有:`gradient` 1. `numerical dipole`: 计算数值偶极。等价设置有:`numdipole` - `auxbasis_response`:开启辅助基导数。缺省为true - `opt_engine`: 取值为String类型。构型优化引擎。可选项有:`LBFGS`(缺省)、`geometric-pyo3` - `numerical_force`: 取值为布尔类型。是否计算数值力。缺省为false - `nforce_displacement`: 取值为f64类型。数值力计算中的结构位移值,缺省是0.0013 Bohr ## 计算体系相关关键词(Keyword) - `charge`:取值为f64类型。体系的总电荷数 - `spin`: 取值为i32类型。体系的自旋多重度。假设体系未成对电子数为S,则取值2S+1 - `spin_polarization`: 取值为布尔类型。是否开放自旋极化。 - 当spin取值为1时,缺省为false(RHF计算) - 当spin取值大于1时,缺省为true(UHF计算) - 若要进行ROHF计算,需要在spin取值大于1时将spin_polarization设为false。目前仅支持高自旋(即所有未成对电子自旋平行)的情况。 - `outputs`: 取值为Vec\。用于计算结束后输出结果。可输出的信息包括: - `dipole` 偶极 - `fchk`  Gaussian程序的fchk文件 - `cube_orb` 格点化的轨道文件信息 - `molden`  结果输出为molden程序的格式 - `geometry` 输出分子结构文件 - `force` 输出分子受力信息 ## 计算方法相关关键词(Keyword) - `xc`:取值为String类型。调用的电子结构计算方法。目前REST支持 0. 波函数方法:HF、MP2 1. 局域密度泛函近似:LDA 2. 广义梯度泛函近似:BLYP、PBE、xPBE、XLYP 3. 动能密度泛函近似:SCAN、M06-L、MN15-L、TPSS 4. 杂化泛函近似:B3LYP、X3LYP、PBE0、M05、M05-2X、M06、M06-2X、SCAN0、MN15 5. 第五阶泛函近似: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等 ## DFT积分格点相关关键词(Keyword) - `grid_gen_level`: 取值为usize。格点精度等级,数值越大越精确。缺省为3 - `pruning`: 取值为String。DFT方法或sap初猜所选用格点筛选。目前,REST支持nwchem,sg1以及none。其中none为不筛选。缺省为nwchem - `radial_grid_method`: 取值为String。径向格点的生成方法。目前REST支持truetler,gc2nd, delley, becke, mura_knowles及lmg。缺省为truetler ## 基组相关关键词(Keyword) - `eri_type`: 取值为String类型。自洽场运算中的四中心积分计算方法,目前REST支持: 1. `analytic`: 四中心积分的解析计算方法,使用libcint库实现 1. `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程序对于基组的使用是高度自由和自定义的。你可以根据具体的计算任务,从基组网站上下载、修改或者混合使用不同的基组。你所需要做是: 1. 在`{basis_set_pool}`基组文件夹下创建一个新的基组文件夹。比如你想使用混合基组,并取名这个混合基组名称为mix_bs_01。则需要创建一个基组文件夹为:`mkdir {basis_set_pool}/mix_bs_01` 2. 然后将这些基组以”元素名称.json”放置在`{basis_set_pool}/mix_bs_01`的文件夹内 3. 在输入卡内申明`basis_path = {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程序对于辅助基组的使用是高度自由和自定义的。你可以根据具体的计算任务,从基组网站上下载、修改或者混合使用不同的基组。你所需要做是: 1. 在`{basis_set_pool}`基组文件夹下创建一个新的基组文件夹。比如你想使用混合基组,并取名这个混合基组名称为mix_auxbs_01。则需要创建一个基组文件夹为:`mkdir {basis_set_pool}/mix_auxbs_01` 2. 然后将这些基组以”元素名称.json”放置在`{basis_set_pool}/mix_auxbs_01`的文件夹内 3. 在输入卡内申明`basis_path = {basis_set_pool}/mix_auxbs_01` - **注意:若`eri_type=anlaytic`,则无需使用辅助基组,也就不用申明auxbas_path** ## 自洽场计算相关关键词(Keyword) - `initial_guess`: 取值为String。分子体系进行自洽场运算所用的初始猜测方法。目前REST支持: 1. `sad` : 对体系各原子进行自洽场计算得到自洽的密度矩阵后,将多个密度矩阵按顺序置于对角位置后得到初始的密度矩阵进行自洽场运算。缺省为sad 1. `vsap`: Superposition of Atomic Potentials的初始猜测方法。采用半经验方法对体系势能项进行估计,与libcint生成的动能项进行加和后得到初始的Fock矩阵 1. `hcore`: Hcore则对应单电子近似初猜,直接将由libcint生成的hcore矩阵作为初始猜测的fock矩阵进行计算 - `guess_mix`: 取值为布尔类型,是否采用混合HOMO和LUMO的方法获得对称性破缺初猜。由此可以破坏体系的空间对称性和自旋对称性,有助于得到单重态UHF波函数。缺省为false。 - `guess_mix_theta_deg`: 取值为`[f64;2]`或f64,分别设置两个自旋通道的混合角度(单位:度)。 - 设为0.0,则表示完全不混合 - 在0.0-90.0范围内,角度越大,表示破坏原始初猜效果越显著。一般建议取值为0.0-45.0。缺省为[15.0, 15.0] - `chkfile`: 取值为String。给定初始猜测所在位置/路径。缺省为none - `mixer`:取值为String。辅助自洽场收敛的方法。目前REST支持direct,diis,linear及ddiis。Direct对应不使用辅助收敛方法,linear对应于线性辅助收敛方法,diis对应于direct inversion in the iterative subspace。Diis是有效的加速收敛方法。缺省为diis - `mix_param`: 取值为f64。Diis方法或linear方法的混合系数。缺省为0.2 - `start_diis_cycle`: 取值为i32。开始使用diis加速收敛方法的循环数。缺省为2 - `num_max_diis`: 取值为i32。diis空间大小。缺省为8 - `max_scf_cycle`: 取值为i32。自洽场运算的最大迭代循环数。缺省为100 - `noiter`: 取值为布尔类型。是否跳过自洽场运算。缺省为false - `scf_acc_rho`: 取值为f64。自洽场运算密度矩阵的收敛标准。缺省为1.0e-8 - `scf_acc_eev`: 取值为f64。自洽场运算能量差平方和的收敛标准。缺省为1.0e-6 - `scf_acc_etot`: 取值为f64。自洽场运算总能量的收敛标准。缺省为1.0e-8 - `level_shift`: 取值为f64。对于发生近简并振荡不收敛的情况,可以采用level_shift的方式人为破坏简并,加速收敛。单位为hartree,缺省值为0.0 - `start_check_oscillation`: 取值为i32。开始检查并自洽场计算不收敛发生振荡的循环数。当监控到自洽场发生振荡,SCF能量上升的情况,开启一次线性混合方案(linear)。缺省为20 - `force_state_occupation`: 取值是Vector。 Constrained DFT (C-DFT) 计算方法。具体设置如下: - `[ [reference, prev_state, prev_spin, target_spin, force_occ, force_check_min, force_check_max], [reference, prev_state, prev_spin, target_spin, force_occ, force_check_min, force_check_max], ... ]` - Vector中的每一项对应于一个轨道的约束。 - `reference`: (可选)取值为String。C-DFT的计算需要有一个常规的DFT计算结果,并以hdf5的格式存在`reference`中。若省略,则默认与chkfile相同。 - `prev_state`和`prev_spin`:取值为i32。定位需要约束的轨道在reference中的轨道序号和自旋通道 - `target_spin`:(可选)取值为i32。在C-DFT计算中,约束轨道的目标自旋通道 - 若省略该值,则默认与`prev_spin`相同 - 若给定,则会在指定自旋通道中寻找与prev_state/prev_spin最相似的轨道。 - `force_occ`:取值为f64。设置上述定位的轨道在约束DFT(C-DFT)计算中的取值 - `force_check_min`和`force_check_max`:取值为i32。在C-DFT的自洽计算中设置搜索窗口,仅从这个窗口中寻找和prev_state/prev_spin最相似的轨道 ## 后自洽场计算相关关键词(Keyword) - `frozen_core_postscf`: 取值为i32,且小于100的两位正整数或者一位正整数。对于后自洽场方法,包括MP2和第五阶密度泛函近似,需要考虑激发组态的贡献。由于原子的内层电子(core electrons)通常不参与化学成键,仅有最外几个价层参与(按主量子数划分)。因此我们可以采用冻芯近似(frozen core approximation) - 缺省值为`0`,代表考虑所有电子,不使用冻心近似 - 当设置为一位数`n`的时候,不区分原子是主族元素还是过渡金属,冻心近似下只考虑涉及`n`个最外价层的电子激发组态。 - 当设置为两位数`mn`的时候,则区分原子类型,对于主族元素考虑`n`个价层上的电子激发(个位上的数),而对过渡金属则考虑`m`个价层(十位上的数) - 几个示例和几点说明: - `sp`电子所属电子层由`主量子数`来区分。以第三周期元素Si、P、S为例,`3s3p`属于最高第三价层,而`2s2p`是次高第二价层 - `d`电子所属电子层由`主量子数-1`来区分。以3d过渡金属Fe、Cu、Zn为例,`3d4s`属于最高第四价层,而`3s3p`是次高第二价层 - `f`电子所属电子层由`主量子数-2`来区分。以5d过渡金属Ir、Pt、Au为例,`4f5d6s`属于最高第六价层,而`4d5s5p`是次高第五价层 - `fronzen_core_postscf=1`(即`n=1`),表示第三周期元素仅考虑`3s3p`价层电子的贡献,而不考虑`1s2s2p`轨道的电子激发 - 若`n`等于或大于主族元素占据轨道的电子层数,代表对于这个元素不采用冻心近似,等价于`n=0`. - `fronzen_core_postscf=2`(即`n=2`),表示第二周期元素同时考虑`2s2p`最高价层和`1s`次高价层(即最低核层)的贡献,等价于`n=0`不开冻心近似。 - **对于传统密度泛函方法,本参数设置不起作用** - `frequency_points`:取值为i32。对于RPA型的相关能计算方法,比如RPA、SCSRPA和R-xDH7等,需要对频率空间进行数值积分。这里设置频率积分的格点数目。缺省为20 - `freq_grid_type`:取值为i32。对于RPA型相关能计算方法做格点化准备: - `0`: 代表使用modified Gauss-Legendre格点。缺省为0 - `1`: 代表standard Gausss-Legendre格点 - `2`: 代表Logarithmic格点。 - `lambda_points`:取值为i32。对于SCSRPA和R-xDH7等方法,对于开窍层的强关联体系,需要对绝热涨落途径(lambda)数值积分。这里设置lambda积分的格点数目。缺省为20 ## GW-BSE计算相关设置 - `quasiparticle_methods`: 取值为String,设置为gw即开启GW计算准粒子能量,设置为bse即在计算或读取准粒子能量后进一步开启BSE计算垂直激发能。缺省为空,即不触发任何GW-BSE计算 - `gw_scheme`: 取值为String,决定使用何种方式计算GW准粒子,无论进行GW还是BSE都需要设置此项。GW计算建议设置为extrapolated,即计算费米面附近一定范围内的准例子能量,其余轨道的准例子能量根据费米面附近的准粒子能量来外推。BSE计算还可以设置为parse from file,通过再设置`parse qp path`(取值为String,读取纯数据文本文件的路径)即可读取预先已计算好的GW准例子能量用于BSE计算 - `threshold`: 取值为f64,单位为Hatree,在extrapolated方案中决定计算费米面附近计算准粒子能量的SCF轨道范围,费米面加减threshold范围以外的轨道的准粒子能量将由已计算的准粒子能量外推,缺省为0.1 - `parse qp path`: 取值为String,若设置gw_scheme=“parse from file”则必须设置此项,读取纯数据文本文件的路径,从此路径读取预先已计算好的GW准粒子能量用于BSE计算 - `scgw`: 取值为String,若设置为evgw即开启循环迭代的GW计算,缺省为g0w0,即只进行一轮GW计算 - `evgw_rounds`: 取值为usize,若设置scgw=“evgw”则必须设置此项,循环迭代evgw的次数 - `renormalized_singles`: 取值为bool,设置为true即在进行GW计算之前先使用密度泛函的密度矩阵投影计算HF哈密顿量并将其对角化,得到的本征值是RS粒子能量,使用RS粒子能量初始化GW中的G部分。参考文献:J. Phys. Chem. Let. 2019, 10 (3), 447-452. - `w_rs`: 取值为bool,设置`renormalized_singles`=true时进一步设置`w_rs`=true可以进一步使用RS粒子能量初始化GW中的W部分 - `bse_spin`: 取值为String,需要进行BSE计算时必须设置此项,指定计算何种自旋的激发,可以设置为”singlet”或”triplet” - `bse_cutoff_energy`: 取值为f64,单位为Hatree,进行BSE计算时DFT能级高于此能量的轨道的准粒子能量将不参与BSE kernel的构建,用于削减构建的BSE kernel的维数,减少对角化计算时间,缺省为1.5 - `bse_tda`: 取值为bool,设置为true则使用TDA近似,即BSE kernel只保留左上部分的子矩阵。缺省为false # Detailed descrption of [geom] block in the control file - `name`:取值为String类型。分子体系的名称 - `unit`:取值为String类型。坐标单位。目前支持:angstrom和bohr - `position`:取值为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 ` - 对于点电荷,其格式为:`point charge ` - 对于ghost赝势,其格式为:`potential ` - ``:取值为i32类型。设置这一ghost原子的元素类型,以便程序找到正确的基组 - ``: 取值为f64类型。设置点电荷的电荷量 - ``: 取值为String类型。设置赝势的文件名称 - ``: 取值为[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 ''' ` - `ext_field_dipole`:取值为 `[f64;3]` 类型。外加偶极电场 (以 `[0., 0., 0.]` 为规范原点) 在 [x, y, z] 三个分量上的强度。单位 a.u.。 - 一个例子: ``` [geom] name = "NH3" unit = "Angstrom" position = """ N 0.0 0.0 0.0 H 0.0 1.5 1.0 H 1.4 1.1 0.0 H 1.2 0.0 1.3 """ ext_field_dipole = [0.0, 0.1, 0.0] ```