LAMMPS编译

LAMMPS编译



fatcharm(肥超)


前言:
2007年,曾写过《lammps学习指南》,反响不错,颇为欣慰。LAMMPS的发展可以说是日新月异,相比三年前,更是有了很大的变化。结合RCS的发行,我想再写一个连载,题目暂定做《LAMMPS Step by Step》。
只所以想写这样一个连载,仅仅是对于自己使用LAMMPS的一个总结,其中的大部分内容,来自LAMMPS手册、mdbbs上【LAMMPS】版的讨论,以及平时跟网友的交流。使用LAMMPS遇到的任何问题,不能依赖别人,查阅手册是王道。提问之前,请阅读RCS第1期中的《你是合格的菜鸟吗?》一文。
既然是一个连载,故从LAMMPS编译开始讲起。本文中,并不是严格采用简单列举LAMMPS编译步骤的方式,而是希望通过讲解,让读者对LAMMPS的整个编译过程有自己的理解,从而可以在理解的基础进行编译。再次建议,请仔细阅读LAMMPS手册2.2和2.3两节中的相关内容。


一。准备
需要准备:LAMMPS源代码,Linux系统,编译器,合适的Makefile文件,必要的库文件(MPI,FFTW等)。

(1)LAMMPS源代码:
可以从官方网站下载,解压等操作不再阐述,参考以下命令:
gunzip lammps*.tar.gz
tar xvf lammps*.tar

(2)Linux系统:
个人还是偏爱Linux系统下的LAMMPS计算。
关于Windows版本:LAMMPS官方已经提供一个相对比较全的版本(includes MPI&an FFT library, built with all packages except: gpu, meam, opt, reax, xtc, user-atc, user-imd)。新手可以拿这个版本练习。如果要自己编译,那么/src/MAKE/Windows/中有可供参考的信息。除此之外,可以考虑Windows下的Cygwin。如果你打算长期以LAMMPS作为你的模拟工具,强烈推荐相关的Linux版本。

(3)编译器:
目前LAMMPS推出的是C++版本的(LAMMPS 2001和LAMMPS99 分别为Fortran90和Fortran77版的,但LAMMPS 2001仅更新至2005年1月)。故需要C++编译器,推荐Intel的icc(有非商业免费版本)或g++。如何安装,请到网上搜索。
如果需要添加MEAM和REAX等package,那么还需要Fortran编译器,推荐Intel的ifort或gfortran。

(4)Makefile文件:
按照你的平台在/src/MAKE/目录中选择合适你的Makefile文件,如果没有那么考虑Makefile.g++3或Makefile.linux。一般都需要进行必要的修改,下一节详述。

(5)MPI和FFTW的配置:
以MPICH 2.1为例,介绍其安装步骤,可以下载MPICH 1.2。
下载之后解压相关文件,进入其目录,然后依次执行以下命令:
./configure --prefix=指定的安装路径
make
make install

但是,这并不意味这你就可以进行并行计算了,还需要进行相关的配置。关于MPI的详细配置,请搜索网络中的介绍,此处不再详述。

关于FFTW,注意要下载FFTW 2.1.5,而不是其它较新的版本。解

压后,进入目录,依次执行以下命令:
./configure --prefix=指定的安装路径
make
make install

二。Makefile文件
Makefile定义了一系列的规则来指定,/src中哪些文件需要先编译,哪些文件需要后编译,甚至于其它更复杂的功能操作。在2010年1月份发行的版本中,LAMMPS已经对Makefile的结构作了很大的调整,以使其更为合理和清晰。关于Makefile更深层次的理解,请在网上搜索《跟我一起写Makefile(by 陈皓)》。对LAMMPS这样一个庞大的体系来说,文件/src/Makefile指定了编译LAMMPS的所有规则,而用户可能需要对/src/MAKE/Makefile.***(下文可能简称为Makefile文件)进行修改。下面,以/src/MAKE/Makefile.g++3为例,对其进行简要解析。
# g++ = RedHat Linux box, g++, MPICH2, FFTW

SHELL = /bin/sh

# ---------------------------------------------------------------------
# compiler/linker settings
# specify flags and libraries needed for your compiler

CC = g++
CCFLAGS = -g -O
DEPFLAGS = -M
LINK = g++
LINKFLAGS = -g -O
LIB =

ARCHIVE = ar
ARFLAGS = -rc
SIZE = size

CC:C编译器的名称
CCFLAGS:C编译器的选项
DEPFLAGS:使C++编译器生成每个源文件(.cpp文件)的依赖文件(.d文件)。大多数的C/C++编译器都支持一个“-M”的选项,自动找寻源文件中包含的头文件,并生成一个依赖关系。

# ---------------------------------------------------------------------
# LAMMPS-specific settings
# specify settings for LAMMPS features you will use
# LAMMPS ifdef options, see doc/Section_start.html

LMP_INC = -DLAMMPS_GZIP
如果你的系统支持popen命令,那么-DLAMMPS_GZIP将允许编译的LAMMPS使用 read_data和dump读写gzip文件。

# MPI library, can be src/STUBS dummy lib
# INC = path for mpi.h, MPI compiler settings
# PATH = path for MPI library
# LIB = name of MPI library

MPI_INC = -DMPICH_IGNORE_CXX_SEEK
MPI_PATH =
MPI_LIB = -lmpich -lpthread
如果你直接只用mpiCC来编译LAMMPS,那么以上三行可以不做改动。否则,在MPI_INC一行中添加mpi.h的路径,一般为“-I/指定的MPI安装路径/include”;在MPI_PATH一行中,添加mpich.a的路径,一般为“-L/指定的MPI安装路径/lib”

# FFT library, can be -DFFT_NONE if not using PPPM from KSPACE package
# INC = -DFFT_FFTW, -DFFT_INTEL, -DFFT_NONE, etc, FFT compiler settings
# PATH = path for FFT library
# LIB = name of FFT library

FFT_INC = -DFFT_FFTW
FFT_PATH =
FFT_LIB = -lfftw
如果你的模拟中,不需要计算长程库伦力,那么,可以将FFT_INC一行中的-DFFT_FFTW改为-DFFT_NONE。否则在FFT_INC一行中添加fftw.h的路径,一般为“-I/指定的FFTW安装路径/include”;在FFT_PATH一行中,添加fftw.a的路径,一般为“-L/指定的FFTW安装路径/lib”

# additional system libraries needed by LAMMPS package libraries
……
此处几行

省略,留到本文第四部分中讲述。
# ---------------------------------------------------------------------
# build rules and dependencies
# no need to edit this section
……
此处省略n行,既然无需修改,不做详述。

三。单机版本和并行版本

之所以将这两个放在一起,实际上从编译LAMMPS的角度来说,这两者没有太大的区别。简单说,都需要在Makefile内指定MPI的位置。不同的是,所谓的单机版本,是使用/src/STUBS/目录中的伪MPI库来代替真正的MPI。编译单机版LAMMPS的Makefile文件可参考/src/MAKE/Makefile.serial。编译之前,需要进入/src/STUBS/,执行make命令(编译之前可能需要修改该目录下的Makefile文件),生成libmpi.a。而对于并行版本,只要按照前面两部分讲述的MPI安装配置以及相应Makefile的修改之后,即可编译得到并行LAMMPS版本。


四。各个package
关于这部分,手册2.3节有很详细的叙述,下面大部分为其摘要。
(1)添加或者删除某个/些package采用这些命令(具体含义请查阅手册):
make yes-***, make no-***, make yes-standard, make no-standard, make yes-user, make no-user, make yes-all, make no-all"

如果有添加或删除package的动作,则自动修改src/Makefile.package文件,并在编译时候调用。
(2)如要添加POEMS,则编译LAMMPS前需要到/lib/poems/目录中编译该package。
(3)如要添加MEAM或REAX,则编译LAMMPS前需要到/lib/meam/或/lib/reax/目录中编译相应package。注意,这两个package的源文件是用Fortran写的。为避免两种代码之间的调用不出现麻烦,需要修改Makefile中的meam_SYSLIB,reax_SYSLIB,meam_SYSPATH,reax_SYSPATH等几行,请参考Makefile.g++3或Makefile.linux。
(4)如要添加USER-ATC,则编译LAMMPS之前到/lib/atc/目录中编译该package,并修改相应的Makefile文件中的user-atc_SYSLIB和
user-atc_SYSPATH两行。
(5)如果要添加GPU,则需要系统安装NVIDIA Cuda相关工具,并在/lib/gpu/编译,同时需要修改Makefile文件中的gpu_SYSLIB
和gpu_SYSPATH两行。关于在GPU上运行LAMMPS,请阅读手册2.8节。
(6)以上各个package的编译,请到各自目录下选择合适的Makefile文件,或者进行必要的修改。
# these settings are IGNORED if the corresponding LAMMPS package
#
(e.g. gpu, meam) is NOT included in the LAMMPS build
# SYSLIB = names of libraries
# SYSPATH = paths of libraries

gpu_SYSLIB = -lcudart
meam_SYSLIB = -lgfortran
reax_SYSLIB = -lgfortran
user-atc_SYSLIB = -lblas -llapack

gpu_SYSPATH = -L/usr/local/cuda/lib64
meam_SYSPATH =
reax_SYSPATH =
user-atc_SYSPATH =


五。自己添加新代码

目前LAMMPS对于这部分编译也处理得比以前更为简单(以前还需要修改/src/目录下的user_style.h文件,现在相关的style文件都是自动生成的)。如果自己添加了

新的LAMMPS代码文件,以实现你需要的新功能。那么,需要将你写的*.cpp以及*.h文件放置在/src/目录中,然后进行编译LAMMPS。

如何写新代码,这不是本文讨论的范畴,但是要保证添加新代码后编译成功,相应的.h和.cpp应该符合特定的结构,可参考/src/目录中已有的文件以及阅读手册第8章。

六。编译LAMMPS

如果以上这些,都已进行完毕,而且,你在/src/MAKE/目录中选择的Makefile文件的名字为,Makefile.***。那么,在/src/目录下执行“make ***”命令,如果编译成功,会在该目录下生成lmp_***可执行程序。

七。其它常见问题
(1)首次编译过程中的n多“警告”
Makefile:93: ******.d: No such file or directory
原因,在Makefile.g++的第90-93行,分别是:
# Individual dependencies

DEPENDS = $(OBJ:.o=.d)
include $(DEPENDS)
由于是首次编译,尚未生成.d文件,所以include命令无法找到相关的.d文件。编译结束之后,会在Obj_g++生成一系列的.d文件。关于这些文件的作用,注释行已经说明(Individual dependencies),请自行搜索解释。
(2)mdbbs的【LAMMPS】版上不止一位网友问起修改源代码之后是否必须重新编译LAMMPS才能生效。答案是肯定的。
(3)如果编译LAMMPS不成功,查看系统提示的Error信息,一般会告诉你是哪个库文件找不到,诸如此类。那么检查你的Makefile文件中指定的路径是否正确。
(4)可在mdbbs中搜索【LAMMPS】版中以“编译”为主题的帖子,看看其它问题的解决办法。


八。结语
(1)不同的Linux平台,大同小异。如有其它问题,请到mdbbs的【LAMMPS】版讨论。
(2)感谢以下网友:寒城孤云,362720651,nick_yang107,mechanicslee,托雷斯,realasking等,本文的写作从你们在mdbbs【LAMMPS】的帖子中得到了启发。
(3)本人水平毕竟有限,错误之处,请联系fatcharm@https://www.360docs.net/doc/fe18172961.html,


相关主题
相关文档
最新文档