波函数转换分享贴
在日常计算中,经常容易遇见在小基组下已经成功收敛但是换基组后产生不收敛问题,或者想要加速计算。这时可以将成功收敛的波函数运用到新的基组以加快计算速度。
针对Gaussian、Orca、Molpro的波函数文件读取格式不同的问题,在学习了sobereva老师分享的帖子和罗宏鑫师兄的帮助下,现已可直接在集群上使用脚本及指令获得相应的波函数文件。
文件格式一键转换bash脚本
(chk_to_gbw.sh)
#Converting all .chk files in current folder to .gbw
#Refer to Lu Tian's script(sobereva@sina.com)
#!/bin/bash
## set environment ### 设置环境变量/加载软件包
export g16root=/mnt/softs/tests/g16
export PATH=$g16root:$PATH
source $g16root/bsd/g16.profile
export PATH=$PATH:/mnt/softs/Multiwfn/Multiwfn_3.7_bin_Linux_noGUI
export OMP_STACKSIZE=1000M
ulimit -s unlimited
export Multiwfnpath=/mnt/softs/Multifwn/Multiwfn_3.7_bin_Linux_noGUI
export DISPLAY=":0"
. /mnt/softs/spack/share/spack/setup-env.sh
spack load openmpi@4.1.4%gcc@9.4.0 arch=linux-ubuntu20.04-zen2
export PATH=$PATH:/mnt/softs/orca_5_0_2_linux_x86-64_shared_openmpi411/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/softs/orca_5_0_2_linux_x86-64_shared_openmpi411/
icc=0
nfile=`ls *.chk|wc -l`
for inf in *.chk
do
((icc++))
echo Converting ${inf} to ${inf//chk/gbw} ... \($icc of $nfile\)
fchk=${inf//chk/fchk}
mkl=${inf//chk/mkl}
inp=${inf//chk/inp}
formchk ${inf} $fchk > /dev/null
Multiwfn $fchk << EOF > /dev/null
100
2
9
$mkl
y
2
12
$inp
1
0
q
EOF
orca_2mkl ${mkl%.*} -gbw > /dev/null
gbw=${inf%.*}_Gau.gbw
mv ${inf//chk/gbw} $gbw
sed -i "2i %moinp \"$gbw\"" $inp
awk '{if (NR==1) {print $0 " moread"} else{print $0}}' $inp > "$inp"2
mv "$inp"2 $inp
rm -f $mkl $fchk
done
脚本使用方法
在.chk文件所在的目录下创建该脚本文件,使用以下命令运行该脚本。目标文件会输出至当前目录:
./chk_to_gbw.sh
输入文件示例各软件波函数转换方法
Gaussian
- 波函数文件格式:
.chk
- 转换方法:
formchk input.chk output.fchk
- 说明:Gaussian只能读取
.chk
文件,需使用内置formchk
命令转换为.fchk
格式
Orca
- 波函数文件格式:
.gbw
- 转换方法:
orca_2mkl input -molden # 转换为molden格式(供Molpro使用) orca_2mkl input -gbw # 转换为gbw格式(供Orca使用)
格式转换工具链
- 使用Multiwfn进行
fchk
→mkl
格式转换(具体过程已在脚本中实现) - 更多细节可参考:
注意事项
- 转换过程中需注意基组兼容性问题
- 建议先在小体系测试转换效果
- 不同量子化学软件对波函数文件的处理方式可能不同
注:如需更详细的技术细节或遇到转换问题,欢迎进一步交流讨论。