From bb1b2cf2f2a29f1e8632d253cb358a329574a454 Mon Sep 17 00:00:00 2001 From: Phillip Seeber Date: Tue, 6 Sep 2022 17:49:07 +0200 Subject: [PATCH] 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 000000000000000..e13389429f72536 --- /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 000000000000000..5f6bc3f71dc3e92 --- /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 03eb188e073041d..34c13bd026dff5b 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 { };