diff options
Diffstat (limited to 'pkgs/applications/science/chemistry/openmolcas/default.nix')
-rw-r--r-- | pkgs/applications/science/chemistry/openmolcas/default.nix | 74 |
1 files changed, 62 insertions, 12 deletions
diff --git a/pkgs/applications/science/chemistry/openmolcas/default.nix b/pkgs/applications/science/chemistry/openmolcas/default.nix index c99c5da06f3..695d5502b5e 100644 --- a/pkgs/applications/science/chemistry/openmolcas/default.nix +++ b/pkgs/applications/science/chemistry/openmolcas/default.nix @@ -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"; }; |