cp2k: update to 4.1 + update of dependencies (#3561)
* libint: updated version, ported to AutotoolsPackage * elpa: updated version, ported to AutotoolsPackage * wannier90: updated version, ported to MakefilePackage * pexsi: updated version, ported to MakefilePackage * cp2k: updated version, removed wannier 90 from dependencies if cp2k@4.1 * plumed: updated version Modifications: * modules has been turned into a single variant, as different versions have different modules available * added dictionaries for patches * netlib-scalapack: ported to CMakePackage
This commit is contained in:
parent
73f78cb8c4
commit
f9c0348891
8 changed files with 160 additions and 122 deletions
|
@ -37,6 +37,7 @@ class Cp2k(Package):
|
||||||
homepage = 'https://www.cp2k.org'
|
homepage = 'https://www.cp2k.org'
|
||||||
url = 'https://sourceforge.net/projects/cp2k/files/cp2k-3.0.tar.bz2'
|
url = 'https://sourceforge.net/projects/cp2k/files/cp2k-3.0.tar.bz2'
|
||||||
|
|
||||||
|
version('4.1', 'b0534b530592de15ac89828b1541185e')
|
||||||
version('3.0', 'c05bc47335f68597a310b1ed75601d35')
|
version('3.0', 'c05bc47335f68597a310b1ed75601d35')
|
||||||
|
|
||||||
variant('mpi', default=True, description='Enable MPI support')
|
variant('mpi', default=True, description='Enable MPI support')
|
||||||
|
@ -47,14 +48,18 @@ class Cp2k(Package):
|
||||||
depends_on('lapack')
|
depends_on('lapack')
|
||||||
depends_on('blas')
|
depends_on('blas')
|
||||||
depends_on('fftw')
|
depends_on('fftw')
|
||||||
depends_on('libint@:1.2', when='@3.0')
|
depends_on('libint@:1.2', when='@3.0,4.1')
|
||||||
|
|
||||||
depends_on('mpi', when='+mpi')
|
depends_on('mpi', when='+mpi')
|
||||||
depends_on('scalapack', when='+mpi')
|
depends_on('scalapack', when='+mpi')
|
||||||
depends_on('plumed+shared+mpi', when='+plumed+mpi')
|
depends_on('plumed+shared+mpi', when='+plumed+mpi')
|
||||||
depends_on('plumed+shared~mpi', when='+plumed~mpi')
|
depends_on('plumed+shared~mpi', when='+plumed~mpi')
|
||||||
depends_on('pexsi', when='+mpi')
|
depends_on('pexsi+fortran', when='+mpi')
|
||||||
depends_on('wannier90', when='+mpi')
|
|
||||||
|
# Apparently cp2k@4.1 needs an "experimental" version of libwannier.a
|
||||||
|
# which is only available contacting the developer directly. See INSTALL
|
||||||
|
# in the stage of cp2k@4.1
|
||||||
|
depends_on('wannier90', when='@3.0+mpi')
|
||||||
depends_on('elpa', when='+mpi')
|
depends_on('elpa', when='+mpi')
|
||||||
|
|
||||||
# TODO : add dependency on libsmm, libxsmm
|
# TODO : add dependency on libsmm, libxsmm
|
||||||
|
@ -94,6 +99,8 @@ def install(self, spec, prefix):
|
||||||
fcflags.append(spec['fftw'].cppflags)
|
fcflags.append(spec['fftw'].cppflags)
|
||||||
fftw = find_libraries('libfftw3', root=spec['fftw'].prefix.lib)
|
fftw = find_libraries('libfftw3', root=spec['fftw'].prefix.lib)
|
||||||
ldflags = [fftw.search_flags]
|
ldflags = [fftw.search_flags]
|
||||||
|
if 'superlu-dist@4.3' in spec:
|
||||||
|
ldflags = ['-Wl,--allow-multiple-definition'] + ldflags
|
||||||
libs = [
|
libs = [
|
||||||
join_path(spec['libint'].prefix.lib, 'libint.so'),
|
join_path(spec['libint'].prefix.lib, 'libint.so'),
|
||||||
join_path(spec['libint'].prefix.lib, 'libderiv.so'),
|
join_path(spec['libint'].prefix.lib, 'libderiv.so'),
|
||||||
|
@ -147,10 +154,12 @@ def install(self, spec, prefix):
|
||||||
cppflags.extend([
|
cppflags.extend([
|
||||||
'-D__parallel',
|
'-D__parallel',
|
||||||
'-D__LIBPEXSI',
|
'-D__LIBPEXSI',
|
||||||
'-D__WANNIER90',
|
|
||||||
'-D__ELPA3',
|
'-D__ELPA3',
|
||||||
'-D__SCALAPACK'
|
'-D__SCALAPACK'
|
||||||
])
|
])
|
||||||
|
if 'wannier90' in spec:
|
||||||
|
cppflags.append('-D__WANNIER90')
|
||||||
|
|
||||||
fcflags.extend([
|
fcflags.extend([
|
||||||
# spec['elpa:fortran'].cppflags
|
# spec['elpa:fortran'].cppflags
|
||||||
'-I' + join_path(
|
'-I' + join_path(
|
||||||
|
@ -167,7 +176,6 @@ def install(self, spec, prefix):
|
||||||
libs.extend([
|
libs.extend([
|
||||||
join_path(spec['elpa'].prefix.lib,
|
join_path(spec['elpa'].prefix.lib,
|
||||||
'libelpa.{0}'.format(dso_suffix)),
|
'libelpa.{0}'.format(dso_suffix)),
|
||||||
join_path(spec['wannier90'].prefix.lib, 'libwannier.a'),
|
|
||||||
join_path(spec['pexsi'].prefix.lib, 'libpexsi.a'),
|
join_path(spec['pexsi'].prefix.lib, 'libpexsi.a'),
|
||||||
join_path(spec['superlu-dist'].prefix.lib,
|
join_path(spec['superlu-dist'].prefix.lib,
|
||||||
'libsuperlu_dist.a'),
|
'libsuperlu_dist.a'),
|
||||||
|
@ -180,6 +188,13 @@ def install(self, spec, prefix):
|
||||||
'libmetis.{0}'.format(dso_suffix)
|
'libmetis.{0}'.format(dso_suffix)
|
||||||
),
|
),
|
||||||
])
|
])
|
||||||
|
|
||||||
|
if 'wannier90' in spec:
|
||||||
|
wannier = join_path(
|
||||||
|
spec['wannier90'].prefix.lib, 'libwannier.a'
|
||||||
|
)
|
||||||
|
libs.append(wannier)
|
||||||
|
|
||||||
libs.extend(scalapack)
|
libs.extend(scalapack)
|
||||||
libs.extend(self.spec['mpi'].mpicxx_shared_libs)
|
libs.extend(self.spec['mpi'].mpicxx_shared_libs)
|
||||||
libs.extend(self.compiler.stdcxx_libs)
|
libs.extend(self.compiler.stdcxx_libs)
|
||||||
|
|
|
@ -26,24 +26,15 @@
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
class Elpa(Package):
|
class Elpa(AutotoolsPackage):
|
||||||
"""
|
"""Eigenvalue solvers for Petaflop-Applications (ELPA)"""
|
||||||
Eigenvalue solvers for Petaflop-Applications (ELPA)
|
|
||||||
"""
|
|
||||||
|
|
||||||
homepage = 'http://elpa.mpcdf.mpg.de/'
|
homepage = 'http://elpa.mpcdf.mpg.de/'
|
||||||
url = 'http://elpa.mpcdf.mpg.de/elpa-2015.11.001.tar.gz'
|
url = 'http://elpa.mpcdf.mpg.de/elpa-2015.11.001.tar.gz'
|
||||||
|
|
||||||
version(
|
version('2016.05.004', 'c0dd3a53055536fc3a2a221e78d8b376')
|
||||||
'2016.05.003',
|
version('2016.05.003', '88a9f3f3bfb63e16509dd1be089dcf2c')
|
||||||
'88a9f3f3bfb63e16509dd1be089dcf2c',
|
version('2015.11.001', 'de0f35b7ee7c971fd0dca35c900b87e6')
|
||||||
url='http://elpa.mpcdf.mpg.de/html/Releases/2016.05.003/elpa-2016.05.003.tar.gz'
|
|
||||||
)
|
|
||||||
version(
|
|
||||||
'2015.11.001',
|
|
||||||
'de0f35b7ee7c971fd0dca35c900b87e6',
|
|
||||||
url='http://elpa.mpcdf.mpg.de/elpa-2015.11.001.tar.gz'
|
|
||||||
)
|
|
||||||
|
|
||||||
variant('openmp', default=False, description='Activates OpenMP support')
|
variant('openmp', default=False, description='Activates OpenMP support')
|
||||||
|
|
||||||
|
@ -52,30 +43,26 @@ class Elpa(Package):
|
||||||
depends_on('lapack')
|
depends_on('lapack')
|
||||||
depends_on('scalapack')
|
depends_on('scalapack')
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def url_for_version(self, version):
|
||||||
|
t = 'http://elpa.mpcdf.mpg.de/html/Releases/{0}/elpa-{0}.tar.gz'
|
||||||
|
if version < Version('2016.05.003'):
|
||||||
|
t = 'http://elpa.mpcdf.mpg.de/elpa-{0}.tar.gz'
|
||||||
|
return t.format(str(version))
|
||||||
|
|
||||||
options = [
|
def setup_environment(self, spack_env, run_env):
|
||||||
'CC={0}'.format(self.spec['mpi'].mpicc),
|
|
||||||
'FC={0}'.format(self.spec['mpi'].mpifc),
|
|
||||||
'CXX={0}'.format(self.spec['mpi'].mpicxx),
|
|
||||||
'FCFLAGS={0}'.format(
|
|
||||||
spec['lapack'].libs.joined()
|
|
||||||
),
|
|
||||||
'LDFLAGS={0}'.format(
|
|
||||||
spec['lapack'].libs.joined()
|
|
||||||
),
|
|
||||||
'SCALAPACK_FCFLAGS={0}'.format(
|
|
||||||
spec['scalapack'].libs.joined()
|
|
||||||
),
|
|
||||||
'SCALAPACK_LDFLAGS={0}'.format(
|
|
||||||
spec['scalapack'].libs.joined()
|
|
||||||
),
|
|
||||||
'--prefix={0}'.format(self.prefix)
|
|
||||||
]
|
|
||||||
|
|
||||||
if '+openmp' in spec:
|
spec = self.spec
|
||||||
|
|
||||||
|
spack_env.set('CC', spec['mpi'].mpicc)
|
||||||
|
spack_env.set('FC', spec['mpi'].mpifc)
|
||||||
|
spack_env.set('CXX', spec['mpi'].mpicxx)
|
||||||
|
|
||||||
|
spack_env.set('LDFLAGS', spec['lapack'].libs.search_flags)
|
||||||
|
spack_env.set('LIBS', spec['lapack'].libs.link_flags)
|
||||||
|
spack_env.set('SCALAPACK_LDFLAGS', spec['scalapack'].libs.joined())
|
||||||
|
|
||||||
|
def configure_args(self):
|
||||||
|
options = []
|
||||||
|
if '+openmp' in self.spec:
|
||||||
options.append("--enable-openmp")
|
options.append("--enable-openmp")
|
||||||
|
return options
|
||||||
configure(*options)
|
|
||||||
make()
|
|
||||||
make("install")
|
|
||||||
|
|
|
@ -25,25 +25,27 @@
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
class Libint(Package):
|
class Libint(AutotoolsPackage):
|
||||||
"""Libint is a high-performance library for computing
|
"""Libint is a high-performance library for computing
|
||||||
Gaussian integrals in quantum mechanics."""
|
Gaussian integrals in quantum mechanics.
|
||||||
|
"""
|
||||||
|
|
||||||
homepage = "https://github.com/evaleev/libint"
|
homepage = "https://github.com/evaleev/libint"
|
||||||
url = "https://github.com/evaleev/libint/archive/v2.1.0.tar.gz"
|
url = "https://github.com/evaleev/libint/archive/v2.1.0.tar.gz"
|
||||||
|
|
||||||
|
version('2.2.0', 'da37dab862fb0b97a7ed7d007695ef47')
|
||||||
version('2.1.0', 'd0dcb985fe32ddebc78fe571ce37e2d6')
|
version('2.1.0', 'd0dcb985fe32ddebc78fe571ce37e2d6')
|
||||||
version('1.1.6', '990f67b55f49ecc18f32c58da9240684')
|
version('1.1.6', '990f67b55f49ecc18f32c58da9240684')
|
||||||
version('1.1.5', '379b7d0718ff398715d6898807adf628')
|
version('1.1.5', '379b7d0718ff398715d6898807adf628')
|
||||||
|
|
||||||
# Build dependencies
|
# Build dependencies
|
||||||
depends_on('autoconf@2.52:', type='build')
|
depends_on('autoconf@2.52:', type='build')
|
||||||
depends_on('automake', type='build')
|
depends_on('automake', type='build')
|
||||||
depends_on('libtool', type='build')
|
depends_on('libtool', type='build')
|
||||||
|
|
||||||
# Libint 2 dependencies
|
# Libint 2 dependencies
|
||||||
depends_on('boost', when='@2:')
|
depends_on('boost', when='@2:')
|
||||||
depends_on('gmp', when='@2:')
|
depends_on('gmp', when='@2:')
|
||||||
|
|
||||||
def url_for_version(self, version):
|
def url_for_version(self, version):
|
||||||
base_url = "https://github.com/evaleev/libint/archive"
|
base_url = "https://github.com/evaleev/libint/archive"
|
||||||
|
@ -54,16 +56,14 @@ def url_for_version(self, version):
|
||||||
else:
|
else:
|
||||||
return "{0}/v{1}.tar.gz".format(base_url, version)
|
return "{0}/v{1}.tar.gz".format(base_url, version)
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def autoreconf(self, spec, prefix):
|
||||||
# Generate configure
|
|
||||||
libtoolize()
|
libtoolize()
|
||||||
aclocal('-I', 'lib/autoconf')
|
aclocal('-I', 'lib/autoconf')
|
||||||
autoconf()
|
autoconf()
|
||||||
|
|
||||||
config_args = [
|
def configure_args(self):
|
||||||
'--prefix={0}'.format(prefix),
|
|
||||||
'--enable-shared'
|
config_args = ['--enable-shared']
|
||||||
]
|
|
||||||
|
|
||||||
# Optimizations for the Intel compiler, suggested by CP2K
|
# Optimizations for the Intel compiler, suggested by CP2K
|
||||||
optflags = '-O2'
|
optflags = '-O2'
|
||||||
|
@ -93,12 +93,4 @@ def install(self, spec, prefix):
|
||||||
'--with-libint-max-am=5',
|
'--with-libint-max-am=5',
|
||||||
'--with-libderiv-max-am1=4'
|
'--with-libderiv-max-am1=4'
|
||||||
])
|
])
|
||||||
|
return config_args
|
||||||
configure(*config_args)
|
|
||||||
make()
|
|
||||||
|
|
||||||
# Testing suite was added in libint 2
|
|
||||||
if self.version >= Version('2.0.0'):
|
|
||||||
make('check')
|
|
||||||
|
|
||||||
make('install')
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
class NetlibScalapack(Package):
|
class NetlibScalapack(CMakePackage):
|
||||||
"""ScaLAPACK is a library of high-performance linear algebra routines for
|
"""ScaLAPACK is a library of high-performance linear algebra routines for
|
||||||
parallel distributed memory machines
|
parallel distributed memory machines
|
||||||
"""
|
"""
|
||||||
|
@ -60,12 +60,16 @@ class NetlibScalapack(Package):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def scalapack_libs(self):
|
def scalapack_libs(self):
|
||||||
|
# Note that the default will be to search
|
||||||
|
# for 'libnetlib-scalapack.<suffix>'
|
||||||
shared = True if '+shared' in self.spec else False
|
shared = True if '+shared' in self.spec else False
|
||||||
return find_libraries(
|
return find_libraries(
|
||||||
'libscalapack', root=self.prefix, shared=shared, recurse=True
|
'libscalapack', root=self.prefix, shared=shared, recurse=True
|
||||||
)
|
)
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def cmake_args(self):
|
||||||
|
spec = self.spec
|
||||||
|
|
||||||
options = [
|
options = [
|
||||||
"-DBUILD_SHARED_LIBS:BOOL=%s" % ('ON' if '+shared' in spec else
|
"-DBUILD_SHARED_LIBS:BOOL=%s" % ('ON' if '+shared' in spec else
|
||||||
'OFF'),
|
'OFF'),
|
||||||
|
@ -89,13 +93,10 @@ def install(self, spec, prefix):
|
||||||
"-DCMAKE_Fortran_FLAGS=-fPIC"
|
"-DCMAKE_Fortran_FLAGS=-fPIC"
|
||||||
])
|
])
|
||||||
|
|
||||||
options.extend(std_cmake_args)
|
return options
|
||||||
|
|
||||||
with working_dir('spack-build', create=True):
|
|
||||||
cmake('..', *options)
|
|
||||||
make()
|
|
||||||
make("install")
|
|
||||||
|
|
||||||
|
@run_after('install')
|
||||||
|
def fix_darwin_install(self):
|
||||||
# The shared libraries are not installed correctly on Darwin:
|
# The shared libraries are not installed correctly on Darwin:
|
||||||
if (sys.platform == 'darwin') and ('+shared' in spec):
|
if (sys.platform == 'darwin') and ('+shared' in self.spec):
|
||||||
fix_darwin_install_name(prefix.lib)
|
fix_darwin_install_name(self.spec.prefix.lib)
|
||||||
|
|
|
@ -63,7 +63,7 @@ CXXFLAGS = ${COMPILE_FLAG} ${CPPFLAG} ${PROFILE_FLAG} ${INCLUDES}
|
||||||
CCDEFS = ${COMPILE_DEF}
|
CCDEFS = ${COMPILE_DEF}
|
||||||
CPPDEFS = ${COMPILE_DEF}
|
CPPDEFS = ${COMPILE_DEF}
|
||||||
LOADOPTS = ${PROFILE_FLAG} ${LIBS}
|
LOADOPTS = ${PROFILE_FLAG} ${LIBS}
|
||||||
FLOADOPTS = ${PROFILE_FLAG} ${LIBS} ${CPP_LIB}
|
FLOADOPTS = @FLDFLAGS ${PROFILE_FLAG} ${LIBS} ${CPP_LIB}
|
||||||
|
|
||||||
# Generate auto-dependencies
|
# Generate auto-dependencies
|
||||||
%.d: %.c
|
%.d: %.c
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
class Pexsi(Package):
|
class Pexsi(MakefilePackage):
|
||||||
"""The PEXSI library is written in C++, and uses message passing interface
|
"""The PEXSI library is written in C++, and uses message passing interface
|
||||||
(MPI) to parallelize the computation on distributed memory computing
|
(MPI) to parallelize the computation on distributed memory computing
|
||||||
systems and achieve scalability on more than 10,000 processors.
|
systems and achieve scalability on more than 10,000 processors.
|
||||||
|
@ -46,14 +46,20 @@ class Pexsi(Package):
|
||||||
homepage = 'https://math.berkeley.edu/~linlin/pexsi/index.html'
|
homepage = 'https://math.berkeley.edu/~linlin/pexsi/index.html'
|
||||||
url = 'https://math.berkeley.edu/~linlin/pexsi/download/pexsi_v0.9.0.tar.gz'
|
url = 'https://math.berkeley.edu/~linlin/pexsi/download/pexsi_v0.9.0.tar.gz'
|
||||||
|
|
||||||
|
version('0.9.2', '0ce491a3a922d271c4edf9b20aa93076')
|
||||||
version('0.9.0', '0c1a2de891ba1445dfc184b2fa270ed8')
|
version('0.9.0', '0c1a2de891ba1445dfc184b2fa270ed8')
|
||||||
|
|
||||||
depends_on('parmetis')
|
depends_on('parmetis')
|
||||||
depends_on('superlu-dist@3.3', when='@0.9.0')
|
depends_on('superlu-dist@3.3', when='@0.9.0')
|
||||||
|
depends_on('superlu-dist@4.3', when='@0.9.2')
|
||||||
|
|
||||||
|
variant(
|
||||||
|
'fortran', default=False, description='Builds the Fortran interface'
|
||||||
|
)
|
||||||
|
|
||||||
parallel = False
|
parallel = False
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
def edit(self, spec, prefix):
|
||||||
|
|
||||||
substitutions = {
|
substitutions = {
|
||||||
'@MPICC': self.spec['mpi'].mpicc,
|
'@MPICC': self.spec['mpi'].mpicc,
|
||||||
|
@ -70,9 +76,13 @@ def install(self, spec, prefix):
|
||||||
'@LAPACK_LIBS': self.spec['lapack'].libs.joined(),
|
'@LAPACK_LIBS': self.spec['lapack'].libs.joined(),
|
||||||
'@BLAS_LIBS': self.spec['blas'].libs.joined(),
|
'@BLAS_LIBS': self.spec['blas'].libs.joined(),
|
||||||
# FIXME : what to do with compiler provided libraries ?
|
# FIXME : what to do with compiler provided libraries ?
|
||||||
'@STDCXX_LIB': ' '.join(self.compiler.stdcxx_libs)
|
'@STDCXX_LIB': ' '.join(self.compiler.stdcxx_libs),
|
||||||
|
'@FLDFLAGS': ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if '@0.9.2' in self.spec:
|
||||||
|
substitutions['@FLDFLAGS'] = '-Wl,--allow-multiple-definition'
|
||||||
|
|
||||||
template = join_path(
|
template = join_path(
|
||||||
os.path.dirname(inspect.getmodule(self).__file__),
|
os.path.dirname(inspect.getmodule(self).__file__),
|
||||||
'make.inc'
|
'make.inc'
|
||||||
|
@ -85,20 +95,29 @@ def install(self, spec, prefix):
|
||||||
for key, value in substitutions.items():
|
for key, value in substitutions.items():
|
||||||
filter_file(key, value, makefile)
|
filter_file(key, value, makefile)
|
||||||
|
|
||||||
make()
|
def build(self, spec, prefix):
|
||||||
|
super(Pexsi, self).build(spec, prefix)
|
||||||
|
if '+fortran' in self.spec:
|
||||||
|
make('-C', 'fortran')
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
|
||||||
# 'make install' does not exist, despite what documentation says
|
# 'make install' does not exist, despite what documentation says
|
||||||
mkdirp(self.prefix.lib)
|
mkdirp(self.prefix.lib)
|
||||||
|
|
||||||
install(
|
install(
|
||||||
join_path(self.stage.source_path, 'src', 'libpexsi_linux.a'),
|
join_path(self.stage.source_path, 'src', 'libpexsi_linux.a'),
|
||||||
join_path(self.prefix.lib, 'libpexsi.a')
|
join_path(self.prefix.lib, 'libpexsi.a')
|
||||||
)
|
)
|
||||||
|
|
||||||
install_tree(
|
install_tree(
|
||||||
join_path(self.stage.source_path, 'include'),
|
join_path(self.stage.source_path, 'include'),
|
||||||
self.prefix.include
|
self.prefix.include
|
||||||
)
|
)
|
||||||
|
|
||||||
# fortran "interface"
|
# fortran "interface"
|
||||||
make('-C', 'fortran')
|
if '+fortran' in self.spec:
|
||||||
install_tree(
|
install_tree(
|
||||||
join_path(self.stage.source_path, 'fortran'),
|
join_path(self.stage.source_path, 'fortran'),
|
||||||
join_path(self.prefix, 'fortran')
|
join_path(self.prefix, 'fortran')
|
||||||
)
|
)
|
||||||
|
|
|
@ -43,17 +43,16 @@ class Plumed(AutotoolsPackage):
|
||||||
homepage = 'http://www.plumed.org/'
|
homepage = 'http://www.plumed.org/'
|
||||||
url = 'https://github.com/plumed/plumed2/archive/v2.2.3.tar.gz'
|
url = 'https://github.com/plumed/plumed2/archive/v2.2.3.tar.gz'
|
||||||
|
|
||||||
|
version('2.3.0', 'a9b5728f115dca8f0519111f1f5a6fa5')
|
||||||
|
version('2.2.4', 'afb00da25a3fbd47acf377e53342059d')
|
||||||
version('2.2.3', 'a6e3863e40aac07eb8cf739cbd14ecf8')
|
version('2.2.3', 'a6e3863e40aac07eb8cf739cbd14ecf8')
|
||||||
|
|
||||||
# Variants. PLUMED by default builds a number of optional modules.
|
# Variants. PLUMED by default builds a number of optional modules.
|
||||||
# The ones listed here are not built by default for various reasons,
|
# The ones listed here are not built by default for various reasons,
|
||||||
# such as stability, lack of testing, or lack of demand.
|
# such as stability, lack of testing, or lack of demand.
|
||||||
variant('crystallization', default=False,
|
# FIXME: This needs to be an optional
|
||||||
description='Build support for optional crystallization module.')
|
variant('optional_modules', default='all',
|
||||||
variant('imd', default=False,
|
description='String that is used to build optional modules')
|
||||||
description='Build support for optional imd module.')
|
|
||||||
variant('manyrestraints', default=False,
|
|
||||||
description='Build support for optional manyrestraints module.')
|
|
||||||
variant('shared', default=True, description='Builds shared libraries')
|
variant('shared', default=True, description='Builds shared libraries')
|
||||||
variant('mpi', default=True, description='Activates MPI support')
|
variant('mpi', default=True, description='Activates MPI support')
|
||||||
variant('gsl', default=True, description='Activates GSL support')
|
variant('gsl', default=True, description='Activates GSL support')
|
||||||
|
@ -73,6 +72,28 @@ class Plumed(AutotoolsPackage):
|
||||||
# Dictionary mapping PLUMED versions to the patches it provides
|
# Dictionary mapping PLUMED versions to the patches it provides
|
||||||
# interactively
|
# interactively
|
||||||
plumed_patches = {
|
plumed_patches = {
|
||||||
|
'2.3.0': {
|
||||||
|
'amber-14': '1',
|
||||||
|
'gromacs-2016.1': '2',
|
||||||
|
'gromacs-4.5.7': '3',
|
||||||
|
'gromacs-5.0.7': '4',
|
||||||
|
'gromacs-5.1.4': '5',
|
||||||
|
'lammps-6Apr13': '6',
|
||||||
|
'namd-2.8': '7',
|
||||||
|
'namd-2.9': '8',
|
||||||
|
'espresso-5.0.2': '9'
|
||||||
|
},
|
||||||
|
'2.2.4': {
|
||||||
|
'amber-14': '1',
|
||||||
|
'gromacs-4.5.7': '2',
|
||||||
|
'gromacs-4.6.7': '3',
|
||||||
|
'gromacs-5.0.7': '4',
|
||||||
|
'gromacs-5.1.2': '5',
|
||||||
|
'lammps-6Apr13': '6',
|
||||||
|
'namd-2.8': '7',
|
||||||
|
'namd-2.9': '8',
|
||||||
|
'espresso-5.0.2': '9'
|
||||||
|
},
|
||||||
'2.2.3': {
|
'2.2.3': {
|
||||||
'amber-14': '1',
|
'amber-14': '1',
|
||||||
'gromacs-4.5.7': '2',
|
'gromacs-4.5.7': '2',
|
||||||
|
@ -132,7 +153,7 @@ def configure_args(self):
|
||||||
# If the MPI dependency is provided by the intel-mpi package then
|
# If the MPI dependency is provided by the intel-mpi package then
|
||||||
# the following additional argument is required to allow it to
|
# the following additional argument is required to allow it to
|
||||||
# build.
|
# build.
|
||||||
if spec.satisfies('^intel-mpi'):
|
if 'intel-mpi' in spec:
|
||||||
configure_opts.extend([
|
configure_opts.extend([
|
||||||
'STATIC_LIBS=-mt_mpi'
|
'STATIC_LIBS=-mt_mpi'
|
||||||
])
|
])
|
||||||
|
@ -144,19 +165,16 @@ def configure_args(self):
|
||||||
])
|
])
|
||||||
|
|
||||||
# Construct list of optional modules
|
# Construct list of optional modules
|
||||||
module_opts = []
|
|
||||||
module_opts.extend([
|
|
||||||
'+crystallization' if (
|
|
||||||
'+crystallization' in spec) else '-crystallization',
|
|
||||||
'+imd' if '+imd' in spec else '-imd',
|
|
||||||
'+manyrestraints' if (
|
|
||||||
'+manyrestraints' in spec) else '-manyrestraints'
|
|
||||||
])
|
|
||||||
|
|
||||||
# If we have specified any optional modules then add the argument to
|
# If we have specified any optional modules then add the argument to
|
||||||
# enable or disable them.
|
# enable or disable them.
|
||||||
if module_opts:
|
optional_modules = self.spec.variants['optional_modules'].value
|
||||||
configure_opts.extend([
|
if optional_modules:
|
||||||
'--enable-modules={0}'.format("".join(module_opts))])
|
# From 'configure --help' @2.3:
|
||||||
|
# all/none/reset or : separated list such as
|
||||||
|
# +crystallization:-bias default: reset
|
||||||
|
configure_opts.append(
|
||||||
|
'--enable-modules={0}'.format(optional_modules)
|
||||||
|
)
|
||||||
|
|
||||||
return configure_opts
|
return configure_opts
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
from spack import *
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
class Wannier90(Package):
|
class Wannier90(MakefilePackage):
|
||||||
"""Wannier90 calculates maximally-localised Wannier functions (MLWFs).
|
"""Wannier90 calculates maximally-localised Wannier functions (MLWFs).
|
||||||
|
|
||||||
Wannier90 is released under the GNU General Public License.
|
Wannier90 is released under the GNU General Public License.
|
||||||
|
@ -37,6 +37,7 @@ class Wannier90(Package):
|
||||||
homepage = 'http://wannier.org'
|
homepage = 'http://wannier.org'
|
||||||
url = 'http://wannier.org/code/wannier90-2.0.1.tar.gz'
|
url = 'http://wannier.org/code/wannier90-2.0.1.tar.gz'
|
||||||
|
|
||||||
|
version('2.1.0', '07a81c002b41d6d0f97857e55c57d769')
|
||||||
version('2.0.1', '4edd742506eaba93317249d33261fb22')
|
version('2.0.1', '4edd742506eaba93317249d33261fb22')
|
||||||
|
|
||||||
depends_on('mpi')
|
depends_on('mpi')
|
||||||
|
@ -45,7 +46,23 @@ class Wannier90(Package):
|
||||||
|
|
||||||
parallel = False
|
parallel = False
|
||||||
|
|
||||||
def install(self, spec, prefix):
|
build_targets = [
|
||||||
|
'wannier', 'post', 'lib', 'w90chk2chk', 'w90vdw', 'w90pov'
|
||||||
|
]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def makefile_name(self):
|
||||||
|
# Older versions use 'make.sys'
|
||||||
|
filename = 'make.sys'
|
||||||
|
|
||||||
|
# While newer search for 'make.inc'
|
||||||
|
if self.spec.satisfies('@2.1.0:'):
|
||||||
|
filename = 'make.inc'
|
||||||
|
|
||||||
|
abspath = join_path(self.stage.source_path, filename)
|
||||||
|
return abspath
|
||||||
|
|
||||||
|
def edit(self, spec, prefix):
|
||||||
|
|
||||||
lapack = self.spec['lapack'].libs
|
lapack = self.spec['lapack'].libs
|
||||||
blas = self.spec['blas'].libs
|
blas = self.spec['blas'].libs
|
||||||
|
@ -54,57 +71,46 @@ def install(self, spec, prefix):
|
||||||
'@MPIF90': self.spec['mpi'].mpifc,
|
'@MPIF90': self.spec['mpi'].mpifc,
|
||||||
'@LIBS': (lapack + blas).joined()
|
'@LIBS': (lapack + blas).joined()
|
||||||
}
|
}
|
||||||
#######
|
|
||||||
# TODO : this part is replicated in PEXSI
|
|
||||||
# TODO : and may be a common pattern for Editable Makefiles
|
|
||||||
# TODO : see #1186
|
|
||||||
template = join_path(
|
template = join_path(
|
||||||
os.path.dirname(inspect.getmodule(self).__file__),
|
os.path.dirname(inspect.getmodule(self).__file__),
|
||||||
'make.sys'
|
'make.sys'
|
||||||
)
|
)
|
||||||
makefile = join_path(
|
|
||||||
self.stage.source_path,
|
|
||||||
'make.sys'
|
|
||||||
)
|
|
||||||
|
|
||||||
shutil.copy(template, makefile)
|
shutil.copy(template, self.makefile_name)
|
||||||
for key, value in substitutions.items():
|
for key, value in substitutions.items():
|
||||||
filter_file(key, value, makefile)
|
filter_file(key, value, self.makefile_name)
|
||||||
######
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
|
||||||
make('wannier')
|
|
||||||
mkdirp(self.prefix.bin)
|
mkdirp(self.prefix.bin)
|
||||||
|
mkdirp(self.prefix.lib)
|
||||||
|
|
||||||
install(
|
install(
|
||||||
join_path(self.stage.source_path, 'wannier90.x'),
|
join_path(self.stage.source_path, 'wannier90.x'),
|
||||||
join_path(self.prefix.bin, 'wannier90.x')
|
join_path(self.prefix.bin, 'wannier90.x')
|
||||||
)
|
)
|
||||||
|
|
||||||
make('post')
|
|
||||||
install(
|
install(
|
||||||
join_path(self.stage.source_path, 'postw90.x'),
|
join_path(self.stage.source_path, 'postw90.x'),
|
||||||
join_path(self.prefix.bin, 'postw90.x')
|
join_path(self.prefix.bin, 'postw90.x')
|
||||||
)
|
)
|
||||||
|
|
||||||
make('lib')
|
|
||||||
mkdirp(self.prefix.lib)
|
|
||||||
install(
|
install(
|
||||||
join_path(self.stage.source_path, 'libwannier.a'),
|
join_path(self.stage.source_path, 'libwannier.a'),
|
||||||
join_path(self.prefix.lib, 'libwannier.a')
|
join_path(self.prefix.lib, 'libwannier.a')
|
||||||
)
|
)
|
||||||
|
|
||||||
make('w90chk2chk')
|
|
||||||
install(
|
install(
|
||||||
join_path(self.stage.source_path, 'w90chk2chk.x'),
|
join_path(self.stage.source_path, 'w90chk2chk.x'),
|
||||||
join_path(self.prefix.bin, 'w90chk2chk.x')
|
join_path(self.prefix.bin, 'w90chk2chk.x')
|
||||||
)
|
)
|
||||||
|
|
||||||
make('w90vdw')
|
|
||||||
install(
|
install(
|
||||||
join_path(self.stage.source_path, 'utility', 'w90vdw', 'w90vdw.x'),
|
join_path(self.stage.source_path, 'utility', 'w90vdw', 'w90vdw.x'),
|
||||||
join_path(self.prefix.bin, 'w90vdw.x')
|
join_path(self.prefix.bin, 'w90vdw.x')
|
||||||
)
|
)
|
||||||
|
|
||||||
make('w90pov')
|
|
||||||
install(
|
install(
|
||||||
join_path(self.stage.source_path, 'utility', 'w90pov', 'w90pov'),
|
join_path(self.stage.source_path, 'utility', 'w90pov', 'w90pov'),
|
||||||
join_path(self.prefix.bin, 'w90pov')
|
join_path(self.prefix.bin, 'w90pov')
|
||||||
|
|
Loading…
Reference in a new issue