经验怪谈

技术文章

OpenMolcas 与 Global Arrays

先编 GA,再 CMake 编 OpenMolcas。必须指定 Intel MPI 的 Fortran/C/C++ 包装器,否则会落到 gfortran。

2026-09-02 · 科研软件 · 编译与依赖

OpenMolcas 是开源多组态程序,用于 CASSCF、CASPT2 等。Molcas 是对应的商业版,更稳,并有 EMBQ / NEMO 一类功能。并行依赖 Global Arrays(GA)。整个编译分三步:

  1. 安装 Intel Parallel Studio(Intel MPI + MKL)
  2. 编译 GA
  3. 编译 OpenMolcas

现场笔记的 prefix 写在个人家目录下。这里改成 /opt/software/...,目录结构和命令顺序不变。

1. 安装 Intel 全家桶

先确认 Intel MPI 与 MKL 可用:

which mpiicc mpiifort mpiicpc
echo "$MKLROOT"

2. 编译 GA

从 GitHub 获取 Global Arrays 源码后,在独立目录建 build(名字自己取),再 configure。BLAS / ScaLAPACK 走 MKL。原文 prefix 是 .../ga-5.9/build,这里保留同样的目录结构:

./configure MPICXX=mpiicpc MPIF77=mpiifort MPICC=mpiicc \
  --prefix=/opt/software/ga-5.9/build \
  --enable-i8 --with-sockets \
  --with-blas8="-L$MKLROOT/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm" \
  --with-scalapack8="-L$MKLROOT/lib/intel64 -lmkl_scalapack_ilp64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_intelmpi_ilp64 -liomp5 -lpthread -lm"
make -j$(nproc)
make install
export GAROOT=/opt/software/ga-5.9/build

库名按你的 MKL / 线程模型调整。跑完后这个 build 目录就是 GA 库。

3. 编译 OpenMolcas

wget https://github.com/Molcas/OpenMolcas/archive/refs/tags/v24.10.tar.gz
tar -zxvf v24.10.tar.gz
cd OpenMolcas-24.10 && mkdir -p build && cd build
sudo yum install python3-pip
python3 -m pip install --user pyparsing numpy
CC=mpiicc FC=mpiifort CXX=mpiicpc cmake .. \
  -DMPI=ON \
  -DGA=ON \
  -DLINALG=MKL \
  -DMPI_Fortran_COMPILER=mpiifort \
  -DMPI_C_COMPILER=mpiicc \
  -DMPI_CXX_COMPILER=mpiicpc \
  -DCMAKE_INSTALL_PREFIX=/opt/software/OpenMolcas
make -j$(nproc)
make install

必须加上那三个 MPI_*_COMPILER。Intel 套件自带 gfortran,不指定时 CMake 常会选到 gfortran,和 Intel MPI 混用。

CMAKE_INSTALL_PREFIX 尽量和源码在同一父目录,方便 PyMolcas 绑路径。

环境

原文 PATH 里既有源码 build 也有安装前缀 bin,两条都留着:

export MOLCAS=/opt/software/OpenMolcas
export PATH=/opt/software/OpenMolcas-24.10/build:$PATH
export PATH=$MOLCAS/bin:$PATH
export LD_LIBRARY_PATH=$MOLCAS/lib:$LD_LIBRARY_PATH
export PYTHONPATH=$MOLCAS/lib/python:$PYTHONPATH

测试

pymolcas input_file.input

不报找不到库,就说明路径绑定成功。