openmolcas: enable dmrg and nevpt2 support

This commit is contained in:
Phillip Seeber 2023-08-03 17:34:32 +02:00
parent 2a1f1797be
commit eacf49d19e
2 changed files with 108 additions and 12 deletions

View file

@ -1,19 +1,47 @@
{ lib, stdenv, fetchFromGitLab, cmake, gfortran, perl
, blas-ilp64, hdf5-cpp, python3, texlive
, armadillo, libxc, makeWrapper
# Note that the CASPT2 module is broken with MPI
# See https://gitlab.com/Molcas/OpenMolcas/-/issues/169
{ lib
, stdenv
, fetchFromGitLab
, fetchFromGitHub
, cmake
, gfortran
, perl
, blas-ilp64
, hdf5-cpp
, python3
, texlive
, armadillo
, libxc
, makeWrapper
, gsl
, boost175
, autoPatchelfHook
# Note that the CASPT2 module is broken with MPI
# See https://gitlab.com/Molcas/OpenMolcas/-/issues/169
, enableMpi ? false
, mpi, globalarrays
} :
, mpi
, globalarrays
}:
assert blas-ilp64.isILP64;
assert lib.elem blas-ilp64.passthru.implementation [ "openblas" "mkl" ];
let
python = python3.withPackages (ps : with ps; [ six pyparsing numpy h5py ]);
python = python3.withPackages (ps: with ps; [ six pyparsing numpy h5py ]);
qcmaquisSrc = fetchFromGitHub {
owner = "qcscine";
repo = "qcmaquis";
rev = "release-3.1.1"; # Must match tag in cmake/custom/qcmaquis.cmake
hash = "sha256-diLDWj/Om6EHrVp+Hd24jsN6R9vV2vRl0y9gqyRWhkI=";
};
nevtp2Src = fetchFromGitHub {
owner = "qcscine";
repo = "nevpt2";
rev = "e1484fd"; # Must match tag in cmake/custom/nevpt2.cmake
hash = "sha256-Vl+FhwhJBbD/7U2CwsYE9BClSQYLJ8DKXV9EXxQUmz0=";
};
in stdenv.mkDerivation {
in
stdenv.mkDerivation {
pname = "openmolcas";
version = "23.06";
@ -28,12 +56,22 @@ in stdenv.mkDerivation {
patches = [
# Required to handle openblas multiple outputs
./openblasPath.patch
# Required for a local QCMaquis build
./qcmaquis.patch
];
postPatch = ''
# Using env fails in the sandbox
substituteInPlace Tools/pymolcas/export.py --replace \
"/usr/bin/env','python3" "python3"
# Pointing CMake to local QCMaquis and NEVPT2 archives
substituteInPlace cmake/custom/qcmaquis.cmake \
--subst-var-by "qcmaquis_src_url" "file://${qcmaquisSrc}"
substituteInPlace cmake/custom/nevpt2.cmake \
--subst-var-by "nevpt2_src_url" "file://${nevtp2Src}"
'';
nativeBuildInputs = [
@ -42,6 +80,7 @@ in stdenv.mkDerivation {
cmake
texlive.combined.scheme-minimal
makeWrapper
autoPatchelfHook
];
buildInputs = [
@ -50,6 +89,8 @@ in stdenv.mkDerivation {
python
armadillo
libxc
gsl.dev
boost175
] ++ lib.optionals enableMpi [
mpi
globalarrays
@ -64,10 +105,15 @@ in stdenv.mkDerivation {
"-DHDF5=ON"
"-DFDE=ON"
"-DEXTERNAL_LIBXC=${libxc}"
"-DDMRG=ON"
"-DNEVPT2=ON"
"-DCMAKE_SKIP_BUILD_RPATH=ON"
] ++ lib.optionals (blas-ilp64.passthru.implementation == "openblas") [
"-DOPENBLASROOT=${blas-ilp64.passthru.provider.dev}" "-DLINALG=OpenBLAS"
"-DOPENBLASROOT=${blas-ilp64.passthru.provider.dev}"
"-DLINALG=OpenBLAS"
] ++ lib.optionals (blas-ilp64.passthru.implementation == "mkl") [
"-DMKLROOT=${blas-ilp64.passthru.provider}" "-DLINALG=MKL"
"-DMKLROOT=${blas-ilp64.passthru.provider}"
"-DLINALG=MKL"
] ++ lib.optionals enableMpi [
"-DGA=ON"
"-DMPI=ON"
@ -89,6 +135,10 @@ in stdenv.mkDerivation {
rm -r $out/Tools
'';
# DMRG executables contain references to /build, however, they are properly
# removed by autopatchelf
noAuditTmpdir = true;
postFixup = ''
# Wrong store path in shebang (no Python pkgs), force re-patching
sed -i "1s:/.*:/usr/bin/env python:" $out/bin/pymolcas
@ -101,7 +151,7 @@ in stdenv.mkDerivation {
description = "Advanced quantum chemistry software package";
homepage = "https://gitlab.com/Molcas/OpenMolcas";
maintainers = [ maintainers.markuskowa ];
license = licenses.lgpl21Only;
license = with licenses; [ lgpl21Only bsd3 ];
platforms = [ "x86_64-linux" ];
mainProgram = "pymolcas";
};

View file

@ -0,0 +1,46 @@
diff --git a/cmake/custom/nevpt2.cmake b/cmake/custom/nevpt2.cmake
index 789739ec8..6c86a7b8c 100644
--- a/cmake/custom/nevpt2.cmake
+++ b/cmake/custom/nevpt2.cmake
@@ -67,6 +67,7 @@ list(APPEND NEVPT2CMakeArgs
"-DMOLCAS_BUILD_DIR=${PROJECT_BINARY_DIR}"
"-DCMAKE_Fortran_MODULE_DIRECTORY=${mod_dir}"
"-DDMRG_INCLUDE=${HDF5_QCM_INCLUDE}"
+ "-DCMAKE_SKIP_BUILD_RPATH=ON"
)
if(HDF5_ROOT)
@@ -118,9 +119,7 @@ endif ()
ExternalProject_Add(${EP_PROJECT}
PREFIX ${CUSTOM_NEVPT2_LOCATION}
- GIT_REPOSITORY ${reference_git_repo}
- GIT_TAG ${reference_git_commit}
- UPDATE_DISCONNECTED ${EP_SkipUpdate}
+ URL @nevpt2_src_url@
CMAKE_ARGS "${NEVPT2CMakeArgs}"
INSTALL_DIR "${PROJECT_BINARY_DIR}/qcmaquis"
)
diff --git a/cmake/custom/qcmaquis.cmake b/cmake/custom/qcmaquis.cmake
index 176d02761..e160b7bc8 100644
--- a/cmake/custom/qcmaquis.cmake
+++ b/cmake/custom/qcmaquis.cmake
@@ -78,6 +78,7 @@ list(APPEND QCMaquisCMakeArgs
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_CXX_FLAGS=${QCM_CMake_CXX_FLAGS}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
+ -DCMAKE_SKIP_BUILD_RPATH=ON
)
if(HDF5_ROOT)
list(APPEND QCMaquisCMakeArgs
@@ -278,9 +279,7 @@ set (CMAKE_DISABLE_SOURCE_CHANGES OFF)
ExternalProject_Add(${EP_PROJECT}
PREFIX ${extprojpath}
- GIT_REPOSITORY ${reference_git_repo}
- GIT_TAG ${reference_git_commit}
- UPDATE_DISCONNECTED ${EP_SkipUpdate}
+ URL @qcmaquis_src_url@
SOURCE_SUBDIR dmrg
CMAKE_ARGS ${EP_CMAKE_ARGS}