spack/var/spack/repos/builtin/packages/lammps/package.py
Marco De La Pierre 38dfec42b7
Update/lammps package: new variants for refactoring of code modules (#29788)
* lammps package: kokkos variant, add support for cray-fftw

* lammps package: added bugfix version 20210929.3

* lammps package: added packages molfile, plugin, user-brownian

* lammps package: package refactor at versions 20210702 and 20210728

* lammps package: fix for ml-iap variant

* lammps package: fix for conflicts of dielectric variant

* lammps package: edits for flake8 layout compliance
2022-06-28 11:22:35 -07:00

584 lines
28 KiB
Python

# Copyright 2013-2022 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)
import datetime as dt
from spack.package import *
class Lammps(CMakePackage, CudaPackage):
"""LAMMPS stands for Large-scale Atomic/Molecular Massively
Parallel Simulator. This package uses patch releases, not
stable release.
See https://github.com/spack/spack/pull/5342 for a detailed
discussion.
"""
homepage = "https://lammps.sandia.gov/"
url = "https://github.com/lammps/lammps/archive/patch_1Sep2017.tar.gz"
git = "https://github.com/lammps/lammps.git"
tags = ['ecp', 'ecp-apps']
version('develop', branch='develop')
version('20220107', sha256='fbf6c6814968ae0d772d7b6783079ff4f249a8faeceb39992c344969e9f1edbb')
version('20211214', sha256='9f7b1ee2394678c1a6baa2c158a62345680a952eee251783e3c246b3f12db4c9')
version('20211027', sha256='c06f682fcf9d5921ca90c857a104e90fba0fe65decaac9732745e4da49281938')
version('20210929.3', sha256='d7df30f7ce0bd8b7c21949cf5bdf1877858815379cddb8a264da7a8cbf699639')
version('20210929.2', sha256='26586c1e82356b60e40359ee474818003c7788214bfe2bfe9128a3dbe5200b4d')
version('20210929.1', sha256='3b792e20864bf88b855332486996f2c540deabb4e3507e48fa4ee96ad79615ec')
version('20210929', sha256='5132f332b582be3006510562ef10bac9ef76d760f34fc08a2af556416c57cf4c')
version('20210920', sha256='e3eba96933c1dd3177143c7ac837cae69faceba196948fbad2970425db414d8c')
version('20210831', sha256='532c42576a79d72682deaf43225ca773ed9f9e35deb484a82f91905b6cba23ec')
version('20210730', sha256='c5e998c8282a835d2bcba4fceffe3cecdf9aed9bdf79fa9c945af573e632f6e7')
version('20210728', sha256='6b844d2c3f7170a59d36fbf761483aa0c63d95eda254d00fe4d10542403abe36')
version('20210702', sha256='4fdd8ca2dbde8809c0048716650b73ae1f840e22ebe24b25f6f7a499377fea57')
version('20210514', sha256='74d9c4386f2181b15a024314c42b7a0b0aaefd3b4b947aeca00fe07e5b2f3317')
version('20210408', sha256='1645147b7777de4f616b8232edf0b597868084f969c777fa0a757949c3f71f56')
version('20210310', sha256='25708378dbeccf794bc5045aceb84380bf4a3ca03fc8e5d150a26ca88d371474')
version('20201029', sha256='759705e16c1fedd6aa6e07d028cc0c78d73c76b76736668420946a74050c3726')
version('20200721', sha256='845bfeddb7b667799a1a5dbc166b397d714c3d2720316604a979d3465b4190a9')
version('20200630', sha256='413cbfabcc1541a339c7a4ab5693fbeb768f46bb1250640ba94686c6e90922fc')
version('20200505', sha256='c49d77fd602d28ebd8cf10f7359b9fc4d14668c72039028ed7792453d416de73')
version('20200303', sha256='9aa56dfb8673a06e6c88588505ec1dfc01dd94f9d60e719ed0c605e48cc06c58')
version('20200227', sha256='1aabcf38bc72285797c710b648e906151a912c36b634a9c88ac383aacf85516e')
version('20200218', sha256='73bcf146660804ced954f6a0a8dce937482677778d46018ca5a688127bf97211')
version('20200204', sha256='3bf3de546ede34ffcd89f1fca5fd66aa78c662e7c8a76e30ce593e44a00d23ce')
version('20200124', sha256='443829560d760690e1ae21ad54922f56f34f640a81e817f5cc65d2a4af3a6a5d')
version('20200109', sha256='f2fd24f6c10837801f490913d73f672ec7c6becda08465d7e834a2bfbe3d7cd6')
version('20191120', sha256='fd146bf517a6c2fb8a69ecb3749dc352eef94414739cd7855c668c690af85d27')
version('20191030', sha256='5279567f731386ffdb87800b448903a63de2591064e13b4d5216acae25b7e541')
version('20190919', sha256='0f693203afe86bc70c084c55f29330bdeea3e3ad6791f81c727f7a34a7f6caf3')
version('20190807', sha256='895d71914057e070fdf0ae5ccf9d6552b932355056690bdb8e86d96549218cc0')
version('20190605', sha256='c7b35090aef7b114d2b47a7298c1e8237dd811da87995c997bf7639cca743152')
version('20181212', sha256='ccc5d2c21c4b62ce4afe7b3a0fe2f37b83e5a5e43819b7c2e2e255cce2ce0f24')
version('20181207', sha256='d92104d008a7f1d0b6071011decc5c6dc8b936a3418b20bd34b055371302557f')
version('20181127', sha256='c076b633eda5506f895de4c73103df8b995d9fec01be82c67c7608efcc345179')
version('20181115', sha256='3bc9c166e465cac625c4a8e4060e597003f4619dadd57d3bc8d25bcd930f286e')
version('20181109', sha256='dd30fe492fa147fb6f39bfcc79d8c786b9689f7fbe86d56de58cace53b6198c9')
version('20181024', sha256='a171dff5aff7aaa2c9606ab2abc9260f2b685a5c7f6d650e7f2b59cf4aa149d6')
version('20181010', sha256='bda762ee2d2dcefe0b4e36fb689c6b9f7ede49324444ccde6c59cba727b4b02d')
version('20180918', sha256='02f143d518d8647b77137adc527faa9725c7afbc538d670253169e2a9b3fa0e6')
version('20180905', sha256='ee0df649e33a9bf4fe62e062452978731548a56b7487e8e1ce9403676217958d')
version('20180831', sha256='6c604b3ebd0cef1a5b18730d2c2eb1e659b2db65c5b1ae6240b8a0b150e4dff3')
version('20180822', sha256='9f8942ca3f8e81377ae88ccfd075da4e27d0dd677526085e1a807777c8324074')
version('20180629', sha256='1acf7d9b37b99f17563cd4c8bb00ec57bb2e29eb77c0603fd6871898de74763b')
version('20180316', sha256='a81f88c93e417ecb87cd5f5464c9a2570384a48ff13764051c5e846c3d1258c1')
version('20180222', sha256='374254d5131b7118b9ab0f0e27d20c3d13d96b03ed2b5224057f0c1065828694')
version('20170922', sha256='f0bf6eb530d528f4d261d0a261e5616cbb6e990156808b721e73234e463849d3')
version('20170901', sha256='5d88d4e92f4e0bb57c8ab30e0d20de556830af820223778b9967bec2184efd46')
def url_for_version(self, version):
split_ver = str(version).split('.')
vdate = dt.datetime.strptime(split_ver[0], "%Y%m%d")
if len(split_ver) < 2:
update = ""
else:
update = "_update{0}".format(split_ver[1])
return "https://github.com/lammps/lammps/archive/patch_{0}{1}.tar.gz".format(
vdate.strftime("%d%b%Y").lstrip('0'), update)
# List of supported optional packages
# Note: package `openmp` in this recipe is called `openmp-package`, to avoid clash
# with the pre-existing `openmp` variant
supported_packages = ['asphere', 'body', 'class2', 'colloid', 'compress',
'coreshell', 'dielectric', 'dipole', 'granular', 'kspace',
'kokkos', 'latte', 'manybody', 'mc', 'meam', 'misc',
'mliap', 'ml-iap', 'ml-snap', 'molecule', 'mpiio',
'opt', 'peri', 'plugin', 'poems', 'python', 'qeq', 'replica',
'rigid', 'shock', 'snap', 'spin', 'srd', 'voronoi',
'user-atc', 'user-adios',
'user-awpmd', 'user-bocs', 'user-brownian', 'user-cgsdk',
'user-colvars', 'user-diffraction', 'user-dpd',
'user-drude', 'user-eff', 'user-fep', 'user-h5md',
'user-lb', 'user-manifold', 'user-meamc',
'user-mesodpd', 'user-mesont', 'user-mgpt', 'user-misc',
'user-mofff', 'user-molfile', 'user-netcdf', 'user-omp',
'user-phonon', 'user-plumed', 'user-ptm', 'user-qtb',
'user-reaction', 'user-reaxc', 'user-sdpd',
'user-smd', 'user-smtbq', 'user-sph', 'user-tally',
'user-uef', 'user-yaff',
'atc', 'adios', 'awpmd', 'bocs', 'brownian', 'cg-sdk',
'colvars', 'diffraction', 'dpd-basic', 'dpd-meso',
'dpd-react', 'dpd-smooth', 'drude', 'eff', 'extra-compute',
'extra-dump', 'extra-fix', 'extra-molecule', 'extra-pair',
'fep', 'h5md', 'interlayer', 'latboltz', 'machdyn',
'manifold', 'mesont', 'mgpt', 'mofff', 'molfile', 'netcdf',
'openmp-package', 'orient', 'phonon', 'plumed', 'ptm', 'qtb',
'reaction', 'reaxff', 'smtbq', 'sph', 'tally', 'uef', 'yaff']
for pkg in supported_packages:
variant(pkg, default=False,
description='Activate the {0} package'
.format(pkg.replace('-package', '')))
variant('lib', default=True,
description='Build the liblammps in addition to the executable')
variant('mpi', default=True,
description='Build with mpi')
variant('jpeg', default=True,
description='Build with jpeg support')
variant('png', default=True,
description='Build with png support')
variant('ffmpeg', default=True,
description='Build with ffmpeg support')
variant('kim', default=True,
description='Build with KIM support')
variant('openmp', default=True, description='Build with OpenMP')
variant('opencl', default=False, description='Build with OpenCL')
variant('exceptions', default=False,
description='Build with lammps exceptions')
variant('cuda_mps', default=False,
description='(CUDA only) Enable tweaks for running ' +
'with Nvidia CUDA Multi-process services daemon')
variant(
'lammps_sizes', default='smallbig',
description='LAMMPS integer sizes (smallsmall: all 32-bit, smallbig:' +
'64-bit #atoms #timesteps, bigbig: also 64-bit imageint, 64-bit atom ids)',
values=('smallbig', 'bigbig', 'smallsmall'), multi=False
)
depends_on('mpi', when='+mpi')
depends_on('mpi', when='+mpiio')
depends_on('fftw-api@3', when='+kspace')
depends_on('voropp+pic', when='+voronoi')
depends_on('netcdf-c+mpi', when='+user-netcdf')
depends_on('netcdf-c+mpi', when='+netcdf')
depends_on('blas', when='+user-atc')
depends_on('blas', when='+atc')
depends_on('lapack', when='+user-atc')
depends_on('lapack', when='+atc')
depends_on('opencl', when='+opencl')
depends_on('latte@1.0.1', when='@:20180222+latte')
depends_on('latte@1.1.1:', when='@20180316:20180628+latte')
depends_on('latte@1.2.1:', when='@20180629:20200505+latte')
depends_on('latte@1.2.2:', when='@20200602:+latte')
depends_on('blas', when='+latte')
depends_on('lapack', when='+latte')
depends_on('python', when='+python')
depends_on('mpi', when='+user-lb')
depends_on('mpi', when='+latboltz')
depends_on('mpi', when='+user-h5md')
depends_on('mpi', when='+h5md')
depends_on('hdf5', when='+user-h5md')
depends_on('hdf5', when='+h5md')
depends_on('jpeg', when='+jpeg')
depends_on('kim-api', when='+kim')
depends_on('libpng', when='+png')
depends_on('ffmpeg', when='+ffmpeg')
depends_on('kokkos+deprecated_code+shared@3.0.00', when='@20200303+kokkos')
depends_on('kokkos+shared@3.1:', when='@20200505:+kokkos')
depends_on('adios2', when='+user-adios')
depends_on('adios2', when='+adios')
depends_on('plumed', when='+user-plumed')
depends_on('plumed', when='+plumed')
depends_on('eigen@3:', when='+user-smd')
depends_on('eigen@3:', when='+machdyn')
depends_on('py-cython', when='+mliap+python')
depends_on('py-cython', when='+ml-iap+python')
depends_on('py-numpy', when='+mliap+python')
depends_on('py-numpy', when='+ml-iap+python')
conflicts('+cuda', when='+opencl')
conflicts('+body', when='+poems@:20180628')
conflicts('+latte', when='@:20170921')
conflicts('+python', when='~lib')
conflicts('+qeq', when='~manybody')
conflicts('+user-atc', when='~manybody')
conflicts('+atc', when='~manybody')
conflicts('+user-misc', when='~manybody')
conflicts('+user-phonon', when='~kspace')
conflicts('+phonon', when='~kspace')
conflicts('%gcc@9:', when='@:20200303+openmp')
conflicts('+kokkos', when='@:20200227')
conflicts('+dielectric', when='~kspace')
conflicts('+dielectric', when='@:20210702~user-misc')
conflicts('+dielectric', when='@20210728:~extra-pair')
conflicts(
'+meam', when='@20181212:20210527',
msg='+meam is removed between @20181212 and @20210527, use +user-meamc instead')
conflicts(
'+user-meamc', when='@:20181212',
msg='+user-meamc only added @20181212, use +meam instead')
conflicts(
'+user-reaction', when='@:20200303',
msg='+user-reaction only supported for version 20200505 and later')
conflicts(
'+plugin', when='@:20210310',
msg='+plugin only supported for version 20210408 and later')
conflicts(
'+user-brownian', when='@:20210408',
msg='+user-brownian only supported for version 20210514 and later')
conflicts(
'+dielectric', when='@:20210527',
msg='+dielectric only supported for version 20210702 and later')
conflicts(
'+dpd-basic', when='@:20210527',
msg='+dpd-basic only supported for version 20210702 and later')
conflicts('+mliap', when='~snap')
conflicts('+ml-iap', when='~ml-snap')
conflicts(
'+user-adios +mpi', when='^adios2~mpi',
msg='With +user-adios, mpi setting for adios2 and lammps must be the same')
conflicts(
'+user-adios ~mpi', when='^adios2+mpi',
msg='With +user-adios, mpi setting for adios2 and lammps must be the same')
conflicts(
'+adios +mpi', when='^adios2~mpi',
msg='With +adios, mpi setting for adios2 and lammps must be the same')
conflicts(
'+adios ~mpi', when='^adios2+mpi',
msg='With +adios, mpi setting for adios2 and lammps must be the same')
# In the following, package refactoring at 2 July 2021
conflicts(
'+mliap', when='@20210702:',
msg='+mliap was removed after @20210527, use +ml-iap instead')
conflicts(
'+ml-iap', when='@:20210527',
msg='+ml-iap only added @20210702, use +mliap instead')
conflicts(
'+snap', when='@20210702:',
msg='+snap was removed after @20210527, use +ml-snap instead')
conflicts(
'+ml-snap', when='@:20210527',
msg='+ml-snap only added @20210702, use +snap instead')
#
conflicts(
'+user-atc', when='@20210702:',
msg='+user-atc was removed after @20210527, use +atc instead')
conflicts(
'+atc', when='@:20210527',
msg='+atc only added @20210702, use +user-atc instead')
conflicts(
'+user-adios', when='@20210702:',
msg='+user-adios was removed after @20210527, use +adios instead')
conflicts(
'+adios', when='@:20210527',
msg='+adios only added @20210702, use +user-adios instead')
conflicts(
'+user-awpmd', when='@20210702:',
msg='+user-awpmd was removed after @20210527, use +awpmd instead')
conflicts(
'+awpmd', when='@:20210527',
msg='+awpmd only added @20210702, use +user-awpmd instead')
conflicts(
'+user-bocs', when='@20210702:',
msg='+user-bocs was removed after @20210527, use +bocs instead')
conflicts(
'+bocs', when='@:20210527',
msg='+bocs only added @20210702, use +user-bocs instead')
conflicts(
'+user-brownian', when='@20210702:',
msg='+user-brownian was removed after @20210527, use +brownian instead')
conflicts(
'+brownian', when='@:20210527',
msg='+brownian only added @20210702, use +user-brownian instead')
conflicts(
'+user-cgsdk', when='@20210702:',
msg='+user-cgsdk was removed after @20210527, use +cg-sdk instead')
conflicts(
'+cg-sdk', when='@:20210527',
msg='+cg-sdk only added @20210702, use +user-cgsdk instead')
conflicts(
'+user-colvars', when='@20210702:',
msg='+user-colvars was removed after @20210527, use +colvars instead')
conflicts(
'+colvars', when='@:20210527',
msg='+colvars only added @20210702, use +user-colvars instead')
conflicts(
'+user-diffraction', when='@20210702:',
msg='+user-diffraction was removed after @20210527, use +diffraction instead')
conflicts(
'+diffraction', when='@:20210527',
msg='+diffraction only added @20210702, use +user-diffraction instead')
conflicts(
'+user-dpd', when='@20210702:',
msg='+user-dpd was removed after @20210527, use +dpd-react instead')
conflicts(
'+dpd-react', when='@:20210527',
msg='+dpd-react only added @20210702, use +user-dpd instead')
conflicts(
'+user-drude', when='@20210702:',
msg='+user-drude was removed after @20210527, use +drude instead')
conflicts(
'+drude', when='@:20210527',
msg='+drude only added @20210702, use +user-drude instead')
conflicts(
'+user-eff', when='@20210702:',
msg='+user-eff was removed after @20210527, use +eff instead')
conflicts(
'+eff', when='@:20210527',
msg='+eff only added @20210702, use +user-eff instead')
conflicts(
'+user-fep', when='@20210702:',
msg='+user-fep was removed after @20210527, use +fep instead')
conflicts(
'+fep', when='@:20210527',
msg='+fep only added @20210702, use +user-fep instead')
conflicts(
'+user-h5md', when='@20210702:',
msg='+user-h5md was removed after @20210527, use +h5md instead')
conflicts(
'+h5md', when='@:20210527',
msg='+h5md only added @20210702, use +user-h5md instead')
conflicts(
'+user-lb', when='@20210702:',
msg='+user-lb was removed after @20210527, use +latboltz instead')
conflicts(
'+latboltz', when='@:20210527',
msg='+latboltz only added @20210702, use +user-lb instead')
conflicts(
'+user-manifold', when='@20210702:',
msg='+user-manifold was removed after @20210527, use +manifold instead')
conflicts(
'+manifold', when='@:20210527',
msg='+manifold only added @20210702, use +user-manifold instead')
conflicts(
'+user-meamc', when='@20210702:',
msg='+user-meamc was removed after @20210527, use +meam instead')
conflicts(
'+user-mesodpd', when='@20210702:',
msg='+user-mesodpd was removed after @20210527, use +dpd-meso instead')
conflicts(
'+dpd-meso', when='@:20210527',
msg='+dpd-meso only added @20210702, use +user-mesodpd instead')
conflicts(
'+user-mesont', when='@20210702:',
msg='+user-mesont was removed after @20210527, use +mesont instead')
conflicts(
'+mesont', when='@:20210527',
msg='+mesont only added @20210702, use +user-mesont instead')
conflicts(
'+user-mgpt', when='@20210702:',
msg='+user-mgpt was removed after @20210527, use +mgpt instead')
conflicts(
'+mgpt', when='@:20210527',
msg='+mgpt only added @20210702, use +user-mgpt instead')
conflicts(
'+user-mofff', when='@20210702:',
msg='+user-mofff was removed after @20210527, use +mofff instead')
conflicts(
'+mofff', when='@:20210527',
msg='+mofff only added @20210702, use +user-mofff instead')
conflicts(
'+user-molfile', when='@20210702:',
msg='+user-molfile was removed after @20210527, use +molfile instead')
conflicts(
'+molfile', when='@:20210527',
msg='+molfile only added @20210702, use +user-molfile instead')
conflicts(
'+user-netcdf', when='@20210702:',
msg='+user-netcdf was removed after @20210527, use +netcdf instead')
conflicts(
'+netcdf', when='@:20210527',
msg='+netcdf only added @20210702, use +user-netcdf instead')
conflicts(
'+user-omp', when='@20210702:',
msg='+user-omp was removed after @20210527, use +openmp-package instead')
conflicts(
'+openmp-package', when='@:20210527',
msg='+openmp-package only added @20210702, use +user-omp instead')
conflicts(
'+user-phonon', when='@20210702:',
msg='+user-phonon was removed after @20210527, use +phonon instead')
conflicts(
'+phonon', when='@:20210527',
msg='+phonon only added @20210702, use +user-phonon instead')
conflicts(
'+user-plumed', when='@20210702:',
msg='+user-plumed was removed after @20210527, use +plumed instead')
conflicts(
'+plumed', when='@:20210527',
msg='+plumed only added @20210702, use +user-plumed instead')
conflicts(
'+user-ptm', when='@20210702:',
msg='+user-ptm was removed after @20210527, use +ptm instead')
conflicts(
'+ptm', when='@:20210527',
msg='+ptm only added @20210702, use +user-ptm instead')
conflicts(
'+user-qtb', when='@20210702:',
msg='+user-qtb was removed after @20210527, use +qtb instead')
conflicts(
'+qtb', when='@:20210527',
msg='+qtb only added @20210702, use +user-qtb instead')
conflicts(
'+user-reaction', when='@20210702:',
msg='+user-reaction was removed after @20210527, use +reaction instead')
conflicts(
'+reaction', when='@:20210527',
msg='+reaction only added @20210702, use +user-reaction instead')
conflicts(
'+user-reaxc', when='@20210702:',
msg='+user-reaxc was removed after @20210527, use +reaxff instead')
conflicts(
'+reaxff', when='@:20210527',
msg='+reaxff only added @20210702, use +user-reaxc instead')
conflicts(
'+user-sdpd', when='@20210702:',
msg='+user-sdpd was removed after @20210527, use +dpd-smooth instead')
conflicts(
'+dpd-smooth', when='@:20210527',
msg='+dpd-smooth only added @20210702, use +user-sdpd instead')
conflicts(
'+user-smd', when='@20210702:',
msg='+user-smd was removed after @20210527, use +machdyn instead')
conflicts(
'+machdyn', when='@:20210527',
msg='+machdyn only added @20210702, use +user-smd instead')
conflicts(
'+user-smtbq', when='@20210702:',
msg='+user-smtbq was removed after @20210527, use +smtbq instead')
conflicts(
'+smtbq', when='@:20210527',
msg='+smtbq only added @20210702, use +user-smtbq instead')
conflicts(
'+user-sph', when='@20210702:',
msg='+user-sph was removed after @20210527, use +sph instead')
conflicts(
'+sph', when='@:20210527',
msg='+sph only added @20210702, use +user-sph instead')
conflicts(
'+user-tally', when='@20210702:',
msg='+user-tally was removed after @20210527, use +tally instead')
conflicts(
'+tally', when='@:20210527',
msg='+tally only added @20210702, use +user-tally instead')
conflicts(
'+user-uef', when='@20210702:',
msg='+user-uef was removed after @20210527, use +uef instead')
conflicts(
'+uef', when='@:20210527',
msg='+uef only added @20210702, use +user-uef instead')
conflicts(
'+user-yaff', when='@20210702:',
msg='+user-yaff was removed after @20210527, use +yaff instead')
conflicts(
'+yaff', when='@:20210527',
msg='+yaff only added @20210702, use +user-yaff instead')
# In the following, package refactoring at 28 July 2021
conflicts(
'+user-misc', when='@20210728:',
msg='+user-misc was removed after @20210702, and split over multiple packages')
conflicts(
'+extra-compute', when='@:20210702',
msg='+extra-compute only added @20210728, use +user-misc instead')
conflicts(
'+extra-dump', when='@:20210702',
msg='+extra-dump only added @20210728, use +user-misc instead')
conflicts(
'+extra-fix', when='@:20210702',
msg='+extra-fix only added @20210728, use +user-misc instead')
conflicts(
'+extra-molecule', when='@:20210702',
msg='+extra-molecule only added @20210728, use +user-misc instead')
conflicts(
'+extra-pair', when='@:20210702',
msg='+extra-pair only added @20210728, use +user-misc instead')
conflicts(
'+interlayer', when='@:20210702',
msg='+interlayer only added @20210728, use +user-misc instead')
conflicts(
'+orient', when='@:20210702',
msg='+orient only added @20210728, use +user-misc instead')
patch("lib.patch", when="@20170901")
patch("660.patch", when="@20170922")
patch("gtest_fix.patch", when="@:20210310 %aocc@3.2.0")
patch("https://github.com/lammps/lammps/commit/562300996285fdec4ef74542383276898555af06.patch?full_index=1",
sha256="e6f1b62bbfdc79d632f4cea98019202d0dd25aa4ae61a70df1164cb4f290df79",
when="@20200721 +cuda")
root_cmakelists_dir = 'cmake'
def cmake_args(self):
spec = self.spec
mpi_prefix = 'ENABLE'
pkg_prefix = 'ENABLE'
if spec.satisfies('@20180629:'):
mpi_prefix = 'BUILD'
pkg_prefix = 'PKG'
args = [
self.define_from_variant('BUILD_SHARED_LIBS', 'lib'),
self.define_from_variant('LAMMPS_EXCEPTIONS', 'exceptions'),
'-D{0}_MPI={1}'.format(
mpi_prefix,
'ON' if '+mpi' in spec else 'OFF'),
self.define_from_variant('BUILD_OMP', 'openmp'),
'-DENABLE_TESTING=ON'
]
if spec.satisfies('+cuda'):
args.append('-DPKG_GPU=ON')
args.append('-DGPU_API=cuda')
cuda_arch = spec.variants['cuda_arch'].value
if cuda_arch != 'none':
args.append('-DGPU_ARCH=sm_{0}'.format(cuda_arch[0]))
args.append(self.define_from_variant('CUDA_MPS_SUPPORT', 'cuda_mps'))
elif spec.satisfies('+opencl'):
args.append('-DPKG_GPU=ON')
args.append('-DGPU_API=opencl')
else:
args.append('-DPKG_GPU=OFF')
if spec.satisfies('@20180629:+lib'):
args.append('-DBUILD_LIB=ON')
if spec.satisfies('%aocc'):
cxx_flags = '-Ofast -mfma -fvectorize -funroll-loops'
args.append(self.define('CMAKE_CXX_FLAGS_RELEASE', cxx_flags))
lammps_sizes = self.spec.variants['lammps_sizes'].value
args.append(self.define('LAMMPS_SIZES', lammps_sizes))
args.append(self.define_from_variant('WITH_JPEG', 'jpeg'))
args.append(self.define_from_variant('WITH_PNG', 'png'))
args.append(self.define_from_variant('WITH_FFMPEG', 'ffmpeg'))
for pkg in self.supported_packages:
opt = '-D{0}_{1}'.format(pkg_prefix, pkg.replace('-package', '').upper())
if '+{0}'.format(pkg) in spec:
args.append('{0}=ON'.format(opt))
else:
args.append('{0}=OFF'.format(opt))
if '+kim' in spec:
args.append('-DPKG_KIM=ON')
if '+kspace' in spec:
if '^fftw' in spec:
args.append('-DFFT=FFTW3')
if '^mkl' in spec:
args.append('-DFFT=MKL')
if '^amdfftw' in spec:
# If FFTW3 is selected, then CMake will try to detect, if threaded
# FFTW libraries are available and enable them by default.
args.append(self.define('FFT', 'FFTW3'))
# Using the -DFFT_SINGLE setting trades off a little accuracy
# for reduced memory use and parallel communication costs
# for transposing 3d FFT data.
args.append(self.define('FFT_SINGLE', True))
if '^cray-fftw' in spec:
args.append('-DFFT=FFTW3')
if '+kokkos' in spec:
args.append('-DEXTERNAL_KOKKOS=ON')
if '+user-adios' in spec or '+adios' in spec:
args.append('-DADIOS2_DIR={0}'.format(self.spec['adios2'].prefix))
if '+user-plumed' in spec or '+plumed' in spec:
args.append('-DDOWNLOAD_PLUMED=no')
if '+shared' in self.spec['plumed']:
args.append('-DPLUMED_MODE=shared')
else:
args.append('-DPLUMED_MODE=static')
if '+user-smd' in spec or '+machdyn' in spec:
args.append('-DDOWNLOAD_EIGEN3=no')
args.append('-DEIGEN3_INCLUDE_DIR={0}'.format(
self.spec['eigen'].prefix.include))
return args
def setup_run_environment(self, env):
env.set('LAMMPS_POTENTIALS',
self.prefix.share.lammps.potentials)