一、安装openmx
下载安装包:Download of OpenMX
根据README.txt中流程进行安装(makefile中需要配置intel编译器和库)
二、测试运行openmx
启动配置的intel环境(后面的路径是intel的安装路径) :source /opt/intel/oneapi/setvars.sh
进入openmx3.9/work/路径 :cd openmx3.9/work/
建立一个example_met文件夹:mkdir example_met
更改Methane.dat文件里输出文件位置:vi Methane.dat
修改的内容:【System.CurrrentDirectory ./example_met/】
退出编辑模式,键入命令运行openmx对具有固定结构的甲烷分子进行SCF计算:mpirun -np 1 ./openmx Methane.dat > met.std
在./example_met/下生成了一些文件:
met.std:SCF计算的标准输出,帮助了解SCF的计算流程
met.out:标准输出,里面包括了计算结果,例如:总能量、力、Kohn-Sham本征值等内容,可作为进一步的输入文档
met.xyz:最终的几何结构
met.ene:每一步MD步骤的计算值
met.md:每一步MD步骤的几何结构
met.md2:最终MD步骤的几何结构
met.cif:用于Material Studio的初始化结构的cif文档
met.tden.cube:总电子密度文件,使用Gaussian cube格式表示,包含整个系统的电子密度分布
met.v0.cube:Kohn-Sham势文件,表示在Gaussian cube格式下的Kohn-Sham势分布
met.vhart.cube:Hartree势文件,存储系统的Hartree势分布,采用Gaussian cube格式
met.dden.cube:由原子密度测量得到的差分电子密度文件,采用Gaussian cube格式
met_rst/:用于存储重启文件的目录,包含进行重新计算或从中断点恢复计算所需的中间数据以上Gaussian cube格式的文件可以在VESTA, Molekel, 和XCrySDen分子模型软件上进行可视化
指令解释:
mpirun -np 8 openmx -runtest -nt 2:使用8个MPI进程并行运行OpenMX程序,每个MPI进程使用2个线程,并执行OpenMX自带的测试例子,以验证安装是否正确。
mpirun:用于执行MPI(Message Passing Interface)并行程序的命令。MPI是一种标准,用于在计算机集群中进行并行计算。
-np 8:指定要使用的处理器数量或者指定使用的MPI进程数量。在这里,-np 8表示将使用8个处理器来运行程序。这意味着OpenMX程序将并行运行,利用多达8个处理器来加速计算过程。
openmx:这是要运行的程序的名称。openmx指的是OpenMX软件,这是一个用于材料科学和计算化学的开源软件包。
-runtest:这是OpenMX的一个特定选项,用于运行测试例子。这个选项通常用于验证安装和配置是否正确。通过运行内置的测试例子,可以确保OpenMX在我们的计算环境下正常工作。
-nt 2:这个选项指定每个MPI进程使用的线程数量。-nt 2表示每个MPI进程将使用2个线程。这通常用于利用多核处理器的多线程能力,以进一步加速计算。
三、openmx的输入输出文件
(1)输入文件
一般为.dat文件,在这个文件里关键字之后就是对应的参数,并且关键字的顺序是任意的,字母大小写不会影响关键字的识别。在开头标注“#”代表后面的内容为注释。
1、文件名
System.CurrrentDirectory ./ #指定运行计算时的目录,这里./表示当前目录。如果需要指定其他目录,可以在这里更改
System.Name met #定义当前计算任务的系统名称。这个名称会用于输出文件的命名,如:程序生成的输出文件(如 .out, .dat 等)会使用 met 作为前缀
level.of.stdout 1 # default=1 (1-3) #控制标准输出的详细程度。1:基本信息(默认);2:详细信息;3:非常详细的信息
level.of.fileout 1 # default=1 (0-2) #控制文件输出的详细程度。0:不生成输出文件(最少信息)1:基本信息(默认);2:详细信息
2、原子物种的定义
Species.Number 2 # 定义计算中涉及的原子物种的数量,这里为2种原子
#以下这一块用于详细定义参与计算的每种原子物种及其相关参数
<Definition.of.Atomic.Species
H H5.0-s1 H_PBE19# H为氢原子;H5.0-s1 为原子基组的缩写名称,H5.0为PAO (局部原子轨道)函数文件名,该文件必须存在于由 DATA.PATH 关键字指定的目录中,例如/openmx/DFT_DATA19/PAO/,其中 5.0 是 cutoff 半径,s1 表示该基组包含一个 s 轨道;H_PBE19指定该原子物种所用的赝势文件,H_PBE19 表示使用针对氢的 PBE(广义梯度近似,GGA)方法的赝势文件版本19
C C5.0-s1p1 C_PBE19 # C为碳原子;其他同上Definition.of.Atomic.Species>
3、定义分子或晶体结构
Atoms.Number 3 #定义系统中总的原子数量
Atoms.SpeciesAndCoordinates.Unit Ang # Ang|AU,指定原子坐标的单位,Ang 表示使用埃(Ångström)作为单位,另一个可选单位是 AU(原子单位)#下面这一块定义每个原子的物种、坐标及可选的起始和结束条件
<Atoms.SpeciesAndCoordinates
1 C -1.500 0.000 0.000 2.0 2.0
2 C 0.000 0.000 0.000 2.0 2.0
3 C 1.500 0.000 0.000 2.0 2.0
Atoms.SpeciesAndCoordinates>(第一列:识别原子的顺序序列号。第二列:指定原子物种。第三、第四和第五列:分别给出x、y、z的坐标(当为关键字“Atoms.SpeciesAndCoordinates.Unit”选择“FRAC”时,第三、第四和第五列是跨越的分数坐标a,b,还有c轴,坐标范围可以从0.0到1.0,超出其范围的坐标将在读取输入文件后自动调整)。第六列和第七列:分别给出每个原子的向上和向下自旋状态的初始电荷数量。上升和下降电荷的总和必须是原子元素的价电子数。)
Atoms.UnitVectors.Unit Ang # Ang|AU ,指定晶胞向量的单位,Ang 表示使用埃作为单位,另一个可选单位是 AU
#下面这一块定义晶胞的单位向量,描述系统的周期性边界条件
<Atoms.UnitVectors
4.5 0.0 0.0 #表示第一个单位向量为 (4.5, 0.0, 0.0),即 x 方向长度为 4.5 Å
0.0 10.0 0.0 #表示第二个单位向量为 (0.0, 10.0, 0.0),即 y方向长度为 10.0 Å
0.0 0.0 10.0 #表示第三个单位向量为 (0.0, 0.0, 10.0),即 z方向长度为 10.0 Å
Atoms.UnitVectors>
4、SCF或者电子系统
(以后学习到再详细写)
(2)输出文件
1、设置的参数level.of.fileout=0时,会生成以下输出文件(如果系统名称已经命名为SysName):
SysName.out :SCF计算历史、几何优化历史、Mulliken电荷、总能量、偶极矩
SysName.xyz :由MD或者几何优化获得的最终几何结构,可由OpenMX Viewer和XCrySDen读取进行可视化
SysName.bulk.xyz:使用 scf.EigenvalueSolver 参数并将其设置为 Band 时,程序会计算电子结构,并在输出中提供完整的原子坐标信息
SysName_rst/ :存储重启文档的目录
SysName.md :以xyz格式显示每步MD的几何坐标
SysName.md2 :最终MD步数的几何坐标
SysName.cif :cif格式的初始几何坐标
SysName.ene :每步MD计算的值,这些值可以在“iterout.c”程序例程中找到
2、设置的参数level.of.fileout=1时,除了 level.of.fileout=0 生成的文件之外,还会生成以下高斯立方体文件(如果系统名称已经命名为SysName):
SysName.tden.cube :高斯立方体格式的总能量密度
SysName.sden.cube :如果使用 LSDA-CA、LSDA-PW 或 GGA-PBE 进行自旋极化计算,则会以高斯立方体格式输出自旋电子密度,帮助我们分析系统中自旋分布的情况
SysName.dden.cube :在高斯立方体格式下输出的电子密度差,它是通过将组成原子的电子密度进行叠加计算得到的。生成这个文件可以帮助研究电子密度变化或键合特征
SysName.v0.cube :用于上自旋的 Kohn-Sham 势(不包含非局域势)的高斯立方体格式文件。如果通过关键词 scf.ProExpn.VNA 启用了投影展开方法,则 VNA 势也被排除
SysName.v1.cube :用于下自旋的 Kohn-Sham 势(不包含非局域势)的高斯立方体格式文件。如果通过关键词 scf.ProExpn.VNA 启用了投影展开方法,则 VNA 势也被排除
SysName.vhart.cube :由差分电荷密度计算得到的 Hartree 势的高斯立方体格式文件
3、设置的参数level.of.fileout=2时,除了 level.of.fileout=1 生成的文件之外,还会生成以下文件(如果系统名称已经命名为SysName):
SysName.vxc0.cube :用于上自旋的交换-相关势的高斯立方体格式文件
SysName.vxc1.cube :用于下自旋的交换-相关势的高斯立方体格式文件
SysName.grid :用于数值积分和泊松方程求解的实空间网格文件
4、如果 MO.fileout=ON 和 scf.EigenvalueSolver=Cluster,下列文件也会产生:
SysName.homo0_0.cube, SysName.homo0_1.cube, ...
HOMO 以高斯立方体格式输出。homo 后面的第一个数字表示自旋状态(上自旋=0,下自旋=1)。第二个数字指定本征态,例如,0、1 和 2 分别对应 HOMO、HOMO-1 和 HOMO-2
SysName.lumo0_0.cube, SysName.lumo0_1.cube, ...
LUMO 以高斯立方体格式输出。lumo 后面的第一个数字表示自旋状态(上自旋=0,下自旋=1)。第二个数字指定本征态,例如,0、1 和 2 分别对应 LUMO、LUMO+1 和 LUMO+2
5、如果 MO.fileout=ON 和 scf.EigenvalueSolver=Band,下列文件也会产生:
SysName.homo0_0_0_r.cube, SysName.homo1_0_1_r.cube,...
SysName.homo0_0_0_i.cube, SysName.homo1_0_1_i.cube, ...
HOMO 以高斯立方体格式输出。homo 后的第一个数字表示 k 点编号,该编号由关键词 MO.kpoint 指定。第二个数字表示自旋状态(上自旋=0,下自旋=1)。第三个数字指定本征态,例如,0、1 和 2 分别对应 HOMO、HOMO-1 和 HOMO-2。r 和 i 表示波函数的实部和虚部
SysName.lumo0_0_0_r.cube, SysName.lumo1_0_1_r.cube,...
SysName.lumo0_0_0_i.cube, SysName.lumo1_0_1_i.cube, ...
LOMO 以高斯立方体格式输出。lomo 后的第一个数字表示 k 点编号,该编号由关键词 MO.kpoint 指定。第二个数字表示自旋状态(上自旋=0,下自旋=1)。第三个数字指定本征态,例如,0、1 和 2 分别对应 LOMO、LOMO-1 和 LOMO-2。r 和 i 表示波函数的实部和虚部
6、如果Band.Nkpath不为0,以及scf.EigenvalueSolver=Band,下列文件也会产生:
SysName.Band:用于带隙分布的数据文件,用于分析材料或分子的能带结构。我们可以通过这个文件查看能带在不同 k 点的能量分布,分析材料的导电性和能带特征
SysName.Dos.val :用于计算态密度的本征值数据文件
SysName.Dos.vec :用于计算态密度的本征矢数据文件
8、如果 scf.SpinPolarization=NC 且 level.of.fileout=1 或 2,还会生成以下文件:
SysName.nco.xsf :一个向量文件,通过 Mulliken 分析投影到每个原子的非共线轨道矩,使用 XCrySDen 中的“Display→Forces”功能可以可视化
SysName.nc.xsf :一个向量文件,通过 Mulliken 分析投影到每个原子的非共线自旋矩,使用 XCrySDen 中的“Display→Forces”功能可以可视化
SysName.ncsden.xsf :一个向量文件,存储了在实空间网格上的非共线自旋矩,使用 XCrySDen 中的“Display→Forces”功能可以可视化
四、openmx画能带图
1、openmx画图工具生成
在openmx3.9/source/目录下找到bandgnu13.c文件,按以下命令编译该文件:
gcc bandgnu13.c -lm -o bandgnu13
将得到的执行文件bandgnu13复制到openmx3.9/work目录下:
cp bandgnu13 ../work/
2、将text.Band文件转换为gnuplot格式
openmx3.9/work/bandgnu13 text.Band
- 运行该命令后会得到2到3个文件:'text.GNUBAND'、'text.BANDDAT1'('text.BANDDAT2')。(1和2分别为up- and down-spin states)
- 其中,text.GNUBAND为gnuplot的脚本文件,将会读取后面一个或者两个文件画图
- 如果使用在SCF计算中使用'LSDA-CA', 'LSDA-PW', or 'GGA-PBE'的自旋极化计算,自旋向下态的'text.BANDDAT2'将会额外产生
3、使用gnuplot画图
在'text.GNUBAND'中编辑内容,以适应画出来的图形样式
输入以下指令进行绘图:gnuplot cdia.GNUBAND
在'text.GNUBAND'中添加以下内容可将画出来的图保存为jpg格式:
set terminal jpeg size 1000,1000
set output "plot.jpg" #输出的文件名在'text.GNUBAND'中添加以下内容可将画出来的图保存为png格式:
set terminal pngcairo size 1000,1000 font 'Times New Roman,10' ## 格式,大小和字体
set output "plot.png" ###输出的文件名其他内容可为:
set style data points #设置数据绘图风格为点图
set style data lines #设置数据绘图风格为折线图,每个数据点通过直线连接
set nokey #不显示图例
set zeroaxis #绘制一条穿过原点的零轴(x=0或y=0),通常用于标示零点
set ytics 1 #设置y轴刻度间隔
set mytics 5 #在主y轴刻度间隔内划分5个次刻度(单位eV)
set xra [0.000000:0.153785] #设置x轴的显示范围
set yra [-0.021328:0.175540] #设置y轴的显示范围
set ylabel "eV" #设置y轴刻度的单位(单位eV)
set xtics ("K" 0.000000, "Γ" 0.064997, "M" 0.121286, "K'" 0.153785) #在x轴上定义特定的刻度点,并为每个点设置对应的标签
plot "openmx.BANDDAT1" using 1:2 with points lc rgb "red", \
"openmx.BANDDAT2" using 1:2 with lines lc rgb "red"#绘制两组数据在一幅图里,分别从文件 openmx.BANDDAT1 和openmx.BANDDAT2中读取数据并绘制,文件格式通常是 x 和 y (using 1:2)的数据对,其中 x 表示倒空间路径的位置,y 表示能量值。(with points)代表画点图,(with lines )代表画线图,(lc rgb "red")代表画的线为红色
pause -1 #暂停程序,等待用户按键以继续或退出