diff --git a/pkgs/applications/science/chemistry/openmolcas/MKL-MPICH.patch b/pkgs/applications/science/chemistry/openmolcas/MKL-MPICH.patch new file mode 100644 index 00000000000..c1bc211a68e --- /dev/null +++ b/pkgs/applications/science/chemistry/openmolcas/MKL-MPICH.patch @@ -0,0 +1,24 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 276ae4e..5e56176 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1304,9 +1304,9 @@ if (LINALG STREQUAL "MKL") + endif () + else () + if (ADDRMODE EQUAL 64) +- set (libpath "${MKLROOT}/lib/intel64") ++ set (libpath "${MKLROOT}/lib") + elseif (ADDRMODE EQUAL 32) +- set (libpath "${MKLROOT}/lib/ia32") ++ set (libpath "${MKLROOT}/lib") + endif () + endif () + set (MKL_LIBRARY_PATH ${libpath} CACHE PATH "location of MKL libraries." FORCE) +@@ -1380,7 +1380,7 @@ if (LINALG STREQUAL "MKL") + find_library (LIBMKL_BLACS NAMES "mkl_blacs_intelmpi_ilp64" + PATHS ${MKL_LIBRARY_PATH} NO_DEFAULT_PATH) + elseif (MPI_IMPLEMENTATION STREQUAL "mpich") +- find_library (LIBMKL_BLACS NAMES "mkl_blacs_ilp64" ++ find_library (LIBMKL_BLACS NAMES "mkl_blacs_intelmpi_ilp64" + PATHS ${MKL_LIBRARY_PATH} NO_DEFAULT_PATH) + endif () diff --git a/pkgs/applications/science/chemistry/openmolcas/default.nix b/pkgs/applications/science/chemistry/openmolcas/default.nix index 1c320335487..c5f60c395ae 100644 --- a/pkgs/applications/science/chemistry/openmolcas/default.nix +++ b/pkgs/applications/science/chemistry/openmolcas/default.nix @@ -1,30 +1,35 @@ { lib, stdenv, fetchFromGitLab, cmake, gfortran, perl -, openblas, hdf5-cpp, python3, texlive -, armadillo, mpi, globalarrays, openssh -, makeWrapper +, 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 +, enableMpi ? false +, mpi, globalarrays } : -let - version = "21.10"; - # The tag keeps moving, fix a hash instead - gitLabRev = "117305462bac932106e8e3a0347238b768bcb058"; +assert blas-ilp64.isILP64; +assert lib.elem blas-ilp64.passthru.implementation [ "openblas" "mkl" ]; - python = python3.withPackages (ps : with ps; [ six pyparsing ]); +let + python = python3.withPackages (ps : with ps; [ six pyparsing numpy h5py ]); in stdenv.mkDerivation { pname = "openmolcas"; - inherit version; + version = "22.02"; src = fetchFromGitLab { owner = "Molcas"; repo = "OpenMolcas"; - rev = gitLabRev; - sha256 = "sha256-GMi2dsNBog+TmpmP6fhQcp6Z5Bh2LelV//MqLnvRP5c="; + # The tag keeps moving, fix a hash instead + rev = "f8df69cf87b241a15ebc82d72a8f9a031a385dd4"; # 2022-02-10 + sha256 = "0p2xj8kgqdk5kb1jv5k77acbiqkbl2sh971jnz9p00cmbh556r6a"; }; patches = [ # Required to handle openblas multiple outputs ./openblasPath.patch + # Required for MKL builds + ./MKL-MPICH.patch ]; nativeBuildInputs = [ @@ -36,27 +41,35 @@ in stdenv.mkDerivation { ]; buildInputs = [ - openblas + blas-ilp64.passthru.provider hdf5-cpp python armadillo + libxc + ] ++ lib.optionals enableMpi [ mpi globalarrays - openssh ]; + passthru = lib.optionalAttrs enableMpi { inherit mpi; }; + cmakeFlags = [ "-DOPENMP=ON" - "-DGA=ON" - "-DMPI=ON" "-DLINALG=OpenBLAS" "-DTOOLS=ON" "-DHDF5=ON" "-DFDE=ON" - "-DOPENBLASROOT=${openblas.dev}" + "-DEXTERNAL_LIBXC=${libxc}" + ] ++ lib.optionals (blas-ilp64.passthru.implementation == "openblas") [ + "-DOPENBLASROOT=${blas-ilp64.passthru.provider.dev}" "-DLINALG=OpenBLAS" + ] ++ lib.optionals (blas-ilp64.passthru.implementation == "mkl") [ + "-DMKLROOT=${blas-ilp64.passthru.provider}" "-DLINALG=MKL" + ] ++ lib.optionals enableMpi [ + "-DGA=ON" + "-DMPI=ON" ]; - preConfigure = '' + preConfigure = lib.optionalString enableMpi '' export GAROOT=${globalarrays}; ''; @@ -68,6 +81,8 @@ in stdenv.mkDerivation { postInstall = '' mv $out/pymolcas $out/bin + find $out/Tools -type f -exec mv \{} $out/bin \; + rm -r $out/Tools ''; postFixup = '' @@ -84,6 +99,7 @@ in stdenv.mkDerivation { maintainers = [ maintainers.markuskowa ]; license = licenses.lgpl21Only; platforms = [ "x86_64-linux" ]; + mainProgram = "pymolcas"; }; }