计算化学公社

 找回密码 Forget password
 注册 Register
Views: 13|回复 Reply: 0
打印 Print 上一主题 Last thread 下一主题 Next thread

[其它] 增强版Multiwfn源代码构建系统

[复制链接 Copy URL]

136

帖子

0

威望

520

eV
积分
656

Level 4 (黑子)

本帖最后由 UW_0728. 于 2026-3-8 03:52 编辑

目前Multiwfn源代码包只提供了适配ifort的Makefile,且编译器选项、数学库路径、Debug/Release等配置全部硬编码在同一个文件中。如果喜欢自己折腾、用gfortran去编译Multiwfn,则需要手动大改Makefile。于是乎,我尝试性地以Makefile里面的编译选项为蓝本,自己搞了一个极其简单的构建系统,旨在实现在使用gfortran时只需要一条 make -j 就能完成编译,不必再操心编译器等差异。

仓库在这里:https://github.com/Growl1234/Multiwfn-make

主要特点/不同点如下:
1. 给gfortran和ifort两个编译器的情况搞了两个不同的makefile.include,一个以后缀*.gnu结尾,一个以*.intel结尾,放在config文件夹中,运行make时Makefile会根据检测到的编译器来调用。Makefile会自动检测环境中已有的编译器,若有ifort/ifx优先使用之;也可以手动指定。
2. 构建过程文件存放在单另的obj目录中、链接好的二进制文件存放在单另的exe目录中(settings.ini也会被复制到其中),显得不杂乱、方便管理。
3. 添加了ARCH选项,用户可以利用ARCH=native来启用自己电脑上支持的最高指令集;默认为ARCH=generic,保持与原makefile一样只用相对保守的SSE3指令集。
4. 可以指定TYPE=Release或Debug(默认为Release,使用默认的优化选项),这样就不用手动进去文件取消注释才能编译debug版本了。
5. 采用类似CMake(UNIX Makefile as generator)的输出形式,包括颜色区分(重定向至日志文件时禁用),整齐、美观;仅在手动指定V=1或VERBOSE=1时才输出具体编译命令。
6. 若中途断开、重新编译,会检测编译选项是否与已有部分采用的选项一致,若不一致则报错。
7. 运行make clean*时不删除链接好的二进制文件,只在make distclean时才删除。
8. [实验性质] 使用gfortran当编译器时,可以使用OpenBLAS而非MKL(但未经充分测试,因此可能存在没法用/报错的风险;最好还是用MKL,这也是文件中的优先选项)。


最简单的使用方法,就是将Makefile文件和config目录复制到源代码目录下(替换掉原来的Makefile),然后运行“make -jN”指令就可以了。可用选项和flag可以通过“make help”查看,仓库中的README.md也做了一些简要说明。需要注意的是如果使用gfortran,Rocky Linux系统需要通过dnf额外安装libgfortran-static和glibc-static两个包。

P.S. 目前一个已知的不算问题的问题:
我在用gfortran+MKL利用上面的Makefile编译出来的Multiwfn载入孤立体系结构文件(gjf、ORCA的inp,等),完成所有操作后退出时会提示:
Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG
解决方案:直接无视即可。这是因为源代码对载入的结构文件试图判断周期性边界、并尝试执行 getcellabc(获取晶胞参数),发现这是孤立体系没有晶胞参数后失败跳过而产生的提示信息。

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-3-8 06:08 , Processed in 0.149186 second(s), 20 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list