about summary refs log tree commit diff
path: root/pkgs/applications/science/chemistry/openmolcas/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/science/chemistry/openmolcas/default.nix')
-rw-r--r--pkgs/applications/science/chemistry/openmolcas/default.nix50
1 files changed, 33 insertions, 17 deletions
diff --git a/pkgs/applications/science/chemistry/openmolcas/default.nix b/pkgs/applications/science/chemistry/openmolcas/default.nix
index 1c3203354873d..c5f60c395ae27 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";
   };
 }