diff --git a/Custom_EasyBlocks/README.md b/Custom_EasyBlocks/README.md index 023f3db6b3171001b059926e5df3c081f60ec138..6eca29328f2199f94ced919dc42e0e2add206571 100644 --- a/Custom_EasyBlocks/README.md +++ b/Custom_EasyBlocks/README.md @@ -73,6 +73,12 @@ Overview of the custom EasyBlocks. - __*difference compared to upstream*__ upstream doesn't have such a feature - __*can not be removed*__ until merged upstream +## LAMMPS +- __*added_by*__ d.alvarez +- __*needed because*__ upstream does not include the changes that we used in the latest stage +- __*difference compared to upstream*__ various, done by Alan +- __*can not be removed*__ until merged upstream or the changes here are deprecated (need to be assesed by an expert) + ## NAMD - __*added_by*__ d.alvarez - __*needed because*__ need to disable CUDA support even if CUDA comes as a dependency diff --git a/Custom_EasyBlocks/lammps.py b/Custom_EasyBlocks/lammps.py new file mode 100644 index 0000000000000000000000000000000000000000..c058e04ec1f42d715caba41dceb0e4884ff938f2 --- /dev/null +++ b/Custom_EasyBlocks/lammps.py @@ -0,0 +1,437 @@ +# -*- coding: utf-8 -*- +## +# Copyright 2009-2020 Ghent University +# +# This file is part of EasyBuild, +# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en), +# with support of Ghent University (http://ugent.be/hpc), +# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en), +# the Hercules foundation (http://www.herculesstichting.be/in_English) +# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en). +# +# https://github.com/easybuilders/easybuild +# +# EasyBuild is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation v2. +# +# EasyBuild 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 +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with EasyBuild. If not, see <http://www.gnu.org/licenses/>. +## +""" +@author: Pavel Grochal (INUITS) +@author: Kenneth Hoste (Ghent University) +@author: Alan O'Cais (Juelich Supercomputing Centre) +""" + +import os +import tempfile + +import easybuild.tools.environment as env +import easybuild.tools.toolchain as toolchain +from easybuild.framework.easyconfig import CUSTOM, MANDATORY +from easybuild.tools.build_log import EasyBuildError, print_warning, print_msg +from easybuild.tools.config import build_option +from easybuild.tools.modules import get_software_root, get_software_version +from easybuild.tools.run import run_cmd +from easybuild.tools.systemtools import get_shared_lib_ext + +from easybuild.easyblocks.generic.cmakemake import CMakeMake + +KOKKOS_CPU_ARCH_LIST = [ + 'AMDAVX', # AMD 64-bit x86 CPU (AVX 1) + 'ZEN', # AMD Zen class CPU (AVX 2) + 'ZEN2', # AMD Zen2 class CPU (AVX 2) + 'ARMV80', # ARMv8.0 Compatible CPU + 'ARMV81', # ARMv8.1 Compatible CPU + 'ARMV8_THUNDERX', # ARMv8 Cavium ThunderX CPU + 'ARMV8_THUNDERX2', # ARMv8 Cavium ThunderX2 CPU + 'WSM', # Intel Westmere CPU (SSE 4.2) + 'SNB', # Intel Sandy/Ivy Bridge CPU (AVX 1) + 'HSW', # Intel Haswell CPU (AVX 2) + 'BDW', # Intel Broadwell Xeon E-class CPU (AVX 2 + transactional mem) + 'SKX', # Intel Sky Lake Xeon E-class HPC CPU (AVX512 + transactional mem) + 'KNC', # Intel Knights Corner Xeon Phi + 'KNL', # Intel Knights Landing Xeon Phi + 'BGQ', # IBM Blue Gene/Q CPU + 'POWER7', # IBM POWER7 CPU + 'POWER8', # IBM POWER8 CPU + 'POWER9', # IBM POWER9 CPU + 'KEPLER30', # NVIDIA Kepler generation CC 3.0 GPU + 'KEPLER32', # NVIDIA Kepler generation CC 3.2 GPU + 'KEPLER35', # NVIDIA Kepler generation CC 3.5 GPU + 'KEPLER37', # NVIDIA Kepler generation CC 3.7 GPU + 'MAXWELL50', # NVIDIA Maxwell generation CC 5.0 GPU + 'MAXWELL52', # NVIDIA Maxwell generation CC 5.2 GPU + 'MAXWELL53', # NVIDIA Maxwell generation CC 5.3 GPU + 'PASCAL60', # NVIDIA Pascal generation CC 6.0 GPU + 'PASCAL61', # NVIDIA Pascal generation CC 6.1 GPU + 'VOLTA70', # NVIDIA Volta generation CC 7.0 GPU + 'VOLTA72', # NVIDIA Volta generation CC 7.2 GPU + 'TURING75', # NVIDIA Turing generation CC 7.5 GPU + 'AMPERE80', # NVIDIA Ampere generation CC 8.0 GPU + 'VEGA900', # AMD GPU MI25 GFX900 + 'VEGA906', # AMD GPU MI50/MI60 GFX906 + 'INTEL_GEN', #Intel GPUs Gen9+ +] + +KOKKOS_CPU_MAPPING = { + 'sandybridge': 'SNB', + 'ivybridge': 'SNB', + 'haswell': 'HSW', + 'broadwell': 'BDW', + 'skylake_avx512': 'SKX', + 'cascadelake': 'SKX', + 'knights-landing': 'KNL', + 'zen': 'ZEN', + 'zen2': 'ZEN2', # KOKKOS doesn't seem to distinguish between zen and zen2 (yet?) +} + + +KOKKOS_GPU_ARCH_TABLE = { + '3.0': 'KEPLER30', # NVIDIA Kepler generation CC 3.0 + '3.2': 'KEPLER32', # NVIDIA Kepler generation CC 3.2 + '3.5': 'KEPLER35', # NVIDIA Kepler generation CC 3.5 + '3.7': 'KEPLER37', # NVIDIA Kepler generation CC 3.7 + '5.0': 'MAXWELL50', # NVIDIA Maxwell generation CC 5.0 + '5.2': 'MAXWELL52', # NVIDIA Maxwell generation CC 5.2 + '5.3': 'MAXWELL53', # NVIDIA Maxwell generation CC 5.3 + '6.0': 'PASCAL60', # NVIDIA Pascal generation CC 6.0 + '6.1': 'PASCAL61', # NVIDIA Pascal generation CC 6.1 + '7.0': 'VOLTA70', # NVIDIA Volta generation CC 7.0 + '7.2': 'VOLTA72', # NVIDIA Volta generation CC 7.2 + '7.5': 'TURING75', # NVIDIA Turing generation CC 7.5 + '8.0': 'AMPERE80', # NVIDIA Ampere generation CC 8.0 +} + +PKG_PREFIX = 'PKG_' +PKG_USER_PREFIX = PKG_PREFIX + 'USER-' + + +class EB_LAMMPS(CMakeMake): + """ + Support for building and installing LAMMPS + """ + + def __init__(self, *args, **kwargs): + """LAMMPS easyblock constructor: determine whether we should build with CUDA support enabled.""" + super(EB_LAMMPS, self).__init__(*args, **kwargs) + + cuda_dep = 'cuda' in [dep['name'].lower() for dep in self.cfg.dependencies()] + cuda_toolchain = hasattr(self.toolchain, 'COMPILER_CUDA_FAMILY') + self.cuda = cuda_dep or cuda_toolchain + + @staticmethod + def extra_options(**kwargs): + """Custom easyconfig parameters for LAMMPS""" + extra_vars = CMakeMake.extra_options() + extra_vars.update({ + # see https://developer.nvidia.com/cuda-gpus + 'cuda_compute_capabilities': [[], "List of CUDA compute capabilities to build with", CUSTOM], + 'general_packages': [None, "List of general packages without '%s' prefix." % PKG_PREFIX, MANDATORY], + 'kokkos': [True, "Enable kokkos build.", CUSTOM], + 'kokkos_arch': [None, "Set kokkos processor arch manually, if auto-detection doesn't work.", CUSTOM], + 'user_packages': [None, "List user packages without '%s' prefix." % PKG_USER_PREFIX, MANDATORY], + }) + extra_vars['separate_build_dir'][0] = True + return extra_vars + + def prepare_step(self, *args, **kwargs): + """Custom prepare step for LAMMPS.""" + super(EB_LAMMPS, self).prepare_step(*args, **kwargs) + + # Unset LIBS when using both KOKKOS and CUDA - it will mix lib paths otherwise + if self.cfg['kokkos'] and self.cuda: + env.unset_env_vars(['LIBS']) + + def configure_step(self, **kwargs): + """Custom configuration procedure for LAMMPS.""" + + # list of CUDA compute capabilities to use can be specifed in two ways (where (2) overrules (1)): + # (1) in the easyconfig file, via the custom cuda_compute_capabilities; + # (2) in the EasyBuild configuration, via --cuda-compute-capabilities configuration option; + ec_cuda_cc = self.cfg['cuda_compute_capabilities'] + cfg_cuda_cc = build_option('cuda_compute_capabilities') + if cfg_cuda_cc and not isinstance(cfg_cuda_cc, list): + raise EasyBuildError("cuda_compute_capabilities in easyconfig should be provided as list of strings, " + + "(for example ['8.0', '7.5']). Got %s" % cfg_cuda_cc) + cuda_cc = check_cuda_compute_capabilities(cfg_cuda_cc, ec_cuda_cc, cuda=self.cuda) + + # cmake has its own folder + self.cfg['srcdir'] = os.path.join(self.start_dir, 'cmake') + + # Enable following packages, if not configured in easyconfig + default_options = ['BUILD_DOC', 'BUILD_EXE', 'BUILD_LIB', 'BUILD_TOOLS'] + for option in default_options: + if "-D%s=" % option not in self.cfg['configopts']: + self.cfg.update('configopts', '-D%s=on' % option) + + # enable building of shared libraries, if not specified already via configopts + if self.cfg['build_shared_libs'] is None and '-DBUILD_SHARED_LIBS=' not in self.cfg['configopts']: + self.cfg['build_shared_libs'] = True + + # Enable gzip, libpng and libjpeg-turbo support when its included as dependency + deps = [ + ('gzip', 'GZIP'), + ('libpng', 'PNG'), + ('libjpeg-turbo', 'JPEG'), + ] + for dep_name, with_name in deps: + with_opt = '-DWITH_%s=' % with_name + if with_opt not in self.cfg['configopts']: + if get_software_root(dep_name): + self.cfg.update('configopts', with_opt + 'yes') + else: + self.cfg.update('configopts', with_opt + 'no') + + # Disable auto-downloading/building Eigen dependency: + if '-DDOWNLOAD_EIGEN3=' not in self.cfg['configopts']: + self.cfg.update('configopts', '-DDOWNLOAD_EIGEN3=no') + + # Compiler complains about 'Eigen3_DIR' not being set, but actually it needs 'EIGEN3_INCLUDE_DIR'. + # see: https://github.com/lammps/lammps/issues/1110 + # Enable Eigen when its included as dependency dependency: + eigen_root = get_software_root('Eigen') + if eigen_root: + if '-DEIGEN3_INCLUDE_DIR=' not in self.cfg['configopts']: + self.cfg.update('configopts', '-DEIGEN3_INCLUDE_DIR=%s/include/Eigen' % get_software_root('Eigen')) + if '-DEigen3_DIR=' not in self.cfg['configopts']: + self.cfg.update('configopts', '-DEigen3_DIR=%s/share/eigen3/cmake/' % get_software_root('Eigen')) + + # LAMMPS Configuration Options + # https://github.com/lammps/lammps/blob/master/cmake/README.md#lammps-configuration-options + if self.cfg['general_packages']: + for package in self.cfg['general_packages']: + self.cfg.update('configopts', '-D%s%s=on' % (PKG_PREFIX, package)) + + if self.cfg['user_packages']: + for package in self.cfg['user_packages']: + self.cfg.update('configopts', '-D%s%s=on' % (PKG_USER_PREFIX, package)) + + # Optimization settings + pkg_opt = '-D%sOPT=' % PKG_PREFIX + if pkg_opt not in self.cfg['configopts']: + self.cfg.update('configopts', pkg_opt + 'on') + + # USER-INTEL enables optimizations on Intel processors. GCC has also partial support for some of them. + pkg_user_intel = '-D%sINTEL=' % PKG_USER_PREFIX + if pkg_user_intel not in self.cfg['configopts']: + if self.toolchain.comp_family() in [toolchain.GCC, toolchain.INTELCOMP]: + self.cfg.update('configopts', pkg_user_intel + 'on') + + # MPI/OpenMP + if self.toolchain.options.get('usempi', None): + self.cfg.update('configopts', '-DBUILD_MPI=yes') + if self.toolchain.options.get('openmp', None): + self.cfg.update('configopts', '-DBUILD_OMP=yes') + self.cfg.update('configopts', '-D%sOMP=on' % PKG_USER_PREFIX) + + # FFTW + if get_software_root("imkl") or get_software_root("FFTW"): + if '-DFFT=' not in self.cfg['configopts']: + if get_software_root("imkl"): + self.log.info("Using the MKL") + self.cfg.update('configopts', '-DFFT=MKL') + else: + self.log.info("Using FFTW") + self.cfg.update('configopts', '-DFFT=FFTW3') + if '-DFFT_PACK=' not in self.cfg['configopts']: + self.cfg.update('configopts', '-DFFT_PACK=array') + + # https://lammps.sandia.gov/doc/Build_extras.html + # KOKKOS + if self.cfg['kokkos']: + self.cfg.update('configopts', '-D%sKOKKOS=on' % PKG_PREFIX) + + processor_arch, gpu_arch = get_kokkos_arch(cuda_cc, self.cfg['kokkos_arch'], cuda=self.cuda) + + if self.toolchain.options.get('openmp', None): + self.cfg.update('configopts', '-DKokkos_ENABLE_OPENMP=yes') + self.cfg.update('configopts', '-DKokkos_ARCH_%s=yes' % processor_arch) + + # if KOKKOS and CUDA + if self.cuda: + nvcc_wrapper_path = os.path.join(self.start_dir, "lib", "kokkos", "bin", "nvcc_wrapper") + self.cfg.update('configopts', '-DKokkos_ENABLE_CUDA=yes') + self.cfg.update('configopts', '-DKokkos_ARCH_%s=yes' % gpu_arch) + self.cfg.update('configopts', '-DCMAKE_CXX_COMPILER="%s"' % nvcc_wrapper_path) + self.cfg.update('configopts', '-DCMAKE_CXX_FLAGS="-ccbin $CXX $CXXFLAGS"') + + # CUDA only + elif self.cuda: + self.cfg.update('configopts', '-D%sGPU=on' % PKG_PREFIX) + self.cfg.update('configopts', '-DGPU_API=cuda') + self.cfg.update('configopts', '-DGPU_ARCH=%s' % get_cuda_gpu_arch(cuda_cc)) + + # avoid that pip (ab)uses $HOME/.cache/pip + # cfr. https://pip.pypa.io/en/stable/reference/pip_install/#caching + env.setvar('XDG_CACHE_HOME', tempfile.gettempdir()) + self.log.info("Using %s as pip cache directory", os.environ['XDG_CACHE_HOME']) + + return super(EB_LAMMPS, self).configure_step() + + def sanity_check_step(self, *args, **kwargs): + """Run custom sanity checks for LAMMPS files, dirs and commands.""" + check_files = [ + 'atm', 'balance', 'colloid', 'crack', 'dipole', 'friction', + 'hugoniostat', 'indent', 'melt', 'message', 'min', 'msst', + 'nemd', 'obstacle', 'pour', 'voronoi', + ] + + custom_commands = [ + # LAMMPS test - you need to call specific test file on path + """python -c 'from lammps import lammps; l=lammps(); l.file("%s")'""" % + # The path is joined by "build_dir" (start_dir)/examples/filename/in.filename + os.path.join(self.start_dir, "examples", "%s" % check_file, "in.%s" % check_file) + # And this should be done for every file specified above + for check_file in check_files + ] + + # Execute sanity check commands within an initialized MPI in MPI enabled toolchains + if self.toolchain.options.get('usempi', None): + custom_commands = [self.toolchain.mpi_cmd_for(cmd, 1) for cmd in custom_commands] + + shlib_ext = get_shared_lib_ext() + custom_paths = { + 'files': [ + os.path.join('bin', 'lmp'), + os.path.join('include', 'lammps', 'library.h'), + os.path.join('lib64', 'liblammps.%s' % shlib_ext), + ], + 'dirs': [], + } + + python = get_software_version('Python') + if python: + pyshortver = '.'.join(get_software_version('Python').split('.')[:2]) + pythonpath = os.path.join('lib', 'python%s' % pyshortver, 'site-packages') + custom_paths['dirs'].append(pythonpath) + + return super(EB_LAMMPS, self).sanity_check_step(custom_commands=custom_commands, custom_paths=custom_paths) + + def make_module_extra(self): + """Add install path to PYTHONPATH""" + + txt = super(EB_LAMMPS, self).make_module_extra() + + python = get_software_version('Python') + if python: + pyshortver = '.'.join(get_software_version('Python').split('.')[:2]) + pythonpath = os.path.join('lib', 'python%s' % pyshortver, 'site-packages') + txt += self.module_generator.prepend_paths('PYTHONPATH', [pythonpath]) + + txt += self.module_generator.prepend_paths('PYTHONPATH', ["lib64"]) + txt += self.module_generator.prepend_paths('LD_LIBRARY_PATH', ["lib64"]) + + return txt + + +def get_cuda_gpu_arch(cuda_cc): + """Return CUDA gpu ARCH in LAMMPS required format. Example: 'sm_32' """ + # Get largest cuda supported + return 'sm_%s' % str(sorted(cuda_cc, reverse=True)[0]).replace(".", "") + + +def get_kokkos_arch(cuda_cc, kokkos_arch, cuda=None): + """ + Return KOKKOS ARCH in LAMMPS required format, which is either 'CPU_ARCH' or 'CPU_ARCH;GPU_ARCH'. + + see: https://lammps.sandia.gov/doc/Build_extras.html#kokkos + """ + if cuda is None or not isinstance(cuda, bool): + cuda = get_software_root('CUDA') + + processor_arch = None + + if kokkos_arch: + if kokkos_arch not in KOKKOS_CPU_ARCH_LIST: + warning_msg = "Specified CPU ARCH (%s) " % kokkos_arch + warning_msg += "was not found in listed options [%s]." % KOKKOS_CPU_ARCH_LIST + warning_msg += "Still might work though." + print_warning(warning_msg) + processor_arch = kokkos_arch + + else: + warning_msg = "kokkos_arch not set. Trying to auto-detect CPU arch." + print_warning(warning_msg) + + processor_arch = KOKKOS_CPU_MAPPING.get(get_cpu_arch()) + + if not processor_arch: + error_msg = "Couldn't determine CPU architecture, you need to set 'kokkos_arch' manually." + raise EasyBuildError(error_msg) + + print_msg("Determined cpu arch: %s" % processor_arch) + + gpu_arch = None + if cuda: + # CUDA below + for cc in sorted(cuda_cc, reverse=True): + gpu_arch = KOKKOS_GPU_ARCH_TABLE.get(str(cc)) + if gpu_arch: + break + else: + warning_msg = "(%s) GPU ARCH was not found in listed options." % cc + print_warning(warning_msg) + + if not gpu_arch: + error_msg = "Specified GPU ARCH (%s) " % cuda_cc + error_msg += "was not found in listed options [%s]." % KOKKOS_GPU_ARCH_TABLE + raise EasyBuildError(error_msg) + + return processor_arch, gpu_arch + + +def check_cuda_compute_capabilities(cfg_cuda_cc, ec_cuda_cc, cuda=None): + """ + Checks if cuda-compute-capabilities is set and prints warning if it gets declared on multiple places. + + :param cfg_cuda_cc: cuda-compute-capabilities from cli config + :param ec_cuda_cc: cuda-compute-capabilities from easyconfig + :param cuda: boolean to check if cuda should be enabled or not + :return: returns preferred cuda-compute-capabilities + """ + + if cuda is None or not isinstance(cuda, bool): + cuda = get_software_root('CUDA') + + cuda_cc = cfg_cuda_cc or ec_cuda_cc or [] + + if cuda: + if cfg_cuda_cc and ec_cuda_cc: + warning_msg = "cuda_compute_capabilities specified in easyconfig (%s)" % ec_cuda_cc + warning_msg += " are overruled by " + warning_msg += "--cuda-compute-capabilities configuration option (%s)" % cfg_cuda_cc + print_warning(warning_msg) + elif not cuda_cc: + error_msg = "No CUDA compute capabilities specified.\nTo build LAMMPS with Cuda you need to use" + error_msg += "the --cuda-compute-capabilities configuration option or the cuda_compute_capabilities " + error_msg += "easyconfig parameter to specify a list of CUDA compute capabilities to compile with." + raise EasyBuildError(error_msg) + + elif cuda_cc: + warning_msg = "Missing CUDA package (in dependencies), " + warning_msg += "but 'cuda_compute_capabilities' option was specified." + print_warning(warning_msg) + + return cuda_cc + + +def get_cpu_arch(): + """ + Checks for CPU architecture via archspec library. + https://github.com/archspec/archspec + Archspec should be bundled as build-dependency to determine CPU arch. + It can't be called directly in code because it gets available only after prepare_step. + + :return: returns detected cpu architecture + """ + out, ec = run_cmd("python -c 'from archspec.cpu import host; print(host())'", simple=False) + if ec: + raise EasyBuildError("Failed to determine CPU architecture: %s", out) + return out.strip() diff --git a/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb b/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..933cfd689cbd5dfe4adf221ee19957cd1a650cb9 --- /dev/null +++ b/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb @@ -0,0 +1,163 @@ +# Installation command used: +# eb --include-easyblocks=$PWD/Custom_EasyBlocks/lammps.py,"$EASYBUILD_INCLUDE_EASYBLOCKS"\\ +# --mpi-cmd-template='echo %(nr_ranks)s && %(cmd)s' \\ +# Golden_Repo/l/LAMMPS/LAMMPS-22Oct2020-intel-para-2020-Python-3.9.6.eb +name = 'LAMMPS' +version = '7Jan2022' + +homepage = 'https://lammps.sandia.gov/' +description = """LAMMPS is a classical molecular dynamics code, and an acronym +for Large-scale Atomic/Molecular Massively Parallel Simulator. LAMMPS has +potentials for solid-state materials (metals, semiconductors) and soft matter +(biomolecules, polymers) and coarse-grained or mesoscopic systems. It can be +used to model atoms or, more generically, as a parallel particle simulator at +the atomic, meso, or continuum scale. LAMMPS runs on single processors or in +parallel using message-passing techniques and a spatial-decomposition of the +simulation domain. The code is designed to be easy to modify or extend with new +functionality. +""" + +toolchain = {'name': 'gpsmkl', 'version': '2021b'} +toolchainopts = {'openmp': True, 'cstd': 'c++14', 'usempi': True} + +# 'https://github.com/lammps/lammps/archive/' +source_urls = [GITHUB_LOWER_SOURCE] +sources = [ + 'patch_%(version)s.tar.gz', + # Since we are dropping yaff for the time being, drop this too + # {'extract_cmd': 'cp %s %(builddir)s', 'filename': 'lammps_vs_yaff_test_single_point_energy.py'}, +] +checksums = ['fbf6c6814968ae0d772d7b6783079ff4f249a8faeceb39992c344969e9f1edbb'] + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), + ('pkg-config', '0.29.2'), + ('archspec', '0.1.3'), +] +dependencies = [ + ('CUDA', '11.5', '', SYSTEM), + ('Python', '3.9.6'), + ('libpng', '1.6.37'), + ('libjpeg-turbo', '2.1.1'), + ('netCDF', '4.8.1'), + ('GSL', '2.7'), + ('zlib', '1.2.11'), + ('gzip', '1.10'), + ('cURL', '7.78.0'), + ('HDF5', '1.12.1'), + ('tbb', '2020.3'), + ('PCRE', '8.45'), + ('libxml2', '2.9.10'), + ('FFmpeg', '4.4.1'), + ('Voro++', '0.4.6'), + ('kim-api', '2.2.1'), + ('Eigen', '3.3.9'), + # 'YAFF', # yaff needs an old version of h5py, which needs an old version of HDF5. Let's drop it + # ('yaff', '1.6.0'), + ('PLUMED', '2.7.2'), + ('ScaFaCoS', '1.0.1'), + # See below for why this is not included + # ('VTK', '8.2.0', local_python_versionsuffix), +] + +# not enabled (yet), needs more work/additional dependencies: +# ADIOS - https://lammps.sandia.gov/doc/Build_extras.html#user-adios-package +# AWPMD - https://lammps.sandia.gov/doc/Build_extras.html#user-awpmd-package +# QMMM - https://lammps.sandia.gov/doc/Packages_details.html#pkg-user-qmmm +# QUIP - https://lammps.sandia.gov/doc/Build_extras.html#user-quip-package +# VTK - support is available in the foss version but currently fails to build for intel +# due to https://software.intel.com/en-us/forums/intel-fortran-compiler/topic/746611 +# see https://github.com/lammps/lammps/issues/1964 for details +user_packages = [ + 'ATC', + 'BOCS', + 'CGDNA', + 'CGSDK', + 'COLVARS', + 'DIFFRACTION', + 'DPD', + 'DRUDE', + 'EFF', + 'FEP', + 'H5MD', + 'LB', + 'MANIFOLD', + 'MEAMC', + 'MESODPD', + 'MESONT', + 'MGPT', + 'MISC', + 'MOFFF', + 'MOLFILE', + 'NETCDF', + 'PHONON', + 'PLUMED', + 'PTM', + 'QTB', + 'REACTION', + 'REAXC', + 'SCAFACOS', + 'SDPD', + 'SMD', + 'SMTBQ', + 'SPH', + 'TALLY', + 'UEF', + # 'YAFF', # yaff needs an old version of h5py, which needs an old version of HDF5. Let's drop it +] +enhance_sanity_check = True + +# To use additional custom configuration options, use the 'configopts' easyconfig parameter +# See docs and lammps easyblock for more information. +# https://github.com/lammps/lammps/blob/master/cmake/README.md#lammps-configuration-options + +# Use the bfd linker for C++ (this will only be picked up when using Kokkos) +preconfigopts = 'export CXXFLAGS="-fuse-ld=bfd $CXXFLAGS" &&' +# docs require virtualenv (which we don't have) +configopts = ' -DBUILD_DOC=off -DPKG_USER-INTEL=off ' + +# auto-enabled by easyblock +# 'GPU' - if cuda package is present and kokkos is disabled +# 'KOKKOS' - if kokkos is enabled (by default) +# +# not enabled (yet), needs more work/additional dependencies: +# 'LATTE', - https://lammps.sandia.gov/doc/Build_extras.html#latte-package +# 'MSCG', - https://lammps.sandia.gov/doc/Build_extras.html#mscg-package +general_packages = [ + 'ASPHERE', + 'BODY', + 'CLASS2', + 'COLLOID', + 'COMPRESS', + 'CORESHELL', + 'DIPOLE', + 'GRANULAR', + 'KIM', + 'KSPACE', + 'MANYBODY', + 'MC', + 'MESSAGE', + 'MISC', + 'MLIAP', + 'MOLECULE', + 'MPIIO', + 'PERI', + 'POEMS', + 'PYTHON', + 'QEQ', + 'REPLICA', + 'RIGID', + 'SHOCK', + 'SNAP', + 'SPIN', + 'SRD', + 'VORONOI', +] + +# run short test case to make sure installation doesn't produce blatently incorrect results; +# this catches a problem where having the USER-INTEL package enabled causes trouble when installing with intel/2019b +# (requires an MPI context for intel/2020a) +# Since we are dropping yaff for the time being, drop this too +# sanity_check_commands = ['cd %(builddir)s && %(mpi_cmd_prefix)s python lammps_vs_yaff_test_single_point_energy.py'] + +moduleclass = 'chem' diff --git a/Golden_Repo/s/ScaFaCoS/ScaFaCoS-1.0.1-gpsmpi-2021b.eb b/Golden_Repo/s/ScaFaCoS/ScaFaCoS-1.0.1-gpsmpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..d21bbb48327d8ba93735c9a06e25b09c0435f8e1 --- /dev/null +++ b/Golden_Repo/s/ScaFaCoS/ScaFaCoS-1.0.1-gpsmpi-2021b.eb @@ -0,0 +1,44 @@ +easyblock = 'ConfigureMake' + +name = 'ScaFaCoS' +version = '1.0.1' + +homepage = 'http://www.scafacos.de/' +description = "ScaFaCoS is a library of scalable fast coulomb solvers." + +toolchain = {'name': 'gpsmpi', 'version': '2021b'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/%(namelower)s/%(namelower)s/releases/download/v%(version)s'] +sources = [SOURCELOWER_TAR_GZ] +checksums = [ + '2b125f313795c81b0e87eb920082e91addf94c17444f9486d979e691aaded99b', # scafacos-1.0.1.tar.gz +] + +builddependencies = [ + ('Autotools', '20210726'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('GMP', '6.2.1'), + ('GSL', '2.7'), + ('FFTW', '3.3.10'), +] + +preconfigopts = 'unset F77 && ' + +configopts = 'FCFLAGS="-fallow-argument-mismatch $FCFLAGS" ' +configopts += '--enable-shared --enable-static --disable-doc ' +# tell it where to find provided FFTW +configopts += '--without-internal-fftw --with-fftw3-includedir=$EBROOTFFTW/include --with-fftw3-libdir=$EBROOTFFTW/lib ' +# only include the solvers supported for LAMMPS +# (for p2nfft we need an additonal dependency) +configopts += '--enable-fcs-solvers=direct,ewald,fmm,p3m ' + +sanity_check_paths = { + 'files': ['lib/libfcs.a', 'include/fcs.h', 'include/fcs_module.mod'], + 'dirs': [], +} + +moduleclass = 'math' diff --git a/bin/gcc11ize.py b/bin/gcc11ize.py index 8b8a9ad1539c6630e33dbba3419e225f2c0aeca9..0861124de69e89bd5e62e74812161c647b457984 100755 --- a/bin/gcc11ize.py +++ b/bin/gcc11ize.py @@ -14,6 +14,7 @@ releases = { 'AT-SPI2-ATK': ['2.34.2', '2.38.0'], 'AT-SPI2-core': ['2.36.0', '2.40.3'], 'Autotools': ['20200321', '20210726'], + 'archspec': ['0.1.0', '0.1.3'], 'binutils': ['2.36.1', '2.37'], 'Bison': ['3.7.6', '3.7.6'], 'Boost': ['1.74.0', '1.78.0'], @@ -58,13 +59,17 @@ releases = { 'HarfBuzz': ['2.6.7', '2.8.2'], 'HDF5': ['1.10.6', '1.12.1'], 'HTSLib': ['1.1.4', '1.1.4'], + 'h5py': ['2.10.0', '3.5.0'], 'ICU': ['67.1', '70.1'], 'ImageMagick': ['7.0.10-25', '7.1.0.13'], 'imkl': ['2021.2.0', '2021.4.0'], + 'intel-para': ['2021', '2021b'], + 'ipsmpi': ['2021', '2021b'], 'intltool': ['0.51.0', '0.51.0'], 'ispc': ['1.12.0', '1.16.1'], 'JasPer': ['2.0.19', '2.0.33'], 'Java': ['15', '15'], + 'kim-api': ['2.1.3', '2.2.1'], 'libcroco': ['0.6.13', '0.6.13'], 'libdrm': ['2.4.106', '2.4.107'], 'libepoxy': ['1.5.4', '1.5.9'], @@ -85,6 +90,7 @@ releases = { 'NASM': ['2.15.03', '2.15.05'], 'Ninja': ['1.10.0', '1.10.2'], 'NSS': ['3.51', '3.69'], + 'netCDF': ['4.7.4', '4.8.1'], 'numactl': ['2.0.13', '2.0.14'], 'OpenEXR': ['2.5.2', '3.1.1'], 'OpenGL': ['2020', '2021b'], @@ -96,6 +102,7 @@ releases = { 'pkg-config': ['0.29.2', '0.29.2'], 'pkgconfig': ['1.5.4', '1.5.5'], 'PROJ': ['7.1.0', '8.1.0'], + 'PLUMED': ['2.6.1', '2.7.2'], 'protobuf': ['3.14.0', '3.17.3'], 'psmpi': ['5.4.9-1', '5.5.0-1'], 'pybind11': ['2.5.0', '2.7.1'], @@ -156,6 +163,12 @@ def updateFileName(fileName, current, latest): elif 'gpsmkl' in fileName: fileName = fileName.replace( releases['gpsmkl'][0], releases['gpsmkl'][1], 1) + elif 'ipsmpi' in fileName: + fileName = fileName.replace( + releases['ipsmpi'][0], releases['ipsmpi'][1], 1) + elif 'intel-para' in fileName: + fileName = fileName.replace( + releases['intel-para'][0], releases['intel-para'][1], 1) fileName = fileName.replace( '-Python-3.8.5', '', 1) return fileName @@ -182,6 +195,10 @@ def updateFile(oldName, newName, current, latest): releases['gomkl'][0], releases['gomkl'][1], 1) line = line.replace( releases['gpsmpi'][0], releases['gpsmpi'][1], 1) + line = line.replace( + releases['ipsmpi'][0], releases['ipsmpi'][1], 1) + line = line.replace( + releases['intel-para'][0], releases['intel-para'][1], 1) line = line.replace( releases['gcccoremkl'][0], releases['gcccoremkl'][1], 1) if line.startswith('site_contacts'):