Post

Tasker:Gaussian计算任务自动化工具集

Tasker:Gaussian计算任务自动化工具集

Version Python

💡简介

Tasker是一套Python脚本工具集,用于自动化生成Gaussian计算任务。特性:

  • 处理复杂的任务依赖,按照要求生成输入文件
  • 任务模块化,通过建立模板库轻松设置复杂的计算任务
  • 结合crontab,按照task文件自动进行计算
  • 结合作业调度系统,实现通过调用Multiwfn或运行自定义脚本等方式进行自动后处理

Tasker套件有配套可视化工具Orbital viewer,支持在Windows平台下对轨道进行一键可视化。

🔧运行环境

  • 系统:Linux(谁家量化计算在Windows上做啊)
  • 网络需求:在以CAS号形式输入结构时,需要连接网络调用PubChem的API接口
  • 环境依赖:
    • 开发环境python 3.8,理论上兼容python3
    • 若以smiles字符串形式输入结构,需要rdkit库
    • 若以CAS号形式输入结构,需要rdkit和requests库
  • 环境变量:
    1
    
    export AUTOTASKER_CALC_PATH="/path/to/calc_folder"
    

🚀快速开始

要设置一项计算,您可以在AUTOTASKER_CALC_PATH建立一个文件夹,该文件夹就是存放您计算任务相关所有文件的路径。您需要选择一种方式给出分子结构,tasker目前支持:

  • com/gjf/xyz文件:Gaussian标准输入格式,可以没有关键词等信息,但要有正确的几何坐标、电荷和自旋多重度。推荐使用com文件,因为gjf是配套slurms.sh脚本识别的后缀,会被自动提交。
  • smiles字符串/CAS号:在task文件中以”%smiles=”的形式给出,此时com文件内可以不提供几何坐标。

name.task文件是管理计算任务的文件,文件名应与您的com文件相同。您可以参照下一节的说明手动设置该文件,也可以引用模板库中的文件。例如,在tasker目录下的templates文件夹中寻找fluor.txt,并使用该计算模板:

1
@txt=fluor

设置完毕后,运行task_module.py,程序会识别AUTOTASKER_CALC_PATH的子目录下文件名相同的一对(task,com/gjf)文件,按照task文件中的设定来生成gjf文件。推荐结合作业调度系统和crontab使用,以达到全自动生成、提交计算任务的目的。

⚙️任务文件语法

任务名($)

任务文件由任务块许多任务块构成,每个任务块都由$起始,这也是脚本识别任务块的依据。脚本生成gjf文件时,会将任务名作为前缀附加到原始com/gjf/xyz文件名前作为新的gjf文件名。以下是任务块结构示例:

1
2
3
4
5
$task_name            # 任务名
%source               # 结构来源
! commands            # 命令指令
# gaussian_keywords   # 计算关键词
add = density.wfn     # 读取额外输入

结构来源 (%)

支持以下几种方式提供几何结构:

1
2
3
4
5
%origin             # 使用初始com/gjf中的结构
%smiles=CCO         # 使用SMILES生成
%smiles=50-00-0     # 使用CAS号生成
%task_name          # 使用其他任务的计算结果
%restart            # 重新提交该任务(注意!这会覆盖当前任务。)

%task_name是最频繁使用的结构来源,这会请求tasker从任务名为task_name的任务正常结束的输出文件中提取最后一帧的结构。例如:

1
2
3
4
5
6
7
$opt
%origin
# opt freq b3lyp/6-31g*

$td
%opt
# td(nstate=10) wb97xd/def2tzvp

在第二个任务块中,%opt请求从第一个任务正常结束的log文件中提取几何坐标,并作为该任务的起始坐标使用。

  • 请注意,在使用xyz作为origin结构来源时,xyz文件的第二行应当如Gaussian输入文件般写入自旋多重度和电荷值。

命令词 (!)

命令词由commands_words.py解析,并将bash命令写入名为comd的文件内。slurms.sh提交任务时会识别该comd文件,将其中内容复制到slurm脚本中,以实现自动化后处理。目前支持以下命令类型:

scripts命令

1
scripts=(fchk,esp)

该命令词会请求打印一条可以执行tasks/scripts目录下同名bash脚本的bash命令。支持多个脚本按顺序执行。

multiwfn命令

1
multiwfn=(output.fchk>hole,output.log>uvvis)

该命令词会请求一条以tasks/wfntxts下的txt模板运行multiwfn进行后处理的bash命令,该会同时source目录下multiwfn的环境变量文件env.sh。

  • 支持通配符。
  • multiwfn的输出将被重定向到mw_{template}_out.txt

copy和move命令

1
2
copy=(*.log>../logs/,*.fchk>../analysis/)
move=(*.log>../logs/,*.fchk>../analysis/)

该命令词会请求一条将对应文件复制或移动到指定目录的bash命令。

  • 支持通配符
  • 自动创建目标目录

ORCA输入文件

虽然Tasker主要用于Gaussian计算,但也可以基于Gaussian结构优化结果,结合模板来产生ORCA输入文件。要请求产生ORCA输入文件,您应当在$下方加上-orca-标识,例如:

1
2
3
4
$task_name
-orca-
%source
# job=soc func=B3LYP basis=def2-SVP

由于orca输入文件非常复杂,为了保持任务块尺寸一致性和简洁性,这里采用了自定义模板的方式管理orca输入。输入模板应该放在tasks/ORCA目录下,格式像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
! [func] [basis] tightSCF RIJCOSX

%pal
  nprocs [nproc]
end

%maxcore [mem]

%tddft
  nroots 5
  dosoc true
  printlevel 3
end

* xyzfile [charge] [spin] [xyz_file]

-default-
func=wb97x-d3
basis=def2-svp
nproc=32
mem=3000

其中,[]占位符的值默认由末尾-default-字段控制,但也可以由#行进行指定。例如,如果模板文件中有[func]占位符,根据-default-字段中func=wb97x-d3,在产生输入文件时该占位符的值会被设置为wb97x-d3,您也可以在任务块中使用func=B3LYP来覆盖默认设置。

  • 请注意,目前暂时不支持以ORCA输出结构进行后续计算,slurms在当前版本也不能提交orca任务

外部程序

External_Programs目录下挂载了sobereva老师的optDFTwsobMECP(sobMECI是sobMECP的魔改版),可以通过scripts命令进行调用。如果您使用这两个程序计算并用于发表,还需要按照sobereva老师的要求进行引用。

👇下载地址

Github项目地址

1
git clone git@github.com:bane-dysta/TaskModule.git

🔰开发计划

  • 支持生成ORCA输入文件
  • 支持以指定目录文件为结构资源
  • 支持Gaussian的log文件为结构资源
  • 支持xyz格式文件为结构资源
  • 支持判断震荡情况
  • 与mail模块结合实时监控任务状况

📋 更新日志

v1.0.1 (2024-12-14)

  • 支持ORCA输入文件产生
  • 修复已知bug
  • 也许Claude顺手修复了一些未知bug

v1.0.0 (2024-11-20)

  • 初始版本发布

🙏致谢

Author: Bane Dysta
Email: banerxmd@gmail.com
Website: https://bane-dysta.github.io/

This post is licensed under CC BY 4.0 by the author.