Merge pull request #270650 from sheepforce/quantum-espresso

quantum-espresso: 6.6 -> 7.2
This commit is contained in:
markuskowa 2023-12-05 14:06:34 +01:00 committed by GitHub
commit 566008762b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 213 additions and 16 deletions

View File

@ -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";

View File

@ -0,0 +1,45 @@
{ stdenv
, fetchFromGitHub
, lib
, cmake
, mpi
, blas
, lapack
, scalapack
, gfortran
} :
assert !blas.isILP64;
assert !lapack.isILP64;
stdenv.mkDerivation rec {
pname = "libMBD";
version = "0.12.7";
src = fetchFromGitHub {
owner = "libmbd";
repo = pname;
rev = version;
hash = "sha256-39cvOUTAuuWLGOLdapR5trmCttCnijOWvPhSBTeTxTA=";
};
preConfigure = ''
cat > cmake/libMBDVersionTag.cmake << EOF
set(VERSION_TAG "${version}")
EOF
'';
nativeBuildInputs = [ cmake gfortran ];
buildInputs = [ blas lapack scalapack ];
propagatedBuildInputs = [ mpi ];
meta = with lib; {
description = "Many-body dispersion library";
homepage = "https://github.com/libmbd/libmbd";
license = licenses.mpl20;
platforms = platforms.linux;
maintainers = [ maintainers.sheepforce ];
};
}

View File

@ -0,0 +1,73 @@
{ stdenv
, lib
, gfortran
, blas
, lapack
, python3
, fetchFromGitHub
}:
assert (!blas.isILP64);
assert blas.isILP64 == lapack.isILP64;
stdenv.mkDerivation rec {
pname = "wannier90";
version = "3.1.0";
nativeBuildInputs = [ gfortran ];
buildInputs = [
blas
lapack
];
src = fetchFromGitHub {
owner = "wannier-developers";
repo = "wannier90";
rev = "v${version}";
hash = "sha256-+Mq7lM6WuwAnK/2FlDz9gNRIg2sRazQRezb3BfD0veY=";
};
# test cases are removed as error bounds of wannier90 are obviously to tight
postPatch = ''
rm -r test-suite/tests/testpostw90_{fe_kpathcurv,fe_kslicecurv,si_geninterp,si_geninterp_wsdistance}
rm -r test-suite/tests/testw90_example26 # Fails without AVX optimizations
patchShebangs test-suite/run_tests test-suite/testcode/bin/testcode.py
'';
configurePhase = ''
cp config/make.inc.gfort make.inc
'';
buildFlags = [ "all" "dynlib" ];
preInstall = ''
installFlagsArray+=(
PREFIX=$out
)
'';
postInstall = ''
cp libwannier.so $out/lib/libwannier.so
mkdir $out/include
find ./src/obj/ -name "*.mod" -exec cp {} $out/include/. \;
'';
doCheck = true;
checkInputs = [ python3 ];
checkTarget = [ "test-serial" ];
preCheck = ''
export OMP_NUM_THREADS=4
'';
enableParallelBuilding = true;
hardeningDisable = [ "format" ];
meta = with lib; {
description = "Calculation of maximally localised Wannier functions";
homepage = "https://github.com/wannier-developers/wannier90";
license = licenses.gpl2Plus;
platforms = [ "x86_64-linux" ];
maintainers = [ maintainers.sheepforce ];
};
}

View File

@ -776,6 +776,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

View File

@ -38839,9 +38839,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 { };