1、下载
GAMESS-US源码可以通过官方网站http://www.msg.ameslab.gov/gamess/获取,只要注册就可以,不过可能由于本人网络不好无法成功下载,所以我从以下来源下载了GAMESS的源码,这里有GAMESS-US 2009至2014的多个版本,我选择下载了2014版本。
http://bbs.keinsci.com/forum.php?mod=viewthread&tid=727&highlight=gamess
也可以直接进入该博文指向的百度云盘地址去下载:
http://pan.baidu.com/s/1eQiZsfo
下载的文件名为2014-Dec.gz,将该文件通过SSH上传到需要安装的CentOS 6.8系统上去,
2、解压
虽然该文件的后缀名是gz,不过解压的时候依然可以使用tar –zxvf来实现。
tar -zxvf 2014-Dec.gz 2>&1 | tee gamesstarunzip.log
解压完成之后可以看到这里多出了很多的文件和文件夹,其中有一些是绿色的表示,这些事可执行文件,如果解压之后没有可执行文件出现,可以通过ls –al
来查看文件是否具有可执行权限,如果没有请使用chmod x filename加上即可。
ls
auxdata compall ddi graphics INTRO.DOC libcchem machines misc PROG.DOC REFS.DOC rungms tests tools
comp config gms-files.csh INPUT.DOC IRON.DOC lked Makefile.in object qmnuc runall source TESTS.DOC vb2000
3、配置
在开始编译之前可以通过config文件来自动生成相应的配置文件,只需要我们输入一些关键字即可,如系统的选择这里选择的是linux 64为系统,编译器选择的是intel的ifort;相应的库文件库选择了intel的mkl库,并输入该库的安装路径;这里本机计算不需要使用MPI远程登陆所以选择了sockets;随后就是GPU加速的选项,这里没有GPU加速,不选择,可以根据个人需要选择。这里输入的一次为linux64,,/home/shims/install/gamess,/home/shims/install/gamess,14,ifort,15,mkl,/opt/intel/mkl,skip,sockets,no。
./config 2>&1 |tee config.log
4、编译DDI
DDI是并行接口,无论后面是否需要使用该接口都需要编译该模块,如果选择的是sockets的话会生成一个ddikick.x的文件,MPI的话会生成相应的库文件。
cd ddi
./compddi 2>&1 | tee compddi.log
通过编译DDI在当前目录下产生了ddikick.x的文件,需要将该文件移动到上级目录下去。至于为何是移动而不是复制,就个人测试来看移动和测试产生的效果是一样的。
mv ddikick.x ../
5、编译compall
这一步和上一步没有先后顺序,不过只有完成了这两步操作才能进入下一步的操作。现在才是正真的开始编译GAMESS的主程序,这里 根据个人的机子不同话费的时间不同,一般话费时间在十几二十分钟。
cd ../
./compall 2>&1 | tee compall.log
需要注意的是一定要仔细检查输出中是否存在警告或者错误,有错误就必须重视起来,警告的话视情况而定,如这里提示
ifort: command line remark #10010: option '-vec-report0' is deprecated and will be removed in a future release. See '-help deprecated'
这个提示就是参数-vec-report0是要被淘汰的,当时在当前版本还是可以使用,所以不用修改。
6、连接
上面已经将需要的文件编译好了,这里需要将他们连接在一起形成一个可执行文件,因为使用的是2014版的GAMESS,所以选择了14作为标识,默认情况是00作为标识,可以根据自己的喜好去设置,不过个人还是喜欢和版本号保持一致便于管理。
./lked gamess 14 2>&1 | tee lked.log
通过连接会在当前目录即gamess的主目录中生成gamess.14.x文件,该文件为GAMESS的可执行文件。
7、修正
通过以上方式基本上就完成了编译过程,不过要能在自己的电脑上使用,必须对部分参数做一定的修改。这里主要是要对rungms文件做一定的修改,如下:
set SCR=/scr/$USER
set USERSCR=/u1/$USER/scr
set GMSPATH=/u1/mike/games
改成
set SCR=/home/shims/install/gamess/scr/$USER
set USERSCR=/home/shims/install/gamess/scr/$USER/scr
set GMSPATH=/home/shims/install/games
这个是自己安装GAMESS的路径和临时文件存放的位置,GMSPATH一般就是你解压之后的那个文件夹路径,而SCR和USERSCR主要是存放临时文件的,可以设置成一样,也可以设置成不一样,这个主要是根据自己的需要设定,至于文件路径可以设置在任何具有读写权限的文件夹下,推荐是自己家目录下面的tmp中,如/home/shims/tmp这个文件夹。这里需要注意的是,每次计算开始之前最好能将该文件夹清空一下,以保证计算能继续进行。特别是针对那些第一次计算出错,调整参数之后重新提交的时候,这个时候临时文件夹里面已经存在和作业名称相同的临时文件,计算就无法继续进行。
if (null$NCPUS == null) set NCPUS=1
改成
if (null$NCPUS == null) set NCPUS=4
这个主要是正对默认情况下计算的时候使用的核心数,这个值可以不更改。也可以根据自己的需要更改,这里只作为单机计算,最大可以设到4,所以将缺失核心数的时候调用的核心数设置成4。该值一般是在计算的时候就直接指定了,这里主要是针对没有设置的情况。
#-- set HOSTLIST=()
#-- @ n=1
#-- while ($n <= $NCPUS)
#-- set HOSTLIST=($HOSTLIST localhost)
#-- @ n
#-- end
#-- set NNODES=$NCPUS
改成
set HOSTLIST=()
@ n=1
while ($n <= $NCPUS)
set HOSTLIST=($HOSTLIST localhost)
@ n
end
set NNODES=$NCPUS
由于这里使用本机计算,不需要远程连接其它节点计算,所以将这里的模块给启用起来。
8、测试
ldd gamess.14.x
linux-vdso.so.1 => (0x00007ffeeb5a8000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003209600000)
libm.so.6 => /lib64/libm.so.6 (0x0000003209a00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003209200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003208a00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000320fe00000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003208e00000)
可以看到gamess.14.x需要的库文件是完成的。
在测试之前需要对runall文件做一个小的修改,如下:
if (`hostname` == si.msg.chem.iastate.edu) then
改成
if (`hostname` == 180) then
这个主要是因为这里需要的是本地计算机上计算,而其中的180是通过hostname命令查询到的主机名。
./runall 14 2>&1 |tee runall.log
ISU batch queue name? [shims] Testing gamess.14.x from /home/shims/install/gamess in queue shims
这里使用14是因为我设置的版本标识为14,如果你设置的为其它请设置成你自己的版本标识。这里测试的时候需要注意的是,如果通过4核心来测试会存在部分不通过,如果通过1核心测试就能完全通过。默认情况是1核心来测试的,如果要更改请做如下更改:
./rungms exam$NUM $VERNO 1 >& exam$NUM.log
改成
./rungms exam$NUM $VERNO 4 >& exam$NUM.log
其中的4是你自己需要设置的计算使用的核心数。等待测试案例完成,完成之后会在当前目录下出现很多的exam??.log,其中??是测试的序列号。
ls exam??.log
exam01.log exam05.log exam09.log exam13.log exam17.log exam21.log exam25.log exam29.log exam33.log exam37.log exam41.log exam45.log
exam02.log exam06.log exam10.log exam14.log exam18.log exam22.log exam26.log exam30.log exam34.log exam38.log exam42.log exam46.log
exam03.log exam07.log exam11.log exam15.log exam19.log exam23.log exam27.log exam31.log exam35.log exam39.log exam43.log exam47.log
exam04.log exam08.log exam12.log exam16.log exam20.log exam24.log exam28.log exam32.log exam36.log exam40.log exam44.log
总过有47个测试用例,基本上覆盖了所有的计算可能。现在需要做的就是查看测试结果与给的结果是否一致,可以手动一个一个的查看,也可以使用其提供的检查工具,使用如下:
./tests/standard/checktst 2>&1 |tee checktst14.log
可以看到所有的测试都成功了。
9、完成
为了方便后续的使用,可以将需要用到的可执行文件路径加入到环境变量中去
vi ~/.bashrc
#GAMESS
export PATH=/home/shims/install/gamess:$PATH
source ~/.bashrc
查看可执行文件是否成功加入环境变量
which rungms
~/install/gamess/rungms
which gamess.14.x
~/install/gamess/gamess.14.x
到这里GAMESS 2014在CentOS 6.8上面的Intel的编译就完成了。