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 0000000000000..f90cad4a099f1 --- /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 0000000000000..e13389429f725 --- /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 0000000000000..5f6bc3f71dc3e --- /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 915e23056427c..de3255001acf0 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 {}; @@ -20225,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 { }; diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 03eb188e07304..34c13bd026dff 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 { };