前两天给别人编译了一下vasp,由于一开始怀疑他的系统有些问题,所以在更改makefile仍然没有通过编译的情况下,我重装了一个新的系统 Ubuntu 18.04.
然而问题似乎更加糟糕了,桌面版本的1804缺少很多组件,gcc都没有,故而需要安装很多东西。于是:
首先更换国内的源,然后
apt-get update
apt-get install gcc g++ gfortran gcc-multilib build-essential vim openssh-server make cmake automake texinfo
大概就是这些了。
然后安装编译器 intel parallel studio xe 2015,这个就不叙述了。假设我们就安装在/opt/intel(注意该目录需要管理员权限,下面操作类似)之下吧。然后使之生效(长期生效就添加到~/.bashrc里)
source /opt/intel/bin/compilervars.sh intel64
然后编译openmpi
wget https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.3.tar.gz
tar -xvzf openmpi-3.1.3.tar.gz
cd openmpi-3.1.3
./configure --prefix=/opt/openmpi-intel CC=icc CXX=icpc FC=ifort F77=ifort
make -j4
make install
到这里出问题了,错误如下:
/home/user/intel/compilers_and_libraries_2018.2.199/linux/compiler/include/math.h(1230): error: identifier "_LIB_VERSION_TYPE" is undefined
_LIBIMF_EXTERN_C _LIB_VERSIONIMF_TYPE _LIBIMF_PUBVAR _LIB_VERSIONIMF;
^
Ubuntu 18.04 与Intel parallel studio 2015 不兼容(事实上 除了2018update4 以及2019 update1 以及其以后的版本,其他的老版本都有这个问题),原因是libc-2.7更改了很多东西glibc 2.27 removed the '_LIB_VERSION_TYPE' enum。
那么解决办法有两个,一是回退到1604去编译安装,我当时就是这么做的;二是安装最新编译器2018update4 或2019 update1 。
回退系统的办法我就不介绍了,我发现安装新的编译器才是最好的解决方案。
我们可以使用Intel parallel studio 2018(update 4) 和2019 (update 1)配合编译vasp。且编译vasp 5.4.1 以及其后版本非常简单,安装好上述两个编译器之后,通过更改环境变量使之生效,然后在vasp解压包内
cp arch/makefile.include.linux_intel makefile.include
make std
即可轻松完成编译。
intel pst 2018 配合vasp 5.4.1需要编译fftw的库,我们可以
cd /opt/intel/mkl/interfaces/fftw3xf
sudo make libem64t F=intel precision=MKL_DOUBLE
然后再行编译vasp。
intel pst 2018 以及2019 都集成了mpi的编译环境和运行环境,无需单独安装mpi库,而且2019还有现成的fftw3xf库,免去编译,所以编译vasp变得十分简单。
xxxxxxxxxxxxxxxxxxxxxxxx---bug---xxxxxxxxxxxxxxxxxxxxxxxxx
Intel 自身的mpi库貌似编译vasp之后运行出错,我们还是单独编译openmpi
wget https://download.open-mpi.org/release/open-mpi/v3.1/openmpi-3.1.3.tar.gz
tar -xvzf openmpi-3.1.3.tar.gz
cd openmpi-3.1.3
./configure --prefix=/opt/openmpi-intel CC=icc CXX=icpc FC=ifort F77=ifort
make -j4
make install
然后环境变量生效
export PATH=/opt/openmpi-intel/bin:${PATH}
export LD_LIBRARY_PATH=/opt/openmpi-intel/lib:${LD_LIBRARY_PATH}
然后在编译vasp时修改makefile.include文件中的mpiifort为mpifort,运行时也只能使用openmpi的mpirun