本帖最后由 mizu-bai 于 2022-5-22 02:37 编辑
Multiwfn 3.8(dev) on macOS
因为做毕业设计,接触了计算化学有半年了。笔者所做的课题主要使用 Gaussian 和 Multiwfn 这两个计算软件,而笔者的电脑又是 MacBook Pro,OS Version: macOS Catalina 10.15.7,引用 johnshall 帖子中的一句话。
Gaussian 还好说,毕竟有 macOS 的 release,而 Multiwfn 最新的 3.8 版本却只支持 Windows 与 Linux。没有 macOS 版本并不意外,加上 macOS 跨大版本更新的软件兼容性实在是差,就算有了能否坚挺几个大版本还能运行都是问题,事实上 Multiwfn 3.7 就没能成功跑起来,这糟糕的向后兼容性笔者作为顺便的 iOS 开发深有体会。
好在有 Docker 这一工具,可以使用容器将应用及其依赖环境打包起来,比虚拟机更轻量,启动也更快,关于 Docker 的详细资料也可以 Google 一下。笔者便使用 Docker 为 Linux 版的 Multiwfn 提供了一个运行环境,项目的地址 https://github.com/mizu-bai/multiwfn-in-docker。需要注意的是,容器内并未包含 Multiwfn 的可执行文件,原因如下:
1. Multiwfn 的版权属于 sob 老师,将其打包进 Docker 容器担心会存在版权问题;
2. Multiwfn 的可执行文件大小也有百兆有余,若打包进容器,则下载速度是一个问题,尤其是网络环境差的情况下拉取镜像非常令人恼火;
3. Multiwfn 后续也会更新版本,而为每一个版本打包则过于繁琐,而提供一个运行环境更为简便。
所以需要先下载 Linux 版本的 Multiwfn,noGUI 版本与 GUI 版本按需选择,打包的镜像对二者皆有支持,使用时会将 Multiwfn 的可执行文件以读写方式挂载到容器内部,并将终端中当前目录也一并挂载。下面分别对 noGUI 版本与 GUI 版本的使用方法进行阐述。
1. noGUI 版本
noGUI 版本的使用方法较为简单,在确保安装好了 Docker 的前提下,可以先拉取镜像:
- $ docker pull mizubai/multiwfn:nogui
复制代码
或直接运行如下命令,即在启动 Multiwfn 时也映射了当前目录进入容器内,让目录内的文件可以被 Multiwfn 识别到。若运行时使用了本地不存在的镜像,则会自动拉取。
- $ docker run -it --rm -v "$(pwd)":/source -v /path/to/Multiwfn_noGUI:/opt/Multiwfn_bin mizubai/multiwfn:nogui sh -c 'ulimit -s unlimited && Multiwfn'
复制代码
第 1 个 -v 表示把本机的 $(pwd),即当前目录,映射到容器内的 /source 目录下,第 2 个 -v 表示把本机中 Multiwfn 的目录映射到容器内的 /opt/Multiwfn_bin 目录下,这里要把 /path/to/Multiwfn_noGUI 改成自己下载的 Multiwfn 的位置。启动后会看到熟悉的 Multiwfn 环境,输入当前目录下的文件名,即可被 Multiwfn 读取,正常使用。
2. GUI 版本
以上的 noGUI 版本是没办法运行诸如查看轨道等需要图形界面的功能,对于 GUI 版本则需要安装 XQuartz,这是 macOS 上的 X11,可以让 Docker 容器中的 App 与 X11 通信,显示出图形界面。安装完成后,先要运行如下命令,以让 X11 能允许本机的连接。
之后也可以先拉取镜像:
- $ docker pull mizubai/multiwfn:gui
复制代码
或直接运行如下命令:
- $ docker run -it --rm -v "$(pwd)":/source -v /path/to/Multiwfn:/opt/Multiwfn_bin -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=host.docker.internal:0 multiwfn:gui sh -c 'ulimit -s unlimited && Multiwfn'
复制代码
第 2 个 -v 改成本机中 Multiwfn 的地址,其余两个 -v 不需要改动,其中最后一个 -v 与 -e 使得 Multiwfn 能连接到 X11。运行命令后,按下回车,即会出现如下界面(截图中的文件只是示例,并非真正有意义的计算):
选择文件后点击 OK,即可加载数据,其余用法与直接运行 Multiwfn 没什么两样,就不再多言了。
为了方便使用的话,可以直接在 .bash_profile 或 .zshrc 中添加 alias,可以先 echo $0 查看自己所用的 shell,macOS 在 Catalina 后使用 zsh 作为默认 shell,之前是 bash。例如笔者就在 .zshrc 中添加了如下的 alias,直接在敲 Multiwfn 命令就能使用支持 GUI 的 Multiwfn 了。
- alias Multiwfn='docker run -it --rm -v "$(pwd)":/source -v /path/to/Multiwfn:/opt/Multiwfn_bin -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=host.docker.internal:0 multiwfn:gui sh -c "ulimit -s unlimited && Multiwfn"'
复制代码
最后感谢 sob 老师开发的 Multiwfn,以及 sob 老师的文章与计算化学公社中的贴子,真的给毕业设计带来了很大的帮助,让我能够独立完成一部分工作,与师兄师姐以及导师交流时也能言之有物了。最开始封装这个工具只是为了个人使用便利,后来想想还是写成文章,希望能让使用 Mac 的用户更方便使用 Multiwfn,以及 3.8 版本如果真的不出 macOS 版,也有个折中的办法。对于 Gaussian 和 GaussView 其实也使用了类似的方案封装,等过几天组会工作汇报完成后,有空再整理成文章吧。
|