首先我是一个linux 小白,只接触过linux 的基本用法, 听说VASP 编译很复杂,故想学习之。 如果大神见了,请直接飘过,非常期待和大家互动交流。
下面就直接进入主题。 如何在linux 下面安装VASP,首先我想说说什么叫编译? 为什么要编译呢?
说到编译,我们就先说说编译器 (Compiler),它是一种计算机程序,它会将用某种语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。它主要的目的是将便于人编写,阅读,维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。
举个例子大家来理解下, 我有一个test.f90 的fortran 文件,经过编译在 window 生成 test.obj文件,在linux 下生成test.o 文件,注意这两个文件的格式是完全不同的。 这里有人就会问,那么.lib 是干什么? 比如我们的代码需要执行一些 open 语句,write 语句,read 语句等,编译器的生产厂家会把这些语句写在 .lib 运行时库里面(runtime.lib),当时我们可能在整个运行过程中需要调用第三方函数库(如IMSL、MKL等),编译器会一起链接(组装)成一个可执行文件。
我们可能后期会修改一个程序,我们可以再重新修改编译,没有修改的就不用编译,这样可以大幅度提高速度。
编译、链接、运行是三个基本步骤
编译是针对一个源文件,输出为目标代码
链接是针对一个或多个目标代码,也可以包含一个或多个库文件,输出为可执行程序
编译、链接是生成可执行文件(程序)的过程,是开发者应该做的事情
运行是使用可执行程序的过程,是用户应该做的事情
我们应该既要会安装VASP,也要会使用VASP
我们要安装VASP 需要什么呢?
1) 首先是编译环境的配置:
VASP 并行版本的编译(串行版本的不常用)需要如下工具:
Intel Fortran Compiler : ifort
并行编译器:mpif90 或者 mpiifort (上海超算是mpif90)
2)数学库:一般常用Intel MKL,如果有其他的当然也可以
3)VASP 源代码 下载 VASP 源码包,VASP 并不是免费软件,大家应该可以找到。我这里是vasp.5.2.12.tar.gz 和 vasp.5.lib.tar.gz
关于 Fortran 编译器,我们一般Intel架构的机器好像只能使用ifort来编译,如果使用GNU开发的gfortran编译,就是一个大大的杯具。从Intel 官网上可以下载Fortran编译器:
http://software.intel.com/en-us/ ... -evaluation-options
安装Fortran 编译器的时候好像会自动把MKL安装上,很是省事。当然,编译器和数学库的安装是需要许可证的,这个事情 … 大家都是电脑上从来不安装正版软件的盗版砖家,神通广大,深藏不露,这里我就不罗嗦了!其实Intel会有提供30天的试用版本,可以尝试。
关于并行编译器,可以使用 openmpi mpich IntelMPI 等等,安装的事情我不想多说了,DEB系列的系统直接apt-get install,其他系列的我不是很了解。当然可以从源代码编译安装,或者比如Intel的并行开发运行环境,从官网或者其他途径下载安装包,安装起来应该不是特别复杂。
需要注意的是,使用哪种MPI编译,就要使用对应的mpirun来并行运行,它们互相之间好像是不兼容,记得好好设置 PATH LD_LIBRARY_PATH 两个变量。VASP 运行时是一扑成吊丝,还是一飞成高富帅,它们有关键性的作用。
这个如果大家都弄好的话,请检查编译器,运行库,路径无误
Intel Fortran Compiler
[tongji005@login1 vasp.5.lib]$ which ifort
/public/software/compiler/intel/composer_xe_2015.2.164/bin/intel64/ifort
并行编译器:
[tongji005@login1 vasp.5.lib]$ which mpirun
/public/software/mpi/openmpi/1.6.5/intel/bin/mpirun
[tongji005@login1 vasp.5.lib]$ which mpif90
/public/software/mpi/openmpi/1.6.5/intel/bin/mpif90
which mpiifort
/share/apps/intel/impi/4.1.0.030/intel64/bin/mpiifort
关于 VASP 的编译
1,解压:tar zxvf FileName.tar.gz
tar zxvf vasp.5.2.12.tar.gz tar zxvf vasp.5.lib.tar.gz
2,编译库文件, 简单, 直接使用makefile.linux_ifc_P4
将19行FC=ifc改为FC=mpiifort
make -f makefile.linux_ifc_P4
得libdmy.a和linpack_double.o, 即成功
注意你在编译过程中可能会遇到:
rm: cannot remove `libdmy.a': No such file or directory
make: [libdmy.a] Error 1 (ignored)
ar vq libdmy.a preclib.o timing_.o derrf_.o dclock_.o diolib.o dlexlib.o drdatab.o
ar: creating libdmy.a
这是一个可以忽略的错误,不用理它。
3,编译主程序, 复杂, 牵涉到数学库, FFT库, 并行库的选择, 需要修改makefile.linux_ifc_P4.
原则是尽可能使用Intel自家的东西, 简单且效率好, 故使用MKL及其自带的FFTW, 并行库使用IntelMPI
编译器选项可在Intel官网查询
一份修改好的makefile及其简单注释如下
将其保存为makefile
注意,我在关键部分做个注释。
makefile 文件中的修改部分:
修改1,先把BLAS (Basic Linear Algebra Subprograms) 这个库的位置修改
修改2,修改LAPACK 数学库的位置
修改3,修改MKL 数学库的位置
修改4,修改FT3D的位置(做傅里叶变换用的)
退出保存
make
等待结果。
没有错误提示,证明VASP 编译成功。
说在后面
关于 makefile 中变量的设置,就说这么多。这里面的事情,参考着上面给出的示例,自己捉摸一下应该没有太大的问题,都懂的,说太多就没意思了,点到为止。
好吧,再唠叨几句:
如果不是使用 mpiifort 来编译的话,比如是 mpif90,记得将其调用的 fortran 编译器设置为 ifort 。有两种方式:一是重新编译并行编译器,在编译选项中指定其调用的Fortran编译器,这种方式可能有点麻烦;二是采用比较取巧的方法,由于mpif90默认调用gfortran作为Fortran编译器,那我们做一个符号链接就可以了:gfortran -> ifort。另外需要注意的是,可能同时得修改 BLAS LAPACK 和 SCA 变量中的部分链接库名字,详情请参考 makefile ,因为其中默认是使用 mpif90 编译器。
到这里,关于makefile的修改应该就差不多了,保存退出后执行 make ,如果人品足够好,一般等上十分钟的就可以得到编译好的可执行 vasp 二进制文件。这里有一个小技巧:直接执行make编译是顺序进行的,如果使用 make -j N ,则可以同时并发N个编译,速度会快上很多(N倍?)。但是由于makefile中没有针对并发编译做特殊的处理,所以这样操作很容易出错。当然,出来混,拼的就是人品!如果出错退出了,不用捉急,一般是由于编译过程的冲突导致的,再执行make顺序编译过这一段,接下来再并发编译,照样是可以的。
最后,编译过程中遇到问题的时候,不要难过,搞个两三天甚至几周才编译通过是很正常的事情,要淡定,要多上网搜,要多看VASP the GUIDE中的第三节:The installation of VASP,其中有很详细的解释。另外,VASP the GUIDE中有一些关于优化执行效率的讨论,很有参考价值,要认真学习,深入领会精神!
如果大家想要知道如何写 makefile 的话,请下载附件。 附件会教你一步一步如何写makefile 《跟我一起写 Makefile》
祝编译顺利,VASP开发小组与我们同在!