计算化学公社

标题: 【已解决】老师,关于gaussian和xtb联用,报错未能从外部打开输出文件是什么原因? [打印本页]

作者
Author:
Cheuksing    时间: 2025-12-9 18:07
标题: 【已解决】老师,关于gaussian和xtb联用,报错未能从外部打开输出文件是什么原因?
本帖最后由 Cheuksing 于 2025-12-9 19:03 编辑

老师,请问我按照这篇文章《将Gaussian与Grimme的xtb程序联用搜索过渡态、产生IRC、做振动分析 - 思想家公社的门口:量子化学·分子模拟·二次元》中的方法运行案例中的TS.gjf,提示错误,应该如何解决呢?


TS.log的报错如下图所示(All done! Failed to open output file from external program. Error termination via Lnk1e in /public/software/gaussian/g16/l402.exe):

(, 下载次数 Times of downloads: 1)

我在卢天老师的xtb.sh最后一行中加入了`echo "All done!"`(如下图所示),从TS.log文件(上图)可看出,卢天老师写的extderi、genxyz、xtb.sh全都正常运行结束了,应该是高斯16报的错,但不知如何解决。
(, 下载次数 Times of downloads: 0)


【其它说明】
1. 提交作业时,是通过TS.sh脚本(sbatch)提交至超算平台的;
(, 下载次数 Times of downloads: 0)
2. 已在.bashrc中正确配置xtb的安装(export PATH等),所有可执行文件也加了执行权限。
3. 版本:gaussian 16 c01,xtb 6.5.1,gau_xtb_1.0.1

谢谢!



作者
Author:
wal    时间: 2025-12-9 18:11
All done之前把$3复制过来看看什么情况
我之前也总莫名其妙报这个错,后来发现在.生成一个temp,然后mv temp $3可以解决,你也可以试试
作者
Author:
Cheuksing    时间: 2025-12-9 18:45
本帖最后由 Cheuksing 于 2025-12-9 19:02 编辑
wal 发表于 2025-12-9 18:11
All done之前把$3复制过来看看什么情况
我之前也总莫名其妙报这个错,后来发现在.生成一个temp,然后mv te ...

太感谢wal老师了!按照wal老师说的修改,我已经能成功跑通卢天老师的3个example!

给后面看到这篇帖子的读者详细描述一下,若您也遇到相同问题,您可以尝试在xtb.sh里加入以下代码:

(前面一部分代码和gau_xtb_1.0.1中的相同)
elif [ $derivs == "1" ] ; then
        echo "Running: xtb mol.xyz --chrg $charge --uhf $uhf --grad > xtbout"
        xtb mol.xyz --chrg $charge --uhf $uhf --grad > xtbout
fi
echo "xtb running finished!"


echo "Extracting data from xtb outputs via extderi"
# 先写到临时文件,再移动到目标文件
tmpfile="extderi_tmp.$$"
./extderi "$tmpfile" "$atoms" "$derivs"
rc=$?
if [ $rc -ne 0 ]; then
    echo "[ERROR] extderi failed with code $rc"
    exit $rc
fi
mv "$tmpfile" "$3"


echo "Cleaning up temporary files"
rm -f charges energy xtbrestart gradient hessian xtbout mol.xyz tmpxx vibspectrum
rm -f hessian xtb_normalmodes g98_canmode.out g98.out wbo xtbhess.coord .tmpxtbmodef
rm -f .engrad *.engrad xtbtopo.mol xtbhess.xyz
echo "All done!"


或者您也可以直接下载附件,替换原来的xtb.sh。

造成整个问题的原因是,extderi的输出文件在 Gaussian 结束前已经存在,但内容还没完全写好,或者文件锁还没释放,Gaussian 就会“抢先”去读,结果发现格式不对或文件不可读,于是报 Failed to open output file from external program。而如果改成先写临时文件,再在脚本最后一步 mv 到 $3,就保证了 Gaussian 在它需要读的时候,看到的是一个已经完整写好的文件。这样就避免了“半成品文件”被提前打开的情况。

@sobereva 卢老师,您看有没有必要修改一下xtb.sh呢?谢谢!



作者
Author:
wal    时间: 2025-12-9 19:02
Cheuksing 发表于 2025-12-9 18:45
太感谢wal老师了!按照wal老师说的修改,我已经能成功跑通卢天老师的3个example!

给后面看到这篇帖子 ...

其实不用这么复杂的XD 只要把这一行
./extderi $3 $atoms $derivs
改成
./extderi temp $atoms $derivs
mv temp $3
就行了

作者
Author:
Cheuksing    时间: 2025-12-9 19:05
wal 发表于 2025-12-9 19:02
其实不用这么复杂的XD 只要把这一行
./extderi $3 $atoms $derivs
改成

嗷嗷确实,谢谢大佬~
作者
Author:
sobereva    时间: 2025-12-9 21:03
您看有没有必要修改一下xtb.sh呢?

完全没必要。我这里毫无问题




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3