
Lammps(Large-scale Atomic/Molecular Massively Parallel SImulator),大规模分子原子并行模拟程序主要用于大规模的分子动力学模拟研究工作。lammps由美国的Sandia国家实验室开发,以GPL为许可证,在分子动力学领域是一个非常出名的软件。
lammps支持气态、液态以及固态下的各类系综,百万级原子分子体系的计算模拟。代码 的并行性非常良好,可扩展性强。
Lammps的版本更新规则分为稳定版和补丁发布。版本代码是与日期挂钩的,比如最新的是Stable release August 2019。
下面小编将介绍如何从源码构建Lammps程序。
第一步:获取源码
Lammps的源码托管在GitHub上,因此我们可以直接去其仓库下载或者使用命令行下载工具,比如curl或者wget等来进行下载。
curl -Lo ./lammps-stable_7Aug2019.tar.gz https://github.com/lammps/lammps/archive/stable_7Aug2019.tar.gz第二步:配置编译
Lammps支持两种构建方式,其一就是使用传统的makefile进行构建,其二是使用cmake进行构建。采用cmake的构建方式更为容易,这里小编推荐使用cmake的方式来进行编译参数的设置。下面是小编的一个设置参考。
cmake ../cmake -DCMAKE_INSTALL_PREFIX=${HOME}/softwares/lammps_install \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DCMAKE_Fortran_COMPILER=gfortran \ -DCMAKE_CXX_FLAGS=-fopenmp -DCMAKE_C_FLAGS=-fopenmp -DCMAKE_Fortran_FLAGS=-fopenmp \ -DBUILD_MPI=yes \ -DBUILD_OMP=yes \ -DLAMMPS_MACHINE="" \ -DBUILD_EXE=yes \ -DWITH_JPEG=yes \ -DWITH_PNG=yes \ -DWITH_FFMPEG=yes \ -DFFT=FFTW3 \ -DFFTW3_INCLUDE_DIRS=${HOME}/softwaers/fftw_install/include \ -DFFTW3_LIBRARIES=${HOME}/softwares/fftw_install/lib \ -DPKG_GPU=yes -DGPU_API=cuda -DGPU_PREC=mixed -DGPU_ARCH=sm_50 -DCUDPP_OPT=yes \ -DPKG_KOKKOS=yes -DKOKKOS_ARCH="HSW;Maxwell50" -DKOKKOS_ENABLE_CUDA=no -DKOKKOS_ENABLE_OPENMP=yes \ -DPKG_USER-OMP=yes \ -DPKG_USER-VTK=yes \ -DDOWNLOAD_VORO=yes \ -DPKG_USER-PLUMED=yes \ -DDOWNLOAD_PLUMED=yes \ -DPLUMED_MODE=static \ -DPKG_MANYBODY=yes \ -DPKG_USER-ATC=yes \ -DPKG_SHOCK=yes \ -DPKG_REPLICA=yes \ -DPKG_BODY=yes \ -DPKG_CLASS2=yes \ -DPKG_DIPOLE=yes \ -DPKG_PERI=yes \ -DPKG_USER-EFF=yes \ -DPKG_USER-MESO=yes \ -DPKG_USER-SPH=yes \ -DPKG_SPIN=yes \ -DPKG_SRD=yes \ -DPKG_USER-AWPMD=yes \ -DPKG_MOLECULE=yes \ -DPKG_ASPHERE=yes \ -DPKG_BODY=yes \ -DPKG_CLASS2=yes \ -DPKG_COLLOID=yes \ -DPKG_CORESHELL=yes \ -DPKG_DIPOLE=yes \ -DPKG_MC=yes \ -DPKG_MESSAGE=yes \ -DPKG_MISC=yes \ -DPKG_MOLECULE=yes \ -DPKG_MPIIO=yes \ -DPKG_MSCG=yes -DDOWNLOAD_MSCG=yes \ -DPKG_POEMS=yes \ -DPKG_PYTHON=yes \ -DPKG_QEQ=yes \ -DPKG_SNAP=yes \ -DPKG_GRANULAR=yes \ -DPKG_KSPACE=yes \ -DPKG_RIGID=yes \ -DPKG_VORONOI=yes \ -DDOWNLOAD_LATTE=yes -DPKG_LATTE=yes \ -DPKG_KIM=yes -DDOWNLOAD_KIM=yesmakemake install第三步:添加环境变量
#*******************LAMMPS*************************export PATH=\$PATH:${HOME}/softwares/lammps_install/binexport LD_RUN_PATH=\$LD_RUN_PATH:${HOME}/softwares/lammps_install/libexport LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:${HOME}/softwares/lammps_install/lib友情提示
GCC-9的编译问题:
从GCC-9开始,旧的被废弃了的openmp标准正式被GCC移除了。这造成如果使用gcc 9编译lammps,会出现openmp的代码的编译错误。所以编译lammps,要么禁用openmp要么使用低版本的gcc来编译,或者使用其它编译器。
为此,小编这里采用了clang和clang++以及gfortran来对lammps进行编译,能够成功编译得到二进制程序。
KIM库的安装问题:
要使lammps支持kim-api需要-DPKG_KIM=yes,此时如果系统上未安装KIM-API,需要同时设置-DDOWNLOAD_KIM=yes来使用lammps的构建工具自动下载编译kim-api。但是小编发现如果是选择让lammps下载并构建kim-api,最后编译能成功,但是运行时lmp会找不到libkim-api.so.2动态库,即使已经将lammps安装路径下的./lib路径添加到LD_LIBRARY_PATH中也不行。在对lammps项目构建结构进行研究后,小编发现kim-api的编译是成功进行了,但是得到的是动态库,为此要将该动态库的路径添加到LD_LIBRARY_PATH中。为了方便,我将该库拷贝到了lammps安装路径下的./lib路径之中,同时该路径要添加到LD_LIBRARY_PATH中。
cp ./kim_build-prefix/lib64/libkim-api.so* ${HOME}/softwares/lammps_install/lib/