Ubuntu 下安装AMBER10/AmberTools 1.2
1 准备工作 1.1 编译前系统需要安装fortran/c编译器,csh/patch,以及flex(做语义分析的) sudo apt-get install gfortran g++ flex csh patch 如果你要用intel编译器,可能会麻烦些。新手呢,最好听从amber作者David Case的建议先用gnu的编译器 1.2 修改 .profile或.bashrc文件,定义AMBERHOME变量: export AMBERHOME=/home/<FOO>/src/amber10 # 等号前后不能有空格! <FOO> 是你的用户名 1.3 到src目录下解压: cd ~/src/ tar -xjvf Amber10.tar.bz2 tar -xjvf AmberTools-1.2.tar.bz2 1.4 解压完成后在src上会生成amber10这个目录,也就是上面定义的AMBERHOME,进入这个目录下载bugfix并执行patch cd $AMBERHOME wget http://ambermd.org/bugfixes/10.0/bugfix.all wget http://ambermd.org/bugfixes/10.0/apply_bugfix_all.x chmod +x apply_bugfix_all.x ./apply_bugfix_all.x bugfix.all 上面是Amber10的 wget http://ambermd.org/bugfixes/AmberTools/1.2/bugfix.all -o bugfix.all_at_1.2 patch -p0 -N <bugfix.all_at_1.2 上面是AmberTools 1.2的 2 编译AmberTools 1.2 2.1 编译 执行configure_at以配置Makefile_at ./configure_at gcc 输出大概是(括号中的汉字是我的注释): ---------------------------------------------------------------- Setting AMBERHOME to /home/liuzp/src/amber10 Testing the C compiler: gcc -march=pentium4 -m32 -o testp testp.c OK Obtaining the C++ compiler version: g++ -v The version is ../src/configure 4.4.1 [: 520: -lt: unexpected operator (这个貌似有错误,其实没关系) OK Testing the g77 compiler: g77 -O2 -fno-automatic -finit-local-zero -o testp testp.f ./configure_at: 538: g77: not found ./configure_at: 539: ./testp: not found Unable to compile a Fortran program using g77 -O2 -fno-automatic -finit-local-zero (因为Ubuntu 9.10 中没有为f77建立链接g77,不过没关系,它会用下面的gfortran) Testing the gfortran compiler: gfortran -O1 -fno-automatic -o testp testp.f OK Testing flex: OK Configuring netcdf; (may be time-consuming) NETCDF configure succeeded. The configuration file, config.h, was successfully created. The next step is to type 'make -f Makefile_at' ---------------------------------------------------------------- 照上面说的: make -f Makefile_at |& tee make.at.log # 屏幕输出的同时还输出到.log文件便于检查 就开始编译喽,过程中可能会出现一个错误: ---------------------------------------------------------------- g++ -c -O2 -Wall -W -D_REENTRANT -Ihttp://www.cnblogs.com/freelib -Ihttp://www.cnblogs.com/freelib -o fortran.o fortran.cpp fortran.cpp: In function ‘void mort::write_ivalue(std::ostream&, const std::string&, const boost::any&)’: fortran.cpp:19: error: ‘sprintf’ was not declared in this scope fortran.cpp: In function ‘void mort::write_dvalue(std::ostream&, const std::string&, const boost::any&)’: fortran.cpp:36: error: ‘sprintf’ was not declared in this scope fortran.cpp: In function ‘void mort::write_svalue(std::ostream&, const std::string&, const boost::any&)’: fortran.cpp:52: error: ‘sprintf’ was not declared in this scope fortran.cpp: In member function ‘void mort::format::write(std::ostream&) const’: fortran.cpp:133: warning: comparison between signed and unsigned integer expressions fortran.cpp:138: warning: comparison between signed and unsigned integer expressions fortran.cpp:145: warning: comparison between signed and unsigned integer expressions fortran.cpp:153: warning: comparison between signed and unsigned integer expressions make: *** [fortran.o] 错误 1 ---------------------------------------------------------------- Google后发现这可能是gcc4.4.1检查语句较严所造成,这个帖子里Mark Williamson给出一个解决办法: 修改文件/src/gleap/mortsrc/common/fortran.cpp,在头上加入 #include <cstdio> 再次编译就可以通过了 2.2 测试 测试的目的是看Amber的计算结果是否受硬件/软件环境和编译器等的影响,方法很简单,计算一些例子同amber提供的“标准结果”比较,如果结果差异不大就算通过。至于计算哪些项目,amber已经全安排好了,就在test目录下的Makefile_at里 测试之前要手动修改一个小bug: 即 $AMBERHOME/bin/ 下 mopac.sh 中的一行: <...>/amber10/bin/mopac >& FOR006 将 & 删除即可 再进入test目录, cd $AMBERHOME/test make -f Makefile_at test & tee testat.log 就会运行一系列任务,如测试成功(计算结果与源码包中的一致)屏幕会显示“PASSED”,象这样: ============================================================== Running test to ........ diffing XXXX.save with XXXX PASSED ============================================================== 如果出现错误,会提前终止测试,比如: cd antechamber/tp && ./Run.tp ./Run.tp: Program error make: *** [test.antechamber.hasG77] 错误 1 这种情况要进入相应目录,查看Run.XXX文件,直接在命令行一步步执行,通过输出结果找出出错原因。 如果输出中有“FAILED"字样,也不用着急,多数情况计算结果出入不大,这时AMBER有形如下面的提示: FAILED (OK if gyration radius is about 7 or 8) 即如果你计算的结果在7和8之间都算正常 测试结束后在test目录下可能会多出一个 TEST_FAILURES.diff 文件,AMBER认为这些结果可能不对(possible FAILURE),不过似乎基本上出入很小,因为AMBER仅用dacdiff进行结果比较,无法分辨由于舍入误差引起的不同。 如果差异很明显,则需要了解该测试的具体功能,看是否真正出了问题。 可以用grep命令查看“出错”的情况: grep FAIL testat.log 这时我机器的结果: FAILED (OK if gyration radius is about 7 or 8) FAILED (probably OK if energy is -115 to -125) possible FAILURE: check tp.mol2.dif possible FAILURE: check DGN.mol2.dif 打开生成的TEST_FAILURES.diff文件检查,发现这些计算结果是正常的。 3 编译串行版(serial)Amber10 3.1 编译 和上面类似,在src目录下先执行 ./configure_amber gfortran 其中gfortran可以是其他fortran编译器,可用--help查看。c编译器应该和前面AmberTools用的一样,这里是gcc 再编译串行即单CPU版: make serial |& tee make.serial.amber.log 3.2 测试 cd ../test make test |& tee testamber.log grep FAIL testamber.log possible FAILURE: check gcg.dip.o.dif possible FAILURE: check mdout.jar.dif possible FAILURE: check first.pdb.dif possible FAILURE: check first.pdb.dif 打开生成的TEST_FAILURES.diff文件检查,上述四个结果也没有错误,其中第二个(mdout.jar.dif)结果为: --------------------------------------- possible FAILURE: check mdout.jar.dif test/jar 87c87 < R1 = -85.000 R2 = 15.000 R3 = 15.000 R4 = 115.000 RK2 =5000.000 RK3 = 5000.000 --- > R1 = 0. R2 = 15.000 R3 = 15.000 R4 = 115.000 RK2 =5000.000 RK3 = 5000.000 --------------------------------------- 貌似R1有问题,其实未必,可参考这里: 根据提示继续测试: make test.serial.QMMM |& tee testamber.QMMM.log --------------------------------------- possible FAILURE: check nma_md.out.dif test/qmmm2/pure_QM_MD_shake 160c160 < Etot = -33.476 EKtot = 7.896 EPtot = -41.372 --- > Etot = -33.476 EKtot = 7.896 EPtot = -41.373 164c164 < PM3ESCF= -41.372 --- > PM3ESCF= -41.373 --------------------------------------- 结果也没问题,至此串行版AMBER安装完成。 |