|
|
最近在参考公社经典教程《制作动画分析电子结构特征》(http://sobereva.com/86 )对 IRC(内反应坐标)路径上的帧文件进行 ELF(电子定位函数)填色图批量渲染时,遇到了Multiwfn 在 Windows 批处理下总是在运行到特定张数时自动停止,且排查发现处理文件的顺序是混乱的问题。经过排查,成功找到了问题所在。在此把问题成因和 Windows下的避坑解决方法分享给大家,希望帮后面的同学少走弯路。
遇到的现象和成因:
1.当批量处理文件的总数超过了 100 张或更多时,输出的文件的顺序是混乱的。虽然不知道主要原因是什么,但是目前认为是因为在Windows 的 NTFS 文件系统下,如果不加排序参数,dir /b 输出文件并不是按文件名数字大小排序的,而是按照文件在系统底层(MFT 主文件表)的物理写入顺序吐出的。由于多核写入或缓存原因,其他帧可能会被提前吐出来,导致乱序。
2.命令流错位导致.txt里预设的静态指令与 Multiwfn 实际索要的指令步调错位。由于IRC 路径上不同帧的分子空间尺寸是动态变化的,这导致预设的指令可能不适用,导致Multiwfn 提前耗尽了输入流,在读不到标准输入的情况下产生错误并结束任务,并且自动退出终端。某些情况下指令步调可能刚好在某一个文件又开始对上造成感官上没有出错的错觉。
解决方案:
1.只需在批处理脚本(.bat文件)里加上 /on 指令。/on 指令会强制 Windows 按照 Name (名称) 的正序进行排列。例子,原本的命令行是 for /f %%i in ('dir H2tri\*.wfn /b') do Multiwfn H2tri\%%i < batchcolor.txt,现在只需要在 /b 后面加上 /on,写成 for /f %%i in ('dir H2tri\*.wfn /b /on') do Multiwfn H2tri\%%i < batchcolor.txt 就可以完美解决了。
2.为了可以追溯/检查具体原因,可以直接按下快捷键 Win + R,输入 cmd 并回车,打开命令提示符窗口。使用 cd 命令切换到你的工作目录(或者 Multiwfn 所在的文件夹)。例如,cd /d D:\Multiwfn_path。在窗口中手动输入批处理脚本文件名(.bat文件)并回车。这样即使 Multiwfn闪退了,终端窗口依然会停留在屏幕上,方便查看具体报错位置。Multiwfn都会直白的写出具体报错原因,相信只要仔细阅读一定可以找到并解决问题。除此之外也可以在运行命令最后加上 > output.log 来输出日志文件。
希望这个经验帖子能对经常制作波函数/电子结构特征动画的同学有所帮助!感谢卢老师开发出 Multiwfn 这么强大的科研神器! 
|
|