距上一篇《把aMule变成系统服务》已经很久没写点有用的东东了。半个晚上加上今天下午两个小时,终于成功搞定了单机安装 vasp.4.6.28,记录一下。

- 本文以 vasp.4.6.tar.gz vasp.4.lib.tar.gz 为例; 由于vasp是商业版本,所以不提供下载。
- 操作系统是 Arch Linux(更新至20080915),并在 ubuntu-8.04.1-desktop-i386 上测试成功,ubuntu中依赖请看ubuntu附注
- mathlib 选择 atlas;
- Fortran 编译器使用intel非商业版的 ifort ;
- C++ 编译器使用 g++ ;
- 不加说明的话,都是以普通用户操作,如需root权限,则使用 sudo 命令。
关于VASP的介绍(跳过介绍):
VASP是使用赝势和平面波基组,进行第一定律分子动力学计算的软件包。VASP中的方法基于有限温度下的局域密度近似(用自由能作为变量)以及对每一MD步骤用有效矩阵对角方案和有效Pulay混合求解瞬时电子基态。这些技术可以避免原始的Car-Parrinello方法存在的一切问题,而后者是基于电子、离子运动方程同时积分的方法。离子和电子的相互作用超缓Vanderbilt赝势(US-PP)或投影扩充波(PAW)方法描述。两种技术都可以相当程度地减少过渡金属或第一行元素的每个原子所必需的平面波数量。力与张量可以用VASP很容易地计算,用于把原子衰减到其瞬时基态中。
性质:
- 以平面波为基础的自洽赝势积分方法;
- 超软赝势;
- 最新引用Blochl的全电子投影扩张波(PAW)方法,覆盖了周期表中的所有元素;
- 局域密度近似(LDA)和广义梯度近似(GGA);
- 旋转限制和旋转极化;
- 应用到块状体系、表面和界面;
- 总能量,力场和全压力张量;
- 格参数和原子位置的同时松弛;
- 从头分子动力学;
- 产生 Monkhorst-Pack特殊K点;
- 设计定位,旋转和局域波的态密度;
- 费米水平的部分态密度;
- 电荷密度旋转密度;
- 轨道和轨道密度。
操作平台: Linux/Unix
1. 首先,安装依赖和 g++ 编译器
| user@~$ sudo pacman -S base-devel libstdc++5 |
Ubuntu用户使用以下命令
| user@~$ sudo apt-get install build-essential user@~$ sudo apt-get install libstdc++5 |
2. 到Intel的官网上下载非商业版的 Intel® Fortran Compiler for Linux, 这里我使用的是 10.1.018 版;
- 解压安装(为了清理方便,解压后都在/tmp目录下)
user@~$ tar -xvf l_fc_p_10.1.018.tar.gz -C /tmp/
user@~$ cd /tmp/l_fc_p_10.1.018/ - 运行安装脚本
user@/tmp/l_fc_p_10.1.018$ sudo sh install.sh - 之后会出现安装选项,选1 ;
接下来问你通过’序列号网络认证,还是用 ‘.lic’ 文件认证; 我已经下了认证文件,所以选2后填写认证文件的路径;
因为Arch Linux不在支持的系统之列,它会问你是否安装不支持的版本,yes就可;
默认还是高级安装, 选1 默认;
一路回车, 到达接受条款那里,填 accpet ;
选择安装目录,回车默认(/opt/intel/) ;
安装完毕! - 设置环境变量
user@~$ source /opt/intel/fc/10.1.018/bin/ifortvars.sh 这个是零时解决办法,应该把 ifortvars.sh 脚本中的内容加入 /etc/profile 文件中。
3. 到ATLAS的网页下载数学库[ mathlib ]
http://www.netlib.org/atlas/archives/linux/
根据CPU选择源文件,我的CPU是Athlon64 3000, 操作系统是x86的, 选择 atlas3.4.1_Linux_ATHLON.tgz ; 千万别选错数学库,不然打死你也完不成编译;
把数学库解压到/opt/目录下( 和ifort同目录,方便管理 ),
| user@~$ sudo tar -xvf atlas3.4.1_Linux_ATHLON.tgz -C /opt/ |
如果并行编译的话,到 http://www.mcs.anl.gov/research/projects/mpich2/ 下载mpich2, 这不在本文讨论的范围之内。
4. 安装VASP 4.6
- 解压 vasp 和 vasp-lib
user@~$ tar -xvf vasp.4.lib.tar.gz -C /tmp/
user@~$ tar -xvf vasp.4.6.tar.gz -C /tmp/上面的命令将把vasp和lib解压到 /tmp/ 目录下的 vasp.4.lib 目录和 vasp.4.6 目录;
- 编译 vasp.4.lib, ────> 进入源码目录,根据CPU和编译器选择makefile文件,并修改编译命令
user@~$ cd /tmp/vasp.4.lib/
user@/tmp/vasp.4.lib$ vim makefile.linux_ifc_ath
# 19行 FC=ifc , 改为 FC=ifortuser@/tmp/vasp.4.lib$ make -f makefile.linux_ifc_ath
# 编译获得 libdmy.a如果遇到 “ifort: error #10001: could not find directory in which g++ resides”, 则设置环境变量 export LC_ALL=C
提示libdmy.a文件是最新,则删除已编译的文件 rm ×.o - 编译 vasp.4.6, ────> 进入源码目录,根据CPU和编译器选择makefile文件,并修改编译命令
user@~$ cd /tmp/vasp.4.6/
user@/tmp/vasp.4.6$ vim makefile.linux_ifc_ath
# 50行 FC=ifc , 改为 FC=ifort# 修改atlas数学库的路径
# 102行 改为 ATLASHOME= /opt/Linux_ATHLON/lib# 把330行之后的参数 ‘-e95′ 全部删除,然后编译
user@/tmp/vasp.4.lib$ make -f makefile.linux_ifc_ath不删除参数 ‘-e95′ 会出现ERROR: “The computed GOTO statement is an obsolescent feature in Fortran 95.” ;
GOTO似乎是 Fortran 95 废弃的语法,5.0版应该会改正;
“-e95″ 参数会把F95编译F77程式码产生的警告(warning)改成错误(error)型式输出,造成编译强迫停止无法忽略跳过!
5. 拷贝vasp可执行文件到 PATH 中
| user@/tmp/vasp.4.lib$ sudo cp ./vasp /usr/bin/ |
以后直接可以把vasp当普通命令用了。
-=全文完=-
最近还在向Achin请教Linux的用法,也开始学习了~
我的安装中 出现这个问题是什么导致的呢?怎么解决?
g3307@g3307-desktop:/tmp/vasp.4.lib$ make -f makefile.linux_ifc_ath
gcc -E -P -C preclib.F >preclib.f
ifort -O0 -FI -FR -c preclib.f
make: ifort:命令未找到
make: *** [preclib.o] 错误 127
@g3307, 你没有更新环境变量
user@~$ source /opt/intel/fc/10.1.018/bin/ifortvars.sh
上面的那个问题解决了 但是编译 vasp.4.6的时候又出现问题了
我的机器 用的是P4
按照你的方法把 330后面的全部删掉 我make 出现这样的错误该怎么修改?
./preprocess fftw3d.f90 -DHOST=\”LinuxIFC\” -Dkind8 -DNGXhalf -DCACHE_SIZE=12000 -DPGF90 -Davoidalloc
ifort -FR -lowercase -O3 -xW -tpp7 -c fftw3d.f90
make: ifort:命令未找到
make: *** [fftw3d.o] 错误 127
@g3307, 这不是同一个原因吗? 再做一遍 更新环境变量
user@~$ source /opt/intel/fc/10.1.018/bin/ifortvars.sh
或者干脆把 ifortvars.sh 的内容夹道 profile 里;
不好意思,还有个问题
g3307@g3307-desktop:~/桌面/vasp.4.6$ make
rm -f vasp
ifort -o vasp main.o base.o mpi.o smart_allocate.o xml.o constant.o jacobi.o main_mpi.o scala.o asa.o lattice.o poscar.o ini.o setex.o radial.o pseudo.o mgrid.o mkpoints.o wave.o wave_mpi.o symmetry.o symlib.o lattlib.o random.o nonl.o nonlr.o dfast.o choleski2.o mix.o charge.o xcgrad.o xcspin.o potex1.o potex2.o metagga.o constrmag.o pot.o cl_shift.o force.o dos.o elf.o tet.o hamil.o steep.o chain.o dyna.o relativistic.o LDApU.o sphpro.o paw.o us.o ebs.o wavpre.o wavpre_noio.o broyden.o dynbr.o rmm-diis.o reader.o writer.o tutor.o xml_writer.o brent.o stufak.o fileio.o opergrid.o stepver.o dipol.o xclib.o chgloc.o subrot.o optreal.o davidson.o edtest.o electron.o shm.o pardens.o paircorrection.o optics.o constr_cell_relax.o stm.o finite_diff.o elpol.o setlocalpp.o fftw3d.o fft3dlib.o /usr/local/lib/libfftw3.a -L../vasp.4.lib -ldmy ../vasp.4.lib/linpack_double.o ../vasp.4.lib/lapack_double.o /opt/libs/libgoto/libgoto_p4_512-r0.6.so
ld: ../vasp.4.lib/linpack_double.o: Relocations in generic ELF (EM: 36902)
ld: ../vasp.4.lib/linpack_double.o: Relocations in generic ELF (EM: 36902)
ld: ../vasp.4.lib/linpack_double.o: Relocations in generic ELF (EM: 36902)
ld: ../vasp.4.lib/linpack_double.o: Relocations in generic ELF (EM: 36902)
../vasp.4.lib/linpack_double.o: could not read symbols: File in wrong format
make: *** [vasp] 错误 1
这又是该怎么改呢?
@g3307, 你的vasp.4.lib那里编译通过了吗? lib和vasp都在同一目录下。 还有你的makefile.linux_ifc_p4文件得修改正确;
你先Google一下,关于在P4的CPU下编译,我记得还有几处需要修改的地方
谢谢你的回复,vasp.4.lib 这里我编译的时候没有问题
谢谢前辈们指导,我刚学什么也不懂,以后还需前辈们多多指导
我这么干了 可又出现了:
ERROR: Unknown switch ”. Accepted values: ia32, intel64, ia64
这该怎么办呀?
我的是5。2的
太好了!我花了好几个星期没搞定,正郁闷,看了文章,只用了半个小时就搞定了。