cp2k x86_64的串行/并行编译(ubuntu/SUSE, GNU编译器)

1. Introduction

大多数的分子动力学模拟采用经典分子力学来计算能量和粒子的在运动中受到的力。但是一般的分子力学力场很难处理反应体系,强极化体系,和一切涉及电子激发的体系。这些体系需要精确计算电子结构。

 采用基于DFT理论,平面波函数和赝势的分子动力学模拟被称为第一性原理MD(分子动力学)。第一性原理指的是DFT,与HF被称为ab initio(从头算)相对应。

第一性原理MD有很多免费软件可用,最为著名的是CPMD,和cp2k两兄弟。他们出自相同的科研团队,来自德国的Michele Parrinello (ETH Zurich瑞士苏黎世联邦工学院)Wanda Andreoni(IBM Zurich, IBM苏黎世研究所)等人。

CPMD与cp2k的区别:CPMD支持的是Plane Wave basis set,因而主要用于凝聚态周期体系计算;而cp2k支持的则是Gaussian baisis set,使得它既能方便模拟气相cluster体系,又能模拟周期体系。

此外,cp2k支持的模型较多,比如,支持多种分子力学计算,包括可极化力场;完全不需借助任何外部软件和界面的QMMM计算;输出文件可以直接输出相关理论的原始参考文献;等等。而CPMD的优点是简单易上手;另一方面CPMD积累了20年开发的文档,科研应用文献,maillist讨论;非常有利于初学者。

2. cp2k的下载和安装过程

cp2k的主页:http://cp2k.berlios.de/
下载和安装过程在主页上有清晰的介绍。首先采用cvs这个东东来下载和同步服务器上的源代码包;解压后进入arch文件夹选择对应的编译平台文件并适当修改;然后进入src源码文件夹编译;完成后在exe文件夹下可以找到自动生成的文件夹和可执行文件。

下面我以我的电脑平台为例说明安装的具体过程。我的电脑平台:AMD64-4核,2G内存; Ubuntu 9.10(Karmic) x86-64 version. 这里编译器我使用的是GNU C/Fortran Compiler 4.4.  此外,我在open SUSE11.2下面也测试了一下,顺利通过。其实在ubuntu和SUSE下主要的不同只在于安装gnu编译器和数学库的命令不一样。与cp2k相关的编译过程一样。

一般来说,作为商业软件,intel Compiler/intel MKL数学库可以得到更好的执行性能。但是,因为GNU compiler和数学库在ubuntu下安装配置都是全自动的,简单到一个命令就全部搞定,因此推荐。作为第一步,我们不希望把事情搞的太复杂,对吧?等玩熟了再想法提高cp2k的性能。

【编译前的准备】
安装gnu编译器;安装blas/lapack/fftw3数学库;安装libint数学库;安装并行支持Open-mpi

(1) 安装gfortran编译器
> sudo apt-get install build-essential
> sudo apt-get install gfortran

(SUSE下 sudo zypper in gcc-fortran)

(2) 安装blas/lapack/atlas/fftw3数学库
>sudo apt-get install libblas-dev  liblapack-dev  libatlas-base-dev fftw3-dev

(SUSE: add repository: http://download.opensuse.org/repositories/science/, 请自己搜索如何加
then "> sypper in blas lapack fftw3")

(3) 安装libint数学库
libint数学库是个很生僻的数学库,不知道为什么cp2k采用了它。可能这个数学库是专为第一性原理计算优化的。

请到佛吉尼亚理工Valeer教授的主页去下载它:http://www.files.chem.vt.edu/chem-dept/valeev/software/libint/download.html

or
> wget http://www.files.chem.vt.edu/chem-dept/valeev/software/libint/src/libint-1.1.4.tar.gz

解压后,进入源码文件夹
> ./configure
> make
> make install
他就在本地文件夹中生成一些库文件(.a),把他们复制到/usr/lib64文件夹下
> cp ./lib/*.a  /usr/lib64

如遇"cpp check failure"就安装第一步的那个 build-essential
Hopefully一切顺利,反正我没遇到问题

(4) 安装并行支持open-mpi看我以前的博文
http://hi.baidu.com/xijunw/blog/item/f796e47a1aa047f80ad187de.html

【下载】
先安装cvs
> sudo apt-get install cvs

然后下载cp2k
> touch $HOME/.cvspass  //生成一个保存cvs用户名密码的空文件,隐藏在用户根目录下
> cvs -d:pserver:anonymous@cvs.cp2k.berlios.de:/cvsroot/cp2k login  //匿名登录
> cvs -z3 -d:pserver:anonymous@cvs.cp2k.berlios.de:/cvsroot/cp2k co cp2k // 下载

日后升级(自动更新源代码)
> cd cp2k   //到cp2k目录
> cvs update -dAP  //自动更新


【编译】
修改arch中的编译配置文件;编译


cp2k解压后,主目录cp2k下有arch, exe, makefiles, tools等文件夹。

(5)  修改arch中的编译配置文件
进入arch文件夹,ls可以看到很多平台类型文件,如:
> ls *gfortran*
Cygwin-i686-gfortran.sopt  Linux-x86-64-gfortran.popt
Linux-ia64-gfortran.popt   Linux-x86-64-gfortran.sdbg
Linux-ia64-gfortran.sopt   Linux-x86-64-gfortran.sopt

Linux-x86-64就是我们的操作系统平台(可>uname -a查看平台类型),gfortran是我们的编译器;
后缀 sopt表串行版,popt表并行版, sdbg是啥??忘了。这里我一次介绍sopt,和popt的编译。

好了最关键的步骤开始了:修改sopt文件和popt文件!

********************* Linux-x86-64-gfortran.sopt ******************************
CC       = cc
CPP      =

FC       = gfortran
LD       = gfortran

AR       = ar -r

CPPFLAGS =
DFLAGS   = -D__GFORTRAN -D__FFTSG -D__FFTW3 -D__LIBINT
FCFLAGS  = -O2 -ffast-math -funroll-loops -ftree-vectorize -march=native -ffree-form $(DFLAGS)
LDFLAGS  = $(FCFLAGS)
LIBS     = -L/usr/lib64 -llapack -lblas -latlas -lfftw3 -lderiv -lint -lr12 -lstdc++

OBJECTS_ARCHITECTURE = machine_gfortran.o

****************************** End ******************************************

注意
(a) 其中 LIBS 后面标签的顺序也不能错,否则编译不通过。Mailist上有讨论-lderiv必须在-lint的前面。
(b) DFLAGS后面 -D__LIBINT是添加上的,因为我们安装了libint的优化库;
(c) 如果你使用的ubuntu版本一样,那么库文件夹路径也应该一样 /usr/lib64,否则自己修改;

并行编译文件
*******************************Linux-x86-64-gfortran.popt**************************
CC       = cc
CPP      =
FC       = mpif90
LD       = mpif90
AR       = ar -r
DFLAGS   = -D__GFORTRAN -D__FFTSG -D__PARALLEL -D__BLACS -D__SCALAPACK -D__FFTW3 -D__LIBINT
CPPFLAGS =
FCFLAGS  = $(DFLAGS)  -ffree-form -O2 -ffast-math -march=opteron -cpp -g
LDFLAGS  = $(FCFLAGS)
LIBS     = -L/usr/lib64 -lscalapack-openmpi  -llapack -lblas -latlas -lfftw3 -lderiv -lint -lr12 -lstdc++

OBJECTS_ARCHITECTURE = machine_gfortran.o
******************************End**********************************************

编译
进入makefiles文件夹,键入:
> make ARCH=Linux-x86-64-gfortran VERSION=sopt

然后开始祈祷,如果一切顺利,会提示OK,然后去exe文件夹下看看多了什么,一个Linux-x86-64-gfortran文件夹,下面有个cp2k.sopt可执行文件

同理,并行编译把TYPE改成popt,Make会自动调用相应的编译配置文件:
> make ARCH=Linux-x86-64-gfortran VERSION=popt

【测试】
准备输入文件job.in, 可从test目录复制。

串行作业测试
> cp2k.sopt job.inp > job.out

并行作业测试
> mpirun -np 2 cp2k.popt > job.out

此外,cp2k提供强大的自我测试包,包中实例同时可供学习使用;
测试过程要在自建的文件夹下进行,它会自动编译一遍,然后运行所有的测试;当版本升级后你只需运行一下测试命令,则自动完成所有的编译,测试,和结果比较,以便发现是否有错。

配置这个自动测试过程如下:
进入cp2k目录
> mkdir rt  //建立runtest目录,目录名自己定义,我是rt
> cd rt   //进去
> cp ../tools/do_regtest ./do  //把tools下的do_regtest文件拷过来,为了简单改名为do

下面是编辑do这个文件。因为do_regtest这个文件控制如何编译和测试,所以必须告诉它编译配置平台信息和目录路径信息,请编辑如下的内容
export LC_ALL=C
export FORT_C_NAME=gfortrandir_base=$HOME/cp2k/rt  //测试目录,$Home可替换成你的用户目录
cp2k_version=sopt           //VERSION
dir_triplet=Linux-x86-64-gfortran        //ARCH
cp2k_dir=../
maxtasks=2
emptycheck="NO"
leakcheck="NO"

然后,输入
> ./do
运行测试。看看你的编译是不是能正确运行所有的例子吧。

【补记】在另一台ubuntu 10.04LTS上按照上述程序安装时,安装顺利,运行测试出错:
xijun:~/cp2k/mytest/QS/> mpiexec -np 2 cp2k.popt H2O.inp > H2O.out.popt2
BLACS ERROR 'Users with C main programs must explicitly call MPI_Init'
from {-1,-1}, pnum=0, Contxt=-1, on line -1 of file 'blacs_pinfo_.c'.

--------------------------------------------------------------------------
mpiexec noticed that process rank 1 with PID 11544 on node xijun-desktop exited on signal 11 (Segmentation fault).

Google搜索 “BLACS ERROR 'Users with C main programs must explicitly call MPI_Init' “,见 此处讨论,说编译时要指定libblacsF77init.a,我> ls /usr/lib64/*.a,见有如下相关文件:
/usr/lib64/libblacsCinit-openmpi.a
/usr/lib64/libblacsF77init-openmpi.a
/usr/lib64/libblacs-openmpi.a

遂添加 -lblacs-openmpi 至arch/Linux-x86-64-gfortran.popt文件的LIBS参数中,重新编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值