|
本帖最后由 snljty 于 2019-12-9 09:12 编辑
我的操作系统是ubuntu 18.04,
当时因为某种原因,没,装intel的编译器,事后发现还是intel的方便啊,另外原生的lapack库似乎也没怎么优化,应该会影响一些效率。
Anyway,折腾了一下还是编译出来了。
首先保证已经安装gcc和gfortran并且可执行文件都在$PATH里。
快速傅里叶变换库用fftw 3.3.5。
ftp://ftp.fftw.org/pub/fftw/fftw-3.3.5.tar.gz
编译要注意的一个是./configure的时候要加上--enable-shared编译动态共享库,另外要编译双精度浮点数的版本(这个应该是默认选项)。--prefix=选项指定自己要编译到的目录,后面同。
编译后将编译出目录的bin目录加入$PATH,lib目录加入$LD_LIBRARY_PATH,就是在~.bashrc里面加上export $PATH=$PATH:新加入的路径,然后source ~/.bashrc或者重开一个terminal。
MPI并行使用的是openmpi-2.1.0,
新版的openmpi-4.0.0编译的时候会报错,我没解决掉,后来试了一下2.1.0是可以的。
选择自己的路径编译openmpi,把编译出来的bin目录加入$PATH
mpich2的1.5等版本总有无法解决的问题,后来看到建议换openmpi的比较多,就用openmpi成功编译了。
lapack去netlib找,我用的3.7.0版本。不过3.6.0以后的版本编译vasp的时候有个小bug,后来发现vasp官网上其实更新过解决方法。
http://www.netlib.org/lapack/lapack-3.7.0.tgz
使用3.6.0和更高版本时,由于lapack库不再提供dgegv函数,要在vasp源文件里面做一些修改,在vasp目录/src/symbol.inc里面加入下面几行(!后面是注释,可加可不加)
! routines replaced in LAPACK >=3.6
#ifdef LAPACK36
#define DGEGV DGGEV
#endif
然后在vasp目录/makefile.include文件中,加入
CPP_OPTIONS += -DLAPACK36
lapack也要编译成shared版本,详见http://icl.cs.utk.edu/lapack-forum/viewtopic.php?t=908,步骤比较长就不粘贴了。
lapack通常就编译在解压后的文件同一层路径里,将含有liblapack.so等文件的目录加入$LD_LIBRARY_PATH
然后编译并行的线性代数库ScaLAPACK,下载地址http://www.netlib.org/scalapack/scalapack-2.0.0.tgz。
这个编译的时候摇调用mpif90和mpicc,所以要先编译openmpi并加入$PATH。
编译完成后,同样lib目录加入$LD_LIBRARY_PATH
使用GPU加速的话,还要编译CUDA,没有的话也可以用。
英伟达官网可以下载。
现在终于可以编译vasp了。解压下载的vasp以后,要修改里面的makefile.include中一些内容
有些更改是不必要的,毕竟已经加入了PATH或者LD_LIBRARY_PATH,但是为了防止电脑里有多个版本等情况,还是指定一下。
FC和FCL后面都改成openmpi编译后的mpif90可执行文件路径,即xxx/mpif90。
别忘了上面提到的-DLAPACK36在LAPACK版本太高的时候要加到CPP_OPTIONS后面。
LIBDIR后面改成lapack编译好的库的路径。
BLAS等号后面改成-L你的lapack目录 (空格)-l(小写的L)blas
如果你前面变异的blas库名字是librefblas.so,就把-lblas改成-lrefblas。
SCALAPACK=后面写= -你的scalapack路径 -lscalapack $(BLACS)
FFTW写:=后面接你编译的fftw库的路径。
MPI_INC =后面写你变异的openmpi库里面的include目录的路径xxx/include
然后保存,应该可以编译了,有三个不同的版本,可以一起直接make,尽量不要并行编译,容易报错,不会太慢的。
大概就是这样,有错误或者没说清楚的地方欢迎大家指正。
最后,不得不说还是intel大法好。
|
评分 Rate
-
查看全部评分 View all ratings
|