Gromacs支持两种qm/mm编译方式:①联合MIMIC(步骤简单);②联合CP2K(十分复杂)。前者很久以前就加入了gromacs安装手册中,但是始终无法正确编译,我至今都没有看到有此方法的成功案例。估计原因出在MIMIC上,该库的作者迟迟没有做出更新,一年前就关注了该项目的进度,到现在都没有半点变化,失望。。。 无奈只能选择第二种手段,联合CP2k的方法是2022版本新加入的,此方法难点在cp2k的安装上。我也是走了很多弯路才编译成功,为了让更少的人走弯路,所以我将自己安装过程详实地记录下来。
以下用到的文件:公众号回复“qm”获取。
gromacs要求cp2k版本大于8.1,这里我用了8.2版本。安装前确保gcc、g++、gfortran版本分别为7.5、7.5、8.4,如果是其他版本不保证能成功。
tar -jvxf cp2k-8.2.tar.bz2
cd cp2k-8.2/tools/toolchain/
bash ./install_cp2k_toolchain.sh --with-elpa=no --enable-cuda=no --with-spla=no --with-libint=install --with-openmpi=install --with-plumed=install --with-openblas=install --with-scalapack=install --with-gsl=install --with-hdf5=install --with-libvdwxc=install --with-libxc=install --with-libxsmm=install --with-spfft=install
#此步骤确保plumed、openblas、scalapack、fftw都安装无误
- 上述安装过程如果出现如下字样可不必理会
# path/to/cp2k/tools/toolchain/scripts/tool_kit.sh: eval: line 515: syntax error near unexpected token `('
- 执行上述脚本可能跳过scalapack而不安装,可以用下调命令手动完成
bash path/to/cp2k/tools/toolchain/scripts/stage4/install/install_scalapack.sh
- 如果上条还是报错,可以进入下载文件夹下手动编译完成
cd path/to/cp2k/tools/toolchain/build/scalapack-2.1.0/build
make
make install
- 执行完后,用文本编辑器打开
path/to/cp2k/tools/toolchain/scripts/stage4/install/install_scalapack.sh
,注释掉58-69行以及49行的rm命令。
bash path/to/cp2k/tools/toolchain/scripts/stage4/install/install_scalapack.sh
上述依赖软件安装完毕后,在
path/to/cp2k/tools/toolchain/install/arch
文件夹下有这样一些文件:
用文本编辑器打开
local.psmp
,检索fftw-3.3.8、openblas-0.3.10、scalapack-2.1.0字样是否存在,若缺失则按照文件格式将这些依赖软件安装路径信息补全:
此外,
local.psmp
文件LIBS所在行必须保证有-lscalapack -lplumed -lfftw3_mpi -lfftw3 -lfftw3_omp -lopenblas。如果缺失要手动补齐。
完成上述操作后,执行下述命令:
cp path/to/cp2k/tools/toolchain/install/arch/* path/to/cp2k/arch/
source path/to/cp2k/tools/toolchain/install/setup
#注意!!!执行完上条命令后不要再关闭终端了,如果又重开了新终端,则需要再运行一次上条命令
cd path/to/cp2k/
make ARCH=local VERSION="psmp" libcp2k
运行无误后,在
path/to/cp2k/lib/local/psmp
路径下应该有libcp2k.a
文件。
由于咱们在上面安装cp2k依赖软件时已经安装了cp2k,所以不必再装了,所需要做的是将其添加至环境变量:
export PLUMED2_HOME=path/to/cp2k/tools/toolchain/install/plumed-2.6.2
export PATH=$PLUMED2_HOME/bin:$PATH
export LD_LIBRARY_PATH=$PLUMED2_HOME/lib:$LD_LIBRARY_PATH
解压gromacs-2022,并打补丁:
tar -zvxf gromacs-2022.tar.gz
cd gromacs-2022
plumed patch -p
执行上条命令后,选择3号选项。(为什么不选择版本号更接近2022的4号呢?你可以试试,patch会出错,且如果忽略,后续编译也会出错。都是试出来的教训!)
双精度和gpu冲突
sudo cmake .. -DCMAKE_INSTALL_PREFIX=/home/$USER/gmx_qm_gpu \
-DGMX_FFT_LIBRARY=fftw3 -DBUILD_SHARED_LIBS=OFF -DGMXAPI=OFF \
-DGMX_INSTALL_NBLIB_API=OFF -DGMX_CP2K=ON -DCP2K_DIR=path/to/cp2k/lib/local/psmp \
-DCP2K_LINKER_FLAGS=" 需要添加的东西 " \
-DGMX_GPU=CUDA -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda
sudo make
sudo make install
上述汉字部分用
local.psmp
文件中的信息替换,如下图所示:
sudo cmake .. -DCMAKE_INSTALL_PREFIX=/home/$USER/gmx_qm_gpu \
-DGMX_FFT_LIBRARY=fftw3 -DBUILD_SHARED_LIBS=OFF -DGMXAPI=OFF \
-DGMX_INSTALL_NBLIB_API=OFF -DGMX_CP2K=ON -DCP2K_DIR=path/to/cp2k/lib/local/psmp \
-DCP2K_LINKER_FLAGS=" 需要添加的东西 " \
DGMX_DOUBLE=ON
sudo make
sudo make install
qmmm-active = true
qmmm-qmgroup = QMatoms
qmmm-qmmethod = PBE
qmmm-qmcharge = 0
qmmm-qmmultiplicity = 1