QE-to-QMCPACK wave function converter relocation + some bug fixes (#16422)
* Revise description of patch variant. * Add qmcpack variant. Apply QE-to-QMCPACK wave function converter patch. * Clean-up, document, and re-organize. * ELPA patches did not nead when=`+patch` variant. * Need to be more precise here with QE version numbers. * satisfies seems to be necessary here in order to get correct behaviour. * Buglet with zlib link line. * Update var/spack/repos/builtin/packages/quantum-espresso/package.py Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> * Update var/spack/repos/builtin/packages/quantum-espresso/package.py Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com> * Fix for QE-to-QMCPACK wave function converter w.r.t. QE 6.3. Also adjust comments to reflect changes in code. Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
This commit is contained in:
parent
caad59e7c7
commit
860c54335d
@ -51,12 +51,17 @@ class QuantumEspresso(Package):
|
|||||||
variant('epw', default=False,
|
variant('epw', default=False,
|
||||||
description='Builds Electron-phonon Wannier executable')
|
description='Builds Electron-phonon Wannier executable')
|
||||||
|
|
||||||
# Apply internal patches by default. May need to be set to to False
|
# Apply upstream patches by default. Variant useful for 3rd party
|
||||||
# for 3rd party dependency patching
|
# patches which are incompatible with upstream patches
|
||||||
desc = 'Apply internal patches. May need to be set to False for'
|
desc = 'Apply recommended upstream patches. May need to be set '
|
||||||
desc = desc + ' dependency patching'
|
desc = desc + 'to False for third party patches or plugins'
|
||||||
variant('patch', default=True, description=desc)
|
variant('patch', default=True, description=desc)
|
||||||
|
|
||||||
|
# QMCPACK converter patch
|
||||||
|
# https://github.com/QMCPACK/qmcpack/tree/develop/external_codes/quantum_espresso
|
||||||
|
variant('qmcpack', default=False,
|
||||||
|
description='Build QE-to-QMCPACK wave function converter')
|
||||||
|
|
||||||
# Dependencies
|
# Dependencies
|
||||||
depends_on('blas')
|
depends_on('blas')
|
||||||
depends_on('lapack')
|
depends_on('lapack')
|
||||||
@ -68,14 +73,11 @@ class QuantumEspresso(Package):
|
|||||||
# Versions of HDF5 prior to 1.8.16 lead to QE runtime errors
|
# Versions of HDF5 prior to 1.8.16 lead to QE runtime errors
|
||||||
depends_on('hdf5@1.8.16:+fortran+hl+mpi', when='hdf5=parallel')
|
depends_on('hdf5@1.8.16:+fortran+hl+mpi', when='hdf5=parallel')
|
||||||
depends_on('hdf5@1.8.16:+fortran+hl~mpi', when='hdf5=serial')
|
depends_on('hdf5@1.8.16:+fortran+hl~mpi', when='hdf5=serial')
|
||||||
|
depends_on('hdf5', when='+qmcpack')
|
||||||
# TODO: enable building EPW when ~mpi
|
# TODO: enable building EPW when ~mpi
|
||||||
depends_on('mpi', when='+epw')
|
depends_on('mpi', when='+epw')
|
||||||
|
|
||||||
patch('dspev_drv_elpa.patch', when='@6.1.0:+patch+elpa ^elpa@2016.05.004')
|
# CONFLICTS SECTION
|
||||||
patch('dspev_drv_elpa.patch', when='@6.1.0:+patch+elpa ^elpa@2016.05.003')
|
|
||||||
|
|
||||||
# Conflicts
|
|
||||||
# Omitted for now due to concretizer bug
|
# Omitted for now due to concretizer bug
|
||||||
# MKL with 64-bit integers not supported.
|
# MKL with 64-bit integers not supported.
|
||||||
# conflicts(
|
# conflicts(
|
||||||
@ -126,6 +128,27 @@ class QuantumEspresso(Package):
|
|||||||
# folder QE expects as a link, we issue a conflict here.
|
# folder QE expects as a link, we issue a conflict here.
|
||||||
conflicts('+elpa', when='@:5.4.0')
|
conflicts('+elpa', when='@:5.4.0')
|
||||||
|
|
||||||
|
# Some QMCPACK converters only without internal patches. HDF5
|
||||||
|
# is a hard requirement. Need to do two HDF5 cases explicitly
|
||||||
|
# since Spack lacks support for expressing NOT operation.
|
||||||
|
conflicts(
|
||||||
|
'@6.4+patch',
|
||||||
|
when='+qmcpack',
|
||||||
|
msg='QE-to-QMCPACK wave function converter requires '
|
||||||
|
'deactivatation of upstream patches'
|
||||||
|
)
|
||||||
|
conflicts(
|
||||||
|
'hdf5=serial',
|
||||||
|
when='+qmcpack',
|
||||||
|
msg='QE-to-QMCPACK wave function converter only '
|
||||||
|
'supported with parallel HDF5'
|
||||||
|
)
|
||||||
|
conflicts(
|
||||||
|
'hdf5=none',
|
||||||
|
when='+qmcpack',
|
||||||
|
msg='QE-to-QMCPACK wave function converter requires HDF5'
|
||||||
|
)
|
||||||
|
|
||||||
# The first version of Q-E to feature integrated EPW is 6.0.0,
|
# The first version of Q-E to feature integrated EPW is 6.0.0,
|
||||||
# as per http://epw.org.uk/Main/DownloadAndInstall .
|
# as per http://epw.org.uk/Main/DownloadAndInstall .
|
||||||
# Complain if trying to install a version older than this.
|
# Complain if trying to install a version older than this.
|
||||||
@ -147,11 +170,33 @@ class QuantumEspresso(Package):
|
|||||||
conflicts('+epw', when='^openmpi@1.10.7%pgi@17.0:17.12',
|
conflicts('+epw', when='^openmpi@1.10.7%pgi@17.0:17.12',
|
||||||
msg='PGI+OpenMPI version combo incompatible with EPW')
|
msg='PGI+OpenMPI version combo incompatible with EPW')
|
||||||
|
|
||||||
# Spurious problems running in parallel the Makefile
|
# PATCHES SECTION
|
||||||
# generated by the configure
|
# THIRD-PARTY PATCHES
|
||||||
parallel = False
|
# NOTE: *SOME* third-party patches will require deactivation of
|
||||||
|
# upstream patches using `~patch` variant
|
||||||
|
|
||||||
# QE upstream patches
|
# QMCPACK converter patches for QE 6.4.1, 6.4, and 6.3
|
||||||
|
conflicts('@:6.2,6.5:', when='+qmcpack',
|
||||||
|
msg='QMCPACK converter NOT available for this version of QE')
|
||||||
|
|
||||||
|
# 6.4.1
|
||||||
|
patch_url = 'https://raw.githubusercontent.com/QMCPACK/qmcpack/develop/external_codes/quantum_espresso/add_pw2qmcpack_to_qe-6.4.1.diff'
|
||||||
|
patch_checksum = '57cb1b06ee2653a87c3acc0dd4f09032fcf6ce6b8cbb9677ae9ceeb6a78f85e2'
|
||||||
|
patch(patch_url, sha256=patch_checksum, when='@6.4.1+qmcpack')
|
||||||
|
# 6.4
|
||||||
|
patch_url = 'https://raw.githubusercontent.com/QMCPACK/qmcpack/develop/external_codes/quantum_espresso/add_pw2qmcpack_to_qe-6.4.diff'
|
||||||
|
patch_checksum = 'ef08f5089951be902f0854a4dbddaa7b01f08924cdb27decfade6bef0e2b8994'
|
||||||
|
patch(patch_url, sha256=patch_checksum, when='@6.4:6.4.0+qmcpack')
|
||||||
|
# 6.3
|
||||||
|
patch_url = 'https://raw.githubusercontent.com/QMCPACK/qmcpack/develop/external_codes/quantum_espresso/add_pw2qmcpack_to_qe-6.3.diff'
|
||||||
|
patch_checksum = '2ee346e24926479f5e96f8dc47812173a8847a58354bbc32cf2114af7a521c13'
|
||||||
|
patch(patch_url, sha256=patch_checksum, when='@6.3+qmcpack')
|
||||||
|
|
||||||
|
# ELPA
|
||||||
|
patch('dspev_drv_elpa.patch', when='@6.1.0:+elpa ^elpa@2016.05.004')
|
||||||
|
patch('dspev_drv_elpa.patch', when='@6.1.0:+elpa ^elpa@2016.05.003')
|
||||||
|
|
||||||
|
# QE UPSTREAM PATCHES
|
||||||
# QE 6.3 requires multiple patches to fix MKL detection
|
# QE 6.3 requires multiple patches to fix MKL detection
|
||||||
# There may still be problems on Mac with MKL detection
|
# There may still be problems on Mac with MKL detection
|
||||||
patch('https://gitlab.com/QEF/q-e/commit/0796e1b7c55c9361ecb6515a0979280e78865e36.diff',
|
patch('https://gitlab.com/QEF/q-e/commit/0796e1b7c55c9361ecb6515a0979280e78865e36.diff',
|
||||||
@ -170,6 +215,10 @@ class QuantumEspresso(Package):
|
|||||||
sha256='b1aa3179ee1c069964fb9c21f3b832aebeae54947ce8d3cc1a74e7b154c3c10f',
|
sha256='b1aa3179ee1c069964fb9c21f3b832aebeae54947ce8d3cc1a74e7b154c3c10f',
|
||||||
when='+patch@6.4.1:6.5.0')
|
when='+patch@6.4.1:6.5.0')
|
||||||
|
|
||||||
|
# Spurious problems running in parallel the Makefile
|
||||||
|
# generated by the configure
|
||||||
|
parallel = False
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def install(self, spec, prefix):
|
||||||
|
|
||||||
prefix_path = prefix.bin if '@:5.4.0' in spec else prefix
|
prefix_path = prefix.bin if '@:5.4.0' in spec else prefix
|
||||||
@ -268,7 +317,7 @@ def install(self, spec, prefix):
|
|||||||
|
|
||||||
if spec.variants['hdf5'].value != 'none':
|
if spec.variants['hdf5'].value != 'none':
|
||||||
options.append('--with-hdf5={0}'.format(spec['hdf5'].prefix))
|
options.append('--with-hdf5={0}'.format(spec['hdf5'].prefix))
|
||||||
if '@6.4.1' or '@6.5' in spec:
|
if spec.satisfies('@6.4.1,6.5'):
|
||||||
options.extend([
|
options.extend([
|
||||||
'--with-hdf5-include={0}'.format(
|
'--with-hdf5-include={0}'.format(
|
||||||
spec['hdf5'].headers.directories[0]
|
spec['hdf5'].headers.directories[0]
|
||||||
@ -280,6 +329,16 @@ def install(self, spec, prefix):
|
|||||||
|
|
||||||
configure(*options)
|
configure(*options)
|
||||||
|
|
||||||
|
# Filter file must be applied after configure executes
|
||||||
|
# QE 6.4.0 to QE 6.4 have `-L` missing in front of zlib library
|
||||||
|
if spec.variants['hdf5'].value != 'none':
|
||||||
|
if spec.satisfies('@6.1.0:6.4.0'):
|
||||||
|
make_inc = join_path(self.stage.source_path, 'make.inc')
|
||||||
|
zlib_libs = spec['zlib'].prefix.lib + ' -lz'
|
||||||
|
filter_file(
|
||||||
|
zlib_libs, format(spec['zlib'].libs.ld_flags), make_inc
|
||||||
|
)
|
||||||
|
|
||||||
if '+epw' in spec:
|
if '+epw' in spec:
|
||||||
make('all', 'epw')
|
make('all', 'epw')
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user