0%

Fedora Linux + GIMIC 2.0 绘制磁感生电流

笔者同时在计算化学公社更新了同样内容的帖子《Fedora/Debian Linux 安装 GIMIC 2.0 时踩过的坑以及解决办法》一文,已被计算化学公社社长卢天收录为计算化学公社精华帖以及 2023 年 5 月计算化学网文 hightlight。

地址为:http://bbs.keinsci.com/forum.php?mod=viewthread&tid=37403&fromuid=47478

系统环境以及准备

本文的所有计算操作都是在 Fedora Linux 下的 Gaussian 16 完成的,使用 Windows 系统下的可视化程序 Paraview 进行绘图。下面介绍需要使用到的程序:

  • GIMIC 2.0:必须是 Sob 老师博客中的那个版本,不能是最新版本。
  • Openbabel 3.1.1:前往 Openbabel Github 主页安装,也可以通过 bash 命令安装:apt-get\dnf\yum install openbabel
  • Paraview:通过 Paraview 官网进行安装。

安装 GIMIC 2.0

Sob 老师在《考察分子磁感生电流的程序 GIMIC 2.0 的使用》一文中提供了 GIMIC 2.0 的安装包,下载即可。之后按照 Sob 老师博文中的教程一步一步来,我这里是使用的 Fedora Linux,root 用户,与 Sob 老师的不同。首先安装 cmake 和 conda:

1
2
dnf install cmake
dnf install conda

然后运行下面的命令创建一个名为 myconda 的环境,并且初始化 conda:

1
2
conda create --name myconda
conda init bash # 如果是 zsh 请使用 conda init zsh 命令

~/.bashrc 文件的末尾加入一行 conda activate myconda 使得每次进入终端后自动激活 myconda 环境。 在终端中键入:

1
source ~/.bashrc

这个命令相当于退出终端,然后重新进入终端的操作,输入以下命令安装 GIMIC 2.0 运行时依赖的一些 Python 库:

1
conda install cython numpy pyparsing 

在这里需要注意,如果是直接使用 dnf install conda 命令安装的 anaconda,默认是安装的 anaconda 3,anaconda 3 执行上述命令安装的 Python 是 3.11.3 版本的,而 Sob 老师博文中提供的 GIMIC 2.0 包需要的是 2.7 版本的 Python。如果直接 ./setup --omp 会出现找不到 Python 路径的情况。因此还需要使用 conda 更改 Python 的版本:

1
conda install python=2.7

之后,将 GIMIC 压缩包解压,这里假设我解压到了 /home/kimariyb/gimic,使用 cd 命令进入 gimic 目录,运行:

1
2
3
./setup --omp
cd build
make install

编译过程中可能会有 warning,但是不影响编译,编译完成后,在 ~/.bashrc 里末尾加入:

1
export PATH=$PATH:/home/kimariyb/gimic/build/bin 

之后 source 一下 ~/.bashrc,程序就可以用了。

使用方法

具体的使用方法参考 Sob 老师的原文(《考察分子磁感生电流的程序 GIMIC 2.0 的使用》)第三节,在这里不再赘述。按照原文的方法生成 XDENS 和 MOL 文件后,还需要产生 vti 文件,这里贴出 Sob 老师使用的 gimic.inp 文件,用来生成 vti 文件:

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
calc=cdens              # 任务类型。cdens代表产生格点数据,integral代表计算截面积分值
basis="../MOL" # MOL文件的路径。../代表上一级目录
xdens="../XDENS" # XDENS文件的路径
openshell=false # 如果是开壳层体系,需要设成true
magnet=[0,0,1] # 外磁场的方向,这里要求外磁场方向是Z轴正方向。当前体系里的苯环是在XY平面上

Grid(base) {
type=even # 格点是均匀分布的
origin=[-8.0, -8.0, -8.0] # 格子原点
ivec=[1.0, 0.0, 0.0] # 格子有ijk三个方向,这里定义i方向矢量
jvec=[ 0.0, 1.0, 0.0] # 定义j定义方向矢量。k的方向无需定义,程序自动将i与j做叉乘得到
lengths=[16.0, 16.0, 16.0] # i,j,k三个方向的长度,单位是Bohr
# spacing=[0.5, 0.5, 0.5] # i,j,k三个方向的格点间距,单位是Bohr
grid_points=[50, 50, 50] # i,j,k三个方向的格点数。spacing和grid_points二者只能定义一个,因为是彼此矛盾的,所以此例把spacing注释掉了
}

Advanced {
spherical=off # 这个别管它,但必须写,否则结果异常
diamag=on # on代表考虑diamagnetic部分的贡献
paramag=on # on代表考虑paramagnetic部分的贡献
}

Essential {
acid=on # on代表输出acid.vti文件
jmod=on # on代表输出jmod.vti文件
}

将 MOL 和 XDENS 文件放在上一级目录下,把 gimic.inp 放在当前目录下,然后直接运行 gimic 命令就开始进行运算,如果按照我上述的方法,大概率是不会报错的。

需要注意的是,对于不同体系,inp 文件中的 origin 属性和 lengths 属性的值都不相同。如果设置的过小,而体系又比较大的话,盒子就会特别小。为了方便的解决盒子大小和体系大小匹配合适的问题,Sob 老师开发的 Multiwfn 可以方便的查看到底需要设置多大的 origin 属性和 lengths 属性。只需要将 fch/fchk 文件输入 Multiwfn 中,之后再选择 5、100、1 就可以看见下图所示的内容:

需要使用的只有红圈里的内容,origin 的值对应为红圈里第一行,lengths 的值对应红圈里第二行减去第一行的值

为了能让 ParaView 正确地显示出分子结构,绘图之前还需要产生分子的 cml 格式的文件。之前我们已经安装过了 Openbabel 3.1.1,但是由于原文的 Openbabel 是老版本,新版本的命令和老版本不同,因此原文中 xyz2cml.sh 直接运行会报错。这里我将修改过的 xyz2cml.sh 贴上(原文件地址):

1
2
3
4
5
6
7
8
obabel -ixyz mol.xyz -ocml -O mol.cml
awk '{ {FS="\""}; {OFS="\""};
if ($1 ~ "<atom id") {
if ($5 ~ "hydrogenCount")
{ print $1, $2, $3, $4, $5, $6, $7, $8/0.529177, $9, $10/0.529177, $11, $12/0.529177, $13 }
else { print $1, $2, $3, $4, $5, $6/0.529177, $7, $8/0.529177, $9, $10/0.529177, $11 }
}
else print $0; }' mol.cml > mol-bohr.cml

绘制磁感生电流

Sob 老师在他的博文中放置了一个 24 min 的视频,可供参考。但是不可能每次都去看视频,所以我选择使用文字加图片的方式记录下来。

绘制动态磁感生电流

首先是绘制动态的磁感生电流,在 Paraview 里打开 mol-bohr.cml 和 jvec.vti 文件。选中 jvec.vti,将 Representation 改为 Stream Lines。之后点开小齿轮,往下拉,在 Stream Lines 属性界面中做出以下修改:

1
2
3
4
Alpha = 0.3
Step_Length = 0.8
Number_Of_Particles = 20000
Max_Time_To_Live = 200

把背景改为黑色,效果如图所示(当然在 Paraview 里是动图):

绘制感生电流的模的平面着色流线图

绘制感生电流的模的平面着色流线图就没有这么简单了,首先在 Paraview 里打开 mol-bohr.cml 和 jvec.vti 文件。在 jvec.vti 下新建一个 Slice,将 Representation 改为 Surface LIC,Coloring 改为 vectors。在 Color Map Editor 中更改颜色:

之后分别修改(需要点编程功底才能看懂,最起码得知道类和属性):

1
2
3
4
5
6
7
8
9
10
11
12
13
Lighting.Ambient = 0.1

SurfaceLIC.Integrator.Number_Of_Steps = 30
SurfaceLIC.Integrator.Step_Size = 0.2

SurfaceLIC.Rendering.LIC_Intensity = 0.4
SurfaceLIC.Rendering.Enhance_Contrast = "LIC and Color"
SurfaceLIC.Rendering.High_LIC_Contrast_Enhance_Factor = 0.3
SurfaceLIC.Rendering.Low_LIC_Contrast_Enhance_Factor = 0.05
SurfaceLIC.Rendering.Anti_Alias = 1

SurfaceLIC.NoiseTextureGenerator.Noise_Texture_Generator = true
SurfaceLIC.NoiseTextureGenerator.Noise_Grain_Size = 1

最后将背景改为黑色,得到的效果如图所示:

当然 GIMIC 能做的远不止于此,还可以绘制更多的磁感生电流图。本文主要参考 Sobereva 博客《考察分子磁感生电流的程序 GIMIC 2.0 的使用》的操作。其他图的绘制,请自行浏览博文,观看 Sob 老师的视频。

  • 本文作者: Hsiun YuBin
  • 本文链接: https://ikuns.icu/005/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!