From 50fc2bfb8bbb28356d39f891eec31ea1a31db633 Mon Sep 17 00:00:00 2001 From: Phillip Seeber Date: Mon, 4 Dec 2023 17:06:21 +0100 Subject: [PATCH] quantum-espresso: 6.6 -> 7.2 --- .../chemistry/quantum-espresso/default.nix | 104 +++++++++++++++--- pkgs/top-level/aliases.nix | 1 + pkgs/top-level/all-packages.nix | 6 +- 3 files changed, 95 insertions(+), 16 deletions(-) diff --git a/pkgs/applications/science/chemistry/quantum-espresso/default.nix b/pkgs/applications/science/chemistry/quantum-espresso/default.nix index 9933d0d8c727..4c4482919772 100644 --- a/pkgs/applications/science/chemistry/quantum-espresso/default.nix +++ b/pkgs/applications/science/chemistry/quantum-espresso/default.nix @@ -1,41 +1,119 @@ { lib , stdenv , fetchFromGitLab +, fetchFromGitHub +, fetchurl +, git +, cmake +, gnum4 , gfortran +, pkg-config , fftw , blas , lapack -, useMpi ? false +, scalapack +, wannier90 +, hdf5 +, libmbd +, libxc +, enableMpi ? true , mpi }: +assert ! blas.isILP64; +assert ! lapack.isILP64; + +let + # "rev"s must exactly match the git submodule commits in the QE repo + gitSubmodules = { + devxlib = fetchFromGitLab { + group = "max-centre"; + owner = "components"; + repo = "devicexlib"; + rev = "a6b89ef77b1ceda48e967921f1f5488d2df9226d"; + hash = "sha256-p3fRplVG4YSN6ILNlOwf+aSEhpTJPXqiS1+wnzWVA2U="; + }; + + pw2qmcpack = fetchFromGitHub { + owner = "QMCPACK"; + repo = "pw2qmcpack"; + rev = "f72ab25fa4ea755c1b4b230ae8074b47d5509c70"; + hash = "sha256-K1Z90xexsUvk4SdEb8FGryRal0GAFoLz3j1h/RT2nYw="; + }; + }; + +in stdenv.mkDerivation rec { - version = "6.6"; + version = "7.2"; pname = "quantum-espresso"; src = fetchFromGitLab { owner = "QEF"; repo = "q-e"; rev = "qe-${version}"; - sha256 = "1mkfmw0fq1dabplzdn6v1abhw0ds55gzlvbx3a9brv493whk21yp"; + hash = "sha256-0q0QWX4BVjVHjcbKOBpjbBADuL+2S5LAALyrxmjVs4c="; }; - passthru = { - inherit mpi; - }; + # add git submodules manually and fix pkg-config file + prePatch = '' + chmod -R +rwx external/ - preConfigure = '' - patchShebangs configure + substituteInPlace external/devxlib.cmake \ + --replace "qe_git_submodule_update(external/devxlib)" "" + substituteInPlace external/CMakeLists.txt \ + --replace "qe_git_submodule_update(external/pw2qmcpack)" "" \ + --replace "qe_git_submodule_update(external/d3q)" "" \ + --replace "qe_git_submodule_update(external/qe-gipaw)" "" + + ${builtins.toString (builtins.attrValues + (builtins.mapAttrs + (name: val: '' + cp -r ${val}/* external/${name}/. + chmod -R +rwx external/${name} + '') + gitSubmodules + ) + )} + + substituteInPlace cmake/quantum_espresso.pc.in \ + --replace 'libdir="''${prefix}/@CMAKE_INSTALL_LIBDIR@"' 'libdir="@CMAKE_INSTALL_FULL_LIBDIR@"' ''; - nativeBuildInputs = [ gfortran ]; + passthru = { inherit mpi; }; - buildInputs = [ fftw blas lapack ] - ++ (lib.optionals useMpi [ mpi ]); + nativeBuildInputs = [ + cmake + gfortran + git + pkg-config + ]; - configureFlags = if useMpi then [ "LD=${mpi}/bin/mpif90" ] else [ "LD=${gfortran}/bin/gfortran" ]; + buildInputs = [ + fftw + blas + lapack + wannier90 + libmbd + libxc + hdf5 + ] ++ lib.optional enableMpi scalapack; - makeFlags = [ "all" ]; + propagatedBuildInputs = lib.optional enableMpi mpi; + propagatedUserEnvPkgs = lib.optional enableMpi mpi; + + cmakeFlags = [ + "-DBUILD_SHARED_LIBS=ON" + "-DWANNIER90_ROOT=${wannier90}" + "-DMBD_ROOT=${libmbd}" + "-DQE_ENABLE_OPENMP=ON" + "-DQE_ENABLE_LIBXC=ON" + "-DQE_ENABLE_HDF5=ON" + "-DQE_ENABLE_PLUGINS=pw2qmcpack" + ] ++ lib.optionals enableMpi [ + "-DQE_ENABLE_MPI=ON" + "-DQE_ENABLE_MPI_MODULE=ON" + "-DQE_ENABLE_SCALAPACK=ON" + ]; meta = with lib; { description = "Electronic-structure calculations and materials modeling at the nanoscale"; diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index e655c34c7e82..e3c9d2dc717c 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -768,6 +768,7 @@ mapAliases ({ qt6ct = qt6Packages.qt6ct; # Added 2023-03-07 qtcurve = libsForQt5.qtcurve; # Added 2020-11-07 qtile-unwrapped = python3.pkgs.qtile; # Added 2023-05-12 + quantum-espresso-mpi = quantum-espresso; # Added 2023-11-23 qutebrowser-qt6 = throw "'qutebrowser-qt6' has been replaced by 'qutebrowser', since the the qt5 version has been removed"; # Added 2023-08-19 quvi = throw "'quvi' has been removed, as it was broken and unmaintained"; # Added 2023-11-25 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e52c56b3a738..4823a1990cae 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -38847,9 +38847,9 @@ with pkgs; pymol = callPackage ../applications/science/chemistry/pymol { }; - quantum-espresso = callPackage ../applications/science/chemistry/quantum-espresso { }; - - quantum-espresso-mpi = callPackage ../applications/science/chemistry/quantum-espresso { useMpi = true; }; + quantum-espresso = callPackage ../applications/science/chemistry/quantum-espresso { + hdf5 = hdf5-fortran; + }; siesta = callPackage ../applications/science/chemistry/siesta { };