Abinit: Added package(s) (#1995)
* First version of Abinit package * Ignore *.swp files * Add libxc, etsf_io packages * AtomPaw package * Make Abinit depend on mpi@2: and external version of libxc, netcdf, hdf5, etsf_io * etsf_io: install Fortran modules in prefix.include * Remove etsf_io from abinit requirements * Add libxc2.2.1 (required by Abinit and atompaw) * Cleanup * Run make check * Cleanup * Use ld_flags instead of hard-coded libs, fix pep8, add copyright * Put scalapack before lapackblas
This commit is contained in:
parent
37d125b890
commit
949766d92e
5 changed files with 307 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -15,6 +15,7 @@
|
|||
/share/spack/modules
|
||||
/share/spack/lmod
|
||||
/TAGS
|
||||
*.swp
|
||||
/htmlcov
|
||||
.coverage
|
||||
#*
|
||||
|
|
175
var/spack/repos/builtin/packages/abinit/package.py
Normal file
175
var/spack/repos/builtin/packages/abinit/package.py
Normal file
|
@ -0,0 +1,175 @@
|
|||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
#
|
||||
# Author: Matteo Giantomassi <matteo.giantomassiNOSPAM AT uclouvain.be>
|
||||
# Date: October 11, 2016
|
||||
|
||||
from spack import *
|
||||
|
||||
|
||||
class Abinit(Package):
|
||||
"""ABINIT is a package whose main program allows one to find the total
|
||||
energy, charge density and electronic structure of systems made of
|
||||
electrons and nuclei (molecules and periodic solids) within
|
||||
Density Functional Theory (DFT), using pseudopotentials and a planewave
|
||||
or wavelet basis. ABINIT also includes options to optimize the geometry
|
||||
according to the DFT forces and stresses, or to perform molecular dynamics
|
||||
simulations using these forces, or to generate dynamical matrices,
|
||||
Born effective charges, and dielectric tensors, based on Density-Functional
|
||||
Perturbation Theory, and many more properties. Excited states can be
|
||||
computed within the Many-Body Perturbation Theory (the GW approximation and
|
||||
the Bethe-Salpeter equation), and Time-Dependent Density Functional Theory
|
||||
(for molecules). In addition to the main ABINIT code, different utility
|
||||
programs are provided.
|
||||
"""
|
||||
|
||||
homepage = "http://www.abinit.org"
|
||||
url = "http://ftp.abinit.org/abinit-8.0.8b.tar.gz"
|
||||
|
||||
# Versions before 8.0.8b are not supported.
|
||||
version("8.0.8b", "abc9e303bfa7f9f43f95598f87d84d5d")
|
||||
|
||||
variant('mpi', default=True,
|
||||
description='Builds with MPI support. Requires MPI2+')
|
||||
variant('openmp', default=False,
|
||||
description='Enables OpenMP threads. Use threaded FFTW3')
|
||||
variant('scalapack', default=False,
|
||||
description='Enables scalapack support. Requires MPI')
|
||||
# variant('elpa', default=False,
|
||||
# description='Uses elpa instead of scalapack. Requires MPI')
|
||||
|
||||
# TODO: To be tested.
|
||||
# It was working before the last `git pull` but now all tests crash.
|
||||
# For the time being, the default is netcdf3 and the internal fallbacks
|
||||
variant('hdf5', default=False,
|
||||
description='Enables HDF5+Netcdf4 with MPI. WARNING: experimental')
|
||||
|
||||
# Add dependencies
|
||||
# currently one cannot forward options to virtual packages, see #1712.
|
||||
# depends_on("blas", when="~openmp")
|
||||
# depends_on("blas+openmp", when="+openmp")
|
||||
depends_on('blas')
|
||||
depends_on("lapack")
|
||||
|
||||
# Require MPI2+
|
||||
depends_on("mpi@2:", when="+mpi")
|
||||
|
||||
depends_on("scalapack", when="+scalapack+mpi")
|
||||
# depends_on("elpa", when="+elpa+mpi~openmp")
|
||||
# depends_on("elpa+openmp", when="+elpa+mpi+openmp")
|
||||
|
||||
depends_on("fftw+float", when="~openmp")
|
||||
depends_on("fftw+float+openmp", when="+openmp")
|
||||
|
||||
depends_on("netcdf-fortran", when="+hdf5")
|
||||
depends_on("hdf5+mpi", when='+mpi+hdf5') # required for NetCDF-4 support
|
||||
|
||||
# pin libxc version
|
||||
depends_on("libxc@2.2.1")
|
||||
|
||||
def validate(self, spec):
|
||||
"""
|
||||
Checks if incompatible variants have been activated at the same time
|
||||
|
||||
:param spec: spec of the package
|
||||
:raises RuntimeError: in case of inconsistencies
|
||||
"""
|
||||
error = 'you cannot ask for \'+{variant}\' when \'+mpi\' is not active'
|
||||
|
||||
if '+scalapack' in spec and '~mpi' in spec:
|
||||
raise RuntimeError(error.format(variant='scalapack'))
|
||||
|
||||
if '+elpa' in spec and ('~mpi' in spec or '~scalapack' in spec):
|
||||
raise RuntimeError(error.format(variant='elpa'))
|
||||
|
||||
def install(self, spec, prefix):
|
||||
self.validate(spec)
|
||||
|
||||
options = ['--prefix=%s' % prefix]
|
||||
oapp = options.append
|
||||
|
||||
if '+mpi' in spec:
|
||||
# MPI version:
|
||||
# let the configure script auto-detect MPI support from mpi_prefix
|
||||
oapp("--with-mpi-prefix=%s" % spec["mpi"].prefix)
|
||||
oapp("--enable-mpi=yes")
|
||||
oapp("--enable-mpi-io=yes")
|
||||
|
||||
# Activate OpenMP in Abinit Fortran code.
|
||||
if '+openmp' in spec:
|
||||
oapp('--enable-openmp=yes')
|
||||
|
||||
# BLAS/LAPACK
|
||||
if '+scalapack' in spec:
|
||||
oapp("--with-linalg-flavor=custom+scalapack")
|
||||
linalg = (spec['scalapack'].scalapack_libs +
|
||||
spec['lapack'].lapack_libs + spec['blas'].blas_libs)
|
||||
|
||||
# elif '+elpa' in spec:
|
||||
else:
|
||||
oapp("--with-linalg-flavor=custom")
|
||||
linalg = spec['lapack'].lapack_libs + spec['blas'].blas_libs
|
||||
|
||||
oapp("--with-linalg-libs=%s" % linalg.ld_flags)
|
||||
|
||||
# FFTW3: use sequential or threaded version if +openmp
|
||||
fftflavor, fftlibs = "fftw3", "-lfftw3 -lfftw3f"
|
||||
if '+openmp' in spec:
|
||||
fftflavor = "fftw3-threads"
|
||||
fftlibs = "-lfftw3_omp -lfftw3 -lfftw3f"
|
||||
|
||||
options.extend([
|
||||
"--with-fft-flavor=%s" % fftflavor,
|
||||
"--with-fft-incs=-I%s" % spec["fftw"].prefix.include,
|
||||
"--with-fft-libs=-L%s %s" % (spec["fftw"].prefix.lib, fftlibs),
|
||||
])
|
||||
oapp("--with-dft-flavor=atompaw+libxc")
|
||||
|
||||
# LibXC library
|
||||
options.extend([
|
||||
"with_libxc_incs=-I%s" % spec["libxc"].prefix.include,
|
||||
"with_libxc_libs=-L%s -lxcf90 -lxc" % spec["libxc"].prefix.lib,
|
||||
])
|
||||
|
||||
# Netcdf4/HDF5
|
||||
if "+hdf5" in spec:
|
||||
oapp("--with-trio-flavor=netcdf")
|
||||
hdf_libs = "-L%s -lhdf5_hl -lhdf5" % spec["hdf5"].prefix.lib
|
||||
options.extend([
|
||||
"--with-netcdf-incs=-I%s" % (
|
||||
spec["netcdf-fortran"].prefix.include),
|
||||
"--with-netcdf-libs=-L%s -lnetcdff -lnetcdf %s" % (
|
||||
spec["netcdf-fortran"].prefix.lib, hdf_libs),
|
||||
])
|
||||
else:
|
||||
# Use internal fallbacks (netcdf3)
|
||||
oapp("--with-trio-flavor=netcdf-fallback")
|
||||
|
||||
configure(*options)
|
||||
make()
|
||||
|
||||
# make("check")
|
||||
# make("tests_in")
|
||||
make("install")
|
63
var/spack/repos/builtin/packages/atompaw/package.py
Normal file
63
var/spack/repos/builtin/packages/atompaw/package.py
Normal file
|
@ -0,0 +1,63 @@
|
|||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
|
||||
from spack import *
|
||||
|
||||
|
||||
class Atompaw(Package):
|
||||
"""A Projector Augmented Wave (PAW) code for generating
|
||||
atom-centered functions.
|
||||
|
||||
Official website: http://pwpaw.wfu.edu
|
||||
|
||||
User's guide: ~/doc/atompaw-usersguide.pdf
|
||||
"""
|
||||
homepage = "http://users.wfu.edu/natalie/papers/pwpaw/man.html"
|
||||
url = "http://users.wfu.edu/natalie/papers/pwpaw/atompaw-4.0.0.13.tar.gz"
|
||||
|
||||
version('4.0.0.13', 'af4a042380356f6780183c4b325aad1d')
|
||||
version('3.1.0.3', 'c996a277e11707887177f47bbb229aa6')
|
||||
|
||||
depends_on("lapack")
|
||||
depends_on("blas")
|
||||
|
||||
# pin libxc version
|
||||
depends_on("libxc@2.2.1")
|
||||
|
||||
def install(self, spec, prefix):
|
||||
options = ['--prefix=%s' % prefix]
|
||||
|
||||
linalg = spec['lapack'].lapack_libs + spec['blas'].blas_libs
|
||||
options.extend([
|
||||
"--with-linalg-libs=%s" % linalg.ld_flags,
|
||||
"--enable-libxc",
|
||||
"--with-libxc-incs=-I%s" % spec["libxc"].prefix.include,
|
||||
"--with-libxc-libs=-L%s -lxcf90 -lxc" % spec["libxc"].prefix.lib,
|
||||
])
|
||||
|
||||
configure(*options)
|
||||
make(parallel=False) # parallel build fails
|
||||
make("check")
|
||||
make("install")
|
67
var/spack/repos/builtin/packages/etsf_io/package.py
Normal file
67
var/spack/repos/builtin/packages/etsf_io/package.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
##############################################################################
|
||||
# Copyright (c) 2013-2016, Lawrence Livermore National Security, LLC.
|
||||
# Produced at the Lawrence Livermore National Laboratory.
|
||||
#
|
||||
# This file is part of Spack.
|
||||
# Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved.
|
||||
# LLNL-CODE-647188
|
||||
#
|
||||
# For details, see https://github.com/llnl/spack
|
||||
# Please also see the LICENSE file for our notice and the LGPL.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License (as
|
||||
# published by the Free Software Foundation) version 2.1, February 1999.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful, but
|
||||
# WITHOUT ANY WARRANTY; without even the IMPLIED WARRANTY OF
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the terms and
|
||||
# conditions of the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
##############################################################################
|
||||
|
||||
from spack import *
|
||||
|
||||
|
||||
class EtsfIo(Package):
|
||||
"""ETSF_IO is a library implementing the Nanoquanta/ETSF file
|
||||
format specifications.
|
||||
|
||||
ETSF_IO enables an architecture-independent exchange of crystallographic
|
||||
data, electronic wavefunctions, densities and potentials, as well as
|
||||
spectroscopic data. It is meant to be used by quantum-physical and
|
||||
quantum-chemical applications relying upon Density Functional Theory (DFT).
|
||||
"""
|
||||
|
||||
homepage = "http://www.etsf.eu/resources/software/libraries_and_tools"
|
||||
url = "https://launchpad.net/etsf-io/1.0/1.0.4/+download/etsf_io-1.0.4.tar.gz"
|
||||
|
||||
version('1.0.4', '32d0f7143278bd925b334c69fa425da1')
|
||||
|
||||
depends_on("netcdf-fortran")
|
||||
depends_on("hdf5+mpi~cxx", when='+mpi') # required for NetCDF-4 support
|
||||
|
||||
def install(self, spec, prefix):
|
||||
options = ['--prefix=%s' % prefix]
|
||||
oapp = options.append
|
||||
|
||||
# Specify installation directory for Fortran module files
|
||||
# Default is [INCLUDEDIR/FC_TYPE]
|
||||
oapp("--with-moduledir=%s" % prefix.include)
|
||||
|
||||
# Netcdf4/HDF
|
||||
hdf_libs = "-L%s -lhdf5_hl -lhdf5" % spec["hdf5"].prefix.lib
|
||||
options.extend([
|
||||
"--with-netcdf-incs=-I%s" % spec["netcdf-fortran"].prefix.include,
|
||||
"--with-netcdf-libs=-L%s -lnetcdff -lnetcdf %s" % (
|
||||
spec["netcdf-fortran"].prefix.lib, hdf_libs),
|
||||
])
|
||||
|
||||
configure(*options)
|
||||
|
||||
make()
|
||||
make("check")
|
||||
make("install")
|
|
@ -34,6 +34,7 @@ class Libxc(Package):
|
|||
|
||||
version('3.0.0', '8227fa3053f8fc215bd9d7b0d36de03c')
|
||||
version('2.2.2', 'd9f90a0d6e36df6c1312b6422280f2ec')
|
||||
version('2.2.1', '38dc3a067524baf4f8521d5bb1cd0b8f')
|
||||
|
||||
def install(self, spec, prefix):
|
||||
# Optimizations for the Intel compiler, suggested by CP2K
|
||||
|
|
Loading…
Reference in a new issue