banewfn

banewfn

Last Update: 26/5/6

banewfn是一个致力于简化Multiwfn使用而设计的程序。本程序原本是banetask的一个组件,但开发过程中发现单拎出来在Windows下用也不错,于是用mingw单独编译了一份。

项目地址:https://github.com/bane-dysta/banewfn

安装

Windows版

前面先讲依赖程序,本体在后面。

Multiwfn

下载地址:http://sobereva.com/multiwfn/

Multiwfn的Windows版是可以解压即用的,但是为了可以在命令行调用,本文要求将Multiwfn加入PATH。具体操作方法:

  • 打开Multiwfn可执行文件所在目录,把地址复制出来备用
  • 使用快捷键Win+R打开运行窗口,输入sysdm.cpl回车
  • 在弹出的窗口里打开高级选项卡,点击下方的环境变量
  • 在新弹出的窗口上半部分,点击新建。
  • 变量名填Multiwfnpath,变量值为先前复制的Multiwfn可执行文件所在目录
  • 点击确定以添加环境变量
  • 找到一个名为Path的环境变量,双击打开
  • 在弹出的窗口点击新建,再次粘贴先前复制的Multiwfn可执行文件所在目录
  • 点击确定退出Path设置
  • 点击确定退出环境变量设置

完成后,Win+R运行cmd,在命令行键入multiwfn,如果可以成功运行Multiwfn,则证明设置成功。

VMD

下载地址:https://www.ks.uiuc.edu/Development/Download/download.cgi?PackageName=VMD

当前(2026.2.14)推荐下载VMD 1.9.3,这是稳定版,BUG少。VMD最好不要装在C盘,其他盘随便找个地方安装即可。安装路径最好不要有中文、空格与特殊字符。安装完毕后,同样需要将路径添加至PATH

  • 打开VMD可执行文件所在目录,把地址复制出来备用
  • 使用快捷键Win+R打开运行窗口,输入sysdm.cpl回车
  • 在弹出的窗口里打开高级选项卡,点击下方的环境变量
  • 在新弹出的窗口上半部分,点击新建。(若后续vcube加载失败,可以尝试在下半部分创建变量)
  • 变量名填VMDSCRIPTS,变量值为先前复制的VMD可执行文件所在目录
  • 点击确定以添加环境变量
  • 找到一个名为Path的环境变量,双击打开
  • 在弹出的窗口点击新建,粘贴先前复制的VMD可执行文件所在目录
  • 点击确定退出Path设置
  • 点击确定退出环境变量设置

随后,打开VMD所在目录的vmd.rc,添加一些内容并保存退出:

1
2
source $env(VMDSCRIPTS)/vcube.tcl
set style_dir $env(VMDSCRIPTS)\\styles

最后下载ggdh老师的vcube,并把vcube.tcl和style放进vmd所在目录。公社下载文件要注册,在这里也提供一份2.0版

完成后,Win+R运行cmd,在命令行键入VMD,如果可以成功运行VMD,且输出

1
2
3
4
vcube loaded...
vcube version 2.0 developed by ZhongCheng@whu.edu.cn
type "vhelp" to get list of available functions and keyboard shortcuts
type "vhelp function" to get detailed usage of that function

则配置完成。部分用户反映按照上述步骤配置完之后vcube加载失败,这可能是权限问题,此时可以尝试将VMDSCRIPTS变量添加至系统变量,也就是下半部分窗口。

GitBash

为了在命令行使用bash脚本,需要安装一个gitbash。可以去官网下,但是这里走的是GitHub,偶尔会抽风下不下来。此时也可以去国内镜像下载,比如清华源

gitbash的安装一路默认即可,没啥难度。最好别改默认安装路径。

Banewfn本体

banewfn可以从笔者的GitHub下载。Github里有CI prerelease,可以确保拿到最新版,但是网络有概率抽风。

如果连不上GitHub,可以去gitee下载,但是这里要靠笔者手动release,可能不是最新版。

Windows的release有两个版本。一个是exe后缀的installer版(banewfn.setup.exe),跟着提示选路径即可。推荐先装完上面的Multiwfn和gitbash再用installer安装。如果上述操作正确,installer应该已经自动找到正确的路径了。目前installer已经比较完善,除了没有打包example之外强于portable版,一般情况下优先使用installer安装

还有一个版本是zip后缀的portable版,这一版解压后需要手动调一下配置文件。如果你已经按照上文操作配置过Multiwfn的路径,不想麻烦的朋友可以直接双击set.bat把配置文件做好。如果你是高手,也可以手动创建:在地址栏键入%USERPROFILE%,进入你的个人文件夹,创建一个.bane文件夹,在其中再创建一个wfn文件夹,在wfn里创建banewfn.rc(也就是%USERPROFILE%/.bane/wfn/banewfn.rc),路径自己填:

1
2
3
4
5
# banewfn.rc
gitbash_exec=C:\Program Files\Git\bin\bash.exe
Multiwfn_exec=%Multiwfnpath%\Multiwfn.exe
confpath=D:\MyProgram\banewfn\conf
cores=4

设置完后,还可以将bw后缀绑定banewfn。操作方法:任意新建一个bw文件,比如1.bw,在右键菜单里选择属性,从弹出的页面里找到选取打开方式,选择banewfn.exe作为bw文件的默认打开方式。

Linux版

  • Linux版无需安装git bash。
  • 此外,如果你的目的是在服务器上进行波函数分析,下载到本地使用,则你无需安装Linux版VMD,但仍需安装Multiwfn。
  • 如果你希望在本地使用banewfn的一键可视化,则你需要在本地按照前述方法配置好VMD的PATH

Multiwfn

Multiwfn的Linux版见sobereva老师的博文,无需为banewfn进行其他额外设置,此处不再赘述。

Banewfn本体

banewfn可以从笔者的GitHub下载。Github里有CI prerelease,可以确保拿到最新版,但是网络有概率抽风。

如果连不上GitHub,可以去gitee下载,但是这里要靠笔者手动release,可能不是最新版。

Linux目前通过cpack单文件安装包进行release(后缀sh),运行后跟着提示操作即可。

1
bash banewfn-1.3.0-linux-x86_64.sh

注意,linux版的banewfn.rc文件目前需要用户手动创建:

1
2
3
4
5
6
mkdir -p ~/.bane/wfn
cat << EOF > ~/.bane/wfn/banewfn.rc
# 如果你的Multiwfn在PATH里,可以直接这么写,否则要带绝对路径
Multiwfn_exec=Multiwfn
confpath=/path/to/conf
cores=4

关于使用,一种方法是将banewfn所在路径加入PATH。示例:

1
export PATH=$PATH:/path/to/banewfn-1.3.0-linux-x86_64/bin

完成后,即可在命令行调用banewfn执行bw/bwc脚本。

1
2
3
4
g16 h2.gjf
formchk h2.chk
cp /xxx/yyy/fmo.bwc .
banewfn fmo.bwc

另一种方式是使用shebang。在.bashrc里将banewfn所在路径加入PATH之后,可以给任意bw/bwc文件补这样的shebang:

1
#!/usr/bin/env banewfn

随后,该bw/bwc脚本就可以直接运行了,例如:

1
2
3
g16 h2.gjf
formchk h2.chk
~/scripts/fmo.bwc

该方法与直接在命令行调用banewfn执行bw/bwc脚本效果是一样的。

工具集

此处的脚本默认读者已按上述安装流程安装了所有程序,尤其是gitbash和VMD。(Linux版可以忽略)

  • 脚本集合入口在这里
  • 配置文件集合入口在这里

如果不想捣鼓conf,只是想做某个分析,可以看内联配置的bwc脚本集,这些脚本同bw文件一样是双击即用的,同时无需配置文件:

VS code高亮语法插件:bt-highlight.vsix

报错排查

高频问题:双击没反应/闪退

这种问题有七八成都是扩展名不一致引起的,比如bw/bwc文件里检索的是*.fchk,而实际提供的是fch。关于如何打开扩展名:

打开之后检查一下扩展名是否跟bw/bwc文件起始wfn定义的不一致。fchk与fch本质上是一类文件,可以通用,可以选择修改扩展名或修改bw/bwc文件wfn起始定义的模式以继续波函数分析。

如果没有发现此类问题,按照如下步骤操作然后将输出反馈给开发者:

  • 找到安装banewfn的位置
  • 右击banewfn.exe,点击复制文件地址选项
  • 去你的工作目录(也就是你的波函数文件所在文件夹)
  • 右键-在此处打开终端
  • 敲一个&,然后空格
  • 右键粘贴banewfn地址,然后再敲一个空格
  • 输入存在问题的banewfn输入文件的文件名,如fmo.bwc
  • 回车执行(若没有自动检索波函数文件,应提供波函数文件)
  • 将输出复制或截图,并提供给开发者

同时,最好将如下信息也一并提供:

  • 去你的工作目录
  • 右键-在此处打开终端
  • 输入dir,将输出复制或截图,并提供给开发者

fortran乱码报错

如果你看到类似这样的输出,说明Multiwfn在运行过程中发生了崩溃:

1
2
3
4
5
6
7
8
9
10
forrtl: severe (24): end-of-file during read, unit 10, file C:\Users\lh_yg\Downloads\123\grid_2-INT1_optfreq.fch
Image              PC                Routine            Line        Source
Multiwfn.exe       00007FF649C3EAC1  Unknown               Unknown  Unknown
Multiwfn.exe       00007FF649A15EF2  Unknown               Unknown  Unknown
Multiwfn.exe       00007FF6499B02F0  Unknown               Unknown  Unknown
Multiwfn.exe       00007FF649A84EAE  Unknown               Unknown  Unknown
Multiwfn.exe       00007FF64A59DB7B  Unknown               Unknown  Unknown
Multiwfn.exe       00007FF64A8B33F0  Unknown               Unknown  Unknown
KERNEL32.DLL       00007FFB12A9E957  Unknown               Unknown  Unknown
ntdll.dll          00007FFB143E427C  Unknown               Unknown  Unknown

此时,你应当检查Multiwfn的安装,例如

  • 所安装Multiwfn是否为最新版、是否按照sobereva老师的教程安装。
  • Multiwfn可执行文件是否能正常打开、读入波函数文件
  • 换一个更简单的体系,如水、氢气等,是否还能复现该报错

如果上述问题均不存在,进行如下操作:

  • 在bwc文件开头增加dryrun=on
  • 双击运行,本次不会实际执行波函数分析,但会留下Multiwfn命令序列
  • 右键-在此处打开终端,输入Multiwfn回车,并提供波函数文件
  • 按照Multiwfn命令序列,手动过一遍流程
  • 如果在某一步崩溃,可以自行判断一下属于哪种情况
    • 在读取波函数文件/波函数分析过程崩溃,可能是机器内存不足
    • 注意观察每一步含意。若崩溃位置执行了明显不对劲的命令,则可能是Multiwfn更新后菜单结构发生了变化,应通知开发者修改conf文件的序列
    • 若发现生成的文件名不符合预期,可能是你修改了Multiwfn的settings。此时应自行修改banewfn脚本以适应你的情况。

若进行上述排查仍然无法确认原因,应向开发者提供波函数文件,以便检查问题。

自定义脚本教程

注意,以下内容只是简单介绍一下,并不会经常更新。如果下述内容与随banewfn一起release的最新pdf文档冲突,以最新的pdf文档为准。

Manual-ver1.3: BaneWfn_Munual.md

公社介绍贴:

banewfn的方便之处在于可以用一个通用的bw文件完成复杂波函数分析。安装banewfn后,只要把conf文件写好,就可以随意组合操作拼成脚本。

conf文件

conf文件是要求banewfn进行某一类波函数分析时读取的配置文件。以空穴电子分析为例,正常的Multiwfn键入流程为:

1
2
3
4
5
6
18
1
<logfile>
<state>
1
<grid>

格点处理完之后,进入了后处理菜单。其中,导出cub要用10和11:

1
2
3
4
10
1    // 1=total 2=local 3=cross
11
1

类似地,了解其他功能:导出overlap用12,跃迁密度13,跃迁偶极密度14,CDD15,等等。我们用conf文件将这些操作记录下来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 主逻辑,也就是进入后处理菜单需要的步骤
[main]
18
1
${logfile:-} # 输出文件
${state:-1}
1
${grid:-2}

# 空穴-电子分析
[cub]
10
${choice:-1} # 1=total 2=local 3=cross
11
${choice:-1}

[overlap]
12
${func:2} # 1=Sm 2=Sr

# 跃迁密度-transdens.cub
[transdens]
13

# ...
# 可以自定义更多

# 退出
[quit]
0 
0
0
q

其中,[main]记录主逻辑序列,[quit]块记录退出序列,其他块则是每种后处理的序列。为了让我们调用的时候可以稍微做些修改,约定使用shell风格的变量占位,且可以通过:-设定默认值。例如,${state:-1}表示若后续不指定,则state取默认值1。

输入文件

banewfn的默认输入文件后缀是bw,不过不强制绑定,读者想设置成别的也无所谓。输入文件控制banewfn如何组合conf里的序列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 文件头可以用wfn=xx指定交给Multiwfn的文件,支持通配符
wfn=*.fchk
# 用bash风格语法设定变量值。若写state=1,表示后文${state}均取值1;
# 而下面的bash数组写法表示分别对state为1,2,3的情况运行Multiwfn
state=(1 2 3)

# []块写conf文件名,表示这一步读取哪个配置文件。
# 后续到%process为止是变量配置部分,用来指定conf文件中预留变量的值
[hole-ele]
state ${state}
# %process后每一行均为后处理选项。指定变量值均在当行指定,空格分隔
%process
cub choice 1
transdens
# process完之后可以执行一段脚本。Windows下默认运行bat。
# 但如果写了shebang行则调用gitbash运行bash脚本。
# 可以使用${input}来使用输入文件的文件名。
%command
#!/bin/bash
mkdir -p hole-ele
mv hole.cub hole-ele/${input}_s${state}_hole.cub
mv electron.cub hole-ele/${input}_s${state}_ele.cub
mv transdens.cub hole-ele/${input}_s${state}_transden.cub
# end结尾闭合该[]块,后面可以继续添加[]块来进行其他波函数分析。
end

基本规则解释:

  • [module]块告诉程序用的是哪个conf文件,然后跟着变量设定,如state 2设定分析第二个激发态,如果想要高质量格点,可以另起一行再加上grid 3。
  • %process开始,后面调用conf中用方括号定义的后处理。前述conf定义了cub,这里写cub就加载了对应序列。变更变量值的话要在这一行修改,多个变量值之间空格分隔,不能另起一行,因为这里的每一行都会被视为一步独立的后处理。(所以如果你想在一次脚本运行中完成很多后处理,你要保证每次都回到main序列走入的菜单)
  • 随后,你也可以用%command来执行一些命令。这在linux中会被写入sh脚本执行,Windows下会被写入bat脚本执行。最终,一个[module]块应当以end结尾,然后可以继续开[module]块做别的处理。
  • 若某个[module]块未以end结尾而是以wait结尾,则程序运行完指定序列后会停住,允许用户继续交互操作Multiwfn。

细节:

  • 文件头可以以wfn=xxx的形式指定波函数文件,允许通配符。匹配到多个文件时自动批量处理,但应善用${input}以避免覆盖问题。
  • 可以在文件头以core=xx的形式指定并行核数。
  • 可以在文件头以var=a的形式指定变量值。可以使用bash数组写法var=(a b),这样将分别执行一次var=avar=b的工作流。
  • var不能是coreinputoutputwfnwfn_rebase这些保留字
  • 可以使用var=?来要求程序在启动后交互式请求对应参数
  • ${input}将会被替换为输入给Multiwfn的波函数文件名(不带后缀)
  • ${output}将会被替换为当前block的输出文件名,方便整理、提取输出。
  • 其他的${name}这种shell变量风格占位符会依次尝试这样确定:1)程序运行时通过命令行参数指定键值 2)输入文件头部的键值定义 3)工作目录名为name的文件里的内容
  • %command可以不依赖[module]块单独写,但要以end结尾
  • [module]块必须顶格写
  • #后面的所有东西都视为注释,但%command内除外,有时候生成高斯输入文件还是需要写#的。
  • windows下在banewfn.rc中设置gitbash_exec后,可以通过在%command第一行写shebang#!/bin/bash告诉脚本用git bash来执行该脚本
  • wfn_rebase可以被用来在两个block之间切换输入给Multiwfn的文件,但此处不支持通配符,应给出真实文件名。

内嵌脚本(.bwc)是把所有用到的conf文件全都打包嵌入进输入文件,无需外部conf文件也可以运行。嵌入格式为#>>> BANEWFN_INLINE_CONF_BEGIN module_name开启一个conf的内嵌,#<<< BANEWFN_INLINE_CONF_END module_name闭合,中间是conf文件原内容加一个#

1
2
3
#>>> BANEWFN_INLINE_CONF_BEGIN grid
conf文件内容,#号起头
#<<< BANEWFN_INLINE_CONF_END grid

bwc脚本可以使用bwpack生成,bwpack可以自动搜索相应配置文件进行打包。

banewfn.rc

banewfn.rc虽然是rc后缀,但其实是个toml格式的配置文件,这个名称是设计的时候的历史遗留问题,不要在意。初始化时,程序会在当前目录、自身目录、~/.bane/wfn中依次寻找banewfn.rc

1
2
3
4
gitbash_exec=C:\Program Files\Git\bin\bash.exe
Multiwfn_exec=Multiwfn.exe
confpath=D:\MyProgram\banewfn\conf
cores=4

其中,gitbash_exec在Linux无效。这里比较重要的是confpath,需要指向你存conf文件的位置。Multiwfn如果在PATH的话里其实写个Multiwfn.exe就能跑,否则需要设置Multiwfn_execcores就是默认核数,会被bw文件内、命令行参数覆盖。

软件附件

共 52 个文件,位于 /assets/files/banewfn/

Total hits!