openmolcas: enable dmrg and nevpt2 support
This commit is contained in:
parent
2a1f1797be
commit
eacf49d19e
2 changed files with 108 additions and 12 deletions
|
@ -1,10 +1,25 @@
|
|||
{ lib, stdenv, fetchFromGitLab, cmake, gfortran, perl
|
||||
, blas-ilp64, hdf5-cpp, python3, texlive
|
||||
, armadillo, libxc, makeWrapper
|
||||
{ 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;
|
||||
|
@ -12,8 +27,21 @@ assert lib.elem blas-ilp64.passthru.implementation [ "openblas" "mkl" ];
|
|||
|
||||
let
|
||||
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";
|
||||
};
|
||||
|
|
|
@ -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}
|
Loading…
Reference in a new issue