New package: rmgdft. (#23313)
This commit is contained in:
parent
34c9c89b55
commit
8793d93e8c
1 changed files with 96 additions and 0 deletions
96
var/spack/repos/builtin/packages/rmgdft/package.py
Normal file
96
var/spack/repos/builtin/packages/rmgdft/package.py
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
|
||||||
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||||
|
|
||||||
|
|
||||||
|
from spack import *
|
||||||
|
|
||||||
|
|
||||||
|
class Rmgdft(CMakePackage):
|
||||||
|
"""RMGDFT is a high performance real-space density functional code
|
||||||
|
designed for large scale electronic structure calculations."""
|
||||||
|
|
||||||
|
homepage = "http://www.rmgdft.org/"
|
||||||
|
git = "https://github.com/RMGDFT/rmgdft.git"
|
||||||
|
maintainers = ['elbriggs']
|
||||||
|
tags = ['ecp', 'ecp-apps']
|
||||||
|
version('master', branch='master')
|
||||||
|
version('4.2.2', tag='v4.2.2')
|
||||||
|
version('4.2.1', tag='v4.2.1')
|
||||||
|
|
||||||
|
variant('build_type', default='Release',
|
||||||
|
description='The build type to build',
|
||||||
|
values=('Debug', 'Release', 'RelWithDebInfo'))
|
||||||
|
|
||||||
|
variant('qmcpack', default=True,
|
||||||
|
description='Build with qmcpack interface.')
|
||||||
|
|
||||||
|
variant('local_orbitals', default=True,
|
||||||
|
description='Build O(N) variant.')
|
||||||
|
|
||||||
|
# Normally we want this but some compilers (e.g. IBM) are
|
||||||
|
# very slow when this is on so provide the option to disable
|
||||||
|
variant('internal_pp', default=True,
|
||||||
|
description='Include built-in pseudopotentials. Normally '
|
||||||
|
'enabled but some compilers are slow when '
|
||||||
|
'this is on so provide a disable option.')
|
||||||
|
|
||||||
|
# RMGDFT 4.0.0 or later requires compiler support for C++14
|
||||||
|
compiler_warning = 'RMGDFT 4.0.0 or later requires a ' \
|
||||||
|
'compiler with support for C++14'
|
||||||
|
conflicts('%gcc@:4', when='@3.6.0:', msg=compiler_warning)
|
||||||
|
conflicts('%intel@:17', when='@3.6.0:', msg=compiler_warning)
|
||||||
|
conflicts('%pgi@:17', when='@3.6.0:', msg=compiler_warning)
|
||||||
|
conflicts('%llvm@:3.4', when='@3.6.0:', msg=compiler_warning)
|
||||||
|
|
||||||
|
depends_on('cmake', type='build')
|
||||||
|
depends_on('boost@1.66.0:')
|
||||||
|
depends_on('fftw-api@3')
|
||||||
|
depends_on('mpi')
|
||||||
|
depends_on('hdf5')
|
||||||
|
|
||||||
|
# RMG is a hybrid MPI/threads code and performance is
|
||||||
|
# highly dependent on the threading model of the blas
|
||||||
|
# libraries. Openblas-openmp is known to work well
|
||||||
|
# so if spack yields a non-performant build you can
|
||||||
|
# try to adjust your system config to use it.
|
||||||
|
depends_on('blas')
|
||||||
|
conflicts('^atlas',
|
||||||
|
msg='The atlas threading model is incompatible with RMG')
|
||||||
|
|
||||||
|
@property
|
||||||
|
def build_targets(self):
|
||||||
|
spec = self.spec
|
||||||
|
targets = ['rmg-cpu']
|
||||||
|
if '+local_orbitals' in spec:
|
||||||
|
targets.append('rmg-on-cpu')
|
||||||
|
return targets
|
||||||
|
|
||||||
|
def cmake_args(self):
|
||||||
|
spec = self.spec
|
||||||
|
args = []
|
||||||
|
if '+qmcpack' in spec:
|
||||||
|
args.append('-DQMCPACK=1')
|
||||||
|
else:
|
||||||
|
args.append('-DQMCPACK=0')
|
||||||
|
if '+internal_pp' in spec:
|
||||||
|
args.append('-DUSE_INTERNAL_PSEUDOPOTENTIALS=1')
|
||||||
|
else:
|
||||||
|
args.append('-DUSE_INTERNAL_PSEUDOPOTENTIALS=0')
|
||||||
|
return args
|
||||||
|
|
||||||
|
def install(self, spec, prefix):
|
||||||
|
|
||||||
|
# create top-level directories
|
||||||
|
mkdirp(prefix.bin)
|
||||||
|
mkdirp(prefix.share.tests.RMG)
|
||||||
|
|
||||||
|
with working_dir(self.build_directory):
|
||||||
|
install('rmg-cpu', prefix.bin)
|
||||||
|
if '+local_orbitals' in spec:
|
||||||
|
install('rmg-on-cpu', prefix.bin)
|
||||||
|
|
||||||
|
# install tests
|
||||||
|
with working_dir(self.build_directory):
|
||||||
|
install_tree('tests/RMG', prefix.share.tests.RMG)
|
Loading…
Reference in a new issue