跳转至

LAMMPS 安装

约 606 个字 329 行代码 预计阅读时间 6 分钟

介绍

  • 编译条件

    • 兼容 C++11 标准的编译器
    • 并行计算库(MPICH 或 OpenMPI 或其他 MPI 实现)
    • FFT 傅里叶变换库(FFTW)
    • 若平台中若无 MPI 环境,可使用 make mpi-stubs 或安装 stubs package,编译过程中,将提供一个虚拟的 MPI 库,“欺骗” 需要 MPI 环境的包,使其正常编译
    • 若没有安装 FFTW,LAMMPS 将会使用自带的 KISS
  • 编译选项:3.4. Basic build options — LAMMPS documentation

  • 编译步骤:

    • 安装 packages:make 使用 make yes-<package>CMake 使用 -D PKG_<NAME>=on
    • Build LAMMPS
  • 所有可用的 packages 及其描述:6.1. Available Packages — LAMMPS documentation

  • packages 细节:6.2. Package details — LAMMPS documentation

  • 个人常用 packages

manybody                     # 多体势(金属体系常用)
mc                           # 蒙特卡洛

CMake 编译

# 导入 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 处)
../image.cpp(32): catastrophic error: cannot open source file "jpeglib.h"
  #include "jpeglib.h"
                      ^

compilation aborted for ../image.cpp (code 4)
ld: cannot find -ljpeg: No such file or directory