diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/science/chemistry/openmolcas/default.nix')
-rw-r--r-- | nixpkgs/pkgs/applications/science/chemistry/openmolcas/default.nix | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/science/chemistry/openmolcas/default.nix b/nixpkgs/pkgs/applications/science/chemistry/openmolcas/default.nix new file mode 100644 index 000000000000..33c77c063bf9 --- /dev/null +++ b/nixpkgs/pkgs/applications/science/chemistry/openmolcas/default.nix @@ -0,0 +1,159 @@ +{ lib +, stdenv +, fetchFromGitLab +, fetchFromGitHub +, cmake +, gfortran +, perl +, blas-ilp64 +, hdf5-cpp +, python3 +, texliveMinimal +, 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 +}: + +assert blas-ilp64.isILP64; +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 { + pname = "openmolcas"; + version = "23.10"; + + src = fetchFromGitLab { + owner = "Molcas"; + repo = "OpenMolcas"; + # The tag keeps moving, fix a hash instead + rev = "c74317e68572d1da82fdce4210b005c2c1b1de53"; # 2023-09-25 + hash = "sha256-wBrASZ6YFsWsu/TreEZ6Q+VxNQwCwMpyPC8AOqmNxos="; + }; + + 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 = [ + perl + gfortran + cmake + texliveMinimal + makeWrapper + autoPatchelfHook + ]; + + buildInputs = [ + blas-ilp64.passthru.provider + hdf5-cpp + python + armadillo + libxc + gsl.dev + boost175 + ] ++ lib.optionals enableMpi [ + mpi + globalarrays + ]; + + passthru = lib.optionalAttrs enableMpi { inherit mpi; }; + + cmakeFlags = [ + "-DOPENMP=ON" + "-DLINALG=OpenBLAS" + "-DTOOLS=ON" + "-DHDF5=ON" + "-DFDE=ON" + "-DEXTERNAL_LIBXC=${lib.getDev 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" + ] ++ lib.optionals (blas-ilp64.passthru.implementation == "mkl") [ + "-DMKLROOT=${blas-ilp64.passthru.provider}" + "-DLINALG=MKL" + ] ++ lib.optionals enableMpi [ + "-DGA=ON" + "-DMPI=ON" + ]; + + preConfigure = lib.optionalString enableMpi '' + export GAROOT=${globalarrays}; + ''; + + postConfigure = '' + # The Makefile will install pymolcas during the build grrr. + mkdir -p $out/bin + export PATH=$PATH:$out/bin + ''; + + postInstall = '' + mv $out/pymolcas $out/bin + find $out/Tools -type f -exec mv \{} $out/bin \; + 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 + patchShebangs $out/bin + + wrapProgram $out/bin/pymolcas --set MOLCAS $out + ''; + + meta = with lib; { + description = "Advanced quantum chemistry software package"; + homepage = "https://gitlab.com/Molcas/OpenMolcas"; + maintainers = [ maintainers.markuskowa ]; + license = with licenses; [ lgpl21Only bsd3 ]; + platforms = [ "x86_64-linux" ]; + mainProgram = "pymolcas"; + }; +} + |