在科研过程中,有时需要计算大批量的同类结构,过程中涉及很多重复操作。因此借助一些工具将重复的任务智能化,是一个非常理智的选择。

Multiwfn是由北京科音自然科学研究中心的卢天从2009年11月起主导开发的最为强大的量子化学波函数分析程序,功能极为广泛、十分高效、非常易于使用,并且开源免费。
本文主要使用Multiwfn产生ORCA量子化学程序的输入文件的功能。

在Multiwfn3.8使用手册的5.2,5.3有介绍使用multiwfn处理大批量任务的一些技巧示例。
卢老师也写过非常详细的博文介绍:详谈Multiwfn的命令行方式运行和批量运行的方法
因此,在此基础上,融合本人任务需要,分享使用Multiwfn批量产生ORCA输入文件的脚本。
首先需要知道通过Multiwfn是如何生成ORCA输入文件的,整个过程需要输入什么信息。在此,先记录手动在命令行输入命令产生ORCA输入文件的过程

当我们熟悉Multiwfn产生ORCA输入文件的流程后,便可以将该过程用到的命令写入脚本,并结合for循环,实现批量生成任务。
以上任务的例子,用shell语言可以简化为:
echo -e "100\n2\n12\n\n0\n2\n-10\n48\n2000\n2\nq\n" | Multiwfn POSCAR.xyz > POSCAR.out"
这里100\n2\n12\n\n0\n2\n-10\n48\n2000\n2\nq\n是被传递给Multiwfn的指令,数字表示选项/功能,\n表示回车确认。POSCAR.xyz为Multiwfn读入的文件,用POSCAR.out记录Multiwfn产生ORCA输入文件过程中在屏幕上输出的信息。
下面结合for循环,将该过程写入脚本文件,便可以执行Multiwfn批量生成ORCA输入文件的任务。
#!/bin/bash
export poscar_dir=./2_C53N_str_1e-3_opt_xtb/ #文件夹
out_file="out"
#下面利用循环实现批量运行,此部分代码适合用于实验文件夹名字与文件夹内xyz文件名字不相同的情况
for file in `ls -l ${poscar_dir} |awk '/^d/ {print $NF}'`;do
# 打印文件名
echo "对文件夹${file}执行multiwfn输出orca输出文件..."
# 切换到需要进行实验的目录
cd "${poscar_dir}${file}"
# 运行实验
#multiwfn
# 查找.xyz后缀文件
for expname in `ls . | grep .xyz`;
do
echo "实验文件名:${expname}"
echo -e "100\n2\n12\n\n0\n2\n-10\n48\n2000\n2\nq\n" | Multiwfn ${expname} > "${expname%%xyz*}$out_file"
done
echo "${file}ORCA输出文件生成完成"
cd ..
cd ..
done
echo "所有POSCAR的ORCA输出文件已经生成"
以上代码,可以实现下面的过程。
