LAMMPS 安装¶
约 606 个字 329 行代码 预计阅读时间 6 分钟
介绍¶
-
编译条件
- 兼容 C++11 标准的编译器
- 并行计算库(MPICH 或 OpenMPI 或其他 MPI 实现)
- FFT 傅里叶变换库(FFTW)
- 若平台中若无 MPI 环境,可使用
make mpi-stubs
或安装stubs
package,编译过程中,将提供一个虚拟的 MPI 库,“欺骗” 需要 MPI 环境的包,使其正常编译 - 若没有安装 FFTW,LAMMPS 将会使用自带的 KISS
-
编译步骤:
- 安装 packages:
make
使用make yes-<package>
;CMake
使用-D PKG_<NAME>=on
- Build LAMMPS
- 安装 packages:
-
所有可用的 packages 及其描述:6.1. Available Packages — LAMMPS documentation
-
packages 细节:6.2. Package details — LAMMPS documentation
-
个人常用 packages
- 参考资料:
- 安装LAMMPS - lammps-tutorial
- Lammps installation - Jia-Xin Zhu
- Linux系统源码编译安装LAMMPS - 我是谁
- 用 Intel® 加速 LAMMPS - Jinzhe Zeng's Blog
- Linux 软件安装⑥|LAMMPS - Jinzhe Zeng's Blog
- LAMMPS 所有版本:LAMMPS Source Download Repository
- GitHub - njzjz/lammps-wheel: LAMMPS unofficial Python wheels on PyPi, `pip install lammps`
- OpenMPI 编译:4.1. Quick start: Installing Open MPI — Open MPI 5.0.x documentation
- Build GPU package:3.7. Packages with extra build options — LAMMPS documentation
CMake 编译¶
-
适用于较新版本的 LAMMPS
-
思源一号用 oneapi.cmake 编译选项,其中的 MPI 是 MPI STUBS,而非 intel 的 MPI(2024.03.16)
-
编译步骤精简
# 导入 Intel oneAPI 套件;Master 可不用
module purge
module load intel-oneapi-compilers/2021.4.0
module load intel-oneapi-mkl/2021.4.0
module load intel-oneapi-mpi/2021.4.0
module load intel-oneapi-tbb/2021.4.0
# Pi 上建议再 load 以下模块
module load gcc/11.2.0
module load cmake/3.26.3-gcc-11.2.0
# 编译配置;oneapi 可改成 intel
mkdir build && cd build
# 编译配置中没有 FFT 信息
cmake -D PKG_MANYBODY=yes -D FFT=MKL -C ../cmake/presets/oneapi.cmake ../cmake
# oneapi 最终编译可能会报错,改用 intel 进行编译配置;FFT 库默认会是 KISS(若无单独编译 FFTW 并设置相关环境变量)
cmake -D PKG_MANYBODY=yes -D FFT=MKL -C ../cmake/presets/intel.cmake ../cmake
# 或者
cmake -C ../cmake/presets/basic.cmake -D FFT=MKL -C ../cmake/presets/intel.cmake ../cmake
# 编译
make
# 编译配置命令: cmake -D PKG_MANYBODY=yes -C ../cmake/presets/oneapi.cmake ../cmake
# 报错内容
clang++: error: unknown argument: '-qopenmp;-qopenmp-simd'
make[2]: *** [CMakeFiles/lammps.dir/build.make:76: CMakeFiles/lammps.dir/home/yangsl/opt/lammps-29Aug2024/src/angle.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:171: CMakeFiles/lammps.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
- cmake 相关命令及内容
ll cmake/presets # 列出预设 cmake 文件(自行选择安装 package)
# 预设的需安装的 packages
basic.cmake # package 数目: 4
most.cmake # package 数目: 60+
all_on.cmake # package 数目: 90+
# 预设的编译 OPTIONS
oneapi.cmake
intel.cmake
gcc.cmake
clang.cmake
# 配置编译选项 示例
mkdir build-basic && cd build-basic
cmake -C ../cmake/presets/basic.cmake ../cmake
mkdir build-most && cd build-most
cmake -C ../cmake/presets/most.cmake ../cmake
# 叠加配置编译 OPTIONS
cmake -C ../cmake/presets/basic.cmake -C ../cmake/presets/kokkos-cuda.cmake ../cmake
# 手动安装 packages
cmake -D PKG_KSPACE=yes ../cmake
# cmake 参数;D 可以与后面的编译选项空一格空格
-D BUILD_MPI # 构建 MPI 版本
-D LAMMPS_MACHINE
-D CMAKE_C_COMPILER # 指定 C 编译器
-D CMAKE_CXX_COMPILER # 指定 CXX 编译器
-D CMAKE_Fortran_COMPILER # 指定 Fortran 编译器
-D CMAKE_INSTALL_PREFIX # 安装路径
-D CMAKE_BUILD_TYPE # 构建类型;Debug / Release
-D BUILD_SHARED_LIBS # 指定是否安装成共享库;若安装 LAMMPS 的 Python 模块,需指定
-D Python_EXECUTABLE # 指定 Python 解释器路径
-D PKG_XXX=yes # 安装 XXX package
-D PKG_GPU=on # 导入/安装 GPU package
-D GPU_API # opencl 或 cuda
-D FFT # 指定 FFTW 库,默认是 FFTW3;可选值 FFTW3、MKL、NVPL、KISS;找不到时会使用 KISS
-D WITH_JPEG=off # 不使用 JPEG;会自动检查
-D LAMMPS_GZIP= # 使用
make # 编译
make install # 安装;默认安装到 ~/.local
make install-python # 安装 LAMMPS 的 Python 模块;作用是生成 whl 文件
cmake --build . --target clean # 删除编译的目标、库和可执行文件
make clean # 同上
lmp -h # 显示已编译的 LAMMPS 版本的所有信息;可查看已安装的 packages
# 调用 GPU 加速计算,需加入 -sf -pk 两个 flag
mpirun -np 8 lmp_gpu -sf gpu -pk gpu 1 -in in.file
-sf # 在所有支持 GPU 加速的脚本命令前加上 gpu 前缀
-pk gpu N # GPU 数量
- 配置好后,查看输出到屏幕的
-- <<< Build configuration >>>
编译配置进行检验,示例:
-- <<< Build configuration >>>
LAMMPS Version: 20240829
Operating System: Linux Ubuntu 22.04
CMake Version: 3.22.1
Build type: RelWithDebInfo
Install path: /XXX/.local
Generator: Unix Makefiles using /usr/bin/gmake
-- Enabled packages: MANYBODY
-- <<< Compilers and Flags: >>>
-- C++ Compiler: /opt/software/intel/oneapi/compiler/2022.1.0/linux/bin/icpx
Type: IntelLLVM
Version: 2022.1.0
C++ Standard: 11
C++ Flags: -Wall -Wextra -g -O2 -DNDEBUG
Defines: LAMMPS_SMALLBIG;LAMMPS_MEMALIGN=64;LAMMPS_OMP_COMPAT=4;LAMMPS_GZIP
Options: -Wno-tautological-constant-compare;-Wno-unused-command-line-argument
-- <<< Linker flags: >>>
-- Executable name: lmp
-- Static library flags:
-- <<< MPI flags >>>
-- MPI_defines: MPICH_SKIP_MPICXX;OMPI_SKIP_MPICXX;_MPICC_H
-- MPI includes: /opt/software/intel/oneapi/mpi/2021.6.0/include
-- MPI libraries: /opt/software/intel/oneapi/mpi/2021.6.0/lib/libmpicxx.so;/opt/software/intel/oneapi/mpi/2021.6.0/lib/libmpifort.so;/opt/software/intel/oneapi/mpi/2021.6.0/lib/release/libmpi.so;/lib/x86_64-linux-gnu/libdl.a;/lib/x86_64-linux-gnu/librt.a;/lib/x86_64-linux-gnu/libpthread.a;
-- Configuring done
-- Generating done
make 编译¶
- 编译步骤精简
# 导入 Intel oneAPI 套件;Master 可不用
module purge
module load intel-oneapi-compilers/2021.4.0
module load intel-oneapi-mkl/2021.4.0
module load intel-oneapi-mpi/2021.4.0
module load intel-oneapi-tbb/2021.4.0
# Pi 上建议再 load 以下模块
module load gcc/11.2.0
module load cmake/3.26.3-gcc-11.2.0
make yes-manybody # 或 make yes-basic
make oneapi # FFT 库为 MKL
- make 相关命令及内容
cd src # 进入 src 目录
# 查看编译选项
make # 查看编译选项
# 清除;不会删除编译好的可执行程序
make clean-all # 删除 object 文件
make clean-machine # 删除 machine 的 object 文件
# package 相关;yes 安装、no 卸载;会更新 src 中的代码
make yes-<package> # 添加要编译的 packages
make package # 列出可用 packages
make yes-basic # 安装常用 packages
make no-basic
make yes-all # 安装所有 packages
make no-all
make yes-most # 安装大部分 packages
make no-most
make yes-lib # 需要额外库的 packages
make no-lib #
make ps # 查看 packages 状态
make pi # 列出已安装的 packages
make package-update # 更新 package
# packages 数目
yes-basic # 4 个 packages;kspace、manybody、molecule、rigid
yes-most # 56 个 packages
yes-all # 93 个 packages;使用 make no-lib 变成 65 个 packages
# Build LAMMPS
# 根据 OPTIONS 编译;优先考虑使用
serial # GNU g++ compiler, no MPI
mpi # MPI with its default compiler
intel_cpu_intelmpi # INTEL package, Intel MPI, MKL FFT
oneapi # Intel oneAPI
# 根据 MACHINE 编译
mac # Apple PowerBook G4 laptop, c++, no MPI
mac_mpi # Apple laptop, MacPorts Open MPI 1.4.3, gcc 4.8, jpeg
ubuntu # Ubuntu Linux box, g++, openmpi, FFTW3
ubuntu_simple # Ubuntu Linux box, g++, openmpi, KISS FFT
# 查看 预设 make 文件
ll MAKE # 列出预设 make 文件
Makefile.example # 示例文件
Makefile.serial # make serial 使用的该文件
Makefile.mpi # make mpi 使用的该文件
检查¶
-
编译好后,输入
lmp -h
,检查以下内容- OS(同一平台,不会变)
- Compiler(这个会有差异,如 Intel Classic C++、Intel LLVM C++、GNU C++)
- C++ standard(C++ 11,不会变)
- MPI(这个会有差异,如 Intel (R) MPI Library、LAMMPS MPI STUBS)
- Accelerator configuration(内容一般为空?)
- FFT information(这个会有差异,KISS、MKL)
- Installed packages
- 各种 style options(根据安装的 packages 特性或额外命令,其 options 数目会有不同)
-
若没有安装任何 packages,最后编译得到的 lmp 可执行程序,查看可用 style options(如下所示),会相对较少
List of individual style options included in this LAMMPS executable
* Atom styles:
atomic body charge ellipsoid hybrid
line sphere tri
* Integrate styles:
respa verlet
* Minimize styles:
cg fire/old fire hftn quickmin
sd
* Pair styles:
born buck buck/coul/cut coul/cut coul/debye
coul/dsf coul/wolf meam/c reax reax/c
mesont/tpm hybrid hybrid/omp hybrid/molecular
hybrid/molecular/omp hybrid/overlay hybrid/overlay/omp
hybrid/scaled hybrid/scaled/omp lj/cut lj/cut/coul/cut
lj/expand morse soft table yukawa
zbl zero
* Bond styles:
hybrid zero
* Angle styles:
hybrid zero
* Dihedral styles:
hybrid zero
* Improper styles:
hybrid zero
* KSpace styles:
* Fix styles
adapt addforce ave/atom ave/chunk ave/correlate
ave/grid ave/histo ave/histo/weight ave/time
aveforce balance box/relax deform deposit
ave/spatial ave/spatial/sphere lb/pc
lb/rigid/pc/sphere reax/c/bonds reax/c/species dt/reset
efield enforce2d evaporate external gravity
halt heat indent langevin lineforce
momentum move nph nph/sphere npt
npt/sphere nve nve/limit nve/noforce nve/sphere
nvt nvt/sllod nvt/sphere pair planeforce
press/berendsen press/langevin print property/atom recenter
restrain setforce spring spring/chunk spring/self
store/force store/state temp/berendsen temp/rescale
thermal/conductivity vector viscous wall/harmonic
wall/lj1043 wall/lj126 wall/lj93 wall/morse wall/reflect
wall/region wall/table
* Compute styles:
aggregate/atom angle angle/local angmom/chunk bond
bond/local centro/atom centroid/stress/atom chunk/atom
chunk/spread/atom cluster/atom cna/atom com
com/chunk coord/atom count/type mesont dihedral
dihedral/local dipole dipole/chunk displace/atom erotate/sphere
erotate/sphere/atom fragment/atom global/atom group/group
gyration gyration/chunk heat/flux improper improper/local
inertia/chunk ke ke/atom msd msd/chunk
omega/chunk orientorder/atom pair pair/local
pe pe/atom pressure property/atom property/chunk
property/grid property/local rdf reduce reduce/chunk
reduce/region slice stress/atom temp temp/chunk
temp/com temp/deform temp/partial temp/profile temp/ramp
temp/region temp/sphere torque/chunk vacf vcm/chunk
* Region styles:
block cone cylinder ellipsoid intersect
plane prism sphere union
* Dump styles:
atom cfg custom atom/mpiio cfg/mpiio
custom/mpiio xyz/mpiio grid grid/vtk image
local movie xyz
* Command styles
angle_write balance change_box create_atoms create_bonds
create_box delete_atoms delete_bonds box kim_init
kim_interactions kim_param kim_property kim_query
reset_ids reset_atom_ids reset_mol_ids message server
dihedral_write displace_atoms info minimize read_data
read_dump read_restart replicate rerun run
set velocity write_coeff write_data write_dump
write_restart
MC2 LAMMPS 版本编译¶
-
LAMMPS 版本:22Aug2018
-
gibbs_multireplica.ccp 和 gibbs_multireplica.h 需要用到 LAPACK,使用
make intel_cpu
命令,由于 master、超算无 libjpeg 库,因此需修改/注释 Makefile.intel_cpu(文件路径:MAKE/OPTION
) 中的 jpeg 相关选项(共 4 处)
wget https://download.lammps.org/tars/lammps-22Aug2018.tar.gz
# 修改/注释 jpeg 相关选项
LMP_INC = -DLAMMPS_GZIP
# LMP_INC = -DLAMMPS_GZIP -DLAMMPS_JPEG
# JPG_INC =
# JPG_PATH =
# JPG_LIB = -ljpeg
# 检查是否已安装 libjpeg
dpkg -l | grep -i 'libjpeg' # Ubuntu
rpm -qa | grep -i 'libjpeg' # Centos
yum list installed | grep -i 'libjpeg' # Centos
# 安装 libjpeg
sudo apt install libjpeg-dev
# 导入 oneAPI 套件
module purge
module load intel-oneapi-compilers/2021.4.0
module load intel-oneapi-mpi/2021.4.0
module load intel-oneapi-mkl/2021.4.0
# 未导入该模块会报错
module load intel-oneapi-tbb/2021.4.0
cd src/
# 第一次编译
make clean-all
make yes-misc
make yes-user-misc
make yes-user-meamc
make yes-mc
make yes-replica
make yes-manybody
make package-update
make intel_cpu
# 复制 gibbs_multireplica.ccp 及头文件到 USER-MISC 目录
# 第二次编译
make package-update
make intel_cpu
相关报错
make mpi
编译报错:对dgelsd_
(LAPACK 里的东西) 未定义的引用;改用make intel_cpu
/usr/bin/ld: gibbs_multireplica.o: in function `LAMMPS_NS::GibbsMultiReplica::inverse(double*, double*, double*, double)':
/home/yangsl/src/lammps-22Aug18-MC2/src/Obj_mpi/../gibbs_multireplica.cpp:2871: undefined reference to `dgelsd_'
/usr/bin/ld: /home/yangsl/src/lammps-22Aug18-MC2/src/Obj_mpi/../gibbs_multireplica.cpp:2876: undefined reference to `dgelsd_'
collect2: error: ld returned 1 exit status
- 没有 libjpeg 库:修改/注释 Makefile.intel_cpu 中的 JPEG 相关选项(共 4 处)