From f9ad9aab790b8e21abef1a6d480714001f9346b8 Mon Sep 17 00:00:00 2001 From: Phillip Seeber Date: Tue, 6 Sep 2022 17:48:31 +0200 Subject: [PATCH 1/3] fftwMpi: add attribute for MPI-enabled fftw --- pkgs/top-level/all-packages.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 915e23056427..82ef2f44f512 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -18036,6 +18036,7 @@ with pkgs; fftwSinglePrec = fftw.override { precision = "single"; }; fftwFloat = fftwSinglePrec; # the configure option is just an alias fftwLongDouble = fftw.override { precision = "long-double"; }; + fftwMpi = fftw.override { enableMpi = true; }; filter-audio = callPackage ../development/libraries/filter-audio {}; From 3826784ae914eab98fc6b3ade6b50018b81db29d Mon Sep 17 00:00:00 2001 From: Phillip Seeber Date: Wed, 7 Sep 2022 12:27:09 +0200 Subject: [PATCH 2/3] libvdwxc: init at 24.02.2020 libvdwxc: passthru mpi and do checks libvdwxc: formatting libvdwxc: fix evaluation --- .../science/chemistry/libvdwxc/default.nix | 52 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 54 insertions(+) create mode 100644 pkgs/development/libraries/science/chemistry/libvdwxc/default.nix diff --git a/pkgs/development/libraries/science/chemistry/libvdwxc/default.nix b/pkgs/development/libraries/science/chemistry/libvdwxc/default.nix new file mode 100644 index 000000000000..f90cad4a099f --- /dev/null +++ b/pkgs/development/libraries/science/chemistry/libvdwxc/default.nix @@ -0,0 +1,52 @@ +{ stdenv +, lib +, fetchFromGitLab +, gfortran +, autoreconfHook +, fftwMpi +, mpi +}: + +stdenv.mkDerivation rec { + pname = "libvdwxc"; + # Stable version has non-working MPI detection. + version = "unstable-24.02.2020"; + + src = fetchFromGitLab { + owner = "libvdwxc"; + repo = pname; + rev = "92f4910c6ac88e111db2fb3a518089d0510c53b0"; + sha256 = "1c7pjrvifncbdyngs2bv185imxbcbq64nka8gshhp8n2ns6fids6"; + }; + + nativeBuildInputs = [ autoreconfHook gfortran ]; + + propagatedBuildInputs = [ mpi fftwMpi ]; + + preConfigure = '' + mkdir build && cd build + + export PATH=$PATH:${mpi}/bin + configureFlagsArray+=( + --with-mpi=${mpi} + CC=mpicc + FC=mpif90 + MPICC=mpicc + MPIFC=mpif90 + ) + ''; + + configureScript = "../configure"; + + hardeningDisable = [ "format" ]; + + doCheck = true; + + meta = with lib; { + description = "Portable C library of density functionals with van der Waals interactions for density functional theory"; + license = with licenses; [ lgpl3Plus bsd3 ]; + homepage = "https://libvdwxc.org/"; + platforms = platforms.unix; + maintainers = [ maintainers.sheepforce ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 82ef2f44f512..de3255001acf 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -20226,6 +20226,8 @@ with pkgs; libvdpau = callPackage ../development/libraries/libvdpau { }; + libvdwxc = callPackage ../development/libraries/science/chemistry/libvdwxc { }; + libmodulemd = callPackage ../development/libraries/libmodulemd { }; libvdpau-va-gl = callPackage ../development/libraries/libvdpau-va-gl { }; From bb1b2cf2f2a29f1e8632d253cb358a329574a454 Mon Sep 17 00:00:00 2001 From: Phillip Seeber Date: Tue, 6 Sep 2022 17:49:07 +0200 Subject: [PATCH 3/3] gpaw: init at 22.8.0 gpaw: use passthru fftw from libvdwxc gpaw: fixes --- .../python-modules/gpaw/SetupPath.patch | 18 +++ .../python-modules/gpaw/default.nix | 123 ++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 143 insertions(+) create mode 100644 pkgs/development/python-modules/gpaw/SetupPath.patch create mode 100644 pkgs/development/python-modules/gpaw/default.nix diff --git a/pkgs/development/python-modules/gpaw/SetupPath.patch b/pkgs/development/python-modules/gpaw/SetupPath.patch new file mode 100644 index 000000000000..e13389429f72 --- /dev/null +++ b/pkgs/development/python-modules/gpaw/SetupPath.patch @@ -0,0 +1,18 @@ +diff --git a/gpaw/__init__.py b/gpaw/__init__.py +index b5c029e13..518c16b13 100644 +--- a/gpaw/__init__.py ++++ b/gpaw/__init__.py +@@ -201,12 +201,7 @@ def initialize_data_paths(): + try: + setup_paths[:0] = os.environ['GPAW_SETUP_PATH'].split(os.pathsep) + except KeyError: +- if len(setup_paths) == 0: +- if os.pathsep == ';': +- setup_paths[:] = [r'C:\gpaw-setups'] +- else: +- setup_paths[:] = ['/usr/local/share/gpaw-setups', +- '/usr/share/gpaw-setups'] ++ setup_paths[:0] = ["@gpawSetupPath@"] + + + read_rc_file() diff --git a/pkgs/development/python-modules/gpaw/default.nix b/pkgs/development/python-modules/gpaw/default.nix new file mode 100644 index 000000000000..5f6bc3f71dc3 --- /dev/null +++ b/pkgs/development/python-modules/gpaw/default.nix @@ -0,0 +1,123 @@ +{ buildPythonPackage +, lib +, fetchFromGitLab +, writeTextFile +, fetchurl +, blas +, lapack +, mpi +, scalapack +, libxc +, libvdwxc +, which +, ase +, numpy +, scipy +}: + +assert lib.asserts.assertMsg (!blas.isILP64) + "A 32 bit integer implementation of BLAS is required."; + +assert lib.asserts.assertMsg (!lapack.isILP64) + "A 32 bit integer implementation of LAPACK is required."; + +let + gpawConfig = writeTextFile { + name = "siteconfig.py"; + text = '' + # Compiler + compiler = 'gcc' + mpicompiler = '${mpi}/bin/mpicc' + mpilinker = '${mpi}/bin/mpicc' + + # BLAS + libraries += ['blas'] + library_dirs += ['${blas}/lib'] + + # FFTW + fftw = True + if fftw: + libraries += ['fftw3'] + + scalapack = True + if scalapack: + libraries += ['scalapack'] + + # LibXC + libxc = True + if libxc: + xc = '${libxc}/' + include_dirs += [xc + 'include'] + library_dirs += [xc + 'lib/'] + extra_link_args += ['-Wl,-rpath={xc}/lib'.format(xc=xc)] + if 'xc' not in libraries: + libraries.append('xc') + + # LibVDWXC + libvdwxc = True + if libvdwxc: + vdwxc = '${libvdwxc}/' + extra_link_args += ['-Wl,-rpath=%s/lib' % vdwxc] + library_dirs += ['%s/lib' % vdwxc] + include_dirs += ['%s/include' % vdwxc] + libraries += ['vdwxc'] + ''; + }; + + setupVersion = "0.9.20000"; + pawDataSets = fetchurl { + url = "https://wiki.fysik.dtu.dk/gpaw-files/gpaw-setups-${setupVersion}.tar.gz"; + sha256 = "07yldxnn38gky39fxyv3rfzag9p4lb0xfpzn15wy2h9aw4mnhwbc"; + }; + +in buildPythonPackage rec { + pname = "gpaw"; + version = "22.8.0"; + + src = fetchFromGitLab { + owner = "gpaw"; + repo = pname; + rev = version; + hash = "sha256-Kgf8yuGua7mcGP+jVVmbE8JCsbrfzewRTRt3ihq9YX4="; + }; + + nativeBuildInputs = [ which ]; + + buildInputs = [ blas scalapack libxc libvdwxc ]; + + propagatedBuildInputs = [ ase scipy numpy mpi ]; + + patches = [ ./SetupPath.patch ]; + + postPatch = '' + substituteInPlace gpaw/__init__.py \ + --subst-var-by gpawSetupPath "$out/share/gpaw/gpaw-setups-${setupVersion}" + ''; + + preConfigure = '' + unset CC + cp ${gpawConfig} siteconfig.py + ''; + + postInstall = '' + currDir=$(pwd) + mkdir -p $out/share/gpaw && cd $out/share/gpaw + cp ${pawDataSets} gpaw-setups.tar.gz + tar -xvf $out/share/gpaw/gpaw-setups.tar.gz + rm gpaw-setups.tar.gz + cd $currDir + ''; + + doCheck = false; # Requires MPI runtime to work in the sandbox + pythonImportsCheckHook = [ "gpaw" ]; + + passthru = { inherit mpi; }; + + meta = with lib; { + description = "Density functional theory and beyond within the projector-augmented wave method"; + homepage = "https://wiki.fysik.dtu.dk/gpaw/index.html"; + license = licenses.gpl3Only; + platforms = platforms.unix; + maintainers = [ maintainers.sheepforce ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 03eb188e0730..34c13bd026df 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -3898,6 +3898,8 @@ in { gpapi = callPackage ../development/python-modules/gpapi { }; + gpaw = callPackage ../development/python-modules/gpaw { }; + gpiozero = callPackage ../development/python-modules/gpiozero { }; gplaycli = callPackage ../development/python-modules/gplaycli { };