summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormarkuskowa <markus.kowalewski@gmail.com>2022-09-07 17:13:07 +0200
committerGitHub <noreply@github.com>2022-09-07 17:13:07 +0200
commit9dc934c3fd83e5af306d20c7e2cf5005a009263a (patch)
treeed6c17744ea7d0c08335c585c8bf374b9e02f4b5
parent599582499c548c8ad7f95dc0b2cb4d276795abeb (diff)
parentbb1b2cf2f2a29f1e8632d253cb358a329574a454 (diff)
Merge pull request #188948 from sheepforce/gpaw
gpaw: init at 22.8.0
-rw-r--r--pkgs/development/libraries/science/chemistry/libvdwxc/default.nix52
-rw-r--r--pkgs/development/python-modules/gpaw/SetupPath.patch18
-rw-r--r--pkgs/development/python-modules/gpaw/default.nix123
-rw-r--r--pkgs/top-level/all-packages.nix3
-rw-r--r--pkgs/top-level/python-packages.nix2
5 files changed, 198 insertions, 0 deletions
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/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/all-packages.nix b/pkgs/top-level/all-packages.nix
index 4f016c542b80..a5a1d8eab4a5 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -18038,6 +18038,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 {};
@@ -20227,6 +20228,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 { };
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 { };