diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 18e8e9ad02688bc37d5eca4f8135eb053190b1a6..e6202cf37c7658f2d83e9d98ef83737e49e00728 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/pre-commit/mirrors-autopep8 - rev: '' # Use the sha / tag you want to point at + rev: 'v1.6.0' # Use the sha / tag you want to point at hooks: - id: autopep8 types: [file] diff --git a/Custom_EasyBlocks/README.md b/Custom_EasyBlocks/README.md index a756efd0c4fe3bbcbb885a12934f9832cb9c17fe..3ef27f61e737494dccbb9086e57d027ad2fb6f5e 100644 --- a/Custom_EasyBlocks/README.md +++ b/Custom_EasyBlocks/README.md @@ -35,6 +35,12 @@ Overview of the custom EasyBlocks. - __*needed because*__ https://github.com/easybuilders/easybuild-easyblocks/pull/2593 - __*can not be removed*__ Once the PR is merged upstream. Likely with v4.5.0 +## numexpr + +- __*added by*__ s.achilles +- __*needed because*__ https://github.com/easybuilders/easybuild-easyblocks/pull/2678 +- __*can not be removed*__ until the PR is merged upstream. Likely with v4.5.4 + ## NVIDIA_DRIVER - __*added by*__ d.alvarez @@ -89,4 +95,11 @@ Overview of the custom EasyBlocks. - __*added_by*__ d.alvarez - __*needed because*__ to autodetect CUDA and support CUDA compute capabilities - __*difference compared to upstream*__ upstream doesn't have such a feature -- __*can not be removed*__ until merged upstream +- __*can not be removed*__ until merged upstream (https://github.com/easybuilders/easybuild-easyblocks/pull/2673) + +## CP2K +- __*added_by*__ th.mueller +- __*needed because*__ support for libvori; alternative versions of dbcsr; contains loads of widely obsolete stuff; is essentially a highly non-portable easyblock working only with intel and gnu (which I am not going to change!); running the tests will not work within an eb environment - at least not sensibly. +- __*difference compared to upstream*__ no support for libvori +- __*can not be removed*__ + diff --git a/Custom_EasyBlocks/cp2k.py b/Custom_EasyBlocks/cp2k.py new file mode 100644 index 0000000000000000000000000000000000000000..f2901e2f18590d898c1bbdcfa110aac9ce597404 --- /dev/null +++ b/Custom_EasyBlocks/cp2k.py @@ -0,0 +1,905 @@ +## +# Copyright 2009-2019 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://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# 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/>. +## +""" +EasyBuild support for building and installing CP2K, implemented as an easyblock + +@author: Stijn De Weirdt (Ghent University) +@author: Dries Verdegem (Ghent University) +@author: Kenneth Hoste (Ghent University) +@author: Pieter De Baets (Ghent University) +@author: Jens Timmerman (Ghent University) +@author: Ward Poelmans (Ghent University) +@author: Luca Marsella (CSCS) +@author: Damian Alvarez (Forschungszentrum Juelich GmbH) +@author: Alan O'Cais (Forschungszentrum Juelich GmbH) +@author: Balazs Hajgato (Free University Brussels (VUB)) +""" + +import fileinput +import glob +import re +import os +import sys +from distutils.version import LooseVersion + +import easybuild.tools.toolchain as toolchain +from easybuild.framework.easyblock import EasyBlock +from easybuild.framework.easyconfig import CUSTOM +from easybuild.tools.build_log import EasyBuildError +from easybuild.tools.environment import setvar +from easybuild.tools.filetools import change_dir, copy_dir, copy_file, mkdir, write_file +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_avail_core_count + + +class EB_CP2K(EasyBlock): + """ + Support for building CP2K + - prepare module include files if required + - generate custom config file in 'arch' directory + - build CP2K + - run regression test if desired + - install by copying binary executables + """ + + def __init__(self, *args, **kwargs): + super(EB_CP2K, self).__init__(*args, **kwargs) + + self.typearch = None + + # this should be set to False for old versions of GCC (e.g. v4.1) + self.compilerISO_C_BINDING = True + + # compiler options that need to be set in Makefile + self.debug = '' + self.fpic = '' + + # used for both libsmm and libxsmm + self.libsmm = '' + self.modincpath = '' + self.openmp = '' + + self.make_instructions = '' + + @staticmethod + def extra_options(): + extra_vars = { + 'extracflags': ['', "Extra CFLAGS to be added", CUSTOM], + 'extradflags': ['', "Extra DFLAGS to be added", CUSTOM], + 'ignore_regtest_fails': [False, ("Ignore failures in regression test " + "(should be used with care)"), CUSTOM], + 'library': [False, "Also build CP2K as a library", CUSTOM], + 'maxtasks': [4, ("Maximum number of CP2K instances run at " + "the same time during testing"), CUSTOM], + 'modinc': [[], ("List of modinc's to use (*.f90], or 'True' to use " + "all found at given prefix"), CUSTOM], + 'modincprefix': ['', "Intel MKL prefix for modinc include dir", CUSTOM], + 'runtest': [True, "Build and run CP2K tests", CUSTOM], + 'omp_num_threads': [None, "Value to set $OMP_NUM_THREADS to during testing", CUSTOM], + 'plumed': [None, "Enable PLUMED support", CUSTOM], + 'cuda': [True, "Enable CUDA support", CUSTOM], + 'type': ['popt', "Type of build ('popt' or 'psmp')", CUSTOM], + 'typeopt': [True, "Enable optimization", CUSTOM], + 'dbcsr_version': ['2.0.1',"DBCSR version used",CUSTOM], + 'libvori_version': ['-210412',"libvori version used",CUSTOM], + } + return EasyBlock.extra_options(extra_vars) + + def _generate_makefile(self, options): + """Generate Makefile based on options dictionary and optional make instructions""" + + text = "# Makefile generated by CP2K easyblock in EasyBuild\n" + for key, value in sorted(options.items()): + text += "%s = %s\n" % (key, value) + return text + self.make_instructions + + def configure_step(self): + """Configure build + - build Libint wrapper + - generate Makefile + """ + + known_types = ['psmp'] + if self.cfg['type'] not in known_types: + raise EasyBuildError("Unknown build type specified: '%s', known types are %s", + self.cfg['type'], known_types) + self.log.info("initial start_dir %s" %self.cfg['start_dir']) + cpstring="cp -r %s../dbcsr-%s/* %sexts/dbcsr/" %(self.cfg['start_dir'],self.cfg['dbcsr_version'],self.cfg['start_dir']) + if self.cfg['dbcsr_version'] == '2.1.0': + cpstringb="cp -r %s../dbcsr-%s/.cp2k %sexts/dbcsr/" %(self.cfg['start_dir'],self.cfg['dbcsr_version'],self.cfg['start_dir']) + + vorbis="cd %s../libvori%s/ && mkdir build && cd build && cmake .. && gmake && cp libvori.a %s/ " %(self.cfg['start_dir'],self.cfg['libvori_version'], self.cfg['start_dir']) +# run_cmd(cpstring) + self.log.info(cpstring) +# self.log.info(cpstringb) + self.log.info(vorbis) + os.system(cpstring) + if self.cfg['dbcsr_version'] == '2.1.0': + os.system(cpstringb) + + os.system(vorbis) + + # correct start dir, if needed + # recent CP2K versions have a 'cp2k' dir in the unpacked 'cp2k' dir + cp2k_path = os.path.join(self.cfg['start_dir'], 'cp2k') + if os.path.exists(cp2k_path): + self.cfg['start_dir'] = cp2k_path + self.log.info("Corrected start_dir to %s" % self.cfg['start_dir']) + + # set compilers options according to toolchain config + # full debug: -g -traceback -check all -fp-stack-check + # -g links to mpi debug libs + if self.toolchain.options['debug']: + self.debug = '-g' + self.log.info("Debug build") + if self.toolchain.options['pic']: + self.fpic = "-fPIC" + self.log.info("Using fPIC") + + # report on extra flags being used + if self.cfg['extracflags']: + self.log.info("Using extra CFLAGS: %s" % self.cfg['extracflags']) + if self.cfg['extradflags']: + self.log.info("Using extra DFLAGS: %s" % self.cfg['extradflags']) + + # lib(x)smm support + libsmm = get_software_root('libsmm') + libxsmm = get_software_root('libxsmm') + if libxsmm: + self.cfg.update('extradflags', '-D__LIBXSMM') + self.libsmm = '-lxsmm -lxsmmf' + self.log.debug('Using libxsmm %s' % libxsmm) + elif libsmm: + libsmms = glob.glob(os.path.join(libsmm, 'lib', 'libsmm_*nn.a')) + dfs = [os.path.basename(os.path.splitext(x)[0]).replace('lib', '-D__HAS_') for x in libsmms] + moredflags = ' ' + ' '.join(dfs) + self.cfg.update('extradflags', moredflags) + self.libsmm = ' '.join(libsmms) + self.log.debug('Using libsmm %s (extradflags %s)' % (self.libsmm, moredflags)) + + # obtain list of modinc's to use + if self.cfg["modinc"]: + self.modincpath = self.prepmodinc() + + # set typearch + self.typearch = "Linux-x86-64-%s" % self.toolchain.name + + # extra make instructions + self.make_instructions = '' # "graphcon.o: graphcon.F\n\t$(FC) -c $(FCFLAGS2) $<\n" + + # compiler toolchain specific configuration + comp_fam = self.toolchain.comp_family() + if comp_fam == toolchain.INTELCOMP: + options = self.configure_intel_based() + elif comp_fam == toolchain.GCC: + options = self.configure_GCC_based() + else: + raise EasyBuildError("Don't know how to tweak configuration for compiler family %s" % comp_fam) + + # BLAS/FFTW + if get_software_root('imkl'): + options = self.configure_MKL(options) + else: + # BLAS + if get_software_root('ACML'): + options = self.configure_ACML(options) + else: + options = self.configure_BLAS_lib(options) + + # FFTW (no MKL involved) + if 'fftw3' in os.getenv('LIBFFT', ''): + options = self.configure_FFTW3(options) + + # LAPACK + if os.getenv('LIBLAPACK_MT', None) is not None: + options = self.configure_LAPACK(options) + + if os.getenv('LIBSCALAPACK', None) is not None: + options = self.configure_ScaLAPACK(options) + + # PLUMED + plumed = get_software_root('PLUMED') + if self.cfg['plumed'] and not plumed: + raise EasyBuildError("The PLUMED module needs to be loaded to build CP2K with PLUMED support") + + # enable PLUMED support if PLUMED is listed as a dependency + # and PLUMED support is either explicitly enabled (plumed = True) or unspecified ('plumed' not defined) + if plumed and (self.cfg['plumed'] or self.cfg['plumed'] is None): + options['LIBS'] += ' -lplumed' + options['DFLAGS'] += ' -D__PLUMED2' + + # ELPA + elpa = get_software_root('ELPA') + if elpa: + options['LIBS'] += ' -lelpa' + elpa_inc_dir = os.path.join(elpa, 'include', 'elpa-%s' % get_software_version('ELPA'), 'modules') + options['FCFLAGSOPT'] += ' -I%s ' % elpa_inc_dir + if LooseVersion(self.version) >= LooseVersion('6.1'): + elpa_ver = ''.join(get_software_version('ELPA').split('.')[:2]) + options['DFLAGS'] += ' -D__ELPA=%s' % elpa_ver + elpa_inc_dir = os.path.join(elpa, 'include', 'elpa-%s' % get_software_version('ELPA'), 'elpa') + options['FCFLAGSOPT'] += ' -I%s ' % elpa_inc_dir + else: + options['DFLAGS'] += ' -D__ELPA3' + + # CUDA + if self.cfg['cuda']: + cuda = get_software_root('CUDA') + if cuda: + options['DFLAGS'] += ' -D__ACC -D__DBCSR_ACC' + options['LIBS'] += ' -lcudart -lcublas -lcufft -lrt' + options['NVCC'] = ' nvcc' + + # libvorbi + # avoid group nesting + options['LIBS'] = options['LIBS'].replace('-Wl,--start-group', '').replace('-Wl,--end-group', '') + + options['LIBS'] = "-Wl,--start-group %s -Wl,--end-group" % options['LIBS'] + options['LIBS'] = "%s %slibvori.a " % (options['LIBS'], self.cfg['start_dir']) + + # specify correct location for 'data' directory in final installation + options['DATA_DIR'] = os.path.join(self.installdir, 'data') + + # create arch file using options set + archfile = os.path.join(self.cfg['start_dir'], 'arch', '%s.%s' % (self.typearch, self.cfg['type'])) + txt = self._generate_makefile(options) + write_file(archfile, txt) + self.log.info("Content of makefile (%s):\n%s" % (archfile, txt)) + + def prepmodinc(self): + """Prepare list of module files""" + + self.log.debug("Preparing module files") + + imkl = get_software_root('imkl') + + if imkl: + + # prepare modinc target path + modincpath = os.path.join(os.path.dirname(os.path.normpath(self.cfg['start_dir'])), 'modinc') + self.log.debug("Preparing module files in %s" % modincpath) + + mkdir(modincpath, parents=True) + + # get list of modinc source files + modincdir = os.path.join(imkl, self.cfg["modincprefix"], 'include') + + if isinstance(self.cfg["modinc"], list): + modfiles = [os.path.join(modincdir, x) for x in self.cfg["modinc"]] + + elif isinstance(self.cfg["modinc"], bool) and self.cfg["modinc"]: + modfiles = glob.glob(os.path.join(modincdir, '*.f90')) + + else: + raise EasyBuildError("prepmodinc: Please specify either a boolean value or a list of files in modinc " + "(found: %s).", self.cfg["modinc"]) + + f77 = os.getenv('F77') + if not f77: + raise EasyBuildError("F77 environment variable not set, can't continue.") + + # create modinc files + for f in modfiles: + if f77.endswith('ifort'): + cmd = "%s -module %s -c %s" % (f77, modincpath, f) + elif f77 in ['gfortran', 'mpif77']: + cmd = "%s -J%s -c %s" % (f77, modincpath, f) + else: + raise EasyBuildError("prepmodinc: Unknown value specified for F77 (%s)", f77) + + run_cmd(cmd, log_all=True, simple=True) + + return modincpath + else: + raise EasyBuildError("Don't know how to prepare modinc, imkl not found") + + def configure_common(self): + """Common configuration for all toolchains""" + + # openmp introduces 2 major differences + # -automatic is default: -noautomatic -auto-scalar + # some mem-bandwidth optimisation + if self.cfg['type'] == 'psmp': + self.openmp = self.toolchain.get_flag('openmp') + + # determine which opt flags to use + if self.cfg['typeopt']: + optflags = 'OPT' + regflags = 'OPT2' + else: + optflags = 'NOOPT' + regflags = 'NOOPT' + + # make sure a MPI-2 able MPI lib is used + mpi2 = False + if hasattr(self.toolchain, 'MPI_FAMILY') and self.toolchain.MPI_FAMILY is not None: + known_mpi2_fams = [toolchain.MPICH, toolchain.MPICH2, toolchain.MVAPICH2, toolchain.OPENMPI, + toolchain.INTELMPI] + mpi_fam = self.toolchain.mpi_family() + if mpi_fam in known_mpi2_fams: + mpi2 = True + self.log.debug("Determined MPI2 compatibility based on MPI toolchain component: %s" % mpi_fam) + else: + self.log.debug("Cannot determine MPI2 compatibility based on MPI toolchain component: %s" % mpi_fam) + else: + # can't use toolchain.mpi_family, because of system toolchain + mpi2libs = ['impi', 'MVAPICH2', 'OpenMPI', 'MPICH2', 'MPICH'] + for mpi2lib in mpi2libs: + if get_software_root(mpi2lib): + mpi2 = True + self.log.debug("Determined MPI2 compatibility based on loaded MPI module: %s") + else: + self.log.debug("MPI-2 supporting MPI library %s not loaded.") + + if not mpi2: + raise EasyBuildError("CP2K needs MPI-2, no known MPI-2 supporting library loaded?") + + cppflags = os.getenv('CPPFLAGS') + ldflags = os.getenv('LDFLAGS') + cflags = os.getenv('CFLAGS') + fflags = os.getenv('FFLAGS') + fflags_lowopt = re.sub('-O[0-9]', '-O1', fflags) + options = { + 'CC': os.getenv('MPICC'), + 'CPP': '', + 'FC': '%s %s' % (os.getenv('MPIF90'), self.openmp), + 'LD': '%s %s' % (os.getenv('MPIF90'), self.openmp), + 'AR': 'ar -r', + 'CPPFLAGS': '', + + 'FPIC': self.fpic, + 'DEBUG': self.debug, + + 'FCFLAGS': '$(FCFLAGS%s)' % optflags, + 'FCFLAGS2': '$(FCFLAGS%s)' % regflags, + + 'CFLAGS': ' %s %s %s $(FPIC) $(DEBUG) %s ' % (cflags, cppflags, ldflags, self.cfg['extracflags']), + 'DFLAGS': ' -D__parallel -D__BLACS -D__SCALAPACK -D__FFTSG %s' % self.cfg['extradflags'], + + 'LIBS': os.getenv('LIBS', ''), + + 'FCFLAGSNOOPT': '$(DFLAGS) $(CFLAGS) -O0 $(FREE) $(FPIC) $(DEBUG)', + 'FCFLAGSOPT': '%s $(FREE) $(SAFE) $(FPIC) $(DEBUG)' % fflags, + 'FCFLAGSOPT2': '%s $(FREE) $(SAFE) $(FPIC) $(DEBUG)' % fflags_lowopt, + } + + libint = get_software_root('LibInt') + if libint: + options['DFLAGS'] += ' -D__LIBINT' + + libintcompiler = "%s %s" % (os.getenv('CC'), os.getenv('CFLAGS')) + + # Build libint-wrapper, if required + libint_wrapper = '' + + # required for old versions of GCC + if not self.compilerISO_C_BINDING: + options['DFLAGS'] += ' -D__HAS_NO_ISO_C_BINDING' + + # determine path for libint_tools dir + libinttools_paths = ['libint_tools', 'tools/hfx_tools/libint_tools'] + libinttools_path = None + for path in libinttools_paths: + path = os.path.join(self.cfg['start_dir'], path) + if os.path.isdir(path): + libinttools_path = path + change_dir(libinttools_path) + if not libinttools_path: + raise EasyBuildError("No libinttools dir found") + + # build libint wrapper + cmd = "%s -c libint_cpp_wrapper.cpp -I%s/include" % (libintcompiler, libint) + if not run_cmd(cmd, log_all=True, simple=True): + raise EasyBuildError("Building the libint wrapper failed") + libint_wrapper = '%s/libint_cpp_wrapper.o' % libinttools_path + + # determine Libint libraries based on major version number + libint_maj_ver = get_software_version('Libint').split('.')[0] + if libint_maj_ver == '1': + libint_libs = "$(LIBINTLIB)/libderiv.a $(LIBINTLIB)/libint.a $(LIBINTLIB)/libr12.a" + elif libint_maj_ver == '2': + # libint_libs = "$(LIBINTLIB)/libint2.a" + libint_libs = "-L$(LIBINTLIB) -lint2" + else: + raise EasyBuildError("Don't know how to handle libint version %s", libint_maj_ver) + self.log.info("Using Libint version %s" % (libint_maj_ver)) + + options['LIBINTLIB'] = '%s/lib' % libint + options['LIBS'] += ' %s -lstdc++ %s' % (libint_libs, libint_wrapper) + + # add Libint include dir to $FCFLAGS + options['FCFLAGS'] += ' -I' + os.path.join(libint, 'include') + + else: + # throw a warning, since CP2K without Libint doesn't make much sense + self.log.warning("Libint module not loaded, so building without Libint support") + + libxc = get_software_root('libxc') + if libxc: + cur_libxc_version = get_software_version('libxc') + if LooseVersion(self.version) >= LooseVersion('6.1'): + libxc_min_version = '4.0.3' + options['DFLAGS'] += ' -D__LIBXC' + else: + libxc_min_version = '2.0.1' + options['DFLAGS'] += ' -D__LIBXC2' + + if LooseVersion(cur_libxc_version) < LooseVersion(libxc_min_version): + raise EasyBuildError("This version of CP2K is not compatible with libxc < %s" % libxc_min_version) + + if LooseVersion(cur_libxc_version) >= LooseVersion('4.0.3'): + # cfr. https://www.cp2k.org/howto:compile#k_libxc_optional_wider_choice_of_xc_functionals + options['LIBS'] += ' -L%s/lib -lxcf03 -lxc' % libxc + elif LooseVersion(cur_libxc_version) >= LooseVersion('2.2'): + options['LIBS'] += ' -L%s/lib -lxcf90 -lxc' % libxc + else: + options['LIBS'] += ' -L%s/lib -lxc' % libxc + self.log.info("Using Libxc-%s" % cur_libxc_version) + options['FCFLAGSOPT'] += ' -I%s/include ' %libxc + else: + self.log.info("libxc module not loaded, so building without libxc support") + + return options + + def configure_intel_based(self): + """Configure for Intel based toolchains""" + + # based on guidelines available at + # http://software.intel.com/en-us/articles/build-cp2k-using-intel-fortran-compiler-professional-edition/ + intelurl = ''.join(["http://software.intel.com/en-us/articles/", + "build-cp2k-using-intel-fortran-compiler-professional-edition/"]) + + options = self.configure_common() + + extrainc = '' + if self.modincpath: + extrainc = '-I%s' % self.modincpath + + options.update({ + # -Vaxlib : older options + 'FREE': '-fpp -free', + + # SAFE = -assume protect_parens -fp-model precise -ftz # causes problems, so don't use this + 'SAFE': '-assume protect_parens -no-unroll-aggressive', + + 'INCFLAGS': '$(DFLAGS) -I$(INTEL_INC) -I$(INTEL_INCF) %s' % extrainc, + + 'LDFLAGS': '$(INCFLAGS) ', + 'OBJECTS_ARCHITECTURE': 'machine_intel.o', + }) + + options['DFLAGS'] += ' -D__INTEL' + + options['FCFLAGSOPT'] += ' $(INCFLAGS) -heap-arrays 64' + options['FCFLAGSOPT2'] += ' $(INCFLAGS) -heap-arrays 64' + + ifortver_string = get_software_version('ifort') + if not ifortver_string: + ifortver_string = get_software_version('intel-compilers') + ifortver = LooseVersion(ifortver_string) + + # -i-static has been deprecated prior to 2013, but was still usable. From 2015 it is not. + if ifortver < LooseVersion("2013"): + options['LDFLAGS'] += ' -i-static ' + else: + options['LDFLAGS'] += ' -static-intel ' + + # Otherwise it fails on linking, since there are 2 definitions of main + if LooseVersion(self.version) >= LooseVersion('4.1'): + options['LDFLAGS'] += ' -nofor-main ' + + failmsg = "CP2K won't build correctly with the Intel %%s compilers prior to %%s, see %s" % intelurl + fypp="{}tools/build_utils/fypp".format(self.cfg['start_dir']) + fyppsrc="{}src".format(self.cfg['start_dir']) + + self.make_instructions += "pao_param_linpot.o:{}/pao_param_linpot.F\n\t{} -n $< pao_param_linpot.F90\n\t$(FC) -c -I{} -Iexts/dbcsr $(FCFLAGS2) pao_param_linpot.F90\n\n".format(fyppsrc,fypp,fyppsrc) + self.make_instructions += "lri_forces.o:{}/lri_forces.F\n\t{} -n $< lri_forces.F90\n\t$(FC) -c -I{} -Iexts/dbcsr $(FCFLAGS2) lri_forces.F90\n\n".format(fyppsrc,fypp,fyppsrc) + self.make_instructions += "mp2_optimize_ri_basis.o:{}/mp2_optimize_ri_basis.F\n\t{} -n $< mp2_optimize_ri_basis.F90\n\t$(FC) -c -I{} -Iexts/dbcsr $(FCFLAGS2) mp2_optimize_ri_basis.F90\n\n".format(fyppsrc,fypp,fyppsrc) + self.make_instructions += "lri_optimize_ri_basis.o:{}/lri_optimize_ri_basis.F\n\t{} -n $< lri_optimize_ri_basis.F90\n\t$(FC) -c -I{} -Iexts/dbcsr $(FCFLAGS2) lri_optimize_ri_basis.F90\n\n".format(fyppsrc,fypp,fyppsrc) + self.make_instructions += "hfx_contraction_methods.o:{}/hfxbase/hfx_contraction_methods.F\n\t{} -n $< hfx_contraction_methods.F90\n\t$(FC) -c -I{}/hfxbase -Iexts/dbcsr $(FCFLAGS2) hfx_contraction_methods.F90\n\n".format(fyppsrc,fypp,fyppsrc) + + return options + + def configure_GCC_based(self): + """Configure for GCC based toolchains""" + options = self.configure_common() + + options.update({ + # need this to prevent "Unterminated character constant beginning" errors + 'FREE': '-ffree-form -ffree-line-length-none', + + 'LDFLAGS': '$(FCFLAGS)', + 'OBJECTS_ARCHITECTURE': 'machine_gfortran.o', + }) + + options['DFLAGS'] += ' -D__GFORTRAN' + + options['FCFLAGSOPT'] += ' $(DFLAGS) $(CFLAGS) -fmax-stack-var-size=32768' + options['FCFLAGSOPT2'] += ' $(DFLAGS) $(CFLAGS)' + + return options + + def configure_ACML(self, options): + """Configure for AMD Math Core Library (ACML)""" + + openmp_suffix = '' + if self.openmp: + openmp_suffix = '_mp' + + options['ACML_INC'] = '%s/gfortran64%s/include' % (get_software_root('ACML'), openmp_suffix) + options['CFLAGS'] += ' -I$(ACML_INC) -I$(FFTW_INC)' + options['DFLAGS'] += ' -D__FFTACML' + + blas = os.getenv('LIBBLAS', '') + blas = blas.replace('gfortran64', 'gfortran64%s' % openmp_suffix) + options['LIBS'] += ' %s %s %s' % (self.libsmm, os.getenv('LIBSCALAPACK', ''), blas) + + return options + + def configure_BLAS_lib(self, options): + """Configure for BLAS library.""" + options['LIBS'] += ' %s %s' % (self.libsmm, os.getenv('LIBBLAS', '')) + return options + + def configure_MKL(self, options): + """Configure for Intel Math Kernel Library (MKL)""" + + options['INTEL_INC'] = '$(MKLROOT)/include' + options['DFLAGS'] += ' -D__FFTW3' + + extra = '' + if self.modincpath: + extra = '-I%s' % self.modincpath + options['CFLAGS'] += ' -I$(INTEL_INC) %s $(FPIC) $(DEBUG)' % extra + + options['LIBS'] += ' %s %s' % (self.libsmm, os.getenv('LIBSCALAPACK', '')) + + fftw_root = get_software_root('FFTW') + if fftw_root: + libfft = '-lfftw3' + if self.cfg['type'] == 'psmp': + libfft += ' -lfftw3_omp' + + options['CFLAGS'] += ' -I$(INTEL_INCF)' + options['INTEL_INCF'] = os.path.join(fftw_root, 'include') + options['LIBS'] += ' -L%s %s' % (os.path.join(fftw_root, 'lib'), libfft) + + else: + # only use Intel FFTW wrappers if FFTW is not loaded + options['CFLAGS'] += ' -I$(INTEL_INCF)' + options['DFLAGS'] += ' -D__FFTMKL' + options['INTEL_INCF'] = '$(INTEL_INC)/fftw' + options['LIBS'] = '%s %s' % (os.getenv('LIBFFT', ''), options['LIBS']) + + return options + + def configure_FFTW3(self, options): + """Configure for FFTW3""" + + options.update({ + 'FFTW_INC': os.getenv('FFT_INC_DIR', ''), # GCC + 'FFTW3INC': os.getenv('FFT_INC_DIR', ''), # Intel + 'FFTW3LIB': os.getenv('FFT_LIB_DIR', ''), # Intel + }) + + options['DFLAGS'] += ' -D__FFTW3' + if self.cfg['type'] == 'psmp': + libfft = os.getenv('LIBFFT_MT', '') + else: + libfft = os.getenv('LIBFFT', '') + options['LIBS'] += ' -L%s %s' % (os.getenv('FFT_LIB_DIR', '.'), libfft) + + return options + + def configure_LAPACK(self, options): + """Configure for LAPACK library""" + options['LIBS'] += ' %s' % os.getenv('LIBLAPACK_MT', '') + return options + + def configure_ScaLAPACK(self, options): + """Configure for ScaLAPACK library""" + + options['LIBS'] += ' %s' % os.getenv('LIBSCALAPACK', '') + + return options + + def build_step(self): + """Start the actual build + - go into makefiles dir + - patch Makefile + -build_and_install + """ + +# makefiles = os.path.join(self.cfg['start_dir'], 'makefiles') +# try: +# os.chdir(makefiles) +# except OSError, err: +# raise EasyBuildError("Can't change to makefiles dir %s: %s", makefiles, err) + +# # modify makefile for parallel build +# parallel = self.cfg['parallel'] +# if parallel: +# +# try: +# for line in fileinput.input('Makefile', inplace=1, backup='.orig.patchictce'): +# line = re.sub(r"^PMAKE\s*=.*$", "PMAKE\t= $(SMAKE) -j %s" % parallel, line) +# sys.stdout.write(line) +# except IOError, err: +# raise EasyBuildError("Can't modify/write Makefile in %s: %s", makefiles, err) +# + # update make options with MAKE + self.cfg.update('buildopts', 'MAKE="make -j %s"' % self.cfg['parallel']) + + # update make options with ARCH and VERSION + self.cfg.update('buildopts', 'ARCH=%s VERSION=%s' % (self.typearch, self.cfg['type'])) + + cmd = "make %s" % self.cfg['buildopts'] + + # clean first + run_cmd(cmd + " clean", log_all=True, simple=True, log_output=True) + + # build and install + if self.cfg['library']: + cmd += ' libcp2k' + run_cmd(cmd + " all", log_all=True, simple=True, log_output=True) + + def test_step(self): + """Run regression test.""" + + if self.cfg['runtest']: + + if not build_option('mpi_tests'): + self.log.info("Skipping testing of CP2K since MPI testing is disabled") + return + + if self.cfg['omp_num_threads']: + setvar('OMP_NUM_THREADS', self.cfg['omp_num_threads']) + + # change to root of build dir + try: + os.chdir(self.builddir) + except OSError as err: + raise EasyBuildError("Failed to change to %s: %s", self.builddir, err) + + # use regression test reference output if available + # try and find an unpacked directory that starts with 'LAST-' + regtest_refdir = None + for d in os.listdir(self.builddir): + if d.startswith("LAST-"): + regtest_refdir = d + break + + # location of do_regtest script + cfg_fn = "cp2k_regtest.cfg" + regtest_script = os.path.join(self.cfg['start_dir'], 'tools', 'regtesting', 'do_regtest') + regtest_cmd = "%s -nosvn -nobuild -config %s" % (regtest_script, cfg_fn) + # older version of CP2K + if not os.path.exists(regtest_script): + regtest_script = os.path.join(self.cfg['start_dir'], 'tools', 'do_regtest') + regtest_cmd = "%s -nocvs -quick -nocompile -config %s" % (regtest_script, cfg_fn) + + # patch do_regtest so that reference output is used + if regtest_refdir: + self.log.info("Using reference output available in %s" % regtest_refdir) + try: + for line in fileinput.input(regtest_script, inplace=1, backup='.orig.refout'): + line = re.sub(r"^(dir_last\s*=\${dir_base})/.*$", r"\1/%s" % regtest_refdir, line) + sys.stdout.write(line) + except IOError as err: + raise EasyBuildError("Failed to modify '%s': %s", regtest_script, err) + + else: + self.log.info("No reference output found for regression test, just continuing without it...") + + # prefer using 4 cores, since some tests require/prefer square (n^2) numbers or powers of 2 (2^n) + test_core_cnt = min(self.cfg['parallel'], 4) + if get_avail_core_count() < test_core_cnt: + raise EasyBuildError("Cannot run MPI tests as not enough cores (< %s) are available", test_core_cnt) + else: + self.log.info("Using %s cores for the MPI tests" % test_core_cnt) + + # configure regression test + cfg_txt = '\n'.join([ + 'FORT_C_NAME="%(f90)s"', + 'dir_base=%(base)s', + 'cp2k_version=%(cp2k_version)s', + 'dir_triplet=%(triplet)s', + 'export ARCH=${dir_triplet}', + 'cp2k_dir=%(cp2k_dir)s', + 'leakcheck="YES"', + 'maxtasks=%(maxtasks)s', + 'cp2k_run_prefix="%(mpicmd_prefix)s"', + ]) % { + 'f90': os.getenv('F90'), + 'base': os.path.dirname(os.path.normpath(self.cfg['start_dir'])), + 'cp2k_version': self.cfg['type'], + 'triplet': self.typearch, + 'cp2k_dir': os.path.basename(os.path.normpath(self.cfg['start_dir'])), + 'maxtasks': self.cfg['maxtasks'], + 'mpicmd_prefix': self.toolchain.mpi_cmd_for('', test_core_cnt), + } + + write_file(cfg_fn, cfg_txt) + self.log.debug("Contents of %s: %s" % (cfg_fn, cfg_txt)) + + # run regression test + (regtest_output, ec) = run_cmd(regtest_cmd, log_all=True, simple=False, log_output=True) + + if ec == 0: + self.log.info("Regression test output:\n%s" % regtest_output) + else: + raise EasyBuildError("Regression test failed (non-zero exit code): %s", regtest_output) + + # pattern to search for regression test summary + re_pattern = "number\s+of\s+%s\s+tests\s+(?P<cnt>[0-9]+)" + + # find total number of tests + regexp = re.compile(re_pattern % "", re.M | re.I) + res = regexp.search(regtest_output) + tot_cnt = None + if res: + tot_cnt = int(res.group('cnt')) + else: + raise EasyBuildError("Finding total number of tests in regression test summary failed") + + # function to report on regtest results + def test_report(test_result): + """Report on tests with given result.""" + + postmsg = '' + + test_result = test_result.upper() + regexp = re.compile(re_pattern % test_result, re.M | re.I) + + cnt = None + res = regexp.search(regtest_output) + if not res: + raise EasyBuildError("Finding number of %s tests in regression test summary failed", + test_result.lower()) + else: + cnt = int(res.group('cnt')) + + logmsg = "Regression test reported %s / %s %s tests" + logmsg_values = (cnt, tot_cnt, test_result.lower()) + + # failed tests indicate problem with installation + # wrong tests are only an issue when there are excessively many + if (test_result == "FAILED" and cnt > 0) or (test_result == "WRONG" and (cnt / tot_cnt) > 0.1): + if self.cfg['ignore_regtest_fails']: + self.log.warning(logmsg, *logmsg_values) + self.log.info("Ignoring failures in regression test, as requested.") + else: + raise EasyBuildError(logmsg, *logmsg_values) + elif test_result == "CORRECT" or cnt == 0: + self.log.info(logmsg, *logmsg_values) + else: + self.log.warning(logmsg, *logmsg_values) + + return postmsg + + # number of failed/wrong tests, will report error if count is positive + self.postmsg += test_report("FAILED") + self.postmsg += test_report("WRONG") + + # number of new tests, will be high if a non-suitable regtest reference was used + # will report error if count is positive (is that what we want?) + self.postmsg += test_report("NEW") + + # number of correct tests: just report + test_report("CORRECT") + + def install_step(self): + """Install built CP2K + - copy from exe to bin + - copy data dir (if exists) + - copy tests + """ + + # copy executables + exedir = os.path.join(self.cfg['start_dir'], 'exe', self.typearch) + targetdir = os.path.join(self.installdir, 'bin') + copy_dir(exedir, targetdir) + + # copy libraries and include files, not sure what is strictly required so we take everything + if self.cfg['library']: + libdir = os.path.join(self.cfg['start_dir'], 'lib', self.typearch, self.cfg['type']) + targetdir = os.path.join(self.installdir, 'lib') + copy_dir(libdir, targetdir) + # Also need to populate the include directory + targetdir = os.path.join(self.installdir, 'include') + libcp2k_header = os.path.join(self.cfg['start_dir'], 'src', 'start', 'libcp2k.h') + target_header = os.path.join(targetdir, os.path.basename(libcp2k_header)) + copy_file(libcp2k_header, target_header) + # include all .mod files for fortran users (don't know the exact list so take everything) + mod_path = os.path.join(self.cfg['start_dir'], 'obj', self.typearch, self.cfg['type']) + for mod_file in glob.glob(os.path.join(mod_path, '*.mod')): + target_mod = os.path.join(targetdir, os.path.basename(mod_file)) + copy_file(mod_file, target_mod) + + # copy data dir + datadir = os.path.join(self.cfg['start_dir'], 'data') + targetdir = os.path.join(self.installdir, 'data') + if os.path.exists(targetdir): + self.log.info("Won't copy data dir. Destination directory %s already exists" % targetdir) + elif os.path.exists(datadir): + copy_dir(datadir, targetdir) + else: + self.log.info("Won't copy data dir. Source directory %s does not exist" % datadir) + + # copy tests +# targetdir = os.path.join(self.installdir, 'tests') +# if os.path.exists(targetdir): +# self.log.info("Won't copy tests. Destination directory %s already exists" % targetdir) +# else: +# copy_dir(srctests, targetdir) + # tests constitute several thousand files + # rather tar them and copy to tests.tgz + srctests = os.path.join(self.cfg['start_dir'], 'tests') + tmcmd = "tar -czf {}/tests.tgz {} ".format(self.installdir,srctests); + os.system(tmcmd) + + # copy regression test results + if self.cfg['runtest']: + try: + testdir = os.path.dirname(os.path.normpath(self.cfg['start_dir'])) + for d in os.listdir(testdir): + if d.startswith('TEST-%s-%s' % (self.typearch, self.cfg['type'])): + path = os.path.join(testdir, d) + target = os.path.join(self.installdir, d) + copy_dir(path, target) + self.log.info("Regression test results dir %s copied to %s" % (d, self.installdir)) + break + except (OSError, IOError) as err: + raise EasyBuildError("Failed to copy regression test results dir: %s", err) + + def sanity_check_step(self): + """Custom sanity check for CP2K""" + + cp2k_type = self.cfg['type'] + custom_paths = { + 'files': ["bin/%s.%s" % (x, cp2k_type) for x in ["cp2k", "cp2k_shell"]] + ["tests.tgz"], + 'dirs': ["data"] + } + if self.cfg['library']: + custom_paths['files'].append(os.path.join('lib', 'libcp2k.a')) + custom_paths['files'].append(os.path.join('include', 'libcp2k.h')) + custom_paths['files'].append(os.path.join('include', 'libcp2k.mod')) + super(EB_CP2K, self).sanity_check_step(custom_paths=custom_paths) + + def make_module_extra(self): + """Set up a CP2K_DATA_DIR environment variable to find CP2K provided basis sets""" + + txt = super(EB_CP2K, self).make_module_extra() + + # also define $CP2K_DATA_DIR in module, + # even though CP2K was already configured to pick up 'data' from install dir + # this could be useful for users to access the 'data' dir in a documented way (and it doesn't hurt) + datadir = os.path.join(self.installdir, 'data') + if os.path.exists(datadir): + txt += self.module_generator.set_environment('CP2K_DATA_DIR', datadir) + + return txt diff --git a/Custom_EasyBlocks/elpa.py b/Custom_EasyBlocks/elpa.py index c0c5c5be527d452aa0fc66fb56a59dd970a3ca07..663832f0abf000d22efbdcc12de8c2e59d6a328d 100644 --- a/Custom_EasyBlocks/elpa.py +++ b/Custom_EasyBlocks/elpa.py @@ -37,7 +37,6 @@ from easybuild.framework.easyconfig import CUSTOM from easybuild.tools.build_log import EasyBuildError from easybuild.tools.config import build_option from easybuild.tools.filetools import apply_regex_substitutions -from easybuild.tools.modules import get_software_root from easybuild.tools.systemtools import get_cpu_features, get_shared_lib_ext from easybuild.tools.toolchain.compiler import OPTARCH_GENERIC from easybuild.tools.utilities import nub @@ -54,7 +53,7 @@ class EB_ELPA(ConfigureMake): """Custom easyconfig parameters for ELPA.""" extra_vars = { 'auto_detect_cpu_features': [True, "Auto-detect available CPU features, and configure accordingly", CUSTOM], - 'cuda': [True, "Enable CUDA build if CUDA is among the dependencies", CUSTOM], + 'cuda': [None, "Enable CUDA build if CUDA is among the dependencies", CUSTOM], 'with_shared': [True, "Enable building of shared ELPA libraries", CUSTOM], 'with_single': [True, "Enable building of single precision ELPA functions", CUSTOM], 'with_generic_kernel': [True, "Enable building of ELPA generic kernels", CUSTOM], @@ -110,7 +109,6 @@ class EB_ELPA(ConfigureMake): self.log.info("Enabling use of %s (should be supported based on CPU features)", flag.upper()) setattr(self, flag, True) - def run_all_steps(self, *args, **kwargs): """ Put configure options in place for different builds (with and without openmp). @@ -164,18 +162,22 @@ class EB_ELPA(ConfigureMake): self.cfg.update('configopts', 'LIBS="$LIBLAPACK"') # Add CUDA features - if 'CUDA' in [i['name'] for i in self.cfg.dependencies()]: + cuda_is_dep = 'CUDA' in [i['name'] for i in self.cfg.dependencies()] + if cuda_is_dep and (self.cfg['cuda'] is None or self.cfg['cuda']): self.cfg.update('configopts', '--enable-nvidia-gpu') - cuda_cc_space_sep = self.cfg.template_values['cuda_cc_space_sep'].replace('.','').split() + cuda_cc_space_sep = self.cfg.template_values['cuda_cc_space_sep'].replace('.', '').split() # Just one is supported, so pick the highest one (but prioritize sm_80) selected_cc = "0" for cc in cuda_cc_space_sep: if int(cc) > int(selected_cc) and int(selected_cc) != 80: selected_cc = cc - self.cfg.update('configopts', f'--with-NVIDIA-GPU-compute-capability=sm_{selected_cc}') + self.cfg.update('configopts', '--with-NVIDIA-GPU-compute-capability=sm_%s' % selected_cc) if selected_cc == "80": self.cfg.update('configopts', '--enable-nvidia-sm80-gpu') - + elif not self.cfg['cuda']: + self.log.warning("CUDA is disabled") + elif not cuda_is_dep and self.cfg['cuda']: + raise EasyBuildError("CUDA is not a dependency, but support for CUDA is enabled.") # make all builds verbose self.cfg.update('buildopts', 'V=1') diff --git a/Custom_EasyBlocks/lammps.py b/Custom_EasyBlocks/lammps.py index c058e04ec1f42d715caba41dceb0e4884ff938f2..9cc640ad5d34826252b07ffb5ce5ebb6db0baa18 100644 --- a/Custom_EasyBlocks/lammps.py +++ b/Custom_EasyBlocks/lammps.py @@ -29,7 +29,10 @@ @author: Alan O'Cais (Juelich Supercomputing Centre) """ +import fileinput import os +import re +import sys import tempfile import easybuild.tools.environment as env @@ -141,6 +144,30 @@ class EB_LAMMPS(CMakeMake): extra_vars['separate_build_dir'][0] = True return extra_vars + def patch_step(self): + """ + Changes the default SM in the wrapper. One can also specify it in the command line, but we would have to + distinguish between when it needs to be done and when not. Seems like changing the default is easier + """ + + nvcc_wrapper = os.path.join(os.getcwd(), "lib", "kokkos", "bin", "nvcc_wrapper") + cuda_cc = get_cuda_cc(self) + if isinstance(cuda_cc, list): + sm = 'sm_'+''.join(cuda_cc[0].split('.')) + else: + sm = 'sm_'+''.join(cuda_cc.split('.')) + + try: + for line in fileinput.input(nvcc_wrapper, inplace=1, backup='.orig'): + line = re.sub(r"^\s*(%s\s*=\s*).*\n$" % "default_arch", + r'\1"%s" # patched by EasyBuild\n' % sm, + line) + sys.stdout.write(line) + except IOError as err: + raise EasyBuildError("Failed to patch %s in: %s", fp, err) + + super(EB_LAMMPS, self).patch_step() + def prepare_step(self, *args, **kwargs): """Custom prepare step for LAMMPS.""" super(EB_LAMMPS, self).prepare_step(*args, **kwargs) @@ -152,15 +179,7 @@ class EB_LAMMPS(CMakeMake): 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) + cuda_cc = get_cuda_cc(self) # cmake has its own folder self.cfg['srcdir'] = os.path.join(self.start_dir, 'cmake') @@ -219,7 +238,7 @@ class EB_LAMMPS(CMakeMake): 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 + pkg_user_intel = '-D%sINTEL=' % PKG_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') @@ -229,7 +248,7 @@ class EB_LAMMPS(CMakeMake): 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) + self.cfg.update('configopts', '-D%sOMP=on' % PKG_PREFIX) # FFTW if get_software_root("imkl") or get_software_root("FFTW"): @@ -326,7 +345,6 @@ class EB_LAMMPS(CMakeMake): 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 @@ -435,3 +453,14 @@ def get_cpu_arch(): if ec: raise EasyBuildError("Failed to determine CPU architecture: %s", out) return out.strip() + +def get_cuda_cc(self): + # 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) + return check_cuda_compute_capabilities(cfg_cuda_cc, ec_cuda_cc, cuda=self.cuda) diff --git a/Custom_EasyBlocks/numexpr.py b/Custom_EasyBlocks/numexpr.py new file mode 100644 index 0000000000000000000000000000000000000000..dc7e301ceb4dad323b53a137f2874c1358556967 --- /dev/null +++ b/Custom_EasyBlocks/numexpr.py @@ -0,0 +1,129 @@ +## +# Copyright 2019-2021 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://www.vscentrum.be), +# Flemish Research Foundation (FWO) (http://www.fwo.be/en) +# 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/>. +## +""" +EasyBuild support for building and installing numexpr, implemented as an easyblock +""" +import os +from distutils.version import LooseVersion + +from easybuild.easyblocks.generic.pythonpackage import PythonPackage +from easybuild.tools.filetools import write_file +from easybuild.tools.modules import get_software_root, get_software_version +from easybuild.tools.systemtools import get_cpu_features + + +class EB_numexpr(PythonPackage): + """Support for building/installing numexpr.""" + + @staticmethod + def extra_options(): + """Override some custom easyconfig parameters specifically for numexpr.""" + extra_vars = PythonPackage.extra_options() + + extra_vars['download_dep_fail'][0] = True + extra_vars['use_pip'][0] = True + + return extra_vars + + def __init__(self, *args, **kwargs): + """Initialisation of custom class variables for numexpr.""" + super(EB_numexpr, self).__init__(*args, **kwargs) + + self.imkl_root = None + + def configure_step(self): + """Custom configuration procedure for numexpr.""" + super(EB_numexpr, self).configure_step() + + self.imkl_root = get_software_root('imkl') + + # if Intel MKL is available, set up site.cfg such that the right VML library is used; + # this makes a *big* difference in terms of performance; + # see also https://github.com/pydata/numexpr/blob/master/site.cfg.example + if self.imkl_root: + + # figure out which VML library to link to + cpu_features = get_cpu_features() + if 'avx512f' in cpu_features: + mkl_vml_lib = 'mkl_vml_avx512' + elif 'avx2' in cpu_features: + mkl_vml_lib = 'mkl_vml_avx2' + elif 'avx' in cpu_features: + mkl_vml_lib = 'mkl_vml_avx' + else: + # use default kernels as fallback for non-AVX systems + mkl_vml_lib = 'mkl_vml_def' + + mkl_ver = get_software_version('imkl') + + if LooseVersion(mkl_ver) >= LooseVersion('2021'): + mkl_lib_dirs = [ + os.path.join(self.imkl_root, 'mkl', + 'latest', 'lib', 'intel64'), + ] + mkl_include_dirs = os.path.join( + self.imkl_root, 'mkl', 'latest', 'include') + mkl_libs = ['mkl_intel_lp64', + 'mkl_intel_thread', 'mkl_core', 'iomp5'] + else: + mkl_lib_dirs = [ + os.path.join(self.imkl_root, 'mkl', 'lib', 'intel64'), + os.path.join(self.imkl_root, 'lib', 'intel64'), + ] + mkl_include_dirs = os.path.join( + self.imkl_root, 'mkl', 'include') + mkl_libs = ['mkl_intel_lp64', 'mkl_intel_thread', + 'mkl_core', 'mkl_def', mkl_vml_lib, 'iomp5'] + + site_cfg_txt = '\n'.join([ + "[mkl]", + "include_dirs = %s" % mkl_include_dirs, + "library_dirs = %s" % os.pathsep.join( + mkl_lib_dirs + self.toolchain.get_variable('LDFLAGS', typ=list)), + ]) + + if LooseVersion(self.version) >= LooseVersion("2.8.0"): + site_cfg_txt = '\n'.join([ + site_cfg_txt, + "libraries = %s" % os.pathsep.join(mkl_libs), + ]) + else: + site_cfg_txt = '\n'.join([ + site_cfg_txt, + "mkl_libs = %s" % ', '.join(mkl_libs), + ]) + write_file('site.cfg', site_cfg_txt) + + def sanity_check_step(self): + """Custom sanity check for numexpr.""" + + custom_commands = [] + + # if Intel MKL is available, make sure VML is used + if self.imkl_root: + custom_commands.append( + "python -c 'import numexpr; assert(numexpr.use_vml)'") + + return super(EB_numexpr, self).sanity_check_step(custom_commands=custom_commands) diff --git a/Custom_EasyBlocks/sundials.py b/Custom_EasyBlocks/sundials.py new file mode 100644 index 0000000000000000000000000000000000000000..a05d08e20ddec4efc36c4879ed156057184afc5e --- /dev/null +++ b/Custom_EasyBlocks/sundials.py @@ -0,0 +1,17 @@ +from easybuild.easyblocks.generic.cmakemake import CMakeMake +from easybuild.tools.modules import get_software_root + +class EB_SUNDIALS(CMakeMake): + """Support for building Sundials.""" + + def __init__(self, *args, **kwargs): + """Custom constructor for SuiteSparse easyblock, initialize custom class parameters.""" + super(EB_SUNDIALS, self).__init__(*args, **kwargs) + + def configure_step(self): + cuda = get_software_root('CUDA') + if cuda: + cuda_cc_space_sep = self.cfg.template_values['cuda_cc_space_sep'].replace('.','').split() + _max = max(cuda_cc_space_sep) + self.cfg['configopts'] += '-DCMAKE_CUDA_ARCHITECTURES=\"%s\"' %_max + super(EB_SUNDIALS, self).configure_step() diff --git a/Custom_Hooks/eb_hooks.py b/Custom_Hooks/eb_hooks.py index e4346aa4db289d39c40661b6aa592fc9504561a6..3e3e3b931e9b32d3b02935e4c21f03c14e6a8066 100644 --- a/Custom_Hooks/eb_hooks.py +++ b/Custom_Hooks/eb_hooks.py @@ -237,6 +237,8 @@ def parse_hook(ec, *args, **kwargs): ec = tweak_moduleclass(ec) + ec = tweak_module_conflict_side_compilers(ec) + # If we are parsing we are not searching, in this case if the easyconfig is # located in the search path, warn that it's dependencies will (most probably) # not be resolved @@ -296,6 +298,22 @@ def tweak_moduleclass(ec): return ec +def tweak_module_conflict_side_compilers(ec): + ec_dict = ec.asdict() + if ec['name'] in SIDECOMPILERS: + key = "modluafooter" + value = 'conflict(%s)' % ','.join('"'+x+'"' for x in SIDECOMPILERS) + if key in ec_dict: + if not value in ec_dict[key]: + ec[key] = "\n".join([ec_dict[key], value]) + else: + ec[key] = value + ec.log.info( + "[parse hook] Injecting Lmod conflict property for SIDECOMPILERS") + + return ec + + def inject_site_contact_and_user_labels(ec): ec_dict = ec.asdict() # Check where installations are going to go and add appropriate site contact @@ -386,8 +404,15 @@ def inject_ucx_tweaks(ec): if ec.name in 'UCX' and install_path().lower().startswith('/p/software'): key = "modluafooter" value = ''' -if not ( isloaded("UCX-settings") ) then - load("UCX-settings") +-- This weird construct is to prevent lmod from loading the default settings when reloading/swapping UCX +-- Unfortunately we can't do better (like preserving the UCX transport for CUDA, since the loaded +-- UCX-settings module is lost during the reload +if mode()=="load" then + if isloaded("mpi-settings/CUDA") then + try_load("UCX-settings/RC-CUDA") + else + try_load("UCX-settings") + end end ''' if key in ec_dict: diff --git a/Golden_Repo/a/ADIOS2/ADIOS2-2.7.1-intel-para-2021b.eb b/Golden_Repo/a/ADIOS2/ADIOS2-2.7.1-intel-para-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..ff47b40c76d9a4ee10c67b9a5f11bb458093a8f2 --- /dev/null +++ b/Golden_Repo/a/ADIOS2/ADIOS2-2.7.1-intel-para-2021b.eb @@ -0,0 +1,169 @@ +easyblock = 'CMakeMake' + +name = 'ADIOS2' +version = '2.7.1' + +homepage = 'https://www.olcf.ornl.gov/center-projects/adios/' +description = """The Adaptable IO System (ADIOS) provides a simple, +flexible way for scientists to describe the data in their code that may +need to be written, read, or processed outside of the running +simulation.""" + +toolchain = {'name': 'intel-para', 'version': '2021b'} +toolchainopts = {'pic': True, 'usempi': False} + +github_account = 'ornladios' +source_urls = [GITHUB_SOURCE] +sources = ['v%(version)s.tar.gz'] +patches = ['include4gcc11.patch'] +checksums = [ + 'c8e237fd51f49d8a62a0660db12b72ea5067512aa7970f3fcf80b70e3f87ca3e', + 'ea10445fc942796568c6196a4bed7d506e8a6bf381b2a01c9bdaae38f1601ea2', +] + +builddependencies = [ + ('CMake', '3.21.1'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('Python', '3.9.6'), + ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')), + ('zlib', '1.2.11'), + ('bzip2', '1.0.8'), + ('Szip', '2.1.1'), + ('SZ', '2.1.12'), + ('zfp', '0.5.5'), + ('Blosc', '1.21.1'), + ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3'), + ('libpng', '1.6.37'), + ('ZeroMQ', '4.3.4'), + ('nlohmann-json', '3.10.4'), + ('pybind11', '2.7.1'), +] + +separate_build_dir = True + +configopts = "-DCMAKE_VERBOSE_MAKEFILE=ON " + +configopts += "-DADIOS2_USE_Fortran=ON " +configopts += "-DADIOS2_USE_MPI=ON " + +# Examples/Testing +configopts += "-DADIOS2_BUILD_EXAMPLES=OFF " +configopts += "-DADIOS2_BUILD_EXAMPLES_EXPERIMENTAL=OFF " +configopts += "-DADIOS2_BUILD_TESTING=OFF " + +# Compression +configopts += "-DADIOS2_USE_BZip2=ON " +configopts += "-DBZIP2_DIR=${EBROOTBZIP2} " + +configopts += "-DADIOS2_USE_PNG=ON " +configopts += "-DPNG_DIR=${EBROOTLIBPNG} " + +configopts += "-DADIOS2_USE_SZ=ON " +configopts += "-DSZ_DIR=${EBROOTSZ} " + +configopts += "-DADIOS2_USE_ZFP=ON " +configopts += "-DZFP_DIR=${EBROOTZFP} " + +configopts += "-DADIOS2_USE_Blosc=ON " +configopts += "-DBLOSC_DIR=${EBROOTBLOSC} " + +configopts += "-DZLIB_DIR=${EBROOTZLIB} " +configopts += "-DADIOS2_USE_MGARD=OFF " + +# HDF5 +configopts += "-DADIOS2_USE_HDF5=ON " +configopts += "-DHDF5_DIR=${EBROOTHDF5} " + +# ZeroMQ +configopts += "-DADIOS2_USE_ZeroMQ=ON " +configopts += "-DZeroMQ_DIR=${EBROOTZEROMQ} " + +# Python +configopts += "-DADIOS2_USE_Python=ON " +configopts += "-DPython_DIR=${EBROOTPYTHON} " + +# System Virtual Shared Memory +configopts += "-DADIOS2_USE_SysVShMem=ON " + +# Strong Staging Coupler +# https://adios2.readthedocs.io/en/latest/engines/engines.html#ssc-strong-staging-coupler +configopts += "-DADIOS2_USE_SSC=ON " + +# Sustainable Staging Transport +# https://adios2.readthedocs.io/en/latest/engines/engines.html#sst-sustainable-staging-transport +configopts += "-DADIOS2_USE_SST=ON " +# Can optionally use LibFabric for RDMA transport: if -DLIBFABRIC_ROOT=<path> is set. + +# DataMan +# https://adios2.readthedocs.io/en/latest/engines/engines.html#dataman-for-wide-area-network-data-staging +configopts += "-DADIOS2_USE_DataMan=ON " + +# DataSpaces (mind. version 1.8) +configopts += "-DADIOS2_USE_DataSpaces=OFF " + +# external libs +configopts += "-DADIOS2_USE_EXTERNAL_PYBIND11=ON " +configopts += "-Dpybind11_DIR=${EBROOTPYBIND11} " +configopts += "-DADIOS2_USE_EXTERNAL_NLOHMANN_JSON=ON " +configopts += "-Dnlohmann_json_DIR=${EBROOTNLOHMANNMINJSON} " + +# more options +configopts += "-DADIOS2_USE_IME=OFF " +configopts += "-DADIOS2_USE_Profiling=OFF " +configopts += "-DADIOS2_USE_Table=OFF " +# configopts += "-DADIOS2_USE_Endian_Reverse=ON " + +runtest = False + +# create pkgconfig files +postinstallcmds = [ + 'mkdir %(installdir)s/lib/pkgconfig', + """echo -e "Name: adios2 +Description: ADIOS2 I/O library +Version: %(version)s +Requires: bzip2, zfp, sz, libpng, blosc +Libs: $(%(installdir)s/bin/adios2-config --c-libs) +Cflags: $(%(installdir)s/bin/adios2-config --c-flags)" > %(installdir)s/lib/pkgconfig/adios2.pc""", + """echo -e "Name: adios2_cxx +Description: ADIOS2 I/O library (C++) +Version: %(version)s +Libs: $(%(installdir)s/bin/adios2-config --cxx-libs) +Cflags: $(%(installdir)s/bin/adios2-config --cxx-flags)" > %(installdir)s/lib/pkgconfig/adios2_cxx.pc""", + """echo -e "Name: adios2_f +Description: ADIOS2 I/O library (Fortran) +Version: %(version)s +Libs: $(%(installdir)s/bin/adios2-config --fortran-libs) +Cflags: $(%(installdir)s/bin/adios2-config --fortran-flags)" > %(installdir)s/lib/pkgconfig/adios2_f.pc""", +] + +sanity_check_paths = { + 'files': ['bin/adios2-config', 'bin/bpls', 'bin/bp4dbg'], + 'files': ['include/adios2.h', 'include/adios2_c.h', 'include/adios2/fortran/adios2.mod'], + 'files': [ + 'lib64/libadios2_core.so', 'lib64/libadios2_core_mpi.so', 'lib64/cmake/adios2/adios2-config.cmake', + 'lib64/libadios2_c.so', 'lib64/libadios2_c_mpi.so', 'lib64/libadios2_cxx11.so', + 'lib64/libadios2_cxx11_mpi.so', 'lib64/libadios2_fortran.so', 'lib64/libadios2_fortran_mpi.so' + ], + 'dirs': ['lib/python%(pyshortver)s/site-packages'] +} + +sanity_check_paths = { + 'files': ['bin/adios2-config', 'bin/bpls'], + 'dirs': ['include/adios2', 'lib/python%(pyshortver)s'], +} + +modextrapaths = { + 'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages', +} + +modextravars = { + 'ADIOS2_PKGCONFIG_LIBS': 'adios2', + 'ADIOS2_CXX_PKGCONFIG_LIBS': 'adios2_cxx', + 'ADIOS2_FORTRAN_PKGCONFIG_LIBS': 'adios2_f', +} + +moduleclass = 'data' diff --git a/Golden_Repo/a/AMBER/AMBER-20-gpsmkl-2021b.eb b/Golden_Repo/a/AMBER/AMBER-20-gpsmkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..b3d1e396dc2c15f6856d70fd4de96b875e115442 --- /dev/null +++ b/Golden_Repo/a/AMBER/AMBER-20-gpsmkl-2021b.eb @@ -0,0 +1,90 @@ +easyblock = 'CMakeMake' + +name = 'AMBER' +version = '20' +versionsuffix = '-AmberTools-21' + +homepage = 'http://ambermd.org' +description = """ +AMBER: 'Assisted Model Building with Energy Refinement' is a set of molecular +mechanics force fields and a package of molecular simulation programs. + +Citation: +D.A. Case, K. Belfon, I.Y. Ben-Shalom, S.R. Brozell, D.S. Cerutti, +T.E. Cheatham, III, V.W.D. Cruzeiro, T.A. Darden, R.E. Duke, G. Giambasu, +M.K. Gilson, H. Gohlke, A.W. Goetz, R. Harris, S. Izadi, S.A. Izmailov, +K. Kasavajhala, A. Kovalenko, R. Krasny, T. Kurtzman, T.S. Lee, S. LeGrand, +P. Li, C. Lin, J. Liu, T. Luchko, R. Luo, V. Man, K.M. Merz, Y. Miao, +O. Mikhailovskii, G. Monard, H. Nguyen, A. Onufriev, F.Pan, S. Pantano, +R. Qi, D.R. Roe, A. Roitberg, C. Sagui, S. Schott-Verdugo, J. Shen, +C. Simmerling, N.R.Skrynnikov, J. Smith, J. Swails, R.C. Walker, J. Wang, +L. Wilson, R.M. Wolf, X. Wu, Y. Xiong, Y. Xue, D.M. York +and P.A. Kollman (2020), +AMBER 2020, University of California, San Francisco. +""" + + +toolchain = {'name': 'gpsmkl', 'version': '2021b'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), +] +dependencies = [ + ('FFTW', '3.3.10'), + ('Python', '3.9.6'), + ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')), + ('Boost', '1.78.0'), + ('flex', '2.6.4'), + ('NCCL', '2.11.4', '-CUDA-11.5'), +] + +sources = [ + 'AmberTools21.tar.bz2', + 'Amber20.tar.bz2', +] +patches = [ + 'fix_nmrat_error.patch', +] +checksums = [ + 'f55fa930598d5a8e9749e8a22d1f25cab7fcf911d98570e35365dd7f262aaafd', + 'a4c53639441c8cc85adee397933d07856cc4a723c82c6bea585cd76c197ead75', + 'af92af090fc4df06b504bd9aabc88f3c63b006aa15b70ee118a789ce19f60b98', +] + +separate_build_dir = True +local_build_mpi_parts = "TRUE" +local_build_cuda_parts = "TRUE" +local_build_cuda_nccl = "TRUE" + +preconfigopts = "CC=gcc && CXX=g++ && COMPILER=GNU " +preconfigopts += " && cd %(builddir)s/amber20_src && " +preconfigopts += " ./update_amber --update && cd ../easybuild_obj && " + +configopts = "-DCOMPILER=GNU -DCHECK_UPDATES=OFF -DAPPLY_UPDATES=OFF -DBUILD_GUI=FALSE " +configopts += " -DINSTALL_TESTS=TRUE -DMPI=%s " % local_build_mpi_parts +configopts += " -DDOWNLOAD_MINICONDA=FALSE -DTRUST_SYSTEM_LIBS=TRUE " +configopts += " -DCUDA=%s " % local_build_cuda_parts +configopts += " -DNCCL=%s " % local_build_cuda_nccl +buildopts = 'NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 \ + -gencode=arch=compute_75,code=sm_75 \ + -gencode=arch=compute_80,code=sm_80"' + +modextravars = { + 'AMBERHOME': '%(installdir)s/', +} + +modluafooter = ''' +add_property("arch","gpu") +''' + +group = "amber" + +modloadmsg = ''' +The access to this software is restricted to members of the group "amber". +The JSC has a site licence for academic users. If you would like to get +access please see: +"http://www.fz-juelich.de/ias/jsc/EN/Expertise/Support/Software/Chemistry/AmberConfirmationOfLicence.html" +''' + +moduleclass = 'bio' diff --git a/Golden_Repo/a/AMBER/fix_nmrat_error.patch b/Golden_Repo/a/AMBER/fix_nmrat_error.patch new file mode 100644 index 0000000000000000000000000000000000000000..76804f018070277c9a77c09fe05a9e4c4a90ee9c --- /dev/null +++ b/Golden_Repo/a/AMBER/fix_nmrat_error.patch @@ -0,0 +1,12 @@ +diff -ruN amber20_src/src/pmemd/src/cuda/gpu.cpp amber20_src1/src/pmemd/src/cuda/gpu.cpp +--- amber20_src/src/pmemd/src/cuda/gpu.cpp 2022-02-28 12:02:56.035534480 +0100 ++++ amber20_src1/src/pmemd/src/cuda/gpu.cpp 2022-02-28 12:26:15.265104588 +0100 +@@ -2849,7 +2849,7 @@ + } + // torsions, resttype = 3 + else if (resttype[i] == 3) { +- if (nmrat[i][0] >= 0 && nmrat[i][1] >= 0 && nmrat[i][2] >= 0 && nmrat[3] >= 0) { ++ if (nmrat[i][0] >= 0 && nmrat[i][1] >= 0 && nmrat[i][2] >= 0 && nmrat[i][3] >= 0) { + torsions++; + } + else { diff --git a/Golden_Repo/a/AMD-uProf/AMD-uProf-3.4.502-GCCcore-11.2.0.eb b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.4.502-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..ca81e393f2faf833b185d9a6a816db42d211ea3f --- /dev/null +++ b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.4.502-GCCcore-11.2.0.eb @@ -0,0 +1,51 @@ +## +# Author: Robert Mijakovic <robert.mijakovic@lxp.lu> +# Ilya Zhukov <i.zhukov@fz-juelich.de> +## +easyblock = 'Binary' + +name = 'AMD-uProf' +version = '3.4.502' + +homepage = 'https://developer.amd.com/amd-uprof/' + +description = """AMD uProf is a performance analysis tool for applications running on Windows, Linux & FreeBSD + operating systems. It allows developers to better understand the runtime performance of their application and + to identify ways to improve its performance.""" + +usage = """ +Provide '--disable-perfparanoid' option to your sbatch command to enable collection of required perf events. + +Typical workflow consists of three phases: + +1. Collect phase - run the application program and collect the profile data, e.g. + $ srun <srun_options> AMDuProfCLI collect <additional_collect_options> <program> [<args>] + +2. Translate phase - process the profile data to aggregate, correlate, and organize into database + $ AMDuProfCLI report -i <report_directory> + +3. Analyze phase - view and analyze the performance data to identify the bottlenecks + $ AMDuProf <report_directory> +""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = ['https://developer.amd.com/wordpress/media/files/'] +sources = ['AMDuProf_Linux_x64_%(version)s.tar.bz2'] +checksums = ['891463c0e4f20e1c67a145441e983c863156a52716234cd8d5a96a8d09635ba7'] + +extract_sources = True + +sanity_check_paths = { + 'files': ['include/AMDTPowerProfileApi.h', 'lib/x64/libAMDProfileController.a', + 'bin/libAMDThreadProfileAPI.%s' % SHLIB_EXT, 'bin/AMDuProf'], + 'dirs': ['Examples'] +} + +sanity_check_commands = ['AMDuProfCLI info --system'] + +modextrapaths = { + 'LD_LIBRARY_PATH': 'bin' +} + +moduleclass = 'perf' diff --git a/Golden_Repo/a/AMD-uProf/AMD-uProf-3.5.671-GCCcore-11.2.0.eb b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.5.671-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..c0874c40b53e287a2ac5cfd30cc708bda7f7e84b --- /dev/null +++ b/Golden_Repo/a/AMD-uProf/AMD-uProf-3.5.671-GCCcore-11.2.0.eb @@ -0,0 +1,53 @@ +## +# Author: Robert Mijakovic <robert.mijakovic@lxp.lu> +# Ilya Zhukov <i.zhukov@fz-juelich.de> +## +easyblock = 'Binary' + +name = 'AMD-uProf' +version = '3.5.671' + +homepage = 'https://developer.amd.com/amd-uprof/' + +description = """AMD uProf is a performance analysis tool for applications running on Windows, Linux & FreeBSD + operating systems. It allows developers to better understand the runtime performance of their application and + to identify ways to improve its performance.""" + +usage = """ +Provide "--disable-perfparanoid" option to your sbatch command to enable collection of required perf events. + +Typical workflow consists of three phases: +Provide "--disable-perfparanoid" option to your sbatch command to enable to collect all required perf events. + +1. Collect phase - run the application program and collect the profile data, e.g. + $ srun <srun_options> AMDuProfCLI collect <additional_collect_options> <program> [<args>] + +2. Translate phase - process the profile data to aggregate, correlate, and organize into database + $ AMDuProfCLI report -i <report_directory> + +3. Analyze phase - view and analyze the performance data to identify the bottlenecks + $ AMDuProf <report_directory> + +""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = ['https://developer.amd.com/wordpress/media/files/'] +sources = ['AMDuProf_Linux_x64_%(version)s.tar.bz2'] +checksums = ['a73066305228658a14af5ecd6cf45a1aa47ae94f7e9d14db31f43013d3ef1a43'] + +extract_sources = True + +sanity_check_paths = { + 'files': ['include/AMDTPowerProfileApi.h', 'lib/x64/libAMDProfileController.a', + 'bin/libAMDThreadProfileAPI.%s' % SHLIB_EXT, 'bin/AMDuProf'], + 'dirs': ['Examples'] +} + +sanity_check_commands = ['AMDuProfCLI info --system'] + +modextrapaths = { + 'LD_LIBRARY_PATH': 'bin' +} + +moduleclass = 'perf' diff --git a/Golden_Repo/a/AOCC/AOCC-3.2.0-GCCcore-11.2.0.eb b/Golden_Repo/a/AOCC/AOCC-3.2.0-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..de77f0ac9a63b700ec9e072c45114003015fac49 --- /dev/null +++ b/Golden_Repo/a/AOCC/AOCC-3.2.0-GCCcore-11.2.0.eb @@ -0,0 +1,24 @@ +name = 'AOCC' +version = '3.2.0' + +homepage = 'https://developer.amd.com/amd-aocc/' +description = "AMD Optimized C/C++ & Fortran compilers (AOCC) based on LLVM 13.0" + +# Clang also depends on libstdc++ during runtime, but this dependency is +# already specified as the toolchain. +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = ['http://developer.amd.com/wordpress/media/files/'] +sources = ['aocc-compiler-%(version)s.tar'] +checksums = ['8493525b3df77f48ee16f3395a68ad4c42e18233a44b4d9282b25dbb95b113ec'] + +clangversion = '13.0.0' + +dependencies = [ + ('binutils', '2.37'), + ('ncurses', '6.2'), + ('zlib', '1.2.11'), + ('libxml2', '2.9.10'), +] + +moduleclass = 'compiler' diff --git a/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb index 97cbb39f3b45785bc9f2c6578fa5001a9f33391f..7564c979a374e241eb0e8a84e10d0d2ec2d13f16 100644 --- a/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb +++ b/Golden_Repo/b/bokeh/bokeh-2.4.1-gcccoremkl-11.2.0-2021.4.0.eb @@ -12,7 +12,7 @@ toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} dependencies = [ ('Python', '3.9.6'), ('PyYAML', '5.4.1'), - ('Pillow-SIMD', '8.3.1'), + ('Pillow-SIMD', '9.0.1'), ('SciPy-bundle', '2021.10'), ('typing-extensions', '3.10.0.0'), ] diff --git a/Golden_Repo/c/CGAL/CGAL-5.2-gpsmpi-2021b.eb b/Golden_Repo/c/CGAL/CGAL-5.2-GCCcore-11.2.0.eb similarity index 93% rename from Golden_Repo/c/CGAL/CGAL-5.2-gpsmpi-2021b.eb rename to Golden_Repo/c/CGAL/CGAL-5.2-GCCcore-11.2.0.eb index cbd4e021d1d54d971fc63158f7d3941369abe281..ceec52409069d465b3778a8c8c4d8a93857bbb40 100644 --- a/Golden_Repo/c/CGAL/CGAL-5.2-gpsmpi-2021b.eb +++ b/Golden_Repo/c/CGAL/CGAL-5.2-GCCcore-11.2.0.eb @@ -7,7 +7,7 @@ description = """The goal of the CGAL Open Source Project is to provide easy acc """ -toolchain = {'name': 'gpsmpi', 'version': '2021b'} +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} toolchainopts = {'strict': True} source_urls = [ @@ -18,6 +18,7 @@ checksums = ['744c86edb6e020ab0238f95ffeb9cf8363d98cde17ebb897d3ea93dac4145923'] builddependencies = [ ('CMake', '3.21.1', '', SYSTEM), ('Eigen', '3.3.9'), + ('binutils', '2.37'), ] dependencies = [ diff --git a/Golden_Repo/c/CP2K/CP2K-8.2.0-intel-para-2021b.eb b/Golden_Repo/c/CP2K/CP2K-8.2.0-intel-para-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..250241c881ac12fd4f2a48407c3e542a115cffc8 --- /dev/null +++ b/Golden_Repo/c/CP2K/CP2K-8.2.0-intel-para-2021b.eb @@ -0,0 +1,94 @@ +name = 'CP2K' +version = '8.2.0' + +homepage = 'http://www.cp2k.org/' +description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular + simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different + methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and + classical pair and many-body potentials. + The default eigensolver is set to Scalapack. This setting can be overridden by specifiying + PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent + - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks: + the program might be killed with a corresponding message from the MPI library ( parastation mpi) + or even hang (openmpi). The user is advised to check whether the particular application is prone to + deadlocks if ELPA is switched on. + The Libvori library for Voronoi integration and the BQB compressed volumetric trajectory data is included + (https://brehm-research.de/voronoi, https://brehm-research.de/bqb). + Tree-Monte-Carlo is disfunctional; +""" + +toolchain = {'name': 'intel-para', 'version': '2021b'} +toolchainopts = {'pic': True, 'openmp': True} + +local_dbcsr_version = '2.1.0m' +local_libvori_version = '-210412' + +sources = [ + 'v%(version)s.tar.gz', + 'v%s.tar.gz' % local_dbcsr_version, + 'libvori%s.tar.gz' % local_libvori_version, +] +source_urls = [ + 'https://github.com/cp2k/cp2k/archive/', + 'https://github.com/cp2k/dbcsr/archive/' +] + +patches = [ + 'CP2K-8.2_fftw3_lib.patch', + 'CP2K-8.2_elpa.patch', +] + +checksums = [ + 'd82c554e764dc16f94c1f671d0cf6523be58360bf9a2d2cbabbad0e73fbcffb2', + 'ba6b53dae5afaccd5d80199c61989ab34405608b50bef16577f780a86518e6b8', + '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac', + 'a8f484930953c3689b4bffbb45d1d3e9abec69a7425b79dfb2d2b64459359c97', + '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d' +] + +dependencies = [ + ('ELPA', '2021.11.001'), + ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')), + ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')), + ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')), + ('FFTW', '3.3.10'), + ('PLUMED', '2.7.2'), +] + +builddependencies = [ + ('flex', '2.6.4'), + ('Bison', '3.7.6'), + ('CMake', '3.21.1'), + ('Python', '3.9.6', '', ('GCCcore', '11.2.0')), +] + + +# Add PLUMED support +plumed = True + +# Disable CUDA +cuda = False + +# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times +configopts = '-D__MAX_CONTR=3' + +# popt or psmp +type = 'psmp' + +# run tests separately (2 nodes of juwels approx 1 hour) +runtest = False + +# which dbcsr_version +dbcsr_version = '2.1.0' + +# additional DFLAGS +extradflags = '-D__MKL -D__LIBVORI' + +# regression test reports failures +ignore_regtest_fails = False + +modextravars = { + 'CP2K_DATA_DIR': '%(installdir)s/data', +} + +moduleclass = 'chem' diff --git a/Golden_Repo/c/CP2K/CP2K-8.2.0-iomkl-2021b.eb b/Golden_Repo/c/CP2K/CP2K-8.2.0-iomkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..19d13eccc77029510878edd888e890b9c1404fb6 --- /dev/null +++ b/Golden_Repo/c/CP2K/CP2K-8.2.0-iomkl-2021b.eb @@ -0,0 +1,94 @@ +name = 'CP2K' +version = '8.2.0' + +homepage = 'http://www.cp2k.org/' +description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular + simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different + methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and + classical pair and many-body potentials. + The default eigensolver is set to Scalapack. This setting can be overridden by specifiying + PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent + - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks: + the program might be killed with a corresponding message from the MPI library ( parastation mpi) + or even hang (openmpi). The user is advised to check whether the particular application is prone to + deadlocks if ELPA is switched on. + The Libvori library for Voronoi integration and the BQB compressed volumetric trajectory data is included + (https://brehm-research.de/voronoi, https://brehm-research.de/bqb). + Tree-Monte-Carlo is disfunctional; +""" + +toolchain = {'name': 'iomkl', 'version': '2021b'} +toolchainopts = {'pic': True, 'openmp': True} + +local_dbcsr_version = '2.1.0m' +local_libvori_version = '-210412' + +sources = [ + 'v%(version)s.tar.gz', + 'v%s.tar.gz' % local_dbcsr_version, + 'libvori%s.tar.gz' % local_libvori_version, +] +source_urls = [ + 'https://github.com/cp2k/cp2k/archive/', + 'https://github.com/cp2k/dbcsr/archive/' +] + +patches = [ + 'CP2K-8.2_fftw3_lib.patch', + 'CP2K-8.2_elpa.patch', +] + +checksums = [ + 'd82c554e764dc16f94c1f671d0cf6523be58360bf9a2d2cbabbad0e73fbcffb2', + 'ba6b53dae5afaccd5d80199c61989ab34405608b50bef16577f780a86518e6b8', + '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac', + 'a8f484930953c3689b4bffbb45d1d3e9abec69a7425b79dfb2d2b64459359c97', + '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d' +] + +dependencies = [ + ('ELPA', '2021.11.001'), + ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')), + ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')), + ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')), + ('FFTW', '3.3.10'), + ('PLUMED', '2.7.2'), +] + +builddependencies = [ + ('flex', '2.6.4'), + ('Bison', '3.7.6'), + ('CMake', '3.21.1'), + ('Python', '3.9.6', '', ('GCCcore', '11.2.0')), +] + + +# Add PLUMED support +plumed = True + +# Disable CUDA +cuda = False + +# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times +configopts = '-D__MAX_CONTR=3' + +# popt or psmp +type = 'psmp' + +# run tests separately (2 nodes of juwels approx 1 hour) +runtest = False + +# which dbcsr_version +dbcsr_version = '2.1.0' + +# additional DFLAGS +extradflags = '-D__MKL -D__LIBVORI' + +# regression test reports failures +ignore_regtest_fails = False + +modextravars = { + 'CP2K_DATA_DIR': '%(installdir)s/data', +} + +moduleclass = 'chem' diff --git a/Golden_Repo/c/CP2K/CP2K-9.1.0-intel-para-2021b.eb b/Golden_Repo/c/CP2K/CP2K-9.1.0-intel-para-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..3ce9ed501b7ba83dbc7cd2f61103317de5437c48 --- /dev/null +++ b/Golden_Repo/c/CP2K/CP2K-9.1.0-intel-para-2021b.eb @@ -0,0 +1,95 @@ +name = 'CP2K' +version = '9.1.0' + +homepage = 'http://www.cp2k.org/' +description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular + simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different + methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and + classical pair and many-body potentials. + The default eigensolver is set to Scalapack. This setting can be overridden by specifiying + PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent + - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks: + the program might be killed with a corresponding message from the MPI library ( parastation mpi) + or even hang (openmpi). The user is advised to check whether the particular application is prone to + deadlocks if ELPA is switched on. + The Libvori library for Voronoi integration and the BQB compressed volumetric trajectory data is included + (https://brehm-research.de/voronoi, https://brehm-research.de/bqb). + Tree-Monte-Carlo is disfunctional; this is the hybrid MPI/OpenMP version of CP2K. +""" + +toolchain = {'name': 'intel-para', 'version': '2021b'} +toolchainopts = {'pic': True, 'openmp': True} + +# which dbcsr_version +dbcsr_version = '2.2.0' +local_libvori_version = '-210412' + +sources = [ + 'v%(version)s.tar.gz', + 'v%s.tar.gz' % dbcsr_version, + 'libvori%s.tar.gz' % local_libvori_version, +] +source_urls = [ + 'https://github.com/cp2k/cp2k/archive/', + 'https://github.com/cp2k/dbcsr/archive/' +] + +patches = [ + 'CP2K-9.1_fftw3_lib.patch', + 'CP2K-9.1_elpa.patch', + 'CP2K-9.1_dbcsr.patch', +] + +checksums = [ + 'e0cd859e506435a38454eeaaa3bc2c1656ffd5d22698062957c84f8b4f426126', + '96ce3c630b78529b9cf063b6d710a682a9c6702a6e74d642e7f469d754f954a5', + '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac', + '1b7674b0046d329f9913ed99e92b53481e878a04a4856c817228d4816d0ea624', + '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d', + 'c480c46d31290056079f6a9d5fa17454d34169d1a7850af22378dd794257c3b7' +] + +dependencies = [ + ('ELPA', '2021.11.001'), + ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')), + ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')), + ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')), + ('FFTW', '3.3.10'), + ('PLUMED', '2.7.2'), +] + +builddependencies = [ + ('flex', '2.6.4'), + ('Bison', '3.7.6'), + ('CMake', '3.21.1'), + ('Python', '3.9.6', '', ('GCCcore', '11.2.0')), +] + + +# Add PLUMED support +plumed = True + +# Disable CUDA +cuda = False + +# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times +configopts = '-D__MAX_CONTR=3' + +# popt or psmp +type = 'psmp' + +# run tests separately (2 nodes of juwels approx 1 hour) +runtest = False + + +# additional DFLAGS +extradflags = '-D__MKL -D__LIBVORI' + +# regression test reports failures +ignore_regtest_fails = False + +modextravars = { + 'CP2K_DATA_DIR': '%(installdir)s/data', +} + +moduleclass = 'chem' diff --git a/Golden_Repo/c/CP2K/CP2K-9.1.0-iomkl-2021b.eb b/Golden_Repo/c/CP2K/CP2K-9.1.0-iomkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..c2a37d0c33b8a399ec3eadaf65ebcc9fe73805c2 --- /dev/null +++ b/Golden_Repo/c/CP2K/CP2K-9.1.0-iomkl-2021b.eb @@ -0,0 +1,95 @@ +name = 'CP2K' +version = '9.1.0' + +homepage = 'http://www.cp2k.org/' +description = """CP2K is a freely available (GPL) program, written in Fortran 95, to perform atomistic and molecular + simulations of solid state, liquid, molecular and biological systems. It provides a general framework for different + methods such as e.g. density functional theory (DFT) using a mixed Gaussian and plane waves approach (GPW), and + classical pair and many-body potentials. + The default eigensolver is set to Scalapack. This setting can be overridden by specifiying + PREFERRED_DIAG_LIBRARY ELPA in the global section of the cp2k input. Note, that application-dependent + - in particular for small basis sizes - the use of the ELPA eigensolver library can cause dead-locks: + the program might be killed with a corresponding message from the MPI library ( parastation mpi) + or even hang (openmpi). The user is advised to check whether the particular application is prone to + deadlocks if ELPA is switched on. + The Libvori library for Voronoi integration and the BQB compressed volumetric trajectory data is included + (https://brehm-research.de/voronoi, https://brehm-research.de/bqb). + Tree-Monte-Carlo is disfunctional; this is the hybrid MPI/OpenMP version of CP2K. +""" + +toolchain = {'name': 'iomkl', 'version': '2021b'} +toolchainopts = {'pic': True, 'openmp': True} + +# which dbcsr_version +dbcsr_version = '2.2.0' +local_libvori_version = '-210412' + +sources = [ + 'v%(version)s.tar.gz', + 'v%s.tar.gz' % dbcsr_version, + 'libvori%s.tar.gz' % local_libvori_version, +] +source_urls = [ + 'https://github.com/cp2k/cp2k/archive/', + 'https://github.com/cp2k/dbcsr/archive/' +] + +patches = [ + 'CP2K-9.1_fftw3_lib.patch', + 'CP2K-9.1_elpa.patch', + 'CP2K-9.1_dbcsr.patch', +] + +checksums = [ + 'e0cd859e506435a38454eeaaa3bc2c1656ffd5d22698062957c84f8b4f426126', + '96ce3c630b78529b9cf063b6d710a682a9c6702a6e74d642e7f469d754f954a5', + '331886aea9d093d8c44b95a07fab13d47f101b1f94a0640d7d670eb722bf90ac', + '1b7674b0046d329f9913ed99e92b53481e878a04a4856c817228d4816d0ea624', + '33c765f5e119541d943c0d9386059e1ef6f82ca1f2e9490adeca6b86656b5b2d', + 'c480c46d31290056079f6a9d5fa17454d34169d1a7850af22378dd794257c3b7' +] + +dependencies = [ + ('ELPA', '2021.11.001'), + ('Libint', '2.7.0-beta.6', '_cp2k_lmax5', ('intel-compilers', '2021.4.0')), + ('libxsmm', '1.16.3', '', ('intel-compilers', '2021.4.0')), + ('libxc', '5.1.7', '', ('intel-compilers', '2021.4.0')), + ('FFTW', '3.3.10'), + ('PLUMED', '2.7.2'), +] + +builddependencies = [ + ('flex', '2.6.4'), + ('Bison', '3.7.6'), + ('CMake', '3.21.1'), + ('Python', '3.9.6', '', ('GCCcore', '11.2.0')), +] + + +# Add PLUMED support +plumed = True + +# Disable CUDA +cuda = False + +# explicit unrolled loops up to __MAX_CONTR, 4 gives excessive compiler times +configopts = '-D__MAX_CONTR=3' + +# popt or psmp +type = 'psmp' + +# run tests separately (2 nodes of juwels approx 1 hour) +runtest = False + + +# additional DFLAGS +extradflags = '-D__MKL -D__LIBVORI' + +# regression test reports failures +ignore_regtest_fails = False + +modextravars = { + 'CP2K_DATA_DIR': '%(installdir)s/data', +} + +moduleclass = 'chem' diff --git a/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb b/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb index 532e489bdc4f0a6c110374adbdaa9f4486aceee1..edaaf6e9777830d220327db79587ab41a6261f6a 100644 --- a/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb +++ b/Golden_Repo/c/Cartopy/Cartopy-0.20.0-GCCcore-11.2.0.eb @@ -20,7 +20,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('Shapely', '1.8.0'), ('lxml', '4.6.3'), - ('Pillow-SIMD', '8.3.1'), + ('Pillow-SIMD', '9.0.1'), ('PROJ', '8.1.0'), ('PyYAML', '5.4.1'), ] diff --git a/Golden_Repo/c/Clang/Clang-13.0.1-GCCcore-11.2.0.eb b/Golden_Repo/c/Clang/Clang-13.0.1-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..135209dc002389aac79d8516ce323b6ca860eb65 --- /dev/null +++ b/Golden_Repo/c/Clang/Clang-13.0.1-GCCcore-11.2.0.eb @@ -0,0 +1,111 @@ +# For using $SYSTEMNAME to determine compute capability. The local prefix is to appease the checker +import os as local_os + +## +# This file is an EasyBuild reciPY as per https://github.com/easybuilders/easybuild +# +# Copyright:: Copyright 2013-2015 Dmitri Gribenko, Ward Poelmans +# Authors:: Dmitri Gribenko <gribozavr@gmail.com> +# Authors:: Ward Poelmans <wpoely86@gmail.com> +# License:: GPLv2 or later, MIT, three-clause BSD. +# $Id$ +## + +name = 'Clang' +version = '13.0.1' + +homepage = 'https://clang.llvm.org/' +description = """C, C++, Objective-C compiler, based on LLVM. Does not + include C++ standard library -- use libstdc++ from GCC.""" + +# Clang also depends on libstdc++ during runtime, but this dependency is +# already specified as the toolchain. +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = [ + "https://github.com/llvm/llvm-project/releases/download/llvmorg-%(version)s"] +sources = [ + 'llvm-%(version)s.src.tar.xz', + 'clang-%(version)s.src.tar.xz', + 'compiler-rt-%(version)s.src.tar.xz', + 'polly-%(version)s.src.tar.xz', + 'openmp-%(version)s.src.tar.xz', + # Also include the LLVM linker + 'lld-%(version)s.src.tar.xz', + 'libcxx-%(version)s.src.tar.xz', + 'libcxxabi-%(version)s.src.tar.xz', + 'clang-tools-extra-%(version)s.src.tar.xz', + 'libunwind-%(version)s.src.tar.xz', +] +checksums = [ + # llvm-13.0.1.src.tar.xz + 'ec6b80d82c384acad2dc192903a6cf2cdbaffb889b84bfb98da9d71e630fc834', + # clang-13.0.1.src.tar.xz + '787a9e2d99f5c8720aa1773e4be009461cd30d3bd40fdd24591e473467c917c9', + # compiler-rt-13.0.1.src.tar.xz + '7b33955031f9a9c5d63077dedb0f99d77e4e7c996266952c1cec55626dca5dfc', + # polly-13.0.1.src.tar.xz + 'f4003e03da57b53bf206faadd0cf53f7b198c38498c605dec45743db23c10ad0', + # openmp-13.0.1.src.tar.xz + '6b79261371616c31fea18cd3ee1797c79ee38bcaf8417676d4fa366a24c96b4f', + # lld-13.0.1.src.tar.xz + '666af745e8bf7b680533b4d18b7a31dc7cab575b1e6e4d261922bbafd9644cfb', + # libcxx-13.0.1.src.tar.xz + '2f446acc00bb7cfb4e866c2fa46d1b6dbf4e7d2ab62e3c3d84e56f7b9e28110f', + # libcxxabi-13.0.1.src.tar.xz + 'db5fa6093c786051e8b1c85527240924eceb6c95eeff0a2bbc57be8422b3cef1', + # clang-tools-extra-13.0.1.src.tar.xz + 'cc2bc8598848513fa2257a270083e986fd61048347eccf1d801926ea709392d0', + # libunwind-13.0.1.src.tar.xz + 'e206dbf1bbe058a113bffe189386ded99a160b2443ee1e2cd41ff810f78551ba', +] + +dependencies = [ + # since Clang is a compiler, binutils is a runtime dependency too + ('binutils', '2.37'), + ('hwloc', '2.5.0'), + ('libxml2', '2.9.10'), + ('ncurses', '6.2'), + ('GMP', '6.2.1'), + ('Z3', '4.8.12'), +] + +builddependencies = [ + ('CMake', '3.21.1'), + ('Python', '3.9.6'), + ('Perl', '5.34.0'), + ('elfutils', '0.185'), +] + +default_cuda_capability = { + 'juwels': '7.0', + 'juwelsbooster': '8.0', + 'jurecadc': '8.0', + 'jusuf': '7.0', + 'hdfml': '7.0' +}[local_os.environ['SYSTEMNAME']] + +configopts = '-DLIBOMP_INSTALL_ALIASES=OFF' + +assertions = True +usepolly = True +build_lld = True +libcxx = True +enable_rtti = True +build_extra_clang_tools = True + +skip_all_tests = True + +sanity_check_paths = { + 'files': ['bin/clang', 'bin/clang++', 'bin/llvm-ar', 'bin/llvm-nm', + 'bin/llvm-as', 'bin/opt', 'bin/llvm-link', 'bin/llvm-config', + 'bin/llvm-symbolizer', 'include/llvm-c/Core.h', 'include/clang-c/Index.h', + 'lib/libclang.so', 'lib/clang/13.0.1/include/stddef.h', 'bin/scan-build', + 'bin/scan-view', 'bin/clang-tidy', 'lib/LLVMPolly.so', 'bin/lld', + 'lib/libc++.so', 'lib/libc++abi.so', 'lib/libomp.so', + 'lib/clang/13.0.1/include/omp.h', 'lib/libomptarget.so', + 'lib/libomptarget.rtl.cuda.so', 'lib/libomptarget.rtl.x86_64.so'], + 'dirs': ['include/clang', 'include/llvm', 'lib/clang/13.0.1/lib', 'include/polly'], +} + +moduleclass = 'sidecompiler' diff --git a/Golden_Repo/c/Code_Saturne/Code_Saturne-7.0.2-gpsmkl-2021b.eb b/Golden_Repo/c/Code_Saturne/Code_Saturne-7.0.2-gpsmkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..f1d1254fe7718d4777646c3289589d1f0015fad5 --- /dev/null +++ b/Golden_Repo/c/Code_Saturne/Code_Saturne-7.0.2-gpsmkl-2021b.eb @@ -0,0 +1,55 @@ +# easyconfig file for Code_Saturne +name = 'Code_Saturne' +version = '7.0.2' + +# extra option for the SLURM batch system +slurm = True + +homepage = 'https://www.code-saturne.org' +description = """ +Code_saturne is the free, open-source software developed to analyze CFD applications. +It solves the Navier-Stokes equations for 2D, 2D-axisymmetric and 3D flows, steady or +unsteady, laminar or turbulent, incompressible or weakly dilatable, isothermal or not, +with scalar transport. + +Code_Saturne %(version)s%(versionsuffix)s is installed in +$EBROOTCODE_SATURNE +""" + +toolchain = {'name': 'gpsmkl', 'version': '2021b'} +toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} + +source_urls = ['https://github.com/code-saturne/code_saturne/archive/refs/tags/'] +sources = ['v%(version)s.tar.gz'] +checksums = ['639879201b42fa5e47ef5acc797a61deadac9d2a6ad82fbb192ebccaa75a0c43'] + +builddependencies = [ + ('Autotools', '20210726', '', SYSTEM), + ('gettext', '0.21', '', SYSTEM), + ('Bison', '3.7.6', '', SYSTEM), + ('flex', '2.6.4', '', SYSTEM), + ('texlive', '20200406'), + ('Doxygen', '1.9.1'), +] + +dependencies = [ + ('Python', '3.9.6'), + ('HDF5', '1.12.1'), + ('CGNS', '4.2.0'), + ('ParMETIS', '4.0.3'), + ('SCOTCH', '6.1.2'), + ('MED', '4.1.0'), + ('PyQt5', '5.15.4'), +] + +configopts = '--with-med=$EBROOTMED --without-medcoupling ' +configopts += '--with-cgns=$EBROOTCGNS ' +configopts += '--with-metis=$EBROOTPARMETIS ' +configopts += '--with-scotch=$EBROOTSCOTCH ' +configopts += '--with-python_prefix=%(installdir)s --with-python_exec_prefix=%(installdir)s ' + +modloadmsg = "To benefit from shell completion for %(name)s commands and\n" +modloadmsg += "options, you may also source a bash completion file by;\n" +modloadmsg += "source $CS_BASH\n" + +moduleclass = 'cae' diff --git a/Golden_Repo/c/Colmap/Colmap-3.7-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/c/Colmap/Colmap-3.7-gcccoremkl-11.2.0-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..e2a6ee22ea6ca88adf3d729dee8ca89bb6c8dc4c --- /dev/null +++ b/Golden_Repo/c/Colmap/Colmap-3.7-gcccoremkl-11.2.0-2021.4.0.eb @@ -0,0 +1,48 @@ +easyblock = 'CMakeMake' + +name = 'Colmap' +version = '3.7' + +homepage = 'https://colmap.github.io' +description = """COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline +with a graphical and command-line interface. +""" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} +toolchainopts = {'cstd': 'c++14'} + +github_account = 'colmap' +source_urls = [GITHUB_SOURCE] +sources = ['%(version)s.tar.gz'] +checksums = ['ceb7cca204550d65b890cd0082c66f4bc69193daf9da64616d8147a46b76cc55'] + +builddependencies = [ + ('binutils', '2.37'), + ('CMake', '3.21.1'), +] + +dependencies = [ + ('Eigen', '3.3.9'), + ('Boost', '1.78.0'), + ('gflags', '2.2.2'), + ('glog', '0.5.0'), + ('SuiteSparse', '5.10.1', '-nompi'), + ('CGAL', '5.2'), + ('ceres-solver', '2.0.0'), + ('FreeImage', '3.18.0'), + ('CUDA', '11.5', '', SYSTEM), + ('OpenGL', '2021b'), + ('Qt5', '5.15.2'), +] + +configopts = "-DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF " +configopts += "-DCUDA_ENABLED=ON " +configopts += "-DCUDA_ARCHS='%(cuda_cc_space_sep)s' " +configopts += "-DCUDA_NVCC_FLAGS='--std c++14' " + +sanity_check_paths = { + 'files': ['bin/colmap', 'lib/colmap/libcolmap.a'], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/c/ccache/ccache-4.5.1.eb b/Golden_Repo/c/ccache/ccache-4.3.eb similarity index 88% rename from Golden_Repo/c/ccache/ccache-4.5.1.eb rename to Golden_Repo/c/ccache/ccache-4.3.eb index 5e1f8b66ceaea21851fd5347038ea127fa6c82c9..41469a2e9fb9dcbacac032f2469b310f4b281191 100644 --- a/Golden_Repo/c/ccache/ccache-4.5.1.eb +++ b/Golden_Repo/c/ccache/ccache-4.3.eb @@ -5,17 +5,15 @@ easyblock = 'CMakeNinja' name = 'ccache' -version = '4.5.1' +version = '4.3' homepage = 'https://ccache.dev/' description = """Ccache (or “ccache”) is a compiler cache. It speeds up recompilation by caching previous compilations and detecting when the same compilation is being done again""" - toolchain = SYSTEM -source_urls = [ - 'https://github.com/ccache/ccache/releases/download/v%(version)s/'] +source_urls = ['https://github.com/ccache/ccache/releases/download/v%(version)s/'] sources = [SOURCE_TAR_GZ] checksums = ['b9789c42e52c73e99428f311a34def9ffec3462736439afd12dbacc7987c1533'] @@ -24,7 +22,7 @@ osdependencies = [('glibc-static', 'libc6-dev')] local_gccver = '11.2.0' builddependencies = [ ('GCC', local_gccver), - ('CMake', '3.21.1', '', SYSTEM), + ('CMake', '3.21.1', '', ('GCCcore', local_gccver)), ('Ninja', '1.10.2', '', ('GCCcore', local_gccver)), ('zstd', '1.5.0', '', ('GCCcore', local_gccver)), ] diff --git a/Golden_Repo/c/ceres-solver/ceres-solver-2.0.0-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/c/ceres-solver/ceres-solver-2.0.0-gcccoremkl-11.2.0-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..6b5de316ca75467a0661a3134854e2e17eae48dd --- /dev/null +++ b/Golden_Repo/c/ceres-solver/ceres-solver-2.0.0-gcccoremkl-11.2.0-2021.4.0.eb @@ -0,0 +1,38 @@ +easyblock = 'CMakeMake' + +name = 'ceres-solver' +version = '2.0.0' + +homepage = 'http://ceres-solver.org' +description = """ +Ceres Solver is an open source C++ library for modeling and solving large, complicated optimization problems. +""" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} +toolchainopts = {'pic': True} + +source_urls = ['http://ceres-solver.org/'] +sources = ['%(name)s-%(version)s.tar.gz'] +checksums = ['10298a1d75ca884aa0507d1abb0e0f04800a92871cd400d4c361b56a777a7603'] + +builddependencies = [ + ('binutils', '2.37'), + ('CMake', '3.21.1', '', SYSTEM) +] + +dependencies = [ + ('Eigen', '3.3.9'), + ('SuiteSparse', '5.10.1', '-nompi'), # ('gcccoremkl', '11.2.0-2021.4.0')), + ('gflags', '2.2.2'), + ('glog', '0.5.0'), +] + +configopts = '-DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF ' +configopts += '-DBUILD_SHARED_LIBS=on ' + +sanity_check_paths = { + 'files': ['lib/libceres.so', 'include/ceres/ceres.h'], + 'dirs': [], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/c/cuTENSOR/cuTENSOR-1.4.0.6-GCCcore-11.2.0.eb b/Golden_Repo/c/cuTENSOR/cuTENSOR-1.4.0.6-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..2f13445dfe49473391c240df39700cdb6721a1bb --- /dev/null +++ b/Golden_Repo/c/cuTENSOR/cuTENSOR-1.4.0.6-GCCcore-11.2.0.eb @@ -0,0 +1,41 @@ +easyblock = 'Tarball' + +name = 'cuTENSOR' +version = '1.4.0.6' + +homepage = 'https://developer.nvidia.com/cutensor' +description = """The cuTENSOR Library is a GPU-accelerated tensor linear algebra library providing tensor contraction, +reduction and elementwise operations.""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = [ + 'https://developer.download.nvidia.com/compute/cutensor/redist/libcutensor/linux-%(arch)s/' +] +sources = ['libcutensor-linux-%(arch)s-%(version)s-archive.tar.xz'] +checksums = [ + { + 'libcutensor-linux-x86_64-1.4.0.6-archive.tar.xz': + '467ba189195fcc4b868334fc16a0ae1e51574139605975cc8004cedebf595964', + 'libcutensor-linux-ppc64le-1.4.0.6-archive.tar.xz': + '5da44ff2562ab7b9286122653e54f28d2222c8aab4bb02e9bdd4cf7e4b7809be', + 'libcutensor-linux-sbsa-1.4.0.6-archive.tar.xz': + '6b06d63a5bc49c1660be8c307795f8a901c93dcde7b064455a6c81333c7327f4', + } +] + +dependencies = [('CUDA', '11.5', '', SYSTEM)] + +sanity_check_paths = { + 'files': ['include/cutensor.h', 'include/cutensor/types.h', + 'lib/%s/libcutensor.%s' % ('%(cudamajver)s', SHLIB_EXT), + 'lib/%s/libcutensor_static.a' % '%(cudamajver)s'], + 'dirs': [], +} + +modextrapaths = { + 'LD_LIBRARY_PATH': ['lib/%s' % '%(cudamajver)s'], + 'LIBRARY_PATH': ['lib/%s' % '%(cudamajver)s'], +} + +moduleclass = 'numlib' diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-gomkl-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gomkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..cd313db7f33e93dd93834a820b48cc2727306f6c --- /dev/null +++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gomkl-2021b.eb @@ -0,0 +1,107 @@ +name = 'ELPA' +version = '2021.11.001' + +homepage = 'https://elpa.rzg.mpg.de' +description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in +$EBROOTELPA ($ELPA_ROOT is also defined). This installation +contains the pure MPI version and the hybrid MPI/OpenMP version. +Notice: If you want to use OpenMP threads you have to set +export ELPA_DEFAULT_omp=<number of threads per MPI process> +in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,.... + +Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or +with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL. + +An example is +export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC +which chooses the generic real kernel for elpa2. +Starting with version 2019.11.001 the legacy interface is no longer available. +""" + +usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with + +srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels + +Programs using this ELPA library have to be compiled with + +-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP] + +and linked with + +-L$EBROOTELPA/lib -lelpa[_openmp] +-lmkl_scalapack_lp64 +${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_lp64.a +-lmkl_gf_lp64 -lmkl_sequential[-lmkl_gnu_thread] +-lmkl_core -lgomp -lpthread -lm -ldl -lstdc++ +""" + +examples = 'Examples can be found in $EBROOTELPA/examples' + +toolchain = {'name': 'gomkl', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/'] +sources = ["elpa-new_release_%(version)s.tar.gz"] +patches = [ + '%(name)s-%(version)s_fix_hardcoded_perl_path.patch', + 'ELPA-%(version)s_install-libelpatest.patch', +] +checksums = [ + 'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1', # elpa-new_release_2021.11.001.tar.gz + # ELPA-2021.11.001_fix_hardcoded_perl_path.patch + '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b', + '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272', # ELPA-2021.11.001_install-libelpatest.patch +] + +builddependencies = [ + ('Autotools', '20210726'), + # remove_xcompiler script requires 'python' command, + ('Python', '3.9.6'), + ('Perl', '5.34.0'), +] + +preconfigopts = './autogen.sh && ' +preconfigopts += 'export LDFLAGS="-lm $LDFLAGS" && ' +preconfigopts += 'autoreconf && ' + +# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an +# MPI program that is then executed by just ./conftest +# Unfortunately you cannot turn of checking during runtime, too +configopts = '--without-threading-support-check-during-build ' + +with_single = False + +# When building in parallel, the file test_setup_mpi.mod is sometimes +# used before it is built, leading to an error. This must be a bug in +# the makefile affecting parallel builds. +maxparallel = 1 + + +postinstallcmds = [ + 'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/', + 'rm %(installdir)s/examples/*.orig', + 'rm %(installdir)s/examples/*_cuda', + 'rm %(installdir)s/examples/C/*.orig', + 'rm %(installdir)s/examples/C/*_cuda', + 'rm %(installdir)s/examples/Fortran/*.orig', + 'rm %(installdir)s/examples/Fortran/*_cuda', + 'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h', + 'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/', + 'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h', + 'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules', + 'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules', +] + +modextravars = { + 'ELPA_ROOT': '%(installdir)s', + 'ELPAROOT': '%(installdir)s', + 'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/', + 'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/', + 'ELPA_LIB': '%(installdir)s/lib', + 'ELPA_LIB_OPENMP': '%(installdir)s/lib', + 'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules', + 'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules', +} + +moduleclass = 'math' diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-gpsmkl-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gpsmkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..eeeef09bff2024c840a5b531087aebdc8b6181ae --- /dev/null +++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-gpsmkl-2021b.eb @@ -0,0 +1,105 @@ +name = 'ELPA' +version = '2021.11.001' + +homepage = 'https://elpa.rzg.mpg.de' +description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in +$EBROOTELPA ($ELPA_ROOT is also defined). This installation +contains the pure MPI version and the hybrid MPI/OpenMP version. +Notice: If you want to use OpenMP threads you have to set +export ELPA_DEFAULT_omp=<number of threads per MPI process> +in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,.... + +Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or +with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL. + +An example is +export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC +which chooses the generic real kernel for elpa2. +Starting with version 2019.11.001 the legacy interface is no longer available. +""" + +usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with + +srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels + +Programs using this ELPA library have to be compiled with + +-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP] + +and linked with + +-L$EBROOTELPA/lib -lelpa[_openmp] +-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_gf_lp64 +-lmkl_sequential[-lmkl_gnu_thread] +-lmkl_core -lgomp -lpthread -lm -ldl -lstdc++ +""" + +examples = 'Examples can be found in $EBROOTELPA/examples' + +toolchain = {'name': 'gpsmkl', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/'] +sources = ["elpa-new_release_%(version)s.tar.gz"] +patches = [ + '%(name)s-%(version)s_fix_hardcoded_perl_path.patch', + 'ELPA-%(version)s_install-libelpatest.patch', +] +checksums = [ + 'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1', # elpa-new_release_2021.11.001.tar.gz + # ELPA-2021.11.001_fix_hardcoded_perl_path.patch + '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b', + '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272', # ELPA-2021.11.001_install-libelpatest.patch +] + +builddependencies = [ + ('Autotools', '20210726'), + # remove_xcompiler script requires 'python' command, + ('Python', '3.9.6'), + ('Perl', '5.34.0'), +] + +preconfigopts = './autogen.sh && ' +preconfigopts += 'export LDFLAGS="-lm $LDFLAGS" && ' +preconfigopts += 'autoreconf && ' + +# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an +# MPI program that is then executed by just ./conftest +# Unfortunately you cannot turn of checking during runtime, too +configopts = '--without-threading-support-check-during-build ' + +with_single = False + +# When building in parallel, the file test_setup_mpi.mod is sometimes +# used before it is built, leading to an error. This must be a bug in +# the makefile affecting parallel builds. +maxparallel = 1 + +postinstallcmds = [ + 'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/', + 'rm %(installdir)s/examples/*.orig', + 'rm %(installdir)s/examples/*_cuda', + 'rm %(installdir)s/examples/C/*.orig', + 'rm %(installdir)s/examples/C/*_cuda', + 'rm %(installdir)s/examples/Fortran/*.orig', + 'rm %(installdir)s/examples/Fortran/*_cuda', + 'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/', + 'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h', + 'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules', + 'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules', +] + +modextravars = { + 'ELPA_ROOT': '%(installdir)s', + 'ELPAROOT': '%(installdir)s', + 'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/', + 'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/', + 'ELPA_LIB': '%(installdir)s/lib', + 'ELPA_LIB_OPENMP': '%(installdir)s/lib', + 'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules', + 'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules', +} + +moduleclass = 'math' diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..2f80e05e2ba06c1ed2fb01d8dffdb1af26859701 --- /dev/null +++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-2021b.eb @@ -0,0 +1,104 @@ +name = 'ELPA' +version = '2021.11.001' + +homepage = 'https://elpa.rzg.mpg.de' +description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in +$EBROOTELPA ($ELPA_ROOT is also defined). This installation +contains the pure MPI version and the hybrid MPI/OpenMP version. +Notice: If you want to use OpenMP threads you have to set +export ELPA_DEFAULT_omp=<number of threads per MPI process> +in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,.... + +Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or +with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL. + +An example is +export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC +which chooses the generic real kernel for elpa2. +Starting with version 2019.11.001 the legacy interface is no longer available. +""" + +usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with + +srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels + +Programs using this ELPA library have to be compiled with + +-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP] + +and linked with + +-L$EBROOTELPA/lib -lelpa[_openmp] +-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 +-lmkl_sequential[-lmkl_intel_thread] +-lmkl_core -liomp5 -lpthread -lstdc++ +""" + +examples = 'Examples can be found in $EBROOTELPA/examples' + +toolchain = {'name': 'intel', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/'] +sources = ["elpa-new_release_%(version)s.tar.gz"] +patches = [ + '%(name)s-%(version)s_fix_hardcoded_perl_path.patch', + 'ELPA-%(version)s_install-libelpatest.patch', +] +checksums = [ + 'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1', # elpa-new_release_2021.11.001.tar.gz + # ELPA-2021.11.001_fix_hardcoded_perl_path.patch + '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b', + '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272', # ELPA-2021.11.001_install-libelpatest.patch +] + +builddependencies = [ + ('Autotools', '20210726'), + # remove_xcompiler script requires 'python' command, + ('Python', '3.9.6'), + ('Perl', '5.34.0'), +] + +preconfigopts = './autogen.sh && ' +preconfigopts += 'autoreconf && ' + +# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an +# MPI program that is then executed by just ./conftest +# Unfortunately you cannot turn of checking during runtime, too +configopts = '--without-threading-support-check-during-build ' + +with_single = False + +# When building in parallel, the file test_setup_mpi.mod is sometimes +# used before it is built, leading to an error. This must be a bug in +# the makefile affecting parallel builds. +maxparallel = 1 + +postinstallcmds = [ + 'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/', + 'rm %(installdir)s/examples/*.orig', + 'rm %(installdir)s/examples/*_cuda', + 'rm %(installdir)s/examples/C/*.orig', + 'rm %(installdir)s/examples/C/*_cuda', + 'rm %(installdir)s/examples/Fortran/*.orig', + 'rm %(installdir)s/examples/Fortran/*_cuda', + 'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/', + 'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h', + 'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules', + 'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules', +] + +modextravars = { + 'ELPA_ROOT': '%(installdir)s', + 'ELPAROOT': '%(installdir)s', + 'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/', + 'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/', + 'ELPA_LIB': '%(installdir)s/lib', + 'ELPA_LIB_OPENMP': '%(installdir)s/lib', + 'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules', + 'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules', +} + +moduleclass = 'math' diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-para-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-para-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..8eda37582dd7d40372a09d88561616236b566c80 --- /dev/null +++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-intel-para-2021b.eb @@ -0,0 +1,104 @@ +name = 'ELPA' +version = '2021.11.001' + +homepage = 'https://elpa.rzg.mpg.de' +description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in +$EBROOTELPA ($ELPA_ROOT is also defined). This installation +contains the pure MPI version and the hybrid MPI/OpenMP version. +Notice: If you want to use OpenMP threads you have to set +export ELPA_DEFAULT_omp=<number of threads per MPI process> +in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,.... + +Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or +with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL. + +An example is +export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC +which chooses the generic real kernel for elpa2. +Starting with version 2019.11.001 the legacy interface is no longer available. +""" + +usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with + +srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels + +Programs using this ELPA library have to be compiled with + +-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP] + +and linked with + +-L$EBROOTELPA/lib -lelpa[_openmp] +-lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_intel_lp64 +-lmkl_sequential[-lmkl_intel_thread] +-lmkl_core -liomp5 -lpthread -lstdc++ +""" + +examples = 'Examples can be found in $EBROOTELPA/examples' + +toolchain = {'name': 'intel-para', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/'] +sources = ["elpa-new_release_%(version)s.tar.gz"] +patches = [ + '%(name)s-%(version)s_fix_hardcoded_perl_path.patch', + 'ELPA-%(version)s_install-libelpatest.patch', +] +checksums = [ + 'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1', # elpa-new_release_2021.11.001.tar.gz + # ELPA-2021.11.001_fix_hardcoded_perl_path.patch + '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b', + '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272', # ELPA-2021.11.001_install-libelpatest.patch +] + +builddependencies = [ + ('Autotools', '20210726'), + # remove_xcompiler script requires 'python' command, + ('Python', '3.9.6'), + ('Perl', '5.34.0'), +] + +preconfigopts = './autogen.sh && ' +preconfigopts += 'autoreconf && ' + +# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an +# MPI program that is then executed by just ./conftest +# Unfortunately you cannot turn of checking during runtime, too +configopts = '--without-threading-support-check-during-build ' + +with_single = False + +# When building in parallel, the file test_setup_mpi.mod is sometimes +# used before it is built, leading to an error. This must be a bug in +# the makefile affecting parallel builds. +maxparallel = 1 + +postinstallcmds = [ + 'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/', + 'rm %(installdir)s/examples/*.orig', + 'rm %(installdir)s/examples/*_cuda', + 'rm %(installdir)s/examples/C/*.orig', + 'rm %(installdir)s/examples/C/*_cuda', + 'rm %(installdir)s/examples/Fortran/*.orig', + 'rm %(installdir)s/examples/Fortran/*_cuda', + 'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/', + 'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h', + 'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules', + 'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules', +] + +modextravars = { + 'ELPA_ROOT': '%(installdir)s', + 'ELPAROOT': '%(installdir)s', + 'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/', + 'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/', + 'ELPA_LIB': '%(installdir)s/lib', + 'ELPA_LIB_OPENMP': '%(installdir)s/lib', + 'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules', + 'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules', +} + +moduleclass = 'math' diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001-iomkl-2021b.eb b/Golden_Repo/e/ELPA/ELPA-2021.11.001-iomkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..08e7f242458aa3a1f8959cd1a89621a97e85a3cf --- /dev/null +++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001-iomkl-2021b.eb @@ -0,0 +1,105 @@ +name = 'ELPA' +version = '2021.11.001' + +homepage = 'https://elpa.rzg.mpg.de' +description = """Eigenvalue SoLvers for Petaflop-Applications. ELPA has been installed as module in +$EBROOTELPA ($ELPA_ROOT is also defined). This installation +contains the pure MPI version and the hybrid MPI/OpenMP version. +Notice: If you want to use OpenMP threads you have to set +export ELPA_DEFAULT_omp=<number of threads per MPI process> +in your batch job and start MPI with MPI_INIT_THREAD(MPI_THREAD_MULTIPLE,.... + +Several assembly kernels have been compiled. They can be chosen at runtime when calling the library or +with the environment variables REAL_ELPA_KERNEL or COMPLEX_ELPA_KERNEL. + +An example is +export REAL_ELPA_KERNEL=REAL_ELPA_KERNEL_GENERIC +which chooses the generic real kernel for elpa2. +Starting with version 2019.11.001 the legacy interface is no longer available. +""" + +usage = """You can get an overview over the available kernels by loading ELPA and then submitting a batch job with + +srun --ntasks=1 $EBROOTELPA/bin/elpa2_print_kernels + +Programs using this ELPA library have to be compiled with + +-I$ELPA_INCLUDE[_OPENMP]/ -I$ELPA_INCLUDE[_OPENMP]/elpa -I$ELPA_MODULES[_OPENMP] + +and linked with + +-L$EBROOTELPA/lib -lelpa[_openmp] +-lmkl_scalapack_lp64 +${MKLROOT}/lib/intel64/libmkl_blacs_openmpi_lp64.a +-lmkl_intel_lp64 -lmkl_sequential[-lmkl_intel_thread] +-lmkl_core -liomp -lpthread -ldl -lstdc++ +""" + +examples = 'Examples can be found in $EBROOTELPA/examples' + +toolchain = {'name': 'iomkl', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True} + +source_urls = ['https://gitlab.mpcdf.mpg.de/elpa/elpa/-/archive/new_release_%(version)s/'] +sources = ["elpa-new_release_%(version)s.tar.gz"] +patches = [ + '%(name)s-%(version)s_fix_hardcoded_perl_path.patch', + 'ELPA-%(version)s_install-libelpatest.patch', +] +checksums = [ + 'e61048393a5e5f460858a11b216547fa3f434dd620c478cb20a52ebf543260f1', # elpa-new_release_2021.11.001.tar.gz + # ELPA-2021.11.001_fix_hardcoded_perl_path.patch + '5fc40b6f3f948fd026efc688f9bafba0461d68ad007d9dc161bfd1507e2fc13b', + '2ce155ccbcdd61e8036d859aa204b48883695eff5f4decee3e5c2677516d8272', # ELPA-2021.11.001_install-libelpatest.patch +] + +builddependencies = [ + ('Autotools', '20210726'), + # remove_xcompiler script requires 'python' command, + ('Python', '3.9.6'), + ('Perl', '5.34.0'), +] + +preconfigopts = './autogen.sh && ' +preconfigopts += 'autoreconf && ' + +# The checking of MPI_THREAD_MULTIPLE does not work because the check uses an +# MPI program that is then executed by just ./conftest +# Unfortunately you cannot turn of checking during runtime, too +configopts = '--without-threading-support-check-during-build ' + +with_single = False + +# When building in parallel, the file test_setup_mpi.mod is sometimes +# used before it is built, leading to an error. This must be a bug in +# the makefile affecting parallel builds. +maxparallel = 1 + +postinstallcmds = [ + 'cp -r %(builddir)s/elpa-new_release_%(version)s/examples %(installdir)s/examples/', + 'rm %(installdir)s/examples/*.orig', + 'rm %(installdir)s/examples/*_cuda', + 'rm %(installdir)s/examples/C/*.orig', + 'rm %(installdir)s/examples/C/*_cuda', + 'rm %(installdir)s/examples/Fortran/*.orig', + 'rm %(installdir)s/examples/Fortran/*_cuda', + 'cp %(builddir)s/elpa-new_release_%(version)s/test/shared/generated.h %(installdir)s/examples/C/generated.h', + 'cp config.h config-f90.h %(installdir)s/include/elpa_openmp-%(version)s/elpa/', + 'grep -v WITH_OPENMP config.h > %(installdir)s/include/elpa-%(version)s/elpa/config.h', + 'grep -v WITH_OPENMP config-f90.h > %(installdir)s/include/elpa-%(version)s/elpa/config-f90.h', + 'cp %(builddir)s/elpa-new_release_%(version)s/private_modules/* %(installdir)s/include/elpa-%(version)s/modules', + 'cp %(builddir)s/elpa-new_release_%(version)s/test_modules/* %(installdir)s/include/elpa-%(version)s/modules', +] + +modextravars = { + 'ELPA_ROOT': '%(installdir)s', + 'ELPAROOT': '%(installdir)s', + 'ELPA_INCLUDE': '%(installdir)s/include/elpa-%(version)s/', + 'ELPA_INCLUDE_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/', + 'ELPA_LIB': '%(installdir)s/lib', + 'ELPA_LIB_OPENMP': '%(installdir)s/lib', + 'ELPA_MODULES': '%(installdir)s/include/elpa-%(version)s/modules', + 'ELPA_MODULES_OPENMP': '%(installdir)s/include/elpa_openmp-%(version)s/modules', +} + +moduleclass = 'math' diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001_fix_hardcoded_perl_path.patch b/Golden_Repo/e/ELPA/ELPA-2021.11.001_fix_hardcoded_perl_path.patch new file mode 100644 index 0000000000000000000000000000000000000000..5c7ae5eae05ce11d3a24b3202194616933db38da --- /dev/null +++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001_fix_hardcoded_perl_path.patch @@ -0,0 +1,40 @@ +--- elpa-new_release_2021.11.001/test_project_1stage/fdep/fortran_dependencies.pl 2021-12-17 08:20:49.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/test_project_1stage/fdep/fortran_dependencies.pl 2022-01-25 17:07:21.169362000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/perl -w ++#!/usr/bin/env perl + + use strict; + +--- elpa-new_release_2021.11.001/fdep/fortran_dependencies.pl 2021-12-17 08:20:49.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/fdep/fortran_dependencies.pl 2022-01-25 17:08:17.272544000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/perl -w ++#!/usr/bin/env perl + # + # Copyright 2015 Lorenz Hüdepohl + # +--- elpa-new_release_2021.11.001/test_project_C_2stage/fdep/fortran_dependencies.pl 2021-12-17 08:20:49.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/test_project_C_2stage/fdep/fortran_dependencies.pl 2022-01-25 17:06:20.088471000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/perl -w ++#!/usr/bin/env perl + + use strict; + +--- elpa-new_release_2021.11.001/test_project_2stage/fdep/fortran_dependencies.pl 2021-12-17 08:20:49.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/test_project_2stage/fdep/fortran_dependencies.pl 2022-01-25 17:05:10.675886000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/perl -w ++#!/usr/bin/env perl + + use strict; + +--- elpa-new_release_2021.11.001/test_project_C/fdep/fortran_dependencies.pl 2021-12-17 08:20:49.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/test_project_C/fdep/fortran_dependencies.pl 2022-01-25 17:04:14.834326000 +0100 +@@ -1,4 +1,4 @@ +-#!/usr/bin/perl -w ++#!/usr/bin/env perl + + use strict; + diff --git a/Golden_Repo/e/ELPA/ELPA-2021.11.001_install-libelpatest.patch b/Golden_Repo/e/ELPA/ELPA-2021.11.001_install-libelpatest.patch new file mode 100644 index 0000000000000000000000000000000000000000..ad5240130a3f09af760ed386157af998597a8f24 --- /dev/null +++ b/Golden_Repo/e/ELPA/ELPA-2021.11.001_install-libelpatest.patch @@ -0,0 +1,12790 @@ +--- elpa-new_release_2021.11.001/Makefile.am 2021-12-17 08:20:49.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/Makefile.am 2022-01-26 10:47:31.956245709 +0100 +@@ -665,7 +665,7 @@ + test_program_fcflags = $(AM_FCFLAGS) $(FC_MODOUT)test_modules $(FC_MODINC)test_modules $(FC_MODINC)modules $(FC_MODINC)private_modules + + # library with shared sources for the test files +-noinst_LTLIBRARIES += libelpatest@SUFFIX@.la ++lib_LTLIBRARIES += libelpatest@SUFFIX@.la + libelpatest@SUFFIX@_la_FCFLAGS = $(test_program_fcflags) + libelpatest@SUFFIX@_la_SOURCES = \ + test/shared/tests_variable_definitions.F90 \ +diff -ruN elpa-new_release_2021.11.001/examples/C/Makefile_examples_hybrid elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_hybrid +--- elpa-new_release_2021.11.001/examples/C/Makefile_examples_hybrid 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_hybrid 2022-01-28 09:53:19.118256000 +0100 +@@ -0,0 +1,31 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -qopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++# GCC ++# F90 = mpif90 -O3 -fopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++LIBS = -L$(ELPA_LIB_OPENMP) -lelpa_openmp -lelpatest_openmp $(SCALAPACK_LIB) $(MKL) ++CC = mpicc -O3 -qopenmp ++# GCC ++# CC = mpicc -O3 -fopenmp ++ ++all: test_real_1stage_hybrid test_real_2stage_all_kernels_hybrid test_autotune_hybrid test_multiple_objs_hybrid ++ ++test_real_1stage_hybrid: test.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DWITH_OPENMP_TRADITIONAL -DTEST_EIGENVECTORS -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS) ++ ++test_real_2stage_all_kernels_hybrid: test.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DWITH_OPENMP_TRADITIONAL -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS) ++ ++test_autotune_hybrid: test_autotune.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_autotune.c $(LIBS) ++ ++test_multiple_objs_hybrid: test_multiple_objs.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_multiple_objs.c $(LIBS) ++ +diff -ruN elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure +--- elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure 2022-01-28 09:53:42.223490000 +0100 +@@ -0,0 +1,27 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) ++CC = mpicc -O3 ++ ++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs ++ ++test_real_1stage: test.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS) ++ ++test_real_2stage_all_kernels: test.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS) ++ ++test_autotune: test_autotune.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_autotune.c $(LIBS) ++ ++test_multiple_objs: test_multiple_objs.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_multiple_objs.c $(LIBS) ++ +diff -ruN elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure_cuda elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure_cuda +--- elpa-new_release_2021.11.001/examples/C/Makefile_examples_pure_cuda 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/C/Makefile_examples_pure_cuda 2022-01-28 09:53:55.785592000 +0100 +@@ -0,0 +1,27 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) -lcublas -lcudart ++CC = mpicc -O3 ++ ++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs ++ ++test_real_1stage: test.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS) ++ ++test_real_2stage_all_kernels: test.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test.c $(LIBS) ++ ++test_autotune: test_autotune.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_autotune.c $(LIBS) ++ ++test_multiple_objs: test_multiple_objs.c ++ $(CC) -DCURRENT_API_VERSION=20211125 -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa -I. -o $@ test_multiple_objs.c $(LIBS) ++ +diff -ruN elpa-new_release_2021.11.001/examples/C/test_autotune.c elpa-new_release_2021.11.001_ok/examples/C/test_autotune.c +--- elpa-new_release_2021.11.001/examples/C/test_autotune.c 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/C/test_autotune.c 2022-02-01 18:20:00.273429184 +0100 +@@ -0,0 +1,342 @@ ++/* This file is part of ELPA. ++ ++ The ELPA library was originally created by the ELPA consortium, ++ consisting of the following organizations: ++ ++ - Max Planck Computing and Data Facility (MPCDF), formerly known as ++ Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++ - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++ Informatik, ++ - Technische Universität München, Lehrstuhl für Informatik mit ++ Schwerpunkt Wissenschaftliches Rechnen , ++ - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++ - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++ Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++ and ++ - IBM Deutschland GmbH ++ ++ ++ More information can be found here: ++ http://elpa.mpcdf.mpg.de/ ++ ++ ELPA is free software: you can redistribute it and/or modify ++ it under the terms of the version 3 of the license of the ++ GNU Lesser General Public License as published by the Free ++ Software Foundation. ++ ++ ELPA 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 Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with ELPA. If not, see <http://www.gnu.org/licenses/> ++ ++ ELPA reflects a substantial effort on the part of the original ++ ELPA consortium, and we ask you to respect the spirit of the ++ license that we chose: i.e., please contribute any changes you ++ may have back to the original ELPA library distribution, and keep ++ any derivatives of ELPA under the same license that we chose for ++ the original distribution, the GNU Lesser General Public License. ++*/ ++ ++#include "config.h" ++ ++#include <string.h> ++#include <stdio.h> ++#include <stdlib.h> ++#ifdef WITH_MPI ++#include <mpi.h> ++#endif ++#include <math.h> ++ ++#include <elpa/elpa.h> ++#include <assert.h> ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++//#error "define exactly one of TEST_REAL or TEST_COMPLEX" ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++//#error "define exactly one of TEST_SINGLE or TEST_DOUBLE" ++#endif ++ ++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE)) ++//#error "define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE" ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE float ++# ifdef TEST_REAL ++# define MATRIX_TYPE float ++# else ++# define MATRIX_TYPE complex float ++# endif ++#else ++# define EV_TYPE double ++# ifdef TEST_REAL ++# define MATRIX_TYPE double ++# else ++# define MATRIX_TYPE complex double ++# endif ++#endif ++ ++#define assert_elpa_ok(x) assert(x == ELPA_OK) ++ ++#ifdef HAVE_64BIT_INTEGER_SUPPORT ++#define TEST_C_INT_TYPE_PTR long int* ++#define C_INT_TYPE_PTR long int* ++#define TEST_C_INT_TYPE long int ++#define C_INT_TYPE long int ++#else ++#define TEST_C_INT_TYPE_PTR int* ++#define C_INT_TYPE_PTR int* ++#define TEST_C_INT_TYPE int ++#define C_INT_TYPE int ++#endif ++ ++#include "generated.h" ++ ++int main(int argc, char** argv) { ++ /* matrix dimensions */ ++ C_INT_TYPE na, nev, nblk; ++ ++ /* mpi */ ++ C_INT_TYPE myid, nprocs; ++ C_INT_TYPE na_cols, na_rows; ++ C_INT_TYPE np_cols, np_rows; ++ C_INT_TYPE my_prow, my_pcol; ++ C_INT_TYPE mpi_comm; ++ ++ /* blacs */ ++ C_INT_TYPE my_blacs_ctxt, sc_desc[9], info; ++ ++ /* The Matrix */ ++ MATRIX_TYPE *a, *as, *z; ++ EV_TYPE *ev; ++ ++ C_INT_TYPE status; ++ int error_elpa; ++ elpa_t handle; ++ ++ elpa_autotune_t autotune_handle; ++ C_INT_TYPE i, unfinished; ++ ++ C_INT_TYPE value; ++#ifdef WITH_MPI ++ MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &info); ++ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); ++ MPI_Comm_rank(MPI_COMM_WORLD, &myid); ++#else ++ nprocs = 1; ++ myid = 0; ++#endif ++ ++ if (argc == 4) { ++ na = atoi(argv[1]); ++ nev = atoi(argv[2]); ++ nblk = atoi(argv[3]); ++ } else { ++ na = 500; ++ nev = 250; ++ nblk = 16; ++ } ++ ++ for (np_cols = (C_INT_TYPE) sqrt((double) nprocs); np_cols > 1; np_cols--) { ++ if (nprocs % np_cols == 0) { ++ break; ++ } ++ } ++ ++ np_rows = nprocs/np_cols; ++ ++ /* set up blacs */ ++ /* convert communicators before */ ++#ifdef WITH_MPI ++ mpi_comm = MPI_Comm_c2f(MPI_COMM_WORLD); ++#else ++ mpi_comm = 0; ++#endif ++ set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); ++ set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info); ++ ++ /* allocate the matrices needed for elpa */ ++ a = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ z = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ as = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ ev = calloc(na, sizeof(EV_TYPE)); ++ ++#ifdef TEST_REAL ++#ifdef TEST_DOUBLE ++ prepare_matrix_random_real_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#else ++ prepare_matrix_random_real_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#endif ++#else ++#ifdef TEST_DOUBLE ++ prepare_matrix_random_complex_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#else ++ prepare_matrix_random_complex_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#endif ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) != ELPA_OK) { ++ fprintf(stderr, "Error: ELPA API version not supported"); ++ exit(1); ++ } ++ ++#if OPTIONAL_C_ERROR_ARGUMENT == 1 ++ handle = elpa_allocate(); ++#else ++ handle = elpa_allocate(&error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ assert_elpa_ok(error_elpa); ++ ++ /* Set parameters */ ++ elpa_set(handle, "na", (int) na, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "nev", (int) nev, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ if (myid == 0) { ++ printf("Setting the matrix parameters na=%d, nev=%d \n",na,nev); ++ } ++ elpa_set(handle, "local_nrows", (int) na_rows, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "local_ncols", (int) na_cols, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "nblk", (int) nblk, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++#ifdef WITH_MPI ++ elpa_set(handle, "mpi_comm_parent", (int) (MPI_Comm_c2f(MPI_COMM_WORLD)), &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "process_row", (int) my_prow, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "process_col", (int) my_pcol, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++ /* Setup */ ++ assert_elpa_ok(elpa_setup(handle)); ++ ++#if TEST_NVIDIA_GPU == 1 ++ elpa_set(handle, "nvidia-gpu", 0, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++#if TEST_INTEL_GPU == 1 ++ elpa_set(handle, "intel-gpu", 0, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++ autotune_handle = elpa_autotune_setup(handle, ELPA_AUTOTUNE_FAST, ELPA_AUTOTUNE_DOMAIN_REAL, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ /* mimic 20 scf steps */ ++ ++ for (i=0; i < 20; i++) { ++ ++ unfinished = elpa_autotune_step(handle, autotune_handle, &error_elpa); ++ ++ if (unfinished == 0) { ++ if (myid == 0) { ++ printf("ELPA autotuning finished in the %d th scf step \n",i); ++ } ++ break; ++ } ++ if (myid == 0) { ++ printf("The current setting of the ELPA object: \n"); ++ elpa_print_settings(handle, &error_elpa); ++ ++ printf("The state of the autotuning: \n"); ++ elpa_autotune_print_state(handle, autotune_handle, &error_elpa); ++ } ++ ++ ++ /* Solve EV problem */ ++ elpa_eigenvectors(handle, a, ev, z, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ /* check the results */ ++#ifdef TEST_REAL ++#ifdef TEST_DOUBLE ++ status = check_correctness_evp_numeric_residuals_real_double_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(double)); ++ ++#else ++ status = check_correctness_evp_numeric_residuals_real_single_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(float)); ++#endif ++#else ++#ifdef TEST_DOUBLE ++ status = check_correctness_evp_numeric_residuals_complex_double_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(complex double)); ++#else ++ status = check_correctness_evp_numeric_residuals_complex_single_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(complex float)); ++#endif ++#endif ++ ++ if (status !=0){ ++ printf("The computed EVs are not correct !\n"); ++ break; ++ } ++ printf("hier %d \n",myid); ++ } ++ ++ if (unfinished == 1) { ++ if (myid == 0) { ++ printf("ELPA autotuning did not finished during %d scf cycles\n",i); ++ ++ } ++ ++ } ++ elpa_autotune_set_best(handle, autotune_handle, &error_elpa); ++ ++ if (myid == 0) { ++ printf("The best combination found by the autotuning:\n"); ++ elpa_autotune_print_best(handle, autotune_handle, &error_elpa); ++ } ++ ++#if OPTIONAL_C_ERROR_ARGUMENT == 1 ++ elpa_autotune_deallocate(autotune_handle); ++ elpa_deallocate(handle); ++#else ++ elpa_autotune_deallocate(autotune_handle, &error_elpa); ++ elpa_deallocate(handle, &error_elpa); ++#endif ++ elpa_uninit(&error_elpa); ++ ++ if (myid == 0) { ++ printf("\n"); ++ printf("2stage ELPA real solver complete\n"); ++ printf("\n"); ++ } ++ ++ if (status ==0){ ++ if (myid ==0) { ++ printf("All ok!\n"); ++ } ++ } ++ ++ free(a); ++ free(z); ++ free(as); ++ free(ev); ++ ++#ifdef WITH_MPI ++ MPI_Finalize(); ++#endif ++ ++ return !!status; ++} +diff -ruN elpa-new_release_2021.11.001/examples/C/test.c elpa-new_release_2021.11.001_ok/examples/C/test.c +--- elpa-new_release_2021.11.001/examples/C/test.c 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/C/test.c 2022-01-28 09:45:19.528434910 +0100 +@@ -0,0 +1,359 @@ ++/* This file is part of ELPA. ++ ++ The ELPA library was originally created by the ELPA consortium, ++ consisting of the following organizations: ++ ++ - Max Planck Computing and Data Facility (MPCDF), formerly known as ++ Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++ - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++ Informatik, ++ - Technische Universität München, Lehrstuhl für Informatik mit ++ Schwerpunkt Wissenschaftliches Rechnen , ++ - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++ - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++ Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++ and ++ - IBM Deutschland GmbH ++ ++ ++ More information can be found here: ++ http://elpa.mpcdf.mpg.de/ ++ ++ ELPA is free software: you can redistribute it and/or modify ++ it under the terms of the version 3 of the license of the ++ GNU Lesser General Public License as published by the Free ++ Software Foundation. ++ ++ ELPA 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 Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with ELPA. If not, see <http://www.gnu.org/licenses/> ++ ++ ELPA reflects a substantial effort on the part of the original ++ ELPA consortium, and we ask you to respect the spirit of the ++ license that we chose: i.e., please contribute any changes you ++ may have back to the original ELPA library distribution, and keep ++ any derivatives of ELPA under the same license that we chose for ++ the original distribution, the GNU Lesser General Public License. ++*/ ++ ++#include "config.h" ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#ifdef WITH_MPI ++#include <mpi.h> ++#endif ++#include <math.h> ++ ++#include <elpa/elpa.h> ++#include <assert.h> ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++#error "define exactly one of TEST_REAL or TEST_COMPLEX" ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++#error "define exactly one of TEST_SINGLE or TEST_DOUBLE" ++#endif ++ ++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE)) ++#error "define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE" ++#endif ++ ++#ifdef TEST_GENERALIZED_DECOMP_EIGENPROBLEM ++#define TEST_GENERALIZED_EIGENPROBLEM ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE float ++# ifdef TEST_REAL ++# define MATRIX_TYPE float ++# define PREPARE_MATRIX_RANDOM prepare_matrix_random_real_single_f ++# define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_real_single_f ++# define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_real_single_f ++# define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_real_single_f ++# else ++# define MATRIX_TYPE complex float ++# define PREPARE_MATRIX_RANDOM prepare_matrix_random_complex_single_f ++# define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_complex_single_f ++# define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_complex_single_f ++# define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_complex_single_f ++# endif ++#else ++# define EV_TYPE double ++# ifdef TEST_REAL ++# define MATRIX_TYPE double ++# define PREPARE_MATRIX_RANDOM prepare_matrix_random_real_double_f ++# define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_real_double_f ++# define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_real_double_f ++# define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_real_double_f ++# else ++# define MATRIX_TYPE complex double ++# define PREPARE_MATRIX_RANDOM prepare_matrix_random_complex_double_f ++# define PREPARE_MATRIX_RANDOM_SPD prepare_matrix_random_spd_complex_double_f ++# define CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS check_correctness_evp_numeric_residuals_complex_double_f ++# define CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS check_correctness_evp_gen_numeric_residuals_complex_double_f ++# endif ++#endif ++ ++#define assert_elpa_ok(x) assert(x == ELPA_OK) ++ ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_C_INT_TYPE_PTR long int* ++#define C_INT_TYPE_PTR long int* ++#define TEST_C_INT_TYPE long int ++#define C_INT_TYPE long int ++#else ++#define TEST_C_INT_TYPE_PTR int* ++#define C_INT_TYPE_PTR int* ++#define TEST_C_INT_TYPE int ++#define C_INT_TYPE int ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_C_INT_MPI_TYPE_PTR long int* ++#define C_INT_MPI_TYPE_PTR long int* ++#define TEST_C_INT_MPI_TYPE long int ++#define C_INT_MPI_TYPE long int ++#else ++#define TEST_C_INT_MPI_TYPE_PTR int* ++#define C_INT_MPI_TYPE_PTR int* ++#define TEST_C_INT_MPI_TYPE int ++#define C_INT_MPI_TYPE int ++#endif ++ ++#define TEST_GPU 0 ++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1) ++#undef TEST_GPU ++#define TEST_GPU 1 ++#endif ++ ++ ++#include "generated.h" ++ ++int main(int argc, char** argv) { ++ /* matrix dimensions */ ++ C_INT_TYPE na, nev, nblk; ++ ++ /* mpi */ ++ C_INT_TYPE myid, nprocs; ++ C_INT_MPI_TYPE myidMPI, nprocsMPI; ++ C_INT_TYPE na_cols, na_rows; ++ C_INT_TYPE np_cols, np_rows; ++ C_INT_TYPE my_prow, my_pcol; ++ C_INT_TYPE mpi_comm; ++ C_INT_MPI_TYPE provided_mpi_thread_level; ++ ++ /* blacs */ ++ C_INT_TYPE my_blacs_ctxt, sc_desc[9], info; ++ ++ /* The Matrix */ ++ MATRIX_TYPE *a, *as, *z, *b, *bs; ++ EV_TYPE *ev; ++ ++ C_INT_TYPE error, status; ++ int error_elpa; ++ ++ elpa_t handle; ++ ++ int value; ++#ifdef WITH_MPI ++#ifndef WITH_OPENMP_TRADITIONAL ++ MPI_Init(&argc, &argv); ++#else ++ MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &provided_mpi_thread_level); ++ ++ if (provided_mpi_thread_level != MPI_THREAD_SERIALIZED) { ++ fprintf(stderr, "MPI ERROR: MPI_THREAD_SERIALIZED is not provided on this system\n"); ++ MPI_Finalize(); ++ exit(77); ++ } ++#endif ++ ++ MPI_Comm_size(MPI_COMM_WORLD, &nprocsMPI); ++ nprocs = (C_INT_TYPE) nprocsMPI; ++ MPI_Comm_rank(MPI_COMM_WORLD, &myidMPI); ++ myid = (C_INT_TYPE) myidMPI; ++ ++#else ++ nprocs = 1; ++ myid = 0; ++#endif ++ ++ if (argc == 4) { ++ na = atoi(argv[1]); ++ nev = atoi(argv[2]); ++ nblk = atoi(argv[3]); ++ } else { ++ na = 500; ++ nev = 250; ++ nblk = 16; ++ } ++ ++ for (np_cols = (C_INT_TYPE) sqrt((double) nprocs); np_cols > 1; np_cols--) { ++ if (nprocs % np_cols == 0) { ++ break; ++ } ++ } ++ ++ np_rows = nprocs/np_cols; ++ ++ /* set up blacs */ ++ /* convert communicators before */ ++#ifdef WITH_MPI ++ mpi_comm = MPI_Comm_c2f(MPI_COMM_WORLD); ++#else ++ mpi_comm = 0; ++#endif ++ set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); ++ set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info); ++ ++ /* allocate the matrices needed for elpa */ ++ a = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ z = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ as = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ ev = calloc(na, sizeof(EV_TYPE)); ++ ++ PREPARE_MATRIX_RANDOM(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++ ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) ++ b = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ bs = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ PREPARE_MATRIX_RANDOM_SPD(na, myid, na_rows, na_cols, sc_desc, b, z, bs, nblk, np_rows, np_cols, my_prow, my_pcol); ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) != ELPA_OK) { ++ fprintf(stderr, "Error: ELPA API version not supported"); ++ exit(1); ++ } ++ ++ handle = elpa_allocate(&error_elpa); ++ //assert_elpa_ok(error_elpa); ++ ++ /* Set parameters */ ++ elpa_set(handle, "na", (int) na, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "nev", (int) nev, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ if (myid == 0) { ++ printf("Setting the matrix parameters na=%d, nev=%d \n",na,nev); ++ } ++ elpa_set(handle, "local_nrows", (int) na_rows, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "local_ncols", (int) na_cols, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "nblk", (int) nblk, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++#ifdef WITH_MPI ++ elpa_set(handle, "mpi_comm_parent", (int) (MPI_Comm_c2f(MPI_COMM_WORLD)), &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "process_row", (int) my_prow, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(handle, "process_col", (int) my_pcol, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++#ifdef TEST_GENERALIZED_EIGENPROBLEM ++ elpa_set(handle, "blacs_context", (int) my_blacs_ctxt, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++ /* Setup */ ++ assert_elpa_ok(elpa_setup(handle)); ++ ++ /* Set tunables */ ++#ifdef TEST_SOLVER_1STAGE ++ elpa_set(handle, "solver", ELPA_SOLVER_1STAGE, &error_elpa); ++#else ++ elpa_set(handle, "solver", ELPA_SOLVER_2STAGE, &error_elpa); ++#endif ++ assert_elpa_ok(error_elpa); ++ ++#if TEST_NVIDIA_GPU == 1 ++ elpa_set(handle, "nvidia-gpu", TEST_GPU, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++#if TEST_AMD_GPU == 1 ++ elpa_set(handle, "amd-gpu", TEST_GPU, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++#if TEST_INTEL_GPU == 1 ++ elpa_set(handle, "intel-gpu", TEST_GPU, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++#if defined(TEST_SOLVE_2STAGE) && defined(TEST_KERNEL) ++# ifdef TEST_COMPLEX ++ elpa_set(handle, "complex_kernel", TEST_KERNEL, &error_elpa); ++# else ++ elpa_set(handle, "real_kernel", TEST_KERNEL, &error_elpa); ++# endif ++ assert_elpa_ok(error_elpa); ++#endif ++ ++ elpa_get(handle, "solver", &value, &error_elpa); ++ if (myid == 0) { ++ printf("Solver is set to %d \n", value); ++ } ++ ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) ++ elpa_generalized_eigenvectors(handle, a, b, ev, z, 0, &error_elpa); ++#if defined(TEST_GENERALIZED_DECOMP_EIGENPROBLEM) ++ //a = as, so that the problem can be solved again ++ memcpy(a, as, na_rows * na_cols * sizeof(MATRIX_TYPE)); ++ elpa_generalized_eigenvectors(handle, a, b, ev, z, 1, &error_elpa); ++#endif ++#else ++ /* Solve EV problem */ ++ elpa_eigenvectors(handle, a, ev, z, &error_elpa); ++#endif ++ assert_elpa_ok(error_elpa); ++ ++ elpa_deallocate(handle, &error_elpa); ++ elpa_uninit(&error_elpa); ++ ++ /* check the results */ ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) ++ status = CHECK_CORRECTNESS_EVP_GEN_NUMERIC_RESIDUALS(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs); ++#else ++ status = CHECK_CORRECTNESS_EVP_NUMERIC_RESIDUALS(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++#endif ++ ++ if (status !=0){ ++ printf("The computed EVs are not correct !\n"); ++ } ++ if (status ==0){ ++ printf("All ok!\n"); ++ } ++ ++ free(a); ++ free(z); ++ free(as); ++ free(ev); ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) ++ free(b); ++ free(bs); ++#endif ++ ++#ifdef WITH_MPI ++ MPI_Finalize(); ++#endif ++ ++ return !!status; ++} +diff -ruN elpa-new_release_2021.11.001/examples/C/test_multiple_objs.c elpa-new_release_2021.11.001_ok/examples/C/test_multiple_objs.c +--- elpa-new_release_2021.11.001/examples/C/test_multiple_objs.c 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/C/test_multiple_objs.c 2022-02-01 18:20:51.698668546 +0100 +@@ -0,0 +1,401 @@ ++/* This file is part of ELPA. ++ ++ The ELPA library was originally created by the ELPA consortium, ++ consisting of the following organizations: ++ ++ - Max Planck Computing and Data Facility (MPCDF), formerly known as ++ Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++ - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++ Informatik, ++ - Technische Universität München, Lehrstuhl für Informatik mit ++ Schwerpunkt Wissenschaftliches Rechnen , ++ - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++ - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++ Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++ and ++ - IBM Deutschland GmbH ++ ++ ++ More information can be found here: ++ http://elpa.mpcdf.mpg.de/ ++ ++ ELPA is free software: you can redistribute it and/or modify ++ it under the terms of the version 3 of the license of the ++ GNU Lesser General Public License as published by the Free ++ Software Foundation. ++ ++ ELPA 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 Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with ELPA. If not, see <http://www.gnu.org/licenses/> ++ ++ ELPA reflects a substantial effort on the part of the original ++ ELPA consortium, and we ask you to respect the spirit of the ++ license that we chose: i.e., please contribute any changes you ++ may have back to the original ELPA library distribution, and keep ++ any derivatives of ELPA under the same license that we chose for ++ the original distribution, the GNU Lesser General Public License. ++*/ ++ ++#include "config.h" ++ ++#include <string.h> ++#include <stdio.h> ++#include <stdlib.h> ++#ifdef WITH_MPI ++#include <mpi.h> ++#endif ++#include <math.h> ++ ++#include <elpa/elpa.h> ++#include <assert.h> ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++//#error "define exactly one of TEST_REAL or TEST_COMPLEX" ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++//#error "define exactly one of TEST_SINGLE or TEST_DOUBLE" ++#endif ++ ++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE)) ++//#error "define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE" ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE float ++# ifdef TEST_REAL ++# define MATRIX_TYPE float ++# else ++# define MATRIX_TYPE complex float ++# endif ++#else ++# define EV_TYPE double ++# ifdef TEST_REAL ++# define MATRIX_TYPE double ++# else ++# define MATRIX_TYPE complex double ++# endif ++#endif ++ ++#define assert_elpa_ok(x) assert(x == ELPA_OK) ++#ifdef HAVE_64BIT_INTEGER_SUPPORT ++#define TEST_C_INT_TYPE_PTR long int* ++#define C_INT_TYPE_PTR long int* ++#define TEST_C_INT_TYPE long int ++#define C_INT_TYPE long int ++#else ++#define TEST_C_INT_TYPE_PTR int* ++#define C_INT_TYPE_PTR int* ++#define TEST_C_INT_TYPE int ++#define C_INT_TYPE int ++#endif ++ ++#include "generated.h" ++void set_basic_parameters(elpa_t *handle, C_INT_TYPE na, C_INT_TYPE nev, C_INT_TYPE na_rows, C_INT_TYPE na_cols, C_INT_TYPE nblk, C_INT_TYPE my_prow, C_INT_TYPE my_pcol){ ++ int error_elpa; ++ elpa_set(*handle, "na", (int) na, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(*handle, "nev", (int) nev, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(*handle, "local_nrows", (int) na_rows, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(*handle, "local_ncols", (int) na_cols, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(*handle, "nblk", (int) nblk, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++#ifdef WITH_MPI ++ elpa_set(*handle, "mpi_comm_parent", (int) (MPI_Comm_c2f(MPI_COMM_WORLD)), &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(*handle, "process_row", (int) my_prow, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(*handle, "process_col", (int) my_pcol, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++} ++ ++ ++int main(int argc, char** argv) { ++ /* matrix dimensions */ ++ C_INT_TYPE na, nev, nblk; ++ ++ /* mpi */ ++ C_INT_TYPE myid, nprocs; ++ C_INT_TYPE na_cols, na_rows; ++ C_INT_TYPE np_cols, np_rows; ++ C_INT_TYPE my_prow, my_pcol; ++ C_INT_TYPE mpi_comm; ++ ++ /* blacs */ ++ C_INT_TYPE my_blacs_ctxt, sc_desc[9], info; ++ ++ /* The Matrix */ ++ MATRIX_TYPE *a, *as, *z; ++ EV_TYPE *ev; ++ ++ C_INT_TYPE status; ++ int error_elpa; ++ int gpu, timings, debug; ++ char str[400]; ++ ++ elpa_t elpa_handle_1, elpa_handle_2, *elpa_handle_ptr; ++ ++ elpa_autotune_t autotune_handle; ++ C_INT_TYPE i, unfinished; ++ ++ C_INT_TYPE value; ++#ifdef WITH_MPI ++ MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &info); ++ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); ++ MPI_Comm_rank(MPI_COMM_WORLD, &myid); ++#else ++ nprocs = 1; ++ myid = 0; ++#endif ++ ++ if (argc == 4) { ++ na = atoi(argv[1]); ++ nev = atoi(argv[2]); ++ nblk = atoi(argv[3]); ++ } else { ++ na = 500; ++ nev = 250; ++ nblk = 16; ++ } ++ ++ for (np_cols = (C_INT_TYPE) sqrt((double) nprocs); np_cols > 1; np_cols--) { ++ if (nprocs % np_cols == 0) { ++ break; ++ } ++ } ++ ++ np_rows = nprocs/np_cols; ++ ++ /* set up blacs */ ++ /* convert communicators before */ ++#ifdef WITH_MPI ++ mpi_comm = MPI_Comm_c2f(MPI_COMM_WORLD); ++#else ++ mpi_comm = 0; ++#endif ++ set_up_blacsgrid_f(mpi_comm, np_rows, np_cols, 'C', &my_blacs_ctxt, &my_prow, &my_pcol); ++ set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, np_rows, np_cols, &na_rows, &na_cols, sc_desc, my_blacs_ctxt, &info); ++ ++ /* allocate the matrices needed for elpa */ ++ a = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ z = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ as = calloc(na_rows*na_cols, sizeof(MATRIX_TYPE)); ++ ev = calloc(na, sizeof(EV_TYPE)); ++ ++#ifdef TEST_REAL ++#ifdef TEST_DOUBLE ++ prepare_matrix_random_real_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#else ++ prepare_matrix_random_real_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#endif ++#else ++#ifdef TEST_DOUBLE ++ prepare_matrix_random_complex_double_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#else ++ prepare_matrix_random_complex_single_f(na, myid, na_rows, na_cols, sc_desc, a, z, as); ++#endif ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) != ELPA_OK) { ++ fprintf(stderr, "Error: ELPA API version not supported"); ++ exit(1); ++ } ++ ++ elpa_handle_1 = elpa_allocate(&error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ set_basic_parameters(&elpa_handle_1, na, nev, na_rows, na_cols, nblk, my_prow, my_pcol); ++ /* Setup */ ++ assert_elpa_ok(elpa_setup(elpa_handle_1)); ++ ++#if TEST_NVIDIA_GPU == 1 ++ elpa_set(elpa_handle_1, "nvidia-gpu", 0, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++#if TEST_INTEL_GPU == 1 ++ elpa_set(elpa_handle_1, "intel-gpu", 0, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++ elpa_set(elpa_handle_1, "timings", 1, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_set(elpa_handle_1, "debug", 1, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_store_settings(elpa_handle_1, "initial_parameters.txt", &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++#ifdef WITH_MPI ++ // barrier after store settings, file created from one MPI rank only, but loaded everywhere ++ MPI_Barrier(MPI_COMM_WORLD); ++#endif ++ ++#if OPTIONAL_C_ERROR_ARGUMENT == 1 ++ elpa_handle_2 = elpa_allocate(); ++#else ++ elpa_handle_2 = elpa_allocate(&error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++ set_basic_parameters(&elpa_handle_2, na, nev, na_rows, na_cols, nblk, my_prow, my_pcol); ++ /* Setup */ ++ assert_elpa_ok(elpa_setup(elpa_handle_2)); ++ ++ elpa_load_settings(elpa_handle_2, "initial_parameters.txt", &error_elpa); ++ ++#if TEST_NVIDIA_GPU == 1 ++ elpa_get(elpa_handle_2, "nvidia-gpu", &gpu, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++#if TEST_INTEL_GPU == 1 ++ elpa_get(elpa_handle_2, "intel-gpu", &gpu, &error_elpa); ++ assert_elpa_ok(error_elpa); ++#endif ++ ++ elpa_get(elpa_handle_2, "timings", &timings, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ elpa_get(elpa_handle_2, "debug", &debug, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ if ((timings != 1) || (debug != 1) || (gpu != 0)){ ++ printf("Parameters not stored or loaded correctly. Aborting... %d, %d, %d\n", timings, debug, gpu); ++ exit(1); ++ } ++ ++ elpa_handle_ptr = &elpa_handle_2; ++ ++ autotune_handle = elpa_autotune_setup(*elpa_handle_ptr, ELPA_AUTOTUNE_FAST, ELPA_AUTOTUNE_DOMAIN_REAL, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ /* mimic 20 scf steps */ ++ ++ for (i=0; i < 20; i++) { ++ ++ unfinished = elpa_autotune_step(*elpa_handle_ptr, autotune_handle, &error_elpa); ++ ++ if (unfinished == 0) { ++ if (myid == 0) { ++ printf("ELPA autotuning finished in the %d th scf step \n",i); ++ } ++ break; ++ } ++ ++ elpa_print_settings(*elpa_handle_ptr, &error_elpa); ++ elpa_autotune_print_state(*elpa_handle_ptr, autotune_handle, &error_elpa); ++ ++ sprintf(str, "saved_parameters_%d.txt", i); ++ elpa_store_settings(*elpa_handle_ptr, str, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ /* Solve EV problem */ ++ elpa_eigenvectors(*elpa_handle_ptr, a, ev, z, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ /* check the results */ ++#ifdef TEST_REAL ++#ifdef TEST_DOUBLE ++ status = check_correctness_evp_numeric_residuals_real_double_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(double)); ++ ++#else ++ status = check_correctness_evp_numeric_residuals_real_single_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(float)); ++#endif ++#else ++#ifdef TEST_DOUBLE ++ status = check_correctness_evp_numeric_residuals_complex_double_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(complex double)); ++#else ++ status = check_correctness_evp_numeric_residuals_complex_single_f(na, nev, na_rows, na_cols, as, z, ev, ++ sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol); ++ memcpy(a, as, na_rows*na_cols*sizeof(complex float)); ++#endif ++#endif ++ ++ if (status !=0){ ++ printf("The computed EVs are not correct !\n"); ++ break; ++ } ++ ++ elpa_autotune_print_state(*elpa_handle_ptr, autotune_handle, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ sprintf(str, "saved_state_%d.txt", i); ++ elpa_autotune_save_state(*elpa_handle_ptr, autotune_handle, str, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++#ifdef WITH_MPI ++ //barrier after save state, file created from one MPI rank only, but loaded everywhere ++ MPI_Barrier(MPI_COMM_WORLD); ++#endif ++ ++ elpa_autotune_load_state(*elpa_handle_ptr, autotune_handle, str, &error_elpa); ++ assert_elpa_ok(error_elpa); ++ ++ if (unfinished == 1) { ++ if (myid == 0) { ++ printf("ELPA autotuning did not finished during %d scf cycles\n",i); ++ } ++ } ++ ++ } ++ elpa_autotune_set_best(*elpa_handle_ptr, autotune_handle, &error_elpa); ++ ++ if (myid == 0) { ++ printf("The best combination found by the autotuning:\n"); ++ elpa_autotune_print_best(*elpa_handle_ptr, autotune_handle, &error_elpa); ++ } ++ ++ elpa_autotune_deallocate(autotune_handle, &error_elpa); ++ elpa_deallocate(elpa_handle_1, &error_elpa); ++#if OPTIONAL_C_ERROR_ARGUMENT == 1 ++ elpa_deallocate(elpa_handle_2); ++#else ++ elpa_deallocate(elpa_handle_2, &error_elpa); ++#endif ++ elpa_uninit(&error_elpa); ++ ++ if (myid == 0) { ++ printf("\n"); ++ printf("2stage ELPA real solver complete\n"); ++ printf("\n"); ++ } ++ ++ if (status ==0){ ++ if (myid ==0) { ++ printf("All ok!\n"); ++ } ++ } ++ ++ free(a); ++ free(z); ++ free(as); ++ free(ev); ++ ++#ifdef WITH_MPI ++ MPI_Finalize(); ++#endif ++ ++ return !!status; ++} +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/assert.h elpa-new_release_2021.11.001_ok/examples/Fortran/assert.h +--- elpa-new_release_2021.11.001/examples/Fortran/assert.h 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/assert.h 2022-01-26 10:05:16.438246000 +0100 +@@ -0,0 +1,7 @@ ++#define stringify_(x) "x" ++#define stringify(x) stringify_(x) ++#define assert(x) call x_a(x, stringify(x), "F", __LINE__) ++ ++#define assert_elpa_ok(error_code) call x_ao(error_code, stringify(error_code), __FILE__, __LINE__) ++ ++! vim: syntax=fortran +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/complex_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/complex_2stage_banded.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/complex_2stage_banded.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/complex_2stage_banded.F90 2022-01-26 10:09:19.163552000 +0100 +@@ -0,0 +1,300 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++#include "../assert.h" ++!> ++!> Fortran test programm to demonstrates the use of ++!> ELPA 2 complex case library. ++!> If "HAVE_REDIRECT" was defined at build time ++!> the stdout and stderr output of each MPI task ++!> can be redirected to files if the environment ++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set ++!> to "true". ++!> ++!> By calling executable [arg1] [arg2] [arg3] [arg4] ++!> one can define the size (arg1), the number of ++!> Eigenvectors to compute (arg2), and the blocking (arg3). ++!> If these values are not set default values (500, 150, 16) ++!> are choosen. ++!> If these values are set the 4th argument can be ++!> "output", which specifies that the EV's are written to ++!> an ascii file. ++!> ++!> The complex ELPA 2 kernel is set as the default kernel. ++!> However, this can be overriden by setting ++!> the environment variable "COMPLEX_ELPA_KERNEL" to an ++!> appropiate value. ++!> ++ ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++program test_complex2_double_banded ++ ++!------------------------------------------------------------------------------- ++! Standard eigenvalue problem - COMPLEX version ++! ++! This program demonstrates the use of the ELPA module ++! together with standard scalapack routines ++! ++! Copyright of the original code rests with the authors inside the ELPA ++! consortium. The copyright of any additional modifications shall rest ++! with their original authors, but shall adhere to the licensing terms ++! distributed along with the original code in the file "COPYING". ++!------------------------------------------------------------------------------- ++ use elpa ++ ++ !use test_util ++ use test_read_input_parameters ++ use test_check_correctness ++ use test_setup_mpi ++ use test_blacs_infrastructure ++ use test_prepare_matrix ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ use test_output_type ++ implicit none ++ ++ !------------------------------------------------------------------------------- ++ ! Please set system size parameters below! ++ ! na: System size ++ ! nev: Number of eigenvectors to be calculated ++ ! nblk: Blocking factor in block cyclic distribution ++ !------------------------------------------------------------------------------- ++ ++ TEST_INT_TYPE :: nblk ++ TEST_INT_TYPE :: na, nev ++ ++ TEST_INT_TYPE :: np_rows, np_cols, na_rows, na_cols ++ ++ TEST_INT_TYPE :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols ++ TEST_INT_TYPE :: i, my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ TEST_INT_MPI_TYPE :: mpierr ++#ifdef WITH_MPI ++ !TEST_INT_TYPE, external :: numroc ++#endif ++ complex(kind=ck8), parameter :: CZERO = (0.0_rk8,0.0_rk8), CONE = (1.0_rk8,0.0_rk8) ++ real(kind=rk8), allocatable :: ev(:) ++ ++ complex(kind=ck8), allocatable :: a(:,:), z(:,:), as(:,:) ++ ++ TEST_INT_TYPE :: STATUS ++#ifdef WITH_OPENMP_TRADITIONAL ++ TEST_INT_TYPE :: omp_get_max_threads, required_mpi_thread_level, provided_mpi_thread_level ++#endif ++ type(output_t) :: write_to_file ++ integer(kind=c_int) :: error_elpa ++ character(len=8) :: task_suffix ++ TEST_INT_TYPE :: j ++ ++ ++ TEST_INT_TYPE :: numberOfDevices ++ TEST_INT_TYPE :: global_row, global_col, local_row, local_col ++ TEST_INT_TYPE :: bandwidth ++ class(elpa_t), pointer :: e ++ ++#define COMPLEXCASE ++#define DOUBLE_PRECISION_COMPLEX 1 ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++ ++ if (nblk .eq. 1) then ++ stop 77 ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! MPI Initialization ++ call setup_mpi(myid, nprocs) ++ ++ STATUS = 0 ++ ++ !------------------------------------------------------------------------------- ++ ! Selection of number of processor rows/columns ++ ! We try to set up the grid square-like, i.e. start the search for possible ++ ! divisors of nprocs with a number next to the square root of nprocs ++ ! and decrement it until a divisor is found. ++ ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ! at the end of the above loop, nprocs is always divisible by np_cols ++ ++ np_rows = nprocs/np_cols ++ ++ if(myid==0) then ++ print * ++ print '(a)','Standard eigenvalue problem - COMPLEX version' ++ print * ++ print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print * ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! Set up BLACS context and MPI communicators ++ ! ++ ! The BLACS context is only necessary for using Scalapack. ++ ! ++ ! For ELPA, the MPI communicators along rows/cols are sufficient, ++ ! and the grid setup may be done in an arbitrary way as long as it is ++ ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every ++ ! process has a unique (my_prow,my_pcol) pair). ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ if (myid==0) then ++ print '(a)','| Past BLACS_Gridinfo.' ++ end if ++ ++ ! Determine the necessary size of the distributed matrices, ++ ! we use the Scalapack tools routine NUMROC for that. ++ ++ call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ if (myid==0) then ++ print '(a)','| Past scalapack descriptor setup.' ++ end if ++ !------------------------------------------------------------------------------- ++ ! Allocate matrices and set up a test matrix for the eigenvalue problem ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ ++ allocate(ev(na)) ++ ++ call prepare_matrix_random(na, myid, sc_desc, a, z, as) ++ ++ ! set values outside of the bandwidth to zero ++ bandwidth = nblk ++ ++ do local_row = 1, na_rows ++ global_row = index_l2g( local_row, nblk, my_prow, np_rows ) ++ do local_col = 1, na_cols ++ global_col = index_l2g( local_col, nblk, my_pcol, np_cols ) ++ ++ if (ABS(global_row-global_col) > bandwidth) then ++ a(local_row, local_col) = 0 ++ as(local_row, local_col) = 0 ++ end if ++ end do ++ end do ++ ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ e => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#ifdef WITH_MPI ++ call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ assert(e%setup() .eq. ELPA_OK) ++ ++ call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa_deallocate(e, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_uninit(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ !------------------------------------------------------------------------------- ++ ! Test correctness of result (using plain scalapack routines) ++ status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ ++ deallocate(a) ++ deallocate(as) ++ ++ deallocate(z) ++ deallocate(ev) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ call EXIT(STATUS) ++end ++ ++!------------------------------------------------------------------------------- +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/double_instance.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/double_instance.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/double_instance.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/double_instance.F90 2022-01-26 10:09:19.164133000 +0100 +@@ -0,0 +1,244 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++#include "../assert.h" ++ ++program test_interface ++ use elpa ++ ++ use precision_for_tests ++ !use test_util ++ use test_setup_mpi ++ use test_prepare_matrix ++ use test_read_input_parameters ++ use test_blacs_infrastructure ++ use test_check_correctness ++ implicit none ++ ++ ! matrix dimensions ++ TEST_INT_TYPE :: na, nev, nblk ++ ++ ! mpi ++ TEST_INT_TYPE :: myid, nprocs ++ TEST_INT_TYPE :: na_cols, na_rows ! local matrix size ++ TEST_INT_TYPE :: np_cols, np_rows ! number of MPI processes per column/row ++ TEST_INT_TYPE :: my_prow, my_pcol ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1) ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ ! blacs ++ TEST_INT_TYPE :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ ! The Matrix ++ real(kind=C_DOUBLE), allocatable :: a1(:,:), as1(:,:) ++ ! eigenvectors ++ real(kind=C_DOUBLE), allocatable :: z1(:,:) ++ ! eigenvalues ++ real(kind=C_DOUBLE), allocatable :: ev1(:) ++ ++ ! The Matrix ++ complex(kind=C_DOUBLE_COMPLEX), allocatable :: a2(:,:), as2(:,:) ++ ! eigenvectors ++ complex(kind=C_DOUBLE_COMPLEX), allocatable :: z2(:,:) ++ ! eigenvalues ++ real(kind=C_DOUBLE), allocatable :: ev2(:) ++ TEST_INT_TYPE :: status ++ integer(kind=c_int) :: error_elpa ++ ++ TEST_INT_TYPE :: solver ++ TEST_INT_TYPE :: qr ++ ++ type(output_t) :: write_to_file ++ class(elpa_t), pointer :: e1, e2 ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++ call setup_mpi(myid, nprocs) ++ ++ status = 0 ++ ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ++ np_rows = nprocs/np_cols ++ ++ my_prow = mod(myid, np_cols) ++ my_pcol = myid / np_cols ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ allocate(a1 (na_rows,na_cols), as1(na_rows,na_cols)) ++ allocate(z1 (na_rows,na_cols)) ++ allocate(ev1(na)) ++ ++ a1(:,:) = 0.0 ++ z1(:,:) = 0.0 ++ ev1(:) = 0.0 ++ ++ call prepare_matrix_random(na, myid, sc_desc, a1, z1, as1) ++ allocate(a2 (na_rows,na_cols), as2(na_rows,na_cols)) ++ allocate(z2 (na_rows,na_cols)) ++ allocate(ev2(na)) ++ ++ a2(:,:) = 0.0 ++ z2(:,:) = 0.0 ++ ev2(:) = 0.0 ++ ++ call prepare_matrix_random(na, myid, sc_desc, a2, z2, as2) ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ e1 => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e1%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e1%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e1%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e1%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e1%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#ifdef WITH_MPI ++ call e1%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e1%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e1%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ assert(e1%setup() .eq. ELPA_OK) ++ ++ call e1%set("solver", ELPA_SOLVER_2STAGE, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e1%set("real_kernel", ELPA_2STAGE_REAL_DEFAULT, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ ++ e2 => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e2%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e2%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e2%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e2%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e2%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#ifdef WITH_MPI ++ call e2%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e2%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e2%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ assert(e2%setup() .eq. ELPA_OK) ++ ++ call e2%set("solver", ELPA_SOLVER_1STAGE, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e1%eigenvectors(a1, ev1, z1, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_deallocate(e1, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e2%eigenvectors(a2, ev2, z2, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_deallocate(e2, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_uninit(error_elpa) ++ ++ status = check_correctness_evp_numeric_residuals(na, nev, as1, z1, ev1, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ ++ deallocate(a1) ++ deallocate(as1) ++ deallocate(z1) ++ deallocate(ev1) ++ ++ status = check_correctness_evp_numeric_residuals(na, nev, as2, z2, ev2, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ ++ deallocate(a2) ++ deallocate(as2) ++ deallocate(z2) ++ deallocate(ev2) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ call EXIT(STATUS) ++ ++ ++end program +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/real_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/real_2stage_banded.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/real_2stage_banded.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/real_2stage_banded.F90 2022-01-26 10:09:19.164859000 +0100 +@@ -0,0 +1,298 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++#include "../assert.h" ++!> ++!> Fortran test programm to demonstrates the use of ++!> ELPA 2 real case library. ++!> If "HAVE_REDIRECT" was defined at build time ++!> the stdout and stderr output of each MPI task ++!> can be redirected to files if the environment ++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set ++!> to "true". ++!> ++!> By calling executable [arg1] [arg2] [arg3] [arg4] ++!> one can define the size (arg1), the number of ++!> Eigenvectors to compute (arg2), and the blocking (arg3). ++!> If these values are not set default values (500, 150, 16) ++!> are choosen. ++!> If these values are set the 4th argument can be ++!> "output", which specifies that the EV's are written to ++!> an ascii file. ++!> ++!> The real ELPA 2 kernel is set as the default kernel. ++!> However, this can be overriden by setting ++!> the environment variable "REAL_ELPA_KERNEL" to an ++!> appropiate value. ++!> ++ ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++program test_real2_double_banded ++ ++!------------------------------------------------------------------------------- ++! Standard eigenvalue problem - REAL version ++! ++! This program demonstrates the use of the ELPA module ++! together with standard scalapack routines ++! ++! Copyright of the original code rests with the authors inside the ELPA ++! consortium. The copyright of any additional modifications shall rest ++! with their original authors, but shall adhere to the licensing terms ++! distributed along with the original code in the file "COPYING". ++! ++!------------------------------------------------------------------------------- ++ use elpa ++ ++ !use test_util ++ use test_read_input_parameters ++ use test_check_correctness ++ use test_setup_mpi ++ use test_blacs_infrastructure ++ use test_prepare_matrix ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ use test_output_type ++ implicit none ++ ++ !------------------------------------------------------------------------------- ++ ! Please set system size parameters below! ++ ! na: System size ++ ! nev: Number of eigenvectors to be calculated ++ ! nblk: Blocking factor in block cyclic distribution ++ !------------------------------------------------------------------------------- ++ ++ TEST_INT_TYPE :: nblk ++ TEST_INT_TYPE :: na, nev ++ ++ TEST_INT_TYPE :: np_rows, np_cols, na_rows, na_cols ++ ++ TEST_INT_TYPE :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols ++ TEST_INT_TYPE :: i, my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ TEST_INT_MPI_TYPE :: mpierr ++ !TEST_INT_TYPE, external :: numroc ++ ++ real(kind=rk8), allocatable :: a(:,:), z(:,:), as(:,:), ev(:) ++ ++ TEST_INT_TYPE :: STATUS ++#ifdef WITH_OPENMP_TRADITIONAL ++ TEST_INT_TYPE :: omp_get_max_threads, required_mpi_thread_level, provided_mpi_thread_level ++#endif ++ integer(kind=c_int) :: error_elpa ++ TEST_INT_TYPE :: numberOfDevices ++ type(output_t) :: write_to_file ++ character(len=8) :: task_suffix ++ TEST_INT_TYPE :: j ++ TEST_INT_TYPE :: global_row, global_col, local_row, local_col ++ TEST_INT_TYPE :: bandwidth ++ class(elpa_t), pointer :: e ++#define DOUBLE_PRECISION_REAL 1 ++ ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++ ++ if (nblk .eq. 1) then ++ stop 77 ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! MPI Initialization ++ call setup_mpi(myid, nprocs) ++ ++ STATUS = 0 ++ ++#define REALCASE ++ ++ !------------------------------------------------------------------------------- ++ ! Selection of number of processor rows/columns ++ ! We try to set up the grid square-like, i.e. start the search for possible ++ ! divisors of nprocs with a number next to the square root of nprocs ++ ! and decrement it until a divisor is found. ++ ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ! at the end of the above loop, nprocs is always divisible by np_cols ++ ++ np_rows = nprocs/np_cols ++ ++ if(myid==0) then ++ print * ++ print '(a)','Standard eigenvalue problem - REAL version' ++ print * ++ print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print * ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! Set up BLACS context and MPI communicators ++ ! ++ ! The BLACS context is only necessary for using Scalapack. ++ ! ++ ! For ELPA, the MPI communicators along rows/cols are sufficient, ++ ! and the grid setup may be done in an arbitrary way as long as it is ++ ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every ++ ! process has a unique (my_prow,my_pcol) pair). ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ if (myid==0) then ++ print '(a)','| Past BLACS_Gridinfo.' ++ end if ++ ++ call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ if (myid==0) then ++ print '(a)','| Past scalapack descriptor setup.' ++ end if ++ ++ !------------------------------------------------------------------------------- ++ ! Allocate matrices and set up a test matrix for the eigenvalue problem ++ allocate(a (na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ ++ allocate(ev(na)) ++ ++ call prepare_matrix_random(na, myid, sc_desc, a, z, as) ++ ++ ! set values outside of the bandwidth to zero ++ bandwidth = nblk ++ ++ do local_row = 1, na_rows ++ global_row = index_l2g(local_row, nblk, my_prow, np_rows) ++ do local_col = 1, na_cols ++ global_col = index_l2g(local_col, nblk, my_pcol, np_cols) ++ ++ if (ABS(global_row-global_col) > bandwidth) then ++ a(local_row, local_col) = 0.0 ++ as(local_row, local_col) = 0.0 ++ end if ++ end do ++ end do ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ e => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#ifdef WITH_MPI ++ call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ assert(e%setup() .eq. ELPA_OK) ++ ++ call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_deallocate(e, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_uninit(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ ++ !------------------------------------------------------------------------------- ++ ! Test correctness of result (using plain scalapack routines) ++ ++ ++ status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ ++ ++ deallocate(a) ++ deallocate(as) ++ ++ deallocate(z) ++ deallocate(ev) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ call EXIT(STATUS) ++end ++ ++!------------------------------------------------------------------------------- +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_complex_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_complex_2stage_banded.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_complex_2stage_banded.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_complex_2stage_banded.F90 2022-01-26 10:09:19.166040000 +0100 +@@ -0,0 +1,299 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++ ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++#include "../assert.h" ++!> ++!> Fortran test programm to demonstrates the use of ++!> ELPA 2 complex case library. ++!> If "HAVE_REDIRECT" was defined at build time ++!> the stdout and stderr output of each MPI task ++!> can be redirected to files if the environment ++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set ++!> to "true". ++!> ++!> By calling executable [arg1] [arg2] [arg3] [arg4] ++!> one can define the size (arg1), the number of ++!> Eigenvectors to compute (arg2), and the blocking (arg3). ++!> If these values are not set default values (500, 150, 16) ++!> are choosen. ++!> If these values are set the 4th argument can be ++!> "output", which specifies that the EV's are written to ++!> an ascii file. ++!> ++!> The complex ELPA 2 kernel is set as the default kernel. ++!> However, this can be overriden by setting ++!> the environment variable "COMPLEX_ELPA_KERNEL" to an ++!> appropiate value. ++!> ++program test_complex2_single_banded ++ ++!------------------------------------------------------------------------------- ++! Standard eigenvalue problem - COMPLEX version ++! ++! This program demonstrates the use of the ELPA module ++! together with standard scalapack routines ++! ++! Copyright of the original code rests with the authors inside the ELPA ++! consortium. The copyright of any additional modifications shall rest ++! with their original authors, but shall adhere to the licensing terms ++! distributed along with the original code in the file "COPYING". ++!------------------------------------------------------------------------------- ++ use elpa ++ ++ use test_util ++ use test_read_input_parameters ++ use test_check_correctness ++ use test_setup_mpi ++ use test_blacs_infrastructure ++ use test_prepare_matrix ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ ++ use test_output_type ++ implicit none ++ ++ !------------------------------------------------------------------------------- ++ ! Please set system size parameters below! ++ ! na: System size ++ ! nev: Number of eigenvectors to be calculated ++ ! nblk: Blocking factor in block cyclic distribution ++ !------------------------------------------------------------------------------- ++ ++ TEST_INT_TYPE :: nblk ++ TEST_INT_TYPE :: na, nev ++ ++ TEST_INT_TYPE :: np_rows, np_cols, na_rows, na_cols ++ ++ TEST_INT_TYPE :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols ++ TEST_INT_TYPE :: i, my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ TEST_INT_MPI_TYPE :: mpierr ++#ifdef WITH_MPI ++ !TEST_INT_TYPE, external :: numroc ++#endif ++ complex(kind=ck4), parameter :: CZERO = (0.0_rk4,0.0_rk4), CONE = (1.0_rk4,0.0_rk4) ++ real(kind=rk4), allocatable :: ev(:) ++ ++ complex(kind=ck4), allocatable :: a(:,:), z(:,:), as(:,:) ++ ++ TEST_INT_TYPE :: STATUS ++#ifdef WITH_OPENMP_TRADITIONAL ++ TEST_INT_TYPE :: omp_get_max_threads, required_mpi_thread_level, provided_mpi_thread_level ++#endif ++ type(output_t) :: write_to_file ++ integer(kind=ik) :: error_elpa ++ character(len=8) :: task_suffix ++ TEST_INT_TYPE :: j ++ ++ ++ TEST_INT_TYPE :: global_row, global_col, local_row, local_col ++ TEST_INT_TYPE :: bandwidth ++ class(elpa_t), pointer :: e ++ ++#define COMPLEXCASE ++#define DOUBLE_PRECISION_COMPLEX 1 ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++ if (nblk .eq. 1) then ++ stop 77 ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! MPI Initialization ++ call setup_mpi(myid, nprocs) ++ ++ STATUS = 0 ++ ++ !------------------------------------------------------------------------------- ++ ! Selection of number of processor rows/columns ++ ! We try to set up the grid square-like, i.e. start the search for possible ++ ! divisors of nprocs with a number next to the square root of nprocs ++ ! and decrement it until a divisor is found. ++ ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ! at the end of the above loop, nprocs is always divisible by np_cols ++ ++ np_rows = nprocs/np_cols ++ ++ if(myid==0) then ++ print * ++ print '(a)','Standard eigenvalue problem - COMPLEX version' ++ print * ++ print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print * ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! Set up BLACS context and MPI communicators ++ ! ++ ! The BLACS context is only necessary for using Scalapack. ++ ! ++ ! For ELPA, the MPI communicators along rows/cols are sufficient, ++ ! and the grid setup may be done in an arbitrary way as long as it is ++ ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every ++ ! process has a unique (my_prow,my_pcol) pair). ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ if (myid==0) then ++ print '(a)','| Past BLACS_Gridinfo.' ++ end if ++ ++ ! Determine the necessary size of the distributed matrices, ++ ! we use the Scalapack tools routine NUMROC for that. ++ ++ call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ if (myid==0) then ++ print '(a)','| Past scalapack descriptor setup.' ++ end if ++ !------------------------------------------------------------------------------- ++ ! Allocate matrices and set up a test matrix for the eigenvalue problem ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ ++ allocate(ev(na)) ++ ++ call prepare_matrix_random(na, myid, sc_desc, a, z, as) ++ ++ ! set values outside of the bandwidth to zero ++ bandwidth = nblk ++ ++ do local_row = 1, na_rows ++ global_row = index_l2g( local_row, nblk, my_prow, np_rows ) ++ do local_col = 1, na_cols ++ global_col = index_l2g( local_col, nblk, my_pcol, np_cols ) ++ ++ if (ABS(global_row-global_col) > bandwidth) then ++ a(local_row, local_col) = 0 ++ as(local_row, local_col) = 0 ++ end if ++ end do ++ end do ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ e => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#ifdef WITH_MPI ++ call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ assert(e%setup() .eq. ELPA_OK) ++ ++ call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_deallocate(e, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_uninit(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ !------------------------------------------------------------------------------- ++ ! Test correctness of result (using plain scalapack routines) ++ status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ ++ deallocate(a) ++ deallocate(as) ++ ++ deallocate(z) ++ deallocate(ev) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ call EXIT(STATUS) ++end ++ ++!------------------------------------------------------------------------------- +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_real_2stage_banded.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_real_2stage_banded.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/elpa2/single_real_2stage_banded.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa2/single_real_2stage_banded.F90 2022-01-26 10:09:19.166871000 +0100 +@@ -0,0 +1,290 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++#include "../assert.h" ++!> ++!> Fortran test programm to demonstrates the use of ++!> ELPA 2 real case library. ++!> If "HAVE_REDIRECT" was defined at build time ++!> the stdout and stderr output of each MPI task ++!> can be redirected to files if the environment ++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set ++!> to "true". ++!> ++!> By calling executable [arg1] [arg2] [arg3] [arg4] ++!> one can define the size (arg1), the number of ++!> Eigenvectors to compute (arg2), and the blocking (arg3). ++!> If these values are not set default values (500, 150, 16) ++!> are choosen. ++!> If these values are set the 4th argument can be ++!> "output", which specifies that the EV's are written to ++!> an ascii file. ++!> ++!> The real ELPA 2 kernel is set as the default kernel. ++!> However, this can be overriden by setting ++!> the environment variable "REAL_ELPA_KERNEL" to an ++!> appropiate value. ++!> ++program test_real2_single_banded ++ ++!------------------------------------------------------------------------------- ++! Standard eigenvalue problem - REAL version ++! ++! This program demonstrates the use of the ELPA module ++! together with standard scalapack routines ++! ++! Copyright of the original code rests with the authors inside the ELPA ++! consortium. The copyright of any additional modifications shall rest ++! with their original authors, but shall adhere to the licensing terms ++! distributed along with the original code in the file "COPYING". ++! ++!------------------------------------------------------------------------------- ++ use elpa ++ ++ !use test_util ++ use test_read_input_parameters ++ use test_check_correctness ++ use test_setup_mpi ++ use test_blacs_infrastructure ++ use test_prepare_matrix ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ use test_output_type ++ use tests_scalapack_interfaces ++ implicit none ++ ++ !------------------------------------------------------------------------------- ++ ! Please set system size parameters below! ++ ! na: System size ++ ! nev: Number of eigenvectors to be calculated ++ ! nblk: Blocking factor in block cyclic distribution ++ !------------------------------------------------------------------------------- ++ ++ TEST_INT_TYPE :: nblk ++ TEST_INT_TYPE :: na, nev ++ ++ TEST_INT_TYPE :: np_rows, np_cols, na_rows, na_cols ++ ++ TEST_INT_TYPE :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols ++ TEST_INT_TYPE :: i, my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ real(kind=rk4), allocatable :: a(:,:), z(:,:), as(:,:), ev(:) ++ ++ TEST_INT_TYPE :: STATUS ++#ifdef WITH_OPENMP_TRADITIONAL ++ TEST_INT_TYPE :: omp_get_max_threads, required_mpi_thread_level, provided_mpi_thread_level ++#endif ++ integer(kind=c_int) :: error_elpa ++ type(output_t) :: write_to_file ++ character(len=8) :: task_suffix ++ TEST_INT_TYPE :: j ++ TEST_INT_TYPE :: global_row, global_col, local_row, local_col ++ TEST_INT_TYPE :: bandwidth ++ class(elpa_t), pointer :: e ++#define DOUBLE_PRECISION_REAL 1 ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++ if (nblk .eq. 1) then ++ stop 77 ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! MPI Initialization ++ call setup_mpi(myid, nprocs) ++ ++ ++ STATUS = 0 ++ ++#define REALCASE ++ ++ !------------------------------------------------------------------------------- ++ ! Selection of number of processor rows/columns ++ ! We try to set up the grid square-like, i.e. start the search for possible ++ ! divisors of nprocs with a number next to the square root of nprocs ++ ! and decrement it until a divisor is found. ++ ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ! at the end of the above loop, nprocs is always divisible by np_cols ++ ++ np_rows = nprocs/np_cols ++ ++ if(myid==0) then ++ print * ++ print '(a)','Standard eigenvalue problem - REAL version' ++ print * ++ print '(3(a,i0))','Matrix size=',na,', Number of eigenvectors=',nev,', Block size=',nblk ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print * ++ endif ++ ++ !------------------------------------------------------------------------------- ++ ! Set up BLACS context and MPI communicators ++ ! ++ ! The BLACS context is only necessary for using Scalapack. ++ ! ++ ! For ELPA, the MPI communicators along rows/cols are sufficient, ++ ! and the grid setup may be done in an arbitrary way as long as it is ++ ! consistent (i.e. 0<=my_prow<np_rows, 0<=my_pcol<np_cols and every ++ ! process has a unique (my_prow,my_pcol) pair). ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, 'C', & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ if (myid==0) then ++ print '(a)','| Past BLACS_Gridinfo.' ++ end if ++ ++ call set_up_blacs_descriptor(na ,nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ if (myid==0) then ++ print '(a)','| Past scalapack descriptor setup.' ++ end if ++ ++ !------------------------------------------------------------------------------- ++ ! Allocate matrices and set up a test matrix for the eigenvalue problem ++ allocate(a (na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ ++ allocate(ev(na)) ++ ++ call prepare_matrix_random(na, myid, sc_desc, a, z, as) ++ ++ ! set values outside of the bandwidth to zero ++ bandwidth = nblk ++ ++ do local_row = 1, na_rows ++ global_row = index_l2g( local_row, nblk, my_prow, np_rows ) ++ do local_col = 1, na_cols ++ global_col = index_l2g( local_col, nblk, my_pcol, np_cols ) ++ ++ if (ABS(global_row-global_col) > bandwidth) then ++ a(local_row, local_col) = 0.0 ++ as(local_row, local_col) = 0.0 ++ end if ++ end do ++ end do ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ e => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#ifdef WITH_MPI ++ call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ call e%set("bandwidth", int(bandwidth,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ assert(e%setup() .eq. ELPA_OK) ++ ++ call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_deallocate(e, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa_uninit(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ ++ !------------------------------------------------------------------------------- ++ ! Test correctness of result (using plain scalapack routines) ++ ++ status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ deallocate(a) ++ deallocate(as) ++ ++ deallocate(z) ++ deallocate(ev) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ call EXIT(STATUS) ++end ++ ++!------------------------------------------------------------------------------- +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa_generalized/test_bindings.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_generalized/test_bindings.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/elpa_generalized/test_bindings.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_generalized/test_bindings.F90 2022-01-26 10:09:56.136747000 +0100 +@@ -0,0 +1,168 @@ ++#include "config-f90.h" ++ ++#include "../assert.h" ++ ++program test_bindings ++ use elpa ++ ++ use test_util ++ use test_setup_mpi ++! use test_prepare_matrix ++ use test_read_input_parameters ++ use test_blacs_infrastructure ++! use test_check_correctness ++! use test_analytic ++! use test_scalapack ++ ++ ++ implicit none ++ ++#include "src/elpa_generated_fortran_interfaces.h" ++ ++ ! matrix dimensions ++ integer :: na, nev, nblk ++ ++ ! mpi ++ integer :: myid, nprocs ++ integer :: na_cols, na_rows ! local matrix size ++ integer :: np_cols, np_rows ! number of MPI processes per column/row ++ integer :: my_prow, my_pcol ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1) ++ integer :: mpierr, mpi_comm_rows, mpi_comm_cols ++ type(output_t) :: write_to_file ++ ++ ! blacs ++ integer :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol, i, j ++ character(len=1) :: layout ++ ++ ++ ! The Matrix ++ real(kind=C_DOUBLE) , allocatable :: a(:,:), res(:,:) ++ ++ logical :: skip_check_correctness ++ ++ class(elpa_t), pointer :: e ++ ++ integer :: error, status ++ ++ call read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness) ++ call setup_mpi(myid, nprocs) ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++ !call redirect_stdout(myid) ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ layout = 'C' ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ++ np_rows = nprocs/np_cols ++ assert(nprocs == np_rows * np_cols) ++ ++ if (myid == 0) then ++ print '((a,i0))', 'Matrix size: ', na ++ print '((a,i0))', 'Num eigenvectors: ', nev ++ print '((a,i0))', 'Blocksize: ', nblk ++#ifdef WITH_MPI ++ print '((a,i0))', 'Num MPI proc: ', nprocs ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print '(a)', 'Process layout: ' // layout ++#endif ++ print *,'' ++ endif ++ ++ ++ call set_up_blacsgrid(mpi_comm_world, np_rows, np_cols, layout, & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(res(na_rows,na_cols)) ++ ++ e => elpa_allocate(error) ++ assert_elpa_ok(error) ++ ++ call e%set("na", na, error) ++ assert_elpa_ok(error) ++ call e%set("nev", nev, error) ++ assert_elpa_ok(error) ++ call e%set("local_nrows", na_rows, error) ++ assert_elpa_ok(error) ++ call e%set("local_ncols", na_cols, error) ++ assert_elpa_ok(error) ++ call e%set("nblk", nblk, error) ++ assert_elpa_ok(error) ++ ++#ifdef WITH_MPI ++ call e%set("mpi_comm_parent", MPI_COMM_WORLD, error) ++ assert_elpa_ok(error) ++ call e%set("process_row", my_prow, error) ++ assert_elpa_ok(error) ++ call e%set("process_col", my_pcol, error) ++ assert_elpa_ok(error) ++#endif ++ ++ call e%get("mpi_comm_rows",mpi_comm_rows, error) ++ assert_elpa_ok(error) ++ call e%get("mpi_comm_cols",mpi_comm_cols, error) ++ assert_elpa_ok(error) ++ ++ a(:,:) = 1.0 ++ res(:,:) = 0.0 ++ ++ call test_c_bindings(a, na_rows, na_cols, np_rows, np_cols, my_prow, my_pcol, sc_desc, res, mpi_comm_rows, mpi_comm_cols) ++ ++ status = 0 ++ do i = 1, na_rows ++ do j = 1, na_cols ++ if(a(i,j) .ne. 1.0) then ++ write(*,*) i, j, ": wrong value of A: ", a(i,j), ", should be 1" ++ status = 1 ++ endif ++ if(res(i,j) .ne. 3.0) then ++ write(*,*) i, j, ": wrong value of res: ", res(i,j), ", should be 3" ++ status = 1 ++ endif ++ enddo ++ enddo ++ ++ call check_status(status, myid) ++ ++ call elpa_deallocate(e, error) ++ assert_elpa_ok(error) ++ ++ deallocate(a) ++ deallocate(res) ++ call elpa_uninit(error) ++ assert_elpa_ok(error) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ ++ call exit(status) ++ ++ contains ++ ++ subroutine check_status(status, myid) ++ implicit none ++ integer, intent(in) :: status, myid ++ integer :: mpierr ++ if (status /= 0) then ++ if (myid == 0) print *, "Result incorrect!" ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ call exit(status) ++ endif ++ end subroutine ++ ++end program +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/elpa_print_headers.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_print_headers.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/elpa_print_headers.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/elpa_print_headers.F90 2022-01-26 10:04:52.441241000 +0100 +@@ -0,0 +1,282 @@ ++#if 0 ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++! ELPA1 -- Faster replacements for ScaLAPACK symmetric eigenvalue routines ++! ++! Copyright of the original code rests with the authors inside the ELPA ++! consortium. The copyright of any additional modifications shall rest ++! with their original authors, but shall adhere to the licensing terms ++! distributed along with the original code in the file "COPYING". ++#endif ++ ++#ifdef WITH_OPENMP_TRADITIONAL ++ if (myid .eq. 0) then ++ print *,"Threaded version of test program" ++ print *,"Using ",omp_get_max_threads()," threads" ++ print *," " ++ endif ++#endif ++ ++#ifndef WITH_MPI ++ if (myid .eq. 0) then ++ print *,"This version of ELPA does not support MPI parallelisation" ++ print *,"For MPI support re-build ELPA with appropiate flags" ++ print *," " ++ endif ++#endif ++ ++#ifdef ELPA1 ++ ++#ifdef REALCASE ++#ifdef DOUBLE_PRECISION_REAL ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Real valued double-precision version of ELPA1 is used" ++ print *," " ++ endif ++#else ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Real valued single-precision version of ELPA1 is used" ++ print *," " ++ endif ++#endif ++ ++#endif ++ ++#ifdef COMPLEXCASE ++#ifdef DOUBLE_PRECISION_COMPLEX ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Complex valued double-precision version of ELPA1 is used" ++ print *," " ++ endif ++#else ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Complex valued single-precision version of ELPA1 is used" ++ print *," " ++ endif ++#endif ++ ++#endif /* DATATYPE */ ++ ++#else /* ELPA1 */ ++ ++#ifdef REALCASE ++#ifdef DOUBLE_PRECISION_REAL ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Real valued double-precision version of ELPA2 is used" ++ print *," " ++ endif ++#else ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Real valued single-precision version of ELPA2 is used" ++ print *," " ++ endif ++#endif ++ ++#endif ++ ++#ifdef COMPLEXCASE ++#ifdef DOUBLE_PRECISION_COMPLEX ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Complex valued double-precision version of ELPA2 is used" ++ print *," " ++ endif ++#else ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Complex valued single-precision version of ELPA2 is used" ++ print *," " ++ endif ++#endif ++ ++#endif /* DATATYPE */ ++ ++#endif /* ELPA1 */ ++ ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++#ifdef HAVE_REDIRECT ++ if (check_redirect_environment_variable()) then ++ if (myid .eq. 0) then ++ print *," " ++ print *,"Redirection of mpi processes is used" ++ print *," " ++ if (create_directories() .ne. 1) then ++ write(error_unit,*) "Unable to create directory for stdout and stderr!" ++ stop 1 ++ endif ++ endif ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++ call redirect_stdout(myid) ++ endif ++#endif ++ ++#ifndef ELPA1 ++ ++ if (myid .eq. 0) then ++ print *," " ++ print *,"This ELPA2 is build with" ++#ifdef WITH_NVIDIA_GPU_KERNEL ++ print *,"CUDA GPU support" ++#endif ++#ifdef WITH_NVIDIA_SM80_GPU_KERNEL ++ print *,"CUDA sm_80 GPU support" ++#endif ++#ifdef WITH_INTEL_GPU_KERNEL ++ print *,"INTEL GPU support" ++#endif ++#ifdef WITH_AMD_GPU_KERNEL ++ print *,"AMD GPU support" ++#endif ++ print *," " ++#ifdef REALCASE ++ ++#ifdef HAVE_AVX2 ++ ++#ifdef WITH_REAL_AVX_BLOCK2_KERNEL ++ print *,"AVX2 optimized kernel (2 blocking) for real matrices" ++#endif ++#ifdef WITH_REAL_AVX_BLOCK4_KERNEL ++ print *,"AVX2 optimized kernel (4 blocking) for real matrices" ++#endif ++#ifdef WITH_REAL_AVX_BLOCK6_KERNEL ++ print *,"AVX2 optimized kernel (6 blocking) for real matrices" ++#endif ++ ++#else /* no HAVE_AVX2 */ ++ ++#ifdef HAVE_AVX ++ ++#ifdef WITH_REAL_AVX_BLOCK2_KERNEL ++ print *,"AVX optimized kernel (2 blocking) for real matrices" ++#endif ++#ifdef WITH_REAL_AVX_BLOCK4_KERNEL ++ print *,"AVX optimized kernel (4 blocking) for real matrices" ++#endif ++#ifdef WITH_REAL_AVX_BLOCK6_KERNEL ++ print *,"AVX optimized kernel (6 blocking) for real matrices" ++#endif ++ ++#endif ++ ++#endif /* HAVE_AVX2 */ ++ ++ ++#ifdef WITH_REAL_GENERIC_KERNEL ++ print *,"GENERIC kernel for real matrices" ++#endif ++#ifdef WITH_REAL_GENERIC_SIMPLE_KERNEL ++ print *,"GENERIC SIMPLE kernel for real matrices" ++#endif ++#ifdef WITH_REAL_SSE_ASSEMBLY_KERNEL ++ print *,"SSE ASSEMBLER kernel for real matrices" ++#endif ++#ifdef WITH_REAL_BGP_KERNEL ++ print *,"BGP kernel for real matrices" ++#endif ++#ifdef WITH_REAL_BGQ_KERNEL ++ print *,"BGQ kernel for real matrices" ++#endif ++ ++#endif /* DATATYPE == REAL */ ++ ++#ifdef COMPLEXCASE ++ ++#ifdef HAVE_AVX2 ++ ++#ifdef WITH_COMPLEX_AVX_BLOCK2_KERNEL ++ print *,"AVX2 optimized kernel (2 blocking) for complex matrices" ++#endif ++#ifdef WITH_COMPLEX_AVX_BLOCK1_KERNEL ++ print *,"AVX2 optimized kernel (1 blocking) for complex matrices" ++#endif ++ ++#else /* no HAVE_AVX2 */ ++ ++#ifdef HAVE_AVX ++ ++#ifdef WITH_COMPLEX_AVX_BLOCK2_KERNEL ++ print *,"AVX optimized kernel (2 blocking) for complex matrices" ++#endif ++#ifdef WITH_COMPLEX_AVX_BLOCK1_KERNEL ++ print *,"AVX optimized kernel (1 blocking) for complex matrices" ++#endif ++ ++#endif ++ ++#endif /* HAVE_AVX2 */ ++ ++ ++#ifdef WITH_COMPLEX_GENERIC_KERNEL ++ print *,"GENERIC kernel for complex matrices" ++#endif ++#ifdef WITH_COMPLEX_GENERIC_SIMPLE_KERNEL ++ print *,"GENERIC SIMPLE kernel for complex matrices" ++#endif ++#ifdef WITH_COMPLEX_SSE_ASSEMBLY_KERNEL ++ print *,"SSE ASSEMBLER kernel for complex matrices" ++#endif ++ ++#endif /* DATATYPE == COMPLEX */ ++ ++ endif ++#endif /* ELPA1 */ ++ ++ if (write_to_file%eigenvectors) then ++ if (myid .eq. 0) print *,"Writing Eigenvectors to files" ++ endif ++ ++ if (write_to_file%eigenvalues) then ++ if (myid .eq. 0) print *,"Writing Eigenvalues to files" ++ endif ++ ++ +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_hybrid elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_hybrid +--- elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_hybrid 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_hybrid 2022-01-28 09:55:45.556223000 +0100 +@@ -0,0 +1,38 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -qopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_MODULES) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa ++# GCC ++# F90 = mpif90 -O3 -fopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_MODULES) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa ++LIBS = -L$(ELPA_LIB) -lelpatest_openmp -lelpa_openmp $(SCALAPACK_LIB) $(MKL) ++# CC = mpicc -qopenmp -O3 ++# GCC ++# CC = mpicc -fopenmp -O3 ++ ++all: test_real_1stage_omp test_real_2stage_all_kernels_omp test_autotune_omp test_multiple_objs_omp test_split_comm_omp test_skewsymmetric_omp ++ ++test_real_1stage_omp: test.F90 ++ /usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP)/elpa -o test_real_1stage_omp.F90 test.F90 ++ $(F90) -o $@ test_real_1stage_omp.F90 $(LIBS) ++ ++test_real_2stage_all_kernels_omp: test.F90 ++ /usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -DWITH_MPI -I$(ELPA_INCLUDE_OPENMP)/elpa -o test_real_2stage_all_kernels_omp.F90 test.F90 ++ $(F90) -o $@ test_real_2stage_all_kernels_omp.F90 $(LIBS) ++ ++test_autotune_omp: test_autotune.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_autotune.F90 $(LIBS) ++ ++test_multiple_objs_omp: test_multiple_objs.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_multiple_objs.F90 $(LIBS) ++ ++test_split_comm_omp: test_split_comm.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_split_comm.F90 $(LIBS) ++ ++test_skewsymmetric_omp: test_skewsymmetric.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DWITH_OPENMP_TRADITIONAL -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE_OPENMP)/elpa -o $@ test_skewsymmetric.F90 $(LIBS) +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure +--- elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure 2022-01-28 09:54:41.176236000 +0100 +@@ -0,0 +1,34 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) ++# CC = mpicc -O3 ++ ++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs test_split_comm test_skewsymmetric ++ ++test_real_1stage: test.F90 ++ /usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_1stage.F90 test.F90 ++ $(F90) -o $@ test_real_1stage.F90 $(LIBS) ++ ++test_real_2stage_all_kernels: test.F90 ++ /usr/bin/cpp -P -DTEST_GPU=0 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_2stage_all_kernels.F90 test.F90 ++ $(F90) -o $@ test_real_2stage_all_kernels.F90 $(LIBS) ++ ++test_autotune: test_autotune.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_autotune.F90 $(LIBS) ++ ++test_multiple_objs: test_multiple_objs.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_multiple_objs.F90 $(LIBS) ++ ++test_split_comm: test_split_comm.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_split_comm.F90 $(LIBS) ++ ++test_skewsymmetric: test_skewsymmetric.F90 ++ $(F90) -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_skewsymmetric.F90 $(LIBS) +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure_cuda elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure_cuda +--- elpa-new_release_2021.11.001/examples/Fortran/Makefile_examples_pure_cuda 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/Makefile_examples_pure_cuda 2022-01-28 09:54:52.690358000 +0100 +@@ -0,0 +1,34 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) -lcudart ++# CC = mpicc -O3 ++ ++all: test_real_1stage test_real_2stage_all_kernels test_autotune test_multiple_objs test_split_comm test_skewsymmetric ++ ++test_real_1stage: test.F90 ++ /usr/bin/cpp -P -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_1STAGE -DTEST_EIGENVECTORS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_1stage.F90 test.F90 ++ $(F90) -o $@ test_real_1stage.F90 $(LIBS) ++ ++test_real_2stage_all_kernels: test.F90 ++ /usr/bin/cpp -P -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DTEST_SOLVER_2STAGE -DTEST_EIGENVECTORS -DTEST_ALL_KERNELS -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o test_real_2stage_all_kernels.F90 test.F90 ++ $(F90) -o $@ test_real_2stage_all_kernels.F90 $(LIBS) ++ ++test_autotune: test_autotune.F90 ++ $(F90) -DTEST_REAL -DTEST_NVIDIA_GPU=1 -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_autotune.F90 $(LIBS) ++ ++test_multiple_objs: test_multiple_objs.F90 ++ $(F90) -DTEST_REAL -DTEST_NVIDIA_GPU=1 -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_multiple_objs.F90 $(LIBS) ++ ++test_split_comm: test_split_comm.F90 ++ $(F90) -DTEST_NVIDIA_GPU=1 -DTEST_REAL -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_split_comm.F90 $(LIBS) ++ ++test_skewsymmetric: test_skewsymmetric.F90 ++ $(F90) -DTEST_REAL -DTEST_NVIDIA_GPU=1 -DTEST_DOUBLE -DWITH_MPI -DCURRENT_API_VERSION=20211125 -I$(ELPA_INCLUDE)/elpa -o $@ test_skewsymmetric.F90 $(LIBS) +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_autotune.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_autotune.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/test_autotune.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_autotune.F90 2022-01-28 18:31:05.305617544 +0100 +@@ -0,0 +1,345 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++! Define one of TEST_REAL or TEST_COMPLEX ++! Define one of TEST_SINGLE or TEST_DOUBLE ++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE ++! Define TEST_NVIDIA_GPU \in [0, 1] ++! Define TEST_INTEL_GPU \in [0, 1] ++! Define TEST_AMD_GPU \in [0, 1] ++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel] ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++error: define exactly one of TEST_REAL or TEST_COMPLEX ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++error: define exactly one of TEST_SINGLE or TEST_DOUBLE ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE real(kind=C_FLOAT) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_FLOAT) ++# else ++# define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX) ++# endif ++#else ++# define EV_TYPE real(kind=C_DOUBLE) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_DOUBLE) ++# else ++# define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX) ++# endif ++#endif ++ ++ ++#ifdef TEST_REAL ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL ++#else ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++ ++ ++#define TEST_GPU 0 ++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) ++#undef TEST_GPU ++#define TEST_GPU 1 ++#endif ++ ++ ++#include "assert.h" ++ ++program test ++ use elpa ++ ++ !use test_util ++ use test_setup_mpi ++ use test_prepare_matrix ++ use test_read_input_parameters ++ use test_blacs_infrastructure ++ use test_check_correctness ++ use test_analytic ++ use iso_fortran_env ++ ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ implicit none ++ ++ ! matrix dimensions ++ TEST_INT_TYPE :: na, nev, nblk ++ ++ ! mpi ++ TEST_INT_TYPE :: myid, nprocs ++ TEST_INT_TYPE :: na_cols, na_rows ! local matrix size ++ TEST_INT_TYPE :: np_cols, np_rows ! number of MPI processes per column/row ++ TEST_INT_TYPE :: my_prow, my_pcol ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1) ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ ! blacs ++ character(len=1) :: layout ++ TEST_INT_TYPE :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ ! The Matrix ++ MATRIX_TYPE, allocatable :: a(:,:), as(:,:) ++ ! eigenvectors ++ MATRIX_TYPE, allocatable :: z(:,:) ++ ! eigenvalues ++ EV_TYPE, allocatable :: ev(:) ++ ++ TEST_INT_TYPE :: status ++ integer(kind=c_int) :: error_elpa ++ ++ type(output_t) :: write_to_file ++ class(elpa_t), pointer :: e ++ class(elpa_autotune_t), pointer :: tune_state ++ ++ TEST_INT_TYPE :: iter ++ character(len=5) :: iter_string ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++! call setup_mpi(myid, nprocs) ++ call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr) ++ call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr) ++ call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr) ++#ifdef HAVE_REDIRECT ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++ call redirect_stdout(myid) ++#endif ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ layout = 'C' ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ np_rows = nprocs/np_cols ++ assert(nprocs == np_rows * np_cols) ++ ++ if (myid == 0) then ++ print '((a,i0))', 'Matrix size: ', na ++ print '((a,i0))', 'Num eigenvectors: ', nev ++ print '((a,i0))', 'Blocksize: ', nblk ++#ifdef WITH_MPI ++ print '((a,i0))', 'Num MPI proc: ', nprocs ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print '(a)', 'Process layout: ' // layout ++#endif ++ print *,'' ++ endif ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, layout, & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(ev(na)) ++ ++ a(:,:) = 0.0 ++ z(:,:) = 0.0 ++ ev(:) = 0.0 ++ ++ call prepare_matrix_analytic(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol, print_times=.false.) ++ as(:,:) = a(:,:) ++ ++ e => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ if (layout .eq. 'C') then ++ call e%set("matrix_order",COLUMN_MAJOR_ORDER,error_elpa) ++ else ++ call e%set("matrix_order",ROW_MAJOR_ORDER,error_elpa) ++ endif ++ ++#ifdef WITH_MPI ++ call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ call e%set("timings",1, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%set("debug",1, error_elpa) ++ assert_elpa_ok(error_elpa) ++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0) ++ call e%set("nvidia-gpu", 0, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++#if TEST_AMD_GPU == 1 ++ call e%set("amd-gpu", 0, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++#if TEST_INTEL_GPU == 1 ++ call e%set("intel-gpu", 0, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ !call e%set("max_stored_rows", 15, error_elpa) ++ ++ !call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa) ++ ++ assert_elpa_ok(e%setup()) ++ ++ if (myid == 0) print *, "" ++ ++ ! if you want to use the new autotuning implentation ++ !call e%autotune_set_api_version(20211125, error_elpa) ++ !assert_elpa_ok(error_elpa) ++ ! if you want to use the old one, either do not set autotune_set_api_version ++ ! or set autotune_set_api_version to a supported api version < 20211125 ++ tune_state => e%autotune_setup(ELPA_AUTOTUNE_MEDIUM, AUTOTUNE_DOMAIN, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ iter=0 ++ do while (e%autotune_step(tune_state, error_elpa)) ++ assert_elpa_ok(error_elpa) ++ iter=iter+1 ++ write(iter_string,'(I5.5)') iter ++ !call e%print_settings() ++ !call e%store_settings("saved_parameters_"//trim(iter_string)//".txt") ++ call e%timer_start("eigenvectors: iteration "//trim(iter_string)) ++ call e%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%timer_stop("eigenvectors: iteration "//trim(iter_string)) ++ ++ assert_elpa_ok(error_elpa) ++ if (myid .eq. 0) then ++ print *, "" ++ call e%print_times("eigenvectors: iteration "//trim(iter_string)) ++ endif ++ status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, & ++ .true., .true., print_times=.false.) ++ a(:,:) = as(:,:) ++ call e%autotune_print_state(tune_state) ++ call e%autotune_save_state(tune_state, "saved_state_"//trim(iter_string)//".txt") ++ end do ++ ++ !! set and print the autotuned-settings ++ call e%autotune_set_best(tune_state, error_elpa) ++ assert_elpa_ok(error_elpa) ++ if (myid .eq. 0) then ++ flush(output_unit) ++ print *, "The best combination found by the autotuning:" ++ call e%autotune_print_best(tune_state, error_elpa) ++ assert_elpa_ok(error_elpa) ++ endif ++ ! de-allocate autotune object ++ call elpa_autotune_deallocate(tune_state, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ if (myid .eq. 0) then ++ print *, "Running once more time with the best found setting..." ++ endif ++ call e%timer_start("eigenvectors: best setting") ++ call e%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%timer_stop("eigenvectors: best setting") ++ assert_elpa_ok(error_elpa) ++ if (myid .eq. 0) then ++ ! print *, "" ++ call e%print_times("eigenvectors: best setting") ++ endif ++ status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, & ++ .true., .true., print_times=.false.) ++ ++ call elpa_deallocate(e,error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ deallocate(a) ++ deallocate(as) ++ deallocate(z) ++ deallocate(ev) ++ ++ call elpa_uninit(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ ++ call exit(status) ++ ++end program +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/test.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test.F90 2022-01-28 12:00:32.452129948 +0100 +@@ -0,0 +1,1207 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++! Define one of TEST_REAL or TEST_COMPLEX ++! Define one of TEST_SINGLE or TEST_DOUBLE ++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE ++! Define TEST_NVIDIA_GPU \in [0, 1] ++! Define TEST_INTEL_GPU \in [0, 1] ++! Define TEST_AMD_GPU \in [0, 1] ++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel] ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++error: define exactly one of TEST_REAL or TEST_COMPLEX ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++error: define exactly one of TEST_SINGLE or TEST_DOUBLE ++#endif ++ ++#if !(defined(TEST_SOLVER_1STAGE) ^ defined(TEST_SOLVER_2STAGE) ^ defined(TEST_SCALAPACK_ALL) ^ defined(TEST_SCALAPACK_PART)) ++error: define exactly one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE or TEST_SCALAPACK_ALL or TEST_SCALAPACK_PART ++#endif ++ ++#ifdef TEST_SOLVER_1STAGE ++#ifdef TEST_ALL_KERNELS ++error: TEST_ALL_KERNELS cannot be defined for TEST_SOLVER_1STAGE ++#endif ++#ifdef TEST_KERNEL ++error: TEST_KERNEL cannot be defined for TEST_SOLVER_1STAGE ++#endif ++#endif ++ ++#ifdef TEST_SOLVER_2STAGE ++#if !(defined(TEST_KERNEL) ^ defined(TEST_ALL_KERNELS)) ++error: define either TEST_ALL_KERNELS or a valid TEST_KERNEL ++#endif ++#endif ++ ++#ifdef TEST_GENERALIZED_DECOMP_EIGENPROBLEM ++#define TEST_GENERALIZED_EIGENPROBLEM ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE real(kind=C_FLOAT) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_FLOAT) ++# else ++# define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX) ++# endif ++#else ++# define EV_TYPE real(kind=C_DOUBLE) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_DOUBLE) ++# else ++# define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX) ++# endif ++#endif ++ ++#ifdef TEST_REAL ++#define KERNEL_KEY "real_kernel" ++#endif ++#ifdef TEST_COMPLEX ++#define KERNEL_KEY "complex_kernel" ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++#define TEST_GPU 0 ++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1) ++#undef TEST_GPU ++#define TEST_GPU 1 ++#endif ++ ++#include "assert.h" ++ ++program test ++ use elpa ++ !use test_util ++ use test_setup_mpi ++ use test_prepare_matrix ++ use test_read_input_parameters ++ use test_blacs_infrastructure ++ use test_check_correctness ++ use test_analytic ++#ifdef WITH_SCALAPACK_TESTS ++ use test_scalapack ++#endif ++ ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++#ifdef WITH_OPENMP_TRADITIONAL ++ use omp_lib ++#endif ++ use precision_for_tests ++ ++#if TEST_GPU_DEVICE_POINTER_API == 1 ++ use test_gpu ++#if TEST_NVIDIA_GPU == 1 ++ use test_cuda_functions ++#endif ++#if TEST_AMD_GPU == 1 ++ use test_hip_functions ++#endif ++ ++#endif /* TEST_GPU_DEVICE_POINTER_API */ ++ ++ implicit none ++ ++ ! matrix dimensions ++ TEST_INT_TYPE :: na, nev, nblk ++ ++ ! mpi ++ TEST_INT_TYPE :: myid, nprocs ++ TEST_INT_MPI_TYPE :: myidMPI, nprocsMPI ++ TEST_INT_TYPE :: na_cols, na_rows ! local matrix size ++ TEST_INT_TYPE :: np_cols, np_rows ! number of MPI processes per column/row ++ TEST_INT_TYPE :: my_prow, my_pcol ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1) ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ ! blacs ++ TEST_INT_TYPE :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ ! The Matrix ++ MATRIX_TYPE, allocatable, target :: a(:,:) ++ MATRIX_TYPE, allocatable :: as(:,:) ++#if defined(TEST_HERMITIAN_MULTIPLY) ++ MATRIX_TYPE, allocatable :: b(:,:), c(:,:) ++#endif ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) ++ MATRIX_TYPE, allocatable :: b(:,:), bs(:,:) ++#endif ++ ! eigenvectors ++ MATRIX_TYPE, allocatable, target :: z(:,:) ++ ! eigenvalues ++ EV_TYPE, allocatable, target :: ev(:) ++ ++#if TEST_GPU_DEVICE_POINTER_API == 1 ++ type(c_ptr) :: a_dev, q_dev, ev_dev ++#endif ++ ++ ++ logical :: check_all_evals, skip_check_correctness ++ ++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK) ++ EV_TYPE, allocatable :: d(:), sd(:), ds(:), sds(:) ++ EV_TYPE :: diagonalELement, subdiagonalElement ++#endif ++ ++ TEST_INT_TYPE :: status ++ integer(kind=c_int) :: error_elpa ++ ++ type(output_t) :: write_to_file ++ class(elpa_t), pointer :: e ++#ifdef TEST_ALL_KERNELS ++ TEST_INT_TYPE :: i ++#endif ++#ifdef TEST_ALL_LAYOUTS ++ TEST_INT_TYPE :: i_layout ++#ifdef BUILD_FUGAKU ++ character(len=1) :: layouts(2) ++#else ++ character(len=1), parameter :: layouts(2) = [ 'C', 'R' ] ++#endif ++#endif ++ integer(kind=c_int):: kernel ++ character(len=1) :: layout ++ logical :: do_test_numeric_residual, do_test_numeric_residual_generalized, & ++ do_test_analytic_eigenvalues, & ++ do_test_analytic_eigenvalues_eigenvectors, & ++ do_test_frank_eigenvalues, & ++ do_test_toeplitz_eigenvalues, do_test_cholesky, & ++ do_test_hermitian_multiply ++ logical :: ignoreError, success, successGPU ++#ifdef WITH_OPENMP_TRADITIONAL ++ TEST_INT_TYPE :: max_threads, threads_caller ++#endif ++#if TEST_GPU_SET_ID == 1 ++ TEST_INT_TYPE :: gpuID ++#endif ++#ifdef SPLIT_COMM_MYSELF ++ TEST_INT_MPI_TYPE :: mpi_comm_rows, mpi_comm_cols, mpi_string_length, mpierr2 ++ character(len=MPI_MAX_ERROR_STRING) :: mpierr_string ++#endif ++ ++ ++#if TEST_GPU_DEVICE_POINTER_API == 1 ++#if TEST_REAL == 1 ++#if TEST_DOUBLE ++ integer(kind=c_intptr_t), parameter :: size_of_datatype = size_of_double_real ++#endif ++#if TEST_SINGLE ++ integer(kind=c_intptr_t), parameter :: size_of_datatype = size_of_single_real ++#endif ++#endif /* TEST_REAL == 1 */ ++ ++#if TEST_COMPLEX == 1 ++#if TEST_DOUBLE ++ integer(kind=c_intptr_t), parameter :: size_of_datatype = size_of_double_complex ++#endif ++#if TEST_SINGLE ++ integer(kind=c_intptr_t), parameter :: size_of_datatype = size_of_single_complex ++#endif ++#endif ++#endif /* TEST_GPU_DEVICE_POINTER_API == 1 */ ++ ++#ifdef TEST_ALL_LAYOUTS ++#ifdef BUILD_FUGAKU ++ layouts(1) = 'C' ++ layouts(2) = 'R' ++#endif ++#endif ++ ++ ignoreError = .false. ++ ++ call read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness) ++! call setup_mpi(myid, nprocs) ++ call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr) ++ call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr) ++ call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr) ++ ++#ifdef HAVE_REDIRECT ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++ call redirect_stdout(myid) ++#endif ++#endif ++ ++ check_all_evals = .true. ++ ++ ++ do_test_numeric_residual = .false. ++ do_test_numeric_residual_generalized = .false. ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++ do_test_frank_eigenvalues = .false. ++ do_test_toeplitz_eigenvalues = .false. ++ ++ do_test_cholesky = .false. ++#if defined(TEST_CHOLESKY) ++ do_test_cholesky = .true. ++#endif ++ do_test_hermitian_multiply = .false. ++#if defined(TEST_HERMITIAN_MULTIPLY) ++ do_test_hermitian_multiply = .true. ++#endif ++ ++ status = 0 ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ if (myid == 0) then ++ print '((a,i0))', 'Program ' ++ // TEST_CASE ++ print *, "" ++ endif ++ ++#ifdef TEST_ALL_LAYOUTS ++ do i_layout = 1, size(layouts) ! layouts ++ layout = layouts(i_layout) ++ do np_cols = 1, nprocs ! factors ++ if (mod(nprocs,np_cols) /= 0 ) then ++ cycle ++ endif ++#else ++ layout = 'C' ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++#endif ++ ++ np_rows = nprocs/np_cols ++ assert(nprocs == np_rows * np_cols) ++ ++ if (myid == 0) then ++ print '((a,i0))', 'Matrix size: ', na ++ print '((a,i0))', 'Num eigenvectors: ', nev ++ print '((a,i0))', 'Blocksize: ', nblk ++#ifdef WITH_MPI ++ print '((a,i0))', 'Num MPI proc: ', nprocs ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print '(a)', 'Process layout: ' // layout ++#endif ++ print *,'' ++ endif ++ ++#if TEST_QR_DECOMPOSITION == 1 ++ ++#if (TEST_NVIDIA_GPU == 1) || (TEST_INTEL_GPU == 1) || (TEST_AMD_GPU == 1) ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ stop 77 ++#endif /* TEST_NVIDIA_GPU || TEST_INTEL_GPU */ ++ if (nblk .lt. 64) then ++ if (myid .eq. 0) then ++ print *,"At the moment QR decomposition need blocksize of at least 64" ++ endif ++ if ((na .lt. 64) .and. (myid .eq. 0)) then ++ print *,"This is why the matrix size must also be at least 64 or only 1 MPI task can be used" ++ endif ++ ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ stop 77 ++ endif ++#endif /* TEST_QR_DECOMPOSITION */ ++ ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, & ++ np_cols, layout, my_blacs_ctxt, my_prow, & ++ my_pcol) ++ ++ ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) && defined(TEST_ALL_LAYOUTS) ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ stop 77 ++#endif ++ ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, & ++ np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(ev(na)) ++ ++#ifdef TEST_HERMITIAN_MULTIPLY ++ allocate(b (na_rows,na_cols)) ++ allocate(c (na_rows,na_cols)) ++#endif ++ ++#ifdef TEST_GENERALIZED_EIGENPROBLEM ++ allocate(b (na_rows,na_cols)) ++ allocate(bs (na_rows,na_cols)) ++#endif ++ ++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK) ++ allocate(d (na), ds(na)) ++ allocate(sd (na), sds(na)) ++#endif ++ ++ a(:,:) = 0.0 ++ z(:,:) = 0.0 ++ ev(:) = 0.0 ++ ++#if defined(TEST_MATRIX_RANDOM) && !defined(TEST_SOLVE_TRIDIAGONAL) && !defined(TEST_CHOLESKY) && !defined(TEST_EIGENVALUES) ++ ! the random matrix can be used in allmost all tests; but for some no ++ ! correctness checks have been implemented; do not allow these ++ ! combinations ++ ! RANDOM + TEST_SOLVE_TRIDIAGONAL: we need a TOEPLITZ MATRIX ++ ! RANDOM + TEST_CHOLESKY: wee need SPD matrix ++ ! RANDOM + TEST_EIGENVALUES: no correctness check known ++ ++ ! We also have to take care of special case in TEST_EIGENVECTORS ++#if !defined(TEST_EIGENVECTORS) ++ call prepare_matrix_random(na, myid, sc_desc, a, z, as) ++#else /* TEST_EIGENVECTORS */ ++ if (nev .ge. 1) then ++ call prepare_matrix_random(na, myid, sc_desc, a, z, as) ++#ifndef TEST_HERMITIAN_MULTIPLY ++ do_test_numeric_residual = .true. ++#endif ++ else ++ if (myid .eq. 0) then ++ print *,"At the moment with the random matrix you need nev >=1" ++ endif ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ stop 77 ++ endif ++#endif /* TEST_EIGENVECTORS */ ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++ do_test_frank_eigenvalues = .false. ++ do_test_toeplitz_eigenvalues = .false. ++#endif /* (TEST_MATRIX_RANDOM) */ ++ ++#if defined(TEST_MATRIX_RANDOM) && defined(TEST_CHOLESKY) ++ call prepare_matrix_random_spd(na, myid, sc_desc, a, z, as, & ++ nblk, np_rows, np_cols, my_prow, my_pcol) ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++ do_test_frank_eigenvalues = .false. ++ do_test_toeplitz_eigenvalues = .false. ++#endif /* TEST_MATRIX_RANDOM and TEST_CHOLESKY */ ++ ++#if defined(TEST_MATRIX_RANDOM) && defined(TEST_GENERALIZED_EIGENPROBLEM) ++ ! call prepare_matrix_random(na, myid, sc_desc, a, z, as) ++ call prepare_matrix_random_spd(na, myid, sc_desc, b, z, bs, & ++ nblk, np_rows, np_cols, my_prow, my_pcol) ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++ do_test_frank_eigenvalues = .false. ++ do_test_toeplitz_eigenvalues = .false. ++ do_test_numeric_residual = .false. ++ do_test_numeric_residual_generalized = .true. ++#endif /* TEST_MATRIX_RANDOM and TEST_GENERALIZED_EIGENPROBLEM */ ++ ++#if defined(TEST_MATRIX_RANDOM) && (defined(TEST_SOLVE_TRIDIAGONAL) || defined(TEST_EIGENVALUES)) ++#error "Random matrix is not allowed in this configuration" ++#endif ++ ++#if defined(TEST_MATRIX_ANALYTIC) && !defined(TEST_SOLVE_TRIDIAGONAL) && !defined(TEST_CHOLESKY) ++ ! the analytic matrix can be used in allmost all tests; but for some no ++ ! correctness checks have been implemented; do not allow these ++ ! combinations ++ ! ANALYTIC + TEST_SOLVE_TRIDIAGONAL: we need a TOEPLITZ MATRIX ++ ! ANALTIC + TEST_CHOLESKY: no correctness check yet implemented ++ ++ call prepare_matrix_analytic(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ as(:,:) = a ++ ++ do_test_numeric_residual = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++#ifndef TEST_HERMITIAN_MULTIPLY ++ do_test_analytic_eigenvalues = .true. ++#endif ++#if defined(TEST_EIGENVECTORS) ++ if (nev .ge. 1) then ++ do_test_analytic_eigenvalues_eigenvectors = .true. ++ do_test_analytic_eigenvalues = .false. ++ else ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++ endif ++#endif ++ do_test_frank_eigenvalues = .false. ++ do_test_toeplitz_eigenvalues = .false. ++#endif /* TEST_MATRIX_ANALYTIC */ ++#if defined(TEST_MATRIX_ANALYTIC) && (defined(TEST_SOLVE_TRIDIAGONAL) || defined(TEST_CHOLESKY)) ++#error "Analytic matrix is not allowd in this configuration" ++#endif ++ ++#if defined(TEST_MATRIX_TOEPLITZ) ++ ! The Toeplitz matrix works in each test ++#ifdef TEST_SINGLE ++ diagonalElement = 0.45_c_float ++ subdiagonalElement = 0.78_c_float ++#else ++ diagonalElement = 0.45_c_double ++ subdiagonalElement = 0.78_c_double ++#endif ++ ++! actually we test cholesky for diagonal matrix only ++#if defined(TEST_CHOLESKY) ++#ifdef TEST_SINGLE ++ diagonalElement = (2.546_c_float, 0.0_c_float) ++ subdiagonalElement = (0.0_c_float, 0.0_c_float) ++#else ++ diagonalElement = (2.546_c_double, 0.0_c_double) ++ subdiagonalElement = (0.0_c_double, 0.0_c_double) ++#endif ++#endif /* TEST_CHOLESKY */ ++ ++ ! check first whether to abort ++ if (na < 10) then ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ stop 77 ++ endif ++ call prepare_matrix_toeplitz(na, diagonalElement, subdiagonalElement, & ++ d, sd, ds, sds, a, as, nblk, np_rows, & ++ np_cols, my_prow, my_pcol) ++ ++ ++ do_test_numeric_residual = .false. ++#if defined(TEST_EIGENVECTORS) ++ if (nev .ge. 1) then ++ do_test_numeric_residual = .true. ++ else ++ do_test_numeric_residual = .false. ++ endif ++#endif ++ ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++ do_test_frank_eigenvalues = .false. ++#if defined(TEST_CHOLESKY) ++ do_test_toeplitz_eigenvalues = .false. ++#else ++ do_test_toeplitz_eigenvalues = .true. ++#endif ++ ++#endif /* TEST_MATRIX_TOEPLITZ */ ++ ++ ++#if defined(TEST_MATRIX_FRANK) && !defined(TEST_SOLVE_TRIDIAGONAL) && !defined(TEST_CHOLESKY) ++ ! the random matrix can be used in allmost all tests; but for some no ++ ! correctness checks have been implemented; do not allow these ++ ! combinations ++ ! FRANK + TEST_SOLVE_TRIDIAGONAL: we need a TOEPLITZ MATRIX ++ ! FRANK + TEST_CHOLESKY: no correctness check yet implemented ++ ++ ! We also have to take care of special case in TEST_EIGENVECTORS ++#if !defined(TEST_EIGENVECTORS) ++ call prepare_matrix_frank(na, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol) ++ ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++#ifndef TEST_HERMITIAN_MULTIPLY ++ do_test_frank_eigenvalues = .true. ++#endif ++ do_test_toeplitz_eigenvalues = .false. ++ ++#else /* TEST_EIGENVECTORS */ ++ ++ if (nev .ge. 1) then ++ call prepare_matrix_frank(na, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol) ++ ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++#ifndef TEST_HERMITIAN_MULTIPLY ++ do_test_frank_eigenvalues = .true. ++#endif ++ do_test_toeplitz_eigenvalues = .false. ++ do_test_numeric_residual = .false. ++ else ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++#ifndef TEST_HERMITIAN_MULTIPLY ++ do_test_frank_eigenvalues = .true. ++#endif ++ do_test_toeplitz_eigenvalues = .false. ++ do_test_numeric_residual = .false. ++ ++ endif ++ ++#endif /* TEST_EIGENVECTORS */ ++#endif /* (TEST_MATRIX_FRANK) */ ++#if defined(TEST_MATRIX_FRANK) && (defined(TEST_SOLVE_TRIDIAGONAL) || defined(TEST_CHOLESKY)) ++#error "FRANK matrix is not allowed in this configuration" ++#endif ++ ++ ++#ifdef TEST_HERMITIAN_MULTIPLY ++#ifdef TEST_REAL ++ ++#ifdef TEST_DOUBLE ++ b(:,:) = 2.0_c_double * a(:,:) ++ c(:,:) = 0.0_c_double ++#else ++ b(:,:) = 2.0_c_float * a(:,:) ++ c(:,:) = 0.0_c_float ++#endif ++ ++#endif /* TEST_REAL */ ++ ++#ifdef TEST_COMPLEX ++ ++#ifdef TEST_DOUBLE ++ b(:,:) = 2.0_c_double * a(:,:) ++ c(:,:) = (0.0_c_double, 0.0_c_double) ++#else ++ b(:,:) = 2.0_c_float * a(:,:) ++ c(:,:) = (0.0_c_float, 0.0_c_float) ++#endif ++ ++#endif /* TEST_COMPLEX */ ++ ++#endif /* TEST_HERMITIAN_MULTIPLY */ ++ ++! if the test is used for (repeated) performacne tests, one might want to skip the checking ++! of the results, which might be time-consuming and not necessary. ++ if(skip_check_correctness) then ++ do_test_numeric_residual = .false. ++ do_test_numeric_residual_generalized = .false. ++ do_test_analytic_eigenvalues = .false. ++ do_test_analytic_eigenvalues_eigenvectors = .false. ++ do_test_frank_eigenvalues = .false. ++ do_test_toeplitz_eigenvalues = .false. ++ do_test_cholesky = .false. ++ endif ++ ++ ++#ifdef WITH_OPENMP_TRADITIONAL ++ threads_caller = omp_get_max_threads() ++ if (myid == 0) then ++ print *,"The calling program uses ",threads_caller," threads" ++ endif ++#endif ++ ++ e => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ if (layout .eq. 'C') then ++ call e%set("matrix_order",COLUMN_MAJOR_ORDER,error_elpa) ++ else ++ call e%set("matrix_order",ROW_MAJOR_ORDER,error_elpa) ++ endif ++ ++#ifdef WITH_MPI ++#ifdef SPLIT_COMM_MYSELF ++ call mpi_comm_split(MPI_COMM_WORLD, int(my_pcol,kind=MPI_KIND), int(my_prow,kind=MPI_KIND), & ++ mpi_comm_rows, mpierr) ++ if (mpierr .ne. MPI_SUCCESS) then ++ call MPI_ERROR_STRING(mpierr, mpierr_string, mpi_string_length, mpierr2) ++ write(error_unit,*) "MPI ERROR occured during mpi_comm_split for row communicator: ", trim(mpierr_string) ++ stop 1 ++ endif ++ ++ call mpi_comm_split(MPI_COMM_WORLD, int(my_prow,kind=MPI_KIND), int(my_pcol,kind=MPI_KIND), & ++ mpi_comm_cols, mpierr) ++ if (mpierr .ne. MPI_SUCCESS) then ++ call MPI_ERROR_STRING(mpierr,mpierr_string, mpi_string_length, mpierr2) ++ write(error_unit,*) "MPI ERROR occured during mpi_comm_split for col communicator: ", trim(mpierr_string) ++ stop 1 ++ endif ++ ++ call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("mpi_comm_rows", int(mpi_comm_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("mpi_comm_cols", int(mpi_comm_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++#else ++ call e%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%set("verbose", 1, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++#endif ++#ifdef TEST_GENERALIZED_EIGENPROBLEM ++ call e%set("blacs_context", int(my_blacs_ctxt,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ call e%set("timings", 1_ik, error_elpa) ++ assert_elpa_ok(e%setup()) ++ ++#ifdef TEST_SOLVER_1STAGE ++ call e%set("solver", ELPA_SOLVER_1STAGE, error_elpa) ++#else ++ call e%set("solver", ELPA_SOLVER_2STAGE, error_elpa) ++#endif ++ assert_elpa_ok(error_elpa) ++ ++#if TEST_NVIDIA_GPU == 1 ++ call e%set("nvidia-gpu", TEST_GPU, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#if TEST_AMD_GPU == 1 ++ call e%set("amd-gpu", TEST_GPU, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#if TEST_INTEL_GPU == 1 ++ call e%set("intel-gpu", TEST_GPU, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#if (TEST_GPU_SET_ID == 1) && (TEST_INTEL_GPU == 0) ++ ! simple test ++ ! Can (and should) fail often ++ !gpuID = mod(myid,2) ++ gpuID = mod(myid,1) ++ call e%set("use_gpu_id", int(gpuID,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#if TEST_GPU_DEVICE_POINTER_API == 1 ++#if defined(TEST_EIGENVECTORS) && defined(TEST_MATRIX_RANDOM) ++ ! create device pointers for a,q, ev copy a to ++#if TEST_NVIDIA_GPU == 1 ++ if (gpu_vendor(NVIDIA_GPU) == NVIDIA_GPU) then ++ call set_gpu_parameters() ++ endif ++#endif ++#if TEST_AMD_GPU == 1 ++ if (gpu_vendor(AMD_GPU) == AMD_GPU) then ++ call set_gpu_parameters() ++ endif ++#endif ++ ++ ! set device ++ success = .true. ++#if TEST_NVIDIA_GPU == 1 ++ success = cuda_setdevice(gpuID) ++#endif ++#if TEST_AMD_GPU == 1 ++ success = cuda_setdevice(gpuID) ++#endif ++ if (.not.(success)) then ++ print *,"Cannot set GPU device. Aborting..." ++ stop ++ endif ++ ++ ! malloc ++ successGPU = gpu_malloc(a_dev, na_rows*na_cols*size_of_datatype) ++ if (.not.(successGPU)) then ++ print *,"Cannot allocate matrix a on GPU! Aborting..." ++ stop ++ endif ++ successGPU = gpu_malloc(q_dev, na_rows*na_cols*size_of_datatype) ++ if (.not.(successGPU)) then ++ print *,"Cannot allocate matrix q on GPU! Aborting..." ++ stop ++ endif ++ successGPU = gpu_malloc(ev_dev, na*size_of_datatype) ++ if (.not.(successGPU)) then ++ print *,"Cannot allocate vector of eigenvalues on GPU! Aborting..." ++ stop ++ endif ++ ++ successGPU = gpu_memcpy(a_dev, c_loc(a), na_rows*na_cols*size_of_datatype, & ++ gpuMemcpyHostToDevice) ++ if (.not.(successGPU)) then ++ print *,"Cannot copy matrix a to GPU! Aborting..." ++ stop ++ endif ++#endif ++#endif /* TEST_GPU_DEVICE_POINTER_API */ ++ ++#if TEST_QR_DECOMPOSITION == 1 ++ call e%set("qr", 1_ik, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#ifdef WITH_OPENMP_TRADITIONAL ++ max_threads=omp_get_max_threads() ++ call e%set("omp_threads", int(max_threads,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ if (myid == 0) print *, "" ++ ++#ifdef TEST_ALL_KERNELS ++ do i = 0, elpa_option_cardinality(KERNEL_KEY) ! kernels ++#if (TEST_NVIDIA_GPU == 0) && (TEST_INTEL_GPU == 0) && (TEST_AMD_GPU == 0) ++ !if (TEST_GPU .eq. 0) then ++ kernel = elpa_option_enumerate(KERNEL_KEY, int(i,kind=c_int)) ++ if (kernel .eq. ELPA_2STAGE_REAL_NVIDIA_GPU) continue ++ if (kernel .eq. ELPA_2STAGE_COMPLEX_NVIDIA_GPU) continue ++ if (kernel .eq. ELPA_2STAGE_REAL_AMD_GPU) continue ++ if (kernel .eq. ELPA_2STAGE_COMPLEX_AMD_GPU) continue ++ if (kernel .eq. ELPA_2STAGE_REAL_INTEL_GPU) continue ++ if (kernel .eq. ELPA_2STAGE_COMPLEX_INTEL_GPU) continue ++ !endif ++#endif ++#endif ++ ++#ifdef TEST_KERNEL ++ kernel = TEST_KERNEL ++#endif ++ ++#ifdef TEST_SOLVER_2STAGE ++#if TEST_NVIDIA_GPU == 1 ++#if defined TEST_REAL ++#if (TEST_NVIDIA_GPU == 1) ++#if WITH_NVIDIA_GPU_SM80_COMPUTE_CAPABILITY == 1 ++ kernel = ELPA_2STAGE_REAL_NVIDIA_SM80_GPU ++#else ++ kernel = ELPA_2STAGE_REAL_NVIDIA_GPU ++#endif ++#endif /* TEST_NVIDIA_GPU */ ++#if (TEST_AMD_GPU == 1) ++ kernel = ELPA_2STAGE_REAL_AMD_GPU ++#endif ++#if (TEST_INTEL_GPU == 1) ++ kernel = ELPA_2STAGE_REAL_INTEL_GPU ++#endif ++#endif /* TEST_REAL */ ++ ++#if defined TEST_COMPLEX ++#if (TEST_NVIDIA_GPU == 1) ++ kernel = ELPA_2STAGE_COMPLEX_NVIDIA_GPU ++#endif ++#if (TEST_AMD_GPU == 1) ++ kernel = ELPA_2STAGE_COMPLEX_AMD_GPU ++#endif ++#if (TEST_INTEL_GPU == 1) ++ kernel = ELPA_2STAGE_COMPLEX_INTEL_GPU ++#endif ++#endif /* TEST_COMPLEX */ ++#endif /* TEST_GPU == 1 */ ++ ++ ++ call e%set(KERNEL_KEY, kernel, error_elpa) ++#ifdef TEST_KERNEL ++ assert_elpa_ok(error_elpa) ++#else ++ if (error_elpa /= ELPA_OK) then ++ cycle ++ endif ++ ! actually used kernel might be different if forced via environment variables ++ call e%get(KERNEL_KEY, kernel, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ if (myid == 0) then ++ print *, elpa_int_value_to_string(KERNEL_KEY, kernel) // " kernel" ++ endif ++#endif ++ ++#if !defined(TEST_ALL_LAYOUTS) ++! print all parameters ++ call e%print_settings(error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#ifdef TEST_ALL_KERNELS ++ call e%timer_start(elpa_int_value_to_string(KERNEL_KEY, kernel)) ++#endif ++ ++ ! The actual solve step ++#if defined(TEST_EIGENVECTORS) ++#if TEST_QR_DECOMPOSITION == 1 ++ call e%timer_start("e%eigenvectors_qr()") ++#else ++ call e%timer_start("e%eigenvectors()") ++#endif ++#ifdef TEST_SCALAPACK_ALL ++ call solve_scalapack_all(na, a, sc_desc, ev, z) ++#elif TEST_SCALAPACK_PART ++ call solve_scalapack_part(na, a, sc_desc, nev, ev, z) ++ check_all_evals = .false. ! scalapack does not compute all eigenvectors ++#else /* TEST_SCALAPACK_PART */ ++#ifdef TEST_EXPLICIT_NAME ++#if defined(TEST_REAL) ++#if defined(TEST_DOUBLE) ++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS) ++ call e%eigenvectors_double(a_dev, ev_dev, q_dev, error_elpa) ++#else ++ call e%eigenvectors_double(a, ev, z, error_elpa) ++#endif ++#endif /* TEST_DOUBLE */ ++#if defined(TEST_SINGLE) ++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS) ++ call e%eigenvectors_float(a_dev, ev_dev, q_dev, error_elpa) ++#else ++ call e%eigenvectors_float(a, ev, z, error_elpa) ++#endif ++#endif /* TEST_SINGLE */ ++#endif /* TEST_REAL */ ++#if defined(TEST_COMPLEX) ++#if defined(TEST_DOUBLE) ++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS) ++ call e%eigenvectors_double_complex(a_dev, ev_dev, q_dev, error_elpa) ++#else ++ call e%eigenvectors_double_complex(a, ev, z, error_elpa) ++#endif ++#endif /* TEST_DOUBLE */ ++#if defined(TEST_SINGLE) ++#if (TEST_GPU_DEVICE_POINTER_API == 1) && defined(TEST_MATRIX_RANDOM) && defined(TEST_EIGENVECTORS) ++ call e%eigenvectors_float_complex(a_dev, ev_dev, q_dev, error_elpa) ++#else ++ call e%eigenvectors_float_complex(a, ev, z, error_elpa) ++#endif ++#endif /* TEST_SINGLE */ ++#endif /* TEST_COMPLEX */ ++#else /* TEST_EXPLICIT_NAME */ ++ call e%eigenvectors(a, ev, z, error_elpa) ++#endif /* TEST_EXPLICIT_NAME */ ++#endif /* TEST_SCALAPACK_PART */ ++#if TEST_QR_DECOMPOSITION == 1 ++ call e%timer_stop("e%eigenvectors_qr()") ++#else ++ call e%timer_stop("e%eigenvectors()") ++#endif ++#endif /* TEST_EIGENVECTORS */ ++ ++#ifdef TEST_EIGENVALUES ++ call e%timer_start("e%eigenvalues()") ++#ifdef TEST_EXPLICIT_NAME ++#if defined(TEST_REAL) ++#if defined(TEST_DOUBLE) ++ call e%eigenvalues_double(a, ev, error_elpa) ++#endif ++#if defined(TEST_SINGLE) ++ call e%eigenvalues_float(a, ev, error_elpa) ++#endif ++#endif /* TEST_REAL */ ++#if defined(TEST_COMPLEX) ++#if defined(TEST_DOUBLE) ++ call e%eigenvalues_double_complex(a, ev, error_elpa) ++#endif ++#if defined(TEST_SINGLE) ++ call e%eigenvalues_float_complex(a, ev, error_elpa) ++#endif ++#endif ++#else /* TEST_EXPLICIT_NAME */ ++ call e%eigenvalues(a, ev, error_elpa) ++#endif /* TEST_EXPLICIT_NAME */ ++ call e%timer_stop("e%eigenvalues()") ++#endif ++ ++#if defined(TEST_SOLVE_TRIDIAGONAL) ++ call e%timer_start("e%solve_tridiagonal()") ++ call e%solve_tridiagonal(d, sd, z, error_elpa) ++ call e%timer_stop("e%solve_tridiagonal()") ++ ev(:) = d(:) ++#endif ++ ++#if defined(TEST_CHOLESKY) ++ call e%timer_start("e%cholesky()") ++ call e%cholesky(a, error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e%timer_stop("e%cholesky()") ++#endif ++ ++#if defined(TEST_HERMITIAN_MULTIPLY) ++ call e%timer_start("e%hermitian_multiply()") ++ call e%hermitian_multiply('F','F', int(na,kind=c_int), a, b, int(na_rows,kind=c_int), & ++ int(na_cols,kind=c_int), c, int(na_rows,kind=c_int), & ++ int(na_cols,kind=c_int), error_elpa) ++ call e%timer_stop("e%hermitian_multiply()") ++#endif ++ ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) ++ call e%timer_start("e%generalized_eigenvectors()") ++#if defined(TEST_GENERALIZED_DECOMP_EIGENPROBLEM) ++ call e%timer_start("is_already_decomposed=.false.") ++#endif ++ call e%generalized_eigenvectors(a, b, ev, z, .false., error_elpa) ++#if defined(TEST_GENERALIZED_DECOMP_EIGENPROBLEM) ++ call e%timer_stop("is_already_decomposed=.false.") ++ a = as ++ call e%timer_start("is_already_decomposed=.true.") ++ call e%generalized_eigenvectors(a, b, ev, z, .true., error_elpa) ++ call e%timer_stop("is_already_decomposed=.true.") ++#endif ++ call e%timer_stop("e%generalized_eigenvectors()") ++#endif ++ ++ assert_elpa_ok(error_elpa) ++ ++#ifdef TEST_ALL_KERNELS ++ call e%timer_stop(elpa_int_value_to_string(KERNEL_KEY, kernel)) ++#endif ++ ++ if (myid .eq. 0) then ++#ifdef TEST_ALL_KERNELS ++ call e%print_times(elpa_int_value_to_string(KERNEL_KEY, kernel)) ++#else /* TEST_ALL_KERNELS */ ++ ++#if defined(TEST_EIGENVECTORS) ++#if TEST_QR_DECOMPOSITION == 1 ++ call e%print_times("e%eigenvectors_qr()") ++#else ++ call e%print_times("e%eigenvectors()") ++#endif ++#endif ++#ifdef TEST_EIGENVALUES ++ call e%print_times("e%eigenvalues()") ++#endif ++#ifdef TEST_SOLVE_TRIDIAGONAL ++ call e%print_times("e%solve_tridiagonal()") ++#endif ++#ifdef TEST_CHOLESKY ++ call e%print_times("e%cholesky()") ++#endif ++#ifdef TEST_HERMITIAN_MULTIPLY ++ call e%print_times("e%hermitian_multiply()") ++#endif ++#ifdef TEST_GENERALIZED_EIGENPROBLEM ++ call e%print_times("e%generalized_eigenvectors()") ++#endif ++#endif /* TEST_ALL_KERNELS */ ++ endif ++ ++ ++ ++ ++#if TEST_GPU_DEVICE_POINTER_API == 1 ++#if defined(TEST_EIGENVECTORS) && defined(TEST_MATRIX_RANDOM) ++ ! copy for testing ++ successGPU = gpu_memcpy(c_loc(z), q_dev, na_rows*na_cols*size_of_datatype, & ++ gpuMemcpyDeviceToHost) ++ if (.not.(successGPU)) then ++ print *,"cannot copy matrix of eigenvectors from GPU to host! Aborting..." ++ stop ++ endif ++ ++ successGPU = gpu_memcpy(c_loc(ev), ev_dev, na*& ++#ifdef TEST_DOUBLE ++ size_of_double_real, & ++#endif ++#ifdef TEST_SINGLE ++ size_of_single_real, & ++#endif ++ gpuMemcpyDeviceToHost) ++ if (.not.(successGPU)) then ++ print *,"cannot copy vector of eigenvalues from GPU to host! Aborting..." ++ stop ++ endif ++ ++ ! and deallocate device pointer ++ successGPU = gpu_free(a_dev) ++ if (.not.(successGPU)) then ++ print *,"cannot free memory of a_dev on GPU. Aborting..." ++ stop ++ endif ++ successGPU = gpu_free(q_dev) ++ if (.not.(successGPU)) then ++ print *,"cannot free memory of q_dev on GPU. Aborting..." ++ stop ++ endif ++ successGPU = gpu_free(ev_dev) ++ if (.not.(successGPU)) then ++ print *,"cannot free memory of ev_dev on GPU. Aborting..." ++ stop ++ endif ++#endif ++#endif ++ ++ ++ if (do_test_analytic_eigenvalues) then ++ status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, & ++ my_prow, my_pcol, check_all_evals, .false.) ++ call check_status(status, myid) ++ endif ++ ++ if (do_test_analytic_eigenvalues_eigenvectors) then ++ status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, & ++ my_prow, my_pcol, check_all_evals, .true.) ++ call check_status(status, myid) ++ endif ++ ++ if(do_test_numeric_residual) then ++ status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, & ++ np_rows,np_cols, my_prow, my_pcol) ++ call check_status(status, myid) ++ endif ++ ++ if (do_test_frank_eigenvalues) then ++ status = check_correctness_eigenvalues_frank(na, ev, z, myid) ++ call check_status(status, myid) ++ endif ++ ++ if (do_test_toeplitz_eigenvalues) then ++#if defined(TEST_EIGENVALUES) || defined(TEST_SOLVE_TRIDIAGONAL) ++ status = check_correctness_eigenvalues_toeplitz(na, diagonalElement, & ++ subdiagonalElement, ev, z, myid) ++ call check_status(status, myid) ++#endif ++ endif ++ ++ if (do_test_cholesky) then ++ status = check_correctness_cholesky(na, a, as, na_rows, sc_desc, myid ) ++ call check_status(status, myid) ++ endif ++ ++#ifdef TEST_HERMITIAN_MULTIPLY ++ if (do_test_hermitian_multiply) then ++ status = check_correctness_hermitian_multiply(na, a, b, c, na_rows, sc_desc, myid ) ++ call check_status(status, myid) ++ endif ++#endif ++ ++#ifdef TEST_GENERALIZED_EIGENPROBLEM ++ if(do_test_numeric_residual_generalized) then ++ status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, & ++ np_cols, my_prow, & ++ my_pcol, bs) ++ call check_status(status, myid) ++ endif ++#endif ++ ++ ++#ifdef WITH_OPENMP_TRADITIONAL ++ if (threads_caller .ne. omp_get_max_threads()) then ++ if (myid .eq. 0) then ++ print *, " ERROR! the number of OpenMP threads has not been restored correctly" ++ endif ++ status = 1 ++ endif ++#endif ++ if (myid == 0) then ++ print *, "" ++ endif ++ ++#ifdef TEST_ALL_KERNELS ++ a(:,:) = as(:,:) ++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK) ++ d = ds ++ sd = sds ++#endif ++ end do ! kernels ++#endif ++ ++ call elpa_deallocate(e, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ deallocate(a) ++ deallocate(as) ++ deallocate(z) ++ deallocate(ev) ++ ++#ifdef TEST_HERMITIAN_MULTIPLY ++ deallocate(b) ++ deallocate(c) ++#endif ++#if defined(TEST_MATRIX_TOEPLITZ) || defined(TEST_MATRIX_FRANK) ++ deallocate(d, ds) ++ deallocate(sd, sds) ++#endif ++#if defined(TEST_GENERALIZED_EIGENPROBLEM) ++ deallocate(b, bs) ++#endif ++ ++#ifdef TEST_ALL_LAYOUTS ++ end do ! factors ++ end do ! layouts ++#endif ++ call elpa_uninit(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ ++ call exit(status) ++ ++ contains ++ ++ subroutine check_status(status, myid) ++ implicit none ++ TEST_INT_TYPE, intent(in) :: status, myid ++ TEST_INT_MPI_TYPE :: mpierr ++ if (status /= 0) then ++ if (myid == 0) print *, "Result incorrect!" ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ call exit(status) ++ endif ++ end subroutine ++ ++end program +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_multiple_objs.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_multiple_objs.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/test_multiple_objs.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_multiple_objs.F90 2022-01-28 09:48:29.071140954 +0100 +@@ -0,0 +1,411 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++! Define one of TEST_REAL or TEST_COMPLEX ++! Define one of TEST_SINGLE or TEST_DOUBLE ++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE ++! Define TEST_NVIDIA_GPU \in [0, 1] ++! Define TEST_INTEL_GPU \in [0, 1] ++! Define TEST_AMD_GPU \in [0, 1] ++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel] ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++error: define exactly one of TEST_REAL or TEST_COMPLEX ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++error: define exactly one of TEST_SINGLE or TEST_DOUBLE ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE real(kind=C_FLOAT) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_FLOAT) ++# else ++# define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX) ++# endif ++#else ++# define EV_TYPE real(kind=C_DOUBLE) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_DOUBLE) ++# else ++# define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX) ++# endif ++#endif ++ ++ ++#ifdef TEST_REAL ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL ++#else ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++#define TEST_GPU 0 ++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1) ++#undef TEST_GPU ++#define TEST_GPU 1 ++#endif ++ ++#include "assert.h" ++ ++program test ++ use elpa ++ ++ !use test_util ++ use test_setup_mpi ++ use test_prepare_matrix ++ use test_read_input_parameters ++ use test_blacs_infrastructure ++ use test_check_correctness ++ use test_analytic ++ use iso_fortran_env ++ ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ implicit none ++ ++ ! matrix dimensions ++ TEST_INT_TYPE :: na, nev, nblk ++ ++ ! mpi ++ TEST_INT_TYPE :: myid, nprocs ++ TEST_INT_TYPE :: na_cols, na_rows ! local matrix size ++ TEST_INT_TYPE :: np_cols, np_rows ! number of MPI processes per column/row ++ TEST_INT_TYPE :: my_prow, my_pcol ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1) ++ TEST_INT_TYPE :: ierr ++ TEST_INT_MPI_TYPE :: mpierr ++ ! blacs ++ character(len=1) :: layout ++ TEST_INT_TYPE :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ ! The Matrix ++ MATRIX_TYPE, allocatable :: a(:,:), as(:,:) ++ ! eigenvectors ++ MATRIX_TYPE, allocatable :: z(:,:) ++ ! eigenvalues ++ EV_TYPE, allocatable :: ev(:) ++ ++ TEST_INT_TYPE :: status ++ integer(kind=c_int) :: error_elpa ++ ++ type(output_t) :: write_to_file ++ class(elpa_t), pointer :: e1, e2, e_ptr ++ class(elpa_autotune_t), pointer :: tune_state ++ ++ TEST_INT_TYPE :: iter ++ character(len=5) :: iter_string ++ integer(kind=c_int) :: timings, debug, gpu ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++! call setup_mpi(myid, nprocs) ++ call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr) ++ call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr) ++ call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr) ++#ifdef HAVE_REDIRECT ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++ call redirect_stdout(myid) ++#endif ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ layout = 'C' ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ np_rows = nprocs/np_cols ++ assert(nprocs == np_rows * np_cols) ++ ++ if (myid == 0) then ++ print '((a,i0))', 'Matrix size: ', na ++ print '((a,i0))', 'Num eigenvectors: ', nev ++ print '((a,i0))', 'Blocksize: ', nblk ++#ifdef WITH_MPI ++ print '((a,i0))', 'Num MPI proc: ', nprocs ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print '(a)', 'Process layout: ' // layout ++#endif ++ print *,'' ++ endif ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, np_cols, layout, & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(ev(na)) ++ ++ a(:,:) = 0.0 ++ z(:,:) = 0.0 ++ ev(:) = 0.0 ++ ++ call prepare_matrix_analytic(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol, print_times=.false.) ++ as(:,:) = a(:,:) ++ ++ e1 => elpa_allocate(error_elpa) ++ !assert_elpa_ok(error_elpa) ++ ++ call set_basic_params(e1, na, nev, na_rows, na_cols, my_prow, my_pcol) ++ ++ call e1%set("timings",1, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e1%set("debug",1, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0) ++ call e1%set("nvidia-gpu", TEST_GPU, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#if TEST_AMD_GPU == 1 ++ call e1%set("amd-gpu", TEST_GPU, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++#if TEST_INTEL_GPU == 1 ++ call e1%set("intel-gpu", TEST_GPU, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ !call e1%set("max_stored_rows", 15, error_elpa) ++ ++ assert_elpa_ok(e1%setup()) ++ ++ call e1%store_settings("initial_parameters.txt", error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++#ifdef WITH_MPI ++ ! barrier after store settings, file created from one MPI rank only, but loaded everywhere ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++ ++ ! try to load parameters into another object ++ e2 => elpa_allocate(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call set_basic_params(e2, na, nev, na_rows, na_cols, my_prow, my_pcol) ++ call e2%load_settings("initial_parameters.txt", error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ assert_elpa_ok(e2%setup()) ++ ++ call e2%get("timings", timings, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e2%get("debug", debug, error_elpa) ++ assert_elpa_ok(error_elpa) ++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0) ++ call e2%get("nvidia-gpu", gpu, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++#if TEST_AMD_GPU == 1 ++ call e2%get("amd-gpu", gpu, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++#if TEST_INTEL_GPU == 1 ++ call e2%get("intel-gpu", gpu, error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ ++ if ((timings .ne. 1) .or. (debug .ne. 1) .or. (gpu .ne. 0)) then ++ print *, "Parameters not stored or loaded correctly. Aborting...", timings, debug, gpu ++ stop 1 ++ endif ++ ++ if(myid == 0) print *, "parameters of e1" ++ call e1%print_settings(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ if(myid == 0) print *, "" ++ if(myid == 0) print *, "parameters of e2" ++ call e2%print_settings(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ e_ptr => e2 ++ ++ ++ tune_state => e_ptr%autotune_setup(ELPA_AUTOTUNE_FAST, AUTOTUNE_DOMAIN, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ ++ iter=0 ++ do while (e_ptr%autotune_step(tune_state, error_elpa)) ++ assert_elpa_ok(error_elpa) ++ ++ iter=iter+1 ++ write(iter_string,'(I5.5)') iter ++ call e_ptr%print_settings(error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e_ptr%store_settings("saved_parameters_"//trim(iter_string)//".txt", error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e_ptr%timer_start("eigenvectors: iteration "//trim(iter_string)) ++ call e_ptr%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ call e_ptr%timer_stop("eigenvectors: iteration "//trim(iter_string)) ++ ++ assert_elpa_ok(error_elpa) ++ if (myid .eq. 0) then ++ print *, "" ++ call e_ptr%print_times("eigenvectors: iteration "//trim(iter_string)) ++ endif ++ status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, & ++ .true., .true., print_times=.false.) ++ a(:,:) = as(:,:) ++ call e_ptr%autotune_print_state(tune_state, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e_ptr%autotune_save_state(tune_state, "saved_state_"//trim(iter_string)//".txt", error_elpa) ++ assert_elpa_ok(error_elpa) ++#ifdef WITH_MPI ++ ! barrier after save state, file created from one MPI rank only, but loaded everywhere ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++ call e_ptr%autotune_load_state(tune_state, "saved_state_"//trim(iter_string)//".txt", error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ end do ++ ++ ! set and print the autotuned-settings ++ call e_ptr%autotune_set_best(tune_state, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ if (myid .eq. 0) then ++ print *, "The best combination found by the autotuning:" ++ flush(output_unit) ++ call e_ptr%autotune_print_best(tune_state, error_elpa) ++ assert_elpa_ok(error_elpa) ++ endif ++ ! de-allocate autotune object ++ call elpa_autotune_deallocate(tune_state, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ if (myid .eq. 0) then ++ print *, "Running once more time with the best found setting..." ++ endif ++ call e_ptr%timer_start("eigenvectors: best setting") ++ call e_ptr%eigenvectors(a, ev, z, error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call e_ptr%timer_stop("eigenvectors: best setting") ++ assert_elpa_ok(error_elpa) ++ if (myid .eq. 0) then ++ print *, "" ++ call e_ptr%print_times("eigenvectors: best setting") ++ endif ++ status = check_correctness_analytic(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, & ++ .true., .true., print_times=.false.) ++ ++ call elpa_deallocate(e_ptr, error_elpa) ++ !assert_elpa_ok(error_elpa) ++ ++ deallocate(a) ++ deallocate(as) ++ deallocate(z) ++ deallocate(ev) ++ ++ call elpa_uninit(error_elpa) ++ !assert_elpa_ok(error_elpa) ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ ++ call exit(status) ++ ++contains ++ subroutine set_basic_params(elpa, na, nev, na_rows, na_cols, my_prow, my_pcol) ++ implicit none ++ class(elpa_t), pointer :: elpa ++ TEST_INT_TYPE, intent(in) :: na, nev, na_rows, na_cols, my_prow, my_pcol ++ ++ call elpa%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++#ifdef WITH_MPI ++ call elpa%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ end subroutine ++ ++end program +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_skewsymmetric.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_skewsymmetric.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/test_skewsymmetric.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_skewsymmetric.F90 2022-01-28 09:50:11.240867016 +0100 +@@ -0,0 +1,431 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++! Define one of TEST_REAL or TEST_COMPLEX ++! Define one of TEST_SINGLE or TEST_DOUBLE ++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE ++! Define TEST_NVIDIA_GPU \in [0, 1] ++! Define TEST_INTEL_GPU \in [0, 1] ++! Define TEST_AMD_GPU \in [0, 1] ++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel] ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++error: define exactly one of TEST_REAL or TEST_COMPLEX ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++error: define exactly one of TEST_SINGLE or TEST_DOUBLE ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE real(kind=C_FLOAT) ++# define EV_TYPE_COMPLEX complex(kind=C_FLOAT_COMPLEX) ++# define MATRIX_TYPE_COMPLEX complex(kind=C_FLOAT_COMPLEX) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_FLOAT) ++# else ++# define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX) ++# endif ++#else ++# define MATRIX_TYPE_COMPLEX complex(kind=C_DOUBLE_COMPLEX) ++# define EV_TYPE_COMPLEX complex(kind=C_DOUBLE_COMPLEX) ++# define EV_TYPE real(kind=C_DOUBLE) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_DOUBLE) ++# else ++# define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX) ++# endif ++#endif ++ ++#ifdef TEST_REAL ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL ++#else ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX ++#endif ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++#define TEST_GPU 0 ++#if (TEST_NVIDIA_GPU == 1) || (TEST_AMD_GPU == 1) || (TEST_INTEL_GPU == 1) ++#undef TEST_GPU ++#define TEST_GPU 1 ++#endif ++ ++#include "assert.h" ++ ++program test ++ use elpa ++ ++ !use test_util ++ use test_setup_mpi ++ use test_prepare_matrix ++ use test_read_input_parameters ++ use test_blacs_infrastructure ++ use test_check_correctness ++ use precision_for_tests ++ use iso_fortran_env ++ ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ implicit none ++ ++ ! matrix dimensions ++ TEST_INT_TYPE :: na, nev, nblk ++ ++ ! mpi ++ TEST_INT_TYPE :: myid, nprocs ++ TEST_INT_TYPE :: na_cols, na_rows ! local matrix size ++ TEST_INT_TYPE :: np_cols, np_rows ! number of MPI processes per column/row ++ TEST_INT_TYPE :: my_prow, my_pcol ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1) ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ ! blacs ++ character(len=1) :: layout ++ TEST_INT_TYPE :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ ! The Matrix ++ MATRIX_TYPE, allocatable :: a_skewsymmetric(:,:), as_skewsymmetric(:,:) ++ MATRIX_TYPE_COMPLEX, allocatable :: a_complex(:,:), as_complex(:,:) ++ ! eigenvectors ++ MATRIX_TYPE, allocatable :: z_skewsymmetric(:,:) ++ MATRIX_TYPE_COMPLEX, allocatable :: z_complex(:,:) ++ ! eigenvalues ++ EV_TYPE, allocatable :: ev_skewsymmetric(:), ev_complex(:) ++ ++ TEST_INT_TYPE :: status, i, j ++ integer(kind=c_int) :: error_elpa ++ ++ type(output_t) :: write_to_file ++ class(elpa_t), pointer :: e_complex, e_skewsymmetric ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++! call setup_mpi(myid, nprocs) ++ call MPI_INIT_THREAD(MPI_THREAD_SERIALIZED,info, mpierr) ++ call MPI_COMM_SIZE(MPI_COMM_WORLD,nprocs, mpierr) ++ call MPI_COMM_RANK(MPI_COMM_WORLD,myid, mpierr) ++#ifdef HAVE_REDIRECT ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++ call redirect_stdout(myid) ++#endif ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++! ++ layout = 'C' ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ np_rows = nprocs/np_cols ++ assert(nprocs == np_rows * np_cols) ++ ++ if (myid == 0) then ++ print '((a,i0))', 'Matrix size: ', na ++ print '((a,i0))', 'Num eigenvectors: ', nev ++ print '((a,i0))', 'Blocksize: ', nblk ++#ifdef WITH_MPI ++ print '((a,i0))', 'Num MPI proc: ', nprocs ++ print '(3(a,i0))','Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs ++ print '(a)', 'Process layout: ' // layout ++#endif ++ print *,'' ++ endif ++ ++ call set_up_blacsgrid(int(mpi_comm_world,kind=BLAS_KIND), np_rows, & ++ np_cols, layout, & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ allocate(a_skewsymmetric (na_rows,na_cols)) ++ allocate(as_skewsymmetric(na_rows,na_cols)) ++ allocate(z_skewsymmetric (na_rows,2*na_cols)) ++ allocate(ev_skewsymmetric(na)) ++ ++ a_skewsymmetric(:,:) = 0.0 ++ z_skewsymmetric(:,:) = 0.0 ++ ev_skewsymmetric(:) = 0.0 ++ ++ call prepare_matrix_random(na, myid, sc_desc, a_skewsymmetric, & ++ z_skewsymmetric(:,1:na_cols), as_skewsymmetric, is_skewsymmetric=1) ++ ++ !call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++ as_skewsymmetric(:,:) = a_skewsymmetric(:,:) ++ ++ ++ ! prepare the complex matrix for the "brute force" case ++ allocate(a_complex (na_rows,na_cols)) ++ allocate(as_complex(na_rows,na_cols)) ++ allocate(z_complex (na_rows,na_cols)) ++ allocate(ev_complex(na)) ++ ++ a_complex(1:na_rows,1:na_cols) = 0.0 ++ z_complex(1:na_rows,1:na_cols) = 0.0 ++ as_complex(1:na_rows,1:na_cols) = 0.0 ++ ++ ++ do j=1, na_cols ++ do i=1,na_rows ++#ifdef TEST_DOUBLE ++ a_complex(i,j) = dcmplx(0.0, a_skewsymmetric(i,j)) ++#endif ++#ifdef TEST_SINGLE ++ a_complex(i,j) = cmplx(0.0, a_skewsymmetric(i,j)) ++#endif ++ enddo ++ enddo ++ ++ ++ ++ z_complex(1:na_rows,1:na_cols) = a_complex(1:na_rows,1:na_cols) ++ as_complex(1:na_rows,1:na_cols) = a_complex(1:na_rows,1:na_cols) ++ ++ ! first set up and solve the brute force problem ++ e_complex => elpa_allocate(error_elpa) ++ call set_basic_params(e_complex, na, nev, na_rows, na_cols, my_prow, my_pcol) ++ ++ call e_complex%set("timings",1, error_elpa) ++ ++ call e_complex%set("debug",1,error_elpa) ++ ++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0) ++ call e_complex%set("nvidia-gpu", TEST_GPU,error_elpa) ++#endif ++#if TEST_AMD_GPU == 1 ++ call e_complex%set("amd-gpu", TEST_GPU,error_elpa) ++#endif ++#if TEST_INTEL_GPU == 1 ++ call e_complex%set("intel-gpu", TEST_GPU,error_elpa) ++#endif ++ ++ call e_complex%set("omp_threads", 8, error_elpa) ++ ++ assert_elpa_ok(e_complex%setup()) ++ call e_complex%set("solver", elpa_solver_2stage, error_elpa) ++ ++ call e_complex%timer_start("eigenvectors: brute force as complex matrix") ++ call e_complex%eigenvectors(a_complex, ev_complex, z_complex, error_elpa) ++ call e_complex%timer_stop("eigenvectors: brute force as complex matrix") ++ ++ if (myid .eq. 0) then ++ print *, "" ++ call e_complex%print_times("eigenvectors: brute force as complex matrix") ++ endif ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++! as_complex(:,:) = z_complex(:,:) ++#ifdef TEST_SINGLE ++ status = check_correctness_evp_numeric_residuals_complex_single(na, nev, as_complex, z_complex, ev_complex, sc_desc, & ++ nblk, myid, np_rows,np_cols, my_prow, my_pcol) ++#else ++ status = check_correctness_evp_numeric_residuals_complex_double(na, nev, as_complex, z_complex, ev_complex, sc_desc, & ++ nblk, myid, np_rows,np_cols, my_prow, my_pcol) ++#endif ++ status = 0 ++ call check_status(status, myid) ++ ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++ ! now run the skewsymmetric case ++ e_skewsymmetric => elpa_allocate(error_elpa) ++ call set_basic_params(e_skewsymmetric, na, nev, na_rows, na_cols, my_prow, my_pcol) ++ ++ call e_skewsymmetric%set("timings",1, error_elpa) ++ ++ call e_skewsymmetric%set("debug",1,error_elpa) ++ ++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0) ++ call e_skewsymmetric%set("nvidia-gpu", TEST_GPU,error_elpa) ++#endif ++#if TEST_AMD_GPU == 1 ++ call e_skewsymmetric%set("amd-gpu", TEST_GPU,error_elpa) ++#endif ++#if TEST_INTEL_GPU == 1 ++ call e_skewsymmetric%set("intel-gpu", TEST_GPU,error_elpa) ++#endif ++ call e_skewsymmetric%set("omp_threads",8, error_elpa) ++ ++ assert_elpa_ok(e_skewsymmetric%setup()) ++ ++ call e_skewsymmetric%set("solver", elpa_solver_2stage, error_elpa) ++ ++ call e_skewsymmetric%timer_start("eigenvectors: skewsymmetric ") ++ call e_skewsymmetric%skew_eigenvectors(a_skewsymmetric, ev_skewsymmetric, z_skewsymmetric, error_elpa) ++ call e_skewsymmetric%timer_stop("eigenvectors: skewsymmetric ") ++ ++ if (myid .eq. 0) then ++ print *, "" ++ call e_skewsymmetric%print_times("eigenvectors: skewsymmetric") ++ endif ++ ++ ! check eigenvalues ++ do i=1, na ++ if (myid == 0) then ++#ifdef TEST_DOUBLE ++ if (abs(ev_complex(i)-ev_skewsymmetric(i))/abs(ev_complex(i)) .gt. 1e-10) then ++#endif ++#ifdef TEST_SINGLE ++ if (abs(ev_complex(i)-ev_skewsymmetric(i))/abs(ev_complex(i)) .gt. 1e-4) then ++#endif ++ print *,"ev: i=",i,ev_complex(i),ev_skewsymmetric(i) ++ status = 1 ++ endif ++ endif ++ enddo ++ ++ ++! call check_status(status, myid) ++ ++ z_complex(:,:) = 0 ++ do j=1, na_cols ++ do i=1,na_rows ++#ifdef TEST_DOUBLE ++ z_complex(i,j) = dcmplx(z_skewsymmetric(i,j), z_skewsymmetric(i,na_cols+j)) ++#endif ++#ifdef TEST_SINGLE ++ z_complex(i,j) = cmplx(z_skewsymmetric(i,j), z_skewsymmetric(i,na_cols+j)) ++#endif ++ enddo ++ enddo ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++ ++#ifdef TEST_SINGLE ++ status = check_correctness_evp_numeric_residuals_ss_real_single(na, nev, as_skewsymmetric, z_complex, ev_skewsymmetric, & ++ sc_desc, nblk, myid, np_rows,np_cols, my_prow, my_pcol) ++#else ++ status = check_correctness_evp_numeric_residuals_ss_real_double(na, nev, as_skewsymmetric, z_complex, ev_skewsymmetric, & ++ sc_desc, nblk, myid, np_rows,np_cols, my_prow, my_pcol) ++#endif ++ ++#ifdef WITH_MPI ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++#endif ++ call elpa_deallocate(e_complex,error_elpa) ++ call elpa_deallocate(e_skewsymmetric,error_elpa) ++ ++ ++ !to do ++ ! - check whether brute-force check_correctness_evp_numeric_residuals worsk (complex ev) ++ ! - invent a test for skewsymmetric residuals ++ ++ deallocate(a_complex) ++ deallocate(as_complex) ++ deallocate(z_complex) ++ deallocate(ev_complex) ++ ++ deallocate(a_skewsymmetric) ++ deallocate(as_skewsymmetric) ++ deallocate(z_skewsymmetric) ++ deallocate(ev_skewsymmetric) ++ call elpa_uninit(error_elpa) ++ ++ ++ ++#ifdef WITH_MPI ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++#endif ++ ++ call exit(status) ++ ++contains ++ subroutine set_basic_params(elpa, na, nev, na_rows, na_cols, my_prow, my_pcol) ++ implicit none ++ class(elpa_t), pointer :: elpa ++ TEST_INT_TYPE, intent(in) :: na, nev, na_rows, na_cols, my_prow, my_pcol ++ ++ call elpa%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++#ifdef WITH_MPI ++ call elpa%set("mpi_comm_parent", int(MPI_COMM_WORLD,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ end subroutine ++ subroutine check_status(status, myid) ++ implicit none ++ TEST_INT_TYPE, intent(in) :: status, myid ++ TEST_INT_MPI_TYPE :: mpierr ++ if (status /= 0) then ++ if (myid == 0) print *, "Result incorrect!" ++#ifdef WITH_MPI ++ call mpi_finalize(mpierr) ++#endif ++ call exit(status) ++ endif ++ end subroutine ++end program +diff -ruN elpa-new_release_2021.11.001/examples/Fortran/test_split_comm.F90 elpa-new_release_2021.11.001_ok/examples/Fortran/test_split_comm.F90 +--- elpa-new_release_2021.11.001/examples/Fortran/test_split_comm.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Fortran/test_split_comm.F90 2022-02-01 17:13:58.420500580 +0100 +@@ -0,0 +1,346 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++! Define one of TEST_REAL or TEST_COMPLEX ++! Define one of TEST_SINGLE or TEST_DOUBLE ++! Define one of TEST_SOLVER_1STAGE or TEST_SOLVER_2STAGE ++! Define TEST_NVIDIA_GPU \in [0, 1] ++! Define TEST_INTEL_GPU \in [0, 1] ++! Define either TEST_ALL_KERNELS or a TEST_KERNEL \in [any valid kernel] ++ ++#if !(defined(TEST_REAL) ^ defined(TEST_COMPLEX)) ++error: define exactly one of TEST_REAL or TEST_COMPLEX ++#endif ++ ++#if !(defined(TEST_SINGLE) ^ defined(TEST_DOUBLE)) ++error: define exactly one of TEST_SINGLE or TEST_DOUBLE ++#endif ++ ++#ifdef TEST_SINGLE ++# define EV_TYPE real(kind=C_FLOAT) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_FLOAT) ++# else ++# define MATRIX_TYPE complex(kind=C_FLOAT_COMPLEX) ++# endif ++#else ++# define EV_TYPE real(kind=C_DOUBLE) ++# ifdef TEST_REAL ++# define MATRIX_TYPE real(kind=C_DOUBLE) ++# else ++# define MATRIX_TYPE complex(kind=C_DOUBLE_COMPLEX) ++# endif ++#endif ++ ++ ++#ifdef TEST_REAL ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_REAL ++#else ++# define AUTOTUNE_DOMAIN ELPA_AUTOTUNE_DOMAIN_COMPLEX ++#endif ++ ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++#include "assert.h" ++ ++program test ++ use elpa ++ ++ !use test_util ++ use test_setup_mpi ++ use test_prepare_matrix ++ use test_read_input_parameters ++ use test_blacs_infrastructure ++ use test_check_correctness ++ use test_analytic ++ use iso_fortran_env ++ ++#ifdef HAVE_REDIRECT ++ use test_redirect ++#endif ++ implicit none ++ ++ ! matrix dimensions ++ TEST_INT_TYPE :: na, nev, nblk ++ TEST_INT_TYPE :: num_groups, group_size, color, key ++ ++ ! mpi ++ TEST_INT_TYPE :: myid, nprocs ++ TEST_INT_TYPE :: na_cols, na_rows ! local matrix size ++ TEST_INT_TYPE :: np_cols, np_rows ! number of MPI processes per column/row ++ TEST_INT_TYPE :: my_prow, my_pcol ! local MPI task position (my_prow, my_pcol) in the grid (0..np_cols -1, 0..np_rows -1) ++ TEST_INT_MPI_TYPE :: mpierr, ierr,mpi_sub_commMPI, myidMPI, nprocsMPI, colorMPI, keyMPI, & ++ myid_subMPI, nprocs_subMPI ++ TEST_INT_TYPE :: mpi_sub_comm ++ TEST_INT_TYPE :: myid_sub, nprocs_sub ++ ++ ! blacs ++ character(len=1) :: layout ++ TEST_INT_TYPE :: my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ ! The Matrix ++ MATRIX_TYPE, allocatable :: a(:,:), as(:,:) ++ ! eigenvectors ++ MATRIX_TYPE, allocatable :: z(:,:) ++ ! eigenvalues ++ EV_TYPE, allocatable :: ev(:) ++ ++ TEST_INT_TYPE :: status ++ integer(kind=c_int) :: error_elpa ++ ++ type(output_t) :: write_to_file ++ class(elpa_t), pointer :: e ++ ++ TEST_INT_TYPE :: iter ++ character(len=5) :: iter_string ++ ++ status = 0 ++#ifdef WITH_MPI ++ ++ call read_input_parameters(na, nev, nblk, write_to_file) ++ !call setup_mpi(myid, nprocs) ++ call mpi_init_thread(MPI_THREAD_SERIALIZED, info, mpierr) ++ call mpi_comm_rank(mpi_comm_world, myidMPI,mpierr) ++ call mpi_comm_size(mpi_comm_world, nprocsMPI,mpierr) ++ myid = int(myidMPI,kind=BLAS_KIND) ++ nprocs = int(nprocsMPI,kind=BLAS_KIND) ++ ++ if((mod(nprocs, 4) == 0) .and. (nprocs > 4)) then ++ num_groups = 4 ++ else if(mod(nprocs, 3) == 0) then ++ num_groups = 3 ++ else if(mod(nprocs, 2) == 0) then ++ num_groups = 2 ++ else ++ num_groups = 1 ++ endif ++ ++ group_size = nprocs / num_groups ++ ++ if(num_groups * group_size .ne. nprocs) then ++ print *, "Something went wrong before splitting the communicator" ++ stop 1 ++ else ++ if(myid == 0) then ++ print '((a,i0,a,i0))', "The test will split the global communicator into ", num_groups, " groups of size ", group_size ++ endif ++ endif ++ ++ ! each group of processors will have the same color ++ color = mod(myid, num_groups) ++ ! this will determine the myid in each group ++ key = myid/num_groups ++ !split the communicator ++ colorMPI=int(color,kind=MPI_KIND) ++ keyMPI = int(key, kind=MPI_KIND) ++ call mpi_comm_split(mpi_comm_world, colorMPI, keyMPI, mpi_sub_commMPI, mpierr) ++ mpi_sub_comm = int(mpi_sub_commMPI,kind=BLAS_KIND) ++ color = int(colorMPI,kind=BLAS_KIND) ++ key = int(keyMPI,kind=BLAS_KIND) ++ if(mpierr .ne. MPI_SUCCESS) then ++ print *, "communicator splitting not successfull", mpierr ++ stop 1 ++ endif ++ ++ call mpi_comm_rank(mpi_sub_commMPI, myid_subMPI, mpierr) ++ call mpi_comm_size(mpi_sub_commMPI, nprocs_subMPI, mpierr) ++ myid_sub = int(myid_subMPI,kind=BLAS_KIND) ++ nprocs_sub = int(nprocs_subMPI,kind=BLAS_KIND) ++ ++ !print *, "glob ", myid, nprocs, ", loc ", myid_sub, nprocs_sub, ", color ", color, ", key ", key ++ ++ if((mpierr .ne. MPI_SUCCESS) .or. (nprocs_sub .ne. group_size) .or. (myid_sub >= group_size)) then ++ print *, "something wrong with the sub communicators" ++ stop 1 ++ endif ++ ++ ++#ifdef HAVE_REDIRECT ++ call MPI_BARRIER(MPI_COMM_WORLD, mpierr) ++ call redirect_stdout(myid) ++#endif ++ ++ if (elpa_init(CURRENT_API_VERSION) /= ELPA_OK) then ++ print *, "ELPA API version not supported" ++ stop 1 ++ endif ++ ++ layout = 'C' ++ do np_cols = NINT(SQRT(REAL(nprocs_sub))),2,-1 ++ if(mod(nprocs_sub,np_cols) == 0 ) exit ++ enddo ++ np_rows = nprocs_sub/np_cols ++ assert(nprocs_sub == np_rows * np_cols) ++ assert(nprocs == np_rows * np_cols * num_groups) ++ ++ if (myid == 0) then ++ print '((a,i0))', 'Matrix size: ', na ++ print '((a,i0))', 'Num eigenvectors: ', nev ++ print '((a,i0))', 'Blocksize: ', nblk ++ print '(a)', 'Process layout: ' // layout ++ print *,'' ++ endif ++ if (myid_sub == 0) then ++ print '(4(a,i0))','GROUP ', color, ': Number of processor rows=',np_rows,', cols=',np_cols,', total=',nprocs_sub ++ endif ++ ++ ! USING the subcommunicator ++ call set_up_blacsgrid(int(mpi_sub_comm,kind=BLAS_KIND), np_rows, np_cols, layout, & ++ my_blacs_ctxt, my_prow, my_pcol) ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, np_rows, np_cols, & ++ na_rows, na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(as(na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ allocate(ev(na)) ++ ++ a(:,:) = 0.0 ++ z(:,:) = 0.0 ++ ev(:) = 0.0 ++ ++ !call prepare_matrix_analytic(na, a, nblk, myid_sub, np_rows, np_cols, my_prow, my_pcol, print_times=.false.) ++ call prepare_matrix_random(na, myid_sub, sc_desc, a, z, as) ++ as(:,:) = a(:,:) ++ ++ e => elpa_allocate(error_elpa) ++ call set_basic_params(e, na, nev, na_rows, na_cols, mpi_sub_comm, my_prow, my_pcol) ++ ++ call e%set("timings",1, error_elpa) ++ ++ call e%set("debug",1, error_elpa) ++#if TEST_NVIDIA_GPU == 1 || (TEST_NVIDIA_GPU == 0) && (TEST_AMD_GPU == 0) && (TEST_INTEL_GPU == 0) ++ call e%set("nvidia-gpu", 0, error_elpa) ++#endif ++#if TEST_INTEL_GPU == 1 ++ call e%set("intel-gpu", 0, error_elpa) ++#endif ++ !call e%set("max_stored_rows", 15, error_elpa) ++ ++ assert_elpa_ok(e%setup()) ++ ++ ++ ++! if(myid == 0) print *, "parameters of e" ++! call e%print_all_parameters() ++! if(myid == 0) print *, "" ++ ++ ++ call e%timer_start("eigenvectors") ++ call e%eigenvectors(a, ev, z, error_elpa) ++ call e%timer_stop("eigenvectors") ++ ++ assert_elpa_ok(error_elpa) ++ ++ !status = check_correctness_analytic(na, nev, ev, z, nblk, myid_sub, np_rows, np_cols, my_prow, my_pcol, & ++ ! .true., .true., print_times=.false.) ++ status = check_correctness_evp_numeric_residuals(na, nev, as, z, ev, sc_desc, nblk, myid_sub, & ++ np_rows,np_cols, my_prow, my_pcol) ++ if (status /= 0) & ++ print *, "processor ", myid, ": Result incorrect for processor group ", color ++ ++ if (myid .eq. 0) then ++ print *, "Showing times of one goup only" ++ call e%print_times("eigenvectors") ++ endif ++ ++ call elpa_deallocate(e, error_elpa) ++ ++ deallocate(a) ++ deallocate(as) ++ deallocate(z) ++ deallocate(ev) ++ ++ call elpa_uninit(error_elpa) ++ ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++ ++#endif ++ call exit(status) ++ ++contains ++ subroutine set_basic_params(elpa, na, nev, na_rows, na_cols, communicator, my_prow, my_pcol) ++ use iso_c_binding ++ implicit none ++ class(elpa_t), pointer :: elpa ++ TEST_INT_TYPE, intent(in) :: na, nev, na_rows, na_cols, my_prow, my_pcol, communicator ++ ++#ifdef WITH_MPI ++ call elpa%set("na", int(na,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("nev", int(nev,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("local_nrows", int(na_rows,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("local_ncols", int(na_cols,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("nblk", int(nblk,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ ++ call elpa%set("mpi_comm_parent", int(communicator,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("process_row", int(my_prow,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++ call elpa%set("process_col", int(my_pcol,kind=c_int), error_elpa) ++ assert_elpa_ok(error_elpa) ++#endif ++ end subroutine ++ ++end program +diff -ruN elpa-new_release_2021.11.001/examples/Makefile_hybrid elpa-new_release_2021.11.001_ok/examples/Makefile_hybrid +--- elpa-new_release_2021.11.001/examples/Makefile_hybrid 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Makefile_hybrid 2022-01-28 09:56:18.548921000 +0100 +@@ -0,0 +1,24 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -qopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa ++# GCC ++# F90 = mpif90 -O3 -fopenmp -I$(ELPA_MODULES_OPENMP) -I$(ELPA_INCLUDE_OPENMP) -I$(ELPA_INCLUDE_OPENMP)/elpa ++LIBS = -L$(ELPA_LIB_OPENMP) -lelpa_openmp -lelpatest_openmp -lelpa $(SCALAPACK_LIB) $(MKL) ++CC = mpicc -O3 -qopenmp ++# GCC ++# CC = mpicc -O3 -fopenmp ++ ++all: test_real_e1_omp test_real_e2_omp ++ ++test_real_e1_omp: test_real_e1.F90 ++ $(F90) -DWITH_OPENMP_TRADITIONAL -o $@ test_real_e1.F90 $(LIBS) ++ ++test_real_e2_omp: test_real_e2.F90 ++ $(F90) -DWITH_OPENMP_TRADITIONAL -o $@ test_real_e2.F90 $(LIBS) +diff -ruN elpa-new_release_2021.11.001/examples/Makefile_pure elpa-new_release_2021.11.001_ok/examples/Makefile_pure +--- elpa-new_release_2021.11.001/examples/Makefile_pure 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Makefile_pure 2022-01-26 09:43:16.599164000 +0100 +@@ -0,0 +1,20 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) ++CC = mpicc -O3 ++ ++all: test_real_e1 test_real_e2 ++ ++test_real_e1: test_real_e1.F90 ++ $(F90) -o $@ test_real_e1.F90 $(LIBS) ++ ++test_real_e2: test_real_e2.F90 ++ $(F90) -o $@ test_real_e2.F90 $(LIBS) +diff -ruN elpa-new_release_2021.11.001/examples/Makefile_pure_cuda elpa-new_release_2021.11.001_ok/examples/Makefile_pure_cuda +--- elpa-new_release_2021.11.001/examples/Makefile_pure_cuda 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/Makefile_pure_cuda 2022-01-26 09:43:16.600617000 +0100 +@@ -0,0 +1,20 @@ ++# MPICH, that is IntelMPI or ParaStationMPI ++SCALAPACK_LIB = -lmkl_scalapack_lp64 -lmkl_blacs_intelmpi_lp64 ++# OpenMPI ++# SCALAPACK_LIB = -lmkl_scalapack_lp64 $(MKLROOT)/lib/intel64/libmkl_blacs_openmpi_lp64.a ++LAPACK_LIB = ++# Intel compiler ++MKL = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -liomp5 -lpthread -lstdc++ ++# GCC ++# MKL = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lgomp -lpthread -lstdc++ -lm ++F90 = mpif90 -O3 -I$(ELPA_MODULES) -I$(ELPA_INCLUDE) -I$(ELPA_INCLUDE)/elpa ++LIBS = -L$(ELPA_LIB) -lelpa -lelpatest $(SCALAPACK_LIB) $(MKL) -lcudart ++CC = mpicc -O3 ++ ++all: test_real_e1 test_real_e2 ++ ++test_real_e1: test_real_e1.F90 ++ $(F90) -DCUDA -o $@ test_real_e1.F90 $(LIBS) ++ ++test_real_e2: test_real_e2.F90 ++ $(F90) -DCUDA -DCUDAKERNEL -o $@ test_real_e2.F90 $(LIBS) +diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cuda.F90 elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cuda.F90 +--- elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cuda.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cuda.F90 2022-01-26 10:10:58.319812000 +0100 +@@ -0,0 +1,455 @@ ++! Copyright 2014, A. Marek ++! ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! This file was written by A. Marek, MPCDF ++ ++ ++#include "config-f90.h" ++module test_cuda_functions ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ ++ public ++ ++ integer(kind=ik) :: cudaMemcpyHostToDevice ++ integer(kind=ik) :: cudaMemcpyDeviceToHost ++ integer(kind=ik) :: cudaMemcpyDeviceToDevice ++ integer(kind=ik) :: cudaHostRegisterDefault ++ integer(kind=ik) :: cudaHostRegisterPortable ++ integer(kind=ik) :: cudaHostRegisterMapped ++ ++ ! TODO global variable, has to be changed ++ integer(kind=C_intptr_T) :: cublasHandle = -1 ++ ++ ! functions to set and query the CUDA devices ++ interface ++ function cuda_setdevice_c(n) result(istat) & ++ bind(C, name="cudaSetDeviceFromC") ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=C_INT), value :: n ++ integer(kind=C_INT) :: istat ++ end function cuda_setdevice_c ++ end interface ++ ++ ! functions to copy CUDA memory ++ interface ++ function cuda_memcpyDeviceToDevice_c() result(flag) & ++ bind(C, name="cudaMemcpyDeviceToDeviceFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function cuda_memcpyHostToDevice_c() result(flag) & ++ bind(C, name="cudaMemcpyHostToDeviceFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function cuda_memcpyDeviceToHost_c() result(flag) & ++ bind(C, name="cudaMemcpyDeviceToHostFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function cuda_hostRegisterDefault_c() result(flag) & ++ bind(C, name="cudaHostRegisterDefaultFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function cuda_hostRegisterPortable_c() result(flag) & ++ bind(C, name="cudaHostRegisterPortableFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function cuda_hostRegisterMapped_c() result(flag) & ++ bind(C, name="cudaHostRegisterMappedFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function cuda_memcpy_intptr_c(dst, src, size, dir) result(istat) & ++ bind(C, name="cudaMemcpyFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_t), value :: dst ++ integer(kind=C_intptr_t), value :: src ++ integer(kind=c_intptr_t), intent(in), value :: size ++ integer(kind=C_INT), intent(in), value :: dir ++ integer(kind=C_INT) :: istat ++ ++ end function cuda_memcpy_intptr_c ++ end interface ++ ++ interface ++ function cuda_memcpy_cptr_c(dst, src, size, dir) result(istat) & ++ bind(C, name="cudaMemcpyFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr), value :: dst ++ type(c_ptr), value :: src ++ integer(kind=c_intptr_t), intent(in), value :: size ++ integer(kind=C_INT), intent(in), value :: dir ++ integer(kind=C_INT) :: istat ++ ++ end function cuda_memcpy_cptr_c ++ end interface ++ ++ interface ++ function cuda_memcpy_mixed_c(dst, src, size, dir) result(istat) & ++ bind(C, name="cudaMemcpyFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr), value :: dst ++ integer(kind=C_intptr_t), value :: src ++ integer(kind=c_intptr_t), intent(in), value :: size ++ integer(kind=C_INT), intent(in), value :: dir ++ integer(kind=C_INT) :: istat ++ ++ end function cuda_memcpy_mixed_c ++ end interface ++ ++ ! functions to allocate and free CUDA memory ++ ++ interface ++ function cuda_free_intptr_c(a) result(istat) & ++ bind(C, name="cudaFreeFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_T), value :: a ++ integer(kind=C_INT) :: istat ++ ++ end function cuda_free_intptr_c ++ end interface ++ ++ interface ++ function cuda_free_cptr_c(a) result(istat) & ++ bind(C, name="cudaFreeFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr), value :: a ++ integer(kind=C_INT) :: istat ++ ++ end function cuda_free_cptr_c ++ end interface ++ ++ interface cuda_memcpy ++ module procedure cuda_memcpy_intptr ++ module procedure cuda_memcpy_cptr ++ module procedure cuda_memcpy_mixed ++ end interface ++ ++ interface cuda_free ++ module procedure cuda_free_intptr ++ module procedure cuda_free_cptr ++ end interface ++ ++ interface ++ function cuda_malloc_intptr_c(a, width_height) result(istat) & ++ bind(C, name="cudaMallocFromC") ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ integer(kind=C_intptr_T) :: a ++ integer(kind=c_intptr_t), intent(in), value :: width_height ++ integer(kind=C_INT) :: istat ++ ++ end function cuda_malloc_intptr_c ++ end interface ++ ++ interface ++ function cuda_malloc_cptr_c(a, width_height) result(istat) & ++ bind(C, name="cudaMallocFromC") ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ type(c_ptr) :: a ++ integer(kind=c_intptr_t), intent(in), value :: width_height ++ integer(kind=C_INT) :: istat ++ ++ end function cuda_malloc_cptr_c ++ end interface ++ ++ !interface cuda_malloc ++ ! module procedure cuda_malloc_intptr ++ ! module procedure cuda_malloc_cptr ++ !end interface ++ ++ contains ++ ++ function cuda_setdevice(n) result(success) ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ ++ integer(kind=ik), intent(in) :: n ++ logical :: success ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_setdevice_c(int(n,kind=c_int)) /= 0 ++#else ++ success = .true. ++#endif ++ end function cuda_setdevice ++ ++ ++ function cuda_malloc_intptr(a, width_height) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ integer(kind=c_intptr_t) :: a ++ integer(kind=c_intptr_t), intent(in) :: width_height ++ logical :: success ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_malloc_intptr_c(a, width_height) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++ ++ function cuda_malloc_cptr(a, width_height) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ type(c_ptr) :: a ++ integer(kind=c_intptr_t), intent(in) :: width_height ++ logical :: success ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_malloc_cptr_c(a, width_height) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++ function cuda_free_intptr(a) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_T) :: a ++ logical :: success ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_free_intptr_c(a) /= 0 ++#else ++ success = .true. ++#endif ++ end function cuda_free_intptr ++ ++ function cuda_free_cptr(a) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr) :: a ++ logical :: success ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_free_cptr_c(a) /= 0 ++#else ++ success = .true. ++#endif ++ end function cuda_free_cptr ++ ++ ! functions to memcopy CUDA memory ++ ++ function cuda_memcpyDeviceToDevice() result(flag) ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_NVIDIA_GPU_VERSION ++ flag = int(cuda_memcpyDeviceToDevice_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function cuda_memcpyHostToDevice() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_NVIDIA_GPU_VERSION ++ flag = int(cuda_memcpyHostToDevice_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function cuda_memcpyDeviceToHost() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_NVIDIA_GPU_VERSION ++ flag = int( cuda_memcpyDeviceToHost_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function cuda_hostRegisterDefault() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_NVIDIA_GPU_VERSION ++ flag = int(cuda_hostRegisterDefault_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function cuda_hostRegisterPortable() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_NVIDIA_GPU_VERSION ++ flag = int(cuda_hostRegisterPortable_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function cuda_hostRegisterMapped() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_NVIDIA_GPU_VERSION ++ flag = int(cuda_hostRegisterMapped_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function cuda_memcpy_intptr(dst, src, size, dir) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_t) :: dst ++ integer(kind=C_intptr_t) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_memcpy_intptr_c(dst, src, size, dir) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++ function cuda_memcpy_cptr(dst, src, size, dir) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr) :: dst ++ type(c_ptr) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_memcpy_cptr_c(dst, src, size, dir) /= 0 ++#else ++ !success = .true. ++ success = .false. ++#endif ++ end function ++ ++ function cuda_memcpy_mixed(dst, src, size, dir) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr) :: dst ++ integer(kind=C_intptr_t) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ success = cuda_memcpy_mixed_c(dst, src, size, dir) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++end module test_cuda_functions +diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cudaFunctions.cu elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cudaFunctions.cu +--- elpa-new_release_2021.11.001/examples/shared/GPU/CUDA/test_cudaFunctions.cu 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/CUDA/test_cudaFunctions.cu 2022-01-26 10:10:58.320705000 +0100 +@@ -0,0 +1,152 @@ ++// ++// Copyright 2014, A. Marek ++// ++// This file is part of ELPA. ++// ++// The ELPA library was originally created by the ELPA consortium, ++// consisting of the following organizations: ++// ++// - Max Planck Computing and Data Facility (MPCDF), formerly known as ++// Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++// - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++// Informatik, ++// - Technische Universität München, Lehrstuhl für Informatik mit ++// Schwerpunkt Wissenschaftliches Rechnen , ++// - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++// - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++// Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++// and ++// - IBM Deutschland GmbH ++// ++// This particular source code file contains additions, changes and ++// enhancements authored by Intel Corporation which is not part of ++// the ELPA consortium. ++// ++// More information can be found here: ++// http://elpa.mpcdf.mpg.de/ ++// ++// ELPA is free software: you can redistribute it and/or modify ++// it under the terms of the version 3 of the license of the ++// GNU Lesser General Public License as published by the Free ++// Software Foundation. ++// ++// ELPA 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 Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public License ++// along with ELPA. If not, see <http://www.gnu.org/licenses/> ++// ++// ELPA reflects a substantial effort on the part of the original ++// ELPA consortium, and we ask you to respect the spirit of the ++// license that we chose: i.e., please contribute any changes you ++// may have back to the original ELPA library distribution, and keep ++// any derivatives of ELPA under the same license that we chose for ++// the original distribution, the GNU Lesser General Public License. ++// ++// ++// -------------------------------------------------------------------------------------------------- ++// ++// This file was written by A. Marek, MPCDF ++#include "config-f90.h" ++ ++#include <stdio.h> ++#include <math.h> ++#include <stdio.h> ++ ++#include <stdlib.h> ++#include <string.h> ++#include <time.h> ++#include <alloca.h> ++#include <stdint.h> ++#include <complex.h> ++#ifdef WITH_NVIDIA_GPU_VERSION ++#include <cublas_v2.h> ++#endif ++ ++ ++#define errormessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0) ++ ++#ifdef DEBUG_CUDA ++#define debugmessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0) ++#else ++#define debugmessage(x, ...) ++#endif ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++extern "C" { ++ ++ int cudaSetDeviceFromC(int n) { ++ ++ cudaError_t cuerr = cudaSetDevice(n); ++ if (cuerr != cudaSuccess) { ++ errormessage("Error in cudaSetDevice: %s\n",cudaGetErrorString(cuerr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int cudaMallocFromC(intptr_t *a, size_t width_height) { ++ ++ cudaError_t cuerr = cudaMalloc((void **) a, width_height); ++#ifdef DEBUG_CUDA ++ printf("CUDA Malloc, pointer address: %p, size: %d \n", *a, width_height); ++#endif ++ if (cuerr != cudaSuccess) { ++ errormessage("Error in cudaMalloc: %s\n",cudaGetErrorString(cuerr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int cudaFreeFromC(intptr_t *a) { ++#ifdef DEBUG_CUDA ++ printf("CUDA Free, pointer address: %p \n", a); ++#endif ++ cudaError_t cuerr = cudaFree(a); ++ ++ if (cuerr != cudaSuccess) { ++ errormessage("Error in cudaFree: %s\n",cudaGetErrorString(cuerr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int cudaMemcpyFromC(intptr_t *dest, intptr_t *src, size_t count, int dir) { ++ ++ cudaError_t cuerr = cudaMemcpy( dest, src, count, (cudaMemcpyKind)dir); ++ if (cuerr != cudaSuccess) { ++ errormessage("Error in cudaMemcpy: %s\n",cudaGetErrorString(cuerr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int cudaMemcpyDeviceToDeviceFromC(void) { ++ int val = cudaMemcpyDeviceToDevice; ++ return val; ++ } ++ int cudaMemcpyHostToDeviceFromC(void) { ++ int val = cudaMemcpyHostToDevice; ++ return val; ++ } ++ int cudaMemcpyDeviceToHostFromC(void) { ++ int val = cudaMemcpyDeviceToHost; ++ return val; ++ } ++ int cudaHostRegisterDefaultFromC(void) { ++ int val = cudaHostRegisterDefault; ++ return val; ++ } ++ int cudaHostRegisterPortableFromC(void) { ++ int val = cudaHostRegisterPortable; ++ return val; ++ } ++ int cudaHostRegisterMappedFromC(void) { ++ int val = cudaHostRegisterMapped; ++ return val; ++ } ++ ++} ++#endif /* TEST_NVIDIA_GPU == 1 */ +diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_hip.F90 elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_hip.F90 +--- elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_hip.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_hip.F90 2022-01-26 10:10:58.327011000 +0100 +@@ -0,0 +1,449 @@ ++! Copyright 2021, A. Marek ++! ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! This file was written by A. Marek, MPCDF ++ ++ ++#include "config-f90.h" ++module test_hip_functions ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ ++ public ++ ++ integer(kind=ik) :: hipMemcpyHostToDevice ++ integer(kind=ik) :: hipMemcpyDeviceToHost ++ integer(kind=ik) :: hipMemcpyDeviceToDevice ++ integer(kind=ik) :: hipHostRegisterDefault ++ integer(kind=ik) :: hipHostRegisterPortable ++ integer(kind=ik) :: hipHostRegisterMapped ++ ++ ! TODO global variable, has to be changed ++ integer(kind=C_intptr_T) :: rocblasHandle = -1 ++ ++ ! functions to set and query the CUDA devices ++ interface ++ function hip_setdevice_c(n) result(istat) & ++ bind(C, name="hipSetDeviceFromC") ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=C_INT), value :: n ++ integer(kind=C_INT) :: istat ++ end function hip_setdevice_c ++ end interface ++ ++ ! functions to copy CUDA memory ++ interface ++ function hip_memcpyDeviceToDevice_c() result(flag) & ++ bind(C, name="hipMemcpyDeviceToDeviceFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function hip_memcpyHostToDevice_c() result(flag) & ++ bind(C, name="hipMemcpyHostToDeviceFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function hip_memcpyDeviceToHost_c() result(flag) & ++ bind(C, name="hipMemcpyDeviceToHostFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function hip_hostRegisterDefault_c() result(flag) & ++ bind(C, name="hipHostRegisterDefaultFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function hip_hostRegisterPortable_c() result(flag) & ++ bind(C, name="hipHostRegisterPortableFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function hip_hostRegisterMapped_c() result(flag) & ++ bind(C, name="hipHostRegisterMappedFromC") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int) :: flag ++ end function ++ end interface ++ ++ interface ++ function hip_memcpy_intptr_c(dst, src, size, dir) result(istat) & ++ bind(C, name="hipMemcpyFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_t), value :: dst ++ integer(kind=C_intptr_t), value :: src ++ integer(kind=c_intptr_t), intent(in), value :: size ++ integer(kind=C_INT), intent(in), value :: dir ++ integer(kind=C_INT) :: istat ++ ++ end function hip_memcpy_intptr_c ++ end interface ++ ++ interface ++ function hip_memcpy_cptr_c(dst, src, size, dir) result(istat) & ++ bind(C, name="hipMemcpyFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr), value :: dst ++ type(c_ptr), value :: src ++ integer(kind=c_intptr_t), intent(in), value :: size ++ integer(kind=C_INT), intent(in), value :: dir ++ integer(kind=C_INT) :: istat ++ ++ end function hip_memcpy_cptr_c ++ end interface ++ ++ interface ++ function hip_memcpy_mixed_c(dst, src, size, dir) result(istat) & ++ bind(C, name="hipMemcpyFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr), value :: dst ++ integer(kind=c_intptr_t), value :: src ++ integer(kind=c_intptr_t), intent(in), value :: size ++ integer(kind=C_INT), intent(in), value :: dir ++ integer(kind=C_INT) :: istat ++ ++ end function hip_memcpy_mixed_c ++ end interface ++ ++ ! functions to allocate and free CUDA memory ++ ++ interface ++ function hip_free_intptr_c(a) result(istat) & ++ bind(C, name="hipFreeFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_T), value :: a ++ integer(kind=C_INT) :: istat ++ ++ end function hip_free_intptr_c ++ end interface ++ ++ interface ++ function hip_free_cptr_c(a) result(istat) & ++ bind(C, name="hipFreeFromC") ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr), value :: a ++ integer(kind=C_INT) :: istat ++ ++ end function hip_free_cptr_c ++ end interface ++ ++ interface hip_memcpy ++ module procedure hip_memcpy_intptr ++ module procedure hip_memcpy_cptr ++ module procedure hip_memcpy_mixed ++ end interface ++ ++ interface hip_free ++ module procedure hip_free_intptr ++ module procedure hip_free_cptr ++ end interface ++ ++ interface ++ function hip_malloc_intptr_c(a, width_height) result(istat) & ++ bind(C, name="hipMallocFromC") ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ integer(kind=C_intptr_T) :: a ++ integer(kind=c_intptr_t), intent(in), value :: width_height ++ integer(kind=C_INT) :: istat ++ ++ end function hip_malloc_intptr_c ++ end interface ++ ++ interface ++ function hip_malloc_cptr_c(a, width_height) result(istat) & ++ bind(C, name="hipMallocFromC") ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ type(c_ptr) :: a ++ integer(kind=c_intptr_t), intent(in), value :: width_height ++ integer(kind=C_INT) :: istat ++ ++ end function hip_malloc_cptr_c ++ end interface ++ ++ contains ++ ++ function hip_setdevice(n) result(success) ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ ++ integer(kind=ik), intent(in) :: n ++ logical :: success ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_setdevice_c(int(n,kind=c_int)) /= 0 ++#else ++ success = .true. ++#endif ++ end function hip_setdevice ++ ++ ! functions to allocate and free memory ++ ++ function hip_malloc_intptr(a, width_height) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ integer(kind=C_intptr_t) :: a ++ integer(kind=c_intptr_t), intent(in) :: width_height ++ logical :: success ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_malloc_intptr_c(a, width_height) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++ function hip_malloc_cptr(a, width_height) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ implicit none ++ ++ type(c_ptr) :: a ++ integer(kind=c_intptr_t), intent(in) :: width_height ++ logical :: success ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_malloc_cptr_c(a, width_height) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++ function hip_free_intptr(a) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_T) :: a ++ logical :: success ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_free_intptr_c(a) /= 0 ++#else ++ success = .true. ++#endif ++ end function hip_free_intptr ++ ++ function hip_free_cptr(a) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr) :: a ++ logical :: success ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_free_cptr_c(a) /= 0 ++#else ++ success = .true. ++#endif ++ end function hip_free_cptr ++ ++ ! functions to memcopy CUDA memory ++ ++ function hip_memcpyDeviceToDevice() result(flag) ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_AMD_GPU_VERSION ++ flag = int(hip_memcpyDeviceToDevice_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function hip_memcpyHostToDevice() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_AMD_GPU_VERSION ++ flag = int(hip_memcpyHostToDevice_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function hip_memcpyDeviceToHost() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_AMD_GPU_VERSION ++ flag = int( hip_memcpyDeviceToHost_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function hip_hostRegisterDefault() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_AMD_GPU_VERSION ++ flag = int(hip_hostRegisterDefault_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function hip_hostRegisterPortable() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_AMD_GPU_VERSION ++ flag = int(hip_hostRegisterPortable_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function hip_hostRegisterMapped() result(flag) ++ use, intrinsic :: iso_c_binding ++ use precision_for_tests ++ implicit none ++ integer(kind=ik) :: flag ++#ifdef WITH_AMD_GPU_VERSION ++ flag = int(hip_hostRegisterMapped_c()) ++#else ++ flag = 0 ++#endif ++ end function ++ ++ function hip_memcpy_intptr(dst, src, size, dir) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ integer(kind=C_intptr_t) :: dst ++ integer(kind=C_intptr_t) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_memcpy_intptr_c(dst, src, size, dir) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++ function hip_memcpy_cptr(dst, src, size, dir) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr) :: dst ++ type(c_ptr) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_memcpy_cptr_c(dst, src, size, dir) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++ function hip_memcpy_mixed(dst, src, size, dir) result(success) ++ ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ type(c_ptr) :: dst ++ integer(kind=c_intptr_t) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_AMD_GPU_VERSION ++ success = hip_memcpy_mixed_c(dst, src, size, dir) /= 0 ++#else ++ success = .true. ++#endif ++ end function ++ ++end module test_hip_functions +diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_rocmFunctions.cpp elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_rocmFunctions.cpp +--- elpa-new_release_2021.11.001/examples/shared/GPU/ROCm/test_rocmFunctions.cpp 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/ROCm/test_rocmFunctions.cpp 2022-01-26 10:10:58.328343000 +0100 +@@ -0,0 +1,153 @@ ++// ++// Copyright 2021, A. Marek ++// ++// This file is part of ELPA. ++// ++// The ELPA library was originally created by the ELPA consortium, ++// consisting of the following organizations: ++// ++// - Max Planck Computing and Data Facility (MPCDF), formerly known as ++// Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++// - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++// Informatik, ++// - Technische Universität München, Lehrstuhl für Informatik mit ++// Schwerpunkt Wissenschaftliches Rechnen , ++// - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++// - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++// Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++// and ++// - IBM Deutschland GmbH ++// ++// This particular source code file contains additions, changes and ++// enhancements authored by Intel Corporation which is not part of ++// the ELPA consortium. ++// ++// More information can be found here: ++// http://elpa.mpcdf.mpg.de/ ++// ++// ELPA is free software: you can redistribute it and/or modify ++// it under the terms of the version 3 of the license of the ++// GNU Lesser General Public License as published by the Free ++// Software Foundation. ++// ++// ELPA 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 Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public License ++// along with ELPA. If not, see <http://www.gnu.org/licenses/> ++// ++// ELPA reflects a substantial effort on the part of the original ++// ELPA consortium, and we ask you to respect the spirit of the ++// license that we chose: i.e., please contribute any changes you ++// may have back to the original ELPA library distribution, and keep ++// any derivatives of ELPA under the same license that we chose for ++// the original distribution, the GNU Lesser General Public License. ++// ++// ++// -------------------------------------------------------------------------------------------------- ++// ++// This file was written by A. Marek, MPCDF ++#include "config-f90.h" ++ ++#include <stdio.h> ++#include <math.h> ++#include <stdio.h> ++ ++#include <stdlib.h> ++#include <string.h> ++#include <time.h> ++#include <alloca.h> ++#include <stdint.h> ++#include <complex.h> ++#ifdef WITH_AMD_GPU_VERSION ++//missing header for rocblas ++#include "rocblas.h" ++#include "hip/hip_runtime_api.h" ++#endif ++ ++#define errormessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0) ++ ++#ifdef DEBUG_HIP ++#define debugmessage(x, ...) do { fprintf(stderr, "%s:%d " x, __FILE__, __LINE__, __VA_ARGS__ ); } while (0) ++#else ++#define debugmessage(x, ...) ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++extern "C" { ++ ++ int hipSetDeviceFromC(int n) { ++ ++ hipError_t hiperr = hipSetDevice(n); ++ if (hiperr != hipSuccess) { ++ errormessage("Error in hipSetDevice: %s\n",hipGetErrorString(hiperr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int hipMallocFromC(intptr_t *a, size_t width_height) { ++ ++ hipError_t hiperr = hipMalloc((void **) a, width_height); ++#ifdef DEBUG_HIP ++ printf("HIP Malloc, pointer address: %p, size: %d \n", *a, width_height); ++#endif ++ if (hiperr != hipSuccess) { ++ errormessage("Error in hipMalloc: %s\n",hipGetErrorString(hiperr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int hipFreeFromC(intptr_t *a) { ++#ifdef DEBUG_HIP ++ printf("HIP Free, pointer address: %p \n", a); ++#endif ++ hipError_t hiperr = hipFree(a); ++ ++ if (hiperr != hipSuccess) { ++ errormessage("Error in hipFree: %s\n",hipGetErrorString(hiperr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int hipMemcpyFromC(intptr_t *dest, intptr_t *src, size_t count, int dir) { ++ ++ hipError_t hiperr = hipMemcpy( dest, src, count, (hipMemcpyKind)dir); ++ if (hiperr != hipSuccess) { ++ errormessage("Error in hipMemcpy: %s\n",hipGetErrorString(hiperr)); ++ return 0; ++ } ++ return 1; ++ } ++ ++ int hipMemcpyDeviceToDeviceFromC(void) { ++ int val = (int)hipMemcpyDeviceToDevice; ++ return val; ++ } ++ int hipMemcpyHostToDeviceFromC(void) { ++ int val = (int)hipMemcpyHostToDevice; ++ return val; ++ } ++ int hipMemcpyDeviceToHostFromC(void) { ++ int val = (int)hipMemcpyDeviceToHost; ++ return val; ++ } ++ int hipHostRegisterDefaultFromC(void) { ++ int val = (int)hipHostRegisterDefault; ++ return val; ++ } ++ int hipHostRegisterPortableFromC(void) { ++ int val = (int)hipHostRegisterPortable; ++ return val; ++ } ++ int hipHostRegisterMappedFromC(void) { ++ int val = (int)hipHostRegisterMapped; ++ return val; ++ } ++ ++} ++#endif /* TEST_AMD_GPU == 1 */ +diff -ruN elpa-new_release_2021.11.001/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90 elpa-new_release_2021.11.001_ok/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90 +--- elpa-new_release_2021.11.001/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/GPU/test_gpu_vendor_agnostic_layer.F90 2022-01-26 10:10:58.329439000 +0100 +@@ -0,0 +1,357 @@ ++#if 0 ++! Copyright 2021, A. Marek, MPCDF ++! ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! This particular source code file contains additions, changes and ++! enhancements authored by Intel Corporation which is not part of ++! the ELPA consortium. ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++#endif ++ ++ ++#include "config-f90.h" ++module test_gpu ++ !use precision_for_tests ++ use precision_for_tests ++ use iso_c_binding ++!#if TEST_INTEL_GPU == 1 ++! use mkl_offload ++!#endif ++ integer(kind=c_int), parameter :: nvidia_gpu = 1 ++ integer(kind=c_int), parameter :: amd_gpu = 2 ++ integer(kind=c_int), parameter :: intel_gpu = 3 ++ integer(kind=c_int), parameter :: no_gpu = -1 ++ integer(kind=c_int) :: use_gpu_vendor ++ integer(kind=c_int) :: gpuHostRegisterDefault ++ integer(kind=c_int) :: gpuMemcpyHostToDevice ++ integer(kind=c_int) :: gpuMemcpyDeviceToHost ++ integer(kind=c_int) :: gpuMemcpyDeviceToDevice ++ integer(kind=c_int) :: gpuHostRegisterMapped ++ integer(kind=c_int) :: gpuHostRegisterPortable ++ ++ integer(kind=c_intptr_t), parameter :: size_of_double_real = 8_rk8 ++#ifdef WANT_SINGLE_PRECISION_REAL ++ integer(kind=c_intptr_t), parameter :: size_of_single_real = 4_rk4 ++#endif ++ ++ integer(kind=c_intptr_t), parameter :: size_of_double_complex = 16_ck8 ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ integer(kind=c_intptr_t), parameter :: size_of_single_complex = 8_ck4 ++#endif ++ ++ interface gpu_memcpy ++ module procedure gpu_memcpy_intptr ++ module procedure gpu_memcpy_cptr ++ module procedure gpu_memcpy_mixed ++ end interface ++ ++ interface gpu_malloc ++ module procedure gpu_malloc_intptr ++ module procedure gpu_malloc_cptr ++ end interface ++ ++ interface gpu_free ++ module procedure gpu_free_intptr ++ module procedure gpu_free_cptr ++ end interface ++ ++ contains ++ function gpu_vendor(set_vendor) result(vendor) ++ use precision_for_tests ++ implicit none ++ integer(kind=c_int) :: vendor ++ integer(kind=c_int), intent(in) :: set_vendor ++ ! default ++ vendor = no_gpu ++ if (set_vendor == nvidia_gpu) then ++ vendor = nvidia_gpu ++ endif ++ if (set_vendor == amd_gpu) then ++ vendor = amd_gpu ++ endif ++!#if TEST_INTEL_GPU == 1 ++! vendor = intel_gpu ++!#endif ++ use_gpu_vendor = vendor ++ return ++ end function ++ ++ subroutine set_gpu_parameters ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ cudaMemcpyHostToDevice = cuda_memcpyHostToDevice() ++ gpuMemcpyHostToDevice = cudaMemcpyHostToDevice ++ cudaMemcpyDeviceToHost = cuda_memcpyDeviceToHost() ++ gpuMemcpyDeviceToHost = cudaMemcpyDeviceToHost ++ cudaMemcpyDeviceToDevice = cuda_memcpyDeviceToDevice() ++ gpuMemcpyDeviceToDevice = cudaMemcpyDeviceToDevice ++ cudaHostRegisterPortable = cuda_hostRegisterPortable() ++ gpuHostRegisterPortable = cudaHostRegisterPortable ++ cudaHostRegisterMapped = cuda_hostRegisterMapped() ++ gpuHostRegisterMapped = cudaHostRegisterMapped ++ cudaHostRegisterDefault = cuda_hostRegisterDefault() ++ gpuHostRegisterDefault = cudaHostRegisterDefault ++ endif ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ hipMemcpyHostToDevice = hip_memcpyHostToDevice() ++ gpuMemcpyHostToDevice = hipMemcpyHostToDevice ++ hipMemcpyDeviceToHost = hip_memcpyDeviceToHost() ++ gpuMemcpyDeviceToHost = hipMemcpyDeviceToHost ++ hipMemcpyDeviceToDevice = hip_memcpyDeviceToDevice() ++ gpuMemcpyDeviceToDevice = hipMemcpyDeviceToDevice ++ hipHostRegisterPortable = hip_hostRegisterPortable() ++ gpuHostRegisterPortable = hipHostRegisterPortable ++ hipHostRegisterMapped = hip_hostRegisterMapped() ++ gpuHostRegisterMapped = hipHostRegisterMapped ++ hipHostRegisterDefault = hip_hostRegisterDefault() ++ gpuHostRegisterDefault = hipHostRegisterDefault ++ endif ++#endif ++ ++ end subroutine ++ ++ function gpu_malloc_intptr(array, elements) result(success) ++ use, intrinsic :: iso_c_binding ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ integer(kind=C_intptr_T) :: array ++ integer(kind=c_intptr_t), intent(in) :: elements ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ success = cuda_malloc_intptr(array, elements) ++ endif ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ success = hip_malloc_intptr(array, elements) ++ endif ++#endif ++ ++ end function ++ ++ function gpu_malloc_cptr(array, elements) result(success) ++ use, intrinsic :: iso_c_binding ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ type(c_ptr) :: array ++ integer(kind=c_intptr_t), intent(in) :: elements ++ logical :: success ++ success = .false. ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ success = cuda_malloc_cptr(array, elements) ++ endif ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ success = hip_malloc_cptr(array, elements) ++ endif ++#endif ++ ++ end function ++ ++ function gpu_memcpy_intptr(dst, src, size, dir) result(success) ++ use, intrinsic :: iso_c_binding ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ integer(kind=C_intptr_t) :: dst ++ integer(kind=C_intptr_t) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ success = cuda_memcpy_intptr(dst, src, size, dir) ++ endif ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ success = hip_memcpy_intptr(dst, src, size, dir) ++ endif ++#endif ++ ++ end function ++ ++ function gpu_memcpy_cptr(dst, src, size, dir) result(success) ++ use, intrinsic :: iso_c_binding ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ type(c_ptr) :: dst ++ type(c_ptr) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ success = cuda_memcpy_cptr(dst, src, size, dir) ++ endif ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ success = hip_memcpy_cptr(dst, src, size, dir) ++ endif ++#endif ++ ++ end function ++ ++ function gpu_memcpy_mixed(dst, src, size, dir) result(success) ++ use, intrinsic :: iso_c_binding ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ type(c_ptr) :: dst ++ integer(kind=C_intptr_t) :: src ++ integer(kind=c_intptr_t), intent(in) :: size ++ integer(kind=C_INT), intent(in) :: dir ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ success = cuda_memcpy_mixed(dst, src, size, dir) ++ endif ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ success = hip_memcpy_mixed(dst, src, size, dir) ++ endif ++#endif ++ ++ end function ++ ++ function gpu_free_intptr(a) result(success) ++ use, intrinsic :: iso_c_binding ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ integer(kind=c_intptr_t) :: a ++ ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ success = cuda_free_intptr(a) ++ endif ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ success = hip_free_intptr(a) ++ endif ++#endif ++ ++ end function ++ ++ function gpu_free_cptr(a) result(success) ++ use, intrinsic :: iso_c_binding ++#ifdef WITH_NVIDIA_GPU_VERSION ++ use test_cuda_functions ++#endif ++#ifdef WITH_AMD_GPU_VERSION ++ use test_hip_functions ++#endif ++ implicit none ++ type(c_ptr) :: a ++ ++ logical :: success ++ ++#ifdef WITH_NVIDIA_GPU_VERSION ++ if (use_gpu_vendor == nvidia_gpu) then ++ success = cuda_free_cptr(a) ++ endif ++#endif ++ ++#ifdef WITH_AMD_GPU_VERSION ++ if (use_gpu_vendor == amd_gpu) then ++ success = hip_free_cptr(a) ++ endif ++#endif ++ ++ end function ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/mod_tests_blas_interfaces.F90 elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_blas_interfaces.F90 +--- elpa-new_release_2021.11.001/examples/shared/mod_tests_blas_interfaces.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_blas_interfaces.F90 2022-01-26 10:10:58.330923000 +0100 +@@ -0,0 +1,53 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! https://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! This file was written by A. Marek, MPCDF ++ ++#include "config-f90.h" ++#define PRECISION_MODULE precision_for_tests ++module tests_blas_interfaces ++ use iso_c_binding ++ use precision_for_tests ++ ++ implicit none ++ ++#include "../../src/helpers/fortran_blas_interfaces.F90" ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/mod_tests_scalapack_interfaces.F90 elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_scalapack_interfaces.F90 +--- elpa-new_release_2021.11.001/examples/shared/mod_tests_scalapack_interfaces.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/mod_tests_scalapack_interfaces.F90 2022-01-26 10:10:58.331765000 +0100 +@@ -0,0 +1,56 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! https://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! This file was written by A. Marek, MPCDF ++ ++ ++#include "config-f90.h" ++#define PRECISION_MODULE precision_for_tests ++module tests_scalapack_interfaces ++ use iso_c_binding ++ use precision_for_tests ++ ++ implicit none ++ ++#include "../../src/helpers/fortran_scalapack_interfaces.F90" ++ ++end module ++ ++ +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_analytic.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_analytic.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_analytic.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_analytic.F90 2022-01-26 10:10:58.332553000 +0100 +@@ -0,0 +1,204 @@ ++! (c) Copyright Pavel Kus, 2017, MPCDF ++! ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++ ++#include "../Fortran/assert.h" ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++module test_analytic ++ ++ use test_util ++#ifdef HAVE_DETAILED_TIMINGS ++ use ftimings ++#else ++ use timings_dummy ++#endif ++ use precision_for_tests ++ ++ interface prepare_matrix_analytic ++ module procedure prepare_matrix_analytic_complex_double ++ module procedure prepare_matrix_analytic_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure prepare_matrix_analytic_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure prepare_matrix_analytic_complex_single ++#endif ++ end interface ++ ++ interface check_correctness_analytic ++ module procedure check_correctness_analytic_complex_double ++ module procedure check_correctness_analytic_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure check_correctness_analytic_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure check_correctness_analytic_complex_single ++#endif ++ end interface ++ ++ ++ interface print_matrix ++ module procedure print_matrix_complex_double ++ module procedure print_matrix_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure print_matrix_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure print_matrix_complex_single ++#endif ++ end interface ++ ++ TEST_INT_TYPE, parameter, private :: num_primes = 3 ++#ifdef BUILD_FUGAKU ++ TEST_INT_TYPE, private :: primes(num_primes) ++#else ++ TEST_INT_TYPE, parameter, private :: primes(num_primes) = (/2,3,5/) ++#endif ++ ++ TEST_INT_TYPE, parameter, private :: ANALYTIC_MATRIX = 0 ++ TEST_INT_TYPE, parameter, private :: ANALYTIC_EIGENVECTORS = 1 ++ TEST_INT_TYPE, parameter, private :: ANALYTIC_EIGENVALUES = 2 ++ ++ contains ++ ++ function decompose(num, decomposition) result(possible) ++ implicit none ++ TEST_INT_TYPE, intent(in) :: num ++ TEST_INT_TYPE, intent(out) :: decomposition(num_primes) ++ logical :: possible ++ TEST_INT_TYPE :: reminder, prime, prime_id ++ ++#ifdef BUILD_FUGAKU ++ primes(1) = 2 ++ primes(2) = 3 ++ primes(3) = 5 ++#endif ++ decomposition = 0 ++ possible = .true. ++ reminder = num ++ do prime_id = 1, num_primes ++ prime = primes(prime_id) ++ do while (MOD(reminder, prime) == 0) ++ decomposition(prime_id) = decomposition(prime_id) + 1 ++ reminder = reminder / prime ++ end do ++ end do ++ if(reminder > 1) then ++ possible = .false. ++ end if ++ end function ++ ++ function compose(decomposition) result(num) ++ implicit none ++ TEST_INT_TYPE, intent(in) :: decomposition(num_primes) ++ TEST_INT_TYPE :: num, prime_id ++ ++ num = 1; ++#ifdef BUILD_FUGAKU ++ primes(1) = 2 ++ primes(2) = 3 ++ primes(3) = 5 ++#endif ++ do prime_id = 1, num_primes ++ num = num * primes(prime_id) ** decomposition(prime_id) ++ end do ++ end function ++ ++ ++#include "../../src/general/prow_pcol.F90" ++#include "../../src/general/map_global_to_local.F90" ++ ++ ++#define COMPLEXCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_analytic_template.F90" ++#undef DOUBLE_PRECISION ++#undef COMPLEXCASE ++ ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ ++#define COMPLEXCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_analytic_template.F90" ++#undef SINGLE_PRECISION ++#undef COMPLEXCASE ++ ++#endif /* WANT_SINGLE_PRECISION_COMPLEX */ ++ ++#define REALCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_analytic_template.F90" ++#undef DOUBLE_PRECISION ++#undef REALCASE ++ ++#ifdef WANT_SINGLE_PRECISION_REAL ++ ++#define REALCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_analytic_template.F90" ++#undef SINGLE_PRECISION ++#undef REALCASE ++ ++#endif /* WANT_SINGLE_PRECISION_REAL */ ++ ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_analytic_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_analytic_template.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_analytic_template.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_analytic_template.F90 2022-01-26 10:10:58.333552000 +0100 +@@ -0,0 +1,701 @@ ++! (c) Copyright Pavel Kus, 2017, MPCDF ++! ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++ ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++ ++ subroutine prepare_matrix_analytic_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, a, nblk, myid, np_rows, np_cols, my_prow, my_pcol, print_times) ++ use precision_for_tests ++ ++ implicit none ++ TEST_INT_TYPE, intent(in) :: na, nblk, myid, np_rows, np_cols, my_prow, my_pcol ++ MATH_DATATYPE(kind=REAL_DATATYPE), intent(inout):: a(:,:) ++ logical, optional :: print_times ++ logical :: print_timer ++ TEST_INT_TYPE :: globI, globJ, locI, locJ, pi, pj, levels(num_primes) ++ integer(kind=c_int) :: loc_I, loc_J, p_i, p_j ++#ifdef HAVE_DETAILED_TIMINGS ++ type(timer_t) :: timer ++#else ++ type(timer_dummy_t) :: timer ++#endif ++ ++ call timer%enable() ++ call timer%start("prepare_matrix_analytic") ++ ++ print_timer = .true. ++ ++ if (present(print_times)) then ++ print_timer = print_times ++ endif ++ ++ ! for debug only, do it systematicaly somehow ... unit tests ++ call check_module_sanity_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(myid) ++ ++ if(.not. decompose(na, levels)) then ++ if(myid == 0) then ++ print *, "Analytic test can be run only with matrix sizes of the form 2^n * 3^m * 5^o" ++ stop 1 ++ end if ++ end if ++ ++ call timer%start("loop") ++ do globI = 1, na ++ ++ p_i = prow(int(globI,kind=c_int), int(nblk,kind=c_int), int(np_rows,kind=c_int)) ++ pi = int(p_i,kind=INT_TYPE) ++ if (my_prow .ne. pi) cycle ++ ++ do globJ = 1, na ++ ++ p_j = pcol(int(globJ,kind=c_int), int(nblk,kind=c_int), int(np_cols,kind=c_int)) ++ pj = int(p_j,kind=INT_TYPE) ++ if (my_pcol .ne. pj) cycle ++ ++ if(map_global_array_index_to_local_index(int(globI,kind=c_int), int(globJ,kind=c_int), loc_I, loc_J, & ++ int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then ++ locI = int(loc_i,kind=INT_TYPE) ++ locJ = int(loc_j,kind=INT_TYPE) ++ call timer%start("evaluation") ++ a(locI, locJ) = analytic_matrix_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, globI, globJ) ++ call timer%stop("evaluation") ++ else ++ print *, "Warning ... error in preparation loop of the analytic test" ++ end if ++ end do ++ end do ++ call timer%stop("loop") ++ ++ call timer%stop("prepare_matrix_analytic") ++ if(myid == 0 .and. print_timer) then ++ call timer%print("prepare_matrix_analytic") ++ end if ++ call timer%free() ++ end subroutine ++ ++ function check_correctness_analytic_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, nev, ev, z, nblk, myid, np_rows, np_cols, my_prow, my_pcol, check_all_evals, & ++ check_eigenvectors, print_times) result(status) ++ use precision_for_tests ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE, intent(in) :: na, nev, nblk, myid, np_rows, & ++ np_cols, my_prow, my_pcol ++ TEST_INT_TYPE :: status ++ TEST_INT_MPI_TYPE :: mpierr ++ MATH_DATATYPE(kind=rck), intent(inout) :: z(:,:) ++ real(kind=rk), intent(inout) :: ev(:) ++ logical, intent(in) :: check_all_evals, check_eigenvectors ++ ++ TEST_INT_TYPE :: globI, globJ, locI, locJ, & ++ levels(num_primes) ++ integer(kind=c_int) :: loc_I, loc_J ++ real(kind=rk) :: diff, max_z_diff, max_ev_diff, & ++ glob_max_z_diff, max_curr_z_diff ++#ifdef DOUBLE_PRECISION ++ real(kind=rk), parameter :: tol_eigenvalues = 5e-14_rk8 ++ real(kind=rk), parameter :: tol_eigenvectors = 6e-11_rk8 ++#endif ++#ifdef SINGLE_PRECISION ++ ! tolerance needs to be very high due to qr tests ++ ! it should be distinguished somehow! ++ real(kind=rk), parameter :: tol_eigenvalues = 7e-6_rk4 ++ real(kind=rk), parameter :: tol_eigenvectors = 4e-3_rk4 ++#endif ++ real(kind=rk) :: computed_ev, expected_ev ++ MATH_DATATYPE(kind=rck) :: computed_z, expected_z ++ ++ MATH_DATATYPE(kind=rck) :: max_value_for_normalization, & ++ computed_z_on_max_position, & ++ normalization_quotient ++ MATH_DATATYPE(kind=rck) :: max_values_array(np_rows * np_cols), & ++ corresponding_exact_value ++ integer(kind=c_int) :: max_value_idx, rank_with_max, & ++ rank_with_max_reduced, & ++ num_checked_evals ++ integer(kind=c_int) :: max_idx_array(np_rows * np_cols), & ++ rank ++ logical, optional :: print_times ++ logical :: print_timer ++ ++#ifdef HAVE_DETAILED_TIMINGS ++ type(timer_t) :: timer ++#else ++ type(timer_dummy_t) :: timer ++#endif ++ ++ call timer%enable() ++ call timer%start("check_correctness_analytic") ++ ++ ++ print_timer = .true. ++ if (present(print_times)) then ++ print_timer = print_times ++ endif ++ ++ if(.not. decompose(na, levels)) then ++ print *, "can not decomopse matrix size" ++ stop 1 ++ end if ++ ++ if(check_all_evals) then ++ num_checked_evals = na ++ else ++ num_checked_evals = nev ++ endif ++ !call print_matrix(myid, na, z, "z") ++ max_z_diff = 0.0_rk ++ max_ev_diff = 0.0_rk ++ call timer%start("loop_eigenvalues") ++ do globJ = 1, num_checked_evals ++ computed_ev = ev(globJ) ++ call timer%start("evaluation") ++ expected_ev = analytic_eigenvalues_real_& ++ &PRECISION& ++ &(na, globJ) ++ call timer%stop("evaluation") ++ diff = abs(computed_ev - expected_ev) ++ max_ev_diff = max(diff, max_ev_diff) ++ end do ++ call timer%stop("loop_eigenvalues") ++ ++ call timer%start("loop_eigenvectors") ++ do globJ = 1, nev ++ max_curr_z_diff = 0.0_rk ++ ++ ! eigenvectors are unique up to multiplication by scalar (complex in complex case) ++ ! to be able to compare them with analytic, we have to normalize them somehow ++ ! we will find a value in computed eigenvector with highest absolut value and enforce ++ ! such multiple of computed eigenvector, that the value on corresponding position is the same ++ ! as an corresponding value in the analytical eigenvector ++ ++ ! find the maximal value in the local part of given eigenvector (with index globJ) ++ max_value_for_normalization = 0.0_rk ++ max_value_idx = -1 ++ do globI = 1, na ++ if(map_global_array_index_to_local_index(int(globI,kind=c_int), int(globJ,kind=c_int), loc_I, loc_J, & ++ int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then ++ locI = int(loc_I,kind=INT_TYPE) ++ locJ = int(loc_J,kind=INT_TYPE) ++ computed_z = z(locI, locJ) ++ if(abs(computed_z) > abs(max_value_for_normalization)) then ++ max_value_for_normalization = computed_z ++ max_value_idx = int(globI,kind=c_int) ++ end if ++ end if ++ end do ++ ++ ! find the global maximum and its position. From technical reasons (looking for a ++ ! maximum of complex number), it is not so easy to do it nicely. Therefore we ++ ! communicate local maxima to mpi rank 0 and resolve there. If we wanted to do ++ ! it without this, it would be tricky.. question of uniquness - two complex numbers ++ ! with the same absolut values, but completely different... ++#ifdef WITH_MPI ++ call MPI_Gather(max_value_for_normalization, 1_MPI_KIND, MPI_MATH_DATATYPE_PRECISION, & ++ max_values_array, 1_MPI_KIND, MPI_MATH_DATATYPE_PRECISION, 0_MPI_KIND, & ++ int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++ call MPI_Gather(max_value_idx, 1_MPI_KIND, MPI_INT, max_idx_array, 1_MPI_KIND, MPI_INT, & ++ 0_MPI_KIND, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++ max_value_for_normalization = 0.0_rk ++ max_value_idx = -1 ++ do rank = 1, np_cols * np_rows ++ if(abs(max_values_array(rank)) > abs(max_value_for_normalization)) then ++ max_value_for_normalization = max_values_array(rank) ++ max_value_idx = max_idx_array(rank) ++ end if ++ end do ++ call MPI_Bcast(max_value_for_normalization, 1_MPI_KIND, MPI_MATH_DATATYPE_PRECISION, & ++ 0_MPI_KIND, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++ call MPI_Bcast(max_value_idx, 1_MPI_KIND, MPI_INT, 0_MPI_KIND, & ++ int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++#endif ++ ! we decided what the maximum computed value is. Calculate expected value on the same ++ if(abs(max_value_for_normalization) < 0.0001_rk) then ++ if(myid == 0) print *, 'Maximal value in eigenvector too small :', max_value_for_normalization ++ status =1 ++ return ++ end if ++ call timer%start("evaluation_helper") ++ corresponding_exact_value = analytic_eigenvectors_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, int(max_value_idx,kind=INT_TYPE), globJ) ++ call timer%stop("evaluation_helper") ++ normalization_quotient = corresponding_exact_value / max_value_for_normalization ++ ! write(*,*) "normalization q", normalization_quotient ++ ++ ! compare computed and expected eigenvector values, but take into account normalization quotient ++ do globI = 1, na ++ if(map_global_array_index_to_local_index(int(globI,kind=c_int), int(globJ,kind=c_int), loc_I, loc_J, & ++ int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then ++ locI = int(loc_I,kind=INT_TYPE) ++ locJ = int(loc_J,kind=INT_TYPE) ++ computed_z = z(locI, locJ) ++ call timer%start("evaluation") ++ expected_z = analytic_eigenvectors_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, globI, globJ) ++ call timer%stop("evaluation") ++ max_curr_z_diff = max(abs(normalization_quotient * computed_z - expected_z), max_curr_z_diff) ++ end if ++ end do ++ ! we have max difference of one of the eigenvectors, update global ++ max_z_diff = max(max_z_diff, max_curr_z_diff) ++ end do !globJ ++ call timer%stop("loop_eigenvectors") ++ ++#ifdef WITH_MPI ++ call mpi_allreduce(max_z_diff, glob_max_z_diff, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, & ++ int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++#else ++ glob_max_z_diff = max_z_diff ++#endif ++ if(myid == 0) print *, 'Maximum error in eigenvalues :', max_ev_diff ++ if (check_eigenvectors) then ++ if(myid == 0) print *, 'Maximum error in eigenvectors :', glob_max_z_diff ++ endif ++ ++ status = 0 ++ if (nev .gt. 2) then ++ if (max_ev_diff .gt. tol_eigenvalues .or. max_ev_diff .eq. 0.0_rk) status = 1 ++ if (check_eigenvectors) then ++ if (glob_max_z_diff .gt. tol_eigenvectors .or. glob_max_z_diff .eq. 0.0_rk) status = 1 ++ endif ++ else ++ if (max_ev_diff .gt. tol_eigenvalues) status = 1 ++ if (check_eigenvectors) then ++ if (glob_max_z_diff .gt. tol_eigenvectors) status = 1 ++ endif ++ endif ++ ++ call timer%stop("check_correctness_analytic") ++ if(myid == 0 .and. print_timer) then ++ call timer%print("check_correctness_analytic") ++ end if ++ call timer%free() ++ end function ++ ++ ++ function analytic_matrix_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j) result(element) ++ use precision_for_tests ++ ++ implicit none ++ TEST_INT_TYPE, intent(in) :: na, i, j ++ MATH_DATATYPE(kind=REAL_DATATYPE) :: element ++ ++ element = analytic_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j, ANALYTIC_MATRIX) ++ ++ end function ++ ++ function analytic_eigenvectors_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j) result(element) ++ use precision_for_tests ++ ++ implicit none ++ TEST_INT_TYPE, intent(in) :: na, i, j ++ MATH_DATATYPE(kind=REAL_DATATYPE) :: element ++ ++ element = analytic_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j, ANALYTIC_EIGENVECTORS) ++ ++ end function ++ ++ function analytic_eigenvalues_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i) result(element) ++ use precision_for_tests ++ ++ implicit none ++ TEST_INT_TYPE, intent(in) :: na, i ++ real(kind=REAL_DATATYPE) :: element ++ ++ element = analytic_real_& ++ &PRECISION& ++ &(na, i, i, ANALYTIC_EIGENVALUES) ++ ++ end function ++ ++ function analytic_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j, what) result(element) ++ use precision_for_tests ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE, intent(in) :: na, i, j, what ++ MATH_DATATYPE(kind=rck) :: element, mat2x2(2,2), mat(5,5) ++ real(kind=rk) :: a, am, amp ++ TEST_INT_TYPE :: levels(num_primes) ++ TEST_INT_TYPE :: ii, jj, m, prime_id, prime, total_level, level ++ ++ real(kind=rk), parameter :: s = 0.5_rk ++ real(kind=rk), parameter :: c = 0.86602540378443864679_rk ++ real(kind=rk), parameter :: sq2 = 1.4142135623730950488_rk ++ ++ real(kind=rk), parameter :: largest_ev = 2.0_rk ++ ++ assert(i <= na) ++ assert(j <= na) ++ assert(i >= 0) ++ assert(j >= 0) ++ assert(decompose(na, levels)) ++ ! go to zero-based indexing ++ ii = i - 1 ++ jj = j - 1 ++ if (na .gt. 2) then ++ a = exp(log(largest_ev)/(na-1)) ++ else ++ a = exp(log(largest_ev)/(1)) ++ endif ++ ++ element = 1.0_rck ++#ifdef COMPLEXCASE ++ element = (1.0_rk, 0.0_rk) ++#endif ++ total_level = 0 ++ am = a ++#ifdef BUILD_FUGAKU ++ primes(1) = 2 ++ primes(2) = 3 ++ primes(3) = 5 ++#endif ++ do prime_id = 1,num_primes ++ prime = primes(prime_id) ++ do level = 1, levels(prime_id) ++ amp = am**(prime-1) ++ total_level = total_level + 1 ++ if(what == ANALYTIC_MATRIX) then ++#ifdef REALCASE ++#ifndef FUGAKU ++ mat2x2 = reshape((/ c*c + amp * s*s, (amp - 1.0_rk) * s*c, & ++ (amp - 1.0_rk) * s*c, s*s + amp * c*c /), & ++ (/2, 2/), order=(/2,1/)) ++#endif ++#endif ++#ifdef COMPLEXCASE ++#ifndef FUGAKU ++ mat2x2 = reshape((/ 0.5_rck * (amp + 1.0_rck) * (1.0_rk, 0.0_rk), sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, 1.0_rk), & ++ sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, -1.0_rk), 0.5_rck * (amp + 1.0_rck) * (1.0_rk, 0.0_rk) /), & ++ (/2, 2/), order=(/2,1/)) ++! intel 2018 does not reshape correctly (one would have to specify order=(/1,2/) ++! until this is resolved, I resorted to the following ++ mat2x2(1,2) = sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, 1.0_rk) ++ mat2x2(2,1) = sq2/4.0_rk * (amp - 1.0_rk) * (1.0_rk, -1.0_rk) ++#endif ++#endif ++ else if(what == ANALYTIC_EIGENVECTORS) then ++#ifdef REALCASE ++#ifndef FUGAKU ++ mat2x2 = reshape((/ c, s, & ++ -s, c /), & ++ (/2, 2/), order=(/2,1/)) ++! intel 2018 does not reshape correctly (one would have to specify order=(/1,2/) ++! until this is resolved, I resorted to the following ++ mat2x2(1,2) = s ++ mat2x2(2,1) = -s ++#endif ++#endif ++#ifdef COMPLEXCASE ++#ifndef FUGAKU ++ mat2x2 = reshape((/ -sq2/2.0_rck * (1.0_rk, 0.0_rk), -sq2/2.0_rck * (1.0_rk, 0.0_rk), & ++ 0.5_rk * (1.0_rk, -1.0_rk), 0.5_rk * (-1.0_rk, 1.0_rk) /), & ++ (/2, 2/), order=(/2,1/)) ++! intel 2018 does not reshape correctly (one would have to specify order=(/1,2/) ++! until this is resolved, I resorted to the following ++ mat2x2(1,2) = -sq2/2.0_rck * (1.0_rk, 0.0_rk) ++ mat2x2(2,1) = 0.5_rk * (1.0_rk, -1.0_rk) ++#endif ++#endif ++ else if(what == ANALYTIC_EIGENVALUES) then ++#ifndef FUGAKU ++ mat2x2 = reshape((/ 1.0_rck, 0.0_rck, & ++ 0.0_rck, amp /), & ++ (/2, 2/), order=(/2,1/)) ++#endif ++ else ++ assert(.false.) ++ end if ++ ++ mat = 0.0_rck ++ if(prime == 2) then ++#ifndef BUILD_FUGAKU ++ mat(1:2, 1:2) = mat2x2 ++#endif ++ else if(prime == 3) then ++#ifndef BUILD_FUGAKU ++ mat((/1,3/),(/1,3/)) = mat2x2 ++#endif ++ if(what == ANALYTIC_EIGENVECTORS) then ++ mat(2,2) = 1.0_rck ++ else ++ mat(2,2) = am ++ end if ++ else if(prime == 5) then ++#ifndef BUILD_FUGAKU ++ mat((/1,5/),(/1,5/)) = mat2x2 ++#endif ++ if(what == ANALYTIC_EIGENVECTORS) then ++ mat(2,2) = 1.0_rck ++ mat(3,3) = 1.0_rck ++ mat(4,4) = 1.0_rck ++ else ++ mat(2,2) = am ++ mat(3,3) = am**2 ++ mat(4,4) = am**3 ++ end if ++ else ++ assert(.false.) ++ end if ++ ++ ! write(*,*) "calc value, elem: ", element, ", mat: ", mod(ii,2), mod(jj,2), mat(mod(ii,2), mod(jj,2)), "am ", am ++ ! write(*,*) " matrix mat", mat ++ element = element * mat(mod(ii,prime) + 1, mod(jj,prime) + 1) ++ ii = ii / prime ++ jj = jj / prime ++ ++ am = am**prime ++ end do ++ end do ++ !write(*,*) "returning value ", element ++ end function ++ ++ ++ subroutine print_matrix_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(myid, na, mat, mat_name) ++ use precision_for_tests ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE, intent(in) :: myid, na ++ character(len=*), intent(in) :: mat_name ++ MATH_DATATYPE(kind=rck) :: mat(na, na) ++ TEST_INT_TYPE :: i,j ++ character(len=20) :: na_str ++ ++ if(myid .ne. 0) & ++ return ++ write(*,*) "Matrix: "//trim(mat_name) ++ write(na_str, *) na ++ do i = 1, na ++#ifdef REALCASE ++ write(*, '('//trim(na_str)//'f8.3)') mat(i, :) ++#endif ++#ifdef COMPLEXCASE ++ write(*,'('//trim(na_str)//'(A,f8.3,A,f8.3,A))') ('(', real(mat(i,j)), ',', aimag(mat(i,j)), ')', j=1,na) ++#endif ++ end do ++ write(*,*) ++ end subroutine ++ ++ ++ subroutine check_matrices_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(myid, na) ++ use precision_for_tests ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE, intent(in) :: myid, na ++ MATH_DATATYPE(kind=rck) :: A(na, na), S(na, na), L(na, na), res(na, na) ++ TEST_INT_TYPE :: i, j, decomposition(num_primes) ++ ++ real(kind=rk) :: err ++#ifdef DOUBLE_PRECISION ++ real(kind=rk), parameter :: TOL = 1e-8 ++#endif ++#ifdef SINGLE_PRECISION ++ real(kind=rk), parameter :: TOL = 1e-4 ++#endif ++ ++ assert(decompose(na, decomposition)) ++ ++ do i = 1, na ++ do j = 1, na ++ A(i,j) = analytic_matrix_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j) ++ S(i,j) = analytic_eigenvectors_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j) ++ L(i,j) = analytic_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(na, i, j, ANALYTIC_EIGENVALUES) ++ end do ++ end do ++ ++ res = matmul(A,S) - matmul(S,L) ++ err = maxval(abs(res)) ++ ++ if(err > TOL) then ++ print *, "WARNING: sanity test in module analytic failed, error is ", err ++ end if ++ ++ if(.false.) then ++ !if(na == 2 .or. na == 5) then ++ call print_matrix(myid, na, A, "A") ++ call print_matrix(myid, na, S, "S") ++ call print_matrix(myid, na, L, "L") ++ ++ call print_matrix(myid, na, matmul(A,S), "AS") ++ call print_matrix(myid, na, matmul(S,L), "SL") ++ ++ call print_matrix(myid, na, res , "res") ++ end if ++ ++ end subroutine ++ ++ subroutine check_module_sanity_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(myid) ++ use precision_for_tests ++ ++ implicit none ++ TEST_INT_TYPE, intent(in) :: myid ++ TEST_INT_TYPE :: decomposition(num_primes), i ++#ifndef BUILD_FUGAKU ++ TEST_INT_TYPE, parameter :: check_sizes(7) = (/2, 3, 5, 6, 10, 25, 150/) ++#else ++ TEST_INT_TYPE :: check_sizes(7) ++#endif ++ if(myid == 0) print *, "Checking test_analytic module sanity.... " ++#ifndef BUILD_FUGAKU ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++ assert(decompose(1500_lik, decomposition)) ++#else ++ assert(decompose(1500_ik, decomposition)) ++#endif ++ assert(all(decomposition == (/2,1,3/))) ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++ assert(decompose(6_lik,decomposition)) ++#else ++ assert(decompose(6_ik,decomposition)) ++#endif ++ assert(all(decomposition == (/1,1,0/))) ++ ++#ifdef BUILD_FUGAKU ++ check_sizes(1) = 2 ++ check_sizes(2) = 3 ++ check_sizes(3) = 5 ++ check_sizes(4) = 10 ++ check_sizes(5) = 25 ++ check_sizes(6) = 150 ++#endif ++ do i =1, size(check_sizes) ++ call check_matrices_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &(myid, check_sizes(i)) ++ end do ++ ++ if(myid == 0) print *, "Checking test_analytic module sanity.... DONE" ++#endif ++ end subroutine +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_blacs_infrastructure.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_blacs_infrastructure.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_blacs_infrastructure.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_blacs_infrastructure.F90 2022-01-26 10:10:58.368066000 +0100 +@@ -0,0 +1,208 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#define TEST_C_INT_TYPE_PTR long int* ++#define TEST_C_INT_TYPE long int ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#define TEST_C_INT_TYPE_PTR int* ++#define TEST_C_INT_TYPE int ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#define TEST_C_INT_MPI_TYPE_PTR long int* ++#define TEST_C_INT_MPI_TYPE long int ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#define TEST_C_INT_MPI_TYPE_PTR int* ++#define TEST_C_INT_MPI_TYPE int ++#endif ++ ++module test_blacs_infrastructure ++ ++ contains ++ ++ !c> void set_up_blacsgrid_f(TEST_C_INT_TYPE mpi_comm_parent, TEST_C_INT_TYPE np_rows, ++ !c> TEST_C_INT_TYPE np_cols, char layout, ++ !c> TEST_C_INT_TYPE_PTR my_blacs_ctxt, TEST_C_INT_TYPE_PTR my_prow, ++ !c> TEST_C_INT_TYPE_PTR my_pcol); ++ subroutine set_up_blacsgrid(mpi_comm_parent, np_rows, np_cols, layout, & ++ my_blacs_ctxt, my_prow, my_pcol) bind(C, name="set_up_blacsgrid_f") ++ ++ use precision_for_tests ++ use test_util ++ use iso_c_binding ++ ++ implicit none ++ TEST_INT_TYPE, intent(in), value :: mpi_comm_parent, np_rows, np_cols ++#ifdef SXAURORA ++ character(len=1), intent(in) :: layout ++#else ++ character(kind=c_char), intent(in), value :: layout ++#endif ++ TEST_INT_TYPE, intent(out) :: my_blacs_ctxt, my_prow, my_pcol ++ ++#ifdef WITH_MPI ++ TEST_INT_TYPE :: np_rows_, np_cols_ ++#endif ++ ++ if (layout /= 'R' .and. layout /= 'C') then ++ print *, "layout must be 'R' or 'C'" ++ stop 1 ++ end if ++ ++ my_blacs_ctxt = mpi_comm_parent ++#ifdef WITH_MPI ++ call BLACS_Gridinit(my_blacs_ctxt, layout, np_rows, np_cols) ++ call BLACS_Gridinfo(my_blacs_ctxt, np_rows_, np_cols_, my_prow, my_pcol) ++ if (np_rows /= np_rows_) then ++ print *, "BLACS_Gridinfo returned different values for np_rows as set by BLACS_Gridinit" ++ stop 1 ++ endif ++ if (np_cols /= np_cols_) then ++ print *, "BLACS_Gridinfo returned different values for np_cols as set by BLACS_Gridinit" ++ stop 1 ++ endif ++#else ++ my_prow = 0 ++ my_pcol = 0 ++#endif ++ end subroutine ++ ++ subroutine set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, & ++ np_rows, np_cols, na_rows, & ++ na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ use elpa_utilities, only : error_unit ++ use test_util ++ use precision_for_tests ++ use tests_scalapack_interfaces ++ implicit none ++ ++ TEST_INT_TYPE, intent(in) :: na, nblk, my_prow, my_pcol, np_rows, & ++ np_cols, & ++ my_blacs_ctxt ++ TEST_INT_TYPE, intent(inout) :: info ++ TEST_INT_TYPE, intent(out) :: na_rows, na_cols, sc_desc(1:9) ++ ++#ifdef WITH_MPI ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ sc_desc(:) = 0 ++ ! determine the neccessary size of the distributed matrices, ++ ! we use the scalapack tools routine NUMROC ++ ++ na_rows = numroc(na, nblk, my_prow, 0_BLAS_KIND, np_rows) ++ na_cols = numroc(na, nblk, my_pcol, 0_BLAS_KIND, np_cols) ++ ++ ! set up the scalapack descriptor for the checks below ++ ! For ELPA the following restrictions hold: ++ ! - block sizes in both directions must be identical (args 4 a. 5) ++ ! - first row and column of the distributed matrix must be on ++ ! row/col 0/0 (arg 6 and 7) ++ ++ call descinit(sc_desc, na, na, nblk, nblk, 0_BLAS_KIND, 0_BLAS_KIND, & ++ my_blacs_ctxt, na_rows, info) ++ ++ if (info .ne. 0) then ++ write(error_unit,*) 'Error in BLACS descinit! info=',info ++ write(error_unit,*) 'Most likely this happend since you want to use' ++ write(error_unit,*) 'more MPI tasks than are possible for your' ++ write(error_unit,*) 'problem size (matrix size and blocksize)!' ++ write(error_unit,*) 'The blacsgrid can not be set up properly' ++ write(error_unit,*) 'Try reducing the number of MPI tasks...' ++ call MPI_ABORT(int(mpi_comm_world,kind=MPI_KIND), 1_MPI_KIND, mpierr) ++ endif ++#else /* WITH_MPI */ ++ na_rows = na ++ na_cols = na ++#endif /* WITH_MPI */ ++ ++ end subroutine ++ ++ !c> void set_up_blacs_descriptor_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nblk, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol, ++ !c> TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE_PTR na_rows, TEST_C_INT_TYPE_PTR na_cols, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE my_blacs_ctxt, ++ !c> TEST_C_INT_TYPE_PTR info); ++ subroutine set_up_blacs_descriptor_f(na, nblk, my_prow, my_pcol, & ++ np_rows, np_cols, na_rows, & ++ na_cols, sc_desc, & ++ my_blacs_ctxt, info) & ++ bind(C, name="set_up_blacs_descriptor_f") ++ ++ use iso_c_binding ++ implicit none ++ ++ ++ TEST_INT_TYPE, value :: na, nblk, my_prow, my_pcol, np_rows, & ++ np_cols, my_blacs_ctxt ++ TEST_INT_TYPE :: na_rows, na_cols, info, sc_desc(1:9) ++ ++ call set_up_blacs_descriptor(na, nblk, my_prow, my_pcol, & ++ np_rows, np_cols, na_rows, & ++ na_cols, sc_desc, my_blacs_ctxt, info) ++ ++ ++ end subroutine ++ ++ ++ function index_l2g(idx_loc, nblk, iproc, nprocs) result(indexl2g) ++ use precision_for_tests ++ implicit none ++ TEST_INT_TYPE :: indexl2g ++ TEST_INT_TYPE :: idx_loc, nblk, iproc, nprocs ++ indexl2g = nprocs * nblk * ((idx_loc-1) / nblk) + mod(idx_loc-1,nblk) + mod(nprocs+iproc, nprocs)*nblk + 1 ++ return ++ end function ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_check_correctness.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_check_correctness.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness.F90 2022-01-26 10:10:58.369246000 +0100 +@@ -0,0 +1,156 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! Author: A. Marek, MPCDF ++#include "config-f90.h" ++ ++module test_check_correctness ++ use test_util ++ ++ interface check_correctness_evp_numeric_residuals ++ module procedure check_correctness_evp_numeric_residuals_complex_double ++ module procedure check_correctness_evp_numeric_residuals_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure check_correctness_evp_numeric_residuals_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure check_correctness_evp_numeric_residuals_complex_single ++#endif ++ end interface ++ ++ interface check_correctness_evp_numeric_residuals_ss ++! module procedure check_correctness_evp_numeric_residuals_ss_complex_double ++ module procedure check_correctness_evp_numeric_residuals_ss_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure check_correctness_evp_numeric_residuals_ss_real_single ++#endif ++! #ifdef WANT_SINGLE_PRECISION_COMPLEX ++! module procedure check_correctness_evp_numeric_residuals_ss_complex_single ++! #endif ++ end interface ++ ++ interface check_correctness_eigenvalues_toeplitz ++ module procedure check_correctness_eigenvalues_toeplitz_complex_double ++ module procedure check_correctness_eigenvalues_toeplitz_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure check_correctness_eigenvalues_toeplitz_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure check_correctness_eigenvalues_toeplitz_complex_single ++#endif ++ end interface ++ ++ interface check_correctness_eigenvalues_frank ++ module procedure check_correctness_eigenvalues_frank_complex_double ++ module procedure check_correctness_eigenvalues_frank_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure check_correctness_eigenvalues_frank_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure check_correctness_eigenvalues_frank_complex_single ++#endif ++ end interface ++ ++ interface check_correctness_cholesky ++ module procedure check_correctness_cholesky_complex_double ++ module procedure check_correctness_cholesky_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure check_correctness_cholesky_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure check_correctness_cholesky_complex_single ++#endif ++ end interface ++ ++ interface check_correctness_hermitian_multiply ++ module procedure check_correctness_hermitian_multiply_complex_double ++ module procedure check_correctness_hermitian_multiply_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure check_correctness_hermitian_multiply_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure check_correctness_hermitian_multiply_complex_single ++#endif ++ end interface ++ ++ ++ contains ++ ++#define COMPLEXCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_check_correctness_template.F90" ++#undef DOUBLE_PRECISION ++#undef COMPLEXCASE ++ ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ ++#define COMPLEXCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_check_correctness_template.F90" ++#undef SINGLE_PRECISION ++#undef COMPLEXCASE ++#endif /* WANT_SINGLE_PRECISION_COMPLEX */ ++ ++#define REALCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_check_correctness_template.F90" ++#undef DOUBLE_PRECISION ++#undef REALCASE ++ ++#ifdef WANT_SINGLE_PRECISION_REAL ++ ++#define REALCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_check_correctness_template.F90" ++#undef SINGLE_PRECISION ++#undef REALCASE ++ ++ ++#endif /* WANT_SINGLE_PRECISION_REAL */ ++ ++#include "../../src/general/prow_pcol.F90" ++#include "../../src/general/map_global_to_local.F90" ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_check_correctness_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness_template.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_check_correctness_template.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_check_correctness_template.F90 2022-01-26 10:10:58.370443000 +0100 +@@ -0,0 +1,1134 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! Author: A. Marek, MPCDF ++ ++ ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE lik ++#define TEST_C_INT_TYPE_PTR long int* ++#define TEST_C_INT_TYPE long int ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE ik ++#define TEST_C_INT_TYPE_PTR int* ++#define TEST_C_INT_TYPE int ++#endif ++ ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE lik ++#define TEST_C_INT_MPI_TYPE_PTR long int* ++#define TEST_C_INT_MPI_TYPE long int ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE ik ++#define TEST_C_INT_MPI_TYPE_PTR int* ++#define TEST_C_INT_MPI_TYPE int ++#endif ++ ++#if REALCASE == 1 ++ function check_correctness_evp_numeric_residuals_ss_real_& ++ &PRECISION& ++ & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) result(status) ++ use tests_blas_interfaces ++ use tests_scalapack_interfaces ++ use precision_for_tests ++ use iso_c_binding ++ implicit none ++#include "../../src/general/precision_kinds.F90" ++ integer(kind=BLAS_KIND) :: status, na_cols, na_rows ++ integer(kind=BLAS_KIND), intent(in) :: na, nev, nblk, myid, np_rows, np_cols, my_prow, my_pcol ++ real(kind=rk), intent(in) :: as(:,:) ++ real(kind=rk) :: tmpr ++ complex(kind=rck), intent(in) :: z(:,:) ++ real(kind=rk) :: ev(:) ++ complex(kind=rck), dimension(size(as,dim=1),size(as,dim=2)) :: tmp1, tmp2 ++ complex(kind=rck) :: xc ++ ++ complex(kind=rck), allocatable :: as_complex(:,:) ++ ++ integer(kind=BLAS_KIND) :: sc_desc(:) ++ ++ integer(kind=BLAS_KIND) :: i, j, rowLocal, colLocal ++ integer(kind=c_int) :: row_Local, col_Local ++ real(kind=rck) :: err, errmax ++ ++ integer :: mpierr ++ ++ ! tolerance for the residual test for different math type/precision setups ++ real(kind=rk), parameter :: tol_res_real_double = 5e-4_rk ++ real(kind=rk), parameter :: tol_res_real_single = 3e-2_rk ++ real(kind=rk), parameter :: tol_res_complex_double = 5e-12_rk ++ real(kind=rk), parameter :: tol_res_complex_single = 3e-2_rk ++ real(kind=rk) :: tol_res = tol_res_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION ++ ! precision of generalized problem is lower ++ real(kind=rk), parameter :: generalized_penalty = 10.0_rk ++ ++ ! tolerance for the orthogonality test for different math type/precision setups ++! real(kind=rk), parameter :: tol_orth_real_double = 5e-11_rk ++ real(kind=rk), parameter :: tol_orth_real_double = 5e-4_rk ++ real(kind=rk), parameter :: tol_orth_real_single = 9e-2_rk ++ real(kind=rk), parameter :: tol_orth_complex_double = 5e-11_rk ++ real(kind=rk), parameter :: tol_orth_complex_single = 9e-3_rk ++ real(kind=rk), parameter :: tol_orth = tol_orth_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION ++ ++ complex(kind=rck), parameter :: CZERO = (0.0_rck,0.0_rck), CONE = (1.0_rck,0.0_rck) ++ ++ ++ status = 0 ++ ! Setup complex matrices and eigenvalues ++ na_rows = size(as,dim=1) ++ na_cols = size(as,dim=2) ++ ++ allocate(as_complex(na_rows,na_cols)) ++ do j=1, na_cols ++ do i=1,na_rows ++#ifdef DOUBLE_PRECISION_REAL ++ as_complex(i,j) = dcmplx(as(i,j),0.0_rk) ++#else ++ as_complex(i,j) = cmplx(as(i,j),0.0_rk) ++#endif ++ enddo ++ enddo ++ ++ ! 1. Residual (maximum of || A*Zi - Zi*EVi ||) ++ ++ ! tmp1 = Zi*EVi ++ tmp1(:,:) = z(:,:) ++ do i=1,nev ++#ifdef DOUBLE_PRECISION_REAL ++ xc = dcmplx(0.0_rk,ev(i)) ++#else ++ xc = cmplx(0.0_rk,ev(i)) ++#endif ++#ifdef WITH_MPI ++#ifdef DOUBLE_PRECISION_REAL ++ call pzscal(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND) ++#else ++ call pcscal(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND) ++#endif ++#else /* WITH_MPI */ ++#ifdef DOUBLE_PRECISION_REAL ++ call zscal(int(na,kind=BLAS_KIND), xc, tmp1(:,i), 1_BLAS_KIND) ++#else ++ call cscal(int(na,kind=BLAS_KIND), xc, tmp1(:,i), 1_BLAS_KIND) ++#endif ++#endif /* WITH_MPI */ ++ enddo ++ ++ ! normal eigenvalue problem .. no need to multiply ++ tmp2(:,:) = tmp1(:,:) ++ ++ ! tmp1 = A * Z ++ ! as is original stored matrix, Z are the EVs ++#ifdef WITH_MPI ++#ifdef DOUBLE_PRECISION_REAL ++ call PZGEMM('N', 'N', int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), & ++ CONE, as_complex, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else ++ call PCGEMM('N', 'N', int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), & ++ CONE, as_complex, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#endif ++#else /* WITH_MPI */ ++#ifdef DOUBLE_PRECISION_REAL ++ call ZGEMM('N','N',int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), CONE, & ++ as_complex, int(na,kind=BLAS_KIND), z,int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND) ) ++#else ++ call CGEMM('N','N', int(na,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), CONE, & ++ as_complex, int(na,kind=BLAS_KIND), z, int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND) ) ++#endif ++#endif /* WITH_MPI */ ++ ++ ! tmp1 = A*Zi - Zi*EVi ++ tmp1(:,:) = tmp1(:,:) - tmp2(:,:) ++ ++ ! Get maximum norm of columns of tmp1 ++ errmax = 0.0_rk ++ ++ do i=1,nev ++ xc = (0.0_rk,0.0_rk) ++#ifdef WITH_MPI ++#ifdef DOUBLE_PRECISION_REAL ++ call PZDOTC(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, & ++ 1_BLAS_KIND, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND) ++#else ++ call PCDOTC(int(na,kind=BLAS_KIND), xc, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, & ++ 1_BLAS_KIND, tmp1, 1_BLAS_KIND, int(i,kind=BLAS_KIND), sc_desc, 1_BLAS_KIND) ++#endif ++#else /* WITH_MPI */ ++#ifdef DOUBLE_PRECISION_REAL ++ xc = ZDOTC(int(na,kind=BLAS_KIND) ,tmp1, 1_BLAS_KIND, tmp1, 1_BLAS_KIND) ++#else ++ xc = CDOTC(int(na,kind=BLAS_KIND) ,tmp1, 1_BLAS_KIND, tmp1, 1_BLAS_KIND) ++#endif ++#endif /* WITH_MPI */ ++ errmax = max(errmax, sqrt(real(xc,kind=REAL_DATATYPE))) ++ enddo ++ ++ ! Get maximum error norm over all processors ++ err = errmax ++#ifdef WITH_MPI ++ call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++#else /* WITH_MPI */ ++ errmax = err ++#endif /* WITH_MPI */ ++ if (myid==0) print *,'%Results of numerical residual checks, using complex arithmetic:' ++ if (myid==0) print *,'%Error Residual :',errmax ++ if (nev .ge. 2) then ++ if (errmax .gt. tol_res .or. errmax .eq. 0.0_rk) then ++ status = 1 ++ endif ++ else ++ if (errmax .gt. tol_res) then ++ status = 1 ++ endif ++ endif ++ ++ ! 2. Eigenvector orthogonality ++ tmp2(:,:) = z(:,:) ++ tmp1 = 0 ++#ifdef WITH_MPI ++#ifdef DOUBLE_PRECISION_REAL ++ call PZGEMM('C', 'N', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), & ++ CONE, z, 1_BLAS_KIND, 1_BLAS_KIND, & ++ sc_desc, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else ++ call PCGEMM('C', 'N', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND), & ++ CONE, z, 1_BLAS_KIND, 1_BLAS_KIND, & ++ sc_desc, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, CZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#endif ++ ++#else /* WITH_MPI */ ++#ifdef DOUBLE_PRECISION_REAL ++ call ZGEMM('C','N', int(nev,kind=BLAS_KIND) , int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND),CONE, z, & ++ int(na,kind=BLAS_KIND), tmp2, int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND)) ++#else ++ call CGEMM('C','N', int(nev,kind=BLAS_KIND) , int(nev,kind=BLAS_KIND), int(na,kind=BLAS_KIND),CONE, z, & ++ int(na,kind=BLAS_KIND), tmp2, int(na,kind=BLAS_KIND), CZERO, tmp1, int(na,kind=BLAS_KIND)) ++#endif ++#endif /* WITH_MPI */ ++ ! First check, whether the elements on diagonal are 1 .. "normality" of the vectors ++ err = 0.0_rk ++ do i=1, nev ++ if (map_global_array_index_to_local_index(int(i,kind=c_int), int(i,kind=c_int), row_Local, col_Local, & ++ int(nblk,kind=c_int), int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int)) ) then ++ rowLocal = int(row_Local,kind=INT_TYPE) ++ colLocal = int(col_Local,kind=INT_TYPE) ++ err = max(err, abs(tmp1(rowLocal,colLocal) - CONE)) ++ endif ++ end do ++#ifdef WITH_MPI ++ call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++#else /* WITH_MPI */ ++ errmax = err ++#endif /* WITH_MPI */ ++ if (myid==0) print *,'%Maximal error in eigenvector lengths:',errmax ++ ++ ! Second, find the maximal error in the whole Z**T * Z matrix (its diference from identity matrix) ++ ! Initialize tmp2 to unit matrix ++ tmp2 = 0 ++#ifdef WITH_MPI ++#ifdef DOUBLE_PRECISION_REAL ++ call PZLASET('A', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), CZERO, CONE, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else ++ call PCLASET('A', int(nev,kind=BLAS_KIND), int(nev,kind=BLAS_KIND), CZERO, CONE, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#endif ++#else /* WITH_MPI */ ++#ifdef DOUBLE_PRECISION_REAL ++ call ZLASET('A',int(nev,kind=BLAS_KIND) ,int(nev,kind=BLAS_KIND) ,CZERO, CONE, tmp2, int(na,kind=BLAS_KIND)) ++#else ++ call CLASET('A',int(nev,kind=BLAS_KIND) ,int(nev,kind=BLAS_KIND) ,CZERO, CONE, tmp2, int(na,kind=BLAS_KIND)) ++#endif ++#endif /* WITH_MPI */ ++ ++ ! ! tmp1 = Z**T * Z - Unit Matrix ++ tmp1(:,:) = tmp1(:,:) - tmp2(:,:) ++ ++ ! Get maximum error (max abs value in tmp1) ++ err = maxval(abs(tmp1)) ++#ifdef WITH_MPI ++ call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, int(MPI_COMM_WORLD,kind=MPI_KIND), mpierr) ++#else /* WITH_MPI */ ++ errmax = err ++#endif /* WITH_MPI */ ++ if (myid==0) print *,'%Error Orthogonality:',errmax ++ ++ if (nev .ge. 2) then ++ if (errmax .gt. tol_orth .or. errmax .eq. 0.0_rk) then ++ status = 1 ++ endif ++ else ++ if (errmax .gt. tol_orth) then ++ status = 1 ++ endif ++ endif ++ ++ deallocate(as_complex) ++ end function ++ ++#endif /* REALCASE */ ++ ++#if REALCASE == 1 ++#ifdef DOUBLE_PRECISION_REAL ++ !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_ss_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> double *as, complex double *z, double *ev, TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#else ++ !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_ss_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> float *as, complex float *z, float *ev, TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#endif ++#endif /* REALCASE */ ++ ++#if REALCASE == 1 ++function check_correctness_evp_numeric_residuals_ss_real_& ++&PRECISION& ++&_f (na, nev, na_rows, na_cols, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) result(status) & ++ bind(C,name="check_correctness_evp_numeric_residuals_ss_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &_f") ++ ++ use precision_for_tests ++ use iso_c_binding ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE :: status ++ TEST_INT_TYPE, value :: na, nev, myid, na_rows, na_cols, nblk, np_rows, np_cols, my_prow, my_pcol ++ real(kind=rck) :: as(1:na_rows,1:na_cols) ++ complex(kind=rck) :: z(1:na_rows,1:na_cols) ++ real(kind=rck) :: ev(1:na) ++ TEST_INT_TYPE :: sc_desc(1:9) ++ ++ status = check_correctness_evp_numeric_residuals_ss_real_& ++ &PRECISION& ++ & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ end function ++#endif /* REALCASE */ ++ ++function check_correctness_evp_numeric_residuals_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs) result(status) ++ ++ use tests_blas_interfaces ++ use tests_scalapack_interfaces ++ use precision_for_tests ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE :: status ++ TEST_INT_TYPE, intent(in) :: na, nev, nblk, myid, np_rows, np_cols, my_prow, my_pcol ++ MATH_DATATYPE(kind=rck), intent(in) :: as(:,:), z(:,:) ++ MATH_DATATYPE(kind=rck), intent(in), optional :: bs(:,:) ++ real(kind=rk) :: ev(:) ++ MATH_DATATYPE(kind=rck), dimension(size(as,dim=1),size(as,dim=2)) :: tmp1, tmp2 ++ MATH_DATATYPE(kind=rck) :: xc ++ ++ TEST_INT_TYPE :: sc_desc(:) ++ ++ TEST_INT_TYPE :: i, rowLocal, colLocal ++ integer(kind=c_int) :: row_Local, col_Local ++ real(kind=rck) :: err, errmax ++ ++ TEST_INT_MPI_TYPE :: mpierr ++ ++! tolerance for the residual test for different math type/precision setups ++ real(kind=rk), parameter :: tol_res_real_double = 5e-12_rk ++ real(kind=rk), parameter :: tol_res_real_single = 3e-2_rk ++ real(kind=rk), parameter :: tol_res_complex_double = 5e-12_rk ++ real(kind=rk), parameter :: tol_res_complex_single = 3e-2_rk ++ real(kind=rk) :: tol_res = tol_res_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION ++ ! precision of generalized problem is lower ++ real(kind=rk), parameter :: generalized_penalty = 10.0_rk ++ ++ ! tolerance for the orthogonality test for different math type/precision setups ++ real(kind=rk), parameter :: tol_orth_real_double = 5e-11_rk ++ real(kind=rk), parameter :: tol_orth_real_single = 9e-2_rk ++ real(kind=rk), parameter :: tol_orth_complex_double = 5e-11_rk ++ real(kind=rk), parameter :: tol_orth_complex_single = 9e-3_rk ++ real(kind=rk), parameter :: tol_orth = tol_orth_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION ++ ++ if (present(bs)) then ++ tol_res = generalized_penalty * tol_res ++ endif ++ status = 0 ++ ++ ! 1. Residual (maximum of || A*Zi - Zi*EVi ||) ++ ++! tmp1 = Zi*EVi ++ tmp1(:,:) = z(:,:) ++ do i=1,nev ++ xc = ev(i) ++#ifdef WITH_MPI ++ call p& ++ &BLAS_CHAR& ++ &scal(na, xc, tmp1, 1_BLAS_KIND, i, sc_desc, 1_BLAS_KIND) ++#else /* WITH_MPI */ ++ call BLAS_CHAR& ++ &scal(na, xc, tmp1(:,i), 1_BLAS_KIND) ++#endif /* WITH_MPI */ ++ enddo ++ ++ ! for generalized EV problem, multiply by bs as well ++ ! tmp2 = B * tmp1 ++ if(present(bs)) then ++#ifdef WITH_MPI ++ call scal_PRECISION_GEMM('N', 'N', na, nev, na, ONE, bs, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ call PRECISION_GEMM('N','N',na,nev,na,ONE,bs,na,tmp1,na,ZERO,tmp2,na) ++#endif /* WITH_MPI */ ++ else ++ ! normal eigenvalue problem .. no need to multiply ++ tmp2(:,:) = tmp1(:,:) ++ end if ++ ++ ! tmp1 = A * Z ++ ! as is original stored matrix, Z are the EVs ++#ifdef WITH_MPI ++ call scal_PRECISION_GEMM('N', 'N', na, nev, na, ONE, as, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ call PRECISION_GEMM('N','N',na,nev,na,ONE,as,na,z,na,ZERO,tmp1,na) ++#endif /* WITH_MPI */ ++ ++ ! tmp1 = A*Zi - Zi*EVi ++ tmp1(:,:) = tmp1(:,:) - tmp2(:,:) ++ ++ ! Get maximum norm of columns of tmp1 ++ errmax = 0.0_rk ++ ++ do i=1,nev ++#if REALCASE == 1 ++ err = 0.0_rk ++#ifdef WITH_MPI ++ call scal_PRECISION_NRM2(na, err, tmp1, 1_BLAS_KIND, i, sc_desc, 1_BLAS_KIND) ++#else /* WITH_MPI */ ++ err = PRECISION_NRM2(na,tmp1(1,i),1_BLAS_KIND) ++#endif /* WITH_MPI */ ++ errmax = max(errmax, err) ++#endif /* REALCASE */ ++ ++#if COMPLEXCASE == 1 ++ xc = 0 ++#ifdef WITH_MPI ++ call scal_PRECISION_DOTC(na, xc, tmp1, 1_BLAS_KIND, i, sc_desc, & ++ 1_BLAS_KIND, tmp1, 1_BLAS_KIND, i, sc_desc, 1_BLAS_KIND) ++#else /* WITH_MPI */ ++ xc = PRECISION_DOTC(na,tmp1,1_BLAS_KIND,tmp1,1_BLAS_KIND) ++#endif /* WITH_MPI */ ++ errmax = max(errmax, sqrt(real(xc,kind=REAL_DATATYPE))) ++#endif /* COMPLEXCASE */ ++ enddo ++ ++ ! Get maximum error norm over all processors ++ err = errmax ++#ifdef WITH_MPI ++ call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr) ++#else /* WITH_MPI */ ++ errmax = err ++#endif /* WITH_MPI */ ++ if (myid==0) print *,'Results of numerical residual checks:' ++ if (myid==0) print *,'Error Residual :',errmax ++ if (nev .ge. 2) then ++ if (errmax .gt. tol_res .or. errmax .eq. 0.0_rk) then ++ status = 1 ++ endif ++ else ++ if (errmax .gt. tol_res) then ++ status = 1 ++ endif ++ endif ++ ++ ! 2. Eigenvector orthogonality ++ if(present(bs)) then ++ !for the generalized EVP, the eigenvectors should be B-orthogonal, not orthogonal ++ ! tmp2 = B * Z ++ tmp2(:,:) = 0.0_rck ++#ifdef WITH_MPI ++ call scal_PRECISION_GEMM('N', 'N', na, nev, na, ONE, bs, 1_BLAS_KIND, 1_BLAS_KIND, & ++ sc_desc, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ call PRECISION_GEMM('N','N', na, nev, na, ONE, bs, na, z, na, ZERO, tmp2, na) ++#endif /* WITH_MPI */ ++ ++ else ++ tmp2(:,:) = z(:,:) ++ endif ++ ! tmp1 = Z**T * tmp2 ++ ! actually tmp1 = Z**T * Z for standard case and tmp1 = Z**T * B * Z for generalized ++ tmp1 = 0 ++#ifdef WITH_MPI ++ call scal_PRECISION_GEMM(BLAS_TRANS_OR_CONJ, 'N', nev, nev, na, ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, & ++ sc_desc, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, & ++ tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ call PRECISION_GEMM(BLAS_TRANS_OR_CONJ,'N',nev,nev,na,ONE,z,na,tmp2,na,ZERO,tmp1,na) ++#endif /* WITH_MPI */ ++ ! First check, whether the elements on diagonal are 1 .. "normality" of the vectors ++ err = 0.0_rk ++ do i=1, nev ++ if (map_global_array_index_to_local_index(int(i,kind=c_int), int(i,kind=c_int) , row_Local, col_Local, & ++ int(nblk,kind=c_int), int(np_rows,kind=c_int), & ++ int(np_cols,kind=c_int), int(my_prow,kind=c_int), & ++ int(my_pcol,kind=c_int) )) then ++ rowLocal = int(row_Local,kind=INT_TYPE) ++ colLocal = int(col_Local,kind=INT_TYPE) ++ err = max(err, abs(tmp1(rowLocal,colLocal) - 1.0_rk)) ++ endif ++ end do ++#ifdef WITH_MPI ++ call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr) ++#else /* WITH_MPI */ ++ errmax = err ++#endif /* WITH_MPI */ ++ if (myid==0) print *,'Maximal error in eigenvector lengths:',errmax ++ ++ ! Second, find the maximal error in the whole Z**T * Z matrix (its diference from identity matrix) ++ ! Initialize tmp2 to unit matrix ++ tmp2 = 0 ++#ifdef WITH_MPI ++ call scal_PRECISION_LASET('A', nev, nev, ZERO, ONE, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ call PRECISION_LASET('A',nev,nev,ZERO,ONE,tmp2,na) ++#endif /* WITH_MPI */ ++ ++ ! ! tmp1 = Z**T * Z - Unit Matrix ++ tmp1(:,:) = tmp1(:,:) - tmp2(:,:) ++ ++ ! Get maximum error (max abs value in tmp1) ++ err = maxval(abs(tmp1)) ++#ifdef WITH_MPI ++ call mpi_allreduce(err, errmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr) ++#else /* WITH_MPI */ ++ errmax = err ++#endif /* WITH_MPI */ ++ if (myid==0) print *,'Error Orthogonality:',errmax ++ ++ if (nev .ge. 2) then ++ if (errmax .gt. tol_orth .or. errmax .eq. 0.0_rk) then ++ status = 1 ++ endif ++ else ++ if (errmax .gt. tol_orth) then ++ status = 1 ++ endif ++ endif ++ end function ++ ++#if REALCASE == 1 ++#ifdef DOUBLE_PRECISION_REAL ++ !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> double *as, double *z, double *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, ++ !c> TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#else ++ !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> float *as, float *z, float *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, ++ !c> TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#endif ++#endif /* REALCASE */ ++ ++#if COMPLEXCASE == 1 ++#ifdef DOUBLE_PRECISION_COMPLEX ++ !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> complex double *as, complex double *z, double *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#else ++ !c> TEST_C_INT_TYPE check_correctness_evp_numeric_residuals_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> complex float *as, complex float *z, float *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#endif ++#endif /* COMPLEXCASE */ ++ ++function check_correctness_evp_numeric_residuals_& ++&MATH_DATATYPE& ++&_& ++&PRECISION& ++&_f (na, nev, na_rows, na_cols, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) result(status) & ++ bind(C,name="check_correctness_evp_numeric_residuals_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &_f") ++ ++ use precision_for_tests ++ use iso_c_binding ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE :: status ++ TEST_INT_TYPE, value :: na, nev, myid, na_rows, na_cols, nblk, np_rows, np_cols, my_prow, my_pcol ++ MATH_DATATYPE(kind=rck) :: as(1:na_rows,1:na_cols), z(1:na_rows,1:na_cols) ++ real(kind=rck) :: ev(1:na) ++ TEST_INT_TYPE :: sc_desc(1:9) ++ ++ status = check_correctness_evp_numeric_residuals_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol) ++ ++ end function ++ ++!---- variant for the generalized eigenproblem ++!---- unlike in Fortran, we cannot use optional parameter ++!---- we thus define a different function ++#if REALCASE == 1 ++#ifdef DOUBLE_PRECISION_REAL ++ !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> double *as, double *z, double *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol, ++ !c> double *bs); ++#else ++ !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> float *as, float *z, float *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, ++ !c> TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, ++ !c> TEST_C_INT_TYPE my_pcol, ++ !c> float *bs); ++#endif ++#endif /* REALCASE */ ++ ++#if COMPLEXCASE == 1 ++#ifdef DOUBLE_PRECISION_COMPLEX ++ !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> complex double *as, complex double *z, double *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol, ++ !c> complex double *bs); ++#else ++ !c> TEST_C_INT_TYPE check_correctness_evp_gen_numeric_residuals_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE nev, ++ !c> TEST_C_INT_TYPE na_rows, TEST_C_INT_TYPE na_cols, ++ !c> complex float *as, complex float *z, float *ev, ++ !c> TEST_C_INT_TYPE sc_desc[9], ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE myid, ++ !c> TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol, ++ !c> complex float *bs); ++#endif ++#endif /* COMPLEXCASE */ ++ ++function check_correctness_evp_gen_numeric_residuals_& ++&MATH_DATATYPE& ++&_& ++&PRECISION& ++&_f (na, nev, na_rows, na_cols, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs) result(status) & ++ bind(C,name="check_correctness_evp_gen_numeric_residuals_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &_f") ++ ++ use iso_c_binding ++ use precision_for_tests ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE :: status ++ TEST_INT_TYPE, value :: na, nev, myid, na_rows, na_cols, nblk, np_rows, np_cols, my_prow, my_pcol ++ MATH_DATATYPE(kind=rck) :: as(1:na_rows,1:na_cols), z(1:na_rows,1:na_cols), bs(1:na_rows,1:na_cols) ++ real(kind=rck) :: ev(1:na) ++ TEST_INT_TYPE :: sc_desc(1:9) ++ ++ status = check_correctness_evp_numeric_residuals_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, nev, as, z, ev, sc_desc, nblk, myid, np_rows, np_cols, my_prow, my_pcol, bs) ++ ++ end function ++ ++ !----------------------------------------------------------------------------------------------------------- ++ ++ function check_correctness_eigenvalues_toeplitz_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, diagonalElement, subdiagonalElement, ev, z, myid) result(status) ++ use iso_c_binding ++ use precision_for_tests ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE :: status, ii, j, myid ++ TEST_INT_TYPE, intent(in) :: na ++ real(kind=rck) :: diagonalElement, subdiagonalElement ++ real(kind=rck) :: ev_analytic(na), ev(na) ++ MATH_DATATYPE(kind=rck) :: z(:,:) ++ ++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX) ++ real(kind=rck), parameter :: pi = 3.141592653589793238462643383279_c_double ++#else ++ real(kind=rck), parameter :: pi = 3.1415926535897932_c_float ++#endif ++ real(kind=rck) :: tmp, maxerr ++ TEST_INT_TYPE :: loctmp ++ status = 0 ++ ++ ! analytic solution ++ do ii=1, na ++ ev_analytic(ii) = diagonalElement + 2.0_rk * & ++ subdiagonalElement *cos( pi*real(ii,kind=rk)/ & ++ real(na+1,kind=rk) ) ++ enddo ++ ++ ! sort analytic solution: ++ ++ ! this hack is neither elegant, nor optimized: for huge matrixes it might be expensive ++ ! a proper sorting algorithmus might be implemented here ++ ++ tmp = minval(ev_analytic) ++ loctmp = minloc(ev_analytic, 1) ++ ++ ev_analytic(loctmp) = ev_analytic(1) ++ ev_analytic(1) = tmp ++ do ii=2, na ++ tmp = ev_analytic(ii) ++ do j= ii, na ++ if (ev_analytic(j) .lt. tmp) then ++ tmp = ev_analytic(j) ++ loctmp = j ++ endif ++ enddo ++ ev_analytic(loctmp) = ev_analytic(ii) ++ ev_analytic(ii) = tmp ++ enddo ++ ++ ! compute a simple error max of eigenvalues ++ maxerr = 0.0 ++ maxerr = maxval( (ev(:) - ev_analytic(:))/ev_analytic(:) , 1) ++ ++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX) ++ if (abs(maxerr) .gt. 8.e-13_c_double) then ++#else ++ if (abs(maxerr) .gt. 8.e-4_c_float) then ++#endif ++ status = 1 ++ if (myid .eq. 0) then ++ print *,"Result of Toeplitz matrix test: " ++ print *,"Eigenvalues differ from analytic solution: maxerr = ",abs(maxerr) ++ endif ++ endif ++ ++ if (status .eq. 0) then ++ if (myid .eq. 0) then ++ print *,"Result of Toeplitz matrix test: test passed" ++ print *,"Eigenvalues differ from analytic solution: maxerr = ",abs(maxerr) ++ endif ++ endif ++ end function ++ ++ function check_correctness_cholesky_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, a, as, na_rows, sc_desc, myid) result(status) ++ use precision_for_tests ++ use tests_blas_interfaces ++ use tests_scalapack_interfaces ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE :: status ++ TEST_INT_TYPE, intent(in) :: na, myid, na_rows ++ ++ MATH_DATATYPE(kind=rck), intent(in) :: a(:,:), as(:,:) ++ MATH_DATATYPE(kind=rck), dimension(size(as,dim=1),size(as,dim=2)) :: tmp1, tmp2 ++#if COMPLEXCASE == 1 ++ ! needed for [z,c]lange from scalapack ++ real(kind=rk), dimension(2*size(as,dim=1),size(as,dim=2)) :: tmp1_real ++#endif ++ real(kind=rk) :: norm, normmax ++ ++ TEST_INT_TYPE :: sc_desc(:) ++ real(kind=rck) :: err, errmax ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ status = 0 ++ tmp1(:,:) = 0.0_rck ++ ++ ++#if REALCASE == 1 ++ ! tmp1 = a**T ++#ifdef WITH_MPI ++ call p& ++ &BLAS_CHAR& ++ &tran(na, na, 1.0_rck, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ 0.0_rck, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ tmp1 = transpose(a) ++#endif /* WITH_MPI */ ++#endif /* REALCASE == 1 */ ++ ++#if COMPLEXCASE == 1 ++ ! tmp1 = a**H ++#ifdef WITH_MPI ++ call p& ++ &BLAS_CHAR& ++ &tranc(na, na, ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ tmp1 = transpose(conjg(a)) ++#endif /* WITH_MPI */ ++#endif /* COMPLEXCASE == 1 */ ++ ++ ! tmp2 = a**T * a ++#ifdef WITH_MPI ++ call p& ++ &BLAS_CHAR& ++ &gemm("N","N", na, na, na, ONE, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ a, 1_BLAS_KIND, 1_BLAS_KIND, & ++ sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ call BLAS_CHAR& ++ &gemm("N","N", na, na, na, ONE, tmp1, na, a, na, ZERO, tmp2, na) ++#endif /* WITH_MPI */ ++ ++ ! compare tmp2 with original matrix ++ tmp2(:,:) = tmp2(:,:) - as(:,:) ++ ++#ifdef WITH_MPI ++ norm = p& ++ &BLAS_CHAR& ++ &lange("M",na, na, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++#if COMPLEXCASE == 1 ++ tmp1_real) ++#else ++ tmp1) ++#endif ++#else /* WITH_MPI */ ++ norm = BLAS_CHAR& ++ &lange("M", na, na, tmp2, na_rows, & ++#if COMPLEXCASE == 1 ++ tmp1_real) ++#else ++ tmp1) ++#endif ++#endif /* WITH_MPI */ ++ ++ ++#ifdef WITH_MPI ++ call mpi_allreduce(norm, normmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr) ++#else /* WITH_MPI */ ++ normmax = norm ++#endif /* WITH_MPI */ ++ ++ if (myid .eq. 0) then ++ print *," Maximum error of result: ", normmax ++ endif ++ ++#if REALCASE == 1 ++#ifdef DOUBLE_PRECISION_REAL ++! if (normmax .gt. 5e-12_rk8 .or. normmax .eq. 0.0_rk8) then ++ if (normmax .gt. 5e-12_rk8) then ++ status = 1 ++ endif ++#else ++! if (normmax .gt. 5e-4_rk4 .or. normmax .eq. 0.0_rk4) then ++ if (normmax .gt. 5e-4_rk4 ) then ++ status = 1 ++ endif ++#endif ++#endif ++ ++#if COMPLEXCASE == 1 ++#ifdef DOUBLE_PRECISION_COMPLEX ++! if (normmax .gt. 5e-11_rk8 .or. normmax .eq. 0.0_rk8) then ++ if (normmax .gt. 5e-11_rk8 ) then ++ status = 1 ++ endif ++#else ++! if (normmax .gt. 5e-3_rk4 .or. normmax .eq. 0.0_rk4) then ++ if (normmax .gt. 5e-3_rk4) then ++ status = 1 ++ endif ++#endif ++#endif ++ end function ++ ++ function check_correctness_hermitian_multiply_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, a, b, c, na_rows, sc_desc, myid) result(status) ++ use precision_for_tests ++ use tests_blas_interfaces ++ use tests_scalapack_interfaces ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE :: status ++ TEST_INT_TYPE, intent(in) :: na, myid, na_rows ++ MATH_DATATYPE(kind=rck), intent(in) :: a(:,:), b(:,:), c(:,:) ++ MATH_DATATYPE(kind=rck), dimension(size(a,dim=1),size(a,dim=2)) :: tmp1, tmp2 ++#if COMPLEXCASE == 1 ++ real(kind=rk), dimension(2*size(a,dim=1),size(a,dim=2)) :: tmp1_real ++#endif ++ real(kind=rck) :: norm, normmax ++ ++ ++ TEST_INT_TYPE :: sc_desc(:) ++ real(kind=rck) :: err, errmax ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ status = 0 ++ tmp1(:,:) = ZERO ++ ++#if REALCASE == 1 ++ ! tmp1 = a**T ++#ifdef WITH_MPI ++ call p& ++ &BLAS_CHAR& ++ &tran(na, na, ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ tmp1 = transpose(a) ++#endif /* WITH_MPI */ ++ ++#endif /* REALCASE == 1 */ ++ ++#if COMPLEXCASE == 1 ++ ! tmp1 = a**H ++#ifdef WITH_MPI ++ call p& ++ &BLAS_CHAR& ++ &tranc(na, na, ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, ZERO, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else /* WITH_MPI */ ++ tmp1 = transpose(conjg(a)) ++#endif /* WITH_MPI */ ++#endif /* COMPLEXCASE == 1 */ ++ ++ ! tmp2 = tmp1 * b ++#ifdef WITH_MPI ++ call p& ++ &BLAS_CHAR& ++ &gemm("N","N", na, na, na, ONE, tmp1, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, b, 1_BLAS_KIND, 1_BLAS_KIND, & ++ sc_desc, ZERO, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ++#else ++ call BLAS_CHAR& ++ &gemm("N","N", na, na, na, ONE, tmp1, na, b, na, ZERO, tmp2, na) ++#endif ++ ++ ! compare tmp2 with c ++ tmp2(:,:) = tmp2(:,:) - c(:,:) ++ ++#ifdef WITH_MPI ++ ! dirty hack: the last argument should be a real array, but is not referenced ++ ! if mode = "M", thus we get away with a complex argument ++ norm = p& ++ &BLAS_CHAR& ++ &lange("M", na, na, tmp2, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++#if COMPLEXCASE == 1 ++ tmp1_real) ++#else ++ tmp1) ++#endif ++#else /* WITH_MPI */ ++ ! dirty hack: the last argument should be a real array, but is not referenced ++ ! if mode = "M", thus we get away with a complex argument ++ norm = BLAS_CHAR& ++ &lange("M", na, na, tmp2, na_rows, & ++#if COMPLEXCASE == 1 ++ tmp1_real) ++#else ++ tmp1) ++#endif ++#endif /* WITH_MPI */ ++ ++#ifdef WITH_MPI ++ call mpi_allreduce(norm, normmax, 1_MPI_KIND, MPI_REAL_PRECISION, MPI_MAX, MPI_COMM_WORLD, mpierr) ++#else /* WITH_MPI */ ++ normmax = norm ++#endif /* WITH_MPI */ ++ ++ if (myid .eq. 0) then ++ print *," Maximum error of result: ", normmax ++ endif ++ ++#ifdef DOUBLE_PRECISION_REAL ++ if (normmax .gt. 5e-11_rk8 ) then ++ status = 1 ++ endif ++#else ++ if (normmax .gt. 5e-3_rk4 ) then ++ status = 1 ++ endif ++#endif ++ ++#ifdef DOUBLE_PRECISION_COMPLEX ++ if (normmax .gt. 5e-11_rk8 ) then ++ status = 1 ++ endif ++#else ++ if (normmax .gt. 5e-3_rk4 ) then ++ status = 1 ++ endif ++#endif ++ end function ++ ++ function check_correctness_eigenvalues_frank_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, ev, z, myid) result(status) ++ use iso_c_binding ++ use precision_for_tests ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE :: status, i, j, myid ++ TEST_INT_TYPE, intent(in) :: na ++ real(kind=rck) :: ev_analytic(na), ev(na) ++ MATH_DATATYPE(kind=rck) :: z(:,:) ++ ++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX) ++ real(kind=rck), parameter :: pi = 3.141592653589793238462643383279_c_double ++#else ++ real(kind=rck), parameter :: pi = 3.1415926535897932_c_float ++#endif ++ real(kind=rck) :: tmp, maxerr ++ TEST_INT_TYPE :: loctmp ++ status = 0 ++ ++ ! analytic solution ++ do i = 1, na ++ j = na - i ++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX) ++ ev_analytic(i) = pi * (2.0_c_double * real(j,kind=c_double) + 1.0_c_double) / & ++ (2.0_c_double * real(na,kind=c_double) + 1.0_c_double) ++ ev_analytic(i) = 0.5_c_double / (1.0_c_double - cos(ev_analytic(i))) ++#else ++ ev_analytic(i) = pi * (2.0_c_float * real(j,kind=c_float) + 1.0_c_float) / & ++ (2.0_c_float * real(na,kind=c_float) + 1.0_c_float) ++ ev_analytic(i) = 0.5_c_float / (1.0_c_float - cos(ev_analytic(i))) ++#endif ++ enddo ++ ++ ! sort analytic solution: ++ ++ ! this hack is neither elegant, nor optimized: for huge matrixes it might be expensive ++ ! a proper sorting algorithmus might be implemented here ++ ++ tmp = minval(ev_analytic) ++ loctmp = minloc(ev_analytic, 1) ++ ++ ev_analytic(loctmp) = ev_analytic(1) ++ ev_analytic(1) = tmp ++ do i=2, na ++ tmp = ev_analytic(i) ++ do j= i, na ++ if (ev_analytic(j) .lt. tmp) then ++ tmp = ev_analytic(j) ++ loctmp = j ++ endif ++ enddo ++ ev_analytic(loctmp) = ev_analytic(i) ++ ev_analytic(i) = tmp ++ enddo ++ ++ ! compute a simple error max of eigenvalues ++ maxerr = 0.0 ++ maxerr = maxval( (ev(:) - ev_analytic(:))/ev_analytic(:) , 1) ++ ++#if defined(DOUBLE_PRECISION_REAL) || defined(DOUBLE_PRECISION_COMPLEX) ++ if (maxerr .gt. 8.e-13_c_double) then ++#else ++ if (maxerr .gt. 8.e-4_c_float) then ++#endif ++ status = 1 ++ if (myid .eq. 0) then ++ print *,"Result of Frank matrix test: " ++ print *,"Eigenvalues differ from analytic solution: maxerr = ",maxerr ++ endif ++ endif ++ end function ++ ++! vim: syntax=fortran +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_output_type.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_output_type.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_output_type.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_output_type.F90 2022-01-26 10:10:58.372166000 +0100 +@@ -0,0 +1,11 @@ ++#include "config-f90.h" ++ ++module test_output_type ++ ++ type :: output_t ++ logical :: eigenvectors ++ logical :: eigenvalues ++ end type ++ ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_precision_kinds.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_precision_kinds.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_precision_kinds.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_precision_kinds.F90 2022-01-26 10:10:58.373135000 +0100 +@@ -0,0 +1,25 @@ ++#ifdef REALCASE ++#ifdef DOUBLE_PRECISION ++ integer, parameter :: rk = C_DOUBLE ++ integer, parameter :: rck = C_DOUBLE ++#endif ++#ifdef SINGLE_PRECISION ++ integer, parameter :: rk = C_FLOAT ++ integer, parameter :: rck = C_FLOAT ++#endif ++ real(kind=rck), parameter :: ZERO=0.0_rk, ONE = 1.0_rk ++#endif ++ ++#ifdef COMPLEXCASE ++#ifdef DOUBLE_PRECISION ++ integer, parameter :: rk = C_DOUBLE ++ integer, parameter :: ck = C_DOUBLE_COMPLEX ++ integer, parameter :: rck = C_DOUBLE_COMPLEX ++#endif ++#ifdef SINGLE_PRECISION ++ integer, parameter :: rk = C_FLOAT ++ integer, parameter :: ck = C_FLOAT_COMPLEX ++ integer, parameter :: rck = C_FLOAT_COMPLEX ++#endif ++ complex(kind=rck), parameter :: ZERO = (0.0_rk,0.0_rk), ONE = (1.0_rk,0.0_rk) ++#endif +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix.F90 2022-01-26 10:10:58.374062000 +0100 +@@ -0,0 +1,145 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! Author: A. Marek, MPCDF ++#include "config-f90.h" ++ ++module test_prepare_matrix ++ ++ use precision_for_tests ++ interface prepare_matrix_random ++ module procedure prepare_matrix_random_complex_double ++ module procedure prepare_matrix_random_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure prepare_matrix_random_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure prepare_matrix_random_complex_single ++#endif ++ end interface ++ ++ ++ interface prepare_matrix_random_spd ++ module procedure prepare_matrix_random_spd_complex_double ++ module procedure prepare_matrix_random_spd_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure prepare_matrix_random_spd_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure prepare_matrix_random_spd_complex_single ++#endif ++ end interface ++ ++ ++ interface prepare_matrix_toeplitz ++ module procedure prepare_matrix_toeplitz_complex_double ++ module procedure prepare_matrix_toeplitz_real_double ++ module procedure prepare_matrix_toeplitz_mixed_complex_complex_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure prepare_matrix_toeplitz_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure prepare_matrix_toeplitz_complex_single ++ module procedure prepare_matrix_toeplitz_mixed_complex_complex_single ++#endif ++ end interface ++ ++ interface prepare_matrix_frank ++ module procedure prepare_matrix_frank_complex_double ++ module procedure prepare_matrix_frank_real_double ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure prepare_matrix_frank_real_single ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure prepare_matrix_frank_complex_single ++#endif ++ end interface ++ ++ ++ ++ private prows, pcols, map_global_array_index_to_local_index ++ ++ contains ++ ++#include "../../src/general/prow_pcol.F90" ++#include "../../src/general/map_global_to_local.F90" ++ ++#define COMPLEXCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_prepare_matrix_template.F90" ++#undef DOUBLE_PRECISION ++#undef COMPLEXCASE ++ ++ ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ ++ ++#define COMPLEXCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_prepare_matrix_template.F90" ++#undef SINGLE_PRECISION ++#undef COMPLEXCASE ++#endif /* WANT_SINGLE_PRECISION_COMPLEX */ ++ ++ ++#define REALCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_prepare_matrix_template.F90" ++#undef DOUBLE_PRECISION ++#undef REALCASE ++ ++#ifdef WANT_SINGLE_PRECISION_REAL ++ ++ ++#define REALCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_prepare_matrix_template.F90" ++#undef SINGLE_PRECISION ++#undef REALCASE ++ ++#endif /* WANT_SINGLE_PRECISION_REAL */ ++ ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix_template.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_prepare_matrix_template.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_prepare_matrix_template.F90 2022-01-26 10:10:58.375330000 +0100 +@@ -0,0 +1,510 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! Author: A. Marek, MPCDF ++ ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#define TEST_C_INT_TYPE_PTR long int* ++#define TEST_C_INT_TYPE long int ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#define TEST_C_INT_TYPE_PTR int* ++#define TEST_C_INT_TYPE int ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#define TEST_C_INT_MPI_TYPE_PTR long int* ++#define TEST_C_INT_MPI_TYPE long int ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#define TEST_C_INT_MPI_TYPE_PTR int* ++#define TEST_C_INT_MPI_TYPE int ++#endif ++ ++ ++ subroutine prepare_matrix_random_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, myid, sc_desc, a, z, as, is_skewsymmetric) ++ ++ ++ !use test_util ++ use tests_scalapack_interfaces ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE, intent(in) :: myid, na, sc_desc(:) ++ MATH_DATATYPE(kind=rck), intent(inout) :: z(:,:), a(:,:), as(:,:) ++ ++#if COMPLEXCASE == 1 ++ real(kind=rk) :: xr(size(a,dim=1), size(a,dim=2)) ++#endif /* COMPLEXCASE */ ++ ++ integer(kind=c_int), allocatable :: iseed(:) ++ integer(kind=c_int) :: n ++ integer(kind=c_int), intent(in), optional :: is_skewsymmetric ++ logical :: skewsymmetric ++ ++ if (present(is_skewsymmetric)) then ++ if (is_skewsymmetric .eq. 1) then ++ skewsymmetric = .true. ++ else ++ skewsymmetric = .false. ++ endif ++ else ++ skewsymmetric = .false. ++ endif ++ ++ ! for getting a hermitian test matrix A we get a random matrix Z ++ ! and calculate A = Z + Z**H ++ ! in case of a skewsymmetric matrix A = Z - Z**H ++ ++ ! we want different random numbers on every process ++ ! (otherwise A might get rank deficient): ++ ++ call random_seed(size=n) ++ allocate(iseed(n)) ++ iseed(:) = myid ++ call random_seed(put=iseed) ++#if REALCASE == 1 ++ call random_number(z) ++ ++ a(:,:) = z(:,:) ++#endif /* REALCASE */ ++ ++#if COMPLEXCASE == 1 ++ call random_number(xr) ++ ++ z(:,:) = xr(:,:) ++ call RANDOM_NUMBER(xr) ++ z(:,:) = z(:,:) + (0.0_rk,1.0_rk)*xr(:,:) ++ a(:,:) = z(:,:) ++#endif /* COMPLEXCASE */ ++ ++ if (myid == 0) then ++ print '(a)','| Random matrix block has been set up. (only processor 0 confirms this step)' ++ endif ++ ++#if REALCASE == 1 ++#ifdef WITH_MPI ++ if (skewsymmetric) then ++ call p& ++ &BLAS_CHAR& ++ &tran(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), -ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**T ++ else ++ call p& ++ &BLAS_CHAR& ++ &tran(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**T ++ endif ++#else /* WITH_MPI */ ++ if (skewsymmetric) then ++ a = a - transpose(z) ++ else ++ a = a + transpose(z) ++ endif ++#endif /* WITH_MPI */ ++#endif /* REALCASE */ ++ ++#if COMPLEXCASE == 1 ++#ifdef WITH_MPI ++ if (skewsymmetric) then ++ call p& ++ &BLAS_CHAR& ++ &tranc(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), -ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**H ++ else ++ call p& ++ &BLAS_CHAR& ++ &tranc(int(na,kind=BLAS_KIND), int(na,kind=BLAS_KIND), ONE, z, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc, & ++ ONE, a, 1_BLAS_KIND, 1_BLAS_KIND, sc_desc) ! A = A + Z**H ++ endif ++#else /* WITH_MPI */ ++ if (skewsymmetric) then ++ a = a - transpose(conjg(z)) ++ else ++ a = a + transpose(conjg(z)) ++ endif ++#endif /* WITH_MPI */ ++#endif /* COMPLEXCASE */ ++ ++ ++ if (myid == 0) then ++ print '(a)','| Random matrix block has been symmetrized' ++ endif ++ ++ ! save original matrix A for later accuracy checks ++ ++ as = a ++ ++ deallocate(iseed) ++ ++ end subroutine ++ ++#if REALCASE == 1 ++#ifdef DOUBLE_PRECISION_REAL ++ !c> void prepare_matrix_random_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> double *a, double *z, double *as); ++#else ++ !c> void prepare_matrix_random_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> float *a, float *z, float *as); ++#endif ++#endif /* REALCASE */ ++ ++#if COMPLEXCASE == 1 ++#ifdef DOUBLE_PRECISION_COMPLEX ++ !c> void prepare_matrix_random_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> complex double *a, complex double *z, complex double *as); ++#else ++ !c> void prepare_matrix_random_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> complex float *a, complex float *z, complex float *as); ++#endif ++#endif /* COMPLEXCASE */ ++ ++subroutine prepare_matrix_random_& ++&MATH_DATATYPE& ++&_wrapper_& ++&PRECISION& ++& (na, myid, na_rows, na_cols, sc_desc, a, z, as) & ++ bind(C, name="prepare_matrix_random_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &_f") ++ use iso_c_binding ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE , value :: myid, na, na_rows, na_cols ++ TEST_INT_TYPE :: sc_desc(1:9) ++ MATH_DATATYPE(kind=rck) :: z(1:na_rows,1:na_cols), a(1:na_rows,1:na_cols), & ++ as(1:na_rows,1:na_cols) ++ call prepare_matrix_random_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, myid, sc_desc, a, z, as) ++ end subroutine ++ ++!---------------------------------------------------------------------------------------------------------------- ++ ++ subroutine prepare_matrix_random_spd_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, myid, sc_desc, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol) ++ ++ !use test_util ++ use precision_for_tests ++ implicit none ++#include "./test_precision_kinds.F90" ++ TEST_INT_TYPE, intent(in) :: myid, na, sc_desc(:) ++ MATH_DATATYPE(kind=rck), intent(inout) :: z(:,:), a(:,:), as(:,:) ++ TEST_INT_TYPE, intent(in) :: nblk, np_rows, np_cols, my_prow, my_pcol ++ ++ TEST_INT_TYPE :: ii ++ integer(kind=c_int) :: rowLocal, colLocal ++ ++ ++ call prepare_matrix_random_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, myid, sc_desc, a, z, as) ++ ++ ! hermitian diagonaly dominant matrix => positive definite ++ do ii=1, na ++ if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii,kind=c_int), & ++ rowLocal, colLocal, & ++ int(nblk,kind=c_int), int(np_rows,kind=c_int), & ++ int(np_cols,kind=c_int), int(my_prow,kind=c_int), & ++ int(my_pcol,kind=c_int) )) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = & ++ real(a(int(rowLocal,kind=INT_TYPE), int(colLocal,kind=INT_TYPE))) + na + 1 ++ end if ++ end do ++ ++ as = a ++ ++ end subroutine ++ ++#if REALCASE == 1 ++#ifdef DOUBLE_PRECISION_REAL ++ !c> void prepare_matrix_random_spd_real_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> double *a, double *z, double *as, ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#else ++ !c> void prepare_matrix_random_spd_real_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> float *a, float *z, float *as, ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, TEST_C_INT_TYPE np_cols, ++ !c> TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#endif ++#endif /* REALCASE */ ++ ++#if COMPLEXCASE == 1 ++#ifdef DOUBLE_PRECISION_COMPLEX ++ !c> void prepare_matrix_random_spd_complex_double_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> complex double *a, complex double *z, complex double *as, ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, ++ !c> TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#else ++ !c> void prepare_matrix_random_spd_complex_single_f(TEST_C_INT_TYPE na, TEST_C_INT_TYPE myid, TEST_C_INT_TYPE na_rows, ++ !c> TEST_C_INT_TYPE na_cols, TEST_C_INT_TYPE sc_desc[9], ++ !c> complex float *a, complex float *z, complex float *as, ++ !c> TEST_C_INT_TYPE nblk, TEST_C_INT_TYPE np_rows, ++ !c> TEST_C_INT_TYPE np_cols, TEST_C_INT_TYPE my_prow, TEST_C_INT_TYPE my_pcol); ++#endif ++#endif /* COMPLEXCASE */ ++ ++subroutine prepare_matrix_random_spd_& ++&MATH_DATATYPE& ++&_wrapper_& ++&PRECISION& ++& (na, myid, na_rows, na_cols, sc_desc, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol) & ++ bind(C, name="prepare_matrix_random_spd_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ &_f") ++ use iso_c_binding ++ ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE , value :: myid, na, na_rows, na_cols ++ TEST_INT_TYPE :: sc_desc(1:9) ++ MATH_DATATYPE(kind=rck) :: z(1:na_rows,1:na_cols), a(1:na_rows,1:na_cols), & ++ as(1:na_rows,1:na_cols) ++ TEST_INT_TYPE , value :: nblk, np_rows, np_cols, my_prow, my_pcol ++ call prepare_matrix_random_spd_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, myid, sc_desc, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol) ++ end subroutine ++ ++ ++!---------------------------------------------------------------------------------------------------------------- ++ ++ subroutine prepare_matrix_toeplitz_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, diagonalElement, subdiagonalElement, d, sd, ds, sds, a, as, & ++ nblk, np_rows, np_cols, my_prow, my_pcol) ++ !use test_util ++ use precision_for_tests ++ implicit none ++#include "./test_precision_kinds.F90" ++ ++ TEST_INT_TYPE, intent(in) :: na, nblk, np_rows, np_cols, my_prow, my_pcol ++ MATH_DATATYPE(kind=rck) :: diagonalElement, subdiagonalElement ++ MATH_DATATYPE(kind=rck) :: d(:), sd(:), ds(:), sds(:) ++ MATH_DATATYPE(kind=rck) :: a(:,:), as(:,:) ++ ++ TEST_INT_TYPE :: ii ++ integer(kind=c_int) :: rowLocal, colLocal ++ ++ d(:) = diagonalElement ++ sd(:) = subdiagonalElement ++ a(:,:) = ZERO ++ ++ ! set up the diagonal and subdiagonals (for general solver test) ++ do ii=1, na ! for diagonal elements ++ if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii,kind=c_int), rowLocal, & ++ colLocal, int(nblk,kind=c_int), int(np_rows,kind=c_int), & ++ int(np_cols,kind=c_int), int(my_prow,kind=c_int), & ++ int(my_pcol,kind=c_int) ) ) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = diagonalElement ++ endif ++ enddo ++ do ii=1, na-1 ++ if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii+1,kind=c_int), rowLocal, & ++ colLocal, int(nblk,kind=c_int), int(np_rows,kind=c_int), & ++ int(np_cols,kind=c_int), int(my_prow,kind=c_int), & ++ int(my_pcol,kind=c_int) ) ) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement ++ endif ++ enddo ++ ++ do ii=2, na ++ if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii-1,kind=c_int), rowLocal, & ++ colLocal, int(nblk,kind=c_int), int(np_rows,kind=c_int), & ++ int(np_cols,kind=c_int), int(my_prow,kind=c_int), & ++ int(my_pcol,kind=c_int) ) ) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement ++ endif ++ enddo ++ ++ ds = d ++ sds = sd ++ as = a ++ end subroutine ++ ++ subroutine prepare_matrix_toeplitz_mixed_complex& ++ &_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++#if COMPLEXCASE == 1 ++ & (na, diagonalElement, subdiagonalElement, d, sd, ds, sds, a, as, & ++ nblk, np_rows, np_cols, my_prow, my_pcol) ++#endif ++#if REALCASE == 1 ++ & (na, diagonalElement, subdiagonalElement, d, sd, ds, sds, & ++ nblk, np_rows, np_cols, my_prow, my_pcol) ++#endif ++ !use test_util ++ implicit none ++ ++ TEST_INT_TYPE, intent(in) :: na, nblk, np_rows, np_cols, my_prow, my_pcol ++ real(kind=C_DATATYPE_KIND) :: diagonalElement, subdiagonalElement ++ ++ real(kind=C_DATATYPE_KIND) :: d(:), sd(:), ds(:), sds(:) ++ ++#if COMPLEXCASE == 1 ++ complex(kind=C_DATATYPE_KIND) :: a(:,:), as(:,:) ++#endif ++#if REALCASE == 1 ++#endif ++ ++ TEST_INT_TYPE :: ii ++ integer(kind=c_int) :: rowLocal, colLocal ++#if COMPLEXCASE == 1 ++ d(:) = diagonalElement ++ sd(:) = subdiagonalElement ++ ++ ! set up the diagonal and subdiagonals (for general solver test) ++ do ii=1, na ! for diagonal elements ++ if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii,kind=c_int), rowLocal, & ++ colLocal, int(nblk,kind=c_int), & ++ int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = diagonalElement ++ endif ++ enddo ++ do ii=1, na-1 ++ if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii+1,kind=c_int), rowLocal, & ++ colLocal, int(nblk,kind=c_int), & ++ int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement ++ endif ++ enddo ++ ++ do ii=2, na ++ if (map_global_array_index_to_local_index(int(ii,kind=c_int), int(ii-1,kind=c_int), rowLocal, & ++ colLocal, int(nblk,kind=c_int), & ++ int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = subdiagonalElement ++ endif ++ enddo ++ ++ ds = d ++ sds = sd ++ as = a ++#endif ++ end subroutine ++ ++ subroutine prepare_matrix_frank_& ++ &MATH_DATATYPE& ++ &_& ++ &PRECISION& ++ & (na, a, z, as, nblk, np_rows, np_cols, my_prow, my_pcol) ++ !use test_util ++ use precision_for_tests ++ implicit none ++ ++ TEST_INT_TYPE, intent(in) :: na, nblk, np_rows, np_cols, my_prow, my_pcol ++ ++#if REALCASE == 1 ++ real(kind=C_DATATYPE_KIND) :: a(:,:), z(:,:), as(:,:) ++#endif ++#if COMPLEXCASE == 1 ++ complex(kind=C_DATATYPE_KIND) :: a(:,:), z(:,:), as(:,:) ++#endif ++ ++ TEST_INT_TYPE :: i, j ++ integer(kind=c_int) :: rowLocal, colLocal ++ ++ do i = 1, na ++ do j = 1, na ++ if (map_global_array_index_to_local_index(int(i,kind=c_int), int(j,kind=c_int), rowLocal, & ++ colLocal, int(nblk,kind=c_int), & ++ int(np_rows,kind=c_int), int(np_cols,kind=c_int), & ++ int(my_prow,kind=c_int), int(my_pcol,kind=c_int) )) then ++ if (j .le. i) then ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = & ++ real((na+1-i), kind=C_DATATYPE_KIND) / real(na, kind=C_DATATYPE_KIND) ++ else ++ a(int(rowLocal,kind=INT_TYPE),int(colLocal,kind=INT_TYPE)) = & ++ real((na+1-j), kind=C_DATATYPE_KIND) / real(na, kind=C_DATATYPE_KIND) ++ endif ++ endif ++ enddo ++ enddo ++ ++ z(:,:) = a(:,:) ++ as(:,:) = a(:,:) ++ ++ end subroutine ++ ++ ++! vim: syntax=fortran +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_read_input_parameters.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_read_input_parameters.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_read_input_parameters.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_read_input_parameters.F90 2022-01-26 10:10:58.376155000 +0100 +@@ -0,0 +1,455 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++ ++module test_read_input_parameters ++ use elpa, only : ELPA_2STAGE_COMPLEX_DEFAULT, ELPA_2STAGE_REAL_DEFAULT, elpa_int_string_to_value, & ++ elpa_int_value_to_string, ELPA_OK ++ use elpa_utilities, only : error_unit ++ use iso_c_binding ++ use test_util, only : x_ao, x_a ++ use test_output_type ++ ++ implicit none ++ ++ type input_options_t ++ TEST_INT_TYPE :: datatype ++ TEST_INT_TYPE :: na, nev, nblk ++ type(output_t) :: write_to_file ++ TEST_INT_TYPE :: this_real_kernel, this_complex_kernel ++ logical :: realKernelIsSet, complexKernelIsSet ++ TEST_INT_TYPE :: useQrIsSet, useGPUIsSet ++ logical :: doSolveTridi, do1stage, do2stage, justHelpMessage, & ++ doCholesky, doInvertTrm, doTransposeMultiply ++ end type ++ ++ interface read_input_parameters ++ module procedure read_input_parameters_general ++ module procedure read_input_parameters_traditional ++ module procedure read_input_parameters_traditional_noskip ++ end interface ++ ++ contains ++ ++ subroutine parse_arguments(command_line_argument, input_options) ++ implicit none ++ ++ type(input_options_t) :: input_options ++ character(len=128) :: command_line_argument ++ integer(kind=c_int) :: elpa_error ++ ++ if (command_line_argument == "--help") then ++ print *,"usage: elpa_tests [--help] [datatype={real|complex}] [na=number] [nev=number] " ++ print *," [nblk=size of block cyclic distribution] [--output_eigenvalues]" ++ print *," [--output_eigenvectors] [--real-kernel=name_of_kernel]" ++ print *," [--complex-kernel=name_of_kernel] [--use-gpu={0|1}]" ++ print *," [--use-qr={0,1}] [--tests={all|solve-tridi|1stage|2stage|cholesky& ++ &|invert-triangular|transpose-mulitply}]" ++ input_options%justHelpMessage=.true. ++ return ++ endif ++ ++ ++ if (command_line_argument(1:11) == "--datatype=") then ++ if (command_line_argument(12:15) == "real") then ++ input_options%datatype=1 ++ else ++ if (command_line_argument(12:18) == "complex") then ++ input_options%datatype=2 ++ else ++ print *,"datatype unknown! use either --datatype=real or --datatpye=complex" ++ stop 1 ++ endif ++ endif ++ endif ++ ++ if (command_line_argument(1:3) == "na=") then ++ read(command_line_argument(4:), *) input_options%na ++ endif ++ if (command_line_argument(1:4) == "nev=") then ++ read(command_line_argument(5:), *) input_options%nev ++ endif ++ if (command_line_argument(1:5) == "nblk=") then ++ read(command_line_argument(6:), *) input_options%nblk ++ endif ++ ++ if (command_line_argument(1:21) == "--output_eigenvectors") then ++ input_options%write_to_file%eigenvectors = .true. ++ endif ++ ++ if (command_line_argument(1:20) == "--output_eigenvalues") then ++ input_options%write_to_file%eigenvalues = .true. ++ endif ++ ++ if (command_line_argument(1:14) == "--real-kernel=") then ++ input_options%this_real_kernel = int(elpa_int_string_to_value("real_kernel", & ++ command_line_argument(15:), elpa_error), & ++ kind=INT_TYPE) ++ if (elpa_error /= ELPA_OK) then ++ print *, "Invalid argument for --real-kernel" ++ stop 1 ++ endif ++ print *,"Setting ELPA2 real kernel to ", elpa_int_value_to_string("real_kernel", & ++ int(input_options%this_real_kernel,kind=c_int)) ++ input_options%realKernelIsSet = .true. ++ endif ++ ++ if (command_line_argument(1:17) == "--complex-kernel=") then ++ input_options%this_complex_kernel = int(elpa_int_string_to_value("complex_kernel", & ++ command_line_argument(18:), elpa_error), kind=INT_TYPE) ++ if (elpa_error /= ELPA_OK) then ++ print *, "Invalid argument for --complex-kernel" ++ stop 1 ++ endif ++ print *,"Setting ELPA2 complex kernel to ", elpa_int_value_to_string("complex_kernel", & ++ int(input_options%this_complex_kernel,kind=c_int)) ++ input_options%complexKernelIsSet = .true. ++ endif ++ ++ if (command_line_argument(1:9) == "--use-qr=") then ++ read(command_line_argument(10:), *) input_options%useQrIsSet ++ endif ++ ++ if (command_line_argument(1:10) == "--use-gpu=") then ++ read(command_line_argument(11:), *) input_options%useGPUIsSet ++ endif ++ ++ if (command_line_argument(1:8) == "--tests=") then ++ if (command_line_argument(9:11) == "all") then ++ input_options%doSolveTridi=.true. ++ input_options%do1stage=.true. ++ input_options%do2stage=.true. ++ input_options%doCholesky=.true. ++ input_options%doInvertTrm=.true. ++ input_options%doTransposeMultiply=.true. ++ else if (command_line_argument(9:19) == "solve-tride") then ++ input_options%doSolveTridi=.true. ++ input_options%do1stage=.false. ++ input_options%do2stage=.false. ++ input_options%doCholesky=.false. ++ input_options%doInvertTrm=.false. ++ input_options%doTransposeMultiply=.false. ++ else if (command_line_argument(9:14) == "1stage") then ++ input_options%doSolveTridi=.false. ++ input_options%do1stage=.true. ++ input_options%do2stage=.false. ++ input_options%doCholesky=.false. ++ input_options%doInvertTrm=.false. ++ input_options%doTransposeMultiply=.false. ++ else if (command_line_argument(9:14) == "2stage") then ++ input_options%doSolveTridi=.false. ++ input_options%do1stage=.false. ++ input_options%do2stage=.true. ++ input_options%doCholesky=.false. ++ input_options%doInvertTrm=.false. ++ input_options%doTransposeMultiply=.false. ++ else if (command_line_argument(9:16) == "cholesky") then ++ input_options%doSolveTridi=.false. ++ input_options%do1stage=.false. ++ input_options%do2stage=.false. ++ input_options%doCholesky=.true. ++ input_options%doInvertTrm=.false. ++ input_options%doTransposeMultiply=.false. ++ else if (command_line_argument(9:25) == "invert-triangular") then ++ input_options%doSolveTridi=.false. ++ input_options%do1stage=.false. ++ input_options%do2stage=.false. ++ input_options%doCholesky=.false. ++ input_options%doInvertTrm=.true. ++ input_options%doTransposeMultiply=.false. ++ else if (command_line_argument(9:26) == "transpose-multiply") then ++ input_options%doSolveTridi=.false. ++ input_options%do1stage=.false. ++ input_options%do2stage=.false. ++ input_options%doCholesky=.false. ++ input_options%doInvertTrm=.false. ++ input_options%doTransposeMultiply=.true. ++ else ++ print *,"unknown test specified" ++ stop 1 ++ endif ++ endif ++ ++ end subroutine ++ ++ subroutine read_input_parameters_general(input_options) ++ use precision_for_tests ++ implicit none ++ ++ type(input_options_t) :: input_options ++ ++ ! Command line arguments ++ character(len=128) :: arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10 ++ ++ ! default parameters ++ input_options%datatype = 1 ++ input_options%na = 500 ++ input_options%nev = 150 ++ input_options%nblk = 16 ++ ++ input_options%write_to_file%eigenvectors = .false. ++ input_options%write_to_file%eigenvalues = .false. ++ ++ input_options%this_real_kernel = ELPA_2STAGE_REAL_DEFAULT ++ input_options%this_complex_kernel = ELPA_2STAGE_COMPLEX_DEFAULT ++ input_options%realKernelIsSet = .false. ++ input_options%complexKernelIsSet = .false. ++ ++ input_options%useQrIsSet = 0 ++ ++ input_options%useGPUIsSet = 0 ++ ++ input_options%do1Stage = .true. ++ input_options%do2Stage = .true. ++ input_options%doSolveTridi = .true. ++ input_options%doCholesky=.true. ++ input_options%doInvertTrm=.true. ++ input_options%doTransposeMultiply=.true. ++ input_options%justHelpMessage=.false. ++ ++ ! test na=1500 nev=50 nblk=16 --help --kernel --output_eigenvectors --output_eigenvalues ++ if (COMMAND_ARGUMENT_COUNT() .gt. 8) then ++ write(error_unit, '(a,i0,a)') "Invalid number (", COMMAND_ARGUMENT_COUNT(), ") of command line arguments!" ++ stop 1 ++ endif ++ ++ if (COMMAND_ARGUMENT_COUNT() .gt. 0) then ++ ++ call get_COMMAND_ARGUMENT(1, arg1) ++ ++ call parse_arguments(arg1, input_options) ++ ++ ++ ++ if (COMMAND_ARGUMENT_COUNT() .ge. 2) then ++ ! argument 2 ++ call get_COMMAND_ARGUMENT(2, arg2) ++ ++ call parse_arguments(arg2, input_options) ++ endif ++ ++ ! argument 3 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 3) then ++ ++ call get_COMMAND_ARGUMENT(3, arg3) ++ ++ call parse_arguments(arg3, input_options) ++ endif ++ ++ ! argument 4 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 4) then ++ ++ call get_COMMAND_ARGUMENT(4, arg4) ++ ++ call parse_arguments(arg4, input_options) ++ ++ endif ++ ++ ! argument 5 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 5) then ++ ++ call get_COMMAND_ARGUMENT(5, arg5) ++ ++ call parse_arguments(arg5, input_options) ++ endif ++ ++ ! argument 6 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 6) then ++ ++ call get_COMMAND_ARGUMENT(6, arg6) ++ ++ call parse_arguments(arg6, input_options) ++ endif ++ ++ ! argument 7 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 7) then ++ ++ call get_COMMAND_ARGUMENT(7, arg7) ++ ++ call parse_arguments(arg7, input_options) ++ ++ endif ++ ++ ! argument 8 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 8) then ++ ++ call get_COMMAND_ARGUMENT(8, arg8) ++ ++ call parse_arguments(arg8, input_options) ++ ++ endif ++ ++ ! argument 9 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 9) then ++ ++ call get_COMMAND_ARGUMENT(9, arg9) ++ ++ call parse_arguments(arg8, input_options) ++ ++ endif ++ ++ ! argument 10 ++ if (COMMAND_ARGUMENT_COUNT() .ge. 10) then ++ ++ call get_COMMAND_ARGUMENT(10, arg10) ++ ++ call parse_arguments(arg8, input_options) ++ ++ endif ++ ++ endif ++ ++ if (input_options%useQrIsSet .eq. 1 .and. input_options%datatype .eq. 2) then ++ print *,"You cannot use QR-decomposition in complex case" ++ stop 1 ++ endif ++ ++ end subroutine ++ ++ subroutine read_input_parameters_traditional_noskip(na, nev, nblk, write_to_file) ++ use precision_for_tests ++ implicit none ++ ++ TEST_INT_TYPE, intent(out) :: na, nev, nblk ++ ++ type(output_t), intent(out) :: write_to_file ++ logical :: skip_check_correctness ++ ++ call read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness) ++ end subroutine ++ ++ subroutine read_input_parameters_traditional(na, nev, nblk, write_to_file, skip_check_correctness) ++ use precision_for_tests ++ implicit none ++ ++ TEST_INT_TYPE, intent(out) :: na, nev, nblk ++ ++ type(output_t), intent(out) :: write_to_file ++ logical, intent(out) :: skip_check_correctness ++ ++ ! Command line arguments ++ character(len=128) :: arg1, arg2, arg3, arg4, arg5 ++ ++ ! default parameters ++ na = 5000 ++ nev = 150 ++ nblk = 16 ++ write_to_file%eigenvectors = .false. ++ write_to_file%eigenvalues = .false. ++ skip_check_correctness = .false. ++ ++ if (.not. any(COMMAND_ARGUMENT_COUNT() == [0, 3, 4, 5])) then ++ write(error_unit, '(a,i0,a)') "Invalid number (", COMMAND_ARGUMENT_COUNT(), ") of command line arguments!" ++ write(error_unit, *) "Expected: program [ [matrix_size num_eigenvalues block_size] & ++ ""output_eigenvalues"" ""output_eigenvectors""]" ++ stop 1 ++ endif ++ ++ if (COMMAND_ARGUMENT_COUNT() == 3) then ++ call GET_COMMAND_ARGUMENT(1, arg1) ++ call GET_COMMAND_ARGUMENT(2, arg2) ++ call GET_COMMAND_ARGUMENT(3, arg3) ++ ++ read(arg1, *) na ++ read(arg2, *) nev ++ read(arg3, *) nblk ++ endif ++ ++ if (COMMAND_ARGUMENT_COUNT() == 4) then ++ call GET_COMMAND_ARGUMENT(1, arg1) ++ call GET_COMMAND_ARGUMENT(2, arg2) ++ call GET_COMMAND_ARGUMENT(3, arg3) ++ call GET_COMMAND_ARGUMENT(4, arg4) ++ read(arg1, *) na ++ read(arg2, *) nev ++ read(arg3, *) nblk ++ ++ if (arg4 .eq. "output_eigenvalues") then ++ write_to_file%eigenvalues = .true. ++ elseif (arg4 .eq. "skip_check_correctness") then ++ skip_check_correctness = .true. ++ else ++ write(error_unit, *) & ++ "Invalid value for parameter 4. Must be ""output_eigenvalues"", ""skip_check_correctness"" or omitted" ++ stop 1 ++ endif ++ ++ endif ++ ++ if (COMMAND_ARGUMENT_COUNT() == 5) then ++ call GET_COMMAND_ARGUMENT(1, arg1) ++ call GET_COMMAND_ARGUMENT(2, arg2) ++ call GET_COMMAND_ARGUMENT(3, arg3) ++ call GET_COMMAND_ARGUMENT(4, arg4) ++ call GET_COMMAND_ARGUMENT(5, arg5) ++ read(arg1, *) na ++ read(arg2, *) nev ++ read(arg3, *) nblk ++ ++ if (arg4 .eq. "output_eigenvalues") then ++ write_to_file%eigenvalues = .true. ++ else ++ write(error_unit, *) "Invalid value for output flag! Must be ""output_eigenvalues"" or omitted" ++ stop 1 ++ endif ++ ++ if (arg5 .eq. "output_eigenvectors") then ++ write_to_file%eigenvectors = .true. ++ else ++ write(error_unit, *) "Invalid value for output flag! Must be ""output_eigenvectors"" or omitted" ++ stop 1 ++ endif ++ ++ endif ++ end subroutine ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_redir.c elpa-new_release_2021.11.001_ok/examples/shared/test_redir.c +--- elpa-new_release_2021.11.001/examples/shared/test_redir.c 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_redir.c 2022-01-26 10:10:58.378020000 +0100 +@@ -0,0 +1,125 @@ ++// This file is part of ELPA. ++// ++// The ELPA library was originally created by the ELPA consortium, ++// consisting of the following organizations: ++// ++// - Max Planck Computing and Data Facility (MPCDF), formerly known as ++// Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++// - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++// Informatik, ++// - Technische Universität München, Lehrstuhl für Informatik mit ++// Schwerpunkt Wissenschaftliches Rechnen , ++// - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++// - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++// Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++// and ++// - IBM Deutschland GmbH ++// ++// ++// More information can be found here: ++// http://elpa.mpcdf.mpg.de/ ++// ++// ELPA is free software: you can redistribute it and/or modify ++// it under the terms of the version 3 of the license of the ++// GNU Lesser General Public License as published by the Free ++// Software Foundation. ++// ++// ELPA 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 Lesser General Public License for more details. ++// ++// You should have received a copy of the GNU Lesser General Public License ++// along with ELPA. If not, see <http://www.gnu.org/licenses/> ++// ++// ELPA reflects a substantial effort on the part of the original ++// ELPA consortium, and we ask you to respect the spirit of the ++// license that we chose: i.e., please contribute any changes you ++// may have back to the original ELPA library distribution, and keep ++// any derivatives of ELPA under the same license that we chose for ++// the original distribution, the GNU Lesser General Public License. ++// ++// ++// -------------------------------------------------------------------------------------------------- ++#include <stdio.h> ++#include <fcntl.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <sys/stat.h> ++#include <sys/types.h> ++#include <unistd.h> ++#include <errno.h> ++ ++#define NAME_LENGTH 4096 ++#define FILENAME "./mpi_stdout/std%3s_rank%04d.txt" ++ ++FILE *tout, *terr; ++void dup_filename(char *filename, int dupfd); ++void dup_fd(int fd, int dupfd); ++ ++int _mkdirifnotexists(const char *dir) { ++ struct stat s; ++ if (stat(dir, &s) != 0) { ++ if (errno == ENOENT) { ++ if (mkdir(dir, 0755) != 0) { ++ perror("mkdir"); ++ return 0; ++ } else { ++ return 1; ++ } ++ } else { ++ perror("stat()"); ++ return 0; ++ } ++ } else if (!S_ISDIR(s.st_mode)) { ++ fprintf(stderr, "\"%s\" does exist and is not a directory\n", dir); ++ return 0; ++ } else { ++ return 1; ++ } ++} ++ ++int create_directories(void) { ++ if (!_mkdirifnotexists("mpi_stdout")) return 0; ++ return 1; ++} ++ ++void redirect_stdout(int *myproc) { ++ char buf[NAME_LENGTH]; ++ ++ if (*myproc == 0) { ++ snprintf(buf, NAME_LENGTH, "tee " FILENAME, "out", *myproc); ++ tout = popen(buf, "w"); ++ dup_fd(fileno(tout), 1); ++ ++ snprintf(buf, NAME_LENGTH, "tee " FILENAME, "err", *myproc); ++ terr = popen(buf, "w"); ++ dup_fd(fileno(terr), 2); ++ } else { ++ snprintf(buf, NAME_LENGTH, FILENAME, "out", *myproc); ++ dup_filename(buf, 1); ++ ++ snprintf(buf, NAME_LENGTH, FILENAME, "err", *myproc); ++ dup_filename(buf, 2); ++ } ++ ++ return; ++} ++ ++/* Redirect file descriptor dupfd to file filename */ ++void dup_filename(char *filename, int dupfd) { ++ int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0644); ++ if(fd < 0) { ++ perror("open()"); ++ exit(1); ++ } ++ dup_fd(fd, dupfd); ++} ++ ++/* Redirect file descriptor dupfd to file descriptor fd */ ++void dup_fd(int fd, int dupfd) { ++ if(dup2(fd,dupfd) < 0) { ++ perror("dup2()"); ++ exit(1); ++ } ++} +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_redirect.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_redirect.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_redirect.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_redirect.F90 2022-01-26 10:10:58.379123000 +0100 +@@ -0,0 +1,116 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++module test_redirect ++ use, intrinsic :: iso_c_binding ++ ++ implicit none ++ public ++ ++ logical :: use_redirect_stdout ++ ++ interface ++ integer(kind=C_INT) function create_directories_c() bind(C, name="create_directories") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ end function ++ end interface ++ ++ interface ++ subroutine redirect_stdout_c(myproc) bind(C, name="redirect_stdout") ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=C_INT), intent(in) :: myproc ++ end subroutine ++ end interface ++ ++ contains ++!> ++!> This function is the Fortran driver for the ++!> C program to create the redirect output ++!> directory ++!> ++!> \param none ++!> \result res integer indicates success or failure ++ function create_directories() result(res) ++ implicit none ++ integer(kind=C_INT) :: res ++ res = int(create_directories_c()) ++ end function ++!> ++!> This subroutine is the Fortran driver for the ++!> redirection of stdout and stderr of each MPI ++!> task ++!> ++!> \param myproc MPI task id ++ subroutine redirect_stdout(myproc) ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=C_INT), intent(in) :: myproc ++ call redirect_stdout_c(int(myproc, kind=C_INT)) ++ end subroutine ++!> ++!> This function checks, whether the environment variable ++!> "REDIRECT_ELPA_TEST_OUTPUT" is set to "true". ++!> Returns ".true." if variable is set, otherwise ".false." ++!> This function only works if the during the build process ++!> "HAVE_ENVIRONMENT_CHECKING" was tested successfully ++!> ++!> \param none ++!> \return logical ++ function check_redirect_environment_variable() result(redirect) ++ implicit none ++ logical :: redirect ++ character(len=255) :: REDIRECT_VARIABLE ++ ++ redirect = .false. ++ ++#if defined(HAVE_ENVIRONMENT_CHECKING) ++ call get_environment_variable("REDIRECT_ELPA_TEST_OUTPUT",REDIRECT_VARIABLE) ++#endif ++ if (trim(REDIRECT_VARIABLE) .eq. "true") redirect = .true. ++ ++ end function ++ ++end module test_redirect +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_scalapack.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_scalapack.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack.F90 2022-01-26 10:10:58.380143000 +0100 +@@ -0,0 +1,111 @@ ++! (c) Copyright Pavel Kus, 2017, MPCDF ++! ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++ ++#include "../Fortran/assert.h" ++#include "config-f90.h" ++ ++module test_scalapack ++ use test_util ++ ++ interface solve_scalapack_all ++ module procedure solve_pdsyevd ++ module procedure solve_pzheevd ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure solve_pssyevd ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure solve_pcheevd ++#endif ++ end interface ++ ++ interface solve_scalapack_part ++ module procedure solve_pdsyevr ++ module procedure solve_pzheevr ++#ifdef WANT_SINGLE_PRECISION_REAL ++ module procedure solve_pssyevr ++#endif ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ module procedure solve_pcheevr ++#endif ++ end interface ++ ++contains ++ ++#define COMPLEXCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_scalapack_template.F90" ++#undef DOUBLE_PRECISION ++#undef COMPLEXCASE ++ ++#ifdef WANT_SINGLE_PRECISION_COMPLEX ++ ++#define COMPLEXCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_scalapack_template.F90" ++#undef SINGLE_PRECISION ++#undef COMPLEXCASE ++ ++#endif /* WANT_SINGLE_PRECISION_COMPLEX */ ++ ++#define REALCASE 1 ++#define DOUBLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_scalapack_template.F90" ++#undef DOUBLE_PRECISION ++#undef REALCASE ++ ++#ifdef WANT_SINGLE_PRECISION_REAL ++ ++#define REALCASE 1 ++#define SINGLE_PRECISION 1 ++#include "../../src/general/precision_macros.h" ++#include "test_scalapack_template.F90" ++#undef SINGLE_PRECISION ++#undef REALCASE ++ ++#endif /* WANT_SINGLE_PRECISION_REAL */ ++ ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_scalapack_template.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack_template.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_scalapack_template.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_scalapack_template.F90 2022-01-26 10:10:58.381125000 +0100 +@@ -0,0 +1,161 @@ ++! (c) Copyright Pavel Kus, 2017, MPCDF ++! ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++ ++ ! compute all eigenvectors ++ subroutine solve_p& ++ &BLAS_CHAR_AND_SY_OR_HE& ++ &evd(na, a, sc_desc, ev, z) ++ implicit none ++#include "./test_precision_kinds.F90" ++ integer(kind=ik), intent(in) :: na ++ MATH_DATATYPE(kind=rck), intent(in) :: a(:,:) ++ MATH_DATATYPE(kind=rck), intent(inout) :: z(:,:) ++ real(kind=rk), intent(inout) :: ev(:) ++ integer(kind=ik), intent(in) :: sc_desc(:) ++ integer(kind=ik) :: info, lwork, liwork, lrwork ++ MATH_DATATYPE(kind=rck), allocatable :: work(:) ++ real(kind=rk), allocatable :: rwork(:) ++ integer, allocatable :: iwork(:) ++ ++ allocate(work(1), iwork(1), rwork(1)) ++ ++ ! query for required workspace ++#ifdef REALCASE ++ call p& ++ &BLAS_CHAR& ++ &syevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, -1, iwork, -1, info) ++#endif ++#ifdef COMPLEXCASE ++ call p& ++ &BLAS_CHAR& ++ &heevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, -1, rwork, -1, iwork, -1, info) ++#endif ++ ! write(*,*) "computed sizes", lwork, liwork, "required sizes ", work(1), iwork(1) ++ lwork = work(1) ++ liwork = iwork(1) ++ deallocate(work, iwork) ++ allocate(work(lwork), stat = info) ++ allocate(iwork(liwork), stat = info) ++#ifdef COMPLEXCASE ++ lrwork = rwork(1) ++ deallocate(rwork) ++ allocate(rwork(lrwork), stat = info) ++#endif ++ ! the actuall call to the method ++#ifdef REALCASE ++ call p& ++ &BLAS_CHAR& ++ &syevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, lwork, iwork, liwork, info) ++#endif ++#ifdef COMPLEXCASE ++ call p& ++ &BLAS_CHAR& ++ &heevd('V', 'U', na, a, 1, 1, sc_desc, ev, z, 1, 1, sc_desc, work, lwork, rwork, lrwork, iwork, liwork, info) ++#endif ++ ++ deallocate(iwork, work, rwork) ++ end subroutine ++ ++ ++ ! compute part of eigenvectors ++ subroutine solve_p& ++ &BLAS_CHAR_AND_SY_OR_HE& ++ &evr(na, a, sc_desc, nev, ev, z) ++ implicit none ++#include "./test_precision_kinds.F90" ++ integer(kind=ik), intent(in) :: na, nev ++ MATH_DATATYPE(kind=rck), intent(in) :: a(:,:) ++ MATH_DATATYPE(kind=rck), intent(inout) :: z(:,:) ++ real(kind=rk), intent(inout) :: ev(:) ++ integer(kind=ik), intent(in) :: sc_desc(:) ++ integer(kind=ik) :: info, lwork, liwork, lrwork ++ MATH_DATATYPE(kind=rck), allocatable :: work(:) ++ real(kind=rk), allocatable :: rwork(:) ++ integer, allocatable :: iwork(:) ++ integer(kind=ik) :: comp_eigenval, comp_eigenvec, smallest_ev_idx, largest_ev_idx ++ ++ allocate(work(1), iwork(1), rwork(1)) ++ smallest_ev_idx = 1 ++ largest_ev_idx = nev ++ ! query for required workspace ++#ifdef REALCASE ++ call p& ++ &BLAS_CHAR& ++ &syevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, & ++ comp_eigenval, comp_eigenvec, ev, z, 1, 1, sc_desc, work, -1, iwork, -1, info) ++#endif ++#ifdef COMPLEXCASE ++ call p& ++ &BLAS_CHAR& ++ &heevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, & ++ comp_eigenval, comp_eigenvec, ev, z, 1, 1, sc_desc, work, -1, rwork, -1, iwork, -1, info) ++#endif ++ ! write(*,*) "computed sizes", lwork, liwork, "required sizes ", work(1), iwork(1) ++ lwork = work(1) ++ liwork = iwork(1) ++ deallocate(work, iwork) ++ allocate(work(lwork), stat = info) ++ allocate(iwork(liwork), stat = info) ++#ifdef COMPLEXCASE ++ lrwork = rwork(1) ++ deallocate(rwork) ++ allocate(rwork(lrwork), stat = info) ++#endif ++ ! the actuall call to the method ++#ifdef REALCASE ++ call p& ++ &BLAS_CHAR& ++ &syevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, & ++ comp_eigenval, comp_eigenvec, ev, z, 1, 1, sc_desc, work, lwork, iwork, liwork, info) ++#endif ++#ifdef COMPLEXCASE ++ call p& ++ &BLAS_CHAR& ++ &heevr('V', 'I', 'U', na, a, 1, 1, sc_desc, 0.0_rk, 0.0_rk, smallest_ev_idx, largest_ev_idx, & ++ comp_eigenval, comp_eigenvec, ev, z, 1, 1, sc_desc, work, lwork, rwork, lrwork, iwork, liwork, info) ++#endif ++ assert(comp_eigenval == nev) ++ assert(comp_eigenvec == nev) ++ deallocate(iwork, work, rwork) ++ end subroutine ++ +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_setup_mpi.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_setup_mpi.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_setup_mpi.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_setup_mpi.F90 2022-01-26 10:10:58.382203000 +0100 +@@ -0,0 +1,115 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++module test_setup_mpi ++ ++ contains ++ ++ subroutine setup_mpi(myid, nprocs) ++ use test_util ++ use ELPA_utilities ++ use precision_for_tests ++ implicit none ++ ++ TEST_INT_MPI_TYPE :: mpierr ++ ++ TEST_INT_TYPE, intent(out) :: myid, nprocs ++ TEST_INT_MPI_TYPE :: myidMPI, nprocsMPI ++#ifdef WITH_OPENMP_TRADITIONAL ++ TEST_INT_MPI_TYPE :: required_mpi_thread_level, & ++ provided_mpi_thread_level ++#endif ++ ++ ++#ifdef WITH_MPI ++ ++#ifndef WITH_OPENMP_TRADITIONAL ++ call mpi_init(mpierr) ++#else ++ required_mpi_thread_level = MPI_THREAD_MULTIPLE ++ ++ call mpi_init_thread(required_mpi_thread_level, & ++ provided_mpi_thread_level, mpierr) ++ ++ if (required_mpi_thread_level .ne. provided_mpi_thread_level) then ++ write(error_unit,*) "MPI ERROR: MPI_THREAD_MULTIPLE is not provided on this system" ++ write(error_unit,*) " only ", mpi_thread_level_name(provided_mpi_thread_level), " is available" ++ call MPI_FINALIZE(mpierr) ++ call exit(77) ++ endif ++#endif ++ call mpi_comm_rank(mpi_comm_world, myidMPI, mpierr) ++ call mpi_comm_size(mpi_comm_world, nprocsMPI,mpierr) ++ ++ myid = int(myidMPI,kind=BLAS_KIND) ++ nprocs = int(nprocsMPI,kind=BLAS_KIND) ++ ++ if (nprocs <= 1) then ++ print *, "The test programs must be run with more than 1 task to ensure that usage with MPI is actually tested" ++ stop 1 ++ endif ++#else ++ myid = 0 ++ nprocs = 1 ++#endif ++ ++ end subroutine ++ ++ ++end module +diff -ruN elpa-new_release_2021.11.001/examples/shared/tests_variable_definitions.F90 elpa-new_release_2021.11.001_ok/examples/shared/tests_variable_definitions.F90 +--- elpa-new_release_2021.11.001/examples/shared/tests_variable_definitions.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/tests_variable_definitions.F90 2022-01-26 10:10:58.385037000 +0100 +@@ -0,0 +1,65 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! https://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! This file was written by A. Marek, MPC ++ ++#include "config-f90.h" ++module precision_for_tests ++ use iso_c_binding, only : C_FLOAT, C_DOUBLE, C_FLOAT_COMPLEX, C_DOUBLE_COMPLEX, C_INT32_T, C_INT64_T, C_INT ++ ++ implicit none ++ integer, parameter :: rk8 = C_DOUBLE ++ integer, parameter :: rk4 = C_FLOAT ++ integer, parameter :: ck8 = C_DOUBLE_COMPLEX ++ integer, parameter :: ck4 = C_FLOAT_COMPLEX ++ integer, parameter :: ik = C_INT32_T ++ integer, parameter :: lik = C_INT64_T ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++ integer, parameter :: BLAS_KIND = C_INT64_T ++#else ++ integer, parameter :: BLAS_KIND = C_INT32_T ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++ integer, parameter :: MPI_KIND = C_INT64_T ++#else ++ integer, parameter :: MPI_KIND = C_INT32_T ++#endif ++end module precision_for_tests +diff -ruN elpa-new_release_2021.11.001/examples/shared/test_util.F90 elpa-new_release_2021.11.001_ok/examples/shared/test_util.F90 +--- elpa-new_release_2021.11.001/examples/shared/test_util.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/shared/test_util.F90 2022-01-26 10:10:58.383252000 +0100 +@@ -0,0 +1,156 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++#include "config-f90.h" ++#undef TEST_INT_TYPE ++#undef INT_TYPE ++#undef TEST_INT_MPI_TYPE ++#undef INT_MPI_TYPE ++ ++#ifdef HAVE_64BIT_INTEGER_MATH_SUPPORT ++#define TEST_INT_TYPE integer(kind=c_int64_t) ++#define INT_TYPE c_int64_t ++#else ++#define TEST_INT_TYPE integer(kind=c_int32_t) ++#define INT_TYPE c_int32_t ++#endif ++#ifdef HAVE_64BIT_INTEGER_MPI_SUPPORT ++#define TEST_INT_MPI_TYPE integer(kind=c_int64_t) ++#define INT_MPI_TYPE c_int64_t ++#else ++#define TEST_INT_MPI_TYPE integer(kind=c_int32_t) ++#define INT_MPI_TYPE c_int32_t ++#endif ++ ++module test_util ++ use iso_c_binding ++ use precision_for_tests ++#ifdef WITH_MPI ++#ifdef HAVE_MPI_MODULE ++ use mpi ++ implicit none ++#else ++ implicit none ++ include 'mpif.h' ++#endif ++#else ++ TEST_INT_MPI_TYPE, parameter :: mpi_comm_world = -1 ++#endif ++ ++ contains ++!> ++!> This function translates, if ELPA was build with OpenMP support, ++!> the found evel of "thread safetiness" from the internal number ++!> of the MPI library into a human understandable value ++!> ++!> \param level thread-saftiness of the MPI library ++!> \return str human understandable value of thread saftiness ++ pure function mpi_thread_level_name(level) result(str) ++ use, intrinsic :: iso_c_binding ++ implicit none ++ integer(kind=c_int), intent(in) :: level ++ character(len=21) :: str ++#ifdef WITH_MPI ++ select case(level) ++ case (MPI_THREAD_SINGLE) ++ str = "MPI_THREAD_SINGLE" ++ case (MPI_THREAD_FUNNELED) ++ str = "MPI_THREAD_FUNNELED" ++ case (MPI_THREAD_SERIALIZED) ++ str = "MPI_THREAD_SERIALIZED" ++ case (MPI_THREAD_MULTIPLE) ++ str = "MPI_THREAD_MULTIPLE" ++ case default ++ write(str,'(i0,1x,a)') level, "(Unknown level)" ++ end select ++#endif ++ end function ++ ++ function seconds() result(s) ++ integer :: ticks, tick_rate ++ real(kind=c_double) :: s ++ ++ call system_clock(count=ticks, count_rate=tick_rate) ++ s = real(ticks, kind=c_double) / tick_rate ++ end function ++ ++ subroutine x_a(condition, condition_string, file, line) ++#ifdef HAVE_ISO_FORTRAN_ENV ++ use iso_fortran_env, only : error_unit ++#endif ++ implicit none ++#ifndef HAVE_ISO_FORTRAN_ENV ++ integer, parameter :: error_unit = 0 ++#endif ++ logical, intent(in) :: condition ++ character(len=*), intent(in) :: condition_string ++ character(len=*), intent(in) :: file ++ integer, intent(in) :: line ++ ++ if (.not. condition) then ++ write(error_unit,'(a,i0)') "Assertion `" // condition_string // "` failed at " // file // ":", line ++ stop 1 ++ end if ++ end subroutine ++ ++ subroutine x_ao(error_code, error_code_string, file, line) ++ use elpa ++#ifdef HAVE_ISO_FORTRAN_ENV ++ use iso_fortran_env, only : error_unit ++#endif ++ implicit none ++#ifndef HAVE_ISO_FORTRAN_ENV ++ integer, parameter :: error_unit = 0 ++#endif ++ integer, intent(in) :: error_code ++ character(len=*), intent(in) :: error_code_string ++ character(len=*), intent(in) :: file ++ integer, intent(in) :: line ++ ++ if (error_code /= ELPA_OK) then ++ write(error_unit,'(a,i0)') "Assertion failed: `" // error_code_string // & ++ " is " // elpa_strerr(error_code) // "` at " // file // ":", line ++ stop 1 ++ end if ++ end subroutine ++end module ++ +diff -ruN elpa-new_release_2021.11.001/examples/test_real_e1.F90 elpa-new_release_2021.11.001_ok/examples/test_real_e1.F90 +--- elpa-new_release_2021.11.001/examples/test_real_e1.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/test_real_e1.F90 2022-01-28 16:43:29.688434545 +0100 +@@ -0,0 +1,255 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++!> ++!> Fortran test programm to demonstrates the use of ++!> ELPA 1 real case library. ++!> If "HAVE_REDIRECT" was defined at build time ++!> the stdout and stderr output of each MPI task ++!> can be redirected to files if the environment ++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set ++!> to "true". ++!> ++!> By calling executable [arg1] [arg2] [arg3] [arg4] ++!> one can define the size (arg1), the number of ++!> Eigenvectors to compute (arg2), and the blocking (arg3). ++!> If these values are not set default values (4000, 1500, 16) ++!> are choosen. ++!> If these values are set the 4th argument can be ++!> "output", which specifies that the EV's are written to ++!> an ascii file. ++!> ++program test_real_example ++ ++!------------------------------------------------------------------------------- ++! Standard eigenvalue problem - REAL version ++! ++! This program demonstrates the use of the ELPA module ++! together with standard scalapack routines ++! ++! Copyright of the original code rests with the authors inside the ELPA ++! consortium. The copyright of any additional modifications shall rest ++! with their original authors, but shall adhere to the licensing terms ++! distributed along with the original code in the file "COPYING". ++! ++!------------------------------------------------------------------------------- ++ ++ use iso_c_binding ++ ++ use elpa ++#ifdef WITH_OPENMP_TRADITIONAL ++ use omp_lib ++#endif ++ ++ ++#ifdef HAVE_MPI_MODULE ++ use mpi ++ implicit none ++#else ++ implicit none ++ include 'mpif.h' ++#endif ++ ++ !------------------------------------------------------------------------------- ++ ! Please set system size parameters below! ++ ! na: System size ++ ! nev: Number of eigenvectors to be calculated ++ ! nblk: Blocking factor in block cyclic distribution ++ !------------------------------------------------------------------------------- ++ ++ integer :: nblk ++ integer :: na, nev ++ ++ integer :: np_rows, np_cols, na_rows, na_cols ++ ++ integer :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols ++ integer :: i, mpierr, my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ integer, external :: numroc ++ ++ real(kind=c_double), allocatable :: a(:,:), z(:,:), ev(:) ++ ++ integer :: iseed(4096) ! Random seed, size should be sufficient for every generator ++ ++ integer :: STATUS ++ integer :: success ++ character(len=8) :: task_suffix ++ integer :: j ++ ++ integer, parameter :: error_units = 0 ++ ++#ifdef WITH_OPENMP_TRADITIONAL ++ integer n_threads ++#endif ++ class(elpa_t), pointer :: e ++ !------------------------------------------------------------------------------- ++ ++ ++ ! default parameters ++ na = 1000 ++ nev = 500 ++ nblk = 16 ++ ++ call mpi_init_thread(MPI_THREAD_SERIALIZED,info,mpierr) ++ call mpi_comm_rank(mpi_comm_world,myid,mpierr) ++ call mpi_comm_size(mpi_comm_world,nprocs,mpierr) ++ ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ! at the end of the above loop, nprocs is always divisible by np_cols ++ ++ np_rows = nprocs/np_cols ++ ++ ! initialise BLACS ++ my_blacs_ctxt = mpi_comm_world ++ call BLACS_Gridinit(my_blacs_ctxt, 'C', np_rows, np_cols) ++ call BLACS_Gridinfo(my_blacs_ctxt, nprow, npcol, my_prow, my_pcol) ++ ++ if (myid==0) then ++ print '(a)','| Past BLACS_Gridinfo.' ++ end if ++ ! determine the neccessary size of the distributed matrices, ++ ! we use the scalapack tools routine NUMROC ++ ++#ifdef WITH_OPENMP_TRADITIONAL ++ n_threads=omp_get_max_threads() ++#endif ++ ++ ++ na_rows = numroc(na, nblk, my_prow, 0, np_rows) ++ na_cols = numroc(na, nblk, my_pcol, 0, np_cols) ++ ++ ++ ! set up the scalapack descriptor for the checks below ++ ! For ELPA the following restrictions hold: ++ ! - block sizes in both directions must be identical (args 4 a. 5) ++ ! - first row and column of the distributed matrix must be on ++ ! row/col 0/0 (arg 6 and 7) ++ ++ call descinit(sc_desc, na, na, nblk, nblk, 0, 0, my_blacs_ctxt, na_rows, info) ++ ++ if (info .ne. 0) then ++ write(error_units,*) 'Error in BLACS descinit! info=',info ++ write(error_units,*) 'Most likely this happend since you want to use' ++ write(error_units,*) 'more MPI tasks than are possible for your' ++ write(error_units,*) 'problem size (matrix size and blocksize)!' ++ write(error_units,*) 'The blacsgrid can not be set up properly' ++ write(error_units,*) 'Try reducing the number of MPI tasks...' ++ call MPI_ABORT(mpi_comm_world, 1, mpierr) ++ endif ++ ++ if (myid==0) then ++ print '(a)','| Past scalapack descriptor setup.' ++ end if ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ ++ allocate(ev(na)) ++ ++ ! we want different random numbers on every process ++ ! (otherwise A might get rank deficient): ++ ++ iseed(:) = myid ++ call RANDOM_SEED(put=iseed) ++ call RANDOM_NUMBER(z) ++ ++ a(:,:) = z(:,:) ++ ++ if (myid == 0) then ++ print '(a)','| Random matrix block has been set up. (only processor 0 confirms this step)' ++ endif ++ call pdtran(na, na, 1.d0, z, 1, 1, sc_desc, 1.d0, a, 1, 1, sc_desc) ! A = A + Z**T ++ ++ !------------------------------------------------------------------------------- ++ ++ if (elpa_init(20171201) /= elpa_ok) then ++ print *, "ELPA API version not supported" ++ stop ++ endif ++ e => elpa_allocate() ++ ++ ! set parameters decribing the matrix and it's MPI distribution ++ call e%set("na", na, success) ++ call e%set("nev", nev, success) ++ call e%set("local_nrows", na_rows, success) ++ call e%set("local_ncols", na_cols, success) ++ call e%set("nblk", nblk, success) ++ call e%set("mpi_comm_parent", mpi_comm_world, success) ++ call e%set("process_row", my_prow, success) ++ call e%set("process_col", my_pcol, success) ++ ++#ifdef CUDA ++ call e%set("nvidia-gpu", 1, success) ++#endif ++#ifdef WITH_OPENMP_TRADITIONAL ++ call e%set("omp_threads", n_threads, success) ++#endif ++ success = e%setup() ++ ++ call e%set("solver", elpa_solver_1stage, success) ++ ++ ++ ! Calculate eigenvalues/eigenvectors ++ ++ if (myid==0) then ++ print '(a)','| Entering one-step ELPA solver ... ' ++ print * ++ end if ++ ++ call mpi_barrier(mpi_comm_world, mpierr) ! for correct timings only ++ call e%eigenvectors(a, ev, z, success) ++ ++ if (myid==0) then ++ print '(a)','| One-step ELPA solver complete.' ++ print * ++ end if ++ ++ call elpa_deallocate(e) ++ call elpa_uninit() ++ ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++ ++end ++ +diff -ruN elpa-new_release_2021.11.001/examples/test_real_e2.F90 elpa-new_release_2021.11.001_ok/examples/test_real_e2.F90 +--- elpa-new_release_2021.11.001/examples/test_real_e2.F90 1970-01-01 01:00:00.000000000 +0100 ++++ elpa-new_release_2021.11.001_ok/examples/test_real_e2.F90 2022-02-01 09:28:16.102146696 +0100 +@@ -0,0 +1,262 @@ ++! This file is part of ELPA. ++! ++! The ELPA library was originally created by the ELPA consortium, ++! consisting of the following organizations: ++! ++! - Max Planck Computing and Data Facility (MPCDF), formerly known as ++! Rechenzentrum Garching der Max-Planck-Gesellschaft (RZG), ++! - Bergische Universität Wuppertal, Lehrstuhl für angewandte ++! Informatik, ++! - Technische Universität München, Lehrstuhl für Informatik mit ++! Schwerpunkt Wissenschaftliches Rechnen , ++! - Fritz-Haber-Institut, Berlin, Abt. Theorie, ++! - Max-Plack-Institut für Mathematik in den Naturwissenschaften, ++! Leipzig, Abt. Komplexe Strukutren in Biologie und Kognition, ++! and ++! - IBM Deutschland GmbH ++! ++! ++! More information can be found here: ++! http://elpa.mpcdf.mpg.de/ ++! ++! ELPA is free software: you can redistribute it and/or modify ++! it under the terms of the version 3 of the license of the ++! GNU Lesser General Public License as published by the Free ++! Software Foundation. ++! ++! ELPA 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 Lesser General Public License for more details. ++! ++! You should have received a copy of the GNU Lesser General Public License ++! along with ELPA. If not, see <http://www.gnu.org/licenses/> ++! ++! ELPA reflects a substantial effort on the part of the original ++! ELPA consortium, and we ask you to respect the spirit of the ++! license that we chose: i.e., please contribute any changes you ++! may have back to the original ELPA library distribution, and keep ++! any derivatives of ELPA under the same license that we chose for ++! the original distribution, the GNU Lesser General Public License. ++! ++! ++!> ++!> Fortran test programm to demonstrates the use of ++!> ELPA 2 real case library. ++!> If "HAVE_REDIRECT" was defined at build time ++!> the stdout and stderr output of each MPI task ++!> can be redirected to files if the environment ++!> variable "REDIRECT_ELPA_TEST_OUTPUT" is set ++!> to "true". ++!> ++!> By calling executable [arg1] [arg2] [arg3] [arg4] ++!> one can define the size (arg1), the number of ++!> Eigenvectors to compute (arg2), and the blocking (arg3). ++!> If these values are not set default values (4000, 1500, 16) ++!> are choosen. ++!> If these values are set the 4th argument can be ++!> "output", which specifies that the EV's are written to ++!> an ascii file. ++!> ++program test_real_example ++ ++!------------------------------------------------------------------------------- ++! Standard eigenvalue problem - REAL version ++! ++! This program demonstrates the use of the ELPA module ++! together with standard scalapack routines ++! ++! Copyright of the original code rests with the authors inside the ELPA ++! consortium. The copyright of any additional modifications shall rest ++! with their original authors, but shall adhere to the licensing terms ++! distributed along with the original code in the file "COPYING". ++! ++!------------------------------------------------------------------------------- ++ ++ use iso_c_binding ++ ++ use elpa ++ ++#ifdef HAVE_MPI_MODULE ++ use mpi ++ implicit none ++#else ++ implicit none ++ include 'mpif.h' ++#endif ++ ++ !------------------------------------------------------------------------------- ++ ! Please set system size parameters below! ++ ! na: System size ++ ! nev: Number of eigenvectors to be calculated ++ ! nblk: Blocking factor in block cyclic distribution ++ !------------------------------------------------------------------------------- ++ ++ integer :: nblk ++ integer :: na, nev ++ ++ integer :: np_rows, np_cols, na_rows, na_cols ++ ++ integer :: myid, nprocs, my_prow, my_pcol, mpi_comm_rows, mpi_comm_cols ++ integer :: i, mpierr, my_blacs_ctxt, sc_desc(9), info, nprow, npcol ++ ++ integer, external :: numroc ++ ++ real(kind=c_double), allocatable :: a(:,:), z(:,:), ev(:) ++ ++ integer :: iseed(4096) ! Random seed, size should be sufficient for every generator ++ ++ integer :: STATUS ++ integer :: success ++ character(len=8) :: task_suffix ++ integer :: j ++ ++ integer, parameter :: error_units = 0 ++ ++ class(elpa_t), pointer :: e ++ !------------------------------------------------------------------------------- ++ ++ ++ ! default parameters ++ na = 1000 ++ nev = 500 ++ nblk = 16 ++ ++ call mpi_init_thread(MPI_THREAD_SERIALIZED,info,mpierr) ++ call mpi_comm_rank(mpi_comm_world,myid,mpierr) ++ call mpi_comm_size(mpi_comm_world,nprocs,mpierr) ++ ++ do np_cols = NINT(SQRT(REAL(nprocs))),2,-1 ++ if(mod(nprocs,np_cols) == 0 ) exit ++ enddo ++ ! at the end of the above loop, nprocs is always divisible by np_cols ++ ++ np_rows = nprocs/np_cols ++ ++ ! initialise BLACS ++ my_blacs_ctxt = mpi_comm_world ++ call BLACS_Gridinit(my_blacs_ctxt, 'C', np_rows, np_cols) ++ call BLACS_Gridinfo(my_blacs_ctxt, nprow, npcol, my_prow, my_pcol) ++ ++ if (myid==0) then ++ print '(a)','| Past BLACS_Gridinfo.' ++ end if ++ ! determine the neccessary size of the distributed matrices, ++ ! we use the scalapack tools routine NUMROC ++ ++ na_rows = numroc(na, nblk, my_prow, 0, np_rows) ++ na_cols = numroc(na, nblk, my_pcol, 0, np_cols) ++ ++ ++ ! set up the scalapack descriptor for the checks below ++ ! For ELPA the following restrictions hold: ++ ! - block sizes in both directions must be identical (args 4 a. 5) ++ ! - first row and column of the distributed matrix must be on ++ ! row/col 0/0 (arg 6 and 7) ++ ++ call descinit(sc_desc, na, na, nblk, nblk, 0, 0, my_blacs_ctxt, na_rows, info) ++ ++ if (info .ne. 0) then ++ write(error_units,*) 'Error in BLACS descinit! info=',info ++ write(error_units,*) 'Most likely this happend since you want to use' ++ write(error_units,*) 'more MPI tasks than are possible for your' ++ write(error_units,*) 'problem size (matrix size and blocksize)!' ++ write(error_units,*) 'The blacsgrid can not be set up properly' ++ write(error_units,*) 'Try reducing the number of MPI tasks...' ++ call MPI_ABORT(mpi_comm_world, 1, mpierr) ++ endif ++ ++ if (myid==0) then ++ print '(a)','| Past scalapack descriptor setup.' ++ end if ++ ++ allocate(a (na_rows,na_cols)) ++ allocate(z (na_rows,na_cols)) ++ ++ allocate(ev(na)) ++ ++ ! we want different random numbers on every process ++ ! (otherwise A might get rank deficient): ++ ++ iseed(:) = myid ++ call RANDOM_SEED(put=iseed) ++ call RANDOM_NUMBER(z) ++ ++ a(:,:) = z(:,:) ++ ++ if (myid == 0) then ++ print '(a)','| Random matrix block has been set up. (only processor 0 confirms this step)' ++ endif ++ call pdtran(na, na, 1.d0, z, 1, 1, sc_desc, 1.d0, a, 1, 1, sc_desc) ! A = A + Z**T ++ ++ !------------------------------------------------------------------------------- ++ ++ if (elpa_init(20171201) /= elpa_ok) then ++ print *, "ELPA API version not supported" ++ stop ++ endif ++ e => elpa_allocate() ++ ++ ! set parameters decribing the matrix and it's MPI distribution ++ call e%set("na", na, success) ++ call e%set("nev", nev, success) ++ call e%set("local_nrows", na_rows, success) ++ call e%set("local_ncols", na_cols, success) ++ call e%set("nblk", nblk, success) ++ call e%set("mpi_comm_parent", mpi_comm_world, success) ++ call e%set("process_row", my_prow, success) ++ call e%set("process_col", my_pcol, success) ++#ifdef CUDA ++ call e%set("nvidia-gpu", 1, success) ++#endif ++ ++ success = e%setup() ++ ++#ifdef CUDAKERNEL ++ call e%set("real_kernel", ELPA_2STAGE_REAL_NVIDIA_GPU, success) ++#endif ++#ifdef AVX512 ++ call e%set("real_kernel", ELPA_2STAGE_REAL_AVX512_BLOCK2,success ) ++#endif ++#ifdef AVX2_B6 ++ call e%set("real_kernel", ELPA_2STAGE_REAL_AVX2_BLOCK6,success ) ++#endif ++#ifdef AVX2_B4 ++ call e%set("real_kernel", ELPA_2STAGE_REAL_AVX2_BLOCK4,success ) ++#endif ++#ifdef AVX2_B2 ++ call e%set("real_kernel", ELPA_2STAGE_REAL_AVX2_BLOCK2,success ) ++#endif ++#ifdef GENERIC ++ call e%set("real_kernel", ELPA_2STAGE_REAL_GENERIC,success ) ++#endif ++#ifdef GENERIC_SIMPLE ++ call e%set("real_kernel", ELPA_2STAGE_REAL_GENERIC_SIMPLE,success ) ++#endif ++ ++ call e%set("solver", elpa_solver_2stage, success) ++ ++ ++ ! Calculate eigenvalues/eigenvectors ++ ++ if (myid==0) then ++ print '(a)','| Entering two-step ELPA solver ... ' ++ print * ++ end if ++ ++ call mpi_barrier(mpi_comm_world, mpierr) ! for correct timings only ++ call e%eigenvectors(a, ev, z, success) ++ ++ if (myid==0) then ++ print '(a)','| Two-step ELPA solver complete.' ++ print * ++ end if ++ ++ call elpa_deallocate(e) ++ call elpa_uninit() ++ ++ call blacs_gridexit(my_blacs_ctxt) ++ call mpi_finalize(mpierr) ++ ++end ++ diff --git a/Golden_Repo/e/elfutils/elfutils-0.185-GCCcore-11.2.0.eb b/Golden_Repo/e/elfutils/elfutils-0.185-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..e71a4d7646ed97331fe6f311556d51795fa96048 --- /dev/null +++ b/Golden_Repo/e/elfutils/elfutils-0.185-GCCcore-11.2.0.eb @@ -0,0 +1,41 @@ +easyblock = 'ConfigureMake' + +name = 'elfutils' +version = '0.185' + +homepage = 'https://elfutils.org/' + +description = """ + The elfutils project provides libraries and tools for ELF files + and DWARF data. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = ['https://sourceware.org/elfutils/ftp/%(version)s/'] +sources = [SOURCE_TAR_BZ2] +checksums = ['dc8d3e74ab209465e7f568e1b3bb9a5a142f8656e2b57d10049a73da2ae6b5a6'] + +builddependencies = [ + ('M4', '1.4.19'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('binutils', '2.37'), + ('bzip2', '1.0.8'), + ('libarchive', '3.5.1'), + ('XZ', '5.2.5'), + ('zstd', '1.5.0'), +] + +configopts = "--disable-debuginfod --disable-libdebuginfod" + +sanity_check_paths = { + 'files': ['bin/eu-elfcmp', 'include/dwarf.h', 'lib/libelf.%s' % SHLIB_EXT], + 'dirs': [] +} + +sanity_check_commands = ["eu-elfcmp --help"] + +moduleclass = 'lib' diff --git a/Golden_Repo/f/FreeImage/FreeImage-3.18.0-GCCcore-11.2.0.eb b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..7eca59b715bd4a7220dfca1c288bed1fc25976e8 --- /dev/null +++ b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-GCCcore-11.2.0.eb @@ -0,0 +1,40 @@ +easyblock = 'ConfigureMake' + +name = 'FreeImage' +version = '3.18.0' + +homepage = 'http://freeimage.sourceforge.net' +description = """FreeImage is an Open Source library project for developers who would like to support popular graphics +image formats like PNG, BMP, JPEG, TIFF and others as needed by today's multimedia applications. FreeImage is easy to +use, fast, multithreading safe.""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} +toolchainopts = {'pic': True, 'cstd': 'c++11'} + +source_urls = [SOURCEFORGE_SOURCE] +sources = ['%%(name)s%s.zip' % ''.join(version.split('.'))] +patches = ['%(name)s-%(version)s-fix-makefile.patch'] +checksums = [ + 'f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd', # FreeImage3180.zip + '3eaa1eb9562ccfd0cb95a37879bb7e3e8c745166596d75af529478181ef006a0', # FreeImage-3.18.0-fix-makefile.patch +] + +builddependencies = [('binutils', '2.37')] + +skipsteps = ['configure'] + +buildopts = ['', '-f Makefile.fip'] +installopts = [ + 'INCDIR=%(installdir)s/include INSTALLDIR=%(installdir)s/lib', + '-f Makefile.fip INCDIR=%(installdir)s/include INSTALLDIR=%(installdir)s/lib' +] + +dependencies = [('zlib', '1.2.11')] + +sanity_check_paths = { + 'files': ['include/FreeImage.h', 'include/FreeImagePlus.h', 'lib/libfreeimage.a', 'lib/libfreeimage.%s' % SHLIB_EXT, + 'lib/libfreeimageplus.a', 'lib/libfreeimageplus.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'vis' diff --git a/Golden_Repo/f/FreeImage/FreeImage-3.18.0-fix-makefile.patch b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-fix-makefile.patch new file mode 100644 index 0000000000000000000000000000000000000000..ac35040d4d637adaf48ca909d3988ead0e628f07 --- /dev/null +++ b/Golden_Repo/f/FreeImage/FreeImage-3.18.0-fix-makefile.patch @@ -0,0 +1,54 @@ +# Do not install files to root user +# wpoely86@gmail.com +diff -ur FreeImage.orig/Makefile.fip FreeImage/Makefile.fip +--- FreeImage.orig/Makefile.fip 2015-03-10 09:03:56.000000000 +0100 ++++ FreeImage/Makefile.fip 2019-04-09 10:32:42.052332853 +0200 +@@ -11,7 +11,7 @@ + # Converts cr/lf to just lf + DOS2UNIX = dos2unix + +-LIBRARIES = -lstdc++ ++LIBRARIES = -lstdc++ $(LIBS) + + MODULES = $(SRCS:.c=.o) + MODULES := $(MODULES:.cpp=.o) +@@ -72,10 +72,10 @@ + + install: + install -d $(INCDIR) $(INSTALLDIR) +- install -m 644 -o root -g root $(HEADER) $(INCDIR) +- install -m 644 -o root -g root $(HEADERFIP) $(INCDIR) +- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR) +- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR) ++ install -m 644 $(HEADER) $(INCDIR) ++ install -m 644 $(HEADERFIP) $(INCDIR) ++ install -m 644 $(STATICLIB) $(INSTALLDIR) ++ install -m 755 $(SHAREDLIB) $(INSTALLDIR) + ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME) + ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME) + +diff -ur FreeImage.orig/Makefile.gnu FreeImage/Makefile.gnu +--- FreeImage.orig/Makefile.gnu 2015-03-10 09:04:00.000000000 +0100 ++++ FreeImage/Makefile.gnu 2019-04-09 10:31:59.066052732 +0200 +@@ -11,7 +11,7 @@ + # Converts cr/lf to just lf + DOS2UNIX = dos2unix + +-LIBRARIES = -lstdc++ ++LIBRARIES = -lstdc++ $(LIBS) + + MODULES = $(SRCS:.c=.o) + MODULES := $(MODULES:.cpp=.o) +@@ -71,9 +71,9 @@ + + install: + install -d $(INCDIR) $(INSTALLDIR) +- install -m 644 -o root -g root $(HEADER) $(INCDIR) +- install -m 644 -o root -g root $(STATICLIB) $(INSTALLDIR) +- install -m 755 -o root -g root $(SHAREDLIB) $(INSTALLDIR) ++ install -m 644 $(HEADER) $(INCDIR) ++ install -m 644 $(STATICLIB) $(INSTALLDIR) ++ install -m 755 $(SHAREDLIB) $(INSTALLDIR) + ln -sf $(SHAREDLIB) $(INSTALLDIR)/$(VERLIBNAME) + ln -sf $(VERLIBNAME) $(INSTALLDIR)/$(LIBNAME) + # ldconfig diff --git a/Golden_Repo/f/FreeSurfer/FreeSurfer-7.1.1-GCCcore-11.2.0.eb b/Golden_Repo/f/FreeSurfer/FreeSurfer-7.1.1-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..c9be013c21af7af0575ec8e1c109fb944eaa6d3d --- /dev/null +++ b/Golden_Repo/f/FreeSurfer/FreeSurfer-7.1.1-GCCcore-11.2.0.eb @@ -0,0 +1,38 @@ +# For using $FASTDATA_jsc to determine license path. The local prefix is to appease the checker +import os as local_os + +name = 'FreeSurfer' +version = '7.1.1' + +homepage = 'http://surfer.nmr.mgh.harvard.edu/fswiki/FreeSurferWiki' +description = """ +FreeSurfer is a set of tools for analysis and visualization of structural and functional brain imaging data. +FreeSurfer contains a fully automatic structural imaging stream for processing cross sectional and longitudinal data. +""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = [ + 'https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/%(version)s/' +] +sources = ['%(namelower)s-linux-centos8_x86_64-%(version)s.tar.gz'] +patches = ['freesurfer711-tcsh.patch'] +checksums = [ + '6098b166fee8644f44f9ec88f3ffe88d05f2bc033cca60443e99e3e56f2e166b', # freesurfer-linux-centos8_x86_64-7.1.1.tar.gz + '92f8b80daaa7a06884d892f3abf5b026cec1387943ff928865b042513c58609a', # freesurfer711-tcsh.patch +] + +dependencies = [ + ('X11', '20210802'), + ('nvidia-driver', 'default', '', SYSTEM), + ('VirtualGL', '2.6.5'), + ('protobuf', '3.17.3'), + ('tcsh', '6.22.04') +] + +# If FASTDATA_jsc is not defined then assume we are on CI and hence the path is relative to the repo +local_licdir = local_os.environ.get('FASTDATA_jsc') +local_licdir = local_os.path.join(local_licdir, 'swmanage', 'EasyBuild', '2022') if local_licdir else '.' +license_text = open(f'{local_licdir}/Golden_Repo/f/FreeSurfer/license_text.txt', 'r').read() + +moduleclass = 'bio' diff --git a/Golden_Repo/f/FreeSurfer/freesurfer711-tcsh.patch b/Golden_Repo/f/FreeSurfer/freesurfer711-tcsh.patch new file mode 100644 index 0000000000000000000000000000000000000000..5e056c35c4991e820b769884681fc8049f2f3089 --- /dev/null +++ b/Golden_Repo/f/FreeSurfer/freesurfer711-tcsh.patch @@ -0,0 +1,2070 @@ +diff -rupN freesurfer_orig/bin/IsLTA freesurfer/bin/IsLTA +--- freesurfer_orig/bin/IsLTA 2021-07-19 16:15:27.176318000 +0200 ++++ freesurfer/bin/IsLTA 2021-07-23 14:50:56.924476565 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # IsLTA + + set VERSION = 'IsLTA 7.1.1'; +diff -rupN freesurfer_orig/bin/annot2std freesurfer/bin/annot2std +--- freesurfer_orig/bin/annot2std 2021-07-19 16:15:27.401727000 +0200 ++++ freesurfer/bin/annot2std 2021-07-23 14:50:45.819517410 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # annot2std + # +diff -rupN freesurfer_orig/bin/aparc2feat freesurfer/bin/aparc2feat +--- freesurfer_orig/bin/aparc2feat 2021-07-19 16:15:26.623610000 +0200 ++++ freesurfer/bin/aparc2feat 2021-07-23 14:50:46.219721597 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # aparc2feat +diff -rupN freesurfer_orig/bin/aparc_stats_aseg freesurfer/bin/aparc_stats_aseg +--- freesurfer_orig/bin/aparc_stats_aseg 2021-07-19 16:15:27.664769000 +0200 ++++ freesurfer/bin/aparc_stats_aseg 2021-07-23 14:50:46.302508129 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + # This script runs Cortical Parcellation, Surface Anatomical Stats and Aparc2aseg using a given .gcs file. + set RunIt = 1 + set ProgName = `basename $0`; +diff -rupN freesurfer_orig/bin/aparcstatsdiff freesurfer/bin/aparcstatsdiff +--- freesurfer_orig/bin/aparcstatsdiff 2021-07-19 16:15:27.764540000 +0200 ++++ freesurfer/bin/aparcstatsdiff 2021-07-23 14:50:46.367796527 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + if ( "x$1" == "x" || \ + "x$2" == "x" || \ +diff -rupN freesurfer_orig/bin/apas2aseg freesurfer/bin/apas2aseg +--- freesurfer_orig/bin/apas2aseg 2021-07-19 16:15:30.358143000 +0200 ++++ freesurfer/bin/apas2aseg 2021-07-23 14:50:46.463586676 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # apas2aseg + + set VERSION = 'apas2aseg 7.1.1'; +diff -rupN freesurfer_orig/bin/aseg2feat freesurfer/bin/aseg2feat +--- freesurfer_orig/bin/aseg2feat 2021-07-19 16:15:36.201381000 +0200 ++++ freesurfer/bin/aseg2feat 2021-07-23 14:50:46.740520024 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # aseg2feat +diff -rupN freesurfer_orig/bin/asegstatsdiff freesurfer/bin/asegstatsdiff +--- freesurfer_orig/bin/asegstatsdiff 2021-07-19 16:15:35.479244000 +0200 ++++ freesurfer/bin/asegstatsdiff 2021-07-23 14:50:46.795250044 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + set subject1=$1 + set subject2=$2 +diff -rupN freesurfer_orig/bin/bblabel freesurfer/bin/bblabel +--- freesurfer_orig/bin/bblabel 2021-07-19 16:15:28.457602000 +0200 ++++ freesurfer/bin/bblabel 2021-07-23 14:50:46.943673984 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # bblabel +diff -rupN freesurfer_orig/bin/bbmask freesurfer/bin/bbmask +--- freesurfer_orig/bin/bbmask 2021-07-19 16:15:31.653820000 +0200 ++++ freesurfer/bin/bbmask 2021-07-23 14:50:46.987275953 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # bbmask + + set VERSION = 'bbmask 7.1.1'; +diff -rupN freesurfer_orig/bin/bbregister freesurfer/bin/bbregister +--- freesurfer_orig/bin/bbregister 2021-07-19 16:15:28.618864000 +0200 ++++ freesurfer/bin/bbregister 2021-07-23 14:50:47.095692558 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # bbregister +diff -rupN freesurfer_orig/bin/beta2sxa freesurfer/bin/beta2sxa +--- freesurfer_orig/bin/beta2sxa 2021-07-19 16:15:27.705715000 +0200 ++++ freesurfer/bin/beta2sxa 2021-07-23 14:50:47.175143757 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # thalseg + + set VERSION = 'beta2sxa 7.1.1'; +diff -rupN freesurfer_orig/bin/biasfield freesurfer/bin/biasfield +--- freesurfer_orig/bin/biasfield 2021-07-19 16:15:26.121294000 +0200 ++++ freesurfer/bin/biasfield 2021-07-23 14:50:47.308101972 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # biasfield +diff -rupN freesurfer_orig/bin/bmedits2surf freesurfer/bin/bmedits2surf +--- freesurfer_orig/bin/bmedits2surf 2021-07-19 16:15:26.020516000 +0200 ++++ freesurfer/bin/bmedits2surf 2021-07-23 14:50:47.355064523 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # bmedits2surf + + set VERSION = 'bmedits2surf 7.1.1'; +diff -rupN freesurfer_orig/bin/bugr freesurfer/bin/bugr +--- freesurfer_orig/bin/bugr 2021-07-19 16:15:27.679933000 +0200 ++++ freesurfer/bin/bugr 2021-07-23 14:50:47.451209003 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # bugr +diff -rupN freesurfer_orig/bin/build_desikan_killiany_gcs.csh freesurfer/bin/build_desikan_killiany_gcs.csh +--- freesurfer_orig/bin/build_desikan_killiany_gcs.csh 2021-07-19 16:15:27.610278000 +0200 ++++ freesurfer/bin/build_desikan_killiany_gcs.csh 2021-07-23 14:50:47.470307732 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # For building a new morph-based cortical parcellation + # atlas for each hemisphere +diff -rupN freesurfer_orig/bin/cblumwmgyri freesurfer/bin/cblumwmgyri +--- freesurfer_orig/bin/cblumwmgyri 2021-07-19 16:15:30.077810000 +0200 ++++ freesurfer/bin/cblumwmgyri 2021-07-23 14:50:47.585600562 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # cblumwmgyri + + set VERSION = 'cblumwmgyri 7.1.1'; +diff -rupN freesurfer_orig/bin/checkMCR.sh freesurfer/bin/checkMCR.sh +--- freesurfer_orig/bin/checkMCR.sh 2021-07-19 16:15:33.107343000 +0200 ++++ freesurfer/bin/checkMCR.sh 2021-07-23 14:50:47.658979870 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # Eugenio: note that when I used v80, I used to look for libdctprocess.so, + # but not I look for libmwlaunchermain.so instead (which is not present in v80) +diff -rupN freesurfer_orig/bin/clear_fs_env.csh freesurfer/bin/clear_fs_env.csh +--- freesurfer_orig/bin/clear_fs_env.csh 2021-07-19 16:15:31.964443000 +0200 ++++ freesurfer/bin/clear_fs_env.csh 2021-07-23 14:50:47.747409632 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # clear_fs_env.csh +diff -rupN freesurfer_orig/bin/compute_interrater_variability.csh freesurfer/bin/compute_interrater_variability.csh +--- freesurfer_orig/bin/compute_interrater_variability.csh 2021-07-19 16:15:27.589771000 +0200 ++++ freesurfer/bin/compute_interrater_variability.csh 2021-07-23 14:50:47.782594580 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # compute_interrater_variability + # +diff -rupN freesurfer_orig/bin/compute_label_vals.csh freesurfer/bin/compute_label_vals.csh +--- freesurfer_orig/bin/compute_label_vals.csh 2021-07-19 16:15:27.286264000 +0200 ++++ freesurfer/bin/compute_label_vals.csh 2021-07-23 14:50:47.820909109 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + if (! $?base) then + echo must set base to point to $SUBJECTS_DIR/$subject +diff -rupN freesurfer_orig/bin/compute_label_volumes.csh freesurfer/bin/compute_label_volumes.csh +--- freesurfer_orig/bin/compute_label_volumes.csh 2021-07-19 16:15:29.981511000 +0200 ++++ freesurfer/bin/compute_label_volumes.csh 2021-07-23 14:50:47.882493164 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # compute_all_label_volumes + # +diff -rupN freesurfer_orig/bin/conf2hires freesurfer/bin/conf2hires +--- freesurfer_orig/bin/conf2hires 2021-07-19 16:15:27.976113000 +0200 ++++ freesurfer/bin/conf2hires 2021-07-23 14:50:48.057220000 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # conf2hires - sources + if(-e $FREESURFER_HOME/sources.csh) then + source $FREESURFER_HOME/sources.csh +diff -rupN freesurfer_orig/bin/cp-dicom freesurfer/bin/cp-dicom +--- freesurfer_orig/bin/cp-dicom 2021-07-19 16:15:29.617719000 +0200 ++++ freesurfer/bin/cp-dicom 2021-07-23 14:50:48.240344117 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # cp-dicom +diff -rupN freesurfer_orig/bin/dcmdir-info-mgh freesurfer/bin/dcmdir-info-mgh +--- freesurfer_orig/bin/dcmdir-info-mgh 2021-07-19 16:15:27.495402000 +0200 ++++ freesurfer/bin/dcmdir-info-mgh 2021-07-23 14:50:48.461284892 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # dcmdir-info-mgh +diff -rupN freesurfer_orig/bin/dcmsplit freesurfer/bin/dcmsplit +--- freesurfer_orig/bin/dcmsplit 2021-07-19 16:15:34.093464000 +0200 ++++ freesurfer/bin/dcmsplit 2021-07-23 14:50:48.689023441 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # dcmsplit + + if(-e $FREESURFER_HOME/sources.csh) then +diff -rupN freesurfer_orig/bin/dcmunpack freesurfer/bin/dcmunpack +--- freesurfer_orig/bin/dcmunpack 2021-07-19 16:15:29.814252000 +0200 ++++ freesurfer/bin/dcmunpack 2021-07-23 14:50:48.807431402 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # dcmunpack + # + +diff -rupN freesurfer_orig/bin/deface_subject freesurfer/bin/deface_subject +--- freesurfer_orig/bin/deface_subject 2021-07-19 16:15:27.780270000 +0200 ++++ freesurfer/bin/deface_subject 2021-07-23 14:50:48.885605717 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # deface_subject +diff -rupN freesurfer_orig/bin/defect2seg freesurfer/bin/defect2seg +--- freesurfer_orig/bin/defect2seg 2021-07-19 16:15:34.253547000 +0200 ++++ freesurfer/bin/defect2seg 2021-07-23 14:50:48.911318371 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # defect2seg - sources + if(-e $FREESURFER_HOME/sources.csh) then + source $FREESURFER_HOME/sources.csh +diff -rupN freesurfer_orig/bin/dt_recon freesurfer/bin/dt_recon +--- freesurfer_orig/bin/dt_recon 2021-07-19 16:15:29.979021000 +0200 ++++ freesurfer/bin/dt_recon 2021-07-23 14:50:51.547412692 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # + umask 002; + +diff -rupN freesurfer_orig/bin/epidewarp.fsl freesurfer/bin/epidewarp.fsl +--- freesurfer_orig/bin/epidewarp.fsl 2021-07-19 16:15:35.256304000 +0200 ++++ freesurfer/bin/epidewarp.fsl 2021-07-23 14:50:51.598635768 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # epidewarp.fsl +diff -rupN freesurfer_orig/bin/feat2segstats freesurfer/bin/feat2segstats +--- freesurfer_orig/bin/feat2segstats 2021-07-19 16:15:33.520695000 +0200 ++++ freesurfer/bin/feat2segstats 2021-07-23 14:50:51.916349456 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # feat2segstats +diff -rupN freesurfer_orig/bin/feat2surf freesurfer/bin/feat2surf +--- freesurfer_orig/bin/feat2surf 2021-07-19 16:15:28.367723000 +0200 ++++ freesurfer/bin/feat2surf 2021-07-23 14:50:51.959964274 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # reg-feat2anat +diff -rupN freesurfer_orig/bin/fix_subject freesurfer/bin/fix_subject +--- freesurfer_orig/bin/fix_subject 2021-07-19 16:15:28.354162000 +0200 ++++ freesurfer/bin/fix_subject 2021-07-23 14:50:52.078305105 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # fix_subject +diff -rupN freesurfer_orig/bin/fix_subject-lh freesurfer/bin/fix_subject-lh +--- freesurfer_orig/bin/fix_subject-lh 2021-07-19 16:15:31.390420000 +0200 ++++ freesurfer/bin/fix_subject-lh 2021-07-23 14:50:52.252285999 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # fix_subject-lh +diff -rupN freesurfer_orig/bin/fix_subject-rh freesurfer/bin/fix_subject-rh +--- freesurfer_orig/bin/fix_subject-rh 2021-07-19 16:15:28.368744000 +0200 ++++ freesurfer/bin/fix_subject-rh 2021-07-23 14:50:52.344126103 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # fix_subject-rh +diff -rupN freesurfer_orig/bin/fix_subject_corrected freesurfer/bin/fix_subject_corrected +--- freesurfer_orig/bin/fix_subject_corrected 2021-07-19 16:15:28.848044000 +0200 ++++ freesurfer/bin/fix_subject_corrected 2021-07-23 14:50:52.112804231 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fix_subject_corrected +diff -rupN freesurfer_orig/bin/fix_subject_corrected-lh freesurfer/bin/fix_subject_corrected-lh +--- freesurfer_orig/bin/fix_subject_corrected-lh 2021-07-19 16:15:28.684875000 +0200 ++++ freesurfer/bin/fix_subject_corrected-lh 2021-07-23 14:50:52.137486431 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fix_subject_corrected-lh +diff -rupN freesurfer_orig/bin/fix_subject_corrected-rh freesurfer/bin/fix_subject_corrected-rh +--- freesurfer_orig/bin/fix_subject_corrected-rh 2021-07-19 16:15:26.971475000 +0200 ++++ freesurfer/bin/fix_subject_corrected-rh 2021-07-23 14:50:52.176553563 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fix_subject_corrected-rh +diff -rupN freesurfer_orig/bin/fix_subject_on_seychelles freesurfer/bin/fix_subject_on_seychelles +--- freesurfer_orig/bin/fix_subject_on_seychelles 2021-07-19 16:15:33.781877000 +0200 ++++ freesurfer/bin/fix_subject_on_seychelles 2021-07-23 14:50:52.299766162 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fix_subject_on_seychelles +diff -rupN freesurfer_orig/bin/fixup_mni_paths freesurfer/bin/fixup_mni_paths +--- freesurfer_orig/bin/fixup_mni_paths 2021-07-19 16:15:35.257744000 +0200 ++++ freesurfer/bin/fixup_mni_paths 2021-07-23 14:50:52.384079059 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh ++#!/usr/bin/env/tcsh + + # fixup_mni_paths + # +diff -rupN freesurfer_orig/bin/fs_time freesurfer/bin/fs_time +--- freesurfer_orig/bin/fs_time 2021-07-19 16:15:30.090598000 +0200 ++++ freesurfer/bin/fs_time 2021-07-23 14:50:54.570450912 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # fs_time + + # Check whether FS_TIME_ALLOW exists, if not assume it is ok +diff -rupN freesurfer_orig/bin/fscalc freesurfer/bin/fscalc +--- freesurfer_orig/bin/fscalc 2021-07-19 16:15:28.875617000 +0200 ++++ freesurfer/bin/fscalc 2021-07-23 14:50:52.872411067 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # fscalc + + set VERSION = 'fscalc 7.1.1'; +diff -rupN freesurfer_orig/bin/fscalc.fsl freesurfer/bin/fscalc.fsl +--- freesurfer_orig/bin/fscalc.fsl 2021-07-19 16:15:30.549368000 +0200 ++++ freesurfer/bin/fscalc.fsl 2021-07-23 14:50:52.923206083 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # + # This is a utility that extends fslmaths so that an format that can + # be read/written by freesurfer can be used. It operates in the same +diff -rupN freesurfer_orig/bin/fsdcmdecompress freesurfer/bin/fsdcmdecompress +--- freesurfer_orig/bin/fsdcmdecompress 2021-07-19 16:15:28.334386000 +0200 ++++ freesurfer/bin/fsdcmdecompress 2021-07-23 14:50:52.952701050 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # fsdcmdecompress - sources + if(-e $FREESURFER_HOME/sources.csh) then + source $FREESURFER_HOME/sources.csh +diff -rupN freesurfer_orig/bin/fsfirst.fsl freesurfer/bin/fsfirst.fsl +--- freesurfer_orig/bin/fsfirst.fsl 2021-07-19 16:15:25.745863000 +0200 ++++ freesurfer/bin/fsfirst.fsl 2021-07-23 14:50:53.053145016 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # fsfirst.fsl + + if(-e $FREESURFER_HOME/sources.csh) then +diff -rupN freesurfer_orig/bin/fsl_rigid_register freesurfer/bin/fsl_rigid_register +--- freesurfer_orig/bin/fsl_rigid_register 2021-07-19 16:15:32.098858000 +0200 ++++ freesurfer/bin/fsl_rigid_register 2021-07-23 14:50:53.650866663 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fsl_rigid_register +diff -rupN freesurfer_orig/bin/fslregister freesurfer/bin/fslregister +--- freesurfer_orig/bin/fslregister 2021-07-19 16:15:30.757795000 +0200 ++++ freesurfer/bin/fslregister 2021-07-23 14:50:53.601680203 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fslregister +diff -rupN freesurfer_orig/bin/fsr-checkxopts freesurfer/bin/fsr-checkxopts +--- freesurfer_orig/bin/fsr-checkxopts 2021-07-19 16:15:34.474820000 +0200 ++++ freesurfer/bin/fsr-checkxopts 2021-07-23 14:50:53.939906286 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fsr-checkxopts +diff -rupN freesurfer_orig/bin/fsr-coreg freesurfer/bin/fsr-coreg +--- freesurfer_orig/bin/fsr-coreg 2021-07-19 16:15:29.733098000 +0200 ++++ freesurfer/bin/fsr-coreg 2021-07-23 14:50:54.069050346 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # fsr-coreg + + # In theory, it would be better to resample all modes into an +diff -rupN freesurfer_orig/bin/fsr-getxopts freesurfer/bin/fsr-getxopts +--- freesurfer_orig/bin/fsr-getxopts 2021-07-19 16:15:34.327402000 +0200 ++++ freesurfer/bin/fsr-getxopts 2021-07-23 14:50:54.124321037 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # fsr-getxopts +diff -rupN freesurfer_orig/bin/fsr-import freesurfer/bin/fsr-import +--- freesurfer_orig/bin/fsr-import 2021-07-19 16:15:29.837494000 +0200 ++++ freesurfer/bin/fsr-import 2021-07-23 14:50:54.215418759 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # fsr-import + + if(-e $FREESURFER_HOME/sources.csh) then +diff -rupN freesurfer_orig/bin/fvcompare freesurfer/bin/fvcompare +--- freesurfer_orig/bin/fvcompare 2021-07-19 16:15:28.820973000 +0200 ++++ freesurfer/bin/fvcompare 2021-07-23 14:50:54.730760526 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # fvcompare + + set VERSION = 'fvcompare 7.1.1'; +diff -rupN freesurfer_orig/bin/gca-apply freesurfer/bin/gca-apply +--- freesurfer_orig/bin/gca-apply 2021-07-19 16:15:33.825117000 +0200 ++++ freesurfer/bin/gca-apply 2021-07-23 14:50:54.846865779 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # gca-apply + + set VERSION = 'gca-apply 7.1.1'; +diff -rupN freesurfer_orig/bin/gcainit freesurfer/bin/gcainit +--- freesurfer_orig/bin/gcainit 2021-07-19 16:15:27.360665000 +0200 ++++ freesurfer/bin/gcainit 2021-07-23 14:50:54.876976738 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # gcainit + + set VERSION = 'gcainit 7.1.1'; +diff -rupN freesurfer_orig/bin/gcaprepone freesurfer/bin/gcaprepone +--- freesurfer_orig/bin/gcaprepone 2021-07-19 16:15:25.321792000 +0200 ++++ freesurfer/bin/gcaprepone 2021-07-23 14:50:54.958160704 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # gcaprepone + + set VERSION = 'gcaprepone 7.1.1'; +diff -rupN freesurfer_orig/bin/gcatrain freesurfer/bin/gcatrain +--- freesurfer_orig/bin/gcatrain 2021-07-19 16:15:26.003679000 +0200 ++++ freesurfer/bin/gcatrain 2021-07-23 14:50:55.027433286 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # gcatrain + + set VERSION = 'gcatrain 7.1.1'; +diff -rupN freesurfer_orig/bin/gcatrainskull freesurfer/bin/gcatrainskull +--- freesurfer_orig/bin/gcatrainskull 2021-07-19 16:15:25.858987000 +0200 ++++ freesurfer/bin/gcatrainskull 2021-07-23 14:50:55.182043319 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # gcatrainskull + if(-e $FREESURFER_HOME/sources.csh) then + source $FREESURFER_HOME/sources.csh +diff -rupN freesurfer_orig/bin/get_label_thickness freesurfer/bin/get_label_thickness +--- freesurfer_orig/bin/get_label_thickness 2021-07-19 16:15:31.211503000 +0200 ++++ freesurfer/bin/get_label_thickness 2021-07-23 14:50:55.326332405 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # script to get the thickness values for the vertices found in a label file. + # inputs: label file and ascii thickness file +diff -rupN freesurfer_orig/bin/getfullpath freesurfer/bin/getfullpath +--- freesurfer_orig/bin/getfullpath 2021-07-19 16:15:35.712927000 +0200 ++++ freesurfer/bin/getfullpath 2021-07-23 14:50:55.314506362 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # getfullpath +diff -rupN freesurfer_orig/bin/grad_unwarp freesurfer/bin/grad_unwarp +--- freesurfer_orig/bin/grad_unwarp 2021-07-19 16:15:34.546213000 +0200 ++++ freesurfer/bin/grad_unwarp 2021-07-23 14:50:55.411958697 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # grad_unwarp - convert, unwarp, and resample dicom files +diff -rupN freesurfer_orig/bin/groupstats freesurfer/bin/groupstats +--- freesurfer_orig/bin/groupstats 2021-07-19 16:15:30.702697000 +0200 ++++ freesurfer/bin/groupstats 2021-07-23 14:50:55.449923605 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # groupstats + + set VERSION = 'groupstats 7.1.1'; +diff -rupN freesurfer_orig/bin/groupstatsdiff freesurfer/bin/groupstatsdiff +--- freesurfer_orig/bin/groupstatsdiff 2021-07-19 16:15:28.262329000 +0200 ++++ freesurfer/bin/groupstatsdiff 2021-07-23 14:50:55.514476310 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # groupstatsdiff + + set VERSION = 'groupstatsdiff 7.1.1'; +diff -rupN freesurfer_orig/bin/gtmseg freesurfer/bin/gtmseg +--- freesurfer_orig/bin/gtmseg 2021-07-19 16:15:33.513788000 +0200 ++++ freesurfer/bin/gtmseg 2021-07-23 14:50:55.577776961 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # gtmseg + + set VERSION = 'gtmseg 7.1.1'; +diff -rupN freesurfer_orig/bin/help_xml_validate freesurfer/bin/help_xml_validate +--- freesurfer_orig/bin/help_xml_validate 2021-07-19 16:15:26.567279000 +0200 ++++ freesurfer/bin/help_xml_validate 2021-07-23 14:50:55.631046255 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # $srcdir is defined in make check runtime environment + set SRCDIR=$PWD +diff -rupN freesurfer_orig/bin/inflate_subject freesurfer/bin/inflate_subject +--- freesurfer_orig/bin/inflate_subject 2021-07-19 16:15:33.629827000 +0200 ++++ freesurfer/bin/inflate_subject 2021-07-23 14:50:56.509731355 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # inflate_subject +diff -rupN freesurfer_orig/bin/inflate_subject-lh freesurfer/bin/inflate_subject-lh +--- freesurfer_orig/bin/inflate_subject-lh 2021-07-19 16:15:34.087333000 +0200 ++++ freesurfer/bin/inflate_subject-lh 2021-07-23 14:50:56.623485959 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # inflate_subject-lh +diff -rupN freesurfer_orig/bin/inflate_subject-rh freesurfer/bin/inflate_subject-rh +--- freesurfer_orig/bin/inflate_subject-rh 2021-07-19 16:15:33.943148000 +0200 ++++ freesurfer/bin/inflate_subject-rh 2021-07-23 14:50:56.749722709 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # inflate_subject-rh +diff -rupN freesurfer_orig/bin/inflate_subject3 freesurfer/bin/inflate_subject3 +--- freesurfer_orig/bin/inflate_subject3 2021-07-19 16:15:28.332383000 +0200 ++++ freesurfer/bin/inflate_subject3 2021-07-23 14:50:56.548158595 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # inflate_subject3 +diff -rupN freesurfer_orig/bin/inflate_subject_new freesurfer/bin/inflate_subject_new +--- freesurfer_orig/bin/inflate_subject_new 2021-07-19 16:15:31.809629000 +0200 ++++ freesurfer/bin/inflate_subject_new 2021-07-23 14:50:56.645331559 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh ++#!/usr/bin/env/tcsh + + # + # inflate_subject_new +diff -rupN freesurfer_orig/bin/inflate_subject_new-lh freesurfer/bin/inflate_subject_new-lh +--- freesurfer_orig/bin/inflate_subject_new-lh 2021-07-19 16:15:35.108256000 +0200 ++++ freesurfer/bin/inflate_subject_new-lh 2021-07-23 14:50:56.656695360 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh ++#!/usr/bin/env/tcsh + + # + # inflate_subject_new-lh +diff -rupN freesurfer_orig/bin/inflate_subject_new-rh freesurfer/bin/inflate_subject_new-rh +--- freesurfer_orig/bin/inflate_subject_new-rh 2021-07-19 16:15:28.085971000 +0200 ++++ freesurfer/bin/inflate_subject_new-rh 2021-07-23 14:50:56.684402991 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # inflate_subject_new-rh +diff -rupN freesurfer_orig/bin/inflate_subject_sc freesurfer/bin/inflate_subject_sc +--- freesurfer_orig/bin/inflate_subject_sc 2021-07-19 16:15:25.323969000 +0200 ++++ freesurfer/bin/inflate_subject_sc 2021-07-23 14:50:56.773650206 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # inflate_subject_sc +diff -rupN freesurfer_orig/bin/isanalyze freesurfer/bin/isanalyze +--- freesurfer_orig/bin/isanalyze 2021-07-19 16:15:30.894352000 +0200 ++++ freesurfer/bin/isanalyze 2021-07-23 14:50:56.911543529 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # isanalyze - checks whether the passed file is an analyze file +diff -rupN freesurfer_orig/bin/isnifti freesurfer/bin/isnifti +--- freesurfer_orig/bin/isnifti 2021-07-19 16:15:28.315723000 +0200 ++++ freesurfer/bin/isnifti 2021-07-23 14:50:56.935006434 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # isnifti - checks whether the passed file is a nifti file +diff -rupN freesurfer_orig/bin/isolate_labels.csh freesurfer/bin/isolate_labels.csh +--- freesurfer_orig/bin/isolate_labels.csh 2021-07-19 16:15:26.911908000 +0200 ++++ freesurfer/bin/isolate_labels.csh 2021-07-23 14:50:56.965275264 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # isolate_labels + # +diff -rupN freesurfer_orig/bin/isolate_labels_keeporigval.csh freesurfer/bin/isolate_labels_keeporigval.csh +--- freesurfer_orig/bin/isolate_labels_keeporigval.csh 2021-07-19 16:15:34.276615000 +0200 ++++ freesurfer/bin/isolate_labels_keeporigval.csh 2021-07-23 14:50:56.986146210 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # isolate_labels + # +diff -rupN freesurfer_orig/bin/jkgcatrain freesurfer/bin/jkgcatrain +--- freesurfer_orig/bin/jkgcatrain 2021-07-19 16:15:26.683257000 +0200 ++++ freesurfer/bin/jkgcatrain 2021-07-23 14:50:57.051301038 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # jkgcatrain + + set VERSION = 'jkgcatrain 7.1.1'; +diff -rupN freesurfer_orig/bin/label_child freesurfer/bin/label_child +--- freesurfer_orig/bin/label_child 2021-07-19 16:15:31.443192000 +0200 ++++ freesurfer/bin/label_child 2021-07-23 14:50:57.297633555 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # label_child +diff -rupN freesurfer_orig/bin/label_elderly_subject freesurfer/bin/label_elderly_subject +--- freesurfer_orig/bin/label_elderly_subject 2021-07-19 16:15:27.186840000 +0200 ++++ freesurfer/bin/label_elderly_subject 2021-07-23 14:50:57.326928461 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # label_elderly_subject +diff -rupN freesurfer_orig/bin/label_subject freesurfer/bin/label_subject +--- freesurfer_orig/bin/label_subject 2021-07-19 16:15:27.561797000 +0200 ++++ freesurfer/bin/label_subject 2021-07-23 14:50:57.398373271 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # label_subject +diff -rupN freesurfer_orig/bin/label_subject_flash freesurfer/bin/label_subject_flash +--- freesurfer_orig/bin/label_subject_flash 2021-07-19 16:15:31.210280000 +0200 ++++ freesurfer/bin/label_subject_flash 2021-07-23 14:50:57.409536822 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # label_subject_flash +diff -rupN freesurfer_orig/bin/label_subject_mixed freesurfer/bin/label_subject_mixed +--- freesurfer_orig/bin/label_subject_mixed 2021-07-19 16:15:27.124724000 +0200 ++++ freesurfer/bin/label_subject_mixed 2021-07-23 14:50:57.421549076 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # label_subject_mixed +diff -rupN freesurfer_orig/bin/labels_disjoint freesurfer/bin/labels_disjoint +--- freesurfer_orig/bin/labels_disjoint 2021-07-19 16:15:28.264200000 +0200 ++++ freesurfer/bin/labels_disjoint 2021-07-23 14:50:57.356059827 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # set echo=1 + +diff -rupN freesurfer_orig/bin/labels_intersect freesurfer/bin/labels_intersect +--- freesurfer_orig/bin/labels_intersect 2021-07-19 16:15:35.152425000 +0200 ++++ freesurfer/bin/labels_intersect 2021-07-23 14:50:57.385996197 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # set echo=1 + +diff -rupN freesurfer_orig/bin/labels_union freesurfer/bin/labels_union +--- freesurfer_orig/bin/labels_union 2021-07-19 16:15:33.766705000 +0200 ++++ freesurfer/bin/labels_union 2021-07-23 14:50:57.449780079 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # set echo=1 + +diff -rupN freesurfer_orig/bin/long_create_base_sigma freesurfer/bin/long_create_base_sigma +--- freesurfer_orig/bin/long_create_base_sigma 2021-07-19 16:15:28.720270000 +0200 ++++ freesurfer/bin/long_create_base_sigma 2021-07-23 14:50:57.530196931 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + # + # long_create_base_sigma + # +diff -rupN freesurfer_orig/bin/long_create_orig freesurfer/bin/long_create_orig +--- freesurfer_orig/bin/long_create_orig 2021-07-19 16:15:30.146821000 +0200 ++++ freesurfer/bin/long_create_orig 2021-07-23 14:50:57.569077963 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + # + # long_create_orig + # +diff -rupN freesurfer_orig/bin/longmc freesurfer/bin/longmc +--- freesurfer_orig/bin/longmc 2021-07-19 16:15:33.316562000 +0200 ++++ freesurfer/bin/longmc 2021-07-23 14:50:57.611237297 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # longmc - sources + if(-e $FREESURFER_HOME/sources.csh) then + source $FREESURFER_HOME/sources.csh +diff -rupN freesurfer_orig/bin/lpcregister freesurfer/bin/lpcregister +--- freesurfer_orig/bin/lpcregister 2021-07-19 16:15:34.755805000 +0200 ++++ freesurfer/bin/lpcregister 2021-07-23 14:50:57.773420988 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # lpcregister +diff -rupN freesurfer_orig/bin/make-segvol-table freesurfer/bin/make-segvol-table +--- freesurfer_orig/bin/make-segvol-table 2021-07-19 16:15:31.870922000 +0200 ++++ freesurfer/bin/make-segvol-table 2021-07-23 14:50:58.504661921 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # make-segvol-table - creates a table of volumes of subcortical +diff -rupN freesurfer_orig/bin/make_average_subcort freesurfer/bin/make_average_subcort +--- freesurfer_orig/bin/make_average_subcort 2021-07-19 16:15:29.177411000 +0200 ++++ freesurfer/bin/make_average_subcort 2021-07-23 14:50:57.997996795 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # thalseg + + set VERSION = 'make_average_subcort 7.1.1'; +diff -rupN freesurfer_orig/bin/make_average_subject freesurfer/bin/make_average_subject +--- freesurfer_orig/bin/make_average_subject 2021-07-19 16:15:27.472411000 +0200 ++++ freesurfer/bin/make_average_subject 2021-07-23 14:50:58.046744743 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # make_average_subject +diff -rupN freesurfer_orig/bin/make_average_surface freesurfer/bin/make_average_surface +--- freesurfer_orig/bin/make_average_surface 2021-07-19 16:15:26.037036000 +0200 ++++ freesurfer/bin/make_average_surface 2021-07-23 14:50:58.192458404 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # make_average_surface +diff -rupN freesurfer_orig/bin/make_average_volume freesurfer/bin/make_average_volume +--- freesurfer_orig/bin/make_average_volume 2021-07-19 16:15:29.566939000 +0200 ++++ freesurfer/bin/make_average_volume 2021-07-23 14:50:58.312748792 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # make_average_volume +diff -rupN freesurfer_orig/bin/make_cortex_label freesurfer/bin/make_cortex_label +--- freesurfer_orig/bin/make_cortex_label 2021-07-19 16:15:34.328543000 +0200 ++++ freesurfer/bin/make_cortex_label 2021-07-23 14:50:58.393793907 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # make_cortex_label +diff -rupN freesurfer_orig/bin/make_exvivo_filled freesurfer/bin/make_exvivo_filled +--- freesurfer_orig/bin/make_exvivo_filled 2021-07-19 16:15:35.553332000 +0200 ++++ freesurfer/bin/make_exvivo_filled 2021-07-23 14:50:58.414364212 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + # usage: make_exvivo_filled <subject name> <input samseg> <input intensity vol> + + set echo=1 +diff -rupN freesurfer_orig/bin/make_folding_atlas freesurfer/bin/make_folding_atlas +--- freesurfer_orig/bin/make_folding_atlas 2021-07-19 16:15:32.839573000 +0200 ++++ freesurfer/bin/make_folding_atlas 2021-07-23 14:50:58.450395163 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # make_folding_atlas + + set VERSION = 'make_folding_atlas 7.1.1'; +diff -rupN freesurfer_orig/bin/map_all_labels freesurfer/bin/map_all_labels +--- freesurfer_orig/bin/map_all_labels 2021-07-19 16:15:35.934960000 +0200 ++++ freesurfer/bin/map_all_labels 2021-07-23 14:50:58.664778284 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # map_all_labels +diff -rupN freesurfer_orig/bin/map_all_labels-lh freesurfer/bin/map_all_labels-lh +--- freesurfer_orig/bin/map_all_labels-lh 2021-07-19 16:15:30.148733000 +0200 ++++ freesurfer/bin/map_all_labels-lh 2021-07-23 14:50:58.675135141 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # map_all_labels-lh +diff -rupN freesurfer_orig/bin/map_central_sulcus freesurfer/bin/map_central_sulcus +--- freesurfer_orig/bin/map_central_sulcus 2021-07-19 16:15:28.236692000 +0200 ++++ freesurfer/bin/map_central_sulcus 2021-07-23 14:50:58.691161530 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # map_central_sulcus +diff -rupN freesurfer_orig/bin/meanval freesurfer/bin/meanval +--- freesurfer_orig/bin/meanval 2021-07-19 16:15:36.135593000 +0200 ++++ freesurfer/bin/meanval 2021-07-23 14:50:58.993518261 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # meanval + + set VERSION = 'meanval 7.1.1'; +diff -rupN freesurfer_orig/bin/mergeseg freesurfer/bin/mergeseg +--- freesurfer_orig/bin/mergeseg 2021-07-19 16:15:29.413569000 +0200 ++++ freesurfer/bin/mergeseg 2021-07-23 14:50:59.005974017 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # mergeseg + + set VERSION = 'mergeseg 7.1.1'; +diff -rupN freesurfer_orig/bin/minc2seqinfo freesurfer/bin/minc2seqinfo +--- freesurfer_orig/bin/minc2seqinfo 2021-07-19 16:15:26.332096000 +0200 ++++ freesurfer/bin/minc2seqinfo 2021-07-23 14:50:59.045002429 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + # + # Name: minc2seqinfo + # +diff -rupN freesurfer_orig/bin/mkheadsurf freesurfer/bin/mkheadsurf +--- freesurfer_orig/bin/mkheadsurf 2021-07-19 16:15:30.194202000 +0200 ++++ freesurfer/bin/mkheadsurf 2021-07-23 14:50:59.128999225 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mkheadsurf +diff -rupN freesurfer_orig/bin/mksubjdirs freesurfer/bin/mksubjdirs +--- freesurfer_orig/bin/mksubjdirs 2021-07-19 16:15:32.960168000 +0200 ++++ freesurfer/bin/mksubjdirs 2021-07-23 14:50:59.173948388 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mksubjdirs +diff -rupN freesurfer_orig/bin/mni152reg freesurfer/bin/mni152reg +--- freesurfer_orig/bin/mni152reg 2021-07-19 16:15:33.426323000 +0200 ++++ freesurfer/bin/mni152reg 2021-07-23 14:50:59.325669011 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # mni152reg + + set VERSION = 'mni152reg 7.1.1'; +diff -rupN freesurfer_orig/bin/morph_only_subject freesurfer/bin/morph_only_subject +--- freesurfer_orig/bin/morph_only_subject 2021-07-19 16:15:35.943532000 +0200 ++++ freesurfer/bin/morph_only_subject 2021-07-23 14:50:59.353593943 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_only_subject +diff -rupN freesurfer_orig/bin/morph_only_subject-lh freesurfer/bin/morph_only_subject-lh +--- freesurfer_orig/bin/morph_only_subject-lh 2021-07-19 16:15:27.434827000 +0200 ++++ freesurfer/bin/morph_only_subject-lh 2021-07-23 14:50:59.370482704 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_only_subject-lh +diff -rupN freesurfer_orig/bin/morph_only_subject-rh freesurfer/bin/morph_only_subject-rh +--- freesurfer_orig/bin/morph_only_subject-rh 2021-07-19 16:15:27.612297000 +0200 ++++ freesurfer/bin/morph_only_subject-rh 2021-07-23 14:50:59.382776929 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_only_subject-rh +diff -rupN freesurfer_orig/bin/morph_rgb-lh freesurfer/bin/morph_rgb-lh +--- freesurfer_orig/bin/morph_rgb-lh 2021-07-19 16:15:33.629014000 +0200 ++++ freesurfer/bin/morph_rgb-lh 2021-07-23 14:50:59.393844149 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_rgb-lh +diff -rupN freesurfer_orig/bin/morph_rgb-rh freesurfer/bin/morph_rgb-rh +--- freesurfer_orig/bin/morph_rgb-rh 2021-07-19 16:15:34.839761000 +0200 ++++ freesurfer/bin/morph_rgb-rh 2021-07-23 14:50:59.429670640 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_rgb-rh +diff -rupN freesurfer_orig/bin/morph_subject freesurfer/bin/morph_subject +--- freesurfer_orig/bin/morph_subject 2021-07-19 16:15:26.424545000 +0200 ++++ freesurfer/bin/morph_subject 2021-07-23 14:50:59.439771486 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # morph_subject +diff -rupN freesurfer_orig/bin/morph_subject-lh freesurfer/bin/morph_subject-lh +--- freesurfer_orig/bin/morph_subject-lh 2021-07-19 16:15:28.780176000 +0200 ++++ freesurfer/bin/morph_subject-lh 2021-07-23 14:50:59.459022527 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # morph_subject-lh +diff -rupN freesurfer_orig/bin/morph_subject-rh freesurfer/bin/morph_subject-rh +--- freesurfer_orig/bin/morph_subject-rh 2021-07-19 16:15:27.496693000 +0200 ++++ freesurfer/bin/morph_subject-rh 2021-07-23 14:50:59.486277266 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # morph_subject-rh +diff -rupN freesurfer_orig/bin/morph_subject_on_seychelles freesurfer/bin/morph_subject_on_seychelles +--- freesurfer_orig/bin/morph_subject_on_seychelles 2021-07-19 16:15:36.136283000 +0200 ++++ freesurfer/bin/morph_subject_on_seychelles 2021-07-23 14:50:59.469465945 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_subject_on_seychelles +diff -rupN freesurfer_orig/bin/morph_tables-lh freesurfer/bin/morph_tables-lh +--- freesurfer_orig/bin/morph_tables-lh 2021-07-19 16:15:28.408541000 +0200 ++++ freesurfer/bin/morph_tables-lh 2021-07-23 14:50:59.497741928 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_tables-lh +diff -rupN freesurfer_orig/bin/morph_tables-rh freesurfer/bin/morph_tables-rh +--- freesurfer_orig/bin/morph_tables-rh 2021-07-19 16:15:35.005660000 +0200 ++++ freesurfer/bin/morph_tables-rh 2021-07-23 14:50:59.514816960 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # morph_tables-rh +diff -rupN freesurfer_orig/bin/mpr2mni305 freesurfer/bin/mpr2mni305 +--- freesurfer_orig/bin/mpr2mni305 2021-07-19 16:15:34.275146000 +0200 ++++ freesurfer/bin/mpr2mni305 2021-07-23 14:50:59.549781617 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # Register an image to an average subject which + # itself has been registered to the MNI average_305 subject. +diff -rupN freesurfer_orig/bin/mri-func2sph freesurfer/bin/mri-func2sph +--- freesurfer_orig/bin/mri-func2sph 2021-07-19 16:15:25.632373000 +0200 ++++ freesurfer/bin/mri-func2sph 2021-07-23 14:51:05.894428405 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri-func2sph +diff -rupN freesurfer_orig/bin/mri-funcvits freesurfer/bin/mri-funcvits +--- freesurfer_orig/bin/mri-funcvits 2021-07-19 16:15:33.377507000 +0200 ++++ freesurfer/bin/mri-funcvits 2021-07-23 14:51:05.950374359 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri-funcvits +diff -rupN freesurfer_orig/bin/mri-sph2surf freesurfer/bin/mri-sph2surf +--- freesurfer_orig/bin/mri-sph2surf 2021-07-19 16:15:33.159462000 +0200 ++++ freesurfer/bin/mri-sph2surf 2021-07-23 14:51:22.497609126 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri-sph2surf +diff -rupN freesurfer_orig/bin/mri_add_new_tp freesurfer/bin/mri_add_new_tp +--- freesurfer_orig/bin/mri_add_new_tp 2021-07-19 16:15:25.681634000 +0200 ++++ freesurfer/bin/mri_add_new_tp 2021-07-23 14:50:59.586477741 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri_add_new_tp +diff -rupN freesurfer_orig/bin/mri_align_long.csh freesurfer/bin/mri_align_long.csh +--- freesurfer_orig/bin/mri_align_long.csh 2021-07-19 16:15:33.780622000 +0200 ++++ freesurfer/bin/mri_align_long.csh 2021-07-23 14:50:59.716840695 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri_align_long.csh +diff -rupN freesurfer_orig/bin/mri_create_t2combined freesurfer/bin/mri_create_t2combined +--- freesurfer_orig/bin/mri_create_t2combined 2021-07-19 16:15:36.026533000 +0200 ++++ freesurfer/bin/mri_create_t2combined 2021-07-23 14:51:03.510269682 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + set bin=mri_create_t2combined + +diff -rupN freesurfer_orig/bin/mri_cvs_check freesurfer/bin/mri_cvs_check +--- freesurfer_orig/bin/mri_cvs_check 2021-07-19 16:15:35.245023000 +0200 ++++ freesurfer/bin/mri_cvs_check 2021-07-23 14:51:03.671224878 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + + # mri_cvs_check +diff -rupN freesurfer_orig/bin/mri_cvs_data_copy freesurfer/bin/mri_cvs_data_copy +--- freesurfer_orig/bin/mri_cvs_data_copy 2021-07-19 16:15:26.266426000 +0200 ++++ freesurfer/bin/mri_cvs_data_copy 2021-07-23 14:51:03.688126399 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + + # mri_cvs_data_copy +diff -rupN freesurfer_orig/bin/mri_cvs_register freesurfer/bin/mri_cvs_register +--- freesurfer_orig/bin/mri_cvs_register 2021-07-19 16:15:35.511311000 +0200 ++++ freesurfer/bin/mri_cvs_register 2021-07-23 14:51:03.722517175 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + + # mri_cvs_register +diff -rupN freesurfer_orig/bin/mri_glmfit-sim freesurfer/bin/mri_glmfit-sim +--- freesurfer_orig/bin/mri_glmfit-sim 2021-07-19 16:15:31.769458000 +0200 ++++ freesurfer/bin/mri_glmfit-sim 2021-07-23 14:51:06.671768036 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + set VERSION = 'mri_glmfit-sim 7.1.1'; + setenv LANG en_US.UTF-8 + +diff -rupN freesurfer_orig/bin/mri_mergelabels freesurfer/bin/mri_mergelabels +--- freesurfer_orig/bin/mri_mergelabels 2021-07-19 16:15:33.114345000 +0200 ++++ freesurfer/bin/mri_mergelabels 2021-07-23 14:51:09.349889730 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri_mergelabels +diff -rupN freesurfer_orig/bin/mri_motion_correct.fsl freesurfer/bin/mri_motion_correct.fsl +--- freesurfer_orig/bin/mri_motion_correct.fsl 2021-07-19 16:15:36.238002000 +0200 ++++ freesurfer/bin/mri_motion_correct.fsl 2021-07-23 14:51:09.716917327 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri_motion_correct.fsl +diff -rupN freesurfer_orig/bin/mri_motion_correct2 freesurfer/bin/mri_motion_correct2 +--- freesurfer_orig/bin/mri_motion_correct2 2021-07-19 16:15:28.087524000 +0200 ++++ freesurfer/bin/mri_motion_correct2 2021-07-23 14:51:09.677644764 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri_motion_correct2 +diff -rupN freesurfer_orig/bin/mri_nu_correct.mni freesurfer/bin/mri_nu_correct.mni +--- freesurfer_orig/bin/mri_nu_correct.mni 2021-07-19 16:15:28.409705000 +0200 ++++ freesurfer/bin/mri_nu_correct.mni 2021-07-23 14:51:10.356590467 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mri_nu_correct.mni +diff -rupN freesurfer_orig/bin/mri_reorient_LR.csh freesurfer/bin/mri_reorient_LR.csh +--- freesurfer_orig/bin/mri_reorient_LR.csh 2021-07-19 16:15:35.050505000 +0200 ++++ freesurfer/bin/mri_reorient_LR.csh 2021-07-23 14:51:12.215453857 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # mri_reorient_LR + # +diff -rupN freesurfer_orig/bin/mris_compute_lgi freesurfer/bin/mris_compute_lgi +--- freesurfer_orig/bin/mris_compute_lgi 2021-07-19 16:15:27.578748000 +0200 ++++ freesurfer/bin/mris_compute_lgi 2021-07-23 14:51:14.704682203 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mris_compute_lgi +diff -rupN freesurfer_orig/bin/mris_preproc freesurfer/bin/mris_preproc +--- freesurfer_orig/bin/mris_preproc 2021-07-19 16:15:30.028505000 +0200 ++++ freesurfer/bin/mris_preproc 2021-07-23 14:51:22.995374109 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mris_preproc +diff -rupN freesurfer_orig/bin/mris_volsmooth freesurfer/bin/mris_volsmooth +--- freesurfer_orig/bin/mris_volsmooth 2021-07-19 16:15:34.269201000 +0200 ++++ freesurfer/bin/mris_volsmooth 2021-07-23 14:51:28.821262717 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # mris_volsmooth +diff -rupN freesurfer_orig/bin/ms_refine_subject freesurfer/bin/ms_refine_subject +--- freesurfer_orig/bin/ms_refine_subject 2021-07-19 16:15:28.346976000 +0200 ++++ freesurfer/bin/ms_refine_subject 2021-07-23 14:51:31.267555077 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # ms_refine_subject +diff -rupN freesurfer_orig/bin/orientLAS freesurfer/bin/orientLAS +--- freesurfer_orig/bin/orientLAS 2021-07-19 16:15:32.158238000 +0200 ++++ freesurfer/bin/orientLAS 2021-07-23 14:51:31.499503611 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + # + # orientLAS + # +diff -rupN freesurfer_orig/bin/parc_atlas_jackknife_test freesurfer/bin/parc_atlas_jackknife_test +--- freesurfer_orig/bin/parc_atlas_jackknife_test 2021-07-19 16:15:33.261580000 +0200 ++++ freesurfer/bin/parc_atlas_jackknife_test 2021-07-23 14:51:31.556605479 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # parc_atlas_jackknife_test +@@ -291,7 +291,7 @@ foreach test_subj ($ALL_SUBJECTS) + if (-e ${sphere_reg}) rm -f ${sphere_reg} + if ($PBS) then + set cmdf=(${WD}/${hemi}.${test_subj}${reg_append}.cmd) +- echo "#! /bin/tcsh -ef" > ${cmdf} ++ echo "#!/usr/bin/env/tcsh -ef" > ${cmdf} + echo "limit filesize 10megabytes" >> ${cmdf} + echo "${cmd} |& tee -a ${LF}" >> ${cmdf} + chmod a+x ${cmdf} +diff -rupN freesurfer_orig/bin/pctsurfcon freesurfer/bin/pctsurfcon +--- freesurfer_orig/bin/pctsurfcon 2021-07-19 16:15:30.730392000 +0200 ++++ freesurfer/bin/pctsurfcon 2021-07-23 14:51:31.607526685 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # pctsurfcon +diff -rupN freesurfer_orig/bin/polyorder freesurfer/bin/polyorder +--- freesurfer_orig/bin/polyorder 2021-07-19 16:15:31.768138000 +0200 ++++ freesurfer/bin/polyorder 2021-07-23 14:51:31.662307344 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # polyorder + + set VERSION = 'polyorder 7.1.1'; +diff -rupN freesurfer_orig/bin/print_unique_labels.csh freesurfer/bin/print_unique_labels.csh +--- freesurfer_orig/bin/print_unique_labels.csh 2021-07-19 16:15:27.276209000 +0200 ++++ freesurfer/bin/print_unique_labels.csh 2021-07-23 14:51:31.699361030 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # print_unique_labels + # +diff -rupN freesurfer_orig/bin/rbbr freesurfer/bin/rbbr +--- freesurfer_orig/bin/rbbr 2021-07-19 16:15:30.391650000 +0200 ++++ freesurfer/bin/rbbr 2021-07-23 14:51:32.307991381 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # rbbr + + set VERSION = 'rbbr 7.1.1'; +diff -rupN freesurfer_orig/bin/rca-base-init freesurfer/bin/rca-base-init +--- freesurfer_orig/bin/rca-base-init 2021-07-19 16:15:28.048787000 +0200 ++++ freesurfer/bin/rca-base-init 2021-07-23 14:51:32.380255596 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # rca-base-init - initialize base subject for recon-all processing. Mostly, code was just + # cut out of recon-all, so there are some things that look funny (eg, DoCreateBaseSubj is + # explicitly set to 1 and checked eventhough that is what this script does). I wanted +diff -rupN freesurfer_orig/bin/rca-long-tp-init freesurfer/bin/rca-long-tp-init +--- freesurfer_orig/bin/rca-long-tp-init 2021-07-19 16:15:32.045465000 +0200 ++++ freesurfer/bin/rca-long-tp-init 2021-07-23 14:51:32.419266823 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # rca-long-tp-init - initialize long timepoint subject for recon-all + # processing. Mostly, code was just cut out of recon-all, so there are +diff -rupN freesurfer_orig/bin/rcbf-prep freesurfer/bin/rcbf-prep +--- freesurfer_orig/bin/rcbf-prep 2021-07-19 16:15:27.427677000 +0200 ++++ freesurfer/bin/rcbf-prep 2021-07-23 14:51:32.496490215 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # rcbf-prep + + set VERSION = 'rcbf-prep 7.1.1'; +diff -rupN freesurfer_orig/bin/rebuild_gca_atlas.csh freesurfer/bin/rebuild_gca_atlas.csh +--- freesurfer_orig/bin/rebuild_gca_atlas.csh 2021-07-19 16:15:29.970526000 +0200 ++++ freesurfer/bin/rebuild_gca_atlas.csh 2021-07-23 14:51:32.542222513 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # rebuild_gca_atlas.csh +diff -rupN freesurfer_orig/bin/recon-all freesurfer/bin/recon-all +--- freesurfer_orig/bin/recon-all 2021-07-19 16:15:27.112107000 +0200 ++++ freesurfer/bin/recon-all 2021-07-23 14:51:32.632753238 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # recon-all +diff -rupN freesurfer_orig/bin/recon-all-exvivo freesurfer/bin/recon-all-exvivo +--- freesurfer_orig/bin/recon-all-exvivo 2021-07-19 16:15:26.162046000 +0200 ++++ freesurfer/bin/recon-all-exvivo 2021-07-23 14:51:32.739961427 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + + set inputargs = ($argv); +diff -rupN freesurfer_orig/bin/reg-feat2anat freesurfer/bin/reg-feat2anat +--- freesurfer_orig/bin/reg-feat2anat 2021-07-19 16:15:29.240094000 +0200 ++++ freesurfer/bin/reg-feat2anat 2021-07-23 14:51:32.878670649 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # reg-feat2anat +diff -rupN freesurfer_orig/bin/reg2subject freesurfer/bin/reg2subject +--- freesurfer_orig/bin/reg2subject 2021-07-19 16:15:27.230038000 +0200 ++++ freesurfer/bin/reg2subject 2021-07-23 14:51:32.815649454 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # reg2subject + + set VERSION = 'reg2subject 7.1.1'; +diff -rupN freesurfer_orig/bin/register.csh freesurfer/bin/register.csh +--- freesurfer_orig/bin/register.csh 2021-07-19 16:15:33.767468000 +0200 ++++ freesurfer/bin/register.csh 2021-07-23 14:51:32.934334640 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # register.csh +diff -rupN freesurfer_orig/bin/register_child freesurfer/bin/register_child +--- freesurfer_orig/bin/register_child 2021-07-19 16:15:26.780472000 +0200 ++++ freesurfer/bin/register_child 2021-07-23 14:51:32.917911557 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # register_child +diff -rupN freesurfer_orig/bin/register_elderly_subject freesurfer/bin/register_elderly_subject +--- freesurfer_orig/bin/register_elderly_subject 2021-07-19 16:15:30.237329000 +0200 ++++ freesurfer/bin/register_elderly_subject 2021-07-23 14:51:32.953411942 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # register_elderly_subject +diff -rupN freesurfer_orig/bin/register_subject freesurfer/bin/register_subject +--- freesurfer_orig/bin/register_subject 2021-07-19 16:15:33.783182000 +0200 ++++ freesurfer/bin/register_subject 2021-07-23 14:51:32.969633915 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # register_subject +diff -rupN freesurfer_orig/bin/register_subject_flash freesurfer/bin/register_subject_flash +--- freesurfer_orig/bin/register_subject_flash 2021-07-19 16:15:30.222970000 +0200 ++++ freesurfer/bin/register_subject_flash 2021-07-23 14:51:32.981301743 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # register_subject_flash +diff -rupN freesurfer_orig/bin/register_subject_mixed freesurfer/bin/register_subject_mixed +--- freesurfer_orig/bin/register_subject_mixed 2021-07-19 16:15:28.276797000 +0200 ++++ freesurfer/bin/register_subject_mixed 2021-07-23 14:51:32.992526110 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # register_subject_mixed +diff -rupN freesurfer_orig/bin/reinflate_subject freesurfer/bin/reinflate_subject +--- freesurfer_orig/bin/reinflate_subject 2021-07-19 16:15:30.583129000 +0200 ++++ freesurfer/bin/reinflate_subject 2021-07-23 14:51:33.011572072 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # reinflate_subject +diff -rupN freesurfer_orig/bin/reinflate_subject-lh freesurfer/bin/reinflate_subject-lh +--- freesurfer_orig/bin/reinflate_subject-lh 2021-07-19 16:15:33.155431000 +0200 ++++ freesurfer/bin/reinflate_subject-lh 2021-07-23 14:51:33.016788279 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # reinflate_subject-lh +diff -rupN freesurfer_orig/bin/reinflate_subject-rh freesurfer/bin/reinflate_subject-rh +--- freesurfer_orig/bin/reinflate_subject-rh 2021-07-19 16:15:33.389761000 +0200 ++++ freesurfer/bin/reinflate_subject-rh 2021-07-23 14:51:33.035587620 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # reinflate_subject-rh +diff -rupN freesurfer_orig/bin/remove_talairach freesurfer/bin/remove_talairach +--- freesurfer_orig/bin/remove_talairach 2021-07-19 16:15:25.860599000 +0200 ++++ freesurfer/bin/remove_talairach 2021-07-23 14:51:33.109451700 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # remove_talairach +diff -rupN freesurfer_orig/bin/renormalize_T1_subject freesurfer/bin/renormalize_T1_subject +--- freesurfer_orig/bin/renormalize_T1_subject 2021-07-19 16:15:29.113826000 +0200 ++++ freesurfer/bin/renormalize_T1_subject 2021-07-23 14:51:33.239153783 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # renormalize_T1_subject +diff -rupN freesurfer_orig/bin/renormalize_subject freesurfer/bin/renormalize_subject +--- freesurfer_orig/bin/renormalize_subject 2021-07-19 16:15:25.520921000 +0200 ++++ freesurfer/bin/renormalize_subject 2021-07-23 14:51:33.181963567 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # renormalize_subject +diff -rupN freesurfer_orig/bin/renormalize_subject_keep_editting freesurfer/bin/renormalize_subject_keep_editting +--- freesurfer_orig/bin/renormalize_subject_keep_editting 2021-07-19 16:15:26.338287000 +0200 ++++ freesurfer/bin/renormalize_subject_keep_editting 2021-07-23 14:51:33.199920395 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # renormalize_subject_keep_editting +diff -rupN freesurfer_orig/bin/reregister_subject_mixed freesurfer/bin/reregister_subject_mixed +--- freesurfer_orig/bin/reregister_subject_mixed 2021-07-19 16:15:32.678261000 +0200 ++++ freesurfer/bin/reregister_subject_mixed 2021-07-23 14:51:33.314912660 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # reregister_subject_mixed +diff -rupN freesurfer_orig/bin/rtview freesurfer/bin/rtview +--- freesurfer_orig/bin/rtview 2021-07-19 16:15:32.225438000 +0200 ++++ freesurfer/bin/rtview 2021-07-23 14:51:33.330561450 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # rtview + + set VERSION = 'rtview 7.1.1'; +diff -rupN freesurfer_orig/bin/run-qdec-glm freesurfer/bin/run-qdec-glm +--- freesurfer_orig/bin/run-qdec-glm 2021-07-19 16:15:25.497320000 +0200 ++++ freesurfer/bin/run-qdec-glm 2021-07-23 14:51:33.389031441 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # run-qdec-glm +diff -rupN freesurfer_orig/bin/run_mris_preproc freesurfer/bin/run_mris_preproc +--- freesurfer_orig/bin/run_mris_preproc 2021-07-19 16:15:28.778771000 +0200 ++++ freesurfer/bin/run_mris_preproc 2021-07-23 14:51:33.343212181 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # Script to create a cache of the preprocessed files needed by qdec. +diff -rupN freesurfer_orig/bin/samseg freesurfer/bin/samseg +--- freesurfer_orig/bin/samseg 2021-07-19 16:15:29.370516000 +0200 ++++ freesurfer/bin/samseg 2021-07-23 14:51:33.615742849 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # samseg + + set VERSION = 'samseg 7.1.1'; +diff -rupN freesurfer_orig/bin/samseg-long freesurfer/bin/samseg-long +--- freesurfer_orig/bin/samseg-long 2021-07-19 16:15:34.096267000 +0200 ++++ freesurfer/bin/samseg-long 2021-07-23 14:51:33.725551496 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # samseg-long - sources + if(-e $FREESURFER_HOME/sources.csh) then + source $FREESURFER_HOME/sources.csh +diff -rupN freesurfer_orig/bin/samseg2recon freesurfer/bin/samseg2recon +--- freesurfer_orig/bin/samseg2recon 2021-07-19 16:15:27.889841000 +0200 ++++ freesurfer/bin/samseg2recon 2021-07-23 14:51:33.675127082 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # + # samseg2recon - create and populate a subjects dir in a way that + # recon-all can be run on it. +diff -rupN freesurfer_orig/bin/seg2filled freesurfer/bin/seg2filled +--- freesurfer_orig/bin/seg2filled 2021-07-19 16:15:27.721140000 +0200 ++++ freesurfer/bin/seg2filled 2021-07-23 14:51:33.855629720 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # seg2filled - creates a filled.mgz from an aseg-style + # segmentation. The original intent is to use a SAMSEG segmentation to +diff -rupN freesurfer_orig/bin/segmentBS.sh freesurfer/bin/segmentBS.sh +--- freesurfer_orig/bin/segmentBS.sh 2021-07-19 16:15:31.819964000 +0200 ++++ freesurfer/bin/segmentBS.sh 2021-07-23 14:51:33.889030649 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`) + if ("$tcsh61706" != "") then +diff -rupN freesurfer_orig/bin/segmentHA_T1.sh freesurfer/bin/segmentHA_T1.sh +--- freesurfer_orig/bin/segmentHA_T1.sh 2021-07-19 16:15:26.853402000 +0200 ++++ freesurfer/bin/segmentHA_T1.sh 2021-07-23 14:51:33.962202677 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`) + if ("$tcsh61706" != "") then +diff -rupN freesurfer_orig/bin/segmentHA_T1_long.sh freesurfer/bin/segmentHA_T1_long.sh +--- freesurfer_orig/bin/segmentHA_T1_long.sh 2021-07-19 16:15:29.807362000 +0200 ++++ freesurfer/bin/segmentHA_T1_long.sh 2021-07-23 14:51:33.937732007 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`) + if ("$tcsh61706" != "") then +diff -rupN freesurfer_orig/bin/segmentHA_T2.sh freesurfer/bin/segmentHA_T2.sh +--- freesurfer_orig/bin/segmentHA_T2.sh 2021-07-19 16:15:27.613750000 +0200 ++++ freesurfer/bin/segmentHA_T2.sh 2021-07-23 14:51:34.024551600 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`) + if ("$tcsh61706" != "") then +diff -rupN freesurfer_orig/bin/segmentThalamicNuclei.sh freesurfer/bin/segmentThalamicNuclei.sh +--- freesurfer_orig/bin/segmentThalamicNuclei.sh 2021-07-19 16:15:29.384484000 +0200 ++++ freesurfer/bin/segmentThalamicNuclei.sh 2021-07-23 14:51:35.594184370 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + set tcsh61706 = (`tcsh --version | grep "6\.17\.06"`) + if ("$tcsh61706" != "") then +diff -rupN freesurfer_orig/bin/segment_monkey freesurfer/bin/segment_monkey +--- freesurfer_orig/bin/segment_monkey 2021-07-19 16:15:31.634965000 +0200 ++++ freesurfer/bin/segment_monkey 2021-07-23 14:51:34.055493141 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # segment_monkey +diff -rupN freesurfer_orig/bin/segment_subject freesurfer/bin/segment_subject +--- freesurfer_orig/bin/segment_subject 2021-07-19 16:15:26.789513000 +0200 ++++ freesurfer/bin/segment_subject 2021-07-23 14:51:34.284000324 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # segment_subject +diff -rupN freesurfer_orig/bin/segment_subject_notal freesurfer/bin/segment_subject_notal +--- freesurfer_orig/bin/segment_subject_notal 2021-07-19 16:15:30.736798000 +0200 ++++ freesurfer/bin/segment_subject_notal 2021-07-23 14:51:34.534758641 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # segment_subject_notal +diff -rupN freesurfer_orig/bin/segment_subject_notal2 freesurfer/bin/segment_subject_notal2 +--- freesurfer_orig/bin/segment_subject_notal2 2021-07-19 16:15:29.206953000 +0200 ++++ freesurfer/bin/segment_subject_notal2 2021-07-23 14:51:34.564843049 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # segment_subject_notal2 +diff -rupN freesurfer_orig/bin/segment_subject_old_skull_strip freesurfer/bin/segment_subject_old_skull_strip +--- freesurfer_orig/bin/segment_subject_old_skull_strip 2021-07-19 16:15:33.628104000 +0200 ++++ freesurfer/bin/segment_subject_old_skull_strip 2021-07-23 14:51:34.574829391 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # segment_subject_old_skull_strip +diff -rupN freesurfer_orig/bin/segment_subject_sc freesurfer/bin/segment_subject_sc +--- freesurfer_orig/bin/segment_subject_sc 2021-07-19 16:15:33.875674000 +0200 ++++ freesurfer/bin/segment_subject_sc 2021-07-23 14:51:34.586423789 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # segment_subject_sc +diff -rupN freesurfer_orig/bin/segment_subject_talmgh freesurfer/bin/segment_subject_talmgh +--- freesurfer_orig/bin/segment_subject_talmgh 2021-07-19 16:15:27.611041000 +0200 ++++ freesurfer/bin/segment_subject_talmgh 2021-07-23 14:51:35.322086104 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # segment_subject_talmgh +diff -rupN freesurfer_orig/bin/segpons freesurfer/bin/segpons +--- freesurfer_orig/bin/segpons 2021-07-19 16:15:28.897587000 +0200 ++++ freesurfer/bin/segpons 2021-07-23 14:51:35.629212544 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # segpons + + set VERSION = 'segpons 7.1.1'; +diff -rupN freesurfer_orig/bin/setlabelstat freesurfer/bin/setlabelstat +--- freesurfer_orig/bin/setlabelstat 2021-07-19 16:15:35.247531000 +0200 ++++ freesurfer/bin/setlabelstat 2021-07-23 14:51:35.666509616 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # setlabelstat +diff -rupN freesurfer_orig/bin/sfa2fieldsign freesurfer/bin/sfa2fieldsign +--- freesurfer_orig/bin/sfa2fieldsign 2021-07-19 16:15:29.615560000 +0200 ++++ freesurfer/bin/sfa2fieldsign 2021-07-23 14:51:35.721448355 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # sfa2fieldsign + setenv FSLOUTPUTTYPE NIFTI + +diff -rupN freesurfer_orig/bin/show_tal freesurfer/bin/show_tal +--- freesurfer_orig/bin/show_tal 2021-07-19 16:15:35.885699000 +0200 ++++ freesurfer/bin/show_tal 2021-07-23 14:51:35.748574683 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh ++#!/usr/bin/env/tcsh + + # + # show_tal +diff -rupN freesurfer_orig/bin/skip_long_make_checks freesurfer/bin/skip_long_make_checks +--- freesurfer_orig/bin/skip_long_make_checks 2021-07-19 16:15:35.246581000 +0200 ++++ freesurfer/bin/skip_long_make_checks 2021-07-23 14:51:35.787365530 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + # if these are defined, then make check skips these long tests: + setenv SKIP_MRI_APARC2ASEG_TEST 1 + setenv SKIP_MRIS_EXPAND_TEST 1 +diff -rupN freesurfer_orig/bin/sphere_subject freesurfer/bin/sphere_subject +--- freesurfer_orig/bin/sphere_subject 2021-07-19 16:15:28.277824000 +0200 ++++ freesurfer/bin/sphere_subject 2021-07-23 14:51:35.916491950 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # sphere_subject +diff -rupN freesurfer_orig/bin/sphere_subject-lh freesurfer/bin/sphere_subject-lh +--- freesurfer_orig/bin/sphere_subject-lh 2021-07-19 16:15:26.419359000 +0200 ++++ freesurfer/bin/sphere_subject-lh 2021-07-23 14:51:35.939838406 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # sphere_subject-lh +diff -rupN freesurfer_orig/bin/sphere_subject-rh freesurfer/bin/sphere_subject-rh +--- freesurfer_orig/bin/sphere_subject-rh 2021-07-19 16:15:34.260395000 +0200 ++++ freesurfer/bin/sphere_subject-rh 2021-07-23 14:51:35.957177242 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # sphere_subject-rh +diff -rupN freesurfer_orig/bin/spmmat2register freesurfer/bin/spmmat2register +--- freesurfer_orig/bin/spmmat2register 2021-07-19 16:15:29.828714000 +0200 ++++ freesurfer/bin/spmmat2register 2021-07-23 14:51:36.055551823 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # spmmat2register +diff -rupN freesurfer_orig/bin/spmregister freesurfer/bin/spmregister +--- freesurfer_orig/bin/spmregister 2021-07-19 16:15:28.846723000 +0200 ++++ freesurfer/bin/spmregister 2021-07-23 14:51:36.111244334 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # spmregister +diff -rupN freesurfer_orig/bin/sratio freesurfer/bin/sratio +--- freesurfer_orig/bin/sratio 2021-07-19 16:15:31.142948000 +0200 ++++ freesurfer/bin/sratio 2021-07-23 14:51:36.195103037 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # sratio - signed ratio + # +A/B if A>B + # -B/A if B>A +diff -rupN freesurfer_orig/bin/surfreg freesurfer/bin/surfreg +--- freesurfer_orig/bin/surfreg 2021-07-19 16:15:31.883339000 +0200 ++++ freesurfer/bin/surfreg 2021-07-23 14:51:36.792543202 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # thalseg + + set VERSION = 'surfreg 7.1.1'; +diff -rupN freesurfer_orig/bin/tal_compare freesurfer/bin/tal_compare +--- freesurfer_orig/bin/tal_compare 2021-07-19 16:15:35.711992000 +0200 ++++ freesurfer/bin/tal_compare 2021-07-23 14:51:37.507107759 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh ++#!/usr/bin/env/tcsh + + # + # tal_compare +diff -rupN freesurfer_orig/bin/talairach freesurfer/bin/talairach +--- freesurfer_orig/bin/talairach 2021-07-19 16:15:31.814815000 +0200 ++++ freesurfer/bin/talairach 2021-07-23 14:51:37.114201419 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # talairach +diff -rupN freesurfer_orig/bin/talairach2 freesurfer/bin/talairach2 +--- freesurfer_orig/bin/talairach2 2021-07-19 16:15:34.838489000 +0200 ++++ freesurfer/bin/talairach2 2021-07-23 14:51:37.164956485 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # talairach2 +diff -rupN freesurfer_orig/bin/talairach_avi freesurfer/bin/talairach_avi +--- freesurfer_orig/bin/talairach_avi 2021-07-19 16:15:26.788493000 +0200 ++++ freesurfer/bin/talairach_avi 2021-07-23 14:51:37.444161124 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # talairach_avi - align an image to the average_305 MNI (talairach) target +diff -rupN freesurfer_orig/bin/talairach_mgh freesurfer/bin/talairach_mgh +--- freesurfer_orig/bin/talairach_mgh 2021-07-19 16:15:27.399940000 +0200 ++++ freesurfer/bin/talairach_mgh 2021-07-23 14:51:37.491562848 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + # + # talairach_mgh +diff -rupN freesurfer_orig/bin/talsegprob freesurfer/bin/talsegprob +--- freesurfer_orig/bin/talsegprob 2021-07-19 16:15:33.962945000 +0200 ++++ freesurfer/bin/talsegprob 2021-07-23 14:51:37.623028466 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # talsegprob +diff -rupN freesurfer_orig/bin/test_recon-all.csh freesurfer/bin/test_recon-all.csh +--- freesurfer_orig/bin/test_recon-all.csh 2021-07-19 16:15:27.580337000 +0200 ++++ freesurfer/bin/test_recon-all.csh 2021-07-23 14:51:37.824344732 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # Name: test_recon-all.csh +diff -rupN freesurfer_orig/bin/thickdiffmap freesurfer/bin/thickdiffmap +--- freesurfer_orig/bin/thickdiffmap 2021-07-19 16:15:27.133033000 +0200 ++++ freesurfer/bin/thickdiffmap 2021-07-23 14:51:37.931476980 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -ef ++#!/usr/bin/env/tcsh -ef + + if ($#argv < 5) then + echo "usage: thickdiffmap <subjscan1> <subjscan2> <commonsubj> <hemi> <step>..." +diff -rupN freesurfer_orig/bin/tkmeditfv freesurfer/bin/tkmeditfv +--- freesurfer_orig/bin/tkmeditfv 2021-07-19 16:15:28.201818000 +0200 ++++ freesurfer/bin/tkmeditfv 2021-07-23 14:51:38.461792437 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # tkmeditfv + + set VERSION = 'tkmeditfv 7.1.1'; +diff -rupN freesurfer_orig/bin/tkregisterfv freesurfer/bin/tkregisterfv +--- freesurfer_orig/bin/tkregisterfv 2021-07-19 16:15:32.274559000 +0200 ++++ freesurfer/bin/tkregisterfv 2021-07-23 14:51:39.060872088 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # tkregisterfv + + set VERSION = 'tkregisterfv 7.1.1'; +diff -rupN freesurfer_orig/bin/tksurferfv freesurfer/bin/tksurferfv +--- freesurfer_orig/bin/tksurferfv 2021-07-19 16:15:25.139920000 +0200 ++++ freesurfer/bin/tksurferfv 2021-07-23 14:51:39.440422333 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # tkmeditfv + + set VERSION = 'tksurferfv 7.1.1'; +diff -rupN freesurfer_orig/bin/trac-all freesurfer/bin/trac-all +--- freesurfer_orig/bin/trac-all 2021-07-19 16:15:29.591002000 +0200 ++++ freesurfer/bin/trac-all 2021-07-23 14:51:39.483824375 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # trac-all +diff -rupN freesurfer_orig/bin/trac-paths freesurfer/bin/trac-paths +--- freesurfer_orig/bin/trac-paths 2021-07-19 16:15:27.471204000 +0200 ++++ freesurfer/bin/trac-paths 2021-07-23 14:51:39.518667018 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # trac-paths +diff -rupN freesurfer_orig/bin/trac-preproc freesurfer/bin/trac-preproc +--- freesurfer_orig/bin/trac-preproc 2021-07-19 16:15:25.610917000 +0200 ++++ freesurfer/bin/trac-preproc 2021-07-23 14:51:39.570452907 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # trac-preproc +diff -rupN freesurfer_orig/bin/train-gcs-atlas freesurfer/bin/train-gcs-atlas +--- freesurfer_orig/bin/train-gcs-atlas 2021-07-19 16:15:28.669402000 +0200 ++++ freesurfer/bin/train-gcs-atlas 2021-07-23 14:51:39.700855332 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # train-gcs-atlas + + if(-e $FREESURFER_HOME/sources.csh) then +diff -rupN freesurfer_orig/bin/unpackimadir freesurfer/bin/unpackimadir +--- freesurfer_orig/bin/unpackimadir 2021-07-19 16:15:28.914437000 +0200 ++++ freesurfer/bin/unpackimadir 2021-07-23 14:51:40.025067817 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # unpackimadir +diff -rupN freesurfer_orig/bin/unpackmincdir freesurfer/bin/unpackmincdir +--- freesurfer_orig/bin/unpackmincdir 2021-07-19 16:15:28.803083000 +0200 ++++ freesurfer/bin/unpackmincdir 2021-07-23 14:51:40.165126363 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # Name: unpackmincdir + # Purpose: unpacks the functionals and anatomicals and copies others +diff -rupN freesurfer_orig/bin/vertexvol freesurfer/bin/vertexvol +--- freesurfer_orig/bin/vertexvol 2021-07-19 16:15:25.456681000 +0200 ++++ freesurfer/bin/vertexvol 2021-07-23 14:51:40.319594236 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # Copyright © 2011-2015 The General Hospital Corporation (Boston, MA) "MGH" + # +diff -rupN freesurfer_orig/bin/vno_match_check freesurfer/bin/vno_match_check +--- freesurfer_orig/bin/vno_match_check 2021-07-19 16:15:30.271118000 +0200 ++++ freesurfer/bin/vno_match_check 2021-07-23 14:51:40.328061783 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + #set echo=1 + +diff -rupN freesurfer_orig/bin/vol2segavg freesurfer/bin/vol2segavg +--- freesurfer_orig/bin/vol2segavg 2021-07-19 16:15:33.676469000 +0200 ++++ freesurfer/bin/vol2segavg 2021-07-23 14:51:40.349574764 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # vol2segavg + + set VERSION = 'vol2segavg 7.1.1'; +diff -rupN freesurfer_orig/bin/vol2subfield freesurfer/bin/vol2subfield +--- freesurfer_orig/bin/vol2subfield 2021-07-19 16:15:35.886959000 +0200 ++++ freesurfer/bin/vol2subfield 2021-07-23 14:51:40.373502102 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # vol2subfield - + + if(-e $FREESURFER_HOME/sources.csh) then +diff -rupN freesurfer_orig/bin/vol2symsurf freesurfer/bin/vol2symsurf +--- freesurfer_orig/bin/vol2symsurf 2021-07-19 16:15:28.752750000 +0200 ++++ freesurfer/bin/vol2symsurf 2021-07-23 14:51:40.394398779 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # vol2symsurf + + set VERSION = 'vol2symsurf 7.1.1'; +diff -rupN freesurfer_orig/bin/vsm-smooth freesurfer/bin/vsm-smooth +--- freesurfer_orig/bin/vsm-smooth 2021-07-19 16:15:30.127002000 +0200 ++++ freesurfer/bin/vsm-smooth 2021-07-23 14:51:40.405737516 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # vsm-smooth + + set VERSION = 'vsm-smooth 7.1.1'; +diff -rupN freesurfer_orig/bin/wfilemask freesurfer/bin/wfilemask +--- freesurfer_orig/bin/wfilemask 2021-07-19 16:15:29.648335000 +0200 ++++ freesurfer/bin/wfilemask 2021-07-23 14:51:40.426690305 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # wfilemask +diff -rupN freesurfer_orig/bin/wm-anat-snr freesurfer/bin/wm-anat-snr +--- freesurfer_orig/bin/wm-anat-snr 2021-07-19 16:15:34.094799000 +0200 ++++ freesurfer/bin/wm-anat-snr 2021-07-23 14:51:40.473043255 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + set VERSION = 'wm-anat-snr 7.1.1'; + set inputargs = ($argv); +diff -rupN freesurfer_orig/bin/wmedits2surf freesurfer/bin/wmedits2surf +--- freesurfer_orig/bin/wmedits2surf 2021-07-19 16:15:31.808577000 +0200 ++++ freesurfer/bin/wmedits2surf 2021-07-23 14:51:40.491966507 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # wmedits2surf + + set VERSION = 'wmedits2surf 7.1.1'; +diff -rupN freesurfer_orig/bin/wmsaseg freesurfer/bin/wmsaseg +--- freesurfer_orig/bin/wmsaseg 2021-07-19 16:15:26.860775000 +0200 ++++ freesurfer/bin/wmsaseg 2021-07-23 14:51:40.526825001 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # wmsaseg + + set VERSION = 'wmsaseg 7.1.1'; +diff -rupN freesurfer_orig/bin/xcerebralseg freesurfer/bin/xcerebralseg +--- freesurfer_orig/bin/xcerebralseg 2021-07-19 16:15:34.267093000 +0200 ++++ freesurfer/bin/xcerebralseg 2021-07-23 14:51:40.576279642 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # xcerebralseg + + set VERSION = 'xcerebralseg 7.1.1'; +diff -rupN freesurfer_orig/bin/xcorr freesurfer/bin/xcorr +--- freesurfer_orig/bin/xcorr 2021-07-19 16:15:28.460983000 +0200 ++++ freesurfer/bin/xcorr 2021-07-23 14:51:40.624493239 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + # xcorr + + set VERSION = 'xcorr 7.1.1'; +diff -rupN freesurfer_orig/bin/xfmrot freesurfer/bin/xfmrot +--- freesurfer_orig/bin/xfmrot 2021-07-19 16:15:30.581830000 +0200 ++++ freesurfer/bin/xfmrot 2021-07-23 14:51:40.654776367 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + if ($#argv < 2 || $#argv > 3) then + echo "xfmrot <transform file> <input vector file> [<output vector file>]" +diff -rupN freesurfer_orig/bin/xhemi-tal freesurfer/bin/xhemi-tal +--- freesurfer_orig/bin/xhemi-tal 2021-07-19 16:15:29.551823000 +0200 ++++ freesurfer/bin/xhemi-tal 2021-07-23 14:51:40.761437425 +0200 +@@ -1,4 +1,4 @@ +-#!/bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # xhemi-tal +diff -rupN freesurfer_orig/bin/xsanatreg freesurfer/bin/xsanatreg +--- freesurfer_orig/bin/xsanatreg 2021-07-19 16:15:29.977642000 +0200 ++++ freesurfer/bin/xsanatreg 2021-07-23 14:51:40.820524247 +0200 +@@ -1,4 +1,4 @@ +-#! /bin/tcsh -f ++#!/usr/bin/env tcsh + + # + # xsanatreg diff --git a/Golden_Repo/f/FreeSurfer/license_text.txt b/Golden_Repo/f/FreeSurfer/license_text.txt new file mode 100644 index 0000000000000000000000000000000000000000..0ebf8864bd58d59ee6c86bc78b712c20d4876336 --- /dev/null +++ b/Golden_Repo/f/FreeSurfer/license_text.txt @@ -0,0 +1,5 @@ +"""r.deepu@fz-juelich.de +51392 + *CsaBFnUlfG0. + FSk7cKa1irCLs""" + diff --git a/Golden_Repo/g/GStreamer/GStreamer-1.18.6-GCCcore-11.2.0.eb b/Golden_Repo/g/GStreamer/GStreamer-1.18.6-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..f23a11eb14afcd7c73056ea3510b3b823954a180 --- /dev/null +++ b/Golden_Repo/g/GStreamer/GStreamer-1.18.6-GCCcore-11.2.0.eb @@ -0,0 +1,74 @@ +easyblock = 'Bundle' + +name = 'GStreamer' +version = '1.18.6' + +homepage = 'https://gstreamer.freedesktop.org/' +description = """GStreamer is a library for constructing graphs of media-handling + components. The applications it supports range from simple + Ogg/Vorbis playback, audio/video streaming to complex audio + (mixing) and video (non-linear editing) processing.""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +builddependencies = [ + ('binutils', '2.37'), + ('Meson', '0.58.2'), + ('Ninja', '1.10.2'), + ('Bison', '3.7.6'), + ('flex', '2.6.4'), + ('pkg-config', '0.29.2'), + ('CMake', '3.21.1', '', SYSTEM), + ('GObject-Introspection', '1.68.0'), + ('git', '2.33.1', '-nodocs'), +] + +dependencies = [ + ('zlib', '1.2.11'), + ('GMP', '6.2.1'), + ('GSL', '2.7'), + ('GLib', '2.69.1'), + ('GTK+', '3.24.23'), + ('libunwind', '1.5.0'), + ('gettext', '0.21'), +] + +default_easyblock = 'MesonNinja' + +default_component_specs = { + 'sources': [SOURCELOWER_TAR_XZ], + 'start_dir': '%(namelower)s-%(version)s', +} + +components = [ + (name, version, { + 'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'], + 'checksums': ['4ec816010dd4d3a93cf470ad0a6f25315f52b204eb1d71dfa70ab8a1c3bd06e6'], + 'configopts': "-Dlibdw=disabled ", + }), + ('GST-plugins-base', '1.18.6', { + 'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'], + 'checksums': ['56a9ff2fe9e6603b9e658cf6897d412a173d2180829fe01e92568549c6bd0f5b'], + 'preconfigopts': 'export PKG_CONFIG_PATH="%(installdir)s/lib/pkgconfig:${PKG_CONFIG_PATH}" && ', + }), + ('GST-plugins-good', '1.18.6', { + 'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'], + 'checksums': ['26723ac01fcb360ade1f41d168c7c322d8af4ceb7e55c8c12ed2690d06a76eed'], + 'preconfigopts': 'export PKG_CONFIG_PATH="%(installdir)s/lib/pkgconfig:${PKG_CONFIG_PATH}" && ', + }), + ('GST-plugins-bad', '1.18.6', { + 'source_urls': ['https://gstreamer.freedesktop.org/src/%(namelower)s'], + 'checksums': ['0b1b50ac6311f0c510248b6cd64d6d3c94369344828baa602db85ded5bc70ec9'], + 'preconfigopts': 'export PKG_CONFIG_PATH="%(installdir)s/lib/pkgconfig:${PKG_CONFIG_PATH}" && ', + }), +] + +modextrapaths = {'PKG_CONFIG_PATH': 'lib/pkgconfig'} + +sanity_check_paths = { + 'files': ['bin/gst-%s-1.0' % x for x in ['discoverer', 'play', 'device-monitor']] + + ['lib/libgst%s-1.0.%s' % (x, SHLIB_EXT) for x in ['app', 'audio', 'video']], + 'dirs': ['include', 'share'] +} + +moduleclass = 'vis' diff --git a/Golden_Repo/g/glog/glog-0.5.0-GCCcore-11.2.0.eb b/Golden_Repo/g/glog/glog-0.5.0-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..842305bc178dab7639685c09899caa0eadea30c8 --- /dev/null +++ b/Golden_Repo/g/glog/glog-0.5.0-GCCcore-11.2.0.eb @@ -0,0 +1,33 @@ +easyblock = 'CMakeMake' + +name = 'glog' +version = '0.5.0' + +homepage = 'https://github.com/google/glog' +description = "A C++ implementation of the Google logging module." + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} +toolchainopts = {'cstd': 'c++11'} + +source_urls = ['https://github.com/google/glog/archive/'] +sources = ['v%(version)s.tar.gz'] +checksums = ['eede71f28371bf39aa69b45de23b329d37214016e2055269b3b5e7cfd40b59f5'] + +builddependencies = [ + ('binutils', '2.37'), + ('CMake', '3.21.1', '', SYSTEM) +] + +dependencies = [ + ('gflags', '2.2.2'), + ('libunwind', '1.5.0'), +] + +configopts = '-DBUILD_SHARED_LIBS=ON ' + +sanity_check_paths = { + 'files': ['include/glog/logging.h', 'include/glog/raw_logging.h', 'lib/libglog.%s' % SHLIB_EXT], + 'dirs': [], +} + +moduleclass = 'devel' diff --git a/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb b/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb index 7ce183ecb718fc057beac719f8282bdc4b89573f..40bdeea8e9429de241b045252c8c286ffd618c57 100644 --- a/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb +++ b/Golden_Repo/g/gnuplot/gnuplot-5.4.2-GCCcore-11.2.0.eb @@ -29,6 +29,7 @@ dependencies = [ ('libcerf', '1.17'), ('X11', '20210802'), ('Qt5', '5.15.2'), + ('libreadline', '8.1'), ] preconfigopts = 'autoreconf && ' diff --git a/Golden_Repo/h/HDFView/HDFView-3.1.3-GCCcore-11.2.0.eb b/Golden_Repo/h/HDFView/HDFView-3.1.3-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..883edc6a10b60ebc1a9bfaf73a595c920e411822 --- /dev/null +++ b/Golden_Repo/h/HDFView/HDFView-3.1.3-GCCcore-11.2.0.eb @@ -0,0 +1,31 @@ +easyblock = 'Binary' + +name = 'HDFView' +version = '3.1.3' + +homepage = 'https://www.hdfgroup.org/downloads/hdfview/' +description = "HDFView is a visual tool for browsing and editing HDF4 and HDF5 files." + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = ['https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/hdfview-%(version)s/bin/'] +sources = ['HDFViewApp-%(version)s-centos8_64.tar.gz'] +checksums = ['e60976ba816afc426bc3bc7a151b6f2e208605711e9bc9bf188ef14771faa4c7'] + +dependencies = [ + ('Java', '15', '', SYSTEM) +] + +install_cmd = "tar xfvz *.tar.gz && " +install_cmd += "mkdir %(installdir)s/lib && mkdir %(installdir)s/bin && " +install_cmd += "cp -a HDFView/lib/app %(installdir)s/lib && " +install_cmd += "cp -a HDFView/lib/app/hdfview.sh %(installdir)s/bin/HDFView && " +install_cmd += 'sed -i "s@export JAVABIN=.*@export JAVABIN=$EBROOTJAVA/bin@g" %(installdir)s/bin/HDFView && ' +install_cmd += 'sed -i "s@export INSTALLDIR=.*@export INSTALLDIR=%(installdir)s@g" %(installdir)s/bin/HDFView' + +sanity_check_paths = { + 'files': ['bin/HDFView'], + 'dirs': ['lib/app'], +} + +moduleclass = 'vis' diff --git a/Golden_Repo/h/Horovod/Horovod-0.24.3-gomkl-2021b.eb b/Golden_Repo/h/Horovod/Horovod-0.24.3-gomkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..aaf12717171295d1800aacbbccc9eb008a641d3a --- /dev/null +++ b/Golden_Repo/h/Horovod/Horovod-0.24.3-gomkl-2021b.eb @@ -0,0 +1,102 @@ +# on juwels booster, one might to call "export UCX_LOG_LEVEL=FATAL; ebw ... +easyblock = 'PythonBundle' + +name = 'Horovod' +version = '0.24.3' +local_tf_version = '2.6.0' + +homepage = 'https://github.com/uber/horovod' +description = "Horovod is a distributed training framework for TensorFlow and PyTorch." + +toolchain = {'name': 'gomkl', 'version': '2021b'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), +] + +dependencies = [ + ('CUDA', '11.5', '', True), + ('Python', '3.9.6'), + ('TensorFlow', local_tf_version, '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')), + ('PyTorch', '1.11', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')), + ('NCCL', '2.12.7-1', '-CUDA-%(cudaver)s'), + +] + +use_pip = True +sanity_pip_check = True +parallel = 1 # Bug in CMake causes a race condition on horovod_cuda_kernels_generated_cuda_kernels.cu.o.NVCC-depend + +# possible vars: +# HOROVOD_BUILD_ARCH_FLAGS - additional C++ compilation flags to pass in for your build architecture. +# HOROVOD_CUDA_HOME - path where CUDA include and lib directories can be found. +# HOROVOD_BUILD_CUDA_CC_LIST - List of compute capabilities to build Horovod CUDA +# kernels for (example: HOROVOD_BUILD_CUDA_CC_LIST=60,70,75) +# HOROVOD_ROCM_HOME - path where ROCm include and lib directories can be found. +# HOROVOD_NCCL_HOME - path where NCCL include and lib directories can be found. +# HOROVOD_NCCL_INCLUDE - path to NCCL include directory. +# HOROVOD_NCCL_LIB - path to NCCL lib directory. +# HOROVOD_NCCL_LINK - {SHARED, STATIC}. Mode to link NCCL library. Defaults to STATIC for CUDA, SHARED for ROCm. +# HOROVOD_WITH_GLOO - {1}. Require that Horovod is built with Gloo support enabled. +# HOROVOD_WITHOUT_GLOO - {1}. Skip building with Gloo support. +# HOROVOD_WITH_MPI - {1}. Require that Horovod is built with MPI support enabled. +# HOROVOD_WITHOUT_MPI - {1}. Skip building with MPI support. +# HOROVOD_GPU - {CUDA, ROCM}. Framework to use for GPU operations. +# HOROVOD_GPU_OPERATIONS - {NCCL, MPI}. Framework to use for GPU tensor allreduce, allgather, and broadcast. +# HOROVOD_GPU_ALLREDUCE - {NCCL, MPI}. Framework to use for GPU tensor allreduce. +# HOROVOD_GPU_ALLGATHER - {NCCL, MPI}. Framework to use for GPU tensor allgather. +# HOROVOD_GPU_BROADCAST - {NCCL, MPI}. Framework to use for GPU tensor broadcast. +# HOROVOD_ALLOW_MIXED_GPU_IMPL - {1}. Allow Horovod to install with NCCL allreduce and MPI GPU allgather / +# broadcast. Not recommended due to a possible deadlock. +# HOROVOD_CPU_OPERATIONS - {MPI, GLOO, CCL}. Framework to use for CPU tensor allreduce, allgather, and broadcast. +# HOROVOD_CMAKE - path to the CMake binary used to build Gloo (not required when using MPI). +# HOROVOD_WITH_TENSORFLOW - {1}. Require Horovod to install with TensorFlow support enabled. +# HOROVOD_WITHOUT_TENSORFLOW - {1}. Skip installing TensorFlow support. +# HOROVOD_WITH_PYTORCH - {1}. Require Horovod to install with PyTorch support enabled. +# HOROVOD_WITHOUT_PYTORCH - {1}. Skip installing PyTorch support. +# HOROVOD_WITH_MXNET - {1}. Require Horovod to install with MXNet support enabled. +# HOROVOD_WITHOUT_MXNET - {1}. Skip installing MXNet support. + +# prebuildopts = 'export LDSHARED="$CC -shared" && ' +# prebuildopts += ' HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITHOUT_PYTORCH=1 HOROVOD_WITHOUT_MXNET=1 ' +# prebuildopts += ' HOROVOD_NCCL_LINK=SHARED HOROVOD_NCCL_HOME=$EBROOTNCCL ' +# prebuildopts += ' HOROVOD_GPU_OPERATIONS=NCCL ' +# prebuildopts += ' HOROVOD_CPU_OPERATIONS=MPI ' +# prebuildopts += ' HOROVOD_GPU_ALLREDUCE=NCCL ' +# prebuildopts += ' HOROVOD_GPU_BROADCAST=NCCL ' +# prebuildopts += ' HOROVOD_WITH_MPI=1 ' + + +prebuildopts = 'export LDSHARED="$CC -shared" && ' +prebuildopts += ' HOROVOD_WITH_MPI=1 ' +prebuildopts += ' HOROVOD_CPU_OPERATIONS=MPI ' +prebuildopts += ' HOROVOD_NCCL_LINK=SHARED HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_NCCL_HOME=$EBROOTNCCL ' +prebuildopts += ' HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1' +# prebuildopts += ' NVCC_GENCODE="-gencode=arch=compute_70,code=sm_70 \ +# -gencode=arch=compute_75,code=sm_75 \ +# -gencode=arch=compute_80,code=sm_80 \ +# -gencode=arch=compute_86,code=sm_86"' + +preinstallopts = prebuildopts + + +exts_default_options = {'source_urls': [PYPI_SOURCE]} + +exts_list = [ + ('horovod', version, { + 'checksums': ['af24e4b1ed9adaa0db98f6375c023d438f65f116aa80ad5e7a321780362b3e7f'], + }), +] + +sanity_check_paths = { + 'files': ['bin/horovodrun'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +# This makes openmpi work. It's up to the sysadmins to correct me here. +modextravars = {'HOROVOD_MPI_THREADS_DISABLE': '1'} + +modloadmsg = 'Setting HOROVOD_MPI_THREADS_DISABLE=1. ' + +moduleclass = 'tools' diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb index 723941e35aeb47cde3908badb5f1ef068f3a1503..39a64a03e941fc21fddd58b04cdd26f394c5b01d 100644 --- a/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb +++ b/Golden_Repo/h/h5py/h5py-3.5.0-gompi-2021b.eb @@ -21,6 +21,7 @@ dependencies = [ ('Python', '3.9.6'), ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3') ] use_pip = True @@ -30,6 +31,6 @@ download_dep_fail = True # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install, # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency. -preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' +preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' moduleclass = 'data' diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb index 5c3e5432b0d9f7a68aa39c9eef9eba6f0f43e961..b14e5f3d23def9bda0aa47d1e9429d6ad1237b03 100644 --- a/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb +++ b/Golden_Repo/h/h5py/h5py-3.5.0-gpsmpi-2021b.eb @@ -21,6 +21,7 @@ dependencies = [ ('Python', '3.9.6'), ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3') ] use_pip = True @@ -30,6 +31,6 @@ download_dep_fail = True # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install, # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency. -preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' +preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' moduleclass = 'data' diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb index 02c5d8a326c46c88a532b5aa11ca1f59a46a3473..613db3eba2be60f9cf49fcb9cc41686274282056 100644 --- a/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb +++ b/Golden_Repo/h/h5py/h5py-3.5.0-iimpi-2021b.eb @@ -21,6 +21,7 @@ dependencies = [ ('Python', '3.9.6'), ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3') ] use_pip = True @@ -30,6 +31,6 @@ download_dep_fail = True # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install, # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency. -preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' +preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' moduleclass = 'data' diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb index 6b1598ccd6d035fb4af424ccc3c2923a72469a45..9a01255570befae1e2c407ca850009f4654ff03a 100644 --- a/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb +++ b/Golden_Repo/h/h5py/h5py-3.5.0-iompi-2021b.eb @@ -21,6 +21,7 @@ dependencies = [ ('Python', '3.9.6'), ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3') ] use_pip = True @@ -30,6 +31,6 @@ download_dep_fail = True # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install, # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency. -preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' +preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' moduleclass = 'data' diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb index bc0375e2a4fd33a226260e43b46b5e2435d5398a..8d5f0b5c81e78ea51e4454761942286aa1a23665 100644 --- a/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb +++ b/Golden_Repo/h/h5py/h5py-3.5.0-ipsmpi-2021b.eb @@ -21,6 +21,7 @@ dependencies = [ ('Python', '3.9.6'), ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3') ] use_pip = True @@ -30,6 +31,6 @@ download_dep_fail = True # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install, # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency. -preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' +preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' moduleclass = 'data' diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb index fb52a66179a6f713c32a5c1a09f5bdbf37a2d72a..05f9ce4c00ef7629c5578a9de1ff93a1b4d39991 100644 --- a/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb +++ b/Golden_Repo/h/h5py/h5py-3.5.0-npsmpic-2021b.eb @@ -21,6 +21,7 @@ dependencies = [ ('Python', '3.9.6'), ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3') ] use_pip = True @@ -30,7 +31,7 @@ download_dep_fail = True # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install, # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency. -preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' +preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' preinstallopts += 'CFLAGS="-noswitcherror" ' moduleclass = 'data' diff --git a/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb b/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb index 24ff474eadbc8ac44f0c3b1f447f937002312561..5b422172dd59368693b75acca850d11683cfafee 100644 --- a/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb +++ b/Golden_Repo/h/h5py/h5py-3.5.0-nvompic-2021b.eb @@ -15,14 +15,13 @@ toolchainopts = {'usempi': True} sources = [SOURCE_TAR_GZ] checksums = ['77c7be4001ac7d3ed80477de5b6942501d782de1bbe4886597bdfec2a7ab821f'] -prebuildopts = 'export CFLAGS="-noswitcherror -D_NPY_NO_DEPRECATIONS" &&' - builddependencies = [('pkgconfig', '1.5.5', '-python')] dependencies = [ ('Python', '3.9.6'), ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('HDF5', '1.12.1'), + ('mpi4py', '3.1.3') ] use_pip = True @@ -32,7 +31,7 @@ download_dep_fail = True # h5py's setup.py will disable setup_requires if H5PY_SETUP_REQUIRES is set to 0 # without this environment variable, pip will fetch the minimum numpy version h5py supports during install, # even though SciPy-bundle provides a newer version that satisfies h5py's install_requires dependency. -preinstallopts = 'HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' +preinstallopts = 'HDF5_MPI=ON HDF5_DIR="$EBROOTHDF5" H5PY_SETUP_REQUIRES=0 ' preinstallopts += 'CFLAGS="-noswitcherror" ' moduleclass = 'data' diff --git a/Golden_Repo/hidden_deps.txt b/Golden_Repo/hidden_deps.txt index b9b100a41f1d0695be9a905d3ca96b16b0ef93d8..04bc95af051c8bcb5b0a1449f3b26930fee6d411 100644 --- a/Golden_Repo/hidden_deps.txt +++ b/Golden_Repo/hidden_deps.txt @@ -31,6 +31,7 @@ GLPK GLib GObject-Introspection GPC +GStreamer GTI GTK+ GTS @@ -178,6 +179,7 @@ libffi libfontenc libgd libgeotiff +libgit2 libglade libiconv libidn diff --git a/Golden_Repo/i/IRkernel/IRkernel-1.3-gcccoremkl-11.2.0-2021.4.0-R-4.2.1.eb b/Golden_Repo/i/IRkernel/IRkernel-1.3-gcccoremkl-11.2.0-2021.4.0-R-4.2.1.eb new file mode 100644 index 0000000000000000000000000000000000000000..cba7f9ea5ae52c7733b84013f1636c86a3305b2d --- /dev/null +++ b/Golden_Repo/i/IRkernel/IRkernel-1.3-gcccoremkl-11.2.0-2021.4.0-R-4.2.1.eb @@ -0,0 +1,51 @@ +easyblock = 'Bundle' + +name = 'IRkernel' +version = '1.3' +versionsuffix = '-R-%(rver)s' + +homepage = 'https://github.com/baktoft/yaps' +description = "IRKernel" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} + +dependencies = [ + ('R', '4.1.2'), + ('ZeroMQ', '4.3.4'), # for pbdZMQ needed by IRkernel +] + +exts_default_options = { + 'source_urls': [ + 'https://cran.r-project.org/src/contrib/Archive/%(name)s', # package archive + 'https://cran.r-project.org/src/contrib/', # current version of packages + 'https://cran.freestatistics.org/src/contrib', # mirror alternative for current packages + ], + 'source_tmpl': '%(name)s_%(version)s.tar.gz' +} + +exts_defaultclass = 'RPackage' +exts_filter = ("R -q --no-save", "library(%(ext_name)s)") + +exts_list = [ + ('repr', '1.1.4', { + 'checksums': ['6f799ca83e0940618dd8c22e62ffdce5ec11ba3366c5306ae58b55b53c097040'], + }), + ('IRdisplay', '1.1', { + 'checksums': ['83eb030ff91f546cb647899f8aa3f5dc9fe163a89a981696447ea49cc98e8d2b'], + }), + ('pbdZMQ', '0.3-7', { + 'checksums': ['df2d2be14b2f57a64d76cdda4c01fd1c3d9aa12221c63524c01c71849df11808'], + }), + (name, version, { + 'checksums': ['5a7fcbfd978dfb3cca6702a68a21c147551995fc400084ae8382ffcbbdae1903'], + }), +] + +modextrapaths = {'R_LIBS': ''} + +sanity_check_paths = { + 'files': [], + 'dirs': [name], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2-nompi.eb b/Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2.0-nompi.eb similarity index 100% rename from Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2-nompi.eb rename to Golden_Repo/i/ITK/ITK-5.2.1-GCCcore-11.2.0-nompi.eb diff --git a/Golden_Repo/i/Inspector/Inspector-2022.0.0.eb b/Golden_Repo/i/Inspector/Inspector-2022.0.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..2c901cebfa5e701fb3348264fad514def4793e7d --- /dev/null +++ b/Golden_Repo/i/Inspector/Inspector-2022.0.0.eb @@ -0,0 +1,24 @@ +name = 'Inspector' +version = '2022.0.0' + +homepage = 'https://software.intel.com/en-us/inspector' +description = """Intel Inspector is a dynamic memory and threading error + checking tool for users developing serial and parallel applications""" + +toolchain = SYSTEM + +source_urls = [ + 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18239/'] +sources = ['l_inspector_oneapi_p_%(version)s.266_offline.sh'] +checksums = ['79a0eb2ae3f1de1e3456076685680c468702922469c3fda3e074718fb0bea741'] + +dontcreateinstalldir = True + +requires_runtime_license = False + +sanity_check_paths = { + 'files': ['inspector/%s/bin64/inspxe-cl' % version], + 'dirs': ['inspector/%s/bin64' % version, 'inspector/%s/bin32' % version] +} + +moduleclass = 'tools' diff --git a/Golden_Repo/i/ipp/ipp-2021.5.1.eb b/Golden_Repo/i/ipp/ipp-2021.5.1.eb new file mode 100644 index 0000000000000000000000000000000000000000..da8035d73516aa2c76b2df930a5b74b91a7e04da --- /dev/null +++ b/Golden_Repo/i/ipp/ipp-2021.5.1.eb @@ -0,0 +1,22 @@ +name = 'ipp' +version = '2021.5.1' + +homepage = 'https://software.intel.com/en-us/articles/intel-ipp/' +description = """Intel Integrated Performance Primitives (Intel IPP) is an extensive library + of multicore-ready, highly optimized software functions for multimedia, data processing, + and communications applications. Intel IPP offers thousands of optimized functions + covering frequently used fundamental algorithms.""" + +toolchain = SYSTEM + +source_urls = [ + 'https://registrationcenter-download.intel.com/akdlm/irc_nas/18440'] +sources = ['l_ipp_oneapi_p_%(version)s.522_offline.sh'] +checksums = ['be99f9b0b2cc815e017188681ab997f3ace94e3010738fa6f702f2416dac0de4'] + +sanity_check_paths = { + 'files': ['ipp/%s/lib/intel64/libippcc.so' % version], + 'dirs': ['ipp/%s/lib' % version, 'ipp/%s/include' % version], +} + +moduleclass = 'perf' diff --git a/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2022.3-GCCcore-11.2.0.eb b/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2022.3-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..20dcfa0a4ed47bfa23f943cf53390402e738a232 --- /dev/null +++ b/Golden_Repo/j/jsc-xdg-menu/jsc-xdg-menu-2022.3-GCCcore-11.2.0.eb @@ -0,0 +1,40 @@ +easyblock = 'Binary' + +name = 'jsc-xdg-menu' +version = '2022.3' + +homepage = '' +description = """setup JSC`s desktop menu""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = ['https://gitlab.version.fz-juelich.de/goebbert1/jsc-xdg-menu/-/archive/%(version)s/'] +sources = ['%(name)s-%(version)s.tar.gz'] +checksums = ['5ab2891051085799f1043a4e0232d2ea7875c0cafcb86cc1eab0889857b7b49f'] + +builddependencies = [ + # just ensure they exist + ('Blender', '2.93.5', '-binary', SYSTEM), + ('CubeGUI', '4.6'), + ('GPicView', '0.2.5'), + ('HDFView', '3.1.3'), + ('Nsight-Compute', '2022.1.0'), + ('Nsight-Systems', '2022.1.1'), + # ('ParaView', '5.10.0', '', ('gpsmkl', '2021')), + ('TotalView', '2021.4.10'), + ('Vampir', '10.0.0', '', SYSTEM), +] + +extract_sources = True, +install_cmd = 'cp -a %(builddir)s/%(name)s-%(version)s/* %(installdir)s/' + +modextravars = {'XDG_MENU_PREFIX': 'jsc-'} +modextrapaths = {'XDG_CONFIG_DIRS': 'config', + 'XDG_DATA_DIRS': 'data'} + +sanity_check_paths = { + 'files': ['README.md', 'config/menus/jsc-applications.menu'], + 'dirs': ['bin', 'config/menus', 'data/applications', 'data/desktop-directories'], +} + +moduleclass = 'vis' diff --git a/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb b/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb index 25a3666ef24735efc5eb508fa6b6e5aecaee558d..67ca2d0907804bdb5574ad50a82e883cad5d9bc6 100644 --- a/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb +++ b/Golden_Repo/l/LAMMPS/LAMMPS-7Jan2022-gpsmkl-2021b.eb @@ -33,6 +33,7 @@ builddependencies = [ ('CMake', '3.21.1', '', SYSTEM), ('pkg-config', '0.29.2'), ('archspec', '0.1.3'), + ('git', '2.33.1', '-nodocs'), ] dependencies = [ ('CUDA', '11.5', '', SYSTEM), @@ -45,7 +46,7 @@ dependencies = [ ('gzip', '1.10'), ('cURL', '7.78.0'), ('HDF5', '1.12.1'), - ('tbb', '2020.3'), + ('tbb', '2021.4.0'), ('PCRE', '8.45'), ('libxml2', '2.9.10'), ('FFmpeg', '4.4.1'), diff --git a/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb b/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb index 81d0e8fb36b1074087d53a78ea17b2e1ae04c718..479b36b9fb077cc9f76fdda6334b4a30399aa150 100644 --- a/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb +++ b/Golden_Repo/l/libffi/libffi-3.4.2-GCCcore-11.2.0.eb @@ -19,6 +19,9 @@ builddependencies = [ ('binutils', '2.37'), ] +# work-around for https://github.com/libffi/libffi/pull/647 +configopts = '--disable-exec-static-tramp ' + sanity_check_paths = { 'files': ['lib/libffi.a', 'lib/libffi.%s' % SHLIB_EXT], 'dirs': ['include', 'share'], diff --git a/Golden_Repo/l/libgit2/libgit2-1.1.1-GCCcore-11.2.0.eb b/Golden_Repo/l/libgit2/libgit2-1.1.1-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..085a5fb9f66b48e2b25cc8d21567eeaf087a2559 --- /dev/null +++ b/Golden_Repo/l/libgit2/libgit2-1.1.1-GCCcore-11.2.0.eb @@ -0,0 +1,34 @@ +easyblock = 'CMakeMake' + +name = 'libgit2' +version = '1.1.1' + +homepage = 'https://libgit2.org/' +description = """libgit2 is a portable, pure C implementation of the Git core methods provided as a re-entrant +linkable library with a solid API, allowing you to write native speed custom Git applications in any language +which supports C bindings.""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +github_account = 'libgit2' +source_urls = [GITHUB_SOURCE] +sources = [{'download_filename': 'v%(version)s.tar.gz', 'filename': SOURCE_TAR_GZ}] +checksums = ['13a525373f64c711a00a058514d890d1512080265f98e0935ab279393f21a620'] + +builddependencies = [ + ('binutils', '2.37'), + ('CMake', '3.21.1'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('PCRE', '8.45'), + ('OpenSSL', '1.1', '', True), +] + +sanity_check_paths = { + 'files': ['include/git2.h', 'lib64/libgit2.%s' % SHLIB_EXT, 'lib64/pkgconfig/libgit2.pc'], + 'dirs': [] +} + +moduleclass = 'devel' diff --git a/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb b/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb index 7690e9e8a2c355d80bfd39996bc03618e99621df..1295f111648eeca3dbcc19162f66febe709bf60c 100644 --- a/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb +++ b/Golden_Repo/l/libvpx/libvpx-1.11.0-GCCcore-11.2.0.eb @@ -21,7 +21,10 @@ builddependencies = [ ('NASM', '2.15.05'), ] -configopts = '--enable-pic --enable-shared' + +configopts = '--enable-pic --enable-shared ' +# https://github.com/Xpra-org/xpra/issues/3082 +configopts += '--enable-vp9-highbitdepth' sanity_check_paths = { # 'lib/libvpx.%s' % SHLIB_EXT], diff --git a/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb b/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb index 173da2ccd4471061a18f5664cc6c701b83baa247..69aed046c66b1053da0ecdb5e03b29290f5bc636 100644 --- a/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb +++ b/Golden_Repo/l/libyuv/libyuv-20210428-GCCcore-11.2.0.eb @@ -18,7 +18,8 @@ sources = [ 'download_filename': 'eb6e7bb63738e29efd82ea3cf2a115238a89fa51.tar.gz', } ] -checksums = ['92f70cbd168aaaabad33f59221013e6cee8e41aa802db592b027e4e01e0bcbba'] +# checksum changes with every download +checksums = ['df3300c3c9d56b5d6b0ef02f330ca508ef4428b1b9af67083201004deb93991a'] builddependencies = [ ('binutils', '2.37'), @@ -28,14 +29,12 @@ builddependencies = [ separate_build_dir = True start_dir = './' -maxparallel = 12 - configopts = '-DCMAKE_VERBOSE_MAKEFILE=ON ' postinstallcmds = [ ( '{ cat >> %(installdir)s/libyuv.pc; } << \'EOF\'\n' - 'prefix=PREFIX_TEMPLATE\n' + 'prefix=%(installdir)s\n' 'exec_prefix=${prefix}\n' 'libdir=${prefix}/lib\n' 'includedir=${prefix}/include\n' @@ -43,7 +42,8 @@ postinstallcmds = [ 'Name: libyuv\n' 'Description: YUV conversion and scaling functionality library\n' 'Version: 0\n' - 'Libs: -lyuv\n' + 'Cflags: -I${includedir}\n' + 'Libs: -L${libdir} -lyuv\n' 'EOF' ), ] diff --git a/Golden_Repo/m/MCR/MCR-R2021b.2.eb b/Golden_Repo/m/MCR/MCR-R2021b.2.eb new file mode 100644 index 0000000000000000000000000000000000000000..b7e3e831019e4c19f3e5c62cf55a70f34f081f9e --- /dev/null +++ b/Golden_Repo/m/MCR/MCR-R2021b.2.eb @@ -0,0 +1,21 @@ +## +# Author: Robert Mijakovic <robert.mijakovic@lxp.lu> +## +name = 'MCR' +version = 'R2021b' # runtime version 9.11 +local_update = '2' +versionsuffix = '.%s' % local_update + +homepage = 'https://www.mathworks.com/products/compiler/mcr/' +description = """The MATLAB Runtime is a standalone set of shared libraries + that enables the execution of compiled MATLAB applications + or components on computers that do not have MATLAB installed.""" + +toolchain = SYSTEM + +source_urls = ['https://ssd.mathworks.com/supportfiles/downloads/%%(version)s/Release/%s/deployment_files/' + 'installer/complete/glnxa64/' % local_update] +sources = ['MATLAB_Runtime_%%(version)s_Update_%s_glnxa64.zip' % local_update] +checksums = ['731ea5ff34a64ec05024ccf36dc24cfb77d5de4dfabec678e3b964e1110aa6e2'] + +moduleclass = 'math' diff --git a/Golden_Repo/m/MCR/MCR-R2022a.eb b/Golden_Repo/m/MCR/MCR-R2022a.eb new file mode 100644 index 0000000000000000000000000000000000000000..f4e33dcd257c9504f8d1a28e32957b1ada4573ec --- /dev/null +++ b/Golden_Repo/m/MCR/MCR-R2022a.eb @@ -0,0 +1,20 @@ +## +# Author: Robert Mijakovic <robert.mijakovic@lxp.lu> +## +name = 'MCR' +version = 'R2022a' # runtime version 9.12 +local_update = '0' + +homepage = 'https://www.mathworks.com/products/compiler/mcr/' +description = """The MATLAB Runtime is a standalone set of shared libraries + that enables the execution of compiled MATLAB applications + or components on computers that do not have MATLAB installed.""" + +toolchain = SYSTEM + +source_urls = ['https://ssd.mathworks.com/supportfiles/downloads/%%(version)s/Release/%s/deployment_files/' + 'installer/complete/glnxa64/' % local_update] +sources = ['MATLAB_Runtime_%(version)s_glnxa64.zip'] +checksums = ['ce013fa6d46148741ad55abaddd26d8d85d6fa4cf94917c8f3a66f350230cfc7'] + +moduleclass = 'math' diff --git a/Golden_Repo/m/MED/MED-4.1.0-gpsmpi-2021b.eb b/Golden_Repo/m/MED/MED-4.1.0-gpsmpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..acce8bba890739378e8c98d37a776d61551b3a9e --- /dev/null +++ b/Golden_Repo/m/MED/MED-4.1.0-gpsmpi-2021b.eb @@ -0,0 +1,44 @@ +# easyconfig file for MED Library +easyblock = 'ConfigureMake' + +name = 'MED' +version = '4.1.0' + +homepage = 'http://salome-platform.org/' +description = """Initially defined by EDF R&D, +this format has been defined and maintained +through a MED working group comprising members of +EDF R&D and CEA (the Code Saturne team being represented). +""" + +toolchain = {'name': 'gpsmpi', 'version': '2021b'} +toolchainopts = {'optarch': True, 'pic': True, 'usempi': True} + +source_urls = ['http://files.salome-platform.org/Salome/other/'] +sources = ['med-%(version)s.tar.gz'] +patches = [ + 'med-%(version)s_hdf5_v11201.patch', + 'med-%(version)s_hdf5_H5Oget_info.patch', +] +checksums = [ + '847db5d6fbc9ce6924cb4aea86362812c9a5ef6b9684377e4dd6879627651fce', # med-4.1.0.tar.gz + # med-4.1.0_hdf5_v11201.patch + '6176281bcead9c1d5587daa1d0a82553f3bf8071282282e31c8275700aebf761', + # med-4.1.0_hdf5_H5Oget_info.patch + 'ded71c03da362efffdb24dcc76e9fae3e36eb58130c70ebe2df8d05c0ec08437', +] + +dependencies = [ + ('Python', '3.9.6'), + ('SWIG', '4.0.2'), + ('HDF5', '1.12.1') +] + +prebuildopts = 'autoreconf -f -i && ' + +# better to configure these dependents explicitly +configopts = '--with-f90 ' +configopts += '--with-swig=$EBROOTSWIG ' +configopts += '--with-hdf5=$EBROOTHDF5 ' + +moduleclass = 'lib' diff --git a/Golden_Repo/m/MED/med-4.1.0_hdf5_H5Oget_info.patch b/Golden_Repo/m/MED/med-4.1.0_hdf5_H5Oget_info.patch new file mode 100644 index 0000000000000000000000000000000000000000..d7d76637db060ee4d5a42efe8cecb73df517e8c7 --- /dev/null +++ b/Golden_Repo/m/MED/med-4.1.0_hdf5_H5Oget_info.patch @@ -0,0 +1,96 @@ +diff -ruN med-4.1.0-orig/src/hdfi/_MEDattributeNumWrByName.c med-4.1.0/src/hdfi/_MEDattributeNumWrByName.c +--- med-4.1.0-orig/src/hdfi/_MEDattributeNumWrByName.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDattributeNumWrByName.c 2022-01-20 18:42:35.685834000 +0100 +@@ -68,7 +68,7 @@ + + if ( (_attid=H5Aopen_by_name( pid, path, attname, H5P_DEFAULT, H5P_DEFAULT )) >= 0 ) { + +- if ( H5Oget_info( pid, &_oinfo ) <0) { ++ if ( H5Oget_info( pid, &_oinfo, H5O_INFO_BASIC ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info"); + goto ERROR; + } +diff -ruN med-4.1.0-orig/src/hdfi/_MEDattributeNumWr.c med-4.1.0/src/hdfi/_MEDattributeNumWr.c +--- med-4.1.0-orig/src/hdfi/_MEDattributeNumWr.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDattributeNumWr.c 2022-01-20 18:42:47.171221000 +0100 +@@ -77,7 +77,7 @@ + + if ( (_attid=H5Aopen( pid, attname, H5P_DEFAULT )) >= 0 ) { + +- if ( H5Oget_info( pid, &_oinfo ) <0) { ++ if ( H5Oget_info( pid, &_oinfo, H5O_INFO_BASIC ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info"); + goto ERROR; + } +diff -ruN med-4.1.0-orig/src/hdfi/_MEDcheckAttributeStringFunc.c med-4.1.0/src/hdfi/_MEDcheckAttributeStringFunc.c +--- med-4.1.0-orig/src/hdfi/_MEDcheckAttributeStringFunc.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDcheckAttributeStringFunc.c 2022-01-20 18:23:28.503780000 +0100 +@@ -40,7 +40,7 @@ + oinfo.type=H5G_LINK; + break; + case H5L_TYPE_HARD: +- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) { ++ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name"); + SSCRUTE(lname); + } +diff -ruN med-4.1.0-orig/src/hdfi/_MEDchecknSublinkFunc.c med-4.1.0/src/hdfi/_MEDchecknSublinkFunc.c +--- med-4.1.0-orig/src/hdfi/_MEDchecknSublinkFunc.c 2020-03-11 10:36:36.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDchecknSublinkFunc.c 2022-01-20 18:22:11.761793000 +0100 +@@ -41,7 +41,7 @@ + oinfo.type=H5G_LINK; + break; + case H5L_TYPE_HARD: +- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) { ++ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name"); + SSCRUTE(lname); + } +diff -ruN med-4.1.0-orig/src/hdfi/_MEDdatagroupExist.c med-4.1.0/src/hdfi/_MEDdatagroupExist.c +--- med-4.1.0-orig/src/hdfi/_MEDdatagroupExist.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDdatagroupExist.c 2022-01-20 18:22:51.586949000 +0100 +@@ -45,7 +45,7 @@ + + case H5L_TYPE_HARD: + *isasoftlink = MED_FALSE; +- if ( H5Oget_info_by_name( gid, datagroupname, &_oinfo, H5P_DEFAULT ) <0) { ++ if ( H5Oget_info_by_name( gid, datagroupname, &_oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name"); + SSCRUTE( datagroupname); + } +diff -ruN med-4.1.0-orig/src/hdfi/_MEDdatasetExist.c med-4.1.0/src/hdfi/_MEDdatasetExist.c +--- med-4.1.0-orig/src/hdfi/_MEDdatasetExist.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDdatasetExist.c 2022-01-20 18:22:38.394310000 +0100 +@@ -47,7 +47,7 @@ + + case H5L_TYPE_HARD: + *isasoftlink = MED_FALSE; +- if ( H5Oget_info_by_name( gid, datasetname, &_oinfo, H5P_DEFAULT ) <0) { ++ if ( H5Oget_info_by_name( gid, datasetname, &_oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name"); + SSCRUTE( datasetname); + } +diff -ruN med-4.1.0-orig/src/hdfi/_MEDlinkObjs.c med-4.1.0/src/hdfi/_MEDlinkObjs.c +--- med-4.1.0-orig/src/hdfi/_MEDlinkObjs.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDlinkObjs.c 2022-01-20 18:22:25.480007000 +0100 +@@ -62,7 +62,7 @@ + sur un lien hard + Sur un lien soft H5O_TYPE_UNKNOWN + */ +- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) { ++ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name"); + SSCRUTE(lname); + } +diff -ruN med-4.1.0-orig/tools/medimport/2.3.6/_MEDconvertStringDatasets.c med-4.1.0/tools/medimport/2.3.6/_MEDconvertStringDatasets.c +--- med-4.1.0-orig/tools/medimport/2.3.6/_MEDconvertStringDatasets.c 2020-03-11 10:36:40.000000000 +0100 ++++ med-4.1.0/tools/medimport/2.3.6/_MEDconvertStringDatasets.c 2022-01-20 18:23:07.202747000 +0100 +@@ -52,7 +52,7 @@ + oinfo.type=(H5O_type_t) H5G_LINK; + break; + case H5L_TYPE_HARD: +- if ( H5Oget_info_by_name( id, lname, &oinfo, H5P_DEFAULT ) <0) { ++ if ( H5Oget_info_by_name( id, lname, &oinfo, H5O_INFO_BASIC, H5P_DEFAULT ) <0) { + MED_ERR_(_ret,MED_ERR_CALL,MED_ERR_API,"H5Oget_info_by_name"); + SSCRUTE(lname); + } diff --git a/Golden_Repo/m/MED/med-4.1.0_hdf5_v11201.patch b/Golden_Repo/m/MED/med-4.1.0_hdf5_v11201.patch new file mode 100644 index 0000000000000000000000000000000000000000..c0900e784a05c4d02adfe32ad62a83010e761009 --- /dev/null +++ b/Golden_Repo/m/MED/med-4.1.0_hdf5_v11201.patch @@ -0,0 +1,126 @@ +diff -ruN med-4.1.0-orig/config/cmake_files/medMacros.cmake med-4.1.0/config/cmake_files/medMacros.cmake +--- med-4.1.0-orig/config/cmake_files/medMacros.cmake 2020-01-30 17:04:19.000000000 +0100 ++++ med-4.1.0/config/cmake_files/medMacros.cmake 2021-12-19 17:43:22.912215417 +0100 +@@ -447,7 +447,7 @@ + ## + ## Requires 1.10.x version + ## +- IF (NOT HDF_VERSION_MAJOR_REF EQUAL 1 OR NOT HDF_VERSION_MINOR_REF EQUAL 10 OR NOT HDF_VERSION_RELEASE_REF GREATER 1) ++ IF (HDF5_VERSION VERSION_LESS 1.10.2) + MESSAGE(FATAL_ERROR "HDF5 version is ${HDF_VERSION_REF}. Only versions >= 1.10.2 are supported.") + ENDIF() + ## +diff -ruN med-4.1.0-orig/src/hdfi/_MEDfileCreate.c med-4.1.0/src/hdfi/_MEDfileCreate.c +--- med-4.1.0-orig/src/hdfi/_MEDfileCreate.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDfileCreate.c 2021-12-19 17:45:54.776831000 +0100 +@@ -159,7 +159,7 @@ + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 12 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -ruN med-4.1.0-orig/src/hdfi/_MEDfileOpen.c med-4.1.0/src/hdfi/_MEDfileOpen.c +--- med-4.1.0-orig/src/hdfi/_MEDfileOpen.c 2020-03-12 16:27:49.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDfileOpen.c 2021-12-19 17:47:06.339960000 +0100 +@@ -72,7 +72,7 @@ + + • The creation order tracking property, H5P_CRT_ORDER_TRACKED, has been set in the group creation property list (see H5Pset_link_creation_order). + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 12 + #error "Don't forget to change the compatibility version of the library !" + #endif + /* L'avantage de bloquer le modèle interne HDF5 +diff -ruN med-4.1.0-orig/src/hdfi/_MEDmemFileOpen.c med-4.1.0/src/hdfi/_MEDmemFileOpen.c +--- med-4.1.0-orig/src/hdfi/_MEDmemFileOpen.c 2020-03-11 11:06:04.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDmemFileOpen.c 2021-12-19 17:47:36.424414488 +0100 +@@ -434,7 +434,7 @@ + goto ERROR; + } + +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 12 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18) ) { +diff -ruN med-4.1.0-orig/src/hdfi/_MEDparFileCreate.c med-4.1.0/src/hdfi/_MEDparFileCreate.c +--- med-4.1.0-orig/src/hdfi/_MEDparFileCreate.c 2020-03-11 10:36:37.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDparFileCreate.c 2021-12-19 17:48:04.197197000 +0100 +@@ -64,7 +64,7 @@ + * En HDF5-1.10.0p1 cela n'a aucun effet ! + * Un test autoconf permet de fixer un intervalle de version HDF à MED. + */ +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 12 + #error "Don't forget to change the compatibility version of the library !" + #endif + +diff -ruN med-4.1.0-orig/src/hdfi/_MEDparFileOpen.c med-4.1.0/src/hdfi/_MEDparFileOpen.c +--- med-4.1.0-orig/src/hdfi/_MEDparFileOpen.c 2020-03-11 10:36:36.000000000 +0100 ++++ med-4.1.0/src/hdfi/_MEDparFileOpen.c 2021-12-19 17:48:23.560680000 +0100 +@@ -55,7 +55,7 @@ + MED_ERR_(_fid,MED_ERR_INIT,MED_ERR_PROPERTY,MED_ERR_PARALLEL_MSG); + goto ERROR; + } +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 12 + #error "Don't forget to change the compatibility version of the library !" + #endif + if ( H5Pset_libver_bounds( _fapl, H5F_LIBVER_18, H5F_LIBVER_18 ) ) { +diff -ruN med-4.1.0-orig/config/med_check_hdf5.m4 med-4.1.0/config/med_check_hdf5.m4 +--- med-4.1.0-orig/config/med_check_hdf5.m4 2020-03-11 10:36:32.000000000 +0100 ++++ med-4.1.0/config/med_check_hdf5.m4 2022-01-20 15:31:06.868449943 +0100 +@@ -133,8 +133,9 @@ + H5_VER_MAJOR=` grep '#define *H5_VERS_MAJOR' $HDF5_ABS_PATH | sed 's/^.*H5_VERS_MAJOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' ` + H5_VER_MINOR=` grep '#define *H5_VERS_MINOR' $HDF5_ABS_PATH | sed 's/^.*H5_VERS_MINOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' ` + H5_VER_RELEASE=`grep '#define *H5_VERS_RELEASE' $HDF5_ABS_PATH | sed 's/^.*H5_VERS_RELEASE[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' ` +- HDF5_VERSION=` expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} ` +- test "0${HDF5_VERSION}" -gt "11100" || test "0${HDF5_VERSION}" -lt "11002" && AC_MSG_ERROR([ ++ # HDF5_VERSION=` expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} ` ++ HDF5_VERSION="11201" ++ test "0${HDF5_VERSION}" -gt "11210" || test "0${HDF5_VERSION}" -lt "11002" && AC_MSG_ERROR([ + This HDF5 version ${H5_VER_MAJOR}.${H5_VER_MINOR}.${H5_VER_RELEASE} must not be used with med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE}. + The HDF5 library version used by med-fichier${MED_NUM_MAJEUR}.y.z MUST NOT be > 1.10 and have to be at least HDF${HDF_VERSION_REF}. + DO NOT TRY TO COMPILE med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE} version with an HDF5 library which would generate an hdf5 file not compliant with HDF5-${HDF_VERSION_MAJOR_REF}.${HDF_VERSION_MINOR_REF}.z library. +diff -ruN med-4.1.0-orig/configure med-4.1.0/configure +--- med-4.1.0-orig/configure 2020-03-11 12:53:46.000000000 +0100 ++++ med-4.1.0/configure 2022-01-20 16:07:15.956942479 +0100 +@@ -7576,8 +7576,12 @@ + H5_VER_MAJOR=` grep '#define *H5_VERS_MAJOR' $HDF5_ABS_PATH | sed 's/^.*H5_VERS_MAJOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' ` + H5_VER_MINOR=` grep '#define *H5_VERS_MINOR' $HDF5_ABS_PATH | sed 's/^.*H5_VERS_MINOR[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' ` + H5_VER_RELEASE=`grep '#define *H5_VERS_RELEASE' $HDF5_ABS_PATH | sed 's/^.*H5_VERS_RELEASE[[ \t]]*\([0-9]*\)[[ \t]]*.*$/\1/g' ` +- HDF5_VERSION=` expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} ` +- test "0${HDF5_VERSION}" -gt "11100" || test "0${HDF5_VERSION}" -lt "11002" && as_fn_error $? " ++ H5_VER_MAJOR="1" ++ H5_VER_MINOR="12" ++ H5_VER_RELEASE="1" ++ # HDF5_VERSION=` expr 10000 \* ${H5_VER_MAJOR} + 100 \* ${H5_VER_MINOR} + ${H5_VER_RELEASE} ` ++ HDF5_VERSION="11201" ++ test "0${HDF5_VERSION}" -gt "11210" || test "0${HDF5_VERSION}" -lt "11002" && as_fn_error $? " + This HDF5 version ${H5_VER_MAJOR}.${H5_VER_MINOR}.${H5_VER_RELEASE} must not be used with med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE}. + The HDF5 library version used by med-fichier${MED_NUM_MAJEUR}.y.z MUST NOT be > 1.10 and have to be at least HDF${HDF_VERSION_REF}. + DO NOT TRY TO COMPILE med-fichier${MED_NUM_MAJEUR}.${MED_NUM_MINEUR}.${MED_NUM_RELEASE} version with an HDF5 library which would generate an hdf5 file not compliant with HDF5-${HDF_VERSION_MAJOR_REF}.${HDF_VERSION_MINOR_REF}.z library. +diff -ruN med-4.1.0-orig/src/ci/MEDfileCompatibility.c med-4.1.0/src/ci/MEDfileCompatibility.c +--- med-4.1.0-orig/src/ci/MEDfileCompatibility.c 2020-03-11 10:36:34.000000000 +0100 ++++ med-4.1.0/src/ci/MEDfileCompatibility.c 2022-01-20 16:10:40.474811000 +0100 +@@ -71,7 +71,7 @@ + _hversionMMR=10000*_hmajeur+100*_hmineur+_hrelease; + /* ISCRUTE(_hversionMMR); */ + /* ISCRUTE(HDF_VERSION_NUM_REF); */ +- if ( (_hversionMMR >= HDF_VERSION_NUM_REF) && (_hmineur == HDF_VERSION_MINOR_REF) ) *hdfok = MED_TRUE; ++ if (_hversionMMR >= HDF_VERSION_NUM_REF) *hdfok = MED_TRUE; + + /* TODO : Vérifier si la version mineure HDF du fichier est supérieure + à la version mineure de la bibliothèque HDF utilisée : +@@ -113,7 +113,7 @@ + #if MED_NUM_MAJEUR != 4 + #error "Don't forget to update the test version here when you change the major version of the library !" + #endif +-#if H5_VERS_MINOR > 10 ++#if H5_VERS_MINOR > 12 + #error "Don't forget to check the compatibility version of the library, depending on the internal hdf model choice !" + #error "Cf. _MEDfileCreate ..." + #endif diff --git a/Golden_Repo/m/METIS/METIS-5.1.0-GCC-11.2.0-RTW64-IDX32.eb b/Golden_Repo/m/METIS/METIS-5.1.0-GCC-11.2.0-RTW64-IDX32.eb new file mode 100644 index 0000000000000000000000000000000000000000..42832ef6002ef3f6cf4c5f7868c5bb5d48134f18 --- /dev/null +++ b/Golden_Repo/m/METIS/METIS-5.1.0-GCC-11.2.0-RTW64-IDX32.eb @@ -0,0 +1,32 @@ +name = 'METIS' +version = '5.1.0' +versionsuffix = '-RTW64-IDX32' + +homepage = 'http://glaros.dtc.umn.edu/gkhome/metis/metis/overview' +description = """METIS is a set of serial programs for partitioning graphs, partitioning finite element meshes, +and producing fill reducing orderings for sparse matrices. The algorithms implemented in METIS are based on the +multilevel recursive-bisection, multilevel k-way, and multi-constraint partitioning schemes. +""" + +toolchain = {'name': 'GCC', 'version': '11.2.0'} +toolchainopts = {'pic': True} + +source_urls = [ + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis', + 'http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/OLD', +] +sources = [SOURCELOWER_TAR_GZ] +patches = ['METIS-5.1.0-use-doubles.patch'] +checksums = [ + '76faebe03f6c963127dbb73c13eab58c9a3faeae48779f049066a21c087c5db2', # metis-5.1.0.tar.gz + '8e79f5970c0fb36394dd6338dd3160eb346dc00e38c37ac90303e1ee5eb4c53f', # METIS-5.1.0-use-doubles.patch +] + +# We use 32bit for indices and 64bit for content +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM) +] + +configopts = ['', 'shared=1'] + +moduleclass = 'math' diff --git a/Golden_Repo/m/METIS/METIS-5.1.0-use-doubles.patch b/Golden_Repo/m/METIS/METIS-5.1.0-use-doubles.patch new file mode 100644 index 0000000000000000000000000000000000000000..c7b875167552a718f808a3ff2949ffe968f44928 --- /dev/null +++ b/Golden_Repo/m/METIS/METIS-5.1.0-use-doubles.patch @@ -0,0 +1,11 @@ +# Use double for floating point (64 bit) in METIS by default +# OpenFOAM 4 uses doubles be default +diff -ur metis-5.1.0.orig/include/metis.h metis-5.1.0/include/metis.h +--- metis-5.1.0.orig/include/metis.h 2013-03-30 17:24:45.000000000 +0100 ++++ metis-5.1.0/include/metis.h 2016-09-05 11:39:33.004384533 +0200 +@@ -40,7 +40,7 @@ + 32 : single precission floating point (float) + 64 : double precission floating point (double) + --------------------------------------------------------------------------*/ +-#define REALTYPEWIDTH 32 ++#define REALTYPEWIDTH 64 diff --git a/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb index c510d60b69f5bf6fe78430aa186a7a6e1cbfb7ae..acbb9fa3632437fb9848d8f0637011c494881209 100644 --- a/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb +++ b/Golden_Repo/m/matplotlib/matplotlib-3.4.3-gcccoremkl-11.2.0-2021.4.0.eb @@ -21,7 +21,7 @@ dependencies = [ ('libpng', '1.6.37'), ('freetype', '2.11.0'), ('Tkinter', '%(pyver)s'), - ('Pillow-SIMD', '8.3.1'), + ('Pillow-SIMD', '9.0.1'), ('Qhull', '2020.2') ] diff --git a/Golden_Repo/m/mpi4py/mpi4py-3.1.3-npsmpic-2021b.eb b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-npsmpic-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..c4703a6e00cb1727800a459df653803e31f2dcdb --- /dev/null +++ b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-npsmpic-2021b.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'mpi4py' +version = '3.1.3' + +homepage = 'https://bitbucket.org/mpi4py/mpi4py' +description = """MPI for Python (mpi4py) provides bindings of the Message Passing Interface (MPI) standard for + the Python programming language, allowing any Python program to exploit multiple processors. +""" + +toolchain = {'name': 'npsmpic', 'version': '2021b'} + +source_urls = ['https://github.com/%(name)s/%(name)s/archive/'] +sources = ['%(version)s.tar.gz'] +checksums = ['a25f7e521ac5706a4e7284d986df006c26a2d13cc7ccee646cfc07c05bd65f05'] + +dependencies = [('Python', '3.9.6')] + +prebuildopts = 'CFLAGS=-noswitcherror' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/mpi4py'], +} + +moduleclass = 'lib' diff --git a/Golden_Repo/m/mpi4py/mpi4py-3.1.3-nvompic-2021b.eb b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-nvompic-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..2dd6a85c1c733bd4f6a9fcd79e23ea1904c67cf6 --- /dev/null +++ b/Golden_Repo/m/mpi4py/mpi4py-3.1.3-nvompic-2021b.eb @@ -0,0 +1,26 @@ +easyblock = 'PythonPackage' + +name = 'mpi4py' +version = '3.1.3' + +homepage = 'https://bitbucket.org/mpi4py/mpi4py' +description = """MPI for Python (mpi4py) provides bindings of the Message Passing Interface (MPI) standard for + the Python programming language, allowing any Python program to exploit multiple processors. +""" + +toolchain = {'name': 'nvompic', 'version': '2021b'} + +source_urls = ['https://github.com/%(name)s/%(name)s/archive/'] +sources = ['%(version)s.tar.gz'] +checksums = ['a25f7e521ac5706a4e7284d986df006c26a2d13cc7ccee646cfc07c05bd65f05'] + +dependencies = [('Python', '3.9.6')] + +prebuildopts = 'CFLAGS=-noswitcherror' + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/mpi4py'], +} + +moduleclass = 'lib' diff --git a/Golden_Repo/m/mpiP/mpiP-3.5-gpsmpi-2021b.eb b/Golden_Repo/m/mpiP/mpiP-3.5-gpsmpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..e4557e6d3e9385e2a53c98779878cbc3df06a694 --- /dev/null +++ b/Golden_Repo/m/mpiP/mpiP-3.5-gpsmpi-2021b.eb @@ -0,0 +1,44 @@ +easyblock = 'ConfigureMake' +version = '3.5' + +homepage = 'https://github.com/LLNL/mpiP' +name = "mpiP" + +description = """mpiP is a lightweight profiling library for MPI applications. Because it only collects statistical +information about MPI functions, mpiP generates considerably less overhead and much less data than tracing tools. All +the information captured by mpiP is task-local. It only uses communication during report generation, typically at the +end of the experiment, to merge results from all of the tasks into one output file. +""" + +usage = """ + Example usage (take special note of the order, the mpiP library has to appear AFTER your code): + + mpifort -g -o mpitest mpitest.f90 -lmpiP -lm -lbfd -liberty -lunwind -lz +""" + + +toolchain = {'name': 'gpsmpi', 'version': '2021b'} +toolchainopts = {'usempi': True} + +source_urls = ['https://github.com/LLNL/mpiP/releases/download/%(version)s/'] +sources = [SOURCELOWER_TGZ] +checksums = ['e366843d53fa016fb03903e51c8aac901aa5155edabe64698a8d6fa618a03bbd'] + +builddependencies = [ + ('Python', '3.9.6'), +] + +dependencies = [ + ('libunwind', '1.5.0'), +] + +configopts = "--with-cc=$CC --with-cxx=$CXX --with-f77=$F77 CFLAGS='-DPACKAGE=mpiP -DPACKAGE_VERSION=3.5' " + +buildopts = "PACKAGE='mpiP' PACKAGE_VERSION='3.5'" + +sanity_check_paths = { + 'files': ['lib/libmpiP.so'], + 'dirs': ['lib', 'share'] +} + +moduleclass = 'perf' diff --git a/Golden_Repo/n/NCCL/NCCL-2.12.7-1-GCCcore-11.2.0-CUDA-11.5.eb b/Golden_Repo/n/NCCL/NCCL-2.12.7-1-GCCcore-11.2.0-CUDA-11.5.eb new file mode 100644 index 0000000000000000000000000000000000000000..07d51a9e9d67dd5fe9f5b929ebaa59771b7ba660 --- /dev/null +++ b/Golden_Repo/n/NCCL/NCCL-2.12.7-1-GCCcore-11.2.0-CUDA-11.5.eb @@ -0,0 +1,30 @@ +name = 'NCCL' +version = '2.12.7-1' +versionsuffix = '-CUDA-%(cudaver)s' + +homepage = 'https://developer.nvidia.com/nccl' +description = """The NVIDIA Collective Communications Library (NCCL) implements multi-GPU and multi-node collective +communication primitives that are performance optimized for NVIDIA GPUs.""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +github_account = 'NVIDIA' +sources = [{ + 'filename': '%(name)s-%(version)s.tar.gz', + 'git_config': { + 'url': 'https://github.com/NVIDIA/', + 'repo_name': 'nccl', + 'tag': 'v%(version)s', + 'recursive': True, + }, +}] +checksums = ['277bc85e1b4fa5550aa3371065fb14be62393e6c3df41f0382008b05bb93a7e4'] + +builddependencies = [('binutils', '2.37')] + +dependencies = [ + ('CUDA', '11.5', '', True), + ('UCX', '1.11.2', '', SYSTEM), +] + +moduleclass = 'lib' diff --git a/Golden_Repo/n/NVHPC/NVHPC-22.3.eb b/Golden_Repo/n/NVHPC/NVHPC-22.3.eb new file mode 100644 index 0000000000000000000000000000000000000000..8a75360c88519d1cb4ca013bd67339651267525f --- /dev/null +++ b/Golden_Repo/n/NVHPC/NVHPC-22.3.eb @@ -0,0 +1,73 @@ +name = 'NVHPC' +version = '22.3' +local_gccver = '11.2.0' + +homepage = 'https://developer.nvidia.com/hpc-sdk/' +description = """C, C++ and Fortran compilers included with the NVIDIA HPC SDK (previously: PGI)""" + +toolchain = SYSTEM + +# By downloading, you accept the HPC SDK Software License Agreement (https://docs.nvidia.com/hpc-sdk/eula/index.html) +source_urls = ['https://developer.download.nvidia.com/hpc-sdk/%(version)s/'] +local_tarball_tmpl = 'nvhpc_2022_%%(version_major)s%%(version_minor)s_Linux_%s_cuda_multi.tar.gz' +sources = [local_tarball_tmpl % '%(arch)s'] +checksums = [ + { + local_tarball_tmpl % 'aarch64': + 'e0ea1cbb726556f6879f4b5dfe17238f8e7680c772368577945a85c0e08328f0', + local_tarball_tmpl % 'ppc64le': + '5e80db6010adc85fe799dac961ae69e43fdf18d35243666c96a70ecdb80bd280', + local_tarball_tmpl % 'x86_64': + 'bc60a6faf2237bf20550718f71079a714563fa85df62c341cb833f70eb2fe7bb', + } +] + +dependencies = [ + ('GCCcore', local_gccver), + ('binutils', '2.37', '', ('GCCcore', local_gccver)), + ('CUDA', '11.5', '', SYSTEM), + # This is necessary to avoid cases where just libnuma.so.1 is present in the system and -lnuma fails + ('numactl', '2.0.14', '', SYSTEM) +] + +module_add_cuda = False + +# specify default CUDA version that should be used by NVHPC +# should match one of the CUDA versions that are included with this NVHPC version +# (see install_components/Linux_x86_64/22.3/cuda/) +# for NVHPC 22.3, those are: 11.6, 11.0, 10.2; +# this version can be tweaked from the EasyBuild command line with +# --try-amend=default_cuda_version="11.0" (for example) +default_cuda_version = '%(cudaver)s' + +# NVHPC EasyBlock supports some features, which can be set via CLI or this easyconfig. +# The following list gives examples for the easyconfig +# +# NVHPC needs CUDA to work. Two options are available: 1) Use NVHPC-bundled CUDA, 2) use system CUDA +# 1) Bundled CUDA +# If no easybuild dependency to CUDA is present, the bundled CUDA is taken. A version needs to be specified with +# default_cuda_version = "11.0" +# in this easyconfig file; alternatively, it can be specified through the command line during installation with +# --try-amend=default_cuda_version="10.2" +# 2) CUDA provided via EasyBuild +# Use CUDA as a dependency, for example +# dependencies = [('CUDA', '11.5.0')] +# The parameter default_cuda_version still can be set as above. +# If not set, it will be deduced from the CUDA module (via $EBVERSIONCUDA) +# +# Define a NVHPC-default Compute Capability +# cuda_compute_capabilities = "8.0" +# Can also be specified on the EasyBuild command line via --cuda-compute-capabilities=8.0 +# Only single values supported, not lists of values! +# +# Options to add/remove things to/from environment module (defaults shown) +# module_byo_compilers = False # Remove compilers from PATH (Bring-your-own compilers) +# module_nvhpc_own_mpi = False # Add NVHPC's own pre-compiled OpenMPI +# module_add_math_libs = False # Add NVHPC's math libraries (which should be there from CUDA anyway) +# module_add_profilers = False # Add NVHPC's NVIDIA Profilers +# module_add_nccl = False # Add NVHPC's NCCL library +# module_add_nvshmem = False # Add NVHPC's NVSHMEM library +# module_add_cuda = False # Add NVHPC's bundled CUDA + +# this bundle serves as a compiler-only toolchain, so it should be marked as compiler (important for HMNS) +moduleclass = 'compiler' diff --git a/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-2021b.eb b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..561ec95156c4c9eaaca478d9a3be099fc9de6eda --- /dev/null +++ b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-2021b.eb @@ -0,0 +1,49 @@ +name = 'NWChem' +version = '7.0.2' +local_verdate = '2020-10-12' +local_revision = 'b9985dfa' + + +homepage = 'https://nwchemgit.github.io' +description = """NWChem aims to provide its users with computational chemistry tools that are scalable both in + their ability to treat large scientific computational chemistry problems efficiently, and in their use of available + parallel computing resources from high-performance parallel supercomputers to conventional workstation clusters. + NWChem software can handle: biomolecules, nanostructures, and solid-state; from quantum to classical, and all + combinations; Gaussian basis functions or plane-waves; scaling from one to thousands of processors; properties + and relativity.""" + +toolchain = {'name': 'intel', 'version': '2021b'} +toolchainopts = {'i8': True} +source_urls = ['https://github.com/nwchemgit/nwchem/releases/download/v%(version)s-release/'] +sources = ['nwchem-%%(version)s-release.revision-%s-src.%s.tar.bz2' % (local_revision, local_verdate)] +patches = [ + 'NWChem_fix-date.patch', +] +checksums = [ + 'd9d19d87e70abf43d61b2d34e60c293371af60d14df4a6333bf40ea63f6dc8ce', + '215ec54f6132f2c9306bd636456722a36f0f1d98a67a0c8cbd10c5d1eed68feb' +] + +dependencies = [('Python', '3.9.6')] + +# This easyconfig is using the default for armci_network (OPENIB) and +# thus needs infiniband libraries. +osdependencies = [ + ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'), +] + +preconfigopts = 'export EXTRA_LIBS=-lutil && ' + +# (tm) +# tests in the form defined in nwchem.py are of little use and take too long +# preferentially, the tests should be done separately, running 12-16 testcases +# including verification simultaneously using 8 cores/test; in some expensive test cases +# 16 cores/test are more adequate. +# the acceptable test failure quota of 50% as indicated in nwchem.py would imply a useless code. +# jurecadc/intel-para-2021 delivers 6 failures out of 244 tests (subset of the qm test suite). + +tests = False + +modules = 'all python' + +moduleclass = 'chem' diff --git a/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-para-2021b.eb b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-para-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..ebebd8b0a46a3e355967ffb477864d74c3364e13 --- /dev/null +++ b/Golden_Repo/n/NWChem/NWChem-7.0.2-intel-para-2021b.eb @@ -0,0 +1,49 @@ +name = 'NWChem' +version = '7.0.2' +local_verdate = '2020-10-12' +local_revision = 'b9985dfa' + + +homepage = 'https://nwchemgit.github.io' +description = """NWChem aims to provide its users with computational chemistry tools that are scalable both in + their ability to treat large scientific computational chemistry problems efficiently, and in their use of available + parallel computing resources from high-performance parallel supercomputers to conventional workstation clusters. + NWChem software can handle: biomolecules, nanostructures, and solid-state; from quantum to classical, and all + combinations; Gaussian basis functions or plane-waves; scaling from one to thousands of processors; properties + and relativity.""" + +toolchain = {'name': 'intel-para', 'version': '2021b'} +toolchainopts = {'i8': True} +source_urls = ['https://github.com/nwchemgit/nwchem/releases/download/v%(version)s-release/'] +sources = ['nwchem-%%(version)s-release.revision-%s-src.%s.tar.bz2' % (local_revision, local_verdate)] +patches = [ + 'NWChem_fix-date.patch', +] +checksums = [ + 'd9d19d87e70abf43d61b2d34e60c293371af60d14df4a6333bf40ea63f6dc8ce', + '215ec54f6132f2c9306bd636456722a36f0f1d98a67a0c8cbd10c5d1eed68feb' +] + +dependencies = [('Python', '3.9.6')] + +# This easyconfig is using the default for armci_network (OPENIB) and +# thus needs infiniband libraries. +osdependencies = [ + ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'), +] + +preconfigopts = 'export EXTRA_LIBS=-lutil && ' + +# (tm) +# tests in the form defined in nwchem.py are of little use and take too long +# preferentially, the tests should be done separately, running 12-16 testcases +# including verification simultaneously using 8 cores/test; in some expensive test cases +# 16 cores/test are more adequate. +# the acceptable test failure quota of 50% as indicated in nwchem.py would imply a useless code. +# jurecadc/intel-para-2021 delivers 6 failures out of 244 tests (subset of the qm test suite). + +tests = False + +modules = 'all python' + +moduleclass = 'chem' diff --git a/Golden_Repo/n/NWChem/NWChem_fix-date.patch b/Golden_Repo/n/NWChem/NWChem_fix-date.patch new file mode 100644 index 0000000000000000000000000000000000000000..5d846acc3c8b52d54d5aabbd1a8a794163b11646 --- /dev/null +++ b/Golden_Repo/n/NWChem/NWChem_fix-date.patch @@ -0,0 +1,11 @@ +--- nwchem-6.1.1-src/src/GNUmakefile.orig 2012-12-10 17:23:43.236474825 +0100 ++++ nwchem-6.1.1-src/src/GNUmakefile 2012-12-10 17:23:55.916623423 +0100 +@@ -7,7 +7,7 @@ + + SUBDIRS = $(NWSUBDIRS) + +- LIB_DEFINES = -DCOMPILATION_DATE="'`date +%a_%b_%d_%H:%M:%S_%Y`'" \ ++ LIB_DEFINES = -DCOMPILATION_DATE="'`date`'" \ + -DCOMPILATION_DIR="'$(TOPDIR)'" \ + -DNWCHEM_BRANCH="'$(CODE_BRANCH)'" + ifeq ($(TARGET),FUJITSU_VPP) diff --git a/Golden_Repo/n/Nsight-Compute/Nsight-Compute-2022.1.1-GCCcore-11.2.0.eb b/Golden_Repo/n/Nsight-Compute/Nsight-Compute-2022.1.1-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..c0c2d9edc4d9590c6054698cdded3f06fcf81a6c --- /dev/null +++ b/Golden_Repo/n/Nsight-Compute/Nsight-Compute-2022.1.1-GCCcore-11.2.0.eb @@ -0,0 +1,47 @@ +# jg (CSCS) +# AH (JSC) +easyblock = 'Binary' + +name = 'Nsight-Compute' +version = '2022.1.1' +homepage = 'https://developer.nvidia.com/nsight-compute' +description = 'NVIDIA Nsight Compute is an interactive kernel profiler for CUDA applications' + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +# Download source binary package manually, requires Nvidia Developer Account +# source_urls = 'https://developer.nvidia.com/nsight-compute' +sources = [{ + 'filename': 'nsight-compute-linux-%(version)s.2-30914944.run', + 'extract_cmd': '/bin/sh %s' +}] +checksums = ['bae875391de5fb9ff7238b3c06fea5f77eff4afae9720e7021c90908d1f84081'] + +# Not really necessary, but useful if we use this as a template for another package +builddependencies = [ + ('binutils', '2.37'), +] + +dependencies = [ + ('X11', '20210802') +] + +extract_sources = True +unpack_options = '--nochown --noexec --nox11 --target %(builddir)s' + +install_cmd = 'cp -r %(builddir)s/pkg/* %(installdir)s/' + +# Workaround due to wrong permissions once the files are extracted from the .run file +postinstallcmds = [ + 'find %(installdir)s -type f -and -executable -and ! -name "lib*" -exec chmod go+x {} \;'] + +sanity_check_paths = { + 'files': ['ncu-ui', 'ncu'], + 'dirs': ['docs', 'extras', 'host', 'sections', 'target'] +} + +modluafooter = """ +add_property("arch","gpu") +""" + +moduleclass = 'tools' diff --git a/Golden_Repo/n/Nsight-Systems/Nsight-Systems-2022.2.1-GCCcore-11.2.0.eb b/Golden_Repo/n/Nsight-Systems/Nsight-Systems-2022.2.1-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..eea01c49a448cfcd4adb3c7f43e7df5e7e22d959 --- /dev/null +++ b/Golden_Repo/n/Nsight-Systems/Nsight-Systems-2022.2.1-GCCcore-11.2.0.eb @@ -0,0 +1,44 @@ +# jg (CSCS) +# AH (JSC) +easyblock = 'Binary' + +name = 'Nsight-Systems' +version = '2022.2.1' +homepage = 'https://developer.nvidia.com/nsight-systems' +description = 'NVIDIA Nsight Systems is a system-wide performance analysis tool' + +# GCCcore toolchain is not strictly necessary, but used to bring it to same level as Nsight Compute +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +# Download source binary package manually, requires Nvidia Developer Account +# source_urls = 'https://developer.nvidia.com/nsight-systems' +sources = [{ + 'filename': 'NsightSystems-linux-public-%(version)s.31-5fe97ab.run', + 'extract_cmd': '/bin/sh %s' +}] +checksums = ['01753300e6a418a4cb6104f11eb13961263ccaecc768f74801d261dab90e569a'] + +dependencies = [ + ('X11', '20210802') +] + + +extract_sources = True +unpack_options = '--accept --nochown --noexec --nox11 --target %(builddir)s' + +install_cmd = 'cp -r %(builddir)s/pkg/* %(installdir)s/' + +sanity_check_paths = { + 'files': ['bin/nsys'], + 'dirs': ['target-linux-x64', 'host-linux-x64'] +} + +modextravars = { + 'NSIGHT_DOC': '%(installdir)s/documentation/nsys-exporter' +} + +modluafooter = """ +add_property("arch","gpu") +""" + +moduleclass = 'tools' diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb index f93c3c24f440f7b8057a9a4a165d3ddb9095ffae..5191ee23a5b2cc3829abb7b4ca3cbd886db55e07 100644 --- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb +++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gompi-2021b.eb @@ -14,6 +14,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('netCDF', '4.8.1'), ('cURL', '7.78.0'), + ('mpi4py', '3.1.3') ] use_pip = True diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb index b30561e0d7337f997f34f20af4f8066b4dfce285..000cb4d87de9a6e44138230993489e4f7a7b2a63 100644 --- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb +++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-gpsmpi-2021b.eb @@ -14,6 +14,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('netCDF', '4.8.1'), ('cURL', '7.78.0'), + ('mpi4py', '3.1.3') ] use_pip = True diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb index 5cf9df03996a8cd34dcb5589ccee2057c27883e4..cd70ee753ae7091c91bacfe738563bf9d8054ffd 100644 --- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb +++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iimpi-2021b.eb @@ -14,6 +14,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('netCDF', '4.8.1'), ('cURL', '7.78.0'), + ('mpi4py', '3.1.3') ] use_pip = True diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb index 4176aed528ef850233f9be38c92ce1211a8f00fa..e92256f45f36d7ccf43439146ae0312dfc77868b 100644 --- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb +++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-iompi-2021b.eb @@ -14,6 +14,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('netCDF', '4.8.1'), ('cURL', '7.78.0'), + ('mpi4py', '3.1.3') ] use_pip = True diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb index bef589936575d572e18c20035a954e1c992076cf..c7daa5a2ee668480b504f75140c3ca4bb4ff3e91 100644 --- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb +++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-ipsmpi-2021b.eb @@ -14,6 +14,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('netCDF', '4.8.1'), ('cURL', '7.78.0'), + ('mpi4py', '3.1.3') ] use_pip = True diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb index 0cfbf26e2d6b7e7b319de7af4c4f71a29a9e6fed..50d951f86952f1e0dbc29d7a15ee2e3b6cfb6f0a 100644 --- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb +++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-npsmpic-2021b.eb @@ -14,6 +14,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('netCDF', '4.8.1'), ('cURL', '7.78.0'), + ('mpi4py', '3.1.3') ] use_pip = True diff --git a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb index bdcced40e90d7392d942d989ad66ce5d1d241aec..72d07c9d5f6f78c083b8d570635945a7db27c2e0 100644 --- a/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb +++ b/Golden_Repo/n/netcdf4-python/netcdf4-python-1.5.7-nvompic-2021b.eb @@ -14,6 +14,7 @@ dependencies = [ ('SciPy-bundle', '2021.10', '', ('gcccoremkl', '11.2.0-2021.4.0')), ('netCDF', '4.8.1'), ('cURL', '7.78.0'), + ('mpi4py', '3.1.3') ] use_pip = True diff --git a/Golden_Repo/n/numba/llvmlite-0.38.0-llvm13.patch b/Golden_Repo/n/numba/llvmlite-0.38.0-llvm13.patch new file mode 100644 index 0000000000000000000000000000000000000000..66b2b8ea337c000a0867837959fee6b221ad76ac --- /dev/null +++ b/Golden_Repo/n/numba/llvmlite-0.38.0-llvm13.patch @@ -0,0 +1,92 @@ +From 1d928ebcd59b23b5050234a2bf71f9be7f5f6bd1 Mon Sep 17 00:00:00 2001 +From: Richard Barnes <rbarnes@umn.edu> +Date: Wed, 1 Dec 2021 10:29:08 -0700 +Subject: [PATCH] Enable LLVM-12 and LLVM-13 + +--- + ffi/build.py | 5 ++--- + ffi/targets.cpp | 2 ++ + llvmlite/tests/test_binding.py | 19 ++++++++++++++++--- + 3 files changed, 20 insertions(+), 6 deletions(-) + +diff --git a/ffi/build.py b/ffi/build.py +index 6408bf5f..95e33c64 100755 +--- a/ffi/build.py ++++ b/ffi/build.py +@@ -162,9 +162,8 @@ def main_posix(kind, library_ext): + print(msg) + print(warning + '\n') + else: +- +- if not out.startswith('11'): +- msg = ("Building llvmlite requires LLVM 11.x.x, got " ++ if not (out.startswith('11') or out.startswith('12') or out.startswith('13')): ++ msg = ("Building llvmlite requires LLVM 11-13.x.x, got " + "{!r}. Be sure to set LLVM_CONFIG to the right executable " + "path.\nRead the documentation at " + "http://llvmlite.pydata.org/ for more information about " +diff --git a/ffi/targets.cpp b/ffi/targets.cpp +index 1ce472c2..4ba33e79 100644 +--- a/ffi/targets.cpp ++++ b/ffi/targets.cpp +@@ -233,7 +233,9 @@ LLVMPY_CreateTargetMachine(LLVMTargetRef T, + rm = Reloc::DynamicNoPIC; + + TargetOptions opt; ++#if LLVM_VERSION_MAJOR < 12 + opt.PrintMachineCode = PrintMC; ++#endif + opt.MCOptions.ABIName = ABIName; + + bool jit = JIT; +diff --git a/llvmlite/tests/test_binding.py b/llvmlite/tests/test_binding.py +index 80495787..fee2372a 100644 +--- a/llvmlite/tests/test_binding.py ++++ b/llvmlite/tests/test_binding.py +@@ -18,6 +18,16 @@ + from llvmlite.tests import TestCase + + ++def clean_string_whitespace(x: str) -> str: ++ # Remove trailing whitespace from the end of each line ++ x = re.sub(r"\s+$", "", x, flags=re.MULTILINE) ++ # Remove intermediate blank lines ++ x = re.sub(r"\n\s*\n", r"\n", x, flags=re.MULTILINE) ++ # Remove extraneous whitespace from the beginning and end of the string ++ x = x.strip() ++ return x ++ ++ + # arvm7l needs extra ABI symbols to link successfully + if platform.machine() == 'armv7l': + llvm.load_library_permanently('libgcc_s.so.1') +@@ -158,7 +168,7 @@ def no_de_locale(): + target triple = "unknown-unknown-unknown" + target datalayout = "" + +-define i32 @"foo"() ++define i32 @"foo"() + { + "<>!*''#": + ret i32 12345 +@@ -424,7 +434,10 @@ def test_nonalphanum_block_name(self): + bd = ir.IRBuilder(fn.append_basic_block(name="<>!*''#")) + bd.ret(ir.Constant(ir.IntType(32), 12345)) + asm = str(mod) +- self.assertEqual(asm, asm_nonalphanum_blocklabel) ++ self.assertEqual( ++ clean_string_whitespace(asm), ++ clean_string_whitespace(asm_nonalphanum_blocklabel) ++ ) + + def test_global_context(self): + gcontext1 = llvm.context.get_global_context() +@@ -509,7 +522,7 @@ def test_set_option(self): + def test_version(self): + major, minor, patch = llvm.llvm_version_info + # one of these can be valid +- valid = [(11,)] ++ valid = [(11,), (12,), (13,)] + self.assertIn((major,), valid) + self.assertIn(patch, range(10)) + \ No newline at end of file diff --git a/Golden_Repo/n/numba/numba-0.55.1-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/n/numba/numba-0.55.1-gcccoremkl-11.2.0-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..fefe43a773917a93cf0a5a1abaaec74c8a90da79 --- /dev/null +++ b/Golden_Repo/n/numba/numba-0.55.1-gcccoremkl-11.2.0-2021.4.0.eb @@ -0,0 +1,75 @@ +easyblock = 'PythonBundle' + +name = 'numba' +version = '0.55.1' + +homepage = 'https://numba.pydata.org/' +description = """Numba is an Open Source NumPy-aware optimizing compiler for +Python sponsored by Continuum Analytics, Inc. It uses the remarkable LLVM +compiler infrastructure to compile Python syntax to machine code.""" + +usage = ''' +In case you intend to use CUDA functionality of Numba please ensure that CUDA_HOME is set. +For more details please check: http://numba.pydata.org/numba-doc/latest/cuda/overview.html +''' + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} +toolchainopts = {'pic': True} + +dependencies = [ + ('Python', '3.9.6'), + ('SciPy-bundle', '2021.10'), + ('LLVM', '13.0.0'), + ('CUDA', '11.5', '', SYSTEM), +] + +use_pip = True +sanity_pip_check = True + +local_llvmlite_preinstallopts = "export LLVM_CONFIG=${EBROOTLLVM}/bin/llvm-config && " +local_llvmlite_preinstallopts += "export LLVMLITE_SKIP_LLVM_VERSION_CHECK=1 && export NUMBA_DISABLE_INTEL_SVML=1 && " + +exts_default_options = {'source_urls': [PYPI_SOURCE]} + +exts_list = [ + ('icc-rt', '2020.0.133', { + 'modulename': False, + 'source_tmpl': 'icc_rt-%(version)s-py2.py3-none-manylinux1_x86_64.whl', + 'unpack_sources': False, + 'checksums': ['17a173e65cee0c516358172b9cc96fe297dd54f4d6b23d57f79c62d9e105e3cf'], + }), + ('intel-openmp', '2020.0.133', { + 'modulename': False, + 'source_tmpl': 'intel_openmp-%(version)s-py2.py3-none-manylinux1_x86_64.whl', + 'unpack_sources': False, + 'checksums': ['cb9a12b0a1cb3f9c44a75959f687e548dc642a9470be3c63f73bccf291b8dcc8'], + }), + ('llvmlite', '0.38.0', { + 'patches': ['llvmlite-0.38.0-llvm13.patch'], + 'preinstallopts': """export LLVM_CONFIG=${EBROOTLLVM}/bin/llvm-config && \\ + export LLVMLITE_SKIP_LLVM_VERSION_CHECK=1 && export NUMBA_DISABLE_INTEL_SVML=1 && """, + 'source_urls': ['https://github.com/numba/llvmlite/archive/refs/tags/'], + 'sources': ['v%(version)s.tar.gz'], + 'checksums': [ + '90d2d3fa26a410bd976b83f7534dc0dcf484135370ef5bf8d9d7f0103dbc054b', # v0.38.0.tar.gz + '9100416ee18ea480cfde81307e375eec45c9adf79a81a846489000786b77a838', # llvmlite-0.38.0-llvm13.patch + ], + }), + (name, version, { + 'source_urls': ['https://pypi.python.org/packages/source/n/numba/'], + 'checksums': ['03e9069a2666d1c84f93b00dbd716fb8fedde8bb2c6efafa2f04842a46442ea3'], + }), +] + +fix_python_shebang_for = ['bin/*'] + +sanity_check_paths = { + 'files': ['bin/numba', 'bin/pycc'], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +sanity_check_commands = ["numba --help"] + +modextrapaths = {'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages']} + +moduleclass = 'lang' diff --git a/Golden_Repo/o/OpenCV/OpenCV-4.5.5-gcccoremkl-11.2.0-2021.4.0-contrib.eb b/Golden_Repo/o/OpenCV/OpenCV-4.5.5-gcccoremkl-11.2.0-2021.4.0-contrib.eb new file mode 100644 index 0000000000000000000000000000000000000000..9d783c79c2073837961d26805a4c9d3ea1dbd68e --- /dev/null +++ b/Golden_Repo/o/OpenCV/OpenCV-4.5.5-gcccoremkl-11.2.0-2021.4.0-contrib.eb @@ -0,0 +1,139 @@ +easyblock = 'CMakeMake' + +name = 'OpenCV' +version = '4.5.5' +versionsuffix = '-contrib' + +# the hash is version dependent! see 3rdparty/ippicv/ippicv.cmake +local_ippicv_hash = 'a56b6ac6f030c312b2dce17430eef13aed9af274' + +homepage = 'https://opencv.org/' +description = """OpenCV (Open Source Computer Vision Library) is an open source computer vision + and machine learning software library. OpenCV was built to provide + a common infrastructure for computer vision applications and to accelerate + the use of machine perception in the commercial products. + Includes extra modules for OpenCV from the contrib repository.""" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} +toolchainopts = {'pic': True, 'optarch': True} + +sources = [ + {'source_urls': ['https://github.com/opencv/opencv/archive/'], + 'download_filename': '%(version)s.zip', 'filename': SOURCELOWER_ZIP}, + {'source_urls': ['https://github.com/opencv/opencv_contrib/archive/'], + 'download_filename': '%(version)s.zip', 'filename': '%(namelower)s_contrib-%(version)s.zip'}, + {'source_urls': ['https://raw.githubusercontent.com/opencv/opencv_3rdparty/%s/ippicv' % local_ippicv_hash], + 'filename': 'ippicv_2020_lnx_intel64_20191018_general.tgz', 'extract_cmd': "cp %s %(builddir)s"}, +] +checksums = [ + 'fb16b734db3a28e5119d513bd7c61ef417edf3756165dc6259519bb9d23d04e2', # opencv-4.5.5.zip + 'f53a0e531b2e284d2d1af013f5d96a86dfc1165d71eb47ddc9e7b834cc803091', # opencv_contrib-4.5.5.zip + '08627fa5660d52d59309a572dd7db5b9c8aea234cfa5aee0942a1dd903554246', # ippicv_2020_lnx_intel64_20191018_general.tgz +] + +builddependencies = [ + ('binutils', '2.37'), + ('CMake', '3.21.1', '', SYSTEM), +] + +dependencies = [ + ('Python', '3.9.6'), + ('SciPy-bundle', '2021.10'), # for numpy + ('zlib', '1.2.11'), + ('FFmpeg', '4.4.1'), + ('GStreamer', '1.18.6'), + ('freetype', '2.11.0'), + ('HarfBuzz', '2.8.2'), + ('libjpeg-turbo', '2.1.1'), + ('libpng', '1.6.37'), + ('LibTIFF', '4.3.0'), + ('libwebp', '1.2.0'), + ('OpenEXR', '3.1.1'), + ('JasPer', '2.0.33'), + ('Java', '15', '', True), + ('ant', '1.10.12', '-Java-%(javaver)s', True), + ('GLib', '2.69.1'), + ('GTK+', '3.24.23',), + ('HDF5', '1.12.1', '-serial'), # needed by hdf from contrib + ('protobuf', '3.17.3'), + ('Eigen', '3.3.9'), + ('CUDA', '11.5', '', SYSTEM), + ('cuDNN', '8.3.1.22', '-CUDA-11.5', SYSTEM), + ('nvidia-Video_Codec_SDK', '11.1.5', '', SYSTEM), + ('OpenGL', '2021b'), +] + +separate_build_dir = True + +configopts = "-D CMAKE_BUILD_TYPE=RELEASE " +configopts += '-D CMAKE_CXX_FLAGS="-Wdeprecated-declarations" ' + +configopts += "-D OPENCV_GENERATE_PKGCONFIG=ON " +configopts += "-D ENABLE_PRECOMPILED_HEADERS=OFF " + +configopts += "-D BUILD_EXAMPLES=ON " +configopts += "-D INSTALL_PYTHON_EXAMPLES=ON " + +# configopts += "-D ENABLE_FAST_MATH=ON " +# configopts += "-D CUDA_FAST_MATH=ON " + +configopts += "-D WITH_CUDA=ON " +configopts += "-D WITH_CUDNN=ON " +configopts += "-D WITH_CUBLAS=ON " +configopts += "-D WITH_CUFFT=ON " +configopts += "-D CUDA_ARCH_BIN='%(cuda_cc_space_sep)s' " +# configopts += "-D CUDA_ARCH_PTX='' " +configopts += "-D BUILD_CUDA_STUBS=ON " +configopts += "-D OPENCV_DNN_CUDA=ON " +configopts += "-D BUILD_opencv_cudacodec=ON " + +configopts += "-D WITH_NVCUVID=ON " + +configopts += "-D WITH_GSTREAMER=ON " + +configopts += '-DOPENCV_EXTRA_MODULES_PATH=%(builddir)s/%(namelower)s_contrib-%(version)s/modules ' + +configopts += "-DProtobuf_INCLUDE_DIR=$EBROOTPROTOBUF/include " +configopts += "-DProtobuf_LIBRARY=$EBROOTPROTOBUF/lib64/libprotobuf.so " +configopts += "-DProtobuf_LITE_LIBRARY_RELEASE=$EBROOTPROTOBUF/lib64/libprotobuf-lite.so " +configopts += "-DProtobuf_PROTOC_LIBRARY_RELEASE=$EBROOTPROTOBUF/lib64/bprotoc.so " +configopts += "-DBUILD_PROTOBUF=OFF -DPROTOBUF_UPDATE_FILES=ON " + +# XXXX in configurations is a bug fix in OpenCV because ocv_check_modules is not able to recognize freetype and harfbuzz +# ref: https://github.com/opencv/opencv/blob/6e8daaec0f46aaba9ea22e2afce47307b1dbff9f/cmake/OpenCVUtils.cmake#L861 + +configopts += '-DFREETYPE_FOUND=ON ' +configopts += '-DFREETYPE_INCLUDE_DIRS=$EBROOTFREETYPE/include/freetype2/ ' +configopts += '-DFREETYPE_LIBRARIES=$EBROOTFREETYPE/lib64/libfreetype.so ' +configopts += '-DFREETYPE_LINK_LIBRARIES=$EBROOTFREETYPE/lib64/libfreetype.so ' +configopts += '-DFREETYPE_LINK_LIBRARIES_XXXXX=ON ' + +configopts += '-DHARFBUZZ_FOUND=ON ' +configopts += '-DHARFBUZZ_INCLUDE_DIRS=$EBROOTHARFBUZZ/include/harfbuzz ' +configopts += '-DHARFBUZZ_LIBRARIES=$EBROOTHARFBUZZ/lib64/libharfbuzz.so ' +configopts += '-DHARFBUZZ_LINK_LIBRARIES=$EBROOTHARFBUZZ/lib64/libharfbuzz.so ' +configopts += '-DHARFBUZZ_LINK_LIBRARIES_XXXXX=ON ' + +configopts += "-D PYTHON_DEFAULT_EXECUTABLE=$EBROOTPYTHON/bin/python3 " +configopts += "-D PYTHON2_EXECUTABLE='' " # ensure python2 is NOT used +configopts += '-DBUILD_opencv_python2=OFF ' + +configopts += "-D WITH_OPENMP=ON " + +modextrapaths = {'PYTHONPATH': 'lib/python%(pyshortver)s/site-packages/'} + +enhance_sanity_check = True + +local_contrib_libs = [ + 'aruco', 'bgsegm', 'bioinspired', 'ccalib', 'datasets', 'dnn_objdetect', 'dnn_superres', 'dpm', 'face', 'freetype', + 'fuzzy', 'hdf', 'hfs', 'img_hash', 'line_descriptor', 'optflow', 'phase_unwrapping', 'plot', 'quality', 'reg', + 'rgbd', 'saliency', 'shape', 'stereo', 'structured_light', 'superres', 'surface_matching', 'text', 'tracking', + 'videostab', 'xfeatures2d', 'ximgproc', 'xobjdetect', 'xphoto' +] + +sanity_check_paths = { + 'files': ['lib64/libopencv_%s.%s' % (l, SHLIB_EXT) for l in local_contrib_libs], + 'dirs': [], +} + +moduleclass = 'vis' diff --git a/Golden_Repo/o/OpenFOAM/OpenFOAM-v1906-wmake-ompi.patch b/Golden_Repo/o/OpenFOAM/OpenFOAM-v1906-wmake-ompi.patch new file mode 100644 index 0000000000000000000000000000000000000000..78291300d58feaf61c9847c86a72abffec805986 --- /dev/null +++ b/Golden_Repo/o/OpenFOAM/OpenFOAM-v1906-wmake-ompi.patch @@ -0,0 +1,29 @@ +# - Corrected output of "wmake -show-c" and "wmake -show-c++" with OpenMPI in order to allow compilation of paraFoam +# +# author: Jiri Furst <Jiri.Furst@gmail.com> +--- OpenFOAM-v1906/wmake/makefiles/info.orig 2019-11-07 18:12:53.000000000 +0100 ++++ OpenFOAM-v1906/wmake/makefiles/info 2019-11-23 12:52:50.700688579 +0100 +@@ -73,19 +73,19 @@ + + .PHONY: c + c: +- @echo "$(firstword $(cc))" ++ @echo "$(lastword $(cc))" + + .PHONY: cxx + cxx: +- @echo "$(firstword $(CC))" ++ @echo "$(lastword $(CC))" + + .PHONY: cflags + cflags: +- @echo "$(wordlist 2,$(words $(COMPILE_C)), $(COMPILE_C))" ++ @echo "$(wordlist 3,$(words $(COMPILE_C)), $(COMPILE_C))" + + .PHONY: cxxflags + cxxflags: +- @echo "$(wordlist 2,$(words $(COMPILE_CXX)), $(COMPILE_CXX))" ++ @echo "$(wordlist 3,$(words $(COMPILE_CXX)), $(COMPILE_CXX))" + + .PHONY: cflags-arch + cflags-arch: diff --git a/Golden_Repo/o/OpenFOAM/OpenFOAM-v2012-cleanup.patch b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2012-cleanup.patch new file mode 100644 index 0000000000000000000000000000000000000000..daccb9439617bee6e1d5038794d6678de6cf00d3 --- /dev/null +++ b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2012-cleanup.patch @@ -0,0 +1,150 @@ +# Replaces OpenFOAM third-party libraries with EASYBUILD variants. +# Uses the OpenFOAM prefs mechanism and the FOAM_CONFIG_ETC variable +# to define the preferred settings without patching the original files +# +# Authors: Mark Olesen <Mark.Olesen@esi-group.com> +# ------------------------------------------------------------------------- +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/prefs.sh 2020-12-14 10:02:26.488430802 +0100 +@@ -0,0 +1,7 @@ ++##Easybuild## settings -*- sh -*- ++ ++export FOAM_CONFIG_ETC="etc/easybuild" ++ ++export WM_MPLIB=EASYBUILDMPI ++ ++##Easybuild## +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/easybuild/config.sh/CGAL 2020-12-14 10:10:55.991841204 +0100 +@@ -0,0 +1,6 @@ ++##Easybuild## settings -*- sh -*- ++ ++export BOOST_ARCH_PATH="$EBROOTBOOST" ++export CGAL_ARCH_PATH="$EBROOTCGAL" ++ ++##Easybuild## +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/easybuild/config.sh/FFTW 2020-12-14 10:10:53.735843322 +0100 +@@ -0,0 +1,5 @@ ++##Easybuild## settings -*- sh -*- ++ ++export FFTW_ARCH_PATH="$EBROOTFFTW" ++ ++##EasyBuild## +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/easybuild/config.sh/metis 2020-12-11 21:23:28.774934024 +0100 +@@ -0,0 +1,6 @@ ++##Easybuild## settings -*- sh -*- ++ ++METIS_VERSION="metis-$EBVERSIONMETIS" ++[ -d "$METIS_ARCH_PATH" ] || METIS_ARCH_PATH="$METIS_ROOT" ++ ++##Easybuild## +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/easybuild/config.sh/readline 2020-12-11 21:23:22.534951043 +0100 +@@ -0,0 +1,5 @@ ++##Easybuild## settings -*- sh -*- ++ ++export READLINE_ARCH_PATH="$EBROOTLIBREADLINE" ++ ++##Easybuild## +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/easybuild/config.sh/scotch 2020-12-11 21:23:17.586964539 +0100 +@@ -0,0 +1,7 @@ ++##Easybuild## settings -*- sh -*- ++ ++export SCOTCH_VERSION="scotch_$EBVERSIONSCOTCH" ++export SCOTCH_ARCH_PATH="$EBROOTSCOTCH" ++[ -d "$SCOTCH_ARCH_PATH" ] || SCOTCH_ARCH_PATH="$SCOTCH_ROOT" ++ ++##Easybuild## +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/easybuild/config.sh/vtk 2020-12-11 21:22:55.463024882 +0100 +@@ -0,0 +1,9 @@ ++##Easybuild## settings -*- sh -*- ++ ++export VTK_DIR="$EBROOTVTK" ++export MESA_ARCH_PATH="$EBROOTMESA" ++ ++# Define paraview-mesa directory as required ++unset ParaView_MESA_DIR ++ ++##Easybuild## +--- /dev/null 2020-12-14 09:05:45.272769166 +0100 ++++ OpenFOAM-v2012/etc/easybuild/config.sh/paraview 2020-12-14 10:13:53.583674383 +0100 +@@ -0,0 +1,75 @@ ++##Easybuild## settings -*- sh -*- ++# ++# Largely a knockoff of the OpenFOAM etc/config.sh/paraview-system ++# readjusted for easybuild ++# ++# Copyright (C) 2020 OpenCFD Ltd. ++# ++#------------------------------------------------------------------------------ ++# Compiler-specific location for ThirdParty installations ++archDir="$WM_THIRD_PARTY_DIR/platforms/$WM_ARCH$WM_COMPILER" ++ ++# Clean path and library path of previous settings ++eval \ ++ "$($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=PATH \ ++ $ParaView_DIR $archDir/ParaView- $archDir/qt-)" ++ ++eval \ ++ "$($WM_PROJECT_DIR/bin/foamCleanPath -sh-env=LD_LIBRARY_PATH \ ++ $ParaView_DIR $archDir/ParaView- $archDir/qt-)" ++ ++ ++#------------------------------------------------------------------------------ ++ ++##Easybuild## settings ++ ++ParaView_VERSION="$EBVERSIONPARAVIEW" ++export ParaView_DIR="$EBROOTPARAVIEW" ++ ++#------------------------------------------------------------------------------ ++ ++unset PV_PLUGIN_PATH ++ ++# Set API to correspond to VERSION ++# pv_api is <digits>.<digits> from ParaView_VERSION ++#- ++# Extract API from VERSION ++pv_api=$(echo "$ParaView_VERSION" | \ ++ sed -ne 's/^[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/p') ++ ++pv_plugin_dir="$FOAM_LIBBIN/paraview-$pv_api" ++ ++# Set paths if binaries are present ++if [ -r "$ParaView_DIR" ] ++then ++ export PATH="$ParaView_DIR/bin:$PATH" ++ ++ # ParaView libraries ++ # - 5.5 and later: lib/, but could also be lib64/ ++ for libDir in lib64 lib ++ do ++ pvLibDir="$libDir/paraview-$pv_api" ++ if [ -d "$ParaView_DIR/$pvLibDir" ] ++ then ++ export LD_LIBRARY_PATH="$ParaView_DIR/$libDir:$LD_LIBRARY_PATH" ++ break ++ fi ++ done ++ ++ # OpenFOAM plugin directory must be the first in PV_PLUGIN_PATH ++ # and have paraview-major.minor encoded in its name ++ if [ -d "$pv_plugin_dir" ] ++ then ++ export PV_PLUGIN_PATH="$pv_plugin_dir" ++ fi ++fi ++ ++ ++#------------------------------------------------------------------------------ ++ ++unset ParaView_VERSION ++ ++unset archDir libDir ++unset pv_api pv_plugin_dir pvLibDir ++ ++#------------------------------------------------------------------------------ diff --git a/Golden_Repo/o/OpenFOAM/OpenFOAM-v2112-gpsmpi-2021b.eb b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2112-gpsmpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..23de983cdea28e97b40ce59fb29df52c31cacf60 --- /dev/null +++ b/Golden_Repo/o/OpenFOAM/OpenFOAM-v2112-gpsmpi-2021b.eb @@ -0,0 +1,41 @@ +name = 'OpenFOAM' +version = 'v2112' + +homepage = 'https://www.openfoam.com/' +description = """OpenFOAM is a free, open source CFD software package. + OpenFOAM has an extensive range of features to solve anything from complex fluid flows + involving chemical reactions, turbulence and heat transfer, + to solid dynamics and electromagnetics.""" + +toolchain = {'name': 'gpsmpi', 'version': '2021b'} +toolchainopts = {'opt': True, 'cstd': 'c++17'} + +source_urls = ['https://sourceforge.net/projects/openfoam/files/%(version)s/'] +sources = [SOURCE_TGZ] +patches = [ + ('OpenFOAM-v2012-cleanup.patch', 1), + 'OpenFOAM-v1906-wmake-ompi.patch', +] +checksums = [ + '3e838731e79db1c288acc27aad8cc8a43d9dac1f24e5773e3b9fa91419a8c3f7', # OpenFOAM-v2112.tgz + 'cdd2597a1ac1448e9bd33a364a8dfe17f51cc9ab5a8e0ab67cf92bba3ed9da43', # OpenFOAM-v2012-cleanup.patch + '518e27683c5c41400cfbc17b31effa50b31b25916dccbf85b18b0b955f642505', # OpenFOAM-v1906-wmake-ompi.patch +] + +builddependencies = [ + ('Bison', '3.7.6'), + ('CMake', '3.21.1'), + ('flex', '2.6.4'), +] + +dependencies = [ + ('libreadline', '8.1'), + ('ncurses', '6.2'), + # OpenFOAM requires 64 bit METIS using 32 bit indexes (array indexes) + ('METIS', '5.1.0', '-RTW64-IDX32'), + ('SCOTCH', '6.1.2'), + ('CGAL', '5.2'), + ('gnuplot', '5.4.2'), +] + +moduleclass = 'cae' diff --git a/Golden_Repo/p/PETSc/petsc4py-3.16.3-gomkl-2021b-Python-3.9.6.eb b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gomkl-2021b-Python-3.9.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..ceda2e0d67596795257a499661d9196ee7af7f56 --- /dev/null +++ b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gomkl-2021b-Python-3.9.6.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'petsc4py' +version = '3.16.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://bitbucket.org/petsc/petsc4py' +description = "petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation." + +toolchain = {'name': 'gomkl', 'version': '2021b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] +checksums = ['10e730d50716e40de55b200ff53b461bc4f3fcc798ba89b74dfe6bdf63fa7b6e'] + +dependencies = [ + ('Python', '3.9.6'), + ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')), + ('PETSc', '3.16.3'), +] + +download_dep_fail = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/p/PETSc/petsc4py-3.16.3-gspmkl-2021b-Python-3.9.6.eb b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gspmkl-2021b-Python-3.9.6.eb new file mode 100644 index 0000000000000000000000000000000000000000..f80cb5f53aa83d3cbfb53e0edc3d892348ceb262 --- /dev/null +++ b/Golden_Repo/p/PETSc/petsc4py-3.16.3-gspmkl-2021b-Python-3.9.6.eb @@ -0,0 +1,29 @@ +easyblock = 'PythonPackage' + +name = 'petsc4py' +version = '3.16.3' +versionsuffix = '-Python-%(pyver)s' + +homepage = 'https://bitbucket.org/petsc/petsc4py' +description = "petsc4py are Python bindings for PETSc, the Portable, Extensible Toolchain for Scientific Computation." + +toolchain = {'name': 'gpsmkl', 'version': '2021b'} + +source_urls = [PYPI_SOURCE] +sources = [SOURCE_TAR_GZ] +checksums = ['10e730d50716e40de55b200ff53b461bc4f3fcc798ba89b74dfe6bdf63fa7b6e'] + +dependencies = [ + ('Python', '3.9.6'), + ('SciPy-Stack', '2021b', '', ('gcccoremkl', '11.2.0-2021.4.0')), + ('PETSc', '3.16.3'), +] + +download_dep_fail = True + +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages'], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/p/Pillow/Pillow-8.3.1-GCCcore-11.2.0.eb b/Golden_Repo/p/Pillow-SIMD/Pillow-SIMD-9.0.1-GCCcore-11.2.0.eb similarity index 60% rename from Golden_Repo/p/Pillow/Pillow-8.3.1-GCCcore-11.2.0.eb rename to Golden_Repo/p/Pillow-SIMD/Pillow-SIMD-9.0.1-GCCcore-11.2.0.eb index fec7c8e641e356d5f83a478e5cec9f0b4bcac5ae..66f99fe2012ddcba5503de3366ffe8e44979595f 100644 --- a/Golden_Repo/p/Pillow/Pillow-8.3.1-GCCcore-11.2.0.eb +++ b/Golden_Repo/p/Pillow-SIMD/Pillow-SIMD-9.0.1-GCCcore-11.2.0.eb @@ -1,16 +1,17 @@ easyblock = 'PythonPackage' -name = 'Pillow' -version = '8.3.1' +name = 'Pillow-SIMD' +version = '9.0.1' -homepage = 'https://pillow.readthedocs.org/' +homepage = 'https://github.com/uploadcare/pillow-simd' description = """Pillow is the 'friendly PIL fork' by Alex Clark and Contributors. PIL is the Python Imaging Library by Fredrik Lundh and Contributors.""" toolchain = {'name': 'GCCcore', 'version': '11.2.0'} -sources = [SOURCE_TAR_GZ] -checksums = ['2cac53839bfc5cece8fdbe7f084d5e3ee61e1303cccc86511d351adcb9e2c792'] +source_urls = ['https://github.com/uploadcare/pillow-simd/archive/'] +sources = ['%(version)s.tar.gz'] +checksums = ['4f91ab5ede15bfc71075941b62a7db3eee337fe810588a57e3c0dc103ac1bb45'] builddependencies = [('binutils', '2.37')] @@ -23,10 +24,16 @@ dependencies = [ ('freetype', '2.11.0') ] -download_dep_fail = True use_pip = True -sanity_pip_check = True +download_dep_fail = True options = {'modulename': 'PIL'} +sanity_check_paths = { + 'files': [], + 'dirs': ['lib/python%(pyshortver)s/site-packages/PIL'], +} + +sanity_pip_check = True + moduleclass = 'vis' diff --git a/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb b/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb index a5fc244563d8694a82b4289ffe2ac99672858a78..7033ab568a3df8a1a791868230b575c5218f6296 100644 --- a/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb +++ b/Golden_Repo/p/PyGObject/PyGObject-3.42.0-GCCcore-11.2.0.eb @@ -27,15 +27,12 @@ dependencies = [ ('libffi', '3.4.2'), ] -use_pip = True +use_pip = False sanity_pip_check = True download_dep_fail = True -# remove pyproject.toml, which causes trouble (header files and .pc file are not installed) -preinstallopts = "rm pyproject.toml && " - -# Don't build a wheel or the pkg-cfg file won't be installed -installopts = '--no-binary=%(namelower)s' +# install data (pkg-config and include files) +installopts = '--root=/' sanity_check_paths = { 'files': [ diff --git a/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb b/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb index 186141973332207eb5c8e82175982d7dc7a3f466..50e54496b4a13feaf99128427e2d215f735dbee8 100644 --- a/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb +++ b/Golden_Repo/p/PyQt5/PyQt5-5.15.4-GCCcore-11.2.0.eb @@ -20,12 +20,22 @@ default_easyblock = 'PythonPackage' local_pylibdir = '%(installdir)s/lib/python%(pyshortver)s/site-packages' -local_pyqt5_sip_install = "sip-install --verbose --target-dir " + local_pylibdir + " " -local_pyqt5_sip_install += "--confirm-license --no-designer-plugin --no-qml-plugin --no-tools" +local_pyqt5_sip_install = " ".join([ + "sip-install", + "--verbose", + "--confirm-license", + "--target-dir " + local_pylibdir, +]) -local_pyqtweb_configopts = "configure.py --verbose --destdir=%s/PyQt5 " % local_pylibdir -local_pyqtweb_configopts += "--apidir=%(installdir)s/qsci --pyqt-sipdir=%(builddir)s/PyQt5-%(version)s/sip " -local_pyqtweb_configopts += "--no-stubs --no-dist-info" +local_pyqtweb_configopts = " ".join([ + "configure.py", + "--verbose", + "--destdir=%s/PyQt5" % local_pylibdir, + "--apidir=%(installdir)s/qsci", + "--pyqt-sipdir=%(builddir)s/PyQt5-%(version)s/sip", + "--no-stubs", + "--no-dist-info", +]) local_setup_env = "export PATH=%(installdir)s/bin:$PATH && " local_setup_env += "export PYTHONPATH=%(installdir)s/lib/python%(pyshortver)s/site-packages:$PYTHONPATH && " @@ -81,6 +91,8 @@ sanity_check_paths = { sanity_check_commands = [ "python -c 'import PyQt5.QtCore'", + "python -c 'import PyQt5.pyrcc'", + "python -c 'import PyQt5.uic'", "sip5 --help", ] diff --git a/Golden_Repo/p/PyTorch-Geometric/PyTorch-Geometric-2.0.4-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/p/PyTorch-Geometric/PyTorch-Geometric-2.0.4-gcccoremkl-11.2.0-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..6e521d7840040c23edb9bf43272c2aaa873ab2cb --- /dev/null +++ b/Golden_Repo/p/PyTorch-Geometric/PyTorch-Geometric-2.0.4-gcccoremkl-11.2.0-2021.4.0.eb @@ -0,0 +1,124 @@ +easyblock = 'PythonBundle' + +name = 'PyTorch-Geometric' +version = '2.0.4' +local_pytorch_ver = '1.11' + +homepage = 'https://github.com/rusty1s/pytorch_geometric' +description = "PyTorch Geometric (PyG) is a geometric deep learning extension library for PyTorch." + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} + +local_pysuff = '-Python-%(pyver)s' +dependencies = [ + ('Python', '3.9.6'), + ('CUDA', '11.5', '', SYSTEM), + ('PyTorch', '1.11', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')), + ('SciPy-bundle', '2021.10'), + ('numba', '0.55.1'), + ('h5py', '3.5.0', '-serial'), + ('matplotlib', '3.4.3'), + ('scikit-learn', '1.0.1'), + ('scikit-image', '0.18.3'), + ('trimesh', '3.9.36'), + ('METIS', '5.1.0', '-IDX64'), + ('RDFlib', '6.0.2'), + ('ASE', '3.22.0', '-nompi'), + ('YACS', '0.1.8'), + ('tqdm', '4.62.3'), + ('torchvision', '0.12.0', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')), + ('YACS', '0.1.8'), + ('Java', '15', '', True), # for HDFML + # PyTorch-Lightning needs Tensorboard + ('TensorFlow', '2.6.0', '-CUDA-%(cudaver)s', ('gcccoremkl', '11.2.0-2021.4.0')) +] + +use_pip = True + +exts_list = [ + ('pyDeprecate', '0.3.2', { + 'modulename': 'deprecate', + 'checksums': ['d481116cc5d7f6c473e7c4be820efdd9b90a16b594b350276e9e66a6cb5bdd29'], + }), + ('calmsize', '0.1.3', { + 'checksums': ['e1f1233228ae6b7fafc8c23e52129c7ca58fee6bcf7875ae152eee5123ba122d'], + }), + ('calmsize', '0.1.3', { + 'checksums': ['e1f1233228ae6b7fafc8c23e52129c7ca58fee6bcf7875ae152eee5123ba122d'], + }), + ('antlr4-python3-runtime', '4.8', { + 'modulename': 'antlr4', + 'checksums': ['15793f5d0512a372b4e7d2284058ad32ce7dd27126b105fb0b2245130445db33'], + }), + ('omegaconf', '2.1.2', { + 'checksums': ['35b347cda95e8ced224179a7059c216b1f38f363812847bd6c856be76936151d'], + }), + ('typing_extensions', '4.2.0', { + 'modulename': 'typing_extensions', + 'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl', + 'checksums': ['6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708'], + }), + ('captum', '0.5.0', { + 'checksums': ['84af2c8793d34c440a351793b5ca705b8542745e2dc8bc24afb1d9b86f3bf6ec'], + }), + ('pytorch_memlab', '0.2.4', { + 'modulename': 'pytorch_memlab', + 'checksums': ['bd3395c7e122441732de492bb92e5f805086da05f8bcb45a7c5967234db8e812'], + }), + ('torchmetrics', '0.8.0', { + 'checksums': ['8516aa79edb8475504f37c6239b1176a5b1d93cf2249d961caccd1a240808208'], + }), + ('Jinja2', '3.1.1', { + 'checksums': ['640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9'], + }), + ('hydra-core', '1.1.2', { + 'modulename': 'hydra', + 'source_urls': ['https://github.com/facebookresearch/hydra/archive/refs/tags/'], + 'sources': ['v%(version)s.tar.gz'], + 'checksums': ['e8d07826e5da25c26b4a1a701817bf7afaa5375a90a4cb229c111d128de56961'], + }), + ('pytorch-lightning', '1.6.1', { + 'checksums': ['280b9c7f84f9a6b6d2efb91c7b3caad50031e318d37cfe052f3047faf1f0a2de'], + }), + ('googledrivedownloader', '0.4', { + 'modulename': 'google_drive_downloader', + 'checksums': ['4b34c1337b2ff3bf2bd7581818efbdcaea7d50ffd484ccf80809688f5ca0e204'], + }), + ('plyfile', '0.7.4', { + 'checksums': ['9e9a18d22a3158fcd74df38761d43a7facc6df75126f2ab9f4e9a5d4d2188652'], + }), + ('torch_scatter', '2.0.9', { + 'checksums': ['08f5511d64473badf0a71d156b36dc2b09b9c2f00a7cd373b935b490c477a7f1'], + }), + ('torch_sparse', '0.6.13', { + 'checksums': ['b4896822559f9b47d8b0186d74c94b7449f91db155a57d617fbeae9b722fa1f3'], + }), + ('torch_cluster', '1.6.0', { + 'checksums': ['249c1bd8c33a887b22bf569a59d0868545804032123594dd8c76ba1885859c39'], + }), + ('torch_spline_conv', '1.2.1', { + 'checksums': ['364f658e0ecb4c5263a728c2961553e022fc44c11a633d5a1bf986cf169ab438'], + }), + ('python-louvain', '0.16', { + 'modulename': 'community.community_louvain', + 'checksums': ['b7ba2df5002fd28d3ee789a49532baad11fe648e4f2117cf0798e7520a1da56b'], + }), + ('torch_geometric', version, { + 'checksums': ['d64e4c7486fcf0c7fa82f0acbf5dd52035855469708bf89f8bc7fc607671c8b7'], + }), +] + +preinstallopts = 'export TORCH_CUDA_ARCH_LIST="%(cuda_cc_semicolon_sep)s" ; ' +preinstallopts += 'export WITH_METIS=1; ' +preinstallopts += 'export FORCE_CUDA=1; ' +preinstallopts += 'export CUDA_HOME=$EBROOTCUDA; ' +preinstallopts += 'export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH; ' +preinstallopts += 'export PATH=$CUDA_HOME/bin:$PATH; ' + +sanity_check_commands = [ + "python -c 'import torch_sparse'", +] + +sanity_pip_check = True + +moduleclass = 'lib' diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch new file mode 100644 index 0000000000000000000000000000000000000000..fb66d1b66968f1dc54a1b7d3e352f2034a4f14a2 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch @@ -0,0 +1,40 @@ +# Author: Alexander Grund +# Avoid test failures in CGROUP environments +# See https://github.com/pytorch/pytorch/issues/44368 and https://github.com/pytorch/pytorch/pull/44369 +diff -Nru pytorch.orig/test/test_dataloader.py pytorch/test/test_dataloader.py +--- pytorch.orig/test/test_dataloader.py 2021-10-28 19:19:23.284526686 +0200 ++++ pytorch/test/test_dataloader.py 2021-10-28 19:21:31.860488973 +0200 +@@ -2374,22 +2374,27 @@ + after = os.sched_getaffinity(0) + return iter(after) + +- +-def worker_set_affinity(_): +- os.sched_setaffinity(0, [multiprocessing.cpu_count() - 1]) +- +- + @unittest.skipIf( + not hasattr(os, 'sched_setaffinity'), + "os.sched_setaffinity is not available") + class TestSetAffinity(TestCase): + def test_set_affinity_in_worker_init(self): ++ # Query the current affinity mask to avoid setting a disallowed one ++ old_affinity = os.sched_getaffinity(0) ++ if not old_affinity: ++ self.skipTest("No affinity information") ++ # Choose any ++ expected_affinity = list(old_affinity)[-1] ++ ++ def worker_set_affinity(_): ++ os.sched_setaffinity(0, [expected_affinity]) ++ + dataset = SetAffinityDataset() + + dataloader = torch.utils.data.DataLoader( + dataset, num_workers=2, worker_init_fn=worker_set_affinity) + for sample in dataloader: +- self.assertEqual(sample, [multiprocessing.cpu_count() - 1]) ++ self.assertEqual(sample, [expected_affinity]) + + class ConvDataset(Dataset): + def __init__(self): diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.10.0_skip_cmake_rpath.patch b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_skip_cmake_rpath.patch new file mode 100644 index 0000000000000000000000000000000000000000..09469cd45b4f59fc0a1a49e9477c97ed214cb866 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.10.0_skip_cmake_rpath.patch @@ -0,0 +1,195 @@ +# Author: Caspar van Leeuwen +# PyTorch's CMAKE configuration by default sets RUNPATH on libraries if they link other libraries +# that are outside the build tree, which is done because of the CMAKE config on +# https://github.com/pytorch/pytorch/blob/v1.10.0/cmake/Dependencies.cmake#L10. +# This provides problems, since the cuda stubs library path then also gets added to the RUNPATH. +# As a result, at runtime, the stub version of things like libcuda.so.1 gets picked up, instead of the real drivers +# See https://github.com/easybuilders/easybuild-easyconfigs/issues/14359 +# This line https://github.com/pytorch/pytorch/blob/v1.10.0/cmake/Dependencies.cmake#L16 +# Makes sure that any path that is linked, is also added to the RUNPATH. +# This has been reported upstream in https://github.com/pytorch/pytorch/issues/35418 +# and a fix was attempted in https://github.com/pytorch/pytorch/pull/37737 but it was reverted +# +# This EasyBuild patch changes behavior for the libraries that were failing, i.e. the ones in this list: +# https://github.com/easybuilders/easybuild-easyconfigs/issues/14359#issuecomment-970479904 +# This is done by setting INSTALL_RPATH_USE_LINK_PATH to false, and instead, specifying the RPATH +# explicitely by defining INSTALL_RPATH, but only adding directories that do not match to the "stubs" regex +# It has been upstreamed in this PR https://github.com/pytorch/pytorch/pull/68912 (not accepted yet at the time of writing) +diff -Nru pytorch.orig/caffe2/CMakeLists.txt pytorch/caffe2/CMakeLists.txt +--- pytorch.orig/caffe2/CMakeLists.txt 2021-11-17 11:46:01.797337624 +0100 ++++ pytorch/caffe2/CMakeLists.txt 2021-11-18 19:05:35.637707235 +0100 +@@ -630,8 +630,33 @@ + else() + set(DELAY_LOAD_FLAGS "") + endif() +- target_link_libraries(caffe2_nvrtc ${CUDA_NVRTC} ${CUDA_CUDA_LIB} ${CUDA_NVRTC_LIB} ${DELAY_LOAD_FLAGS}) ++ # message("CUDA_NVRTC: ${CUDA_NVRTC}") ++ # message("CUDA_NVRTC_LIB: ${CUDA_NVRTC_LIB}") ++ # message("CUDA_CUDA_LIB: ${CUDA_CUDA_LIB}") ++ # message("DELAY_LOAD_FLAGS: ${DELAY_LOAD_FLAGS}") ++ # if(CUDA_CUDA_LIB MATCHES "stubs") ++ # message("stubs libraries found in the CUDA_CUDA_LIB: ${CUDA_CUDA_LIB}") ++ # else() ++ # message("Stubs libs not found in CUDA_CUDA_LIB: ${CUDA_CUDA_LIB}") ++ # endif() ++ # Make sure the CUDA stubs folder doesn't end up in the RPATH of CAFFE2_NVRTC: ++ set(CAFFE2_NVRTC_LIBS ${CUDA_NVRTC} ${CUDA_CUDA_LIB} ${CUDA_NVRTC_LIB}) ++ foreach(LIB IN LISTS CAFFE2_NVRTC_LIBS) ++ message("LIB: ${LIB}") ++ if(LIB MATCHES "stubs") ++ message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.") ++ else() ++ cmake_path(GET LIB PARENT_PATH LIB_PATH) ++ message("LIBPATH: ${LIB_PATH}") ++ list(APPEND CAFFE2_NVRTC_RPATH ${LIB_PATH}) ++ endif() ++ endforeach() ++ message("CAFFE2_NVRTC_RPATH: ${CAFFE2_NVRTC_RPATH}") ++ set_target_properties(caffe2_nvrtc PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE) ++ set_target_properties(caffe2_nvrtc PROPERTIES INSTALL_RPATH "${CAFFE2_NVRTC_RPATH}") ++ target_link_libraries(caffe2_nvrtc ${CAFFE2_NVRTC_LIBS} ${DELAY_LOAD_FLAGS}) + target_include_directories(caffe2_nvrtc PRIVATE ${CUDA_INCLUDE_DIRS}) ++# message(FATAL_ERROR "STOP HERE, we're debugging") + install(TARGETS caffe2_nvrtc DESTINATION "${TORCH_INSTALL_LIB_DIR}") + if(USE_NCCL AND BUILD_SPLIT_CUDA) + list(APPEND Caffe2_GPU_SRCS_CPP +diff -Nru pytorch.orig/test/cpp/api/CMakeLists.txt pytorch/test/cpp/api/CMakeLists.txt +--- pytorch.orig/test/cpp/api/CMakeLists.txt 2021-11-17 11:46:02.991350652 +0100 ++++ pytorch/test/cpp/api/CMakeLists.txt 2021-11-18 19:06:41.207423777 +0100 +@@ -61,6 +61,22 @@ + ${CUDA_CUDA_LIB} + ${TORCH_CUDA_LIBRARIES}) + ++ # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_api: ++ set(TEST_API_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES}) ++ foreach(LIB IN LISTS TEST_API_LIBS) ++ message("LIB: ${LIB}") ++ if(LIB MATCHES "stubs") ++ message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.") ++ else() ++ cmake_path(GET LIB PARENT_PATH LIB_PATH) ++ message("LIBPATH: ${LIB_PATH}") ++ list(APPEND TEST_API_RPATH ${LIB_PATH}) ++ endif() ++ endforeach() ++ message("TEST_API_RPATH: ${TEST_API_RPATH}") ++ set_target_properties(test_api PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE) ++ set_target_properties(test_api PROPERTIES INSTALL_RPATH "${TEST_API_RPATH}") ++ + target_compile_definitions(test_api PRIVATE "USE_CUDA") + endif() + +diff -Nru pytorch.orig/test/cpp/dist_autograd/CMakeLists.txt pytorch/test/cpp/dist_autograd/CMakeLists.txt +--- pytorch.orig/test/cpp/dist_autograd/CMakeLists.txt 2021-11-17 11:46:02.993350674 +0100 ++++ pytorch/test/cpp/dist_autograd/CMakeLists.txt 2021-11-18 19:06:18.389174421 +0100 +@@ -16,6 +16,22 @@ + ${CUDA_CUDA_LIB} + ${TORCH_CUDA_LIBRARIES}) + ++ # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_dist_autograd: ++ set(DIST_AUTOGRAD_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES}) ++ foreach(LIB IN LISTS DIST_AUTOGRAD_LIBS) ++ message("LIB: ${LIB}") ++ if(LIB MATCHES "stubs") ++ message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.") ++ else() ++ cmake_path(GET LIB PARENT_PATH LIB_PATH) ++ message("LIBPATH: ${LIB_PATH}") ++ list(APPEND DIST_AUTOGRAD_RPATH ${LIB_PATH}) ++ endif() ++ endforeach() ++ message("DIST_AUTOGRAD_RPATH: ${DIST_AUTOGRAD_RPATH}") ++ set_target_properties(test_dist_autograd PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE) ++ set_target_properties(test_dist_autograd PROPERTIES INSTALL_RPATH "${DIST_AUTOGRAD_RPATH}") ++ + target_compile_definitions(test_dist_autograd PRIVATE "USE_CUDA") + endif() + +diff -Nru pytorch.orig/test/cpp/jit/CMakeLists.txt pytorch/test/cpp/jit/CMakeLists.txt +--- pytorch.orig/test/cpp/jit/CMakeLists.txt 2021-11-17 11:46:02.989350630 +0100 ++++ pytorch/test/cpp/jit/CMakeLists.txt 2021-11-18 19:05:41.396770168 +0100 +@@ -94,6 +94,7 @@ + list(APPEND JIT_TEST_DEPENDENCIES onnx_library) + endif(MSVC) + ++ + target_link_libraries(test_jit PRIVATE ${JIT_TEST_DEPENDENCIES}) + target_include_directories(test_jit PRIVATE ${ATen_CPU_INCLUDE}) + +@@ -109,6 +110,22 @@ + ${CUDA_CUDA_LIB} + ${TORCH_CUDA_LIBRARIES}) + ++ # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_jit: ++ set(TEST_JIT_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES}) ++ foreach(LIB IN LISTS TEST_JIT_LIBS) ++ message("LIB: ${LIB}") ++ if(LIB MATCHES "stubs") ++ message("Filtering ${LIB} from being set in test_jit's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.") ++ else() ++ cmake_path(GET LIB PARENT_PATH LIB_PATH) ++ message("LIBPATH: ${LIB_PATH}") ++ list(APPEND TEST_JIT_RPATH ${LIB_PATH}) ++ endif() ++ endforeach() ++ message("TEST_JIT_RPATH: ${TEST_JIT_RPATH}") ++ set_target_properties(test_jit PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE) ++ set_target_properties(test_jit PROPERTIES INSTALL_RPATH "${TEST_JIT_RPATH}") ++ + target_compile_definitions(test_jit PRIVATE USE_CUDA) + elseif(USE_ROCM) + target_link_libraries(test_jit PRIVATE +diff -Nru pytorch.orig/test/cpp/rpc/CMakeLists.txt pytorch/test/cpp/rpc/CMakeLists.txt +--- pytorch.orig/test/cpp/rpc/CMakeLists.txt 2021-11-17 11:46:02.991350652 +0100 ++++ pytorch/test/cpp/rpc/CMakeLists.txt 2021-11-18 19:06:30.502306793 +0100 +@@ -39,6 +39,22 @@ + ${CUDA_CUDA_LIB} + ${TORCH_CUDA_LIBRARIES}) + ++ # Make sure the CUDA stubs folder doesn't end up in the RPATH of test_cpp_rpc: ++ set(CPP_RPC_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES}) ++ foreach(LIB IN LISTS CPP_RPC_LIBS) ++ message("LIB: ${LIB}") ++ if(LIB MATCHES "stubs") ++ message("Filtering ${LIB} from being set in caffe2_nvrtc's RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.") ++ else() ++ cmake_path(GET LIB PARENT_PATH LIB_PATH) ++ message("LIBPATH: ${LIB_PATH}") ++ list(APPEND CPP_RPC_RPATH ${LIB_PATH}) ++ endif() ++ endforeach() ++ message("CPP_RPC_RPATH: ${CPP_RPC_RPATH}") ++ set_target_properties(test_cpp_rpc PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE) ++ set_target_properties(test_cpp_rpc PROPERTIES INSTALL_RPATH "${CPP_RPC_RPATH}") ++ + target_compile_definitions(test_cpp_rpc PRIVATE "USE_CUDA") + endif() + +diff -Nru pytorch.orig/test/cpp/tensorexpr/CMakeLists.txt pytorch/test/cpp/tensorexpr/CMakeLists.txt +--- pytorch.orig/test/cpp/tensorexpr/CMakeLists.txt 2021-11-17 11:46:02.993350674 +0100 ++++ pytorch/test/cpp/tensorexpr/CMakeLists.txt 2021-11-18 19:06:00.988984273 +0100 +@@ -62,6 +62,24 @@ + ${CUDA_CUDA_LIB} + ${TORCH_CUDA_LIBRARIES}) + target_compile_definitions(tutorial_tensorexpr PRIVATE USE_CUDA) ++ ++ # Make sure the CUDA stubs folder doesn't end up in the RPATH of tutorial_tensorexpr: ++ set(CUDA_LINK_LIBS ${CUDA_LIBRARIES} ${CUDA_NVRTC_LIB} ${CUDA_CUDA_LIB} ${TORCH_CUDA_LIBRARIES}) ++ foreach(LIB IN LISTS CUDA_LINK_LIBS) ++ message("LIB: ${LIB}") ++ if(LIB MATCHES "stubs") ++ message("Filtering ${LIB} from being set in test_tensorexpr and tutorial_tensorexpr RPATH, because it appears to point to the CUDA stubs directory, which should not be RPATHed.") ++ else() ++ cmake_path(GET LIB PARENT_PATH LIB_PATH) ++ message("LIBPATH: ${LIB_PATH}") ++ list(APPEND TENSOREXPR_RPATH ${LIB_PATH}) ++ endif() ++ endforeach() ++ message("TENSOREXPR_RPATH: ${TENSOREXPR_RPATH}") ++ set_target_properties(test_tensorexpr PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE) ++ set_target_properties(test_tensorexpr PROPERTIES INSTALL_RPATH "${TENSOREXPR_RPATH}") ++ set_target_properties(tutorial_tensorexpr PROPERTIES INSTALL_RPATH_USE_LINK_PATH FALSE) ++ set_target_properties(tutorial_tensorexpr PROPERTIES INSTALL_RPATH "${TENSOREXPR_RPATH}") + elseif(USE_ROCM) + target_link_libraries(test_tensorexpr PRIVATE + ${ROCM_HIPRTC_LIB} diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb b/Golden_Repo/p/PyTorch/PyTorch-1.11-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb new file mode 100644 index 0000000000000000000000000000000000000000..23772864b78833b64905e73580218de8997a4bd5 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.11-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb @@ -0,0 +1,198 @@ +name = 'PyTorch' +version = '1.11' +versionsuffix = '-CUDA-%(cudaver)s' + +homepage = 'https://pytorch.org/' +description = """Tensors and Dynamic neural networks in Python with strong GPU acceleration. +PyTorch is a deep learning framework that puts Python first.""" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} +toolchainopts = {'openmp': True} +# toolchainopts = {'cstd': 'c++11'} + +sources = [{ + 'filename': '%(name)s-%(version)s.tar.gz', + 'git_config': { + 'url': 'https://github.com/pytorch', + 'repo_name': 'pytorch', + 'tag': 'v1.11.0', + 'recursive': True, + }, +}] +patches = [ + 'PyTorch-1.7.0_avoid-nan-in-test-torch.patch', + 'PyTorch-1.7.0_disable-dev-shm-test.patch', + # 'PyTorch-1.7.1_correctly-pass-jit_opt_level.patch', + 'PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch', + # 'PyTorch-1.8.1_increase-distributed-test-timeout.patch', + 'PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch', + 'PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch', + # 'PyTorch-1.10.0_fix-alias-violation-in-bitwise-ops.patch', + # 'PyTorch-1.10.0_fix-faulty-asserts-and-skip-test.patch', + # 'PyTorch-1.10.0_fix-test-cond-cpu.patch', + # 'PyTorch-1.10.0_fix-vnni-detection.patch', + # 'PyTorch-1.10.0_increase_zero_optimizer_test_tolerance.patch', + # 'PyTorch-1.10.0_skip_failing_ops_tests.patch', + # 'PyTorch-1.10.0_skip_nan_tests_openblas.patch', + 'PyTorch-1.10.0_skip_cmake_rpath.patch', + 'PyTorch-1.11.0_fix_sharded_imports.patch', + # 'PyTorch-1.10.0_fix-gcc11-ideep.patch', + # 'PyTorch-1.10.0_fix_gcc11_nullpointer.patch', + # 'cub-lint.yaml.patch', + # 'cub-cub.cuh.patch', + # ('cub-cub-definitions.patch', 1), + # 'cub-context_gpu.patch', + # 'cub-accuracy_op.patch', + # 'cub-affine-channel_op.patch', + # 'cub-arg_ops.patch', + # 'cub-batch_moments_op.patch', + # 'cub-batch_sparse_to_dense_op.patch', + # 'cub-boolean_mask_ops.patch', + # 'cub-cross_entropy.patch', + # 'cub-distance_op.patch', + # 'cub-elementwise_div_op.patch', + # 'cub-elementwise_linear_op.patch', + # 'cub-elementwise_mul_op.patch', + # 'cub-elementwise_ops.patch', + # 'cub-find_op.patch', + # 'cub-generate_proposals_op.patch', + # 'cub-normalize_ops.patch', + # 'cub-one_hot_ops.patch', + # 'cub-pack_segments.patch', + # 'cub-prelu_op.patch', + # 'cub-reduce_front_back_max_ops.patch', + # 'cub-reduce_front_back_sum_mean_ops.patch', + # 'cub-reduction_ops.patch', + # 'cub-rmac_regions_op.patch', + # 'cub-segment_reduction_op_gpu.patch', + # 'cub-sequence_ops.patch', + # 'cub-softmax_ops.patch', + # 'cub-spatial_batch_norm_op_impl.patch', + # 'cub-adagrad_fused_op_gpu.patch', + # 'cub-adagrad_op_gpu.patch', + # 'cub-adam_op_gpu.patch', + # ('cub-cub_namespace.patch', 1), + # 'cub-reduce.patch', + # 'cub-math-gpu.patch', + # 'cub-CMake-Dependencies.patch', + 'PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch', + 'PyTorch-1.11.0_increase-distributed-test-timeout.patch', + 'PyTorch-1.11.0_skip_failing_ops_tests.patch', +] +checksums = [ + '10e096a81f2471d0e0e56d4e222291a09af7e3476ec1a5474ce362456c43b02c', # PyTorch-1.11.tar.gz + 'b899aa94d9e60f11ee75a706563312ccefa9cf432756c470caa8e623991c8f18', # PyTorch-1.7.0_avoid-nan-in-test-torch.patch + '622cb1eaeadc06e13128a862d9946bcc1f1edd3d02b259c56a9aecc4d5406b8a', # PyTorch-1.7.0_disable-dev-shm-test.patch + '89ac7a8e9e7df2e64cf8404fe3a279f5e9b759fee41c9de3aaff9c22f385c2c6', # PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch + # PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch + 'ff573660913ce055e24cfd194ce747ba5685091c631cfd443eae2a99d56b57ea', + # PyTorch-1.10.0_fix-test-dataloader-fixed-affinity.patch + '313dca681f45ce3bc7c4557fdcdcbe0b77216d2c708fa30a2ec0e22c44876707', + 'ac05943bb205623f91ef140aa00869efc5fe844184bd666bebf5405808610448', # PyTorch-1.10.0_skip_cmake_rpath.patch + '2e3e2093fce314a9ee9fb73ef44477f4c2cedfcf27570f585c6917ae434311f2', # PyTorch-1.11.0_fix_sharded_imports.patch + '91e67cd498918baafe3fd58e0ba04b610a3561d1d97cec2c934bfd48fffd8324', # PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch + # PyTorch-1.11.0_increase-distributed-test-timeout.patch + 'bb9709590ea8bd329360ca345c70afb8ff028be80e112af7ee00abba58482316', + '88a312d4752fe72171a2292d0aa5438ada42b124be113015bb4969c83c723766', # PyTorch-1.11.0_skip_failing_ops_tests.patch +] + +osdependencies = [OS_PKG_IBVERBS_DEV] + +builddependencies = [ + ('CMake', '3.21.1'), + ('hypothesis', '6.14.6'), +] + +dependencies = [ + ('CUDA', '11.5', '', True), + ('Ninja', '1.10.2'), # Required for JIT compilation of C++ extensions + ('Python', '3.9.6'), + ('protobuf', '3.17.3'), + ('protobuf-python', '3.17.3'), + ('pybind11', '2.7.1'), + ('SciPy-bundle', '2021.10'), + ('typing-extensions', '3.10.0.0'), + ('PyYAML', '5.4.1'), + ('MPFR', '4.1.0'), + ('GMP', '6.2.1'), + ('numactl', '2.0.14', '', SYSTEM), + ('FFmpeg', '4.4.1'), + ('Pillow-SIMD', '9.0.1'), + ('cuDNN', '8.3.1.22', '-CUDA-%(cudaver)s', True), + ('magma', '2.6.1', '-CUDA-%(cudaver)s'), + ('NCCL', '2.11.4', '-CUDA-%(cudaver)s'), + ('expecttest', '0.1.3'), +] + +custom_opts = ["USE_CUPTI_SO=1"] +configopts = 'MKL_THREADING_LAYER=sequential CFLAGS="$CFLAGS -fopenmp" CXXFLAGS="$CXXFLAGS -fopenmp" LDFLAGS=-fopenmp' + +excluded_tests = { + '': [ + # Bad tests: https://github.com/pytorch/pytorch/issues/60260 + 'distributed/elastic/utils/distributed_test', + 'distributed/elastic/multiprocessing/api_test', + # These tests fail on A10s at the very least, they time out forever no matter how long the timeout is. + # Possibly related to NCCL 2.8.3: https://docs.nvidia.com/deeplearning/nccl/release-notes/rel_2-8-3.html + # 'distributed/test_distributed_fork', + 'distributed/test_distributed_spawn', + # Fails on A10s: https://github.com/pytorch/pytorch/issues/63079 + 'test_optim', + 'test_jit', # fails on all systems + 'test_jit_cuda_fuser', # fails on all systems + 'test_jit_legacy', # fails on all systems + 'test_jit_profiling', # fails on all systems + 'test_jit_fuser_te', # fails on booster and dc + # 'test_xnnpack_integration', + 'distributed/_shard/sharded_optim/test_sharded_optim', # fails on booster and dc + 'distributed/_shard/sharded_tensor/ops/test_linear', # fails on booster and dc + 'distributed/_shard/sharded_tensor/test_megatron_prototype', # fails on booster and dc + 'distributions/test_distributions', # fails on all systems + 'test_cpp_extensions_jit', # fails on al systems + 'test_ops', # fails on booster, dc, jusuf (works on hdfml?) + 'distributed/fsdp/test_fsdp_memory', # fails on jusuf and hdfml + 'distributed/fsdp/test_fsdp_overlap', # fails on jusuf and hdfml + + # Those tests fail when not running from a container or without latest patches + # 'distributed/rpc/test_tensorpipe_agent', + # 'test_autograd', # fails on jureca dc and deep + # 'test_cuda', # fails on jureca dc + # 'test_multiprocessing', # fails on jureca dc + # 'test_nn', # fails on jureca dc + # 'test_profiler', # fails on jureca dc + # 'test_quantization', # fails on jureca dc + 'distributed/_shard/sharded_tensor/test_sharded_tensor', # fails on juwels cluster container and deep + # 'distributed/algorithms/test_join', # fails on deep and jureca dc + # 'distributed/fsdp/test_fsdp_checkpoint', # fails on deep and jureca dc + # 'distributed/fsdp/test_fsdp_core', # fails on deep and jureca dc + # 'distributed/fsdp/test_fsdp_freezing_weights', # fails on deep and jureca dc + # 'distributed/fsdp/test_fsdp_memory', # fails on deep + # 'distributed/fsdp/test_fsdp_multiple_forward', # fails on deep and jureca dc + # 'distributed/fsdp/test_fsdp_multiple_wrapping', # fails on deep and jureca dc + # 'distributed/fsdp/test_fsdp_overlap', # fails on deep + # 'distributed/fsdp/test_fsdp_pure_fp16', # fails on deep and jureca dc + # 'distributed/fsdp/test_fsdp_uneven', # fails on deep and jureca dc + # 'distributed/fsdp/test_wrap', # fails on deep and jureca dc + # 'distributed/optim/test_zero_redundancy_optimizer', # fails on deep and jureca dc + # 'distributed/rpc/cuda/test_tensorpipe_agent', # fails on deep + # 'distributed/rpc/test_faulty_agent', # fails on deep + # 'distributed/test_c10d_gloo', # fails on deep + # 'test_model_dump', # fails on deep + # 'distributed/test_c10d_nccl', # fails on jureca dc + # 'distributed/test_c10d_spawn_nccl', # fails on jureca dc + # 'distributed/test_data_parallel', # fails on jureca dc + ] +} + +runtest = 'cd test && PYTHONUNBUFFERED=1 %(python)s run_test.py --continue-through-error --verbose %(excluded_tests)s' + +# The readelf sanity check can be taken out once the TestRPATH test from https://github.com/pytorch/pytorch/pull/68912 +# is accepted, since it is then checked as part of the PyTorch test suite +local_libcaffe2 = "$EBROOTPYTORCH/lib/python%%(pyshortver)s/site-packages/torch/lib/libcaffe2_nvrtc.%s" % SHLIB_EXT +sanity_check_commands = [ + "python -c 'import torch'", + "readelf -d %s | egrep 'RPATH|RUNPATH' | grep -v stubs" % local_libcaffe2, +] +tests = ['PyTorch-check-cpp-extension.py'] + +moduleclass = 'devel' diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_sharded_imports.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_sharded_imports.patch new file mode 100644 index 0000000000000000000000000000000000000000..b1e854c38b89bc14006e2cebde0dd48330a2ad31 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_sharded_imports.patch @@ -0,0 +1,44 @@ +# Fixes a "NameError: name 'sharded_tensor' is not defined" error +# for the test_named_params_with_sharded_tensor test +# See https://github.com/pytorch/pytorch/pull/73309 +From 012d490ed76d8af8538d310a508b0e09a91b7632 Mon Sep 17 00:00:00 2001 +From: wanchaol <wanchaol@devvm3348.frc0.facebook.com> +Date: Wed, 23 Feb 2022 12:10:39 -0800 +Subject: [PATCH] [shard] fix some imports in tests + +This fix some imports in sharded optimizer tests + +Differential Revision: [D34427252](https://our.internmc.facebook.com/intern/diff/D34427252/) + +[ghstack-poisoned] +--- + .../_shard/sharded_optim/test_sharded_optim.py | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/test/distributed/_shard/sharded_optim/test_sharded_optim.py b/test/distributed/_shard/sharded_optim/test_sharded_optim.py +index 085c928985eb..d3f1468aea3c 100644 +--- a/test/distributed/_shard/sharded_optim/test_sharded_optim.py ++++ b/test/distributed/_shard/sharded_optim/test_sharded_optim.py +@@ -2,7 +2,10 @@ + + import torch + import torch.optim as optim +-import torch.distributed._shard.sharded_tensor ++from torch.distributed._shard import ( ++ sharded_tensor, ++ shard_parameter ++) + + from copy import deepcopy + from torch.distributed._shard.sharding_spec import ( +@@ -77,8 +80,8 @@ def shard_parameter(self): + ], + ) + +- sharded_tensor.shard_parameter(self.linear1, "weight", rowwise_sharding_spec) +- sharded_tensor.shard_parameter(self.linear2, "weight", colwise_sharding_spec) ++ shard_parameter(self.linear1, "weight", rowwise_sharding_spec) ++ shard_parameter(self.linear2, "weight", colwise_sharding_spec) + + def forward(self, inp): + return self.linear2(self.gelu(self.linear1(inp))) \ No newline at end of file diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch new file mode 100644 index 0000000000000000000000000000000000000000..9c4897f81d88c745fbd97f964c1556e1806133b7 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_fix_skip_jit_cuda_fuser.patch @@ -0,0 +1,428 @@ +diff -Nru pytorch-1.11.0-rc3.orig/test/test_jit_cuda_fuser.py pytorch-1.11.0-rc3/test/test_jit_cuda_fuser.py +--- pytorch-1.11.0-rc3.orig/test/test_jit_cuda_fuser.py 2022-02-24 18:06:55.180421593 +0100 ++++ pytorch-1.11.0-rc3/test/test_jit_cuda_fuser.py 2022-02-25 13:30:47.112845480 +0100 +@@ -57,18 +57,25 @@ + torch._C._jit_set_nvfuser_horizontal_mode(old_value) + + def is_pre_volta(): +- prop = torch.cuda.get_device_properties(torch.cuda.current_device()) +- return prop.major < 7 +- +-TEST_BF16 = torch.cuda.is_bf16_supported() ++ if RUN_CUDA: ++ prop = torch.cuda.get_device_properties(torch.cuda.current_device()) ++ return prop.major < 7 ++ else: ++ return True ++ ++if RUN_CUDA: ++ TEST_BF16 = torch.cuda.is_bf16_supported() ++else: ++ TEST_BF16=False + + class TestCudaFuser(JitTestCase): + +- special_values = torch.tensor( +- [float("-inf"), -10, -math.pi, +- -1, -0.5, 0, 1, 0.5, +- math.pi, 10, float("inf"), +- float("nan")], dtype=torch.float, device='cuda') ++ if RUN_CUDA: ++ special_values = torch.tensor( ++ [float("-inf"), -10, -math.pi, ++ -1, -0.5, 0, 1, 0.5, ++ math.pi, 10, float("inf"), ++ float("nan")], dtype=torch.float, device='cuda') + + int_types = [ + torch.int8, +@@ -253,8 +260,8 @@ + self.assertEqual(o, jit_o) + self.assertGraphContains(t_jit.graph_for(x, y, z, q), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_reduction_dtypes_axis(self): +@@ -1120,8 +1127,8 @@ + self.assertTrue(self._compare("comparing output failed", o, jit_o, 1e-4)) + self.assertGraphContains(t_jit.graph_for(x, y), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_reduction(self): +@@ -1170,8 +1177,8 @@ + FileCheck().check(FUSION_GUARD).run(g) + FileCheck().check(FUSION_GUARD).run(v2.graph) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_layer_norm_autodiff(self): +@@ -1212,8 +1219,8 @@ + args.append(torch.randn(shapes, dtype=torch.float32, device="cuda").requires_grad_()) + self._layer_norm_autodiff_helper(m, grad, shapes, args) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_layer_norm_parser(self): +@@ -1273,8 +1280,8 @@ + self.assertGraphContains(t_jit.graph_for(x), FUSION_GUARD) + + @unittest.skipIf(True, "codegen failure awaiting fix") +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_native_layer_norm(self): +@@ -1288,8 +1295,8 @@ + self._native_layer_norm_helper(input_shape, norm_shape, torch.float32, "cuda", 1e-4, affine) + + @unittest.skipIf(True, "codegen failure awaiting fix") +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_native_layer_norm_half(self): +@@ -1301,8 +1308,8 @@ + norm_shape = [input_shape[idx] for idx in range(dims - offset, dims)] + self._native_layer_norm_helper(input_shape, norm_shape, torch.float16, "cuda", 5e-3) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + @unittest.skipIf(not TEST_BF16, "device does not support BFloat16") +@@ -1362,8 +1369,8 @@ + self.assertTrue(self._compare("comparing running_var failed", eager_running_var, jit_running_var, error)) + self.assertGraphContains(t_jit.graph_for(x, running_mean, running_var), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_norm_channels_last(self): +@@ -1374,8 +1381,8 @@ + for mf in [torch.channels_last, torch.contiguous_format]: + self._norm_helper(size, torch.float32, "cuda", 1e-4, is_batch_norm_else_instance_norm, memory_format=mf) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_norm(self): +@@ -1391,8 +1398,8 @@ + x[1] = C + self._norm_helper(x, torch.float32, "cuda", 1e-4, is_batch_norm_else_instance_norm) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_norm_large(self): +@@ -1407,8 +1414,8 @@ + x[1] = C + self._norm_helper(x, torch.float32, "cuda", 1e-4, is_batch_norm_else_instance_norm) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_norm_half(self): +@@ -1424,8 +1431,8 @@ + x[1] = C + self._norm_helper(x, torch.float16, "cuda", 5e-3, is_batch_norm_else_instance_norm) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + @unittest.skipIf(not TEST_BF16, "device does not support BFloat16") +@@ -1469,8 +1476,8 @@ + self.assertTrue(self._compare("comparing output failed", o, jit_o, error)) + self.assertGraphContains(t_jit.graph_for(x, y), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_softmax_dtype(self): +@@ -1511,8 +1518,8 @@ + )[0].graph + FileCheck().check(FUSION_GUARD).run(bwd_graph) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test__softmax_function(self): +@@ -1535,8 +1542,8 @@ + self.assertTrue(self._compare("comparing output failed", o, jit_o, 1e-3)) + self.assertGraphContainsExactly(t_jit.graph_for(x, y), FUSION_GUARD, 1, consider_subgraphs=True) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test__softmax_function_half_to_float(self): +@@ -1559,8 +1566,8 @@ + self.assertTrue(self._compare("comparing output failed", o, jit_o, 1e-3)) + self.assertGraphContainsExactly(t_jit.graph_for(x, y), FUSION_GUARD, 1, consider_subgraphs=True) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_softmax(self): +@@ -1575,8 +1582,8 @@ + x[reduction_dim] = reduction_size + self._softmax_helper(x, reduction_dim, torch.float32, "cuda", 1e-4) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_softmax_half(self): +@@ -1591,8 +1598,8 @@ + x[reduction_dim] = reduction_size + self._softmax_helper(x, reduction_dim, torch.float16, "cuda", 5e-3) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + @unittest.skipIf(not TEST_BF16, "device does not support BFloat16") +@@ -1608,8 +1615,8 @@ + x[reduction_dim] = reduction_size + self._softmax_helper(x, reduction_dim, torch.bfloat16, "cuda", 1e-1) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_reduction_permutation(self): +@@ -1622,8 +1629,8 @@ + for perm1 in itertools.permutations(range(len(x))): + self._reduction_helper(x, axes, torch.float32, "cuda", perm0, perm1) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_reduction_multiple_output(self): +@@ -1767,8 +1774,8 @@ + self.assertEqual(o, jit_o) + ''' + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_pw_single_reduction_partition(self): +@@ -1792,8 +1799,8 @@ + self.assertEqual(o, jit_o) + self.assertGraphContains(t_jit.graph_for(x, y, z), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_permutation_preservation(self): +@@ -1830,8 +1837,8 @@ + self.assertGraphContains(t_jit.graph_for(x), FUSION_GUARD) + self.assertTrue(jit_o.is_contiguous(memory_format=torch.channels_last)) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_normalization_partition(self): +@@ -1858,8 +1865,8 @@ + self.assertEqual(o, jit_o) + self.assertGraphContains(t_jit.graph_for(x, y, z, r_m, r_v), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_sum_to_one(self): +@@ -1879,8 +1886,8 @@ + self.assertEqual(o, jit_o) + self.assertGraphContains(t_jit.graph_for(x), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_single_reduction_broadcast(self): +@@ -1903,8 +1910,8 @@ + self.assertEqual(o, jit_o) + self.assertGraphContains(t_jit.graph_for(x, y, z), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_trivial_reduction(self): +@@ -1940,8 +1947,8 @@ + repro_jit = torch.jit.script(repro) + self._run_helper(repro_jit, repro, x, 0.6) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_reduction_sizes_op(self): +@@ -1964,8 +1971,8 @@ + # have been optimized away + self.assertGraphContainsExactly(t_jit.graph_for(x, y), FUSION_GUARD, 0) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_profile_ivalue(self): +@@ -1987,8 +1994,8 @@ + self.assertEqual(o, jit_o) + self.assertGraphContains(t_jit.graph_for(x, y, (0, 1), False), FUSION_GUARD) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_sum_to_size(self): +@@ -2021,8 +2028,8 @@ + self.assertEqual(o.dtype, jit_o.dtype) + self.assertEqual(o, jit_o) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_grad_sum_to_size(self): +@@ -2145,8 +2152,8 @@ + self.assertTrue((percent_zeros >= (prob - 0.01)) and (percent_zeros <= (prob + 0.01))) + self.assertGraphContainsExactly(t_jit.graph_for(x, prob, True), FUSION_GUARD, 1, consider_subgraphs=True) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_dropout_training_fusion(self): +@@ -2294,8 +2301,8 @@ + self.assertEqual(x.grad.dtype, x.dtype) + self.assertEqual(y.grad.dtype, y.dtype) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_autocast_1(self): +@@ -2331,8 +2338,8 @@ + self.assertEqual(x.grad.dtype, x.dtype) + self.assertEqual(y.grad.dtype, y.dtype) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_autocast_2(self): +@@ -2367,8 +2374,8 @@ + self.assertEqual(jit_o.dtype, torch.float) + self.assertEqual(x.grad.dtype, x.dtype) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + @unittest.skipIf(not TEST_BF16, "device does not support BFloat16") +@@ -2405,8 +2412,8 @@ + self.assertEqual(x.grad.dtype, x.dtype) + self.assertEqual(y.grad.dtype, y.dtype) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + @unittest.skipIf(not TEST_BF16, "device does not support BFloat16") +@@ -2817,8 +2824,8 @@ + ref_module.bn.running_var, + e0)) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_batch_norm_half(self): +@@ -2832,8 +2839,8 @@ + training, track_running_stats = training_and_track + self._test_batch_norm_impl_index_helper(4, 8, 5, affine, track_running_stats, training, torch.half) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_batch_norm_impl_index_correctness(self): +@@ -2947,8 +2954,8 @@ + self.assertGraphContainsExactly(graph, FUSION_GROUP, 0) + self.assertGraphContains(graph, 'prim::add_optional', True) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_remove_output_used_only_in_dtype(self): +@@ -2980,8 +2987,8 @@ + graph = jitted.graph_for(x, y) + self.assertGraphContains(graph, FUSION_GROUP, True) + +- @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(not RUN_CUDA, "requires CUDA") ++ @unittest.skipIf(is_pre_volta(), "reduction not supported in pre volta device") + @unittest.skipIf(GRAPH_EXECUTOR != ProfilingMode.PROFILING, + "Requires fusion optimization pass to be effective") + def test_fix_shape_expression_bn(self): \ No newline at end of file diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase-distributed-test-timeout.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase-distributed-test-timeout.patch new file mode 100644 index 0000000000000000000000000000000000000000..1c103091c1851688b53bb94bfde15c29532b1ae4 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase-distributed-test-timeout.patch @@ -0,0 +1,17 @@ +It seems the timeout for the distributed tests is set to low and spurious failures can be seen +Increase it by a factor of 6 similar to torch/testing/_internal/distributed/distributed_test.py + +Original patch by Alexander Grund (TU Dresden), updated by Caspar van Leeuwen (SURF) + +diff -Nru pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_distributed.py pytorch-1.11.0-rc3/torch/testing/_internal/common_distributed.py +--- pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_distributed.py 2022-02-24 18:07:16.414274654 +0100 ++++ pytorch-1.11.0-rc3/torch/testing/_internal/common_distributed.py 2022-02-24 18:08:31.772851148 +0100 +@@ -321,7 +321,7 @@ + # TSAN runs much slower. + TIMEOUT_DEFAULT = 500 + else: +- TIMEOUT_DEFAULT = 100 ++ TIMEOUT_DEFAULT = 600 + TIMEOUT_OVERRIDE = {"test_ddp_uneven_inputs": 400} + + \ No newline at end of file diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase_test_tolerances_TF32.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase_test_tolerances_TF32.patch new file mode 100644 index 0000000000000000000000000000000000000000..3bce7e06882d8679636ad6b7b0d720937710d5f3 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_increase_test_tolerances_TF32.patch @@ -0,0 +1,143 @@ +# Author: Caspar van Leeuwen, SURF +# Fixes failing tests due to use of TensorFloat32 +# Setting NVIDIA_TF32_OVERRIDE=0 makes these tests pass, proving that TensorFloat32 is the issue +# We increase tolerances for the asserts to make these tests pass +diff -Nru pytorch_orig/test/distributed/_shard/sharded_tensor/ops/test_linear.py pytorch/test/distributed/_shard/sharded_tensor/ops/test_linear.py +--- pytorch_orig/test/distributed/_shard/sharded_tensor/ops/test_linear.py 2022-04-07 18:31:13.069599000 +0200 ++++ pytorch/test/distributed/_shard/sharded_tensor/ops/test_linear.py 2022-04-07 18:32:32.877406000 +0200 +@@ -77,7 +77,7 @@ + local_output = local_linear(inp) + + # Verify +- self.assertEqual(local_output, sharded_output) ++ self.assertEqual(local_output, sharded_output, rtol=0.02, atol=1e-03) + + # Validate for torch.nn.functional.linear version. + local_output = torch.nn.functional.linear( +@@ -91,7 +91,7 @@ + # for reshard. We need to squeeze the # of dimensions manually. + if inp.dim() == 1: + sharded_output = sharded_output.squeeze(reshard_spec.dim) +- self.assertEqual(local_output, sharded_output) ++ self.assertEqual(local_output, sharded_output, rtol=0.02, atol=1e-03) + + # Compute loss and run backward pass. + local_output.sum().backward() +@@ -114,7 +114,7 @@ + + # Test backward gradient calculation. + self.assertEqual(sharded_linear.bias.grad, local_bias_grad) +- self.assertEqual(sharded_weight.grad, local_grad_narrowed) ++ self.assertEqual(sharded_weight.grad, local_grad_narrowed, rtol=0.01, atol=1e-03) + + # Test optimizer. + previous = local_linear.weight.clone().detach() +@@ -135,7 +135,7 @@ + ) + self.assertEqual(sharded_weight.size(), local_weight_narrowed.size()) + self.assertNotEqual(previous_sharded_weight, sharded_weight) +- self.assertEqual(sharded_weight, local_weight_narrowed) ++ self.assertEqual(sharded_weight, local_weight_narrowed, rtol=0.01, atol=1e-04) + self.assertNotEqual(previous_sharded_bias, sharded_linear.bias) + self.assertEqual(sharded_linear.bias, local_linear.bias) + +diff -Nru pytorch_orig/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py pytorch/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py +--- pytorch_orig/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py 2022-04-07 18:31:13.091710000 +0200 ++++ pytorch/test/distributed/_shard/sharded_tensor/test_megatron_prototype.py 2022-04-07 18:41:03.744644000 +0200 +@@ -113,7 +113,7 @@ + local_output = local_megatron_lm(inp) + + # Verify +- self.assertEqual(local_output, sharded_output) ++ self.assertEqual(local_output, sharded_output, rtol=0.01, atol=1e-03) + + # Compute loss and run backward pass. + local_output.sum().backward() +@@ -161,9 +161,9 @@ + ) + + # Test backward gradient calculation. +- self.assertEqual(sharded_weight_fc1.grad, local_grad_narrowed_fc1) +- self.assertEqual(sharded_weight_fc2.grad, local_grad_narrowed_fc2) +- self.assertEqual(bias_grad_fc1, local_bias_grad_fc1) ++ self.assertEqual(sharded_weight_fc1.grad, local_grad_narrowed_fc1, rtol=0.01, atol=2e-03) ++ self.assertEqual(sharded_weight_fc2.grad, local_grad_narrowed_fc2, rtol=0.01, atol=1e-03) ++ self.assertEqual(bias_grad_fc1, local_bias_grad_fc1, rtol=0.01, atol=2e-02) + self.assertEqual(bias_grad_fc2, local_bias_grad_fc2) + + # Test optimizer. +@@ -171,7 +171,7 @@ + local_bias_fc1, local_bias_fc2 = _get_bias(local_megatron_lm) + self.assertEqual(bias_fc1, local_bias_fc1) + self.assertEqual(bias_fc2, local_bias_fc2) +- self.assertEqual(bias_fc1.grad, local_bias_fc1.grad) ++ self.assertEqual(bias_fc1.grad, local_bias_fc1.grad, rtol=0.01, atol=2e-02) + self.assertEqual(bias_fc2.grad, local_bias_fc2.grad) + previous_sharded_weight_fc1 = sharded_weight_fc1.clone() + previous_sharded_weight_fc2 = sharded_weight_fc2.clone() +@@ -197,13 +197,13 @@ + self.assertEqual(sharded_weight_fc2.size(), local_weight_fc2_narrowed.size()) + self.assertNotEqual(previous_sharded_weight_fc1, sharded_weight_fc1) + self.assertNotEqual(previous_sharded_weight_fc2, sharded_weight_fc2) +- self.assertEqual(sharded_weight_fc1, local_weight_fc1_narrowed) +- self.assertEqual(sharded_weight_fc2, local_weight_fc2_narrowed) ++ self.assertEqual(sharded_weight_fc1, local_weight_fc1_narrowed, rtol=0.01, atol=1e-03) ++ self.assertEqual(sharded_weight_fc2, local_weight_fc2_narrowed, rtol=0.01, atol=1e-03) + + # Test bias value after optimizer. + local_bias_fc1, local_bias_fc2 = _get_bias(local_megatron_lm) + self.assertNotEqual(previous_bias_fc1, bias_fc1) +- self.assertEqual(bias_fc1, local_bias_fc1) ++ self.assertEqual(bias_fc1, local_bias_fc1, rtol=0.01, atol=1e-03) + self.assertNotEqual(previous_bias_fc2, bias_fc2) + self.assertEqual(bias_fc2, local_bias_fc2) + +diff -Nru pytorch_orig/test/test_stateless.py pytorch/test/test_stateless.py +--- pytorch_orig/test/test_stateless.py 2022-04-07 18:31:13.029968000 +0200 ++++ pytorch/test/test_stateless.py 2022-04-07 18:43:46.723968000 +0200 +@@ -42,7 +42,7 @@ + # existing params in module. So here we expect the result to be the + # same as the input if the weight swapping went well. + res = _stateless.functional_call(module, parameters, x) +- self.assertEqual(x, res) ++ self.assertEqual(x, res, rtol=1e-04, atol=1e-04) + # check that the weight remain unmodified + cur_weight = to_check.l1.weight + uur_buffer = to_check.buffer +c PyTorch-1.11.0_increase_test_tolerances_TF32.patch +rig/test/test_jit_fuser_te.py pytorch/test/test_jit_fuser_te.py +--- pytorch_orig/test/test_jit_fuser_te.py 2022-04-07 18:31:13.046680000 +0200 ++++ pytorch/test/test_jit_fuser_te.py 2022-04-12 18:21:00.355114000 +0200 +@@ -956,7 +956,7 @@ + def test_lstm_traced(self): + for device in self.devices: + inputs = get_lstm_inputs(device) +- ge = self.checkTrace(LSTMCellF, inputs) ++ ge = self.checkTrace(LSTMCellF, inputs, atol=1e-4, rtol=1e-5) + graph = ge.graph_for(*inputs) + fusion_groups = self.findFusionGroups(graph) + # TODO: chunk +diff -Nru pytorch_orig/torch/testing/_internal/jit_utils.py pytorch/torch/testing/_internal/jit_utils.py +--- pytorch_orig/torch/testing/_internal/jit_utils.py 2022-04-07 18:28:54.339477000 +0200 ++++ pytorch/torch/testing/_internal/jit_utils.py 2022-04-12 18:19:59.614272000 +0200 +@@ -525,7 +525,7 @@ + def checkTrace(self, func, reference_tensors, input_tensors=None, + drop=None, allow_unused=False, verbose=False, + inputs_require_grads=True, check_tolerance=1e-5, export_import=True, +- _force_outplace=False): ++ _force_outplace=False, rtol=None, atol=None): + + # TODO: check gradients for parameters, not just inputs + def allSum(vs): +@@ -618,7 +618,10 @@ + + self.assertEqual(outputs, outputs_ge) + if inputs_require_grads: +- self.assertEqual(grads, grads_ge) ++ if atol is not None and rtol is not None: ++ self.assertEqual(grads, grads_ge, atol=atol, rtol=rtol) ++ else: ++ self.assertEqual(grads, grads_ge) + for g2, g2_ge in zip(grads2, grads2_ge): + if g2 is None and g2_ge is None: + continue \ No newline at end of file diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.11.0_skip_failing_ops_tests.patch b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_skip_failing_ops_tests.patch new file mode 100644 index 0000000000000000000000000000000000000000..e3d894a3fa02a0dec3013cf62c11ee851b75ab0e --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.11.0_skip_failing_ops_tests.patch @@ -0,0 +1,26 @@ +diff -Nru pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_methods_invocations.py pytorch-1.11.0-rc3/torch/testing/_internal/common_methods_invocations.py +--- pytorch-1.11.0-rc3.orig/torch/testing/_internal/common_methods_invocations.py 2022-02-24 18:07:16.430276050 +0100 ++++ pytorch-1.11.0-rc3/torch/testing/_internal/common_methods_invocations.py 2022-02-24 19:38:11.610293957 +0100 +@@ -8791,7 +8791,10 @@ + supports_fwgrad_bwgrad=True, + autodiff_fusible_nodes=['aten::contiguous'], + assert_jit_shape_analysis=True, +- supports_out=False), ++ supports_out=False, ++ skips=( ++ DecorateInfo(unittest.skip("Skipped!"), 'TestJit', 'test_variant_consistency_jit', device_type='cpu'), ++ )), + OpInfo('sum_to_size', + op=lambda x, *args, **kwargs: x.sum_to_size(*args, **kwargs), + dtypes=floating_and_complex_types_and(torch.float16, torch.bfloat16), +@@ -9746,6 +9749,10 @@ + DecorateInfo(unittest.skip("Skipped!"), 'TestMathBits', 'test_neg_view', device_type='cuda'), + DecorateInfo(unittest.skip("Skipped!"), 'TestCommon', 'test_dtypes'), + DecorateInfo(unittest.skip("Skipped!"), 'TestGradients', 'test_fn_gradgrad'), ++ # It also breaks on CPU. We'll revisit this once `linalg.lu_solve` is a thing ++ # See https://github.com/pytorch/pytorch/pull/64387 and https://github.com/pytorch/pytorch/issues/67767 ++ DecorateInfo(unittest.skip("Skipped!"), 'TestGradients', 'test_fn_grad', ++ dtypes=(torch.complex128,)), + )), + OpInfo('linalg.cholesky', + aten_name='linalg_cholesky', \ No newline at end of file diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.7.0_avoid-nan-in-test-torch.patch b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_avoid-nan-in-test-torch.patch new file mode 100644 index 0000000000000000000000000000000000000000..a14c146be550ee16e52e7c02400e55b358c058ae --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_avoid-nan-in-test-torch.patch @@ -0,0 +1,18 @@ +This test uses in-place operations which may generate NaNs making subsequent tests fail +See https://github.com/pytorch/pytorch/issues/48591 + +Author: Alexander Grund (TU Dresden) + +diff --git a/test/test_torch.py b/test/test_torch.py +index 1f3f568f7b..237fb030f6 100644 +--- a/test/test_torch.py ++++ b/test/test_torch.py +@@ -15060,7 +15060,7 @@ class TestTorchDeviceType(TestCase): + x_c = x.contiguous() + y_c = y.contiguous() + result_c = fn(x_c, y_c) +- result = fn(x, y) ++ result = fn(x.clone(), y) + self.assertEqual(result, result_c) + self.assertTrue( + result.is_contiguous(memory_format=memory_format), diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.7.0_disable-dev-shm-test.patch b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_disable-dev-shm-test.patch new file mode 100644 index 0000000000000000000000000000000000000000..0f85648a929d352009726aa01f2de9efcaef8378 --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.7.0_disable-dev-shm-test.patch @@ -0,0 +1,21 @@ +This test fails randomly. I assume some concurrent test runners or another race condition +Should be safe even if this fails +See https://github.com/pytorch/pytorch/issues/48579 + +Author: Alexander Grund (TU Dresden) + +diff --git a/test/test_multiprocessing.py b/test/test_multiprocessing.py +index 49e0a3cb45..e4e5b64ca1 100644 +--- a/test/test_multiprocessing.py ++++ b/test/test_multiprocessing.py +@@ -202,7 +202,9 @@ class leak_checker(object): + # available_fds = self._get_next_fds(10) + # self.test_case.assertLessEqual( + # available_fds[-1] - self.next_fds[-1], 5) +- self.test_case.assertFalse(self.has_shm_files()) ++ # self.test_case.assertFalse(self.has_shm_files()) ++ if self.has_shm_files(): ++ print("WARNING: has_shm_files test would have failed!") + return False + + def check_pid(self, pid): diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch b/Golden_Repo/p/PyTorch/PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch new file mode 100644 index 0000000000000000000000000000000000000000..a5c0731da64c062085178f344d2212ec4922339f --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.8.1_dont-use-gpu-ccc-in-test.patch @@ -0,0 +1,22 @@ +Disable a part of a test which uses the current GPUs CUDA compute capability +This will fail if the GPU is newer than what nvcc supports. +See https://github.com/pytorch/pytorch/issues/51950 + +Author: Alexander Grund (TU Dresden) + +diff --git a/test/test_cpp_extensions_jit.py b/test/test_cpp_extensions_jit.py +index efda7cb2cf..64607346c8 100644 +--- a/test/test_cpp_extensions_jit.py ++++ b/test/test_cpp_extensions_jit.py +@@ -181,11 +181,9 @@ class TestCppExtensionJIT(common.TestCase): + # - With/without '+PTX' + + n = torch.cuda.device_count() +- capabilities = {torch.cuda.get_device_capability(i) for i in range(n)} + # expected values is length-2 tuple: (list of ELF, list of PTX) + # note: there should not be more than one PTX value + archflags = { +- '': (['{}{}'.format(capability[0], capability[1]) for capability in capabilities], None), + "Maxwell+Tegra;6.1": (['53', '61'], None), + "Pascal 3.5": (['35', '60', '61'], None), + "Volta": (['70'], ['70']), diff --git a/Golden_Repo/p/PyTorch/PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch b/Golden_Repo/p/PyTorch/PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch new file mode 100644 index 0000000000000000000000000000000000000000..c360a459f01d189049e71c7c7a2dfc19de2bab8a --- /dev/null +++ b/Golden_Repo/p/PyTorch/PyTorch-1.9.0_limit-world-size-for-zero-redundancy-opt-test.patch @@ -0,0 +1,20 @@ +Some tests fail when run with anything but 2 GPUs and others when run with anything but 2 or 4 GPUs. +So limit to 2 GPUs. + +See https://github.com/pytorch/pytorch/issues/59548 + +Author: Alexander Grund (TU Dresden) + +diff --git a/test/distributed/optim/test_zero_redundancy_optimizer.py b/test/distributed/optim/test_zero_redundancy_optimizer.py +index 06f1b4f484..bc82f6c304 100644 +--- a/test/distributed/optim/test_zero_redundancy_optimizer.py ++++ b/test/distributed/optim/test_zero_redundancy_optimizer.py +@@ -233,7 +233,7 @@ class TestZeroRedundancyOptimizerSingleRank(TestZeroRedundancyOptimizer): + class TestZeroRedundancyOptimizerDistributed(TestZeroRedundancyOptimizer): + @property + def world_size(self): +- return min(4, max(2, torch.cuda.device_count())) ++ return 2 + + @skip_if_rocm + def test_step(self): diff --git a/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb b/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb index 69726a65d73e316d0115eba02e56fb7e8b9ed4b6..1bc3b4a15d72d192e6e3d748f27f3950d8c58fe2 100644 --- a/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb +++ b/Golden_Repo/p/Python/Python-3.9.6-GCCcore-11.2.0.eb @@ -727,11 +727,6 @@ postinstallcmds = [ buildopts = "PROFILE_TASK='-m test --pgo -x test_socket'" -# Needed so stuff here is picked up in virtual environments (like in the Jupyter easyconfig) -modextrapaths = { - 'PYTHONPATH': 'lib/python%s/site-packages' % ".".join(version.split(".")[:-1]) -} - modextravars = { 'PIP_CONFIG_FILE': '%(installdir)s/etc/pip.conf' } diff --git a/Golden_Repo/p/patchelf/patchelf-0.13-GCCcore-11.2.0.eb b/Golden_Repo/p/patchelf/patchelf-0.13-GCCcore-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..f553b4df4c1853f74d9bf470a6cf477a5c1543c8 --- /dev/null +++ b/Golden_Repo/p/patchelf/patchelf-0.13-GCCcore-11.2.0.eb @@ -0,0 +1,27 @@ +easyblock = 'ConfigureMake' + +name = 'patchelf' +version = '0.13' + +homepage = 'https://github.com/NixOS/patchelf' +description = """PatchELF is a small utility to modify the dynamic linker and RPATH of ELF executables.""" + +toolchain = {'name': 'GCCcore', 'version': '11.2.0'} + +source_urls = ['https://github.com/NixOS/patchelf/archive/'] +sources = ['%(version)s.tar.gz'] +checksums = ['60c6aeadb673de9cc1838b630c81f61e31c501de324ef7f1e8094a2431197d09'] + +builddependencies = [ + ('binutils', '2.37'), + ('Autotools', '20210726'), +] + +preconfigopts = "sh bootstrap.sh && " + +sanity_check_paths = { + 'files': ['bin/patchelf'], + 'dirs': ['share'], +} + +moduleclass = 'tools' diff --git a/Golden_Repo/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb new file mode 100644 index 0000000000000000000000000000000000000000..b98b6d50458ef576995f07ac2c500590a47f39db --- /dev/null +++ b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb @@ -0,0 +1,55 @@ +name = 'psmpi' +version = '5.5.0-1' +versionsuffix = '-mt' + +homepage = 'https://github.com/ParaStation/psmpi2' +description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation, +based on MPICH v3. It provides extra low level communication libraries and integration with +various batch systems for tighter process control. +""" + +toolchain = {'name': 'NVHPC', 'version': '22.1'} + +sources = [SOURCE_TAR_BZ2] +source_urls = ['https://github.com/ParaStation/psmpi/archive/'] +checksums = [ + # psmpi-5.5.0-1.tar.bz2 + 'c178bf618f139857c1bc191938677145cf4fdbec5b8d3afa2ca1de666c791b48', + '978eb3223c978477c40987f745c07fda26ccbad2f468616faf92f0d71b81a156', # psmpi_shebang.patch + # psmpi-5.5.0-1_ime.patch + 'c2418b9511560dca197242508de9c7b6b117122912b6d3a4aa18398834f465ff', +] + +builddependencies = [ + # needed for autogen.sh on CentOS 7 + ('Autotools', '20210726'), + # Autoconf >2.69 is generating a buggy configure script, so take it down to the one that works + ('Autoconf', '2.69'), +] +dependencies = [ + ('pscom', '5.4-default', '', SYSTEM), + # needed due to the inclusion of hwloc + ('libxml2', '2.9.10'), + # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed + ('CUDA', '11.5', '', SYSTEM) +] + +patches = [ + 'psmpi_shebang.patch', + 'psmpi-5.5.0-1_ime.patch' +] + +# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio' +# We disable gpfs support, since it seems to be problematic under some circumstances. One can disable it by setting +# ROMIO_FSTYPE_FORCE="ufs:", but then we loose IME support +mpich_opts = '--enable-static --with-file-system=ime+ufs --enable-romio' + +preconfigopts = "./autogen.sh && " +preconfigopts += 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && ' +preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && ' + +threaded = True + +cuda = True + +moduleclass = 'mpi' diff --git a/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb index 179cdd32dab87baaddbfaf10a3cec11662ba80a0..5d59893bc365a46eddca2fc3c4f76546cec3d202 100644 --- a/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb +++ b/Golden_Repo/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb @@ -4,7 +4,7 @@ versionsuffix = '-mt' homepage = 'https://github.com/ParaStation/psmpi2' description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation, -based on MPICH v3. It provides extra low level communication libraries and integration with +based on MPICH v3. It provides extra low level communication libraries and integration with various batch systems for tighter process control. """ diff --git a/Golden_Repo/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..c2745abdcb88db795a735530bb52887a07d746cd --- /dev/null +++ b/Golden_Repo/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb @@ -0,0 +1,3198 @@ +name = 'R' +version = '4.1.2' + +homepage = 'https://www.r-project.org/' +description = """R is a free software environment for statistical computing + and graphics.""" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} + +source_urls = ['https://cloud.r-project.org/src/base/R-%(version_major)s'] +sources = [SOURCE_TAR_GZ] +patches = ['%(name)s-4.1.0_identify-flexiblas-in-configure.patch'] +checksums = [ + '2036225e9f7207d4ce097e54972aecdaa8b40d7d9911cd26491fac5a0fab38af', # R-4.1.2.tar.gz + '2c6720e2e144ae4fe00842daab0ebba72241080603e0ff1a6ca758738041b257', # R-4.1.0_identify-flexiblas-in-configure.patch +] + +builddependencies = [ + ('pkg-config', '0.29.2'), + ('XServer', '1.20.13'), +] + +dependencies = [ + ('Java', '15', '', SYSTEM), + ('X11', '20210802'), + ('OpenGL', '2021b'), + ('cairo', '1.16.0'), + ('libreadline', '8.1'), + ('ncurses', '6.2'), + ('bzip2', '1.0.8'), + ('XZ', '5.2.5'), + ('zlib', '1.2.11'), + ('SQLite', '3.36'), + ('PCRE2', '10.37'), + ('libpng', '1.6.37'), # for plotting in R + ('libjpeg-turbo', '2.1.1'), # for plottting in R + ('LibTIFF', '4.3.0'), + ('Tk', '8.6.11'), # for tcltk + ('cURL', '7.78.0'), # for RCurl + ('libxml2', '2.9.10'), # for XML + ('PROJ', '8.1.0'), # for rgdal + ('GMP', '6.2.1'), # for igraph + ('NLopt', '2.7.0'), # for nloptr + ('FFTW', '3.3.10', '-nompi'), # for fftw + ('libsndfile', '1.0.31'), # for seewave + ('ICU', '70.1'), # for rJava & gdsfmt + ('HDF5', '1.12.1', '-serial'), # for hdf5r + ('UDUNITS', '2.2.28'), # for units + ('GSL', '2.7'), # for RcppGSL + ('ImageMagick', '7.1.0-13'), # for animation + ('GLPK', '5.0'), # for Rglpk + ('netCDF', '4.8.1', '-serial'), # the ndf4 needs it + ('GEOS', '3.9.1'), # for rgeos + ('nodejs', '16.13.0'), # for V8 (required by rstan) + ('GDAL', '3.3.2'), # for sf + ('MPFR', '4.1.0'), # for Rmpfr + ('libgit2', '1.1.1'), + ('ZeroMQ', '4.3.4'), # for pbdZMQ needed by IRkernel + ('OpenSSL', '1.1', '', True), + ('texlive', '20200406'), +] + + +# Some R extensions (mclust, quantreg, waveslim for example) require the math library (-lm) to avoid undefined symbols. +# Adding it to FLIBS makes sure it is present when needed. +preconfigopts = 'export FLIBS="$FLIBS -lm" && ' + +configopts = "--with-pic --enable-threads --enable-R-shlib" +# some recommended packages may fail in a parallel build (e.g. Matrix), and +# we're installing them anyway below +configopts += " --with-recommended-packages=no" + +# specify that at least EasyBuild v3.5.0 is required, +# since we rely on the updated easyblock for R to configure correctly w.r.t. BLAS/LAPACK +easybuild_version = '3.5.0' + +exts_default_options = { + 'source_urls': [ + 'https://cran.r-project.org/src/contrib/Archive/%(name)s', # package archive + 'https://cran.r-project.org/src/contrib/', # current version of packages + 'https://cran.freestatistics.org/src/contrib', # mirror alternative for current packages + ], + 'source_tmpl': '%(name)s_%(version)s.tar.gz', +} + +# !! order of packages is important !! +# packages updated on 1st November 2021 +exts_list = [ + 'base', + 'compiler', + 'datasets', + 'graphics', + 'grDevices', + 'grid', + 'methods', + 'parallel', + 'splines', + 'stats', + 'stats4', + 'tcltk', + 'tools', + 'utils', + # ('Rmpi', '0.6-9.2', { + # 'checksums': ['358ac1af97402e676f209261a231f36a35e60f0301edf8ca53dac11af3c3bd1a'], + # }), + ('abind', '1.4-5', { + 'checksums': ['3a3ace5afbcb86e56889efcebf3bf5c3bb042a282ba7cc4412d450bb246a3f2c'], + }), + ('magic', '1.5-9', { + 'checksums': ['fa1d5ef2d39e880f262d31b77006a2a7e76ea38e306aae4356e682b90d6cd56a'], + }), + ('Rcpp', '1.0.7', { + 'checksums': ['15e5a4732216daed16263c79fb37017c2ada84a2d4e785e3b76445d0eba3dc1d'], + }), + ('RcppProgress', '0.4.2', { + 'checksums': ['b1624b21b7aeb1dafb30f092b2a4bef4c3504efd2d6b00b2cdf55dc9df194b48'], + }), + ('lpSolve', '5.6.15', { + 'checksums': ['4627be4178abad34fc85a7d264c2eb5e27506f007e46687b0b8a4f8fbdf4f3ba'], + }), + ('linprog', '0.9-2', { + 'checksums': ['8937b2e30692e38de1713f1513b78f505f73da6f5b4a576d151ad60bac2221ce'], + }), + ('geometry', '0.4.5', { + 'checksums': ['8fedd17c64468721d398e3c17a39706321ab71098b29f5e8d8039dd115a220d8'], + }), + ('bit', '4.0.4', { + 'checksums': ['e404841fbe4ebefe4ecd4392effe673a8c9fa05f97952c4ce6e2f6159bd2f168'], + }), + ('filehash', '2.4-2', { + 'checksums': ['b6d056f75d45e315943a4618f5f62802612cd8931ba3f9f474b595140a3cfb93'], + }), + ('ff', '4.0.5', { + 'checksums': ['9aba9e271144ec224063ddba0d791e2fcdb9c912d48fdc49e204fce628355037'], + }), + ('bnlearn', '4.7', { + 'checksums': ['2e1dd7ba9b7cf07e51eec3238684310edbeb0573d9b907049fb6b28db3022817'], + }), + ('bootstrap', '2019.6', { + 'checksums': ['5252fdfeb944cf1fae35016d35f9333b1bd1fc8c6d4a14e33901160e21968694'], + }), + ('combinat', '0.0-8', { + 'checksums': ['1513cf6b6ed74865bfdd9f8ca58feae12b62f38965d1a32c6130bef810ca30c1'], + }), + ('deal', '1.2-39', { + 'checksums': ['a349db8f1c86cbd8315c068da49314ce9eb585dbb50d2e5ff09300506bd8806b'], + }), + ('fdrtool', '1.2.16', { + 'checksums': ['e7dea648ee018e2c8c8834084051c76f7e8b2b42067772c62035a941c32457a9'], + }), + ('formatR', '1.11', { + 'checksums': ['bd81662d09cf363652761e63ba5969c71be4dd5ae6fc9098f440d6729254a30c'], + }), + ('gtools', '3.9.2', { + 'checksums': ['03b1898bf581f6d12fa90e23ff700cfa7c834ac10c6654bdac42d7ec943fa953'], + }), + ('gdata', '2.18.0', { + 'checksums': ['4b287f59f5bbf5fcbf18db16477852faac4a605b10c5284c46b93fa6e9918d7f'], + }), + ('GSA', '1.03.1', { + 'checksums': ['e192d4383f53680dbd556223ea5f8cad6bae62a80a337ba5fd8d05a8aee6a917'], + }), + ('xfun', '0.27', { + 'checksums': ['c775bf33a6bc57f8022960cbf7dc20a4e82175a9c71807b2723f46ade6805485'], + }), + ('highr', '0.9', { + 'checksums': ['beff11390d936c90fdcc00e7ed0eb72220f3de403a51b56659e3d3e0b6d8ed4d'], + }), + ('infotheo', '1.2.0', { + 'checksums': ['9b47ebc3db5708c88dc014b4ffec6734053a9c255a9241fcede30fec3e63aaa3'], + }), + ('lars', '1.2', { + 'checksums': ['64745b568f20b2cfdae3dad02fba92ebf78ffee466a71aaaafd4f48c3921922e'], + }), + ('lazy', '1.2-16', { + 'checksums': ['c796c8b987ed1bd9dfddd593e17312ed681fc4fa3a1ecfe51da2def0ac1e50df'], + }), + ('kernlab', '0.9-29', { + 'checksums': ['c3da693a0041dd34f869e7b63a8d8cf7d4bc588ac601bcdddcf7d44f68b3106f'], + }), + ('mime', '0.12', { + 'checksums': ['a9001051d6c1e556e881910b1816b42872a1ee41ab76d0040ce66a27135e3849'], + }), + ('markdown', '1.1', { + 'checksums': ['8d8cd47472a37362e615dbb8865c3780d7b7db694d59050e19312f126e5efc1b'], + }), + ('mlbench', '2.1-3', { + 'checksums': ['b1f92be633243185ab86e880a1e1ac5a4dd3c535d01ebd187a4872d0a8c6f194'], + }), + ('NLP', '0.2-1', { + 'checksums': ['05eaa453ad2757311c073fd30093c738b20a977c5089031eb454345a1d01f2b6'], + }), + ('mclust', '5.4.7', { + 'checksums': ['45f5a666caee5bebd3160922b8655295a25e37f624741f6574365e4ac5a14c23'], + }), + ('RANN', '2.6.1', { + 'checksums': ['b299c3dfb7be17aa41e66eff5674fddd2992fb6dd3b10bc59ffbf0c401697182'], + }), + ('rmeta', '3.0', { + 'checksums': ['b9f9d405935cffcd7a5697ff13b033f9725de45f4dc7b059fd68a7536eb76b6e'], + }), + ('segmented', '1.3-4', { + 'checksums': ['8276bfbb3e5c1d7a9a61098f72ac9b2b0f52c89ae9f9b715f76b22303cc3902d'], + }), + ('som', '0.3-5.1', { + 'checksums': ['a6f4c0e5b36656b7a8ea144b057e3d7642a8b71972da387a7133f3dd65507fb9'], + }), + ('SuppDists', '1.1-9.5', { + 'checksums': ['680b67145c07d44e200275e08e48602fe19cd99fb106c05422b3f4a244c071c4'], + }), + ('stabledist', '0.7-1', { + 'checksums': ['06c5704d3a3c179fa389675c537c39a006867bc6e4f23dd7e406476ed2c88a69'], + }), + ('survivalROC', '1.0.3', { + 'checksums': ['1449e7038e048e6ad4d3f7767983c0873c9c7a7637ffa03a4cc7f0e25c31cd72'], + }), + ('pspline', '1.0-18', { + 'checksums': ['f71cf293bd5462e510ac5ad16c4a96eda18891a0bfa6447dd881c65845e19ac7'], + }), + ('timeDate', '3043.102', { + 'checksums': ['377cba03cddab8c6992e31d0683c1db3a73afa9834eee3e95b3b0723f02d7473'], + }), + ('longmemo', '1.1-2', { + 'checksums': ['7964e982287427dd58f98e1144e468ae0cbd572d25a4bea6ca9ae9c7522f3207'], + }), + ('ADGofTest', '0.3', { + 'checksums': ['9cd9313954f6ecd82480d373f6c5371ca84ab33e3f5c39d972d35cfcf1096846'], + }), + ('MASS', '7.3-54', { + 'checksums': ['eb644c0e94b447c46387aa22436ef5a43192960ee9cfd0df2940f4a4116179ae'], + }), + ('pixmap', '0.4-12', { + 'checksums': ['893ba894d4348ba05e6edf9c1b4fd201191816b444a214f7a6b2c0a79b0a2aec'], + }), + ('lattice', '0.20-45', { + 'checksums': ['22388d92bdb7d3959da84d7308d9026dd8226ef07580783729e8ad2f7d7507ad'], + }), + ('sp', '1.4-5', { + 'checksums': ['6beeb216d540475cdead5f2c72d6c7ee400fe2423c1882d72cf57f6df58f09da'], + }), + ('pkgconfig', '2.0.3', { + 'checksums': ['330fef440ffeb842a7dcfffc8303743f1feae83e8d6131078b5a44ff11bc3850'], + }), + ('rlang', '0.4.12', { + 'checksums': ['2a26915738be120a56ec93e781bcb50ffa1031e11904544198b4a15c35029915'], + }), + ('ellipsis', '0.3.2', { + 'checksums': ['a90266e5eb59c7f419774d5c6d6bd5e09701a26c9218c5933c9bce6765aa1558'], + }), + ('digest', '0.6.28', { + 'checksums': ['4a328c75e95f8522fc07390d1dd00c19fb643f558e761a8aed04f99c1dc7db00'], + }), + ('glue', '1.4.2', { + 'checksums': ['9f7354132a26e9a876428fa87629b9aaddcd558f9932328e6ac065b95b8ef7ad'], + }), + ('vctrs', '0.3.8', { + 'checksums': ['7f4e8b75eda115e69dddf714f0643eb889ad61017cdc13af24389aab2a2d1bb1'], + }), + ('lifecycle', '1.0.1', { + 'checksums': ['1da76e1c00f1be96ca34e122ae611259430bf99d6a1b999fdef70c00c30f7ba0'], + }), + ('hms', '1.1.1', { + 'checksums': ['6b5f30db1845c70d27b5de33f31caa487cdd0787cd80a4073375e5f482269062'], + }), + ('prettyunits', '1.1.1', { + 'checksums': ['9a199aa80c6d5e50fa977bc724d6e39dae1fc597a96413053609156ee7fb75c5'], + }), + ('R6', '2.5.1', { + 'checksums': ['8d92bd29c2ed7bf15f2778618ffe4a95556193d21d8431a7f75e7e5fc102bf48'], + }), + ('crayon', '1.4.2', { + 'checksums': ['ee34397f643e76e30588068d4c93bd3c9afd2193deacccacb3bffcadf141b857'], + }), + ('progress', '1.2.2', { + 'checksums': ['b4a4d8ed55db99394b036a29a0fb20b5dd2a91c211a1d651c52a1023cc58ff35'], + }), + ('ade4', '1.7-18', { + 'checksums': ['ecb6f4c42c60f39702aa96f454bb536a333049c9608ee2b6bdf8795e059cc525'], + }), + ('AlgDesign', '1.2.0', { + 'checksums': ['ff86c9e19505770520e7614970ad19c698664d08001ce888b8603e44c2a3b52a'], + }), + ('base64enc', '0.1-3', { + 'checksums': ['6d856d8a364bcdc499a0bf38bfd283b7c743d08f0b288174fba7dbf0a04b688d'], + }), + ('BH', '1.75.0-0', { + 'checksums': ['ae4c10992607dd697663f60675a46a5770851da159330bb63c4a68890bdd6f5a'], + }), + ('brew', '1.0-6', { + 'checksums': ['d70d1a9a01cf4a923b4f11e4374ffd887ad3ff964f35c6f9dc0f29c8d657f0ed'], + }), + ('Brobdingnag', '1.2-6', { + 'checksums': ['19eccaed830ce9d93b70642f6f126ac66722a98bbd48586899cc613dd9966ad4'], + }), + ('corpcor', '1.6.10', { + 'checksums': ['71a04c503c93ec95ddde09abe8c7ddeb36175b7da76365a14b27066383e10e09'], + }), + ('longitudinal', '1.1.12', { + 'checksums': ['d4f894c38373ba105b1bdc89e3e7c1b215838e2fb6b4470b9f23768b84e603b5'], + }), + ('backports', '1.3.0', { + 'checksums': ['4f231e91ca8298fb1a27810ef5dd4c84e05c2b2b6f6748eab68f70ff4827812d'], + }), + ('checkmate', '2.0.0', { + 'checksums': ['0dc25b0e20c04836359df1885d099c6e4ad8ae0e585a9e4107f7ea945d9c6fa4'], + }), + ('cubature', '2.0.4.2', { + 'checksums': ['605bdd9d90fb6645359cccd1b289c5afae235b46360ef5bdd2001aa307a7694e'], + }), + ('DEoptimR', '1.0-9', { + 'checksums': ['6151aa74f52ff4be664343e3992749e63235ebba51c9fded3775c1a2407c6512'], + }), + ('fastmatch', '1.1-3', { + 'checksums': ['1defa0b08bc3f48e4c3e4ba8df4f1b9e8299932fd8c747c67d32de44f90b9861'], + }), + ('ffbase', '0.13.3', { + 'checksums': ['b3f61f80ba6851130247779786903d42a24ee5219aa24556c8470aece8a2e6b6'], + }), + ('iterators', '1.0.13', { + 'checksums': ['778e30e4c292da9f94d62acc637cf55273dae258199d847e62658f44840f11a4'], + }), + ('maps', '3.4.0', { + 'checksums': ['7918ccb2393ca19589d4c4e77d9ebe863dc6317ebfc1ff41869dbfaf439f5747'], + }), + ('nnls', '1.4', { + 'checksums': ['0e5d77abae12bc50639d34354f96a8e079408c9d7138a360743b73bd7bce6c1f'], + }), + ('sendmailR', '1.2-1', { + 'checksums': ['04feb08c6c763d9c58b2db24b1222febe01e28974eac4fe87670be6fb9bff17c'], + }), + ('dotCall64', '1.0-1', { + 'checksums': ['f10b28fcffb9453b1d8888a72c8fd2112038b5ac33e02a481492c7bd249aa5c6'], + }), + ('spam', '2.7-0', { + 'checksums': ['632b5c48f587a34c997a487b72099c9c89d76a43f2cd9a36cb95fdec1d07850d'], + }), + ('subplex', '1.6', { + 'checksums': ['0d05da1622fffcd20a01cc929fc6c2b7df40a8246e7018f7f1f3c175b774cbf9'], + }), + ('stringi', '1.7.5', { + 'checksums': ['2914cc34e1cbfb65147090263b0e1bf2727ad32bc9bb860732094fecff4b2565'], + }), + ('magrittr', '2.0.1', { + 'checksums': ['75c265d51cc2b34beb27040edb09823c7b954d3990a7a931e40690b75d4aad5f'], + }), + ('stringr', '1.4.0', { + 'checksums': ['87604d2d3a9ad8fd68444ce0865b59e2ffbdb548a38d6634796bbd83eeb931dd'], + }), + ('evaluate', '0.14', { + 'checksums': ['a8c88bdbe4e60046d95ddf7e181ee15a6f41cdf92127c9678f6f3d328a3c5e28'], + }), + ('logspline', '2.1.16', { + 'checksums': ['7418491b8c778483c24e4354ee47b1e1b1d68b0057c12d6e012cce7d4e6c138a'], + }), + ('ncbit', '2013.03.29', { + 'checksums': ['4480271f14953615c8ddc2e0666866bb1d0964398ba0fab6cc29046436820738'], + }), + ('permute', '0.9-5', { + 'checksums': ['d2885384a07497e8df273689d6713fc7c57a7c161f6935f3572015e16ab94865'], + }), + ('plotrix', '3.8-2', { + 'checksums': ['bb72953102889cea41cd6521874e35d2458ebd10aab97ba6f262e102cac0bc1f'], + }), + ('randomForest', '4.6-14', { + 'checksums': ['f4b88920419eb0a89d0bc5744af0416d92d112988702dc726882394128a8754d'], + }), + ('scatterplot3d', '0.3-41', { + 'checksums': ['4c8326b70a3b2d37126ca806771d71e5e9fe1201cfbe5b0d5a0a83c3d2c75d94'], + }), + ('SparseM', '1.81', { + 'checksums': ['bd838f381ace680fa38508ff70b3d83cb9ffa28ac1ab568509249bca53c34b33'], + }), + ('tripack', '1.3-9.1', { + 'checksums': ['7f82f8d63741c468767acc6fb35281bd9903f6c3c52e8fada60a6ae317511fbe'], + }), + ('irace', '3.4.1', { + 'checksums': ['7eea92ba42e6ba320fa8bdca3c53091ae42f26a0f097244f65e7e117f6d514b6'], + }), + ('rJava', '1.0-5', { + 'checksums': ['2fdba5774f6333440e0ef6d96567b37f9f382820242a4d885f2891796fb36fde'], + }), + ('RColorBrewer', '1.1-2', { + 'checksums': ['f3e9781e84e114b7a88eb099825936cc5ae7276bbba5af94d35adb1b3ea2ccdd'], + }), + ('png', '0.1-7', { + 'checksums': ['e269ff968f04384fc9421d17cfc7c10cf7756b11c2d6d126e9776f5aca65553c'], + }), + ('jpeg', '0.1-9', { + 'checksums': ['01a175442ec209b838a56a66a3908193aca6f040d537da7838d9368e46913072'], + }), + ('latticeExtra', '0.6-29', { + 'checksums': ['6cadc31d56f73d926e2e8d72e43ae17ac03607a4d1a374719999a4a231e3df11'], + }), + ('Matrix', '1.3-4', { + 'checksums': ['ab42179d44545e99bbdf44bb6d04cab051dd2aba552b1f6edd51ed71b55f6c39'], + }), + ('RcppArmadillo', '0.10.7.0.0', { + 'checksums': ['01a8eac49d5b2bcefcba076f0ee7b234bee3d22d54d7f4d56d9a6ae7cbea65f4'], + }), + ('plyr', '1.8.6', { + 'checksums': ['ea55d26f155443e9774769531daa5d4c20a0697bb53abd832e891b126c935287'], + }), + ('gtable', '0.3.0', { + 'checksums': ['fd386cc4610b1cc7627dac34dba8367f7efe114b968503027fb2e1265c67d6d3'], + }), + ('reshape2', '1.4.4', { + 'checksums': ['d88dcf9e2530fa9695fc57d0c78adfc5e361305fe8919fe09410b17da5ca12d8'], + }), + ('dichromat', '2.0-0', { + 'checksums': ['31151eaf36f70bdc1172da5ff5088ee51cc0a3db4ead59c7c38c25316d580dd1'], + }), + ('colorspace', '2.0-2', { + 'checksums': ['b891cd2ec129ed5f116429345947bcaadc33969758a108521eb0cf36bd12183a'], + }), + ('munsell', '0.5.0', { + 'checksums': ['d0f3a9fb30e2b5d411fa61db56d4be5733a2621c0edf017d090bdfa5e377e199'], + }), + ('labeling', '0.4.2', { + 'checksums': ['e022d79276173e0d62bf9e37d7574db65ab439eb2ae1833e460b1cff529bd165'], + }), + ('viridisLite', '0.4.0', { + 'checksums': ['849955dc8ad9bc52bdc50ed4867fd92a510696fc8294e6971efa018437c83c6a'], + }), + ('farver', '2.1.0', { + 'checksums': ['e5c8630607049f682fb3002b99ca4f5e7c6b94f8b2a4342df594e7853b77cef4'], + }), + ('scales', '1.1.1', { + 'checksums': ['40b2b66522f1f314a20fd09426011b0cdc9d16b23ee2e765fe1930292dd03705'], + }), + ('utf8', '1.2.2', { + 'checksums': ['a71aee87d43a9bcf29249c7a5a2e9ca1d2a836e8d5ee3a264d3062f25378d8f4'], + }), + ('zeallot', '0.1.0', { + 'checksums': ['439f1213c97c8ddef9a1e1499bdf81c2940859f78b76bc86ba476cebd88ba1e9'], + }), + ('assertthat', '0.2.1', { + 'checksums': ['85cf7fcc4753a8c86da9a6f454e46c2a58ffc70c4f47cac4d3e3bcefda2a9e9f'], + }), + ('fansi', '0.5.0', { + 'checksums': ['9d1bf8c316969c163abd3dd41cc1425b2671df9471fe806bf8783794a19ca54f'], + }), + ('cli', '3.1.0', { + 'checksums': ['c70a61830bf706a84c59eb74a809978846cee93742198ab4192742a5df1ace11'], + }), + ('pillar', '1.6.4', { + 'checksums': ['033a92a271ddeec2a17323d070de8257b9ca4d57f5be6181e2ad35fe7e1ea19e'], + }), + ('tibble', '3.1.5', { + 'checksums': ['da6387ba683a67cd7fc2a111f6b62468e480a8078bc1867d433a40c5460edbe7'], + }), + ('lazyeval', '0.2.2', { + 'checksums': ['d6904112a21056222cfcd5eb8175a78aa063afe648a562d9c42c6b960a8820d4'], + }), + ('withr', '2.4.2', { + 'checksums': ['48f96a4cb780cf6fd5fbbea1f1eb04ea3102d7a4a644cae1ed1e91139dcbbac8'], + }), + ('nlme', '3.1-153', { + 'checksums': ['3d27a98edf1b16ee868949e823ac0babbf10c937a7220d648b7ef9480cd680e3'], + }), + ('mgcv', '1.8-38', { + 'checksums': ['cd12ed5787d6fdcead34e782e48b62b3f9efd523616c906e2da77bd9c142ddbb'], + }), + ('rprojroot', '2.0.2', { + 'checksums': ['5fa161f0d4ac3b7a99dc6aa2d832251001dc92e93c828593a51fe90afd019e1f'], + }), + ('desc', '1.4.0', { + 'checksums': ['8220e4c706449b8121b822e70b1414f391ef419aed574836a234c63b83e5d649'], + }), + ('ps', '1.6.0', { + 'checksums': ['89ad7ddc5e0818bccacfd0673ddf2da0892ac2a3b4d3a821e40884ab1e96bf31'], + }), + ('processx', '3.5.2', { + 'checksums': ['ed6f2d1047461c6061e6ed58fb6de65a289b56009867892abad76c6bba46fc2b'], + }), + ('callr', '3.7.0', { + 'checksums': ['d67255148595c6d0ba4c4d241bc9f6b5e00cafe25fdc13e38c10acc38653360a'], + }), + ('pkgbuild', '1.2.0', { + 'checksums': ['2e19308d3271fefd5e118c6d132d6a2511253b903620b5417892c72d2010a963'], + }), + ('rstudioapi', '0.13', { + 'checksums': ['aac35bbdcb4a8e8caba943bc8a2b98120e8940b80cd1020224bb1a26ff776d8b'], + }), + ('pkgload', '1.2.3', { + 'checksums': ['105ae5b2caca495bd0702757c5c676353cca8525954d0822f07103ca8a54b349'], + }), + ('praise', '1.0.0', { + 'checksums': ['5c035e74fd05dfa59b03afe0d5f4c53fbf34144e175e90c53d09c6baedf5debd'], + }), + ('brio', '1.1.2', { + 'checksums': ['42dde6953151e31cc38bbec72335c01ac9e755cc07d11e26f4e1fcd0f9f471ef'], + }), + ('jsonlite', '1.7.2', { + 'checksums': ['06354b50435942f67ba264f79831e577809ef89e5f9a5a2201985396fe651fd2'], + }), + ('diffobj', '0.3.5', { + 'checksums': ['d860a79b1d4c9e369282d7391b539fe89228954854a65ba47181407c53e3cf60'], + }), + ('rematch2', '2.1.2', { + 'checksums': ['fe9cbfe99dd7731a0a2a310900d999f80e7486775b67f3f8f388c30737faf7bb'], + }), + ('waldo', '0.3.1', { + 'checksums': ['ec2c8c1afbc413f8db8b6b0c6970194a875f616ad18e1e72a004bc4497ec019b'], + }), + ('testthat', '3.1.0', { + 'checksums': ['e714b105891a766d03d5bab09d705b1f6c23f04db56dfe310bff8cfa00464987'], + }), + ('isoband', '0.2.5', { + 'checksums': ['46f53fa066f0966f02cb2bf050190c0d5e950dab2cdf565feb63fc092c886ba5'], + }), + ('ggplot2', '3.3.5', { + 'checksums': ['b075294faf3af31b18e415f260c62d6000b218770e430484fe38819bdc3224ea'], + }), + ('pROC', '1.18.0', { + 'checksums': ['d5ef54b384176ece6d6448014ba40570a98181b58fee742f315604addb5f7ba9'], + }), + ('quadprog', '1.5-8', { + 'checksums': ['22128dd6b08d3516c44ff89276719ad4fe46b36b23fdd585274fa3a93e7a49cd'], + }), + ('BB', '2019.10-1', { + 'checksums': ['04d0b6ce6e5f070b109478a6005653dbe78613bb4e3ea4903203d851b5d3c94d'], + }), + ('BBmisc', '1.11', { + 'checksums': ['1ea48c281825349d8642a661bb447e23bfd651db3599bf72593bfebe17b101d2'], + }), + ('fail', '1.3', { + 'checksums': ['ede8aa2a9f2371aff5874cd030ac625adb35c33954835b54ab4abf7aeb34d56d'], + }), + ('rlecuyer', '0.3-5', { + 'checksums': ['4723434ff7624d4f404a6854ffa0673fc43daa46f58f064dbeeaa17da28ab626'], + }), + ('snow', '0.4-4', { + 'checksums': ['84587f46f222a96f3e2fde10ad6ec6ddbd878f4e917cd926d632f61a87db13c9'], + }), + ('tree', '1.0-41', { + 'checksums': ['21cf995b187d97de0bce8330973a52c46235db0fc09a133cad26283b7a6f5c8e'], + }), + ('pls', '2.8-0', { + 'checksums': ['eff3a92756ca34cdc1661fa36d2bf7fc8e9f4132d2f1ef9ed0105c83594618bf'], + }), + ('class', '7.3-19', { + 'checksums': ['9012f5c65384b441b5738ed7bd18ea735884bab32b31776e80cf3679f38a3769'], + }), + ('proxy', '0.4-26', { + 'checksums': ['676bad821343974e0297a0566c4bf0cf0ea890104906a745b87d3b5989c81a4d'], + }), + ('e1071', '1.7-9', { + 'checksums': ['9bf9a15e7ce0b9b1a57ce3048d29cbea7f2a5bb2e91271b1b6aaafe07c852226'], + }), + ('nnet', '7.3-16', { + 'checksums': ['c5b73eb4fff0d225e14f898cec987a7a88796b6e70cde4cf277374428f2d5c13'], + }), + ('minqa', '1.2.4', { + 'checksums': ['cfa193a4a9c55cb08f3faf4ab09c11b70412523767f19894e4eafc6e94cccd0c'], + }), + ('RcppEigen', '0.3.3.9.1', { + 'checksums': ['8a0486249b778a4275a1168fc89fc7fc49c2bb031cb14b50a50089acae7fe962'], + }), + ('MatrixModels', '0.5-0', { + 'checksums': ['a87faf1a185219f79ea2307e6787d293e1d30bf3af9398e8cfe1e079978946ed'], + }), + ('matrixStats', '0.61.0', { + 'checksums': ['dbd3c0ec59b1ae62ff9b4c2c90c4687cbd680d1796f6fdd672319458d4d2fd9a'], + }), + ('codetools', '0.2-18', { + 'checksums': ['1a9ea6b9792dbd1688078455929385acc3a5e4bef945c77bec1261fa4a084c28'], + }), + ('foreach', '1.5.1', { + 'checksums': ['fb5ad69e295618c52b2ac7dff84a0771462870a97345374d43b3de2dc31a68e1'], + }), + ('data.table', '1.14.2', { + 'checksums': ['f741b951e5937440139514aedbae78dbd6862d825066848bdb006aa02c2f3d2b'], + }), + ('ModelMetrics', '1.2.2.2', { + 'checksums': ['5e06f1926aebca5654e1329c66ef19b04058376b2277ebb16e3bf8c208d73457'], + }), + ('generics', '0.1.1', { + 'checksums': ['a2478ebf1a0faa8855a152f4e747ad969a800597434196ed1f71975a9eb11912'], + }), + ('purrr', '0.3.4', { + 'checksums': ['23ebc93bc9aed9e7575e8eb9683ff4acc0270ef7d6436cc2ef4236a9734840b2'], + }), + ('tidyselect', '1.1.1', { + 'checksums': ['18eb6a6746196a81ce19ee6cbf1db0c33f494177b97e2419312ef25a00ae486b'], + }), + ('dplyr', '1.0.7', { + 'checksums': ['d2fe3aedbce02fdddce09a8a80f85f5918a9d1f15f792ad4a98f254959d7123d'], + }), + ('gower', '0.2.2', { + 'checksums': ['3f022010199fafe34f6e7431730642a76893e6b4249b84e5a61012cb83483631'], + }), + ('rpart', '4.1-15', { + 'checksums': ['2b8ebe0e9e11592debff893f93f5a44a6765abd0bd956b0eb1f70e9394cfae5c'], + }), + ('survival', '3.2-13', { + 'checksums': ['3fab9c0ba2c4e2b6a475207e2629a7f06a104c70093dfb768f50a7caac9a317f'], + }), + ('KernSmooth', '2.23-20', { + 'checksums': ['20eb75051e2473933d41eedc9945b03c632847fd581e2207d452cf317fa5ec39'], + }), + ('globals', '0.14.0', { + 'checksums': ['203dbccb829ca9cc6aedb6f5e79cb126ea31f8dd379dff9111ec66e3628c32f3'], + }), + ('listenv', '0.8.0', { + 'checksums': ['fd2aaf3ff2d8d546ce33d1cb38e68401613975117c1f9eb98a7b41facf5c485f'], + }), + ('parallelly', '1.28.1', { + 'checksums': ['f4ae883b18409adb83c561ed69427e740e1b50bf85ef57f48c3f2edf837cc663'], + }), + ('future', '1.23.0', { + 'checksums': ['d869c80e837c0937a414b8050deff081aefeac586b796f3d634d64f0f4fdb8f8'], + }), + ('future.apply', '1.8.1', { + 'checksums': ['0d5bc3cb0289665bb27ae4ccad51fcc5ebf6dca46872b0a4e57790b9dc0aa6c7'], + }), + ('progressr', '0.9.0', { + 'checksums': ['cfe70f8423041ea5b5a2a39122c166462e58b1bba84df935858a7b86362b530f'], + }), + ('numDeriv', '2016.8-1.1', { + 'checksums': ['d8c4d19ff9aeb31b0c628bd4a16378e51c1c9a3813b525469a31fe89af00b345'], + }), + ('SQUAREM', '2021.1', { + 'checksums': ['66e5e18ca29903e4950750bbd810f0f9df85811ee4195ce0a86d939ba8183a58'], + }), + ('lava', '1.6.10', { + 'checksums': ['7a88f8a885872e2abb3011c446e9e1c4884cd4dbe6ab4cfe9207538e5560232e'], + }), + ('prodlim', '2019.11.13', { + 'checksums': ['6809924f503a14681de84730489cdaf9240d7951c64f5b98ca37dc1ce7809b0f'], + }), + ('ipred', '0.9-12', { + 'checksums': ['d6e1535704d39415a799d7643141ffa4f6f55597f03e763f4ccd5d8106005843'], + }), + ('cpp11', '0.4.0', { + 'checksums': ['1768fd07dc30dfbbf8f3fb1a1183947cb7e1dfd909165c4d612a63c163a41e87'], + }), + ('lubridate', '1.8.0', { + 'checksums': ['87d66efdb1f3d680db381d7e40a202d35645865a0542e2f270ef008a19002ba5'], + }), + ('tidyr', '1.1.4', { + 'checksums': ['0b0c98be98a433e15a2550f60330b31a58529a9c58bc2abd7bff6462ab761241'], + }), + ('recipes', '0.1.17', { + 'checksums': ['ed20ba0ea0165310e31864ed7d2e005a2a37b76c7913977fd124d8b567616d3d'], + }), + ('caret', '6.0-90', { + 'checksums': ['e851a4ed7d939c665e57e3551a5464b09fe4285e7c951236efdd890b0da866bc'], + }), + ('conquer', '1.2.0', { + 'checksums': ['10451223658e02b31b87f7f86a14e3d8c71bfbff62ea30f85b89cdef829f07f9'], + }), + ('quantreg', '5.86', { + 'checksums': ['71d1c829af7574ca00575cc0375376ac3ecd54b3d6d36e8eecd71ed8acb9d605'], + }), + ('robustbase', '0.93-9', { + 'checksums': ['d75fb5075463fec61d063bced7003936e9198492328b6fae15f67e8415713c45'], + }), + ('zoo', '1.8-9', { + 'checksums': ['b7be259067a8b9d4a8f5d387e0946a5ba1eb43474baa67ccf4f8bf4b15f772a3'], + }), + ('lmtest', '0.9-38', { + 'checksums': ['32a22cea45398ffc5732d9f5c0391431d0cdd3a9e29cc7b77bea32c1eb4a216b'], + }), + ('vcd', '1.4-9', { + 'checksums': ['a5b420ad5ff1a27fa92f98099a8b43f2dded7e5f60297b3e4d947ad6f039568f'], + }), + ('snowfall', '1.84-6.1', { + 'checksums': ['5c446df3a931e522a8b138cf1fb7ca5815cc82fcf486dbac964dcbc0690e248d'], + }), + ('bindr', '0.1.1', { + 'checksums': ['7c785ca77ceb3ab9282148bcecf64d1857d35f5b800531d49483622fe67505d0'], + }), + ('plogr', '0.2.0', { + 'checksums': ['0e63ba2e1f624005fe25c67cdd403636a912e063d682eca07f2f1d65e9870d29'], + }), + ('bindrcpp', '0.2.2', { + 'checksums': ['48130709eba9d133679a0e959e49a7b14acbce4f47c1e15c4ab46bd9e48ae467'], + }), + ('tmvnsim', '1.0-2', { + 'checksums': ['97f63d0bab3b240cc7bdbe6e6e74e90ad25a4382a345ee51a26fe3959edeba0f'], + }), + ('mnormt', '2.0.2', { + 'checksums': ['5c6aa036d3f1035ffe8f9a8e95bb908b191b126b016591cf893c50472851f334'], + }), + ('foreign', '0.8-81', { + 'checksums': ['1ae8f9f18f2a037697fa1a9060417ff255c71764f0145080b2bd23ba8262992c'], + }), + ('psych', '2.1.9', { + 'checksums': ['1475e03a17f1ae6837834f01c2472aed68887c89d90a84a3e09a532ce218500c'], + }), + ('broom', '0.7.10', { + 'checksums': ['129fd5a53abef7f42b7efac6c64ebd71269b136aa648846d640562357927464f'], + }), + ('nloptr', '1.2.2.2', { + 'checksums': ['e80ea9619ac18f4bfe44812198b40b9ae5c0ddf3f9cc91778f9ccc82168d1372'], + }), + ('boot', '1.3-28', { + 'checksums': ['9f7158fd2714659f590c3955651893dc24bd8f39196bc5a4cc35b0b031744a32'], + }), + ('statmod', '1.4.36', { + 'checksums': ['14e897c83d426caca4d920d3d5bead7ae9a679276b3cb2e227f299ad189d7bc2'], + }), + ('lme4', '1.1-27.1', { + 'checksums': ['25fa873e39b8192e48c15eec93db8c8bf6f03baf3bd8d5ca9188482ce8442ec5'], + }), + ('ucminf', '1.1-4', { + 'checksums': ['a2eb382f9b24e949d982e311578518710f8242070b3aa3314a331c1e1e7f6f07'], + }), + ('ordinal', '2019.12-10', { + 'checksums': ['7a41e7b7e852a8fa3e911f8859d36e5709ccec5ca42ee3de14a813b7aaac7725'], + }), + ('jomo', '2.7-2', { + 'checksums': ['3962d5cbecc60e72670329dbef0dd74303080f5ea2a79c91e27f75db99ba6ce9'], + }), + ('clipr', '0.7.1', { + 'checksums': ['ffad477b07847e3b68f7e4406bbd323025a8dae7e3c768943d4d307ee3248afb'], + }), + ('tzdb', '0.2.0', { + 'checksums': ['c335905d452b400af7ed54b916b5246cb3f47ede0602911a2bcb25a1cf56d5a9'], + }), + ('bit64', '4.0.5', { + 'checksums': ['25df6826ea5e93241c4874cad4fa8dadc87a40f4ff74c9107aa12a9e033e1578'], + }), + ('vroom', '1.5.5', { + 'checksums': ['1d45688c08f162a3300eda532d9e87d144f4bc686769a521bf9a12e3d3b465fe'], + }), + ('readr', '2.0.2', { + 'checksums': ['98b05ed751dda2bcf7a29d070ce3d3e8475e0138a3e3ec68941dc45218db7615'], + }), + ('forcats', '0.5.1', { + 'checksums': ['c4fb96e874e2bedaa8a1aa32ea22abdee7906d93b5c5c7b42c0894c0c5b6a289'], + }), + ('haven', '2.4.3', { + 'checksums': ['95b70f47e77792bed4312441787299d2e3e27d79a176f0638a37e5301b93295f'], + }), + ('pan', '1.6', { + 'checksums': ['adc0df816ae38bc188bce0aef3aeb71d19c0fc26e063107eeee71a81a49463b6'], + }), + ('mitml', '0.4-3', { + 'checksums': ['49bd3eb68a60fb2a269e7ddca8b862e1e81e0651e2b29759482fb7bcad452102'], + }), + ('mice', '3.13.0', { + 'checksums': ['5108e4673512c96ced19c23fdbb0feea2b2a655a4c7dc9afb06a2a1a29f69785'], + }), + ('urca', '1.3-0', { + 'checksums': ['621cc82398e25b58b4a16edf000ed0a1484d9a0bc458f734e97b6f371cc76aaa'], + }), + ('fracdiff', '1.5-1', { + 'checksums': ['b8103b32a4ca3a59dda1624c07da08ecd144c7a91a747d1f4663e99421950eb6'], + }), + ('operator.tools', '1.6.3', { + 'checksums': ['e5b74018fb75bfa02820dec4b822312f1640422f01d9fec1b58d880ffb798dec'], + }), + ('formula.tools', '1.7.1', { + 'checksums': ['4fe0e72d9d96f2398e86cbd8536d0c84de38e5583d4ff7dcd73f415ddd8ca395'], + }), + ('logistf', '1.24', { + 'checksums': ['6561d311fe21b789954cb33c008b86abdd6509b2a2900385dd6046163679d96b'], + }), + ('akima', '0.6-2.2', { + 'checksums': ['deefc9ff82f78e68b7333c2fc88bd23863da9919493f2b73658044436f6b8742'], + }), + ('bitops', '1.0-7', { + 'checksums': ['e9b5fc92c39f94a10cd0e13f3d6e2a9c17b75ea01467077a51d47a5f708517c4'], + }), + ('mixtools', '1.2.0', { + 'checksums': ['ef033ef13625209065d26767bf70d129972e6808927f755629f1d70a118b9023'], + }), + ('cluster', '2.1.2', { + 'checksums': ['5c8aa760fb6dda4fcfe6196e561ffcd2dc12b1a6c7659cb90be2cde747311499'], + }), + ('gclus', '1.3.2', { + 'checksums': ['9cc61cdff206c11213e73afca3d570a7234250cf6044a9202c2589932278e0b3'], + }), + ('coda', '0.19-4', { + 'checksums': ['422d3cfd34797a3631e9c4812431940599c0ca4bb9937797bed07b7b1d6fe58f'], + }), + ('doMC', '1.3.7', { + 'checksums': ['defab27adc298a6746896d83251f8355d62c01012d51ef96d491875a2e74b54d'], + }), + ('DBI', '1.1.1', { + 'checksums': ['572ab3b8a6421d0ac3e7665c4c842826f1723af98fca25d4f43edb419e771344'], + }), + ('gam', '1.20', { + 'checksums': ['91eb416ba06aa1c3f611661530467f4513992f6c168e3f6e474cf57bae131efe'], + }), + ('gamlss.data', '6.0-1', { + 'checksums': ['98fdec571aeacea4318c9e1c9d56b74716f3dc6acce385cbaad0d6128b154bb2'], + }), + ('gamlss.dist', '5.3-2', { + 'checksums': ['0caa92cd20c3d2d11b1af4656fd0de09adf145992345cba07fdcd33b7716ced3'], + }), + ('gamlss', '5.3-4', { + 'checksums': ['72707187471fd35c5379ae8c9b7b0ca87e302557f09cb3979d1cdb2e2500b01a'], + }), + ('gamlss.tr', '5.1-7', { + 'checksums': ['8f9975bceaf8000b1d39317daf490e59c8385b5291326ed6a2630be11dae3137'], + }), + ('hwriter', '1.3.2', { + 'checksums': ['6b3531d2e7a239be9d6e3a1aa3256b2745eb68aa0bdffd2076d36552d0d7322b'], + }), + ('xts', '0.12.1', { + 'checksums': ['d680584af946fc30be0b2046e838cff7b3a65e00df1eadba325ca5e96f3dca2c'], + }), + ('curl', '4.3.2', { + 'checksums': ['90b1facb4be8b6315bb3d272ba2dd90b88973f6ea1ab7f439550230f8500a568'], + }), + ('TTR', '0.24.2', { + 'checksums': ['2587b988d9199474a19470b9b999b99133d0d8aa45410813e05c5f0ed763711b'], + }), + ('quantmod', '0.4.18', { + 'checksums': ['aa40448e93a1facf399213ac691784007731e869ad243fe762381ab099cd6c35'], + }), + ('mvtnorm', '1.1-3', { + 'checksums': ['ff4e302139ba631280fc9c4a2ab168596bfd09e17a805974199b043697c02448'], + }), + ('pcaPP', '1.9-74', { + 'checksums': ['50837b434d67e4b5fcec34c689a9e30c7a9fb94c561b39f24e68a1456ff999b6'], + }), + ('pscl', '1.5.5', { + 'checksums': ['054c9b88a991abdec3338688f58e81b6ba55f91edb988621864b24fd152fee6f'], + }), + ('fastmap', '1.1.0', { + 'checksums': ['9113e526b4c096302cfeae660a06de2c4c82ae4e2d3d6ef53af6de812d4c822b'], + }), + ('cachem', '1.0.6', { + 'checksums': ['9a9452f7bcf3f79436c418b3c3290449fb8fd338714d9b992153754d112f1864'], + }), + ('memoise', '2.0.0', { + 'checksums': ['ff9ae3a1a95ad6271d98e6eca016768b790e44bd613356b8e86b685aefd9ecaf'], + }), + ('blob', '1.2.2', { + 'checksums': ['4976053c65994c769a4c22b4553bea0bd9c623b3b991dbaf023d2a164770c7fa'], + }), + ('RSQLite', '2.2.8', { + 'checksums': ['1b8adc1b7ed4bc5ec070b8765837cd4104fcdda482a1d335c030f51b427c4cc3'], + }), + ('BatchJobs', '1.8', { + 'checksums': ['35cc2dae31994b1df982d11939509ce965e12578418c4fbb8cd7a422afd6e4ff'], + }), + ('sandwich', '3.0-1', { + 'checksums': ['f6584b7084f3223bbc0c4722f53280496be73849747819b0cb4e8f3910284a89'], + }), + ('sfsmisc', '1.1-12', { + 'checksums': ['9b12184a28fff87cacd0c3602d0cf63acb4d0f3049ad3a6ff16177f6df350782'], + }), + ('spatial', '7.3-14', { + 'checksums': ['50e6daacbacff6c716485d20b15eb7fff7b8108dc5ea0ff508024beb4f0a8b9b'], + }), + ('VGAM', '1.1-5', { + 'checksums': ['30190b150f3e5478137d288a45f575b2654ad7c29254b0a1fe5c954ee010a1bb'], + }), + ('waveslim', '1.8.2', { + 'checksums': ['133c4f7a027282742fe99b583ca65f178fc7a3df2ce75cb4d60650f0a1dd7145'], + }), + ('xtable', '1.8-4', { + 'checksums': ['5abec0e8c27865ef0880f1d19c9f9ca7cc0fd24eadaa72bcd270c3fb4075fd1c'], + }), + ('profileModel', '0.6.1', { + 'checksums': ['91dc25e81f52506593f5c8d80a6131510b14525262f65b4ac10ae0cad0b2a506'], + }), + ('brglm', '0.7.2', { + 'checksums': ['56098d2ce238478e7a27cacc4cdec0bc65f287fe746b38fbb1edda20c1675023'], + }), + ('deSolve', '1.30', { + 'checksums': ['39f65d7af6b4d85eb023cce2a200c2de470644b22d45e210c5b7d558c3abf548'], + }), + ('tseriesChaos', '0.1-13.1', { + 'checksums': ['23cb5fea56409a305e02a523ff8b7642ec383942d415c9cffdc92208dacfd961'], + }), + ('tseries', '0.10-48', { + 'checksums': ['53bd22708c936205c5f839a10f2e302524d2cc54dc309e7d885ebd081ccb4471'], + }), + ('fastICA', '1.2-3', { + 'checksums': ['e9ef82644cb64bb49ae3b7b6e0885f4fb2dc08ae030f8c76fe8dd8507b658950'], + }), + ('R.methodsS3', '1.8.1', { + 'checksums': ['8a98fb81bcfa78193450f855f614f6f64e6c65daf115f301d97d1f474f5e619b'], + }), + ('R.oo', '1.24.0', { + 'checksums': ['37a1dab8dd668ceba69a1ba36c0c60e9809e29b74bd56d1e8ed519e19c8e3bb6'], + }), + ('sys', '3.4', { + 'checksums': ['17f88fbaf222f1f8fd07919461093dac0e7175ae3c3b3264b88470617afd0487'], + }), + ('askpass', '1.1', { + 'checksums': ['db40827d1bdbb90c0aa2846a2961d3bf9d76ad1b392302f9dd84cc2fd18c001f'], + }), + ('openssl', '1.4.5', { + 'checksums': ['4fc141aba8e94e9f5ecce6eda07e45a5e7048d8609ba909ede4f7f4933e0c1f7'], + }), + ('httr', '1.4.2', { + 'checksums': ['462bed6ed0d92f811d5df4d294336025f1dbff357286999d9269bfd9c20b1ef9'], + }), + ('cgdsr', '1.3.0', { + 'checksums': ['4aa2a3564cee2449c3ff39ab2ad631deb165d4c78b8107e0ff77a9095340cc1f'], + }), + ('R.utils', '2.11.0', { + 'checksums': ['622860f995f78be3a6e439f29d945874c5cb0866f6a73a9b43ac1d4d7f23fed8'], + }), + ('R.matlab', '3.6.2', { + 'checksums': ['1ba338f470a24b7f6ef68cadbd04eb468ead4a689f263d2642408ad591b786bb'], + }), + ('gridExtra', '2.3', { + 'checksums': ['81b60ce6f237ec308555471ae0119158b115463df696d2eca9b177ded8988e3b'], + }), + ('gbm', '2.1.8', { + 'checksums': ['7d5de3b980b8f23275e86ac9bed48a497c9aa53c58e407dfd676309f38272ec1'], + }), + ('Formula', '1.2-4', { + 'checksums': ['cb70e373b5ed2fc8450937fb3321d37dfd22dcc6f07cb872a419d51205125caf'], + }), + ('acepack', '1.4.1', { + 'checksums': ['82750507926f02a696f6cc03693e8d4a5ee7e92500c8c15a16a9c12addcd28b9'], + }), + ('proto', '1.0.0', { + 'checksums': ['9294d9a3b2b680bb6fac17000bfc97453d77c87ef68cfd609b4c4eb6d11d04d1'], + }), + ('chron', '2.3-56', { + 'checksums': ['863ecbb951a3da994761ea9062fa96d34e94e19fbc4122521ac179274dfa3f5d'], + }), + ('viridis', '0.6.2', { + 'checksums': ['69b58cd1d992710a08b0b227fd0a9590430eea3ed4858099412f910617e41311'], + }), + ('yaml', '2.2.1', { + 'checksums': ['1115b7bc2a397fa724956eec916df5160c600c99a3be186d21558dd38d782783'], + }), + ('htmltools', '0.5.2', { + 'checksums': ['7dc7d50436e5a82a5801f85bcd2f572a06a98b4027d71aa17b4854ec9b2767fb'], + }), + ('htmlwidgets', '1.5.4', { + 'checksums': ['1a3fc60f40717de7f1716b754fd1c31a132e489a2560a278636ee78eba46ffc1'], + }), + ('knitr', '1.36', { + 'checksums': ['6ecef5b428d135e95a05f24f9f194d0d828b1180c61be44ad89b6210e32b8e41'], + }), + ('htmlTable', '2.3.0', { + 'checksums': ['070d9a0ef6311304f6739d81f7690d8f19899451524b376b403d6a40d477a577'], + }), + ('Hmisc', '4.6-0', { + 'checksums': ['2c1ce906b2333c6dc946dc7f10b74cfa552bce2b12dbebf295d143163562a1ad'], + }), + ('fastcluster', '1.2.3', { + 'checksums': ['1f229129e1cddc78c7bb5ecc90c4d28ed810ee68cf210004c7cdfa12cfaf2a01'], + }), + ('registry', '0.5-1', { + 'checksums': ['dfea36edb0a703ec57e111016789b47a1ba21d9c8ff30672555c81327a3372cc'], + }), + ('bibtex', '0.4.2.3', { + 'checksums': ['7bad194920b412781ac9754ad41058d52d3cd7186e1851c2bce3640490e9bc6d'], + }), + ('pkgmaker', '0.32.2', { + 'checksums': ['ce45b22def771a9c90a414093823e6befe7e23489c500eeccee5154b44d3ef91'], + }), + ('rngtools', '1.5.2', { + 'checksums': ['7f8c76ca4c7851b69a86e27be09b02ddc86357f0388659ef8787634682e8a74d'], + }), + ('doParallel', '1.0.16', { + 'checksums': ['f1bb26f964f30d47ae4d6cf2b0a2ca0c2122d376424875e82d9abe9e7b054eb2'], + }), + ('gridBase', '0.4-7', { + 'checksums': ['be8718d24cd10f6e323dce91b15fc40ed88bccaa26acf3192d5e38fe33e15f26'], + }), + ('irlba', '2.3.3', { + 'checksums': ['6ee233697bcd579813bd0af5e1f4e6dd1eea971e8919c748408130d970fef5c0'], + }), + ('igraph', '1.2.7', { + 'checksums': ['25c1a03273359e012e2625d0d8826264c805037f247785e0b432e02c2aae1be5'], + }), + ('GeneNet', '1.2.15', { + 'checksums': ['555ac4e1d6c53c099b94b9298b6a8893a07797886a21ce3655a98fa9a1326a85'], + }), + ('ape', '5.5', { + 'checksums': ['a3aa01c74b99eafec7d98284e05957b6487b6971ced93f26881f2479bcd5299a'], + }), + ('RJSONIO', '1.3-1.6', { + 'checksums': ['82d1c9ea7758b2a64ad683f9c46223dcba9aa8146b43c1115bf9aa76a657a09f'], + }), + ('caTools', '1.18.2', { + 'checksums': ['75d61115afec754b053ed1732cc034f2aeb27b13e6e1932aa0f26bf590cf0293'], + }), + ('gplots', '3.1.1', { + 'checksums': ['f9ae19c2574b6d41adbeccaf7bc66cf56d7b2769004daba7e0038d5fbd821339'], + }), + ('ROCR', '1.0-11', { + 'checksums': ['57385a773220a3aaef5b221a68b2d9c2a94794d4f9e9fc3c1eb9521767debb2a'], + }), + ('later', '1.3.0', { + 'checksums': ['08f50882ca3cfd2bb68c83f1fcfbc8f696f5cfb5a42c1448c051540693789829'], + }), + ('promises', '1.2.0.1', { + 'checksums': ['8d3a8217909e91f4c2a2eebba5ac8fc902a9ac1a9e9d8a30815c9dc0f162c4b7'], + }), + ('httpuv', '1.6.3', { + 'checksums': ['bfe338c86cc09968c5ec2fd1023040db323d3c3aa413d8d3e5ad4b320bf00876'], + }), + ('rjson', '0.2.20', { + 'checksums': ['3a287c1e5ee7c333ed8385913c0a307daf99335fbdf803e9dcca6e3d5adb3f6c'], + }), + ('sourcetools', '0.1.7', { + 'checksums': ['47984406efb3b3face133979ccbae9fefb7360b9a6ca1a1c11473681418ed2ca'], + }), + ('xml2', '1.3.2', { + 'checksums': ['df22f9e7e3189d8c9b8804eaf0105324fdac983cffe743552f6d76613600a4cf'], + }), + ('commonmark', '1.7', { + 'checksums': ['d14a767a3ea9778d6165f44f980dd257423ca6043926e3cd8f664f7171f89108'], + }), + ('jquerylib', '0.1.4', { + 'checksums': ['f0bcc11dcde3a6ff180277e45c24642d3da3c8690900e38f44495efbc9064411'], + }), + ('rappdirs', '0.3.3', { + 'checksums': ['49959f65b45b0b189a2792d6c1339bef59674ecae92f8c2ed9f26ff9e488c184'], + }), + ('fs', '1.5.0', { + 'checksums': ['36df1653571de3c628a4f769c4627f6ac53d0f9e4106d9d476afb22ae9603897'], + }), + ('sass', '0.4.0', { + 'checksums': ['7d06ca15239142a49e88bb3be494515abdd8c75f00f3f1b0ee7bccb55019bc2b'], + }), + ('bslib', '0.3.1', { + 'checksums': ['5f5cb56e5cab9039a24cd9d70d73b69c2cab5b2f5f37afc15f71dae0339d9849'], + }), + ('fontawesome', '0.2.2', { + 'checksums': ['572db64d1b3c9be301935e0ca7baec69f3a6e0aa802e23f1f224b3724259df64'], + }), + ('shiny', '1.7.1', { + 'checksums': ['c03b2056fb41430352c7c0e812bcc8632e6ec4caef077d2f7633512d91721d00'], + }), + ('seqinr', '4.2-8', { + 'checksums': ['584b34e9dec0320cef02096eb356a0f6115bbd24356cf62e67356963e9d5e9f7'], + }), + ('LearnBayes', '2.15.1', { + 'checksums': ['9b110858456523ca0b2a63f22013c4e1fbda6674b9d84dc1f4de8bffc5260532'], + }), + ('deldir', '1.0-6', { + 'checksums': ['6df6d8325c607e0b7d63cbc53c29e774eff95ad4acf9c7ec8f70693b0505f8c5'], + }), + ('gmodels', '2.18.1', { + 'checksums': ['626140a34eb8c53dd0a06511a76c71bc61c48777fa76fcc5e6934c9c276a1369'], + }), + ('expm', '0.999-6', { + 'checksums': ['2c79912fd2e03fcf89c29f09555880934402fcb2359af8b4579d79b4f955addc'], + }), + ('terra', '1.4-11', { + 'checksums': ['0a8fc0deffd4f2d0065ac6b70ae5cda079a38fe86e40861df94d01d01412fd21'], + }), + ('raster', '3.5-2', { + 'checksums': ['99565167f3ef41ade08b8466a172fc471c73184815c9fb199f9555db63e03d72'], + }), + ('spData', '2.0.1', { + 'checksums': ['c635a3e2e5123b4cdb2e6877b9b09e3d50169e1512a53b2ba2db7fbe63b990fc'], + }), + ('units', '0.7-2', { + 'checksums': ['b90be023431100632b3081747af9e743e615452b4ad38810991f7b024b7040eb'], + }), + ('classInt', '0.4-3', { + 'checksums': ['9ede7a2a7a6b6c114919a3315a884fb592e33b037a50a4fe45cbd4fe2fc434ac'], + }), + ('vegan', '2.5-7', { + 'checksums': ['e63b586951ea7d8b0118811f329c700212892ec1db3b93951603ce1d68aa462a'], + }), + ('rncl', '0.8.4', { + 'checksums': ['6b19d0dd9bb08ecf99766be5ad684bcd1894d1cd9291230bdd709dbd3396496b'], + }), + ('XML', '3.99-0.8', { + 'checksums': ['081f691c2ee8ad39c7c95281e7d9153ec04cee79ca2d41f5d82c2ec2f1d36b50'], + }), + ('tinytex', '0.34', { + 'checksums': ['1d059397b70579c325b64bfd548ef7b985a7558bd1e3d95716e0ed7a0dd8e69b'], + }), + ('rmarkdown', '2.11', { + 'checksums': ['9371255300e7ea4cd936978ad2ca3d205d8605e09f4913cb0d4725005a7a9775'], + }), + ('reshape', '0.8.8', { + 'checksums': ['4d5597fde8511e8fe4e4d1fd7adfc7ab37ff41ac68c76a746f7487d7b106d168'], + }), + ('triebeard', '0.3.0', { + 'checksums': ['bf1dd6209cea1aab24e21a85375ca473ad11c2eff400d65c6202c0fb4ef91ec3'], + }), + ('urltools', '1.7.3', { + 'checksums': ['6020355c1b16a9e3956674e5dea9ac5c035c8eb3eb6bbdd841a2b5528cafa313'], + }), + ('httpcode', '0.3.0', { + 'checksums': ['593a030a4f94c3df8c15576837c17344701bac023ae108783d0f06c476062f76'], + }), + ('crul', '1.1.0', { + 'checksums': ['f0b6cfd19f7470a8aacc7621530315f83796aa64e24a47b96365963e5f615ace'], + }), + ('bold', '1.2.0', { + 'checksums': ['8f1597f04acbe6b090232929325734c802049d82649ae102b438e1fa3af5a464'], + }), + ('rredlist', '0.7.0', { + 'checksums': ['d2e66b655c43565a4cc0984dc3fcc9732652cb9677baaa9bb2b82e9f9d65e7f0'], + }), + ('rentrez', '1.2.3', { + 'checksums': ['fb256597ebe7780e38bef9c4c2626b3feacd60c7a5a29fc6a218cf0d8d132f74'], + }), + ('rotl', '3.0.11', { + 'checksums': ['339bf0b7527449eb495673e406b76a0831aa529fe05952c3448b455cd2c91c2c'], + }), + ('solrium', '1.2.0', { + 'checksums': ['7ec64199497cc69f542fded955b709fc548cf8e2734c9db0f4a99a0ea67ca49b'], + }), + ('ritis', '1.0.0', { + 'checksums': ['327b221872408b1f0fe0cce953685535b66d2fa5d6cac628e1142a26e4856136'], + }), + ('worrms', '0.4.2', { + 'checksums': ['1ab228ea762a431a5e3a565b589b804fcb2865ceaa2b1459bd2ab3ebe8f5ebbe'], + }), + ('natserv', '1.0.0', { + 'checksums': ['30f90f938e963191ef19b1433db1e265f67d8efe29c92a1d3603c3dc9a03d5c8'], + }), + ('WikipediR', '1.5.0', { + 'checksums': ['f8d0e6f04fb65f7ad9c1c068852a6a8b699ffe8d39edf1f3fa07d32d087e8ff0'], + }), + ('ratelimitr', '0.4.1', { + 'checksums': ['2b21e4574521c5336feeb3041eaf096bde7857b140049cdeb6ec97dc652aa71b'], + }), + ('rex', '1.2.0', { + 'checksums': ['06b491f1469078862e40543fd74e1d38b2e0fb61fdf01c8083add4b11ac2eb54'], + }), + ('WikidataQueryServiceR', '1.0.0', { + 'checksums': ['0e14eec8471a72227f800b41b331cfc49a94b4d4f49e68936448ebbae0b281ae'], + }), + ('pbapply', '1.5-0', { + 'checksums': ['effdfee286e5ba9534dc2ac3cee96590a37f5cd2af28c836d00c25ca9f070a55'], + }), + ('WikidataR', '2.3.1', { + 'checksums': ['dd349d160c1c0bae9e3efa336efc622ea9dd481cc0a449ceab49852d220eb2da'], + }), + ('wikitaxa', '0.4.0', { + 'checksums': ['ba872853af59fdc8f1121d6e205f15e5bf4f2ec5ad68cd5755a423fa783bf7fc'], + }), + ('phangorn', '2.7.1', { + 'checksums': ['d8a9d67851f16c3947575eb3344b9ce7ef856354e691211ef23c92b7889e1398'], + }), + ('uuid', '1.0-2', { + 'checksums': ['0bed1a3fe298123e818b631c1a2d8bcf5c6ab334f625a482197324a877a6387a'], + }), + ('conditionz', '0.1.0', { + 'checksums': ['ccd81e4f2534d29cddf44cf697f76ff01417cbeb22001a93477edc61cdd35646'], + }), + ('taxize', '0.9.99', { + 'checksums': ['1a5d2783a82db4b6dd13df3639c7cd07112c1d83ddaabc83706ff235d977681c'], + }), + ('RNeXML', '2.4.5', { + 'checksums': ['2b667ecb6400e4c0c125ca73a98cde81330cde3a85b764261f77159e702754f3'], + }), + ('phylobase', '0.8.10', { + 'checksums': ['5a44380ff49bab333a56f6f96157324ade8afb4af0730e013194c4badb0bf94b'], + }), + ('magick', '2.7.3', { + 'checksums': ['83877b2e23ea43fbc1164de9c2422eafbe7858393ac384df5adf3a7eec122441'], + }), + ('animation', '2.7', { + 'checksums': ['88418f1b04ec785963bad492f30eb48b05914e9e5d88c7eef705d949cbd7e469'], + }), + ('bigmemory.sri', '0.1.3', { + 'checksums': ['55403252d8bae9627476d1f553236ea5dc7aa6e54da6980526a6cdc66924e155'], + }), + ('bigmemory', '4.5.36', { + 'checksums': ['18c67fbe6344b2f8223456c4f19ceebcf6c1166255eab81311001fd67a45ef0e'], + }), + ('calibrate', '1.7.7', { + 'checksums': ['713b09b415c954e1ef5216088acd40621b0546c45afbb8c2c6f118ecb5cd6fa6'], + }), + ('clusterGeneration', '1.3.7', { + 'checksums': ['534f29d8f7ed11e6e9a496f15845b588ec7133f3da5e6def8140b88500e52d5c'], + }), + ('dismo', '1.3-5', { + 'checksums': ['812e1932d42c0f40acf2ab5c5b2d068f93128caf648626e1d11baf1a09340ee7'], + }), + ('extrafontdb', '1.0', { + 'checksums': ['faa1bafee5d4fbc24d03ed237f29f1179964ebac6e3a46ac25b0eceda020b684'], + }), + ('Rttf2pt1', '1.3.9', { + 'checksums': ['8667e48ed639c80180b1c1b65eff6ca2031bc9633a4fe79b50772f92375e3e71'], + }), + ('extrafont', '0.17', { + 'checksums': ['2f6d7d79a890424b56ddbdced361f8b9ddede5edd33e090b816b88a99315332d'], + }), + ('fields', '13.3', { + 'checksums': ['c652838b1ae7eb368831522824bfbc1d1db7b9d1db5e9bb52b194098549944c3'], + }), + ('shapefiles', '0.7', { + 'checksums': ['eeb18ea4165119519a978d4a2ba1ecbb47649deb96a7f617f5b3100d63b3f021'], + }), + ('fossil', '0.4.0', { + 'checksums': ['37c082fa15ebae89db99d6071b2bb2cad6a97a0405e9b4ef77f62a8f6ad274c1'], + }), + ('phytools', '0.7-90', { + 'checksums': ['48615a709760af5f298f0af6615d238c96cad7d26e997fb65467520aad37e0d1'], + }), + ('geiger', '2.0.7', { + 'checksums': ['d200736c4ad7ed4bc55a13e7d0126ddc7fed88e245cd5706d4692aaa437e9596'], + }), + ('shape', '1.4.6', { + 'checksums': ['b9103e5ed05c223c8147dbe3b87a0d73184697343634a353a2ae722f7ace0b7b'], + }), + ('glmnet', '4.1-2', { + 'checksums': ['06ab2b58c0b431736605aee2d42e517e0e2640d16b5a6c7867a25f05dd44cdcd'], + }), + ('crosstalk', '1.1.1', { + 'checksums': ['ed3234f7f000fb607cc42e005d68be1dd598d95fa687a3f6e6b17ba38e36ccd8'], + }), + ('miniUI', '0.1.1.1', { + 'checksums': ['452b41133289f630d8026507263744e385908ca025e9a7976925c1539816b0c0'], + }), + ('webshot', '0.5.2', { + 'checksums': ['f183dc970157075b51ac543550a7a48fa3428b9c6838abb72fe987c21982043f'], + }), + ('shinyjs', '2.0.0', { + 'checksums': ['c2cdd9fab41f6b46bb41b288cd9b3fb3a7fe9627b664e3a58a0cb5dd4c19f8ff'], + }), + ('manipulateWidget', '0.11.1', { + 'checksums': ['5b73728d7d6dcc32f32d861375074cd65112c03a01e4ee4fa94e21b063fdefb6'], + }), + ('rgl', '0.107.14', { + 'checksums': ['67213c3215bcadb56e15922fbf0dc7f6a6642cc3d924363dcb1705291727b0fc'], + }), + ('Rtsne', '0.15', { + 'checksums': ['56376e4f0a382fad3d3d40e2cb0562224be5265b827622bcd235e8fc63df276c'], + }), + ('labdsv', '2.0-1', { + 'checksums': ['5a4d55e9be18222dc47e725008b450996448ab117d83e7caaa191c0f13fd3925'], + }), + ('stabs', '0.6-4', { + 'checksums': ['f8507337789f668e421a6ee7b11dd5ea331bf8bff0f9702dd1b93f46c2f3c1d9'], + }), + ('modeltools', '0.2-23', { + 'checksums': ['6b3e8d5af1a039db5c178498dbf354ed1c5627a8cea9229726644053443210ef'], + }), + ('strucchange', '1.5-2', { + 'checksums': ['7d247c5ae6f5a63c80e478799d009c57fb8803943aa4286d05f71235cc1002f8'], + }), + ('TH.data', '1.1-0', { + 'checksums': ['21b37e251da5635ae91668f64b4c6f6a7ccedbe1f01af769d30fb532af83113e'], + }), + ('multcomp', '1.4-17', { + 'checksums': ['41509d8457cfad9ce579115e6e0ed1f7c0244455a8639cbd38a6d755d338fb0b'], + }), + ('libcoin', '1.0-9', { + 'checksums': ['2d7dd0b7c6dfc20472430570419ea36a714da7bbafd336da1fb53c5c6463d9eb'], + }), + ('coin', '1.4-2', { + 'checksums': ['7546d1f27a82d98b4b3e43e4659eba0f74a67d5919ce85d2fb360282ba3cfbb2'], + }), + ('party', '1.3-9', { + 'checksums': ['29a1fefdb86369285ebf5d48ab51268a83e2011fb9d9f609a2250b5f0b169089'], + }), + ('inum', '1.0-4', { + 'checksums': ['5febef69c43a4b95b376c1418550a949d988a5f26b1383ca01c9728a94fc13ce'], + }), + ('partykit', '1.2-15', { + 'checksums': ['b2e9454b2f4b9a39c9581c5871462f00acef4eeee5696ce3e32cfa1468d1e3ac'], + }), + ('mboost', '2.9-5', { + 'checksums': ['cf9b13e00efe0b25702cb33151e8c11eff2de07db805db217472e9d09a3be079'], + }), + ('msm', '1.6.9', { + 'checksums': ['aefcd9bb40b0167311d088d6fe23fdf7aa35deaac0f8b47ef02377cff5577023'], + }), + ('nor1mix', '1.3-0', { + 'checksums': ['9ce4ee92f889a4a4041b5ea1ff09396780785a9f12ac46f40647f74a37e327a0'], + }), + ('np', '0.60-11', { + 'checksums': ['a3b31b8ad70c42826076786b2b1b63b79cdbadfa55fe126773bc357686fd33a9'], + }), + ('polynom', '1.4-0', { + 'checksums': ['c5b788b26f7118a18d5d8e7ba93a0abf3efa6603fa48603c70ed63c038d3d4dd'], + }), + ('polspline', '1.1.19', { + 'checksums': ['953e3c4d007c3ef86ac2af3c71b272a99e8e35b194bdd58575785558c6711f66'], + }), + ('rms', '6.2-0', { + 'checksums': ['10d58cbfe39fb434223834e29e5248c9384cded23e6267cfc99367d0f5ee24b6'], + }), + ('RWekajars', '3.9.3-2', { + 'checksums': ['16e6b019aab1646f89c5203f0d6fc1cb800129e5169b15aaef30fd6236f5da1a'], + }), + ('RWeka', '0.4-43', { + 'checksums': ['8c227a5935cff180d03c30eb73bdd00b16737579c8b8503ec7fccc17e746179a'], + }), + ('slam', '0.1-48', { + 'checksums': ['0a0b32d35fd6b8d1ac021b1358e73d32ab942d274a84fbba732d6c02efdcfade'], + }), + ('tm', '0.7-8', { + 'checksums': ['b1eb1683d956db1a207b61cc086ae08b3ca7f46b6b8bc46d09ba5a4fafa66256'], + }), + ('leaps', '3.1', { + 'checksums': ['3d7c3a102ce68433ecf167ece96a7ebb4207729e4defd0ac8fc00e7003f5c3b6'], + }), + ('cNORM', '2.1.0', { + 'checksums': ['52d0f831c2bfac93999b004c6f9ef84fe8230dc954da7b3d10030640fb7e3106'], + }), + ('TraMineR', '2.2-2', { + 'checksums': ['0c0823e2f591bb669f8f36dac22199c0d2e2dfb20fc89d62e4a44575d57397a9'], + }), + ('chemometrics', '1.4.2', { + 'checksums': ['b705832fa167dc24b52b642f571ed1efd24c5f53ba60d02c7797986481b6186a'], + }), + ('FNN', '1.1.3', { + 'checksums': ['de763a25c9cfbd19d144586b9ed158135ec49cf7b812938954be54eb2dc59432'], + }), + ('miscTools', '0.6-26', { + 'checksums': ['be3c5a63ca12ce7ce4d43767a1815cd3dcf32664728ade251cfb03ea6f77fc9a'], + }), + ('maxLik', '1.5-2', { + 'checksums': ['7cee05be0624b6a76911fa7b0d66f3e1b78460e0c55ed8bc904ce1e8af7bb15d'], + }), + ('gbRd', '0.4-11', { + 'checksums': ['0251f6dd6ca987a74acc4765838b858f1edb08b71dbad9e563669b58783ea91b'], + }), + ('rbibutils', '2.2.4', { + 'checksums': ['bb9e7bd0ca472f7851704bd9a52ef7eca7540db32523f1b1f7e3bf06268cde97'], + }), + ('Rdpack', '2.1.2', { + 'checksums': ['714897ec115344d9a9d423519f4c289e71038f80abccced02a47cdc05d61a168'], + }), + ('dfidx', '0.0-4', { + 'checksums': ['04255de9b002b2f89db04144edcd72e21804e0c129a3e5082b4a21630c850702'], + }), + ('mlogit', '1.1-1', { + 'checksums': ['6f3ea97db410be929a3078422f3d354d2f17855a21bbdc7c2c09d901e233d143'], + }), + ('getopt', '1.20.3', { + 'checksums': ['531f5fdfdcd6b96a73df2b39928418de342160ac1b0043861e9ea844f9fbf57f'], + }), + ('gsalib', '2.1', { + 'checksums': ['e1b23b986c18b89a94c58d9db45e552d1bce484300461803740dacdf7c937fcc'], + }), + ('optparse', '1.7.1', { + 'checksums': ['324e304c13efd565d766766193d4ccd75e2cd949dfcfb416afc3939489071fe7'], + }), + ('labelled', '2.9.0', { + 'checksums': ['36ac0e169ee065a8bced9417efeb85d62e1504a590d4321667d8a6213285d639'], + }), + ('R.cache', '0.15.0', { + 'checksums': ['adb4d3b08f7917e10fe6188c7b90a3318701a974c58eaa09943b929382bdf126'], + }), + ('styler', '1.6.2', { + 'checksums': ['a62fcc76aac851069f33874f9eaabdd580973b619cfc625d6ec910476015f75c'], + }), + ('questionr', '0.7.5', { + 'checksums': ['a1a25d8ab228a8d3bdb6c37d50db3964fe33a3fe1c46a95331b029261977d4a3'], + }), + ('klaR', '0.6-15', { + 'checksums': ['5bfe5bc643f8a64b222317732c26e9f93be297cdc318a869f15cc9ab0d9e0fae'], + }), + ('neuRosim', '0.2-12', { + 'checksums': ['f4f718c7bea2f4b61a914023015f4c71312f8a180124dcbc2327b71b7be256c3'], + }), + ('locfit', '1.5-9.4', { + 'checksums': ['d9d3665c5f3d49f698fb4675daf40a0550601e86db3dc00f296413ceb1099ced'], + }), + ('GGally', '2.1.2', { + 'checksums': ['30352f36bf061bc98bdd5fa373ea0f23d007040bd908c7c018c8e627e0fb28e5'], + }), + ('beanplot', '1.2', { + 'checksums': ['49da299139a47171c5b4ccdea79ffbbc152894e05d552e676f135147c0c9b372'], + }), + ('clValid', '0.7', { + 'checksums': ['037da469891462021eb177f9c9e18caefa8532f08c68fb576fae1668a1f451a1'], + }), + ('DiscriMiner', '0.1-29', { + 'checksums': ['5aab7671086ef9940e030324651976456f0e84dab35edb7048693ade885228c6'], + }), + ('ellipse', '0.4.2', { + 'checksums': ['1719ce9a00b9ac4d56dbf961803085b892d3359726fda3567bb989ddfed9a5f2'], + }), + ('pbkrtest', '0.5.1', { + 'checksums': ['b2a3452003d93890f122423b3f2487dcb6925440f5b8a05578509e98b6aec7c5'], + }), + ('carData', '3.0-4', { + 'checksums': ['cda6f5e3efc1d955a4a0625e9c33f90d49f5455840e88b3bd757129b86044724'], + }), + ('maptools', '1.1-2', { + 'checksums': ['3995c96e8472cd6717fe3cbd3506358ff460b6c2cf92dbe4b00f75f507514439'], + }), + ('zip', '2.2.0', { + 'checksums': ['9f95987c964039834f770ecda2d5f7e3d3a9de553c89db2a5926c4219bf4b9d8'], + }), + ('openxlsx', '4.2.4', { + 'checksums': ['af571b3c60cea2a5975f6a394469f1c50266d4a5c5c91896b991b1b3ba8bc86e'], + }), + ('rematch', '1.0.1', { + 'checksums': ['a409dec978cd02914cdddfedc974d9b45bd2975a124d8870d52cfd7d37d47578'], + }), + ('cellranger', '1.1.0', { + 'checksums': ['5d38f288c752bbb9cea6ff830b8388bdd65a8571fd82d8d96064586bd588cf99'], + }), + ('readxl', '1.3.1', { + 'checksums': ['24b441713e2f46a3e7c6813230ad6ea4d4ddf7e0816ad76614f33094fbaaaa96'], + }), + ('rio', '0.5.27', { + 'checksums': ['e0eb616cdbba9f2d5c4489ae05336201d717ce65b0ea6854023054d1c2e3dd0a'], + }), + ('car', '3.0-11', { + 'checksums': ['b32c927206f515631ff276dbb337b0f22e9b2d851f4abb1d2c272e534c19542c'], + }), + ('flashClust', '1.01-2', { + 'checksums': ['48a7849bb86530465ff3fbfac1c273f0df4b846e67d5eee87187d250c8bf9450'], + }), + ('ggrepel', '0.9.1', { + 'checksums': ['29fb916d4799ba6503a5dd019717ffdf154d2aaae9ff1736f03e2be24af6bdfc'], + }), + ('DT', '0.19', { + 'checksums': ['baa6bdae215ab84a5dee9c0a6c55dd92135c795d13dfce3c3485519c6f0e3b13'], + }), + ('FactoMineR', '2.4', { + 'checksums': ['b9e3adce9a66b4daccc85fa67cb0769d6be230beeb126921b386ccde5db2e851'], + }), + ('flexclust', '1.4-0', { + 'checksums': ['82fe445075a795c724644864c7ee803c5dd332a89ea9e6ccf7cd1ae2d1ecfc74'], + }), + ('flexmix', '2.3-17', { + 'checksums': ['36019b7833032409ac61720dd625fa5a581a1d8bcba9045b04979c90907b5649'], + }), + ('prabclus', '2.3-2', { + 'checksums': ['f421bcbcb557281e0de4a06b15f9a496adb5c640e883c0f7bb12051efc69e441'], + }), + ('diptest', '0.76-0', { + 'checksums': ['508a5ebb161519cd0fcd156dc047b51becb216d545d62c6522496463f94ec280'], + }), + ('trimcluster', '0.1-5', { + 'checksums': ['9239f20e4a06ac2fa89e5d5d89b23a45c8c534a7264d89bede8a35d43dda518b'], + }), + ('fpc', '2.2-9', { + 'checksums': ['29b0006e96c8645645d215d3378551bd6525aaf45abde2d9f12933cf6e75fa38'], + }), + ('BiasedUrn', '1.07', { + 'checksums': ['2377c2e59d68e758a566452d7e07e88663ae61a182b9ee455d8b4269dda3228e'], + }), + ('TeachingDemos', '2.12', { + 'checksums': ['3e75405ce1affa406d6df85e06f96381412bc7a2810b25d8c81bfe64c4698644'], + }), + ('kohonen', '3.0.10', { + 'checksums': ['996956ea46a827c9f214e4f940a19304a0ff35bda707d4d7312f80d3479067b2'], + }), + ('base64', '2.0', { + 'checksums': ['8e259c2b12446197d1152b83a81bab84ccb5a5b77021a9b5645dd4c63c804bd1'], + }), + ('doRNG', '1.8.2', { + 'checksums': ['33e9d45b91b0fde2e35e911b9758d0c376049121a98a1e4c73a1edfcff11cec9'], + }), + ('nleqslv', '3.3.2', { + 'checksums': ['f54956cf67f9970bb3c6803684c84a27ac78165055745e444efc45cfecb63fed'], + }), + ('Deriv', '4.1.3', { + 'checksums': ['dbdbf5ed8babf706373ae33a937d013c46110a490aa821bcd158a70f761d0f8c'], + }), + ('RGCCA', '2.1.2', { + 'checksums': ['20f341fca8f616c556699790814debdf2ac7aa4dd9ace2071100c66af1549d7d'], + }), + ('pheatmap', '1.0.12', { + 'checksums': ['579d96ee0417203b85417780eca921969cda3acc210c859bf9dfeff11539b0c1'], + }), + ('pvclust', '2.2-0', { + 'checksums': ['7892853bacd413b5a921006429641ad308a344ca171b3081c15e4c522a8b0201'], + }), + ('RCircos', '1.2.1', { + 'checksums': ['3b9489ab05ea83ead99ca6e4a1e6830467a2064779834aff1317b42bd41bb8fd'], + }), + ('lambda.r', '1.2.4', { + 'checksums': ['d252fee39065326c6d9f45ad798076522cec05e73b8905c1b30f95a61f7801d6'], + }), + ('futile.options', '1.0.1', { + 'checksums': ['7a9cc974e09598077b242a1069f7fbf4fa7f85ffe25067f6c4c32314ef532570'], + }), + ('futile.logger', '1.4.3', { + 'checksums': ['5e8b32d65f77a86d17d90fd8690fc085aa0612df8018e4d6d6c1a60fa65776e4'], + }), + ('VennDiagram', '1.7.0', { + 'checksums': ['7537566ae94ea4bde97ca819ce5ec477943f33847a8eb0042d0859ce11ab35d1'], + }), + ('xlsxjars', '0.6.1', { + 'checksums': ['37c1517f95f8bca6e3514429394d2457b9e62383305eba288416fb53ab2e6ae6'], + }), + ('xlsx', '0.6.5', { + 'checksums': ['378c5ed475a3d7631ea1ea13e0a69d619c1a52260922abda42818752dbb32107'], + }), + ('uroot', '2.1-2', { + 'checksums': ['bd7fd9e35928d09d0e8fae9e4359a2b2bca6e6865b278436319e2f91db0e4b37'], + }), + ('forecast', '8.15', { + 'checksums': ['c73aabed083095b457ed875c240716686fbd41d1cbafa116b7b890a54b919174'], + }), + ('fma', '2.4', { + 'checksums': ['69a94c3bd464176a80232d49fcd04d478d4dd59f9bf128d6a9f46e49612d27f4'], + }), + ('expsmooth', '2.3', { + 'checksums': ['ac7da36347f983d6ec71715daefd2797fe2fc505c019f4965cff9f77ce79982a'], + }), + ('fpp', '0.5', { + 'checksums': ['9c87dd8591b8a87327cae7a03fd362a5492495a96609e5845ccbeefb96e916cb'], + }), + ('tensor', '1.5', { + 'checksums': ['e1dec23e3913a82e2c79e76313911db9050fb82711a0da227f94fc6df2d3aea6'], + }), + ('polyclip', '1.10-0', { + 'checksums': ['74dabc0dfe5a527114f0bb8f3d22f5d1ae694e6ea9345912909bae885525d34b'], + }), + ('goftest', '1.2-3', { + 'checksums': ['3a5f74b6ae7ece5b294781ae57782abe12375d61789c55ff5e92e4aacf347f19'], + }), + ('spatstat.utils', '2.2-0', { + 'checksums': ['5ad87e524285621dc4ef75c941eba933d980125293ee8f2bef5b7db02f63d7ab'], + }), + ('spatstat.data', '2.1-0', { + 'checksums': ['1b9840ad0ec7eddfa98a01e8b8a5291e5cb447c3082aa7d7b4df762577f95533'], + }), + ('spatstat.geom', '2.3-0', { + 'checksums': ['7b1746a44509a6d518799332477fffa3474217c6cb3c6b92a325525b48fce9c7'], + }), + ('spatstat.sparse', '2.0-0', { + 'checksums': ['27fbce64e21f095a5e9ac54c86f91c9f4b45eac3c2358580e04423b4beba19c7'], + }), + ('spatstat.core', '2.3-0', { + 'checksums': ['5795ec6db2961dce740c7cd39a9c1b855d92a4af351a794a9bfd634a3f1526c9'], + }), + ('spatstat.linnet', '2.3-0', { + 'checksums': ['f0c089c41db8fe83d09ecb396ce8952a593c265411fb997847201d9784f9a2f9'], + }), + ('spatstat', '2.2-0', { + 'checksums': ['8f0f90e8d5af1e2e97ef5f01e595511916290d554fc1ae3ad7b217605bd4e353'], + }), + ('pracma', '2.3.3', { + 'checksums': ['cf1f8d7724a385d9a2e1a5496d9ba0e9908940b85669fb2c506b9059722cb93c'], + }), + ('RCurl', '1.98-1.5', { + 'checksums': ['73187c9a039188ffdc255fb7fa53811a6abfb31e6375a51eae8c763b37dd698d'], + }), + ('bio3d', '2.4-2', { + 'checksums': ['91415766cda0f96557e6bc568dbce8d44254a9460f2e2d0beed0ce14ffad6ccb'], + }), + ('AUC', '0.3.0', { + 'checksums': ['e705f2c63d336249d19187f3401120d738d42d323fce905f3e157c2c56643766'], + }), + ('interpretR', '0.2.4', { + 'checksums': ['4c08a6dffd6fd5764f27812f3a085c53e6a21d59ae82d903c9c0da93fd1dd059'], + }), + ('cvAUC', '1.1.0', { + 'checksums': ['c4d8ed53b93869650aa2f666cf6d1076980cbfea7fa41f0b8227595be849738d'], + }), + ('SuperLearner', '2.0-28', { + 'checksums': ['5f42233abd48f1740c33aae1ec4ad8e9952fddb5df1ee49ff2d43d5d89f05601'], + }), + ('mediation', '4.5.0', { + 'checksums': ['210206618787c395a67689be268283df044deec7199d9860ed95218ef1e60845'], + }), + ('CVST', '0.2-2', { + 'checksums': ['854b8c983427ecf9f2f7798c4fd1c1d06762b5b0bcb1045502baadece6f78316'], + }), + ('DRR', '0.0.4', { + 'checksums': ['93e365a4907e301ae01f7d943e6bdcda71ef23c51a4759ba3c94bcf842d4e0f8'], + }), + ('dimRed', '0.2.3', { + 'checksums': ['e6e56e3f6999ebdc326e64ead5269f3aaf61dd587beefafb7536ac3890370d84'], + }), + ('ddalpha', '1.3.11', { + 'checksums': ['c30b4a3a9549cb4dc0a8e51e06f5b6e4c457c5326acc8f4680968c920f59b6e9'], + }), + ('RcppRoll', '0.3.0', { + 'checksums': ['cbff2096443a8a38a6f1dabf8c90b9e14a43d2196b412b5bfe5390393f743f6b'], + }), + ('adabag', '4.2', { + 'checksums': ['47019eb8cefc8372996fbb2642f64d4a91d7cedc192690a8d8be6e7e03cd3c81'], + }), + ('parallelMap', '1.5.1', { + 'checksums': ['c108a634a335ed47b0018f532a52b032487e239c5061f939ba32355dfefde7e1'], + }), + ('ParamHelpers', '1.14', { + 'checksums': ['b17652d0a69de3241a69f20be4ad1bfe02c413328a17f3c1ac7b73886a6ba2eb'], + }), + ('ggvis', '0.4.7', { + 'checksums': ['9e6b067e11d497c796d42156570e2481afb554c5db265f42afbb74d2ae0865e3'], + }), + ('mlr', '2.19.0', { + 'checksums': ['1149c9b453896481c85906045aa82d511d96979ddecbe5a3faf04f9f4a5e6113'], + }), + ('unbalanced', '2.0', { + 'checksums': ['9be32b1ce9d972f1abfff2fbe18f5bb5ba9c3f4fb1282063dc410b82ad4d1ea2'], + }), + ('RSNNS', '0.4-14', { + 'checksums': ['7f6262cb2b49b5d5979ccce9ded9cbb2c0b348fd7c9eabc1ea1d31c51a102c20'], + }), + ('abc.data', '1.0', { + 'checksums': ['b242f43c3d05de2e8962d25181c6b1bb6ca1852d4838868ae6241ca890b161af'], + }), + ('abc', '2.1', { + 'checksums': ['0bd2dcd4ee1915448d325fb5e66bee68e0497cbd91ef67a11b400b2fbe52ff59'], + }), + ('lhs', '1.1.3', { + 'checksums': ['e43b8d48db1cf26013697e2a798ed1d31d1ee1790f2ebfecb280176c0e0c06d1'], + }), + ('tensorA', '0.36.2', { + 'checksums': ['8e8947566bd3b65a54de4269df1abaa3d49cf5bfd2a963c3274a524c8a819ca7'], + }), + ('EasyABC', '1.5', { + 'checksums': ['1dd7b1383a7c891cafb34d9cec65d92f1511a336cff1b219e63c0aa791371b9f'], + }), + ('whisker', '0.4', { + 'checksums': ['7a86595be4f1029ec5d7152472d11b16175737e2777134e296ae97341bf8fba8'], + }), + ('roxygen2', '7.1.2', { + 'checksums': ['b3693d1eb57bb1c27134447ea7f64c353c085dd2237af7cfacc75fca3d2fc5fd'], + }), + ('git2r', '0.28.0', { + 'checksums': ['ce6d148d21d2c87757e98ef4474b2d09faded9b9b866f046bd26d4ca925e55f2'], + }), + ('rversions', '2.1.1', { + 'checksums': ['79aaacf5a1258d91ac0ddedf3c8c16a2d10d39010993dcc7b0a2638afee27cb1'], + }), + ('xopen', '1.0.0', { + 'checksums': ['e207603844d69c226142be95281ba2f4a056b9d8cbfae7791ba60535637b3bef'], + }), + ('sessioninfo', '1.2.0', { + 'checksums': ['adebf738ad3d3af9e018302d949994240311ef06c0a77c645b2f761c1a8c07df'], + }), + ('rcmdcheck', '1.4.0', { + 'checksums': ['bbd4ef7d514b8c2076196a7c4a6041d34623d55fbe73f2771758ce61fd32c9d0'], + }), + ('remotes', '2.4.1', { + 'checksums': ['d5d777b2e10d70fd0670166d539eab88ec4f7fe030f54ec5cd2703f548473276'], + }), + ('clisymbols', '1.2.0', { + 'checksums': ['0649f2ce39541820daee3ed408d765eddf83db5db639b493561f4e5fbf88efe0'], + }), + ('ini', '0.3.1', { + 'checksums': ['7b191a54019c8c52d6c2211c14878c95564154ec4865f57007953742868cd813'], + }), + ('gitcreds', '0.1.1', { + 'checksums': ['b14aaf4e910a9d2d6c65c93e645f0b0159c00898e669f917f83c03dfedb1dfea'], + }), + ('gh', '1.3.0', { + 'checksums': ['a44039054e8ca56496f2d9c7a10cdadf4a7383bc91086e768ba7e7f1fbcaed1c'], + }), + ('credentials', '1.3.1', { + 'checksums': ['8795a73a65d1ce2e9f0be66546e85231c846ba6445a11948b9816fbee20a7a60'], + }), + ('gert', '1.4.1', { + 'checksums': ['623b58f12c5530b101e91a352269fe011814b074cf7a7ed0b3cd4506390a63f8'], + }), + ('usethis', '2.1.3', { + 'checksums': ['2db075980247d854110de60e7afe6f6e0b654a3ba49d0699ff40dd516e8e9bbf'], + }), + ('covr', '3.5.1', { + 'checksums': ['a54cfc3623ea56084158ac5d7fe33f216f45191f6dcddab9c9ed4ec1d9d8ac6c'], + }), + ('devtools', '2.4.2', { + 'checksums': ['71f0a55054d293fb553702b21b91941bc5c83a933610fad6f9662bf0a6178f05'], + }), + ('Rook', '1.1-1', { + 'checksums': ['00f4ecfa4c5c57018acbb749080c07154549a6ecaa8d4130dd9de79427504903'], + }), + ('Cairo', '1.5-12.2', { + 'checksums': ['dd524105c83b82b5c3b3ee2583ef90d4cafa54b0c29817dac48b425b79f90f92'], + }), + ('RMTstat', '0.3', { + 'checksums': ['81eb4c5434d04cb66c749a434c33ceb1c07d92ba79765d4e9233c13a092ec2da'], + }), + ('Lmoments', '1.3-1', { + 'checksums': ['7c9d489a08f93fa5877e2f233ab9732e0d1b2761596b3f6ac91f2295e41a865d'], + }), + ('distillery', '1.2-1', { + 'checksums': ['4b88f0b34e472b9134ad403fb32283424f1883a5943e52c55f1fe05995efb5fa'], + }), + ('extRemes', '2.1-1', { + 'checksums': ['5a1927bb21f178ec5a3e3f862d792e690e45c16c88190e64e83aa1fb9e3ffa02'], + }), + ('tkrplot', '0.0-26', { + 'checksums': ['dd66264c2553f6927aff297c6b1c3b61867d6c63aec080f40a1e9d53cfc9d120'], + }), + ('misc3d', '0.9-1', { + 'checksums': ['a07bbb0de153e806cd79675ed478d2d9221cff825654f59a71a9cf61f4293d65'], + }), + ('multicool', '0.1-12', { + 'checksums': ['487d28d9c3c606be0cf56e2d8f8b0d79fb71949c68886ea9251fbb1c01664a36'], + }), + ('plot3D', '1.4', { + 'checksums': ['d04a45197646fb36bc38870c1c2351cb56b912bd772b1ebfa25eaeef35fda9c0'], + }), + ('plot3Drgl', '1.0.2', { + 'checksums': ['aa874891446a395f01791d80a5a0f1f9a1c2c41f029de3a8d5af9aa47f46a496'], + }), + ('OceanView', '1.0.6', { + 'checksums': ['2c5165975d6c49fdc83a892cb0406584928dd44000c9774fffc00fbd2fec86f3'], + }), + ('ks', '1.13.2', { + 'checksums': ['7c9e4e178adcecb0817213c0210b82d91647f4acf5c4d4056d46d286a5bff609'], + }), + ('logcondens', '2.1.6', { + 'checksums': ['785bbda00b9a25e56440e11356ac219cfbf0fdf8b08c7b0728e53a9febe7a365'], + }), + ('Iso', '0.0-18.1', { + 'checksums': ['2fa5f78a7603cbae94a5e38e791938596a053d48c609a7c120a19cbb7d93c66f'], + }), + ('penalized', '0.9-51', { + 'checksums': ['eaa80dca99981fb9eb576261f30046cfe492d014cc2bf286c447b03a92e299fd'], + }), + ('clusterRepro', '0.9', { + 'checksums': ['940d84529ff429b315cf4ad25700f93e1156ccacee7b6c38e4bdfbe2d4c6f868'], + }), + ('data.tree', '1.0.0', { + 'checksums': ['40674c90a5bd00f5185db9adbd221c6f1114043e69095249f5fa8b3044af3f5e'], + }), + ('influenceR', '0.1.0.1', { + 'checksums': ['63c46f1175fced33fb1b78d4d56e37fbee09b408945b0106dac36e3344cd4766'], + }), + ('visNetwork', '2.1.0', { + 'checksums': ['a2b91e7fbbd9d08a9929a5b2c891d9c0bca5977ad772fa37510d96656af1152f'], + }), + ('downloader', '0.4', { + 'checksums': ['1890e75b028775154023f2135cafb3e3eed0fe908138ab4f7eff1fc1b47dafab'], + }), + ('DiagrammeR', '1.0.6.1', { + 'checksums': ['be4e4c520a3692902ce405e8225aef9f3d5f0cd11fcde614f6541e981b63673d'], + }), + ('randomForestSRC', '2.13.0', { + 'checksums': ['beb981cae3a8c7232a2ca67f0a7bf3293eb44d5f1ac14913632ca8f8d4728abd'], + }), + ('sm', '2.2-5.7', { + 'checksums': ['2607a2cafc68d7e99005daf99e36f4a66eaf569ebb6b7500e962642cf58be80f'], + }), + ('pbivnorm', '0.6.0', { + 'checksums': ['07c37d507cb8f8d2d9ae51a9a6d44dfbebd8a53e93c242c4378eaddfb1cc5f16'], + }), + ('lavaan', '0.6-9', { + 'checksums': ['d404c4eb40686534f9c05f24f908cd954041f66d1072caea4a3adfa83a5f108a'], + }), + ('matrixcalc', '1.0-5', { + 'checksums': ['5906e1ef06dbc18efc7a4b370adc180ef8941b5438119703bd981d1c76a06fca'], + }), + ('arm', '1.12-2', { + 'checksums': ['816ba1c31eec00feef472c57e280488d3d233b592f6f0a1a30e4abb903cb4f5d'], + }), + ('mi', '1.0', { + 'checksums': ['34f44353101e8c3cb6bf59c5f4ff5b2391d884dcbb9d23066a11ee756b9987c0'], + }), + ('servr', '0.23', { + 'checksums': ['4492d1dabc8f62cf7f7a53c97413a664823a3916dcaf99a7b04bcb279f7b2eb8'], + }), + ('rgexf', '0.16.2', { + 'checksums': ['6ee052b0de99d0c7492366b991d345a51b3d0cc890d10a68b8670e1bd4fc8201'], + }), + ('sem', '3.1-13', { + 'checksums': ['07749f710ad800f43cacdff8f1aa4f20105a619c72be4465f29860c381242f65'], + }), + ('statnet.common', '4.5.0', { + 'checksums': ['3cdb23db86f3080462f15e29bcf3e941590bc17ea719993b301199b22d6f882f'], + }), + ('network', '1.17.1', { + 'checksums': ['fc3c3a0014f8895a11c33994c9b44c6ef6cc49c7d026cd41ae6bba5ef63005a7'], + }), + ('rle', '0.9.2', { + 'checksums': ['803cbe310af6e882e27be61d37d660dbe5910ac1ee1eff61a480bcf724a04f69'], + }), + ('sna', '2.6', { + 'checksums': ['3a016550d9f424a0613c3f5b0b680dbd3a1f20a343173d39a96034340ad9202a'], + }), + ('glasso', '1.11', { + 'checksums': ['4c37844b26f55985184a734e16b8fe880b192e3d2763614b0ab3f99b4530e30a'], + }), + ('huge', '1.3.5', { + 'checksums': ['9240866e2f773cd0ac8a02514871149d2babaa162a49e151eab9591ad42984ea'], + }), + ('d3Network', '0.5.2.1', { + 'checksums': ['5c798dc0c87c6d574abb7c1f1903346e6b0fec8adfd1df7aef5e4f9e7e3a09be'], + }), + ('BDgraph', '2.64', { + 'checksums': ['243f3af3724552049f8f4f55dd425e3313adab95e1128ae4d6551d96005fdf5e'], + }), + ('graphlayouts', '0.7.1', { + 'checksums': ['380f8ccb0b08735694e83f661fd56a0d592a78448ae91b89c290ba8582d66717'], + }), + ('tweenr', '1.0.2', { + 'checksums': ['1805f575da6705ca4e5ec1c4605222fc826ba806d9ff9af41770294fe08ff69f'], + }), + ('ggforce', '0.3.3', { + 'checksums': ['2a283bb409da6b96929863a926b153bcc59b2c6f00551805db1d1d43e5929f2f'], + }), + ('tidygraph', '1.2.0', { + 'checksums': ['057d6c42fc0144109f3ace7f5058cca7b2fe493c761daa991448b23f86b6129f'], + }), + ('ggraph', '2.0.5', { + 'checksums': ['e36ad49dba92ee8652e18b1fb197be0ceb9f0a2f8faee2194453a62578449654'], + }), + ('qgraph', '1.9', { + 'checksums': ['e1d7489c4db47878dccd34ded7e8173d58a190ad453d2e6e89f33549ccfd10aa'], + }), + ('HWxtest', '1.1.9', { + 'patches': ['HWxtest-1.1.9_add-fcommon.patch'], + 'checksums': [ + 'a37309bed4a99212ca104561239d834088217e6c5e5e136ff022544c706f25e6', # HWxtest_1.1.9.tar.gz + '4ce08c35035dbcc4edf092cdb405ae32c21c05b3786c15c0aa4bfe13bd81f451', # HWxtest-1.1.9_add-fcommon.patch + ], + }), + ('diveRsity', '1.9.90', { + 'checksums': ['b8f49cdbfbd82805206ad293fcb2dad65b962fb5523059a3e3aecaedf5c0ee86'], + }), + ('doSNOW', '1.0.19', { + 'checksums': ['4cd2d080628482f4c6ecab593313d7e42516f5ff13fbf9f90e461fcad0580738'], + }), + ('geepack', '1.3-2', { + 'checksums': ['99b53e40f7e5fda7422b143e6fee16513e2f880cb04a97cd403e98c4760670a6'], + }), + ('biom', '0.3.12', { + 'checksums': ['4ad17f7811c7346dc4923bd6596a007c177eebb1944a9f46e5674afcc5fdd5a1'], + }), + ('pim', '2.0.2', { + 'checksums': ['1195dbdbd67348dfef4b6fc34fcec643da685ebe58d34bbe049ab121aca9944f'], + }), + ('minpack.lm', '1.2-1', { + 'checksums': ['14cb7dba3ef2b46da0479b46d46c76198e129a31f6157cd8b37f178adb15d5a3'], + }), + ('rootSolve', '1.8.2.3', { + 'checksums': ['b5b3d1641642a3fd1279dbd1245f968d2331ac9588d77f872b113f7dc4594ba0'], + }), + ('diagram', '1.6.5', { + 'checksums': ['e9c03e7712e0282c5d9f2b760bafe2aac9e99a9723578d9e6369d60301f574e4'], + }), + ('FME', '1.3.6.2', { + 'checksums': ['65a200f8171e27f0a3d7ffce3e49b01561f219a11f3cb515ff613a45927ff618'], + }), + ('bmp', '0.3', { + 'checksums': ['bdf790249b932e80bc3a188a288fef079d218856cf64ffb88428d915423ea649'], + }), + ('tiff', '0.1-8', { + 'checksums': ['4b7482f70d8ecef9596b766ef1c64102c8b09208cb769c39d9e4db81cb3ba1a2'], + }), + ('readbitmap', '0.1.5', { + 'checksums': ['737d7d585eb33de2c200da64d16781e3c9522400fe2af352e1460c6a402a0291'], + }), + ('imager', '0.42.10', { + 'checksums': ['01939eb03ad2e1369a4240a128c3b246a4c56f572f1ea4967f1acdc555adaeee'], + }), + ('signal', '0.7-7', { + 'checksums': ['67a015c46d67de7548c3adb83a1b22524de75501a861d91668c3c2ea761a4e61'], + }), + ('tuneR', '1.3.3.1', { + 'checksums': ['cdcbf04ab5b547002ee5b1d3bc46145882c5a551f164cac43df71596f1edd18a'], + }), + ('pastecs', '1.3.21', { + 'checksums': ['8c1ef2affe88627f0b23295aa5edb758b8fd6089ef09f60f37c46445128b8d7c'], + }), + ('audio', '0.1-8', { + 'checksums': ['1a1c78bca63ed1fb5e30e00c593b67e1230b408e6a77c67082b41373d79b5bb4'], + }), + ('fftw', '1.0-6', { + 'checksums': ['397ef5ec354b919884f74fba4202bfc13ad11a70b16285c41677aad1d3b170ce'], + }), + ('seewave', '2.1.8', { + 'checksums': ['10e6487325ccd1c3cd64617182733f1472f3170974b32bb61a6b12ba7ddeeceb'], + }), + ('gsw', '1.0-6', { + 'checksums': ['147ce73da75777799af9cb712862ef25b52fcae146a64ce0a525460ddfea1deb'], + }), + ('wk', '0.5.0', { + 'checksums': ['71d500e0beaeed40501702adf214054d30278acb3171af6db4ae8dcdf5e7423a'], + }), + ('s2', '1.0.7', { + 'checksums': ['2010c1c6ae29938ec9cd153a8b2c06a333ea4d647932369b2fc7d0c68d6d9e3f'], + }), + ('sf', '1.0-3', { + 'checksums': ['2ee3ece4e5056fe267d76a785912a2285ddfc235b1be67b4c21b74dc39a831f8'], + }), + ('oce', '1.4-0', { + 'checksums': ['3b341448001164dc62b54a26c8f86adf50e68705ddc47615b290b950da734408'], + }), + ('ineq', '0.2-13', { + 'checksums': ['e0876403f59a3dfc2ea7ffc0d965416e1ecfdecf154e5856e5f54800b3efda25'], + }), + ('soundecology', '1.3.3', { + 'checksums': ['276164d5eb92c78726c647be16232d2443acbf7061371ddde2672b4fdb7a069a'], + }), + ('memuse', '4.2-1', { + 'checksums': ['f5e9dbaad4efbbfe219a93f446e318a00cad5b294bfc60ca2146eca894b47cf3'], + }), + ('pinfsc50', '1.2.0', { + 'checksums': ['ed1fe214b9261feef8abfbf724c2bd9070d68e99a6ea95208aff2c57bbef8794'], + }), + ('vcfR', '1.12.0', { + 'checksums': ['dd87ff010365de363864a44ca49887c0fdad0dd18d0d9c66e44e39c2d4581d52'], + }), + ('glmmML', '1.1.1', { + 'checksums': ['255fe2640933d83ef7ea5813ba8006038c18195147d1f34f47a759210a674dd4'], + }), + ('cowplot', '1.1.1', { + 'checksums': ['c7dce625b456dffc59ba100c816e16226048d12fdd29a7335dc1f6f6e12eed48'], + }), + ('tsne', '0.1-3', { + 'checksums': ['66fdf5d73e69594af529a9c4f261d972872b9b7bffd19f85c1adcd66afd80c69'], + }), + ('sn', '2.0.0', { + 'checksums': ['abd6ccdb3719b482db43ff2d5b12f2efcb8244792ec08e1176c5eb98fcc7886a'], + }), + ('tclust', '1.4-2', { + 'checksums': ['95dcd07dbd16383f07f5cea8561e7f3bf314e4a7483879841103b149fc8c65d9'], + }), + ('ranger', '0.13.1', { + 'checksums': ['60934f0accc21edeefddbb4ddebfdd7cd10a3d3e90b31aa2e6e4b7f50d632d0a'], + }), + ('hexbin', '1.28.2', { + 'checksums': ['6241f8d3a6c6be2c1c693c3ddb99554bc103e3c6cf602d0c2787c0ce6fd1702d'], + }), + ('lobstr', '1.1.1', { + 'checksums': ['b8c9ce00095bd4f304b4883ef71da24572022f0632a18c3e1ba317814e70716e'], + }), + ('pryr', '0.1.5', { + 'checksums': ['7b1653ec51850f4633cee8e2eb7d0b2724fb587b801539488b426cf88f0f770b'], + }), + ('moments', '0.14', { + 'checksums': ['2a3b81e60dafdd092d2bdd3513d7038855ca7d113dc71df1229f7518382a3e39'], + }), + ('laeken', '0.5.2', { + 'checksums': ['22790f7157f23eb0b7b0b89e2ea53478fb3c0d15b5be8ad11525d3e6d5626cdc'], + }), + ('VIM', '6.1.1', { + 'checksums': ['7581adca64cf20b93d5a111da83f663215b4529868b065b3463c4238bca97739'], + }), + ('smoother', '1.1', { + 'checksums': ['91b55b82f805cfa1deedacc0a4e844a2132aa59df593f3b05676954cf70a195b'], + }), + ('dynamicTreeCut', '1.63-1', { + 'checksums': ['831307f64eddd68dcf01bbe2963be99e5cde65a636a13ce9de229777285e4db9'], + }), + ('beeswarm', '0.4.0', { + 'checksums': ['51f4339bf4080a2be84bb49a844c636625657fbed994abeaa42aead916c3d504'], + }), + ('vipor', '0.4.5', { + 'checksums': ['7d19251ac37639d6a0fed2d30f1af4e578785677df5e53dcdb2a22771a604f84'], + }), + ('ggbeeswarm', '0.6.0', { + 'checksums': ['bbac8552f67ff1945180fbcda83f7f1c47908f27ba4e84921a39c45d6e123333'], + }), + ('shinydashboard', '0.7.2', { + 'checksums': ['a56ee48572649830cd8d82f1caa2099411461e19e19223cbad36a375299f3843'], + }), + ('rrcov', '1.6-0', { + 'checksums': ['795f3a49b3e17c9c6e0fdd865e81a0402cefda970032c8299bcf2056ca7ec944'], + }), + ('WriteXLS', '6.3.0', { + 'checksums': ['0b1d987abe4b08f6a32003b77d1cfc2eefdc5a478382e77ca0da98bccf6e526b'], + }), + ('bst', '0.3-23', { + 'checksums': ['70957f1db8800bf0d628a9e6f72b7273329786dd119427790b326844591aa0f3'], + }), + ('pamr', '1.56.1', { + 'checksums': ['d0e527f2336ee4beee91eefb2a8f0dfa96413d9b5a5841d6fc7ff821e67c9779'], + }), + ('WeightSVM', '1.7-9', { + 'checksums': ['983733b618631d9ad754fb12f5e576912aff1f529cafdee4fddfd38d81ccc710'], + }), + ('mpath', '0.4-2.19', { + 'checksums': ['fa0d92984910b8f556677850e3d899bc675724f0e2a3a73629d2700040335afe'], + }), + ('timereg', '2.0.1', { + 'checksums': ['38429ae21d9d090ed968d2e0c06cd0310cc304e974c353a97cde3d2e49f138d7'], + }), + ('peperr', '1.3', { + 'checksums': ['64d30b0ec09bf9b8f7b6edce67dd0f9e0e3dbe665fec8f5411f74142e53e9f5d'], + }), + ('heatmap3', '1.1.9', { + 'checksums': ['594c33947b2be2cc8a592075f41a0df2398c892add7d63a15c613a5eeb8fdb69'], + }), + ('GlobalOptions', '0.1.2', { + 'checksums': ['47890699668cfa9900a829c51f8a32e02a7a7764ad07cfac972aad66f839753e'], + }), + ('circlize', '0.4.13', { + 'checksums': ['6cbadbf8e8b1abbd71a79080677d2b95f2bdd18f2e4d707c32d5c2ff26c5369b'], + }), + ('GetoptLong', '1.0.5', { + 'checksums': ['8c237986ed3dfb72d956ad865ef7768644eebf144675ad66140acfd1aca9d701'], + }), + ('dendextend', '1.15.2', { + 'checksums': ['4ba3885b66694589d455ffef31c218fe653fa25aff3efb7e8db6c25008d2921b'], + }), + ('RInside', '0.2.16', { + 'checksums': ['7ae4ade128ea05f37068d59e610822ff0b277f9d39d8900f7eb31759ad5a2a0e'], + }), + ('limSolve', '1.5.6', { + 'checksums': ['b97ea9930383634c8112cdbc42f71c4e93fe0e7bfaa8f401921835cb44cb49a0'], + }), + ('dbplyr', '2.1.1', { + 'checksums': ['aba4cf47b85ab240fd3ec4cd8d512f6e1958201e151577c1a2ebc3d6ebc5bc08'], + }), + ('modelr', '0.1.8', { + 'checksums': ['825ba77d95d60cfb94920bec910872ca2ffe7790a44148b2992be2759cb361c4'], + }), + ('debugme', '1.1.0', { + 'checksums': ['4dae0e2450d6689a6eab560e36f8a7c63853abbab64994028220b8fd4b793ab1'], + }), + ('reprex', '2.0.1', { + 'checksums': ['0e6d8667cacb63135476a766fba3a4f91e5ad86274ea66d2b1e6d773b5ca6426'], + }), + ('selectr', '0.4-2', { + 'checksums': ['5588aed05f3f5ee63c0d29953ef53da5dac7afccfdd04b7b22ef24e1e3b0c127'], + }), + ('rvest', '1.0.2', { + 'checksums': ['89bb477e0944c80298a52ccf650db8f6377fd7ed3c1bc7034d000f695fdf05a4'], + }), + ('dtplyr', '1.1.0', { + 'checksums': ['99681b7285d7d5086e5595ca6bbeebf7f4e2ee358a32b694cd9d35916cdfc732'], + }), + ('gargle', '1.2.0', { + 'checksums': ['4d46ca2933f19429ca5a2cfe47b4130a75c7cd9931c7758ade55bac0c091d73b'], + }), + ('googledrive', '2.0.0', { + 'checksums': ['605c469a6a086ef4b049909c2e20a35411c165ce7ce4f62d68fd39ffed8c5a26'], + }), + ('ids', '1.0.1', { + 'checksums': ['b6212a186063c23116c5cbd3cca65dbb8977dd737261e4526ebee8f64852cfe8'], + }), + ('googlesheets4', '1.0.0', { + 'checksums': ['0a107d76aac99d6db48d97ce55810c1412b2197f457b8476f676169a36c7cc7a'], + }), + ('tidyverse', '1.3.1', { + 'checksums': ['83cf95109d4606236274f5a8ec2693855bf75d3a1b3bc1ab4426dcc275ed6632'], + }), + ('R.rsp', '0.44.0', { + 'checksums': ['8969075bdcabd43bad40eef6b82223e119426279fded041163fd41e55cee3a59'], + }), + ('gdistance', '1.3-6', { + 'checksums': ['2ccabeb2f8cf44630c0bd2da79815fe357b812737ebece1bed8f90b27c126a24'], + }), + ('vioplot', '0.3.7', { + 'checksums': ['06475d9a47644245ec91598e9aaef7db1c393802d9fc314420ac5139ae56adb6'], + }), + ('emulator', '1.2-21', { + 'checksums': ['9b50b2c1e673dbc5e846a4fa72e8bd03434add9f659bde6d7b0c4f1bbd713346'], + }), + ('gmm', '1.6-6', { + 'checksums': ['b1b321ad1b4a4a14a2825a2c3eb939ce2f2bcef995247a1d638eca250e59739b'], + }), + ('tmvtnorm', '1.4-10', { + 'checksums': ['1a9f35e9b4899672e9c0b263affdc322ecb52ec198b2bb015af9d022faad73f0'], + }), + ('IDPmisc', '1.1.20', { + 'checksums': ['bcb9cd7b8097e5089d1936286ef310ac2030ea7791350df706382ba470afc67f'], + }), + ('gap', '1.2.3-1', { + 'checksums': ['343ae58ca91e75147ae3961285c3413bdf6dedf7cb4743a822a6c5b16d1b89e7'], + }), + ('qrnn', '2.0.5', { + 'checksums': ['3bd83ee8bd83941f9defdab1b5573d0ceca02bf06759a67665e5b9358ff92f52'], + }), + ('TMB', '1.7.22', { + 'checksums': ['c24125e1a37ed2b3c2554133183465cb6f3c0021cd4d4609c61336f59c3bd384'], + }), + ('glmmTMB', '1.1.2.3', { + 'checksums': ['55631e001ff3f1d8e419e3b0b5555317713c733c11a2f7d4db6434d8c4e7dcf9'], + }), + ('gmp', '0.6-2', { + 'checksums': ['6bfcb45b3f1e7da27d8773f911027355cab371d150c3dabf7dbaf8fba85b7f0e'], + }), + ('ROI', '1.0-0', { + 'checksums': ['b0d87fb4ed2137d982734f3c5cdc0305aabe6e80f95de29655d02a9e82a0a341'], + }), + ('Rglpk', '0.6-4', { + 'checksums': ['a28dbc3130b9618d6ed2ef718d2c55df8ed8c44a47161097c53fe15fa3bfbfa6'], + }), + ('ROI.plugin.glpk', '1.0-0', { + 'checksums': ['b361b0d4222d74b21432cdc6990762affecdbcec8fd6bbdb13b78b59cb04b444'], + }), + ('spaMM', '3.9.13', { + 'checksums': ['f9ded29106c656ff15ddc2564c16d44b77f08dac1f2dea5720028923e83e2514'], + }), + ('qgam', '1.3.3', { + 'checksums': ['9a68fe4e74f4188862f7c01d682d50ffadd96ce7b98383404472309c87e3a26f'], + }), + ('DHARMa', '0.4.4', { + 'checksums': ['b5a073f84faf7144f2074a43f619f8f264773afb0e09ca0294735e792552edca'], + }), + ('mvnfast', '0.2.7', { + 'checksums': ['b67d50936c9a466977669ef6bb7b23df8e7c90a820ac916328c20e41ef8e0b72'], + }), + ('bridgesampling', '1.1-2', { + 'checksums': ['54ecd39aa2e36d4d521d3d36425f9fe56a3f8547df6048c814c5931d790f3e6b'], + }), + ('BayesianTools', '0.1.7', { + 'checksums': ['af49389bdeb794da3c39e1d63f59e6219438ecb8613c5ef523b00c6fed5a600c'], + }), + ('gomms', '1.0', { + 'checksums': ['52828c6fe9b78d66bde5474e45ff153efdb153f2bd9f0e52a20a668e842f2dc5'], + }), + ('feather', '0.3.5', { + 'checksums': ['50ff06d5e24d38b5d5d62f84582861bd353b82363e37623f95529b520504adbf'], + }), + ('dummies', '1.5.6', { + 'checksums': ['7551bc2df0830b98c53582cac32145d5ce21f5a61d97e2bb69fd848e3323c805'], + }), + ('SimSeq', '1.4.0', { + 'checksums': ['5ab9d4fe2cb1b7634432ff125a9e04d2f574fed06246a93859f8004e10790f19'], + }), + ('uniqueAtomMat', '0.1-3-2', { + 'checksums': ['f7024e73274e1e76a870ce5e26bd58f76e8f6df0aa9775c631b861d83f4f53d7'], + }), + ('PoissonSeq', '1.1.2', { + 'checksums': ['6f3dc30ad22e33e4fcfa37b3427c093d591c02f1b89a014d85e63203f6031dc2'], + }), + ('aod', '1.3.1', { + 'checksums': ['052d8802500fcfdb3b37a8e3e6f3fbd5c3a54e48c3f68122402d2ea3a15403bc'], + }), + ('cghFLasso', '0.2-1', { + 'checksums': ['6e697959b35a3ceb2baa1542ef81f0335006a5a9c937f0173c6483979cb4302c'], + }), + ('svd', '0.5', { + 'checksums': ['d042d448671355d0664d37fd64dc90932eb780e6494c479d4431d1faae2071a1'], + }), + ('Rssa', '1.0.4', { + 'checksums': ['4115b516f6782d52f02695bbbd52921a474aafc7232d49aca85010f1c33b08a7'], + }), + ('JBTools', '0.7.2.9', { + 'checksums': ['b33cfa17339df7113176ad1832cbb0533acf5d25c36b95e888f561d586c5d62f'], + }), + ('RUnit', '0.4.32', { + 'checksums': ['23a393059989000734898685d0d5509ece219879713eb09083f7707f167f81f1'], + }), + ('DistributionUtils', '0.6-0', { + 'checksums': ['7443d6cd154760d55b6954142908eae30385672c4f3f838dd49876ec2f297823'], + }), + ('gapfill', '0.9.6-1', { + 'checksums': ['22f04755873e34a9077bb1b1de8d16f5bc56cb8c395c4f797f9ad0b209b1b996'], + }), + ('gee', '4.13-20', { + 'checksums': ['53014cee059bd87dc22f9679dfbf18fe6813b9ab41dfe90361921159edfbf798'], + }), + ('Matching', '4.9-11', { + 'checksums': ['1c71ca8462b3168839bf446ee8e5b4baa6288a72f8c8590c9d7565c91fba7688'], + }), + ('MatchIt', '4.3.0', { + 'checksums': ['ca897ab81a7c19ebd4cbc67011c6223668ad5a8876b10f665a86f5f79ed85446'], + }), + ('RItools', '0.1-17', { + 'checksums': ['75654780e9ca39cb3c43acfaca74080ad74de50f92c5e36e95694aafdfdc0cea'], + }), + ('mitools', '2.4', { + 'checksums': ['f204f3774e29d79810f579f128de892539518f2cbe6ed237e08c8e7283155d30'], + }), + ('survey', '4.1-1', { + 'checksums': ['05e89a1678a39e32bfb41af8a31d643b04fc4d2660a96e701825e6bffcd75a52'], + }), + ('optmatch', '0.9-15', { + 'checksums': ['7500fdbed939b7f16603a097d734a332793a3ac68e6a80c7957bef2a567691d8'], + }), + ('SPAtest', '3.1.2', { + 'checksums': ['b3d74ed2b0a6475a9966dd50eb5d363d0b2985636271dfbf82f0472b8d22b9f4'], + }), + ('SKAT', '2.0.1', { + 'checksums': ['c8637cf5786b926f6bbef3f4ef1d3af5130cc0cfd9094d4835839724b2d0e8c7'], + }), + ('GillespieSSA', '0.6.1', { + 'checksums': ['272e9b6b26001d166fd7ce8d04f32831ba23c676075fbd1e922e27ba2c962052'], + }), + ('startupmsg', '0.9.6', { + 'checksums': ['1d60ff13bb260630f797bde66a377a5d4cd65d78ae81a3936dc4374572ec786e'], + }), + ('distr', '2.8.0', { + 'checksums': ['bb7df05d6b946bcdbbec2e3397c7c7e349b537cabfcbb13a34bcf6312a71ceb7'], + }), + ('distrEx', '2.8.0', { + 'checksums': ['b064cde7d63ce93ec9969c8c4463c1e327758b6f8ea7765217d77f9ba9d590bf'], + }), + ('minerva', '1.5.10', { + 'checksums': ['2f26353d8fcc989ac698c4e45bb683801b1a7bb60b14903d05a4d73c629c590f'], + }), + ('KODAMA', '1.8', { + 'checksums': ['1ed9c14826c3c549c7323672cee04a71048c505c130e739ef5a95ed9bfe43444'], + }), + ('locfdr', '1.1-8', { + 'checksums': ['42d6e12593ae6d541e6813a140b92591dabeb1df94432a515507fc2eee9a54b9'], + }), + ('ica', '1.0-2', { + 'checksums': ['e721596fc6175d3270a60d5e0b5b98be103a8fd0dd93ef16680af21fe0b54179'], + }), + ('dtw', '1.22-3', { + 'checksums': ['df7cf9adf613422ddb22a160597eb5f5475ab6c67c0d790092edb7f72ba98f00'], + }), + ('SDMTools', '1.1-221.2', { + 'checksums': ['f0dd8c5f98d2f2c012536fa56d8f7a58aaf0c11cbe3527e66d4ee3194f6a6cf7'], + }), + ('ggridges', '0.5.3', { + 'checksums': ['f5eafab17f2d4a8a2a83821ad3e96ae7c26b62bbce9de414484c657383c7b42e'], + }), + ('TFisher', '0.2.0', { + 'checksums': ['bd9b7484d6fba0165841596275b446f85ba446d40e92f3b9cb37381a3827e76f'], + }), + ('lsei', '1.3-0', { + 'checksums': ['6289058f652989ca8a5ad6fa324ce1762cc9e36c42559c00929b70f762066ab6'], + }), + ('npsurv', '0.5-0', { + 'checksums': ['bc87db76e7017e178c2832a684fcd49c42e20054644b21b586413d26c8821dc6'], + }), + ('fitdistrplus', '1.1-6', { + 'checksums': ['17c2990041a3bb7479f3c3a6d13d96c989db8eaddab17eff7e1fbe172a5b96be'], + }), + ('here', '1.0.1', { + 'checksums': ['08ed908033420d3d665c87248b3a14d1b6e2b37844bf736be620578c20ca346b'], + }), + ('reticulate', '1.22', { + 'checksums': ['b06e7b39abf08ae9604ea26d02e3c6e4ef6dcc4b6c7c98118fd85192f615f56c'], + }), + ('hdf5r', '1.3.4', { + 'installopts': '--configure-args="--with-hdf5=$EBROOTHDF5/bin/h5cc"', + 'preinstallopts': "unset LIBS && ", + 'checksums': ['64d057601841b604e04e8514d33a1e5e515dcbfd9cc8369d40d717d7036fab53'], + }), + ('DTRreg', '1.7', { + 'checksums': ['f0fad2244d960cec8fc33d9a1078df359ceb0aadff980ce6149aa9f01c62223b'], + }), + ('pulsar', '0.3.7', { + 'checksums': ['78c9f7e3b2bf8a8d16a81d6ee43bb05b0c360219be473d920c8c8ccb2aba4e3d'], + }), + ('bayesm', '3.1-4', { + 'checksums': ['061b216c62bc72eab8d646ad4075f2f78823f9913344a781fa53ea7cf4a48f94'], + }), + ('gsl', '2.1-7', { + 'checksums': ['1a86af59d9864ecf2a85d5371076786e7a0491d6d6b4d5c1a7590ea8919f3b17'], + }), + ('energy', '1.7-8', { + 'checksums': ['de08e8de037bb30068bbf0c1880b153a586d342304681f4ba103ab808c7f4789'], + }), + ('compositions', '2.0-2', { + 'checksums': ['b5e47a14a1bb010b47b4ad7fbfabfead1a08b009b92e1f7d4bd3bd7f8589f216'], + }), + ('clustree', '0.4.3', { + 'checksums': ['5ff3afc3fb3e1d20d033328935084de574250d29545c0a5b69180fe4846fbe53'], + }), + ('plotly', '4.10.0', { + 'checksums': ['bd995c654dbc8c09a84adaba8def99766919e3894caf18b551bb26b2f591389a'], + }), + ('tweedie', '2.3.3', { + 'checksums': ['a032cad512dac37a8619e6f66cb513eb82a88a5a2ffbe91e92c2d44d1756d0d9'], + }), + ('RcppGSL', '0.3.10', { + 'checksums': ['8612087da02fb791f427fed310c23d0482a8eb60fb089119f018878143f95451'], + }), + ('mvabund', '4.1.12', { + 'checksums': ['c1af39dbfd048c9bb367765ee266be49622e1a5d964186920a2d47bec4e6f780'], + }), + ('fishMod', '0.29', { + 'checksums': ['5989e49ca6d6b2c5d514655e61f75b019528a8c975f0d6056143f17dc4277a5d'], + }), + ('gllvm', '1.3.1', { + 'checksums': ['cd3f72b84f0c722e9c0b21c2b2de7683ec742345d7f8e62f67c8c93342c1a5c6'], + }), + ('grpreg', '3.4.0', { + 'checksums': ['fd57d20baf63d2cc5821998bca5c3fdcbe46c933c9553caa492911b12654d6ad'], + }), + ('trust', '0.1-8', { + 'checksums': ['952e348b62aec35988b103fd152329662cb6a451538f184549252fbf49d7dcac'], + }), + ('lpSolveAPI', '5.5.2.0-17.7', { + 'checksums': ['9ebc8e45ad73eb51e0b25049598a5bc758370cf89508e2328cf4bd93d68d55bb'], + }), + ('ergm', version, { + 'checksums': ['1abc6ef53376a4132530c376ce477ae7a2590e95fe8feb011c0da9cfb4d49ba0'], + }), + ('networkDynamic', '0.11.0', { + 'checksums': ['aa21caaddce75c22e08b94adfb6036f5ee151ffb79d174ad250fe4592d27dad2'], + }), + ('tergm', '4.0.2', { + 'checksums': ['5ab1d61166c90f90c77edd12544b5946e01a933cc3e7ca609cae72075b742a64'], + }), + ('ergm.count', '4.0.2', { + 'checksums': ['316ed3cbe4b472eec79e8a5fd4183ce953070f6d98056d87423bd6d9ac155bd1'], + }), + ('tsna', '0.3.4', { + 'checksums': ['08fd9612388b86077cd877a48f81068d63f20291836eedbc727c9e00c1a2b4d2'], + }), + ('statnet', '2019.6', { + 'checksums': ['0903e1a81ed1b6289359cefd12da1424c92456d19e062c3f74197b69e536b29d'], + }), + ('aggregation', '1.0.1', { + 'checksums': ['86f88a02479ddc8506bafb154117ebc3b1a4a44fa308e0193c8c315109302f49'], + }), + ('ComICS', '1.0.4', { + 'checksums': ['0af7901215876f95f309d7da6e633c38e4d7faf04112dd6fd343bc15fc593a2f'], + }), + ('dtangle', '2.0.9', { + 'checksums': ['c375068c1877c2e8cdc5601cfd5a9c821645c3dff90ddef64817f788f372e179'], + }), + ('mcmc', '0.9-7', { + 'checksums': ['b7c4d3d5f9364c67a4a3cd49296a61c315ad9bd49324a22deccbacb314aa8260'], + }), + ('MCMCpack', '1.6-0', { + 'checksums': ['b5b9493457d11d4dca12f7732bd1b3eb1443852977c8ee78393126f13deaf29b'], + }), + ('shinythemes', '1.2.0', { + 'checksums': ['37d68569ce838c7da9f0ea7e2b162ecf38fba2ae448a4888b6dd29c4bb5b2963'], + }), + ('csSAM', '1.2.4', { + 'checksums': ['3d6442ad8c41fa84633cbbc275cd67e88490a160927a5c55d29da55a36e148d7'], + }), + ('bridgedist', '0.1.0', { + 'checksums': ['dc7c1c8874d6cfa34d550d9af194389e13471dfbc55049a1ab66db112fbf1343'], + }), + ('asnipe', '1.1.16', { + 'checksums': ['be50f9fdef0f4bf9676b9c3c2906d0431afc678af55cf48b1119f9fc0adac44f'], + }), + ('liquidSVM', '1.2.4', { + 'patches': ['liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch'], + 'preinstallopts': 'LIQUIDSVM_TARGET="empty"', + 'checksums': [ + '15a9c7f2930e2ed3f4c5bcd9b042884ea580d2b2e52e1c68041600c196046aba', # liquidSVM_1.2.4.tar.gz + # liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch + '46b09e441c3b59af535f20d8db0dee7f1d6a7ddd511175d252115b53cb8b86f8', + ], + }), + ('oddsratio', '2.0.1', { + 'checksums': ['2097e7a8bf623379d55652de5dce4946d05163e85d30df50dc19055962bf60b5'], + }), + ('mltools', '0.3.5', { + 'checksums': ['7093ffceccdf5d4c3f045d8c8143deaa8ab79935cc6d5463973ffc7d3812bb10'], + }), + ('h2o', '3.34.0.3', { + 'checksums': ['2a707b9f7271eae611c9e81b13d2024b8829f6b06b3c41c5b97de1aef591931e'], + }), + ('mlegp', '3.1.8', { + 'checksums': ['eac1df085a608451828575028ca05b78dc6b5035da14cabc141bfee5ef986de9'], + }), + ('itertools', '0.1-3', { + 'checksums': ['b69b0781318e175532ad2d4f2840553bade9637e04de215b581704b5635c45d3'], + }), + ('missForest', '1.4', { + 'checksums': ['f785804b03bdf424e1c76095989a803afb3b47d6bebca9a6832074b6326c0278'], + }), + ('bartMachineJARs', '1.1', { + 'checksums': ['f2c31cb94d7485174a2519771127a102e35b9fe7f665e27beda3e76a56feeef2'], + }), + ('bartMachine', '1.2.6', { + 'checksums': ['5e1ac0033da5b41a96d95782886a167e51ff8e43822800e8d40874ff9c13847f'], + }), + ('lqa', '1.0-3', { + 'checksums': ['3889675dc4c8cbafeefe118f4f20c3bd3789d4875bb725933571f9991a133990'], + }), + ('PresenceAbsence', '1.1.9', { + 'checksums': ['1a30b0a4317ea227d674ac873ab94f87f8326490304e5b08ad58953cdf23169f'], + }), + ('GUTS', '1.1.1', { + 'checksums': ['094b8f51719cc36ddc56e3412dbb146eafc93c5e8fbb2c5999c2e80ea7a7d216'], + }), + ('GenSA', '1.1.7', { + 'checksums': ['9d99d3d0a4b7770c3c3a6de44206811272d78ab94481713a8c369f7d6ae7b80f'], + }), + ('parsedate', '1.2.1', { + 'checksums': ['6b078da4a47904194bfe29e2c3b6fbbf6e3ad190e33979f840a3ea366c708616'], + }), + ('circular', '0.4-93', { + 'checksums': ['76cee2393757390ad91d3db3e5aeb2c2d34c0a46822b7941498571a473417142'], + }), + ('cobs', '1.3-4', { + 'checksums': ['a1c7b77e4ca097349884fd1c0d863d74f9092766131094d603f34d33ab2e3c42'], + }), + ('resample', '0.4', { + 'checksums': ['f0d5f735e1b812612720845d79167a19f713a438fd10a6a3206e667045fd93e5'], + }), + ('MIIVsem', '0.5.8', { + 'checksums': ['a908f51e1598290d25864c358d57201bd50c1c40775d4d0405cbc8077bee61e1'], + }), + ('medflex', '0.6-7', { + 'checksums': ['d28107a4bbbb0ace1d571f0aa6884ee4c50d7731c04bceba207fd55a39b83b9c'], + }), + ('Rserve', '1.7-3.1', { + 'checksums': ['3ba1e919706e16a8632def5f45d666b6e44eafa6c14b57064d6ddf3415038f99'], + }), + ('spls', '2.2-3', { + 'checksums': ['bbd693da80487eef2939c37aba199f6d811ec289828c763d9416a05fa202ab2e'], + }), + ('Boruta', '7.0.0', { + 'checksums': ['6ff520d27d68637058c33a34c547a656bb44d5e351b7cc7afed6cd4216275c78'], + }), + ('dr', '3.0.10', { + 'checksums': ['ce523c1bdb62a9dda30afc12b1dd96975cc34695c61913012236f3b80e24bf36'], + }), + ('CovSel', '1.2.1', { + 'checksums': ['b375d00cc567e125ff106b4357654f43bba3abcadeed2238b6dea4b7a68fda09'], + }), + ('tmle', '1.5.0.2', { + 'checksums': ['4772c352e8d3d9b5a0b7480c0e0962de4f5060fb7bf3fcb8ee4fa1cb10f93fd4'], + }), + ('ctmle', '0.1.2', { + 'checksums': ['e3fa0722cd87aa0e0b209c2dddf3fc44c6d09993f1e66a6c43285fe950948161'], + }), + ('BayesPen', '1.0', { + 'checksums': ['772df9ae12cd8a3da1d5b7d1f1629602c7693f0eb03945784df2809e2bb061b0'], + }), + ('inline', '0.3.19', { + 'checksums': ['0ee9309bb7dab0b97761ddd18381aa12bd7d54678ccd7bec00784e831f4c99d5'], + }), + ('BMA', '3.18.15', { + 'checksums': ['4be0d52f433503631e9574944067f613bafba129ebe27396bcfccb3b95992b1a'], + }), + ('BCEE', '1.3.0', { + 'checksums': ['82afc9b8c6d617f5f728341960ae32922194f637c550916b3bea12c231414fa7'], + }), + ('bacr', '1.0.1', { + 'checksums': ['c847272e2c03fd08ed79b3b739f57fe881af77404b6fd087caa0c398c90ef993'], + }), + ('clue', '0.3-60', { + 'checksums': ['6d21ddfd0d621ed3bac861890c600884b6ed5ff7d2a36c9778b892636dbbef2a'], + }), + ('bdsmatrix', '1.3-4', { + 'checksums': ['251e21f433a016ec85e478811ea3ad34c572eb26137447f48d1bbf3cc8bb06ea'], + }), + ('fftwtools', '0.9-11', { + 'checksums': ['f1f0c9a9086c7b2f72c5fb0334717cc917213a004eaef8448eab4940c9852c7f'], + }), + ('imagerExtra', '1.3.2', { + 'checksums': ['0ebfa1eabb89459d774630ab73c7a97a93b9481ea5afc55482975475acebd5b8'], + }), + ('MALDIquant', '1.20', { + 'checksums': ['fff39d5df295b937cdad57b73d4e06e925f69e68784ef58b5dfcd3cf500931c1'], + }), + ('threejs', '0.3.3', { + 'checksums': ['76c759c8b20fb34f4f7a01cbd1b961296e1f19f4df6dded69aae7f1bca80219c'], + }), + ('LaplacesDemon', '16.1.6', { + 'checksums': ['57b53882fd7a195b38bbdbbf0b17745405eb3159b1b42f7f11ce80c78ab94eb7'], + }), + ('rda', '1.0.2-2.1', { + 'checksums': ['eea3a51a2e132a023146bfbc0c384f5373eb3ea2b61743d7658be86a5b04949e'], + }), + ('sampling', '2.9', { + 'checksums': ['7f5ba5978f6cdbbbdb6f51958197b28b6fc63e7eeee59e6845ea09fb37d1b187'], + }), + ('lda', '1.4.2', { + 'checksums': ['5606a1e1bc24706988853528023f7a004c725791ae1a7309f1aea2fc6681240f'], + }), + ('jiebaRD', '0.1', { + 'checksums': ['045ee670f5378fe325a45b40fd55136b355cbb225e088cb229f512c51abb4df1'], + }), + ('jiebaR', '0.11', { + 'checksums': ['adde8b0b21c01ec344735d49cd33929511086719c99f8e10dce4ca9479276623'], + }), + ('hdm', '0.3.1', { + 'checksums': ['ba087565e9e0a8ea30a6095919141895fd76b7f3c05a03e60e9e24e602732bce'], + }), + ('abe', '3.0.1', { + 'checksums': ['66d2e9ac78ba64b7d27b22b647fc00378ea832f868e51c18df50d6fffb8029b8'], + }), + ('SignifReg', '4.2', { + 'checksums': ['53d2ff3ddbb398655b245ad3a19c028d6fb6bb1d59adeb30bb3497606733fc2d'], + }), + ('bbmle', '1.0.24', { + 'checksums': ['01edc00479fabf7491e47ff59bc4adbe6f0d4c23d22e76d1d49c4c1b6b4693ad'], + }), + ('emdbook', '1.3.12', { + 'checksums': ['0646caf9e15aaa61ff917a4b5fdf82c06ac17ef221a61dec3fbb554e7bff4353'], + }), + ('SOAR', '0.99-11', { + 'checksums': ['d5a0fba3664087308ce5295a1d57d10bad149eb9771b4fe67478deae4b7f68d8'], + }), + ('rasterVis', '0.51.0', { + 'checksums': ['5225334add4dd3502044cf80a00543b766568c2d93c47af180f66a76942d76be'], + }), + ('tictoc', '1.0.1', { + 'checksums': ['a09a1535c417ddf6637bbbda5fca6edab6c7f7b252a64e57e99d4d0748712705'], + }), + ('ISOcodes', '2021.02.24', { + 'checksums': ['152769bcb4ae99d06a767384541c2000c94990a2c6983780837f85e885b539a6'], + }), + ('stopwords', '2.3', { + 'checksums': ['c5ec1c6ab1bad1786d87d7823d4b63abc94d2fd84ed7d8e985906e96fb6321b2'], + }), + ('janeaustenr', '0.1.5', { + 'checksums': ['992f6673653daf7010fe176993a01cd4127d9a88be428da8da7a28241826d6f3'], + }), + ('SnowballC', '0.7.0', { + 'checksums': ['b10fee9d322f567a22c580b49b5d4ba1c86eae40a71794ca92552c726b3895f3'], + }), + ('tokenizers', '0.2.1', { + 'checksums': ['28617cdc5ddef5276abfe14a2642999833322b6c34697de1d4e9d6dc7670dd00'], + }), + ('hunspell', '3.0.1', { + 'checksums': ['1fedbb913bc13c790d2fabfe4edda0a987db3a078bea8c0ca9b777d20af08662'], + }), + ('topicmodels', '0.2-12', { + 'checksums': ['afd83a4381bf39e470446ebefd41ed03f314be400c1b2f702a4b1060eb8fd1b4'], + }), + ('tidytext', '0.3.2', { + 'checksums': ['6fe0ada78ee2cdf77c16e519a29b9baff61d8e23ab56aa0a9adc1b2a99a6472b'], + }), + ('splitstackshape', '1.4.8', { + 'checksums': ['656032c3f1e3dd5b8a3ee19ffcae617e07104c0e342fc3da4d863637a770fe56'], + }), + ('grImport2', '0.2-0', { + 'checksums': ['a102a2d877e42cd4e4e346e5510a77b2f3e57b43ae3c6d5c272fdceb506b00a7'], + }), + ('preseqR', '4.0.0', { + 'checksums': ['0143db473fb9a811f9cf582a348226a5763e62d9857ce3ef4ec41412abb559bc'], + }), + ('idr', '1.2', { + 'checksums': ['8bbfdf82c8c2b5c73eb079127e198b6cb65c437bb36729f502c7bcd6037fdb16'], + }), + ('entropy', '1.3.1', { + 'checksums': ['6f5a89f5ce0e90cbed1695b81259326c976e7a8f538157e223ee5f63b54412b8'], + }), + ('kedd', '1.0.3', { + 'checksums': ['38760abd8c8e8f69ad85ca7992803060acc44ce68358de1763bd2415fdf83c9f'], + }), + ('HiddenMarkov', '1.8-13', { + 'checksums': ['7186d23e561818f3e1f01376a4fb2af9ccee775ce5afc1e3175f3b07a81db515'], + }), + ('lmerTest', '3.1-3', { + 'checksums': ['35aa75e9f5f2871398ff56a482b013e6828135ef04916ced7d1d7e35257ea8fd'], + }), + ('loo', '2.4.1', { + 'checksums': ['bc21fb6b4a93a7e95ee1be57e4e787d731895fb8b4743c26b30b43adee475b50'], + }), + ('RcppParallel', '5.1.4', { + 'checksums': ['76b545a6878c55edba780183fd89a76fe723b7f19709c5243495dcf3d54eea82'], + }), + ('StanHeaders', '2.21.0-7', { + 'checksums': ['27546e064f0e907e031d9185ad55245d118d82fbe3074ecb1d76fae8b9f2336b'], + }), + ('V8', '3.4.2', { + 'installopts': '--configure-vars="INCLUDE_DIR=$CPATH LIB_DIR=$LIBRARY_PATH"', + 'preinstallopts': "export CPATH=$EBROOTNODEJS/include/node:$CPATH && ", + 'checksums': ['210643473ca8bf423fae34ce72ceb37a3e44c3315ec4abae59a77f077542d2ed'], + }), + ('rstan', '2.21.2', { + 'checksums': ['e30e04d38a612e2cb3ac69b53eaa19f7ede8b3548bf82f7892a2e9991d46054a'], + }), + ('Rborist', '0.2-3', { + 'checksums': ['f3b3f953ca99e0d17425ac6ba9a7b1e9d6098343abace575cdb492bca2a9c461'], + }), + ('VSURF', '1.1.0', { + 'checksums': ['eee99e0c441795c2ccb21cc6e0a37b24f580241e494c83e811b726b43469eeab'], + }), + ('mRMRe', '2.1.2', { + 'checksums': ['a59a3cb3cca89f51d9ee6702cd479fd7db8bc2e25b72f45cb6712da983777ca0'], + }), + ('dHSIC', '2.1', { + 'checksums': ['94c86473790cf69f11c68ed8ba9d6ae98218c7c69b7a9a093f235d175cf83db0'], + }), + ('ggsci', '2.9', { + 'checksums': ['4af14e6f3657134c115d5ac5e65a2ed74596f9a8437c03255447cd959fe9e33c'], + }), + ('ggsignif', '0.6.3', { + 'checksums': ['ca8545b25590e531512a90a18449a2cbab945f7434a1d60188c41f7d1839a7a9'], + }), + ('corrplot', '0.90', { + 'checksums': ['d9871f219351f443f879ae93c45e3a364eb32cc6f41491a801e7b8a91e96d5dd'], + }), + ('rstatix', '0.7.0', { + 'checksums': ['a5ae17dc32cc26fc5dcab9ff0a9747ce3786c9fe091699247ad8b9f823f2600c'], + }), + ('ggfan', '0.1.3', { + 'checksums': ['5c888b203ecf5e3dc7a317a790ca059c733002fbca4b4bc1a4f62b7ded5f70dc'], + }), + ('ggpubr', '0.4.0', { + 'checksums': ['abb21ec0b1ae3fa1c58eedca2d59b9b009621b30e3660f1247b3880c5fa50675'], + }), + ('yaImpute', '1.0-32', { + 'checksums': ['08eee5d851b80aad9c7c80f9531aadd50d60e4b16b3a80657a50212269cd73ff'], + }), + ('intrinsicDimension', '1.2.0', { + 'checksums': ['6cc9180a83aa0d123f1e420136bb959c0d5877867fa170b79536f5ee22106a32'], + }), + ('patchwork', '1.1.1', { + 'checksums': ['cf0d7d9f92945729b499d6e343441c55007d5b371206d5389b9e5154dc7cf481'], + }), + ('leiden', '0.3.9', { + 'checksums': ['81754276e026a9a8436476365bbadf0f15a403a525a349cb56418da5d8edea0d'], + }), + ('sctransform', '0.3.2', { + 'checksums': ['5dbb0a045e514c19f51bbe11c2dba0b72dca1942d6eb044c36b0538b443475dc'], + }), + ('packrat', '0.7.0', { + 'checksums': ['e8bce1fd78f28f3a7bf56e65a2ae2c6802e69bf55466c24e1d1a4b8a5f83dcc2'], + }), + ('colourpicker', '1.1.1', { + 'checksums': ['a0d09982b048b143e2c3438ccec039dd20d6f892fa0dedc9fdcb0d40de883ce0'], + }), + ('ggExtra', '0.9', { + 'checksums': ['f22db92d6e3e610901998348acbcaa6652fa6c62a285a622d3b962ba9e89aba2'], + }), + ('findpython', '1.0.7', { + 'checksums': ['59f904b9c2ec84b589380de59d13afbf14d1ec3b670e3a07e820298aaf04c149'], + }), + ('argparse', '2.1.2', { + 'checksums': ['9997359a735359580ab6b054672388a55701fca71c80b54bab1aedc13bc5e5b3'], + }), + ('intergraph', '2.0-2', { + 'checksums': ['6cbe77f1e87fa1c110db2d46010f2f3ae72bfdb708ce2ca84c1cdc2cd6eb47a1'], + }), + ('ggnetwork', '0.5.10', { + 'checksums': ['1b655dbab8eed8d0aa3ab2148aac8e0e5bfa190468f5e3c06b001ce88b7f0d3f'], + }), + ('qqman', '0.1.8', { + 'checksums': ['58da8317df8d726d1fde4805919da5d64f880894a423ee20937cafb479b9d8a8'], + }), + ('rstantools', '2.1.1', { + 'checksums': ['c95b15de8ec577eeb24bb5206e7b685d882f88b5e6902efda924b7217f463d2d'], + }), + ('bayesplot', '1.8.1', { + 'checksums': ['d8d74201ea91fa5438714686ca22a947ec9375b6c12b0cfef010c57104b1aa2a'], + }), + ('dygraphs', '1.1.1.6', { + 'checksums': ['c3d331f30012e721a048e04639f60ea738cd7e54e4f930ac9849b95f0f005208'], + }), + ('rsconnect', '0.8.24', { + 'checksums': ['cf6bef1e073d6fa95c8be8a00e9e4982b88f4bab0e8ecd77db816a585be2e4a6'], + }), + ('shinystan', '2.5.0', { + 'checksums': ['45f9c552a31035c5de8658bb9e5d72da7ec1f88fbddb520d15fe701c677154a1'], + }), + ('optimx', '2021-10.12', { + 'checksums': ['39384c856b5efa3992cd230548b60eff936d428111ad6ad5b8fb98a3bcbb7943'], + }), + ('gamm4', '0.2-6', { + 'checksums': ['57c5b66582b2adc32f6a3bb6a259f5b95198e283a96d966a6007e8e48b380c89'], + }), + ('projpred', '2.0.2', { + 'checksums': ['af0a9fb53f706090fe81b6381b27b0b6bd3f7ae1e1e44b0ada6f40972b09a55b'], + }), + ('distributional', '0.2.2', { + 'checksums': ['028e5a91aabe3a676eb7b7f3dc907f7f34735a123fe0d9adcabc03476504435f'], + }), + ('posterior', '1.1.0', { + 'checksums': ['eff6262dbcc1bf18337f535b0c75ba2fe360322e8b170c466e24ed3ee76cf4d2'], + }), + ('brms', '2.16.1', { + 'checksums': ['749efbd9fb061fe207cf2e729c1387d9a8538b922f12ceec4e82a9f8dd9c1bc4'], + }), + ('drgee', '1.1.10', { + 'checksums': ['e684f07f7dfec922380d4202922c11094f859721f77b31ff38b0d35d0f42c743'], + }), + ('stdReg', '3.4.1', { + 'checksums': ['285335dbe29b6898641e1151ab2f06acf76c6f4d6fbeadd66d151c25d7e38a74'], + }), + ('mcmcse', '1.5-0', { + 'checksums': ['4a820dc22c48efd32b7f9d1e1b897b4b3f165cd64b2ff85ba7029621cf9e7463'], + }), + ('copCAR', '2.0-4', { + 'checksums': ['8b4ed53c58a665f70e48bdca689a992a81d5ecb5a6051ca7361d3870e13c77f3'], + }), + ('batchmeans', '1.0-4', { + 'checksums': ['8694573009d9070a76007281407d3314da78902e122a9d8aec1f819d3bbe562c'], + }), + ('ngspatial', '1.2-2', { + 'checksums': ['3fa79e45d3a502a58c1454593ec83dfc73144e92b34c14f617a6126557dd0d26'], + }), + ('BIGL', '1.6.5', { + 'checksums': ['5be825734d76760723e2d5b8fbe03524a2b59d9163b33841d4a2c9ab2d4257cf'], + }), + ('drugCombo', '1.2.1', { + 'checksums': ['9a605c655c159604033558d757711e6d83d33dfc286c1280f722d4cb7d130f80'], + }), + ('betareg', '3.1-4', { + 'checksums': ['5106986096a68b2b516215968158589b71969ce7912879253d6e930355a18101'], + }), + ('unmarked', '1.1.1', { + 'checksums': ['48474f396c4a91e257490025ede6a998883683e8020a898fff5d4e23a3764bfd'], + }), + ('maxlike', '0.1-8', { + 'checksums': ['90aaab9602f259cbfae61fe96e105cc4a0c2a385b42380f85c14f5d544107251'], + }), + ('coxme', '2.2-16', { + 'checksums': ['a0ce4b5649c4c1abbfe2c2bf23089744d1f66eb8368dea16e74e090f366a5111'], + }), + ('AICcmodavg', '2.3-1', { + 'checksums': ['d0517da15a38e9b1df20fa73f5342b586624e65792d266e7dff278ad7fc458b0'], + }), + ('pacman', '0.5.1', { + 'checksums': ['9ec9a72a15eda5b8f727adc877a07c4b36f8372fe7ed80a1bc6c2068dab3ef7c'], + }), + ('spaa', '0.2.2', { + 'checksums': ['a5a54454d4a7af473ce797875f849bd893005cb04325bf3e0dbddb19fe8d7198'], + }), + ('maxnet', '0.1.4', { + 'checksums': ['fd21e5ecf3c1ac00ef1bbe79fab4cdd62789e0c4c45f126f1b64bda667238216'], + }), + ('oai', '0.3.2', { + 'checksums': ['ebfa756e08f6ac0aa61556b1a5bbe611f407bfff8aef1f8d075a24c361678bfd'], + }), + ('wellknown', '0.7.4', { + 'checksums': ['483e6fc43edf09ed583e74ce5ca7e2d7838ef8a32291e06d774c37546eed1a34'], + }), + ('rgbif', '3.6.0', { + 'checksums': ['2941857c85d89ebaf614ed130ec2f68e326a8ca99e00263ac4e2a9c556917f20'], + }), + ('rgdal', '1.5-27', { + 'checksums': ['62a555ed7b5424dd0252b3764e3542fb30c524d06e8245215bcfaedd84ee5756'], + }), + ('rgeos', '0.5-8', { + 'checksums': ['0db35392146cefb5eea0392eecb6b0bfee53708222b98b06de54a3e1a04ea314'], + }), + ('mapproj', '1.2.7', { + 'checksums': ['f0081281b08bf3cc7052c4f1360d6d3c20d9063be57754448ad9b48ab0d34c5b'], + }), + ('rbison', '1.0.0', { + 'checksums': ['9957e5f85ce68f5dd0ddc3c4b2b3c9d2f52d6f37587e1022ab8a44863534a83c'], + }), + ('rebird', '1.3.0', { + 'checksums': ['b238d3f246aa0249145894e1f3a90f46902f6615fc2f23b24c99bb5feecc55d3'], + }), + ('rvertnet', '0.8.2', { + 'checksums': ['2de9a3ec33a213c7592b49cca1d510a25aef0625369376d9b1b4e5d0da519226'], + }), + ('ridigbio', '0.3.5', { + 'checksums': ['e5cfb2e4dd8ddd1452a5afcf24fcc260889179d0f52eff4f41835adf99b64614'], + }), + ('spocc', '1.2.0', { + 'checksums': ['4bac45db5e69bfa3bf6cebd1b0c9241214c95561f275cee6d31e00911aa79d84'], + }), + ('spThin', '0.2.0', { + 'checksums': ['2e997afb79a2a990eded34c71afaac83986669cfa9ac51b15ae3f2b558902048'], + }), + ('rangeModelMetadata', '0.1.4', { + 'checksums': ['529d529ca90437db3d1e45118443e27a920422806383c7edaa2102beb43f5f80'], + }), + ('ENMeval', '2.0.1', { + 'checksums': ['2f7b7760ae70a45cd3c766aacf1e39f498de4f2e8c7b6dcde6b9adf6d8100250'], + }), + ('plotmo', '3.6.1', { + 'checksums': ['245a0c87f0cca08746c6fdc60da2e3856cd69b1a2b7b5641293c620d4ae04343'], + }), + ('earth', '5.3.1', { + 'checksums': ['0bbe06ba974ceb8ec5de1d59cb53f9487d1828d7130fe2503c48b6cb449c4b03'], + }), + ('mda', '0.5-2', { + 'checksums': ['344f2053215ddf535d1554b4539e9b09067dac878887cc3eb995cef421fc00c3'], + }), + ('biomod2', '3.5.1', { + 'checksums': ['30ed33ff980558a59782ec9e35f9c2c710a540718010654363f63878cdc0ac18'], + }), + ('poLCA', '1.4.1', { + 'checksums': ['2e69975b5e7da8c36641bfa9453afdb4861523866b8799bec1d4eace9ab5762e'], + }), + ('PermAlgo', '1.1', { + 'checksums': ['d7157b92241c34b71ad19901b52144973b49df453bf2a5edf4497d4bf26bd099'], + }), + ('coxed', '0.3.3', { + 'checksums': ['d0d6cb8fea9516b3c63b34d0d81f3804c18a07f97a83e51555575c8ed4c75626'], + }), + ('testit', '0.13', { + 'checksums': ['90d47168ab6bdbd1274b600b457626ac07697ce09792c92b2043be5f5b678d80'], + }), + ('NISTunits', '1.0.1', { + 'checksums': ['eaccd68db5c73d6a089ce5b323cdd51bc6a6a58ce467987158ba8c9be6a0a94e'], + }), + ('celestial', '1.4.6', { + 'checksums': ['9f647f41465ac65b254717698f1978871c378ad8e6ccaa693abf579437069abe'], + }), + ('fasterize', '1.0.3', { + 'checksums': ['62b459625e9bdb00251ec5f6cb873e0c59713f3e86dc1e2c8332adc0cea17f81'], + }), + ('RPMM', '1.25', { + 'checksums': ['f04a524b13918062616beda50c4e759ce2719ce14150a0e677d07132086c88c8'], + }), + ('RefFreeEWAS', '2.2', { + 'checksums': ['de2812f166caabf6ea01c0533402e5cd9d8a525a2a7583e4757decf22319caab'], + }), + ('wordcloud', '2.6', { + 'checksums': ['53716954430acd4f164bfd8eacd7068a908ee3358293ded6cd992d53b7f72649'], + }), + ('JADE', '2.0-3', { + 'checksums': ['56d68a993fa16fc6dec758c843960eee840814c4ca2271e97681a9d2b9e242ba'], + }), + ('awsMethods', '1.1-1', { + 'checksums': ['50934dc20cf4e015f1304a89de6703fed27e7bd54c6b9fc9fb253cdf2ecb7541'], + }), + ('aws', '2.5-1', { + 'checksums': ['e8abadc5614f132edc3fb9cb1c82ce4dacc1315b727fbd49db7399aee24115ba'], + }), + ('ruv', '0.9.7.1', { + 'checksums': ['a0c54e56ba3d8f6ae178ae4d0e417a79295abf5dcb68bbae26c4b874734d98d8'], + }), + ('mhsmm', '0.4.16', { + 'checksums': ['fab573abdc0dd44e8c8bc7242a1428df20b3ec64c4c194e5f1f907393f902d01'], + }), + ('dbarts', '0.9-20', { + 'checksums': ['1d75e795812819b7637d38fc909f4d7942bddf359acfb40a7b8e7cd167a5e92a'], + }), + ('proftools', '0.99-3', { + 'checksums': ['e034eb1531af54013143da3e15229e1d4c2260f8eb79c93846014db3bdefb724'], + }), + ('NCmisc', '1.1.6', { + 'checksums': ['2aa85997d5ec2222e610604022684c004a4925241761d9a0104919f1cf3a8c79'], + }), + ('reader', '1.0.6', { + 'checksums': ['905c7c5a1b035ac8213fc533fa26e511abfeea40bd22e3edfde42a49074e88f4'], + }), + ('gnumeric', '0.7-8', { + 'checksums': ['28b10c91d693b938ebca610933889095ca160b22e6ca750c46103dfd2b009447'], + }), + ('tcltk2', '1.2-11', { + 'checksums': ['ad183ae3b7190501504a0589e0b3be480f04267303e3384fef00987446a37dc5'], + }), + ('readODS', '1.7.0', { + 'checksums': ['f6a8ec724df68983c9b176a1b3b3b01239cc4e99aac4bfb42ce1c2b3d40922c2'], + }), + ('nortest', '1.0-4', { + 'checksums': ['a3850a048181d5d059c1e74903437569873b430c915b709808237d71fee5209f'], + }), + ('EnvStats', '2.4.0', { + 'checksums': ['49459e76412037b3d8021bd83ee93d140bc3e715a2a2282a347ef60061900514'], + }), + ('outliers', '0.14', { + 'checksums': ['b6ce8f1db6442481546131def8253cabdf4472116d193daea7cb935d2b76986d'], + }), + ('elementR', '1.3.7', { + 'checksums': ['4275f88f372a2efe96ccd0afc20f4f12be92f28c7db35c68b80bb0ffb2c2ab07'], + }), + ('gWidgets2', '1.0-8', { + 'checksums': ['1615ce9ab07a251d06c68780be15ab5a4814df877a23aa93e0faf14ccd56d45c'], + }), + ('gWidgets2tcltk', '1.0-6', { + 'modulename': False, + 'preinstallopts': "xvfb-run ", + 'checksums': ['aa3a2f4612116a652e5573a369e3d89c5939f7c06067c6826ba40ed3bb07302b'], + }), + ('mgsub', '1.7.3', { + 'checksums': ['c9ae2560fe2690bedc5248af3fc89e7ef2bc6c147d46ced28f9824584c3791d5'], + }), + ('ie2misc', '0.8.6', { + 'checksums': ['f3e2cc8a88f3789a5e339d2676455472a52a303c8273191f27aa2f2f02fdd8cd'], + }), + ('assertive.base', '0.0-9', { + 'checksums': ['4bf0910b0eaa507e0e11c3c43c316b524500c548d307eb045d6f89047e6ba01e'], + }), + ('assertive.properties', '0.0-4', { + 'checksums': ['5c0663fecb4b7c30f2e1d65da8644534fcfe97fb3d8b51f74c1327cd14291a6b'], + }), + ('assertive.types', '0.0-3', { + 'checksums': ['ab6db2eb926e7bc885f2043fab679330aa336d07755375282d89bf9f9d0cb87f'], + }), + ('assertive.numbers', '0.0-2', { + 'checksums': ['bae18c0b9e5b960a20636e127eb738ecd8a266e5fc29d8bc5ca712498cd68349'], + }), + ('assertive.strings', '0.0-3', { + 'checksums': ['d541d608a01640347d661cc9a67af8202904142031a20caa270f1c83d0ccd258'], + }), + ('assertive.datetimes', '0.0-3', { + 'checksums': ['014e2162f5a8d95138ed8330f7477e71c908a29341697c09a1b7198b7e012d94'], + }), + ('assertive.files', '0.0-2', { + 'checksums': ['be6adda6f18a0427449249e44c2deff4444a123244b16fe82c92f15d24faee0a'], + }), + ('assertive.sets', '0.0-3', { + 'checksums': ['876975a16ed911ea1ad12da284111c6eada6abfc0118585033abc0edb5801bb3'], + }), + ('assertive.matrices', '0.0-2', { + 'checksums': ['3462a7a7e11d7cc24180330d48cc3067cf92eab1699b3e4813deec66d99f5e9b'], + }), + ('assertive.models', '0.0-2', { + 'checksums': ['b9a6d8786f352d53371dbe8c5f2f2a62a7866e30313f268e69626d5c3691c42e'], + }), + ('assertive.data', '0.0-3', { + 'checksums': ['5a00fb48ad870d9b3c872ce3d6aa20a7948687a980f49fe945b455339e789b01'], + }), + ('assertive.data.uk', '0.0-2', { + 'checksums': ['ab48dab6977e8f43d6fffb33228d158865f68dde7026d123c693d77339dcf2bb'], + }), + ('assertive.data.us', '0.0-2', { + 'checksums': ['180e64dfe6339d25dd27d7fe9e77619ef697ef6e5bb6a3cf4fb732a681bdfaad'], + }), + ('assertive.reflection', '0.0-5', { + 'checksums': ['c2ca9b27cdddb9b9876351afd2ebfaf0fbe72c636cd12aa2af5d64e33fbf34bd'], + }), + ('assertive.code', '0.0-3', { + 'checksums': ['ef80e8d1d683d776a7618e78ddccffca7f72ab4a0fcead90c670bb8f8cb90be2'], + }), + ('assertive', '0.3-6', { + 'checksums': ['c403169e83c433b65e911f7fd640b378e2a4a4765a36063584b8458168a4ea0a'], + }), + ('rdrop2', '0.8.2.1', { + 'checksums': ['b9add765fe8e7c966f0d36eef939a9e38f253958bd2a3c656b890cbb0366300b'], + }), + ('Exact', '3.0', { + 'checksums': ['a76114e9780c86e4ea0a561300db024b95af9b0ebb6c3bf9a7598d276d009529'], + }), + ('lmom', '2.8', { + 'checksums': ['cae2a925c39429d8e9f91bdb2682ea0d1343e9b2e5c9e8752c5929eb5f20d2d2'], + }), + ('gld', '2.6.2', { + 'checksums': ['915860ac054ba4d29854c7d274e9c927995c5df2a7d4a6a0122b1fbc4a3c3cf3'], + }), + ('DescTools', '0.99.43', { + 'checksums': ['8c3c4e5975428b9f2817907931449cd704d3df0e19e4337010f0dee333e7a4ff'], + }), + ('orthopolynom', '1.0-5', { + 'checksums': ['6da4f437aae5c8fafdf791ce3c6a66f68198df4054af3aab8406402a4dc770bf'], + }), + ('gaussquad', '1.0-2', { + 'checksums': ['ba3a1ab6ffe92f592c9f2bb1d4070f1fb1019325226dcb4863cf725eb59e9b2d'], + }), + ('nlsem', '0.8', { + 'checksums': ['495a5d07aa5f59efdcd43acf429ae842453abd6c0720a80e2102d663fa997c60'], + }), + ('tableone', '0.13.0', { + 'checksums': ['1c73a5a7595dc0ae2299d17c74738e077984af7d5429e4858b7be3c55e121346'], + }), + ('jstable', '1.0.7', { + 'checksums': ['a8f66172973dc75d1d751d7015e0f028c441263f6649909bd25fa944be0042c3'], + }), + ('RCAL', '2.0', { + 'checksums': ['10f5f938a8322d8737159e1e49ce9d12419a5130699b8a19c6ca53d6508da8cc'], + }), + ('stargazer', '5.2.2', { + 'checksums': ['70eb4a13a6ac1bfb35af07cb8a63d501ad38dfd9817fc3fba6724260b23932de'], + }), + ('sensemakr', '0.1.4', { + 'checksums': ['6a1354f05392fa9343b90f69a54022c995651fb3c3d05cb08fa088ef52258caf'], + }), + ('CompQuadForm', '1.4.3', { + 'checksums': ['042fc56c800dd8f5f47a017e2efa832caf74f0602824abf7099898d9708660c4'], + }), + ('nonnest2', '0.5-5', { + 'checksums': ['027f510e322122fc75c936251a95ddd392f96047ac86e0fae6cf8f883ac7aab5'], + }), + ('blavaan', '0.3-17', { + 'checksums': ['ada14fcc665a22f11fc57392d70141c398d85dbb35f0a3373a501bc51d27f1e5'], + }), + ('mathjaxr', '1.4-0', { + 'checksums': ['ba57378236d593a39c5839054adc5473526de0c8f05b7eeb87c99438496ddc67'], + }), + ('metafor', '3.0-2', { + 'checksums': ['02df435197b225da736103edf73d19253a542bc31fc0b99610c02daec434138a'], + }), + ('fmri', '1.9.6', { + 'checksums': ['7614290d880667512744d3450480a670cc38abdb270f3f776ac9a17a793f07f2'], + }), + ('AnalyzeFMRI', '1.1-24', { + 'checksums': ['0d2acfe9ce8f25eb5cc9e6ef1db3ea8e232a31d46a95e50914489b1997e17062'], + }), + ('linkcomm', '1.0-14', { + 'checksums': ['36f1557c65d862fc87635eedfad77f18a5deb66da00895e50e2d5eac0f23b597'], + }), + ('rnetcarto', '0.2.4', { + 'checksums': ['266702330250e9fbeb8616d86edf1d50d63084a0731d17e84a04dc6faacf653a'], + }), + ('DEoptim', '2.2-6', { + 'checksums': ['8c63397d83a067212d003ef3e639fd81f5f00bf61e3c271b4e4999031a69e2e1'], + }), + ('optextras', '2019-12.4', { + 'checksums': ['59006383860826be502ea8757e39ed94338f04d246c4fc398a088e004d8b13eb'], + }), + ('setRNG', '2013.9-1', { + 'checksums': ['1a1a399682a06a5fea3934985ebb1334005676c6a2a22d06f3c91c3923432908'], + }), + ('Rvmmin', '2018-4.17.1', { + 'checksums': ['55000ac4ff57d42f172c46c7d6b0a603da3b65866d6440d6b32bac4d2b81814e'], + }), + ('Rcgmin', '2013-2.21', { + 'checksums': ['a824a09c32d7565a3e30607c71333506d5b7197478fbe8b43f8a77dad6c12f0a'], + }), + ('optimr', '2019-12.16', { + 'checksums': ['73b1ed560ffd74599517e8baa4c5b293aa062e9c8d50219a3a24b63e72fa7c00'], + }), + ('DMCfun', '2.0.2', { + 'checksums': ['430cbc18f17db11a7941e6a8274a0eefbb8a6b0bdac8800970530d60d5881fde'], + }), + ('miceadds', '3.11-6', { + 'checksums': ['121d03c812fbcf584a25585ac73f6c44f4b5d6cd21b05362ddd15395fb3909f6'], + }), + ('visdat', '0.5.3', { + 'checksums': ['527c76b6643b8475a58516763ef40238cdc61ec62d2dcf690f7c316b93b878c6'], + }), + ('UpSetR', '1.4.0', { + 'checksums': ['351e5fee64204cf77fd378cf2a2c0456cc19d4d98a2fd5f3dac74b69a505f100'], + }), + ('norm', '1.0-9.5', { + 'checksums': ['305cbf007f3905cfd535ed9bf5ae3e2995e228cc8883d6482e5d3a2f02814106'], + }), + ('naniar', '0.6.1', { + 'checksums': ['d546ca15bf6c224f3103eb1441abef91d34feebb7320c2398d598f5d50177450'], + }), + ('stringdist', '0.9.8', { + 'checksums': ['efccd6ccc5c74c578be95b7dae1099c52b0d7805452ab14ee91ca34adb8261bb'], + }), + ('image.binarization', '0.1.2', { + 'checksums': ['0621ca94a74264bb73f689b1a00484b5a3bbef93fc203d9c001d791a18fcc13f'], + }), + ('lassosum', '0.4.5', { + 'source_urls': ['https://github.com/tshmak/%(name)s/releases/download/v%(version)s/'], + 'sources': ['%(name)s_%(version)s.tar.gz'], + 'checksums': ['18c0d0b5022bcf81a9bf1b3b6647da3e080f221828b473ea2a45a9bf98474fbc'], + }), + ('lslx', '0.6.10', { + 'checksums': ['adc2b2a621625b52165245ab2f3a0bfba4f4db64fcc6ad48a3e5b219c3bd2fa1'], + }), + ('truncnorm', '1.0-8', { + 'checksums': ['49564e8d87063cf9610201fbc833859ed01935cc0581b9e21c42a0d21a47c87e'], + }), + ('Rsolnp', '1.16', { + 'checksums': ['3142776062beb8e2b45cdbc4fe6e5446b6d33505253d79f2890fe4178d9cf670'], + }), + ('regsem', '1.8.0', { + 'checksums': ['28ff1c2dbddcafc6ed6c30154f46074aa0c8974757466680529b71a5f3e463ec'], + }), + ('semPLS', '1.0-10', { + 'checksums': ['cb587ccfdaf970f426dc7146035c7e010b1c51c17bf4fc089fd796eda58db460'], + }), + ('GxEScanR', '2.0.2', { + 'checksums': ['6d42fd15d83dd1491405b282d26fa472f9f9902a9dc68836d6a48b459ada6a4c'], + }), + ('alabama', '2015.3-1', { + 'checksums': ['6600fcf4842488950e196d3f5a8fc4d69e8271b36292ce67ac3ab697449a8f56'], + }), + ('polycor', '0.7-10', { + 'checksums': ['caea3beca2c889e12e5b976c20c19cf5a76d42e6329e9ab646112eeae8fcfc73'], + }), + ('multipol', '1.0-7', { + 'checksums': ['0abe3c894c0d8e928a920e73708a397133386a0d73a1e7952c4075afe67879e6'], + }), + ('symmoments', '1.2.1', { + 'checksums': ['9a6be1f8fe44f6ab5a1790e870fd8b18de1686a48a14a9fca2d035bfb5458672'], + }), + ('cSEM', '0.4.0', { + 'checksums': ['7753ac7db9d2c0392e51dd31ec8638e1a7fcbb2546dd9103f5ecc03dd51836c1'], + }), + ('cubelyr', '1.0.1', { + 'checksums': ['740a34100592b2c6b7bc89a31bddccf4c8fd95720caf68f530104f17aada77bc'], + }), + ('broom.mixed', '0.2.7', { + 'checksums': ['ff29385557af239a41452ffb5ebe230630a2a30f4a91e95505c3178b62df01ba'], + }), + ('DiceKriging', '1.6.0', { + 'checksums': ['ab5d1332809f2bb16d156ed234b102eb9fbd6de792e4291f9f6ea4652215cb49'], + }), + ('grf', '2.0.2', { + 'checksums': ['043f21a057762a2d5e0febb37c1d9cb8d2f94d19f2eded20c672dec7ff54b505'], + }), + ('xgboost', '1.4.1.1', { + 'checksums': ['9f986f3895ce5f6744335c82afe3a87d9ac2e473e60785295edf2be80d34e0c4'], + }), + ('twang', '2.5', { + 'checksums': ['fc355527c57e4f6e0f60d26d7c690c4475fcd5fb165d125fea7cc6b9fafc4ce5'], + }), + ('neuralnet', '1.44.2', { + 'checksums': ['5f66cd255db633322c0bd158b9320cac5ceff2d56f93e4864a0540f936028826'], + }), + ('PCAmatchR', '0.3.0', { + 'checksums': ['73876c6d1cf42928a03a64aba197c67b4a4f4de2c431cfbc6fce615bbea32fa0'], + }), + ('origami', '1.0.5', { + 'checksums': ['8d0d08aaecc428cbbf5db4615ad3623777c10c6d7947a1cc3ccc7f8db8cb5263'], + }), + ('hal9001', '0.4.1', { + 'checksums': ['386fa93ae6c0f409a9137adc54da25a2770826fbed63787e33a36c95f3f89441'], + }), + ('cobalt', '4.3.1', { + 'checksums': ['67e26a700ca083a39beb255df54c6ab495f34ea5847a0bf1c4bac895e980eef8'], + }), + ('CBPS', '0.22', { + 'checksums': ['d19247e6765f02737d15a0a2ee86ae24e7206ae740dfaa61821622eb3a309aef'], + }), + ('SBdecomp', '1.1', { + 'checksums': ['ad4e4f00bc58eafe551ad6288c0642a16e16ef8f73c2ae649f808b1e559df644'], + }), + ('naturalsort', '0.1.3', { + 'checksums': ['cd38a9c5f323f61459e6096cdbf4493851d40497baf671af4f8dfe9a7c00e857'], + }), + ('lwgeom', '0.2-8', { + 'checksums': ['f48a92de222da0590b37a30d5cbf2364555044a842795f6b488afecc650b8b34'], + }), + ('finalfit', '1.0.3', { + 'checksums': ['bbfa841a2b1a7b1f8c153d773ff076a2e465e451815f8166ff0ce8c4018ff61e'], + }), + ('broom.helpers', '1.4.0', { + 'checksums': ['7f6a5c0c79260b57cd31976bc216fffbc79a1641e01b74630dcd37d2c84e3f75'], + }), + ('gt', '0.3.1', { + 'checksums': ['ddd1fee446f156d1b52bb2db83262aac2a896db93748e92e08407d317e126019'], + }), + ('gtsummary', '1.5.0', { + 'checksums': ['54dd5e11c5b2a808ca93284760a5cd102f820332d2fa40474d5cedea030711a7'], + }), + ('ncdf4', '1.17', { + 'checksums': ['db95c4729d3187d1a56dfd019958216f442be6221bd15e23cd597e6129219af6'], + }), + ('geex', '1.0.12', { + 'checksums': ['037aece09bc0c4349897cd1d8f5dcf1e680598cdfdf72148b6d1506e02690e7f'], + }), + ('momentfit', '0.2', { + 'checksums': ['a10d43ac23bb61b9c67efa4800e3e2b6a444c1afaca8bad351648accd7e003f6'], + }), + ('StatMatch', '1.4.0', { + 'checksums': ['820091cd2213734ea16f5fcd616491bbf39d3e6c2bcfb34a7c9fe09f4fd1a459'], + }), + ('stars', '0.5-3', { + 'checksums': ['44944a82af36bea09ac1874ff9647acbb7fef021ebdca5aae7c34794be929401'], + }), + ('rapidjsonr', '1.2.0', { + 'checksums': ['62c94fcdcf5d0fbdfa2f6168affe526bf547c37c16d94e2e1b78d7bf608eed1f'], + }), + ('jsonify', '1.2.1', { + 'checksums': ['929191ab32e34af6a02ad991e29314cc78ea40763fcf232388ef2d132137fbce'], + }), + ('geometries', '0.2.0', { + 'checksums': ['8cf5094f3c2458fef5d755799c766afd27c66cd1c292574a6ab532d608360314'], + }), + ('sfheaders', '0.4.0', { + 'checksums': ['86bcd61018a0491fc8a1e7fb0422c918296287b82be299a79ccee8fcb515e045'], + }), + ('geojsonsf', '2.0.1', { + 'checksums': ['42df40433bfbece5a39cd97b5bd4690b4424855241fcc3e7322ee68a3988bfbf'], + }), + ('leaflet.providers', '1.9.0', { + 'checksums': ['9e8fc75c83313ab24663c2e718135459599549ed6e7396086cacb44e36cfd67b'], + }), + ('leaflet', '2.0.4.1', { + 'checksums': ['b0f038295f1de5d32d9ffa1d0dbc1562320190f2f1365f3a5e95863fff88901f'], + }), + ('leafsync', '0.1.0', { + 'checksums': ['7d8fd8dbbbf66417cf32575f14c0fe68199762ecf1c036c7905c7c5ff859d75c'], + }), + ('leafem', '0.1.6', { + 'checksums': ['ca50e0a699f564449248511857a2df0d48cd07de3157e099478a19b533088156'], + }), + ('widgetframe', '0.3.1', { + 'checksums': ['44089a2cf8b0941a6f3da55da36353e2f44653ca58bfec7960ee5b71ea380d48'], + }), + ('tmaptools', '3.1-1', { + 'checksums': ['fd89cb0d7fb44e0a5dd5311fa3e75a729746bf2e8e158d5ec423e5963f1b542d'], + }), + ('tmap', '3.3-2', { + 'checksums': ['2bcb74c5c5546223d79abe5d633581fb2664b910f6246f4b8b7166b208b4629a'], + }), + ('collapse', '1.6.5', { + 'checksums': ['1e232a3a62b5eb5ed5d81e7d92ce1bae34c3d877d593d47d7edbd3f515b95a46'], + }), + ('genoPlotR', '0.8.11', { + 'checksums': ['f127f7fe8b19c899ecfdf98bf69d2e18926afb593a72fc40097acca66d401607'], + }), + ('VineCopula', '2.4.3', { + 'checksums': ['42727aa7345ab544242182222eb97476f5dc04bc837f94f6fd3ea6ccac93ea17'], + }), + ('Rmpfr', '0.8-7', { + 'checksums': ['93c2db785ff705dcfc6fa7f0373c2426cdc2ef72ceb5b294edeb2952775f57d2'], + }), + ('scam', '1.2-12', { + 'checksums': ['0ce5f844221370884719424eb5b2b22c34a8a8ad64eac3de981e5539b6e88f4a'], + }), + ('copula', '1.0-1', { + 'checksums': ['d09b2ccffc7379e48b00952aa6b282baf502feebaf55cc44e93f881d7b909742'], + }), + ('evd', '2.3-3', { + 'checksums': ['2fc5ef2e0c3a2a9392425ddd45914445497433d90fb80b8c363877baee4559b4'], + }), + ('ismev', '1.42', { + 'checksums': ['0d57fbeca83bd478e84fcff795967d51d8448c629abe7adc6c4c18c7fb8bf1a5'], + }), + ('GJRM', '0.2-5.1', { + 'checksums': ['516dd73c70e5c8ab60b24027f94cab42603797c41cb7aa740882cb850f6d6ab4'], + }), + ('penfa', '0.1.1', { + 'checksums': ['a22a8ac3d4a040c77e50ddc92328c1989eae536d79fe56013e9372ba27c114e5'], + }), + ('rngWELL', '0.10-7', { + 'checksums': ['0c00c54e69d7d552cfa08d766e4854c01c6c1c8e2c558f387760b91a55ef2d38'], + }), + ('randtoolbox', '1.31.1', { + 'checksums': ['30992e8156782542e9a2bffb75eb2e35f6d302a8c22cb7c3ed9004f0f0973bad'], + }), + ('kde1d', '1.0.3', { + 'checksums': ['d645652d09f1981eb37be9f041034da9b9191885dd38be8a7e485e5e41eb050e'], + }), + ('RcppThread', '1.0.0', { + 'checksums': ['544a48ee4ea381e2e1421d4edbec54365f17059084d94ded7c339de36deeccf5'], + }), + ('wdm', '0.2.2', { + 'checksums': ['11c616f0896d62993f5eee1daf7b021d27f13751f6617067b57cf463aea32dde'], + }), + ('rvinecopulib', '0.6.1.1.1', { + 'checksums': ['779fd288774ebb1a0adde6b960053e5c63750bfa66d5ddf349e0f1d8730f08cd'], + }), + ('PearsonDS', '1.2.1', { + 'checksums': ['354be30b8df4e5432d1bc2b6162900522d4c08dc63b207331819d589fb069824'], + }), + ('covsim', '0.2.1', { + 'checksums': ['57ca810c6950ab295078b745eb87fdd7f195e15082777eed9f1059b6302f13bf'], + }), + ('semTools', '0.5-5', { + 'checksums': ['ddf883753c5964eae8313d7e8a4703be52e649f10d3bc1d12ede6d1707b1fab6'], + }), + ('GPArotation', '2014.11-1', { + 'checksums': ['351bc15fc8dc6c8ea5045fbba22180d1e68314fc34d267545687748e312e5096'], + }), + ('dcurver', '0.9.2', { + 'checksums': ['cc6c55090d3607910515981ea0c7221e40e7a29e0da0c5a5f42c3847012290ec'], + }), + ('mirt', '1.35.1', { + 'checksums': ['788b7e499b7d48f5f590eb5cfdac260c4e993b94a3956d30bc2d8bce8cd2ba3e'], + }), + ('rpf', '1.0.11', { + 'checksums': ['e1fd670ae7c3e947db08ce50d6b16ce1b3b8f63a9016b03baba760aee78921fb'], + }), + ('OpenMx', '2.19.8', { + 'checksums': ['cb4be9850f61d320dcd47ef0ad7b20e5baafde558ebbc67301b13d883baf6760'], + }), +] + +moduleclass = 'lang' diff --git a/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb b/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb index d06c0333e33796b25189e4a9e1a845006c464dc6..9ace71cebc79d2adcbed11d77ebd478c24405037 100644 --- a/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb +++ b/Golden_Repo/r/Ruby/Ruby-3.0.1-GCCcore-11.2.0.eb @@ -28,20 +28,20 @@ exts_default_options = { # each version is picked as high as possible to fullfill all requirements # packages updated on 2021-07-02 exts_list = [ - ('ffi', '1.15.3', { - 'checksums': ['98d5c5c4281c9c0466acc60cf0e79124bf3c311417fd97e7473e41722953fbf1'], + ('ffi', '1.15.5', { + 'checksums': ['6f2ed2fa68047962d6072b964420cba91d82ce6fa8ee251950c17fca6af3c2a0'], }), ('childprocess', '4.1.0', { 'checksums': ['3616ce99ccb242361ce7f2b19bf9ff3e6bc1d98b927c7edc29af8ca617ba6cd3'], }), - ('json', '2.5.1', { - 'checksums': ['918d8c41dacb7cfdbe0c7bbd6014a5372f0cf1c454ca150e9f4010fe80cc3153'], + ('json', '2.6.1', { + 'checksums': ['7ff682a2db805d6b924e4e87341c3c0036824713a23c58ca53267ce7e5ce2ffd'], }), ('cabin', '0.9.0', { 'checksums': ['91c5394289e993e7037a6c869e3f212f31a5984d2b1811ac934f591c87446b2c'], }), - ('backports', '3.21.0', { - 'checksums': ['f9394457cb1dd5ca1b7bdc0dfbbd8f56f5cde40f45f96bc90f0f895a87e41b77'], + ('backports', '3.23.0', { + 'checksums': ['88fc26a40083a51015faa2ba02cbdc3605cb59f183cf0868f4fb3ac02900148f'], }), ('arr-pm', '0.0.11', { 'checksums': ['f1ab088421276f446da1971c5071defd1504855ec46e196815fa43cd62d61a9f'], @@ -52,17 +52,17 @@ exts_list = [ ('multipart-post', '2.1.1', { 'checksums': ['d2dd7aa957650e0d99e0513cd388401b069f09528441b87d884609c8e94ffcfd'], }), - ('ruby2_keywords', '0.0.4', { - 'checksums': ['3ae3189c2e1d2f60204dcceedf890ff49dd28979771e2576016a3ee73b668e97'], + ('ruby2_keywords', '0.0.5', { + 'checksums': ['ffd13740c573b7301cf7a2e61fc857b2a8e3d3aff32545d6f8300d8bae10e3ef'], }), - ('faraday-net_http', '1.0.1', { - 'checksums': ['3245ce406ebb77b40e17a77bfa66191dda04be2fd4e13a78d8a4305854d328ba'], + ('faraday-net_http', '2.0.1', { + 'checksums': ['f867b028552c3cf018b9293b58b993dc238ba62683568b3e194c673afe62d700'], }), - ('faraday', '1.3.0', { - 'checksums': ['7f06817ba823ddeabf4dd85ca5e0f63e234527f564a03f09f6c7127951d3bac2'], + ('faraday', '1.0.0', { + 'checksums': ['e67631809ae5633a1d2b03adfa83939a91a095f6dc61a1f322826612613dd687'], }), - ('faraday_middleware', '1.0.0', { - 'checksums': ['19e808539681bbf2e65df30dfbe27bb402bde916a1dceb4c7496dbe8de14334a'], + ('faraday_middleware', '1.2.0', { + 'checksums': ['ded15d574d50e92bd04448d5566913af5cb1a01b2fa311ceecc2464fa0ab88af'], }), ('highline', '2.0.3', { 'checksums': ['2ddd5c127d4692721486f91737307236fe005352d12a4202e26c48614f719479'], @@ -82,17 +82,17 @@ exts_list = [ ('public_suffix', '4.0.6', { 'checksums': ['a99967c7b2d1d2eb00e1142e60de06a1a6471e82af574b330e9af375e87c0cf7'], }), - ('addressable', '2.7.0', { - 'checksums': ['5e9b62fe1239091ea9b2893cd00ffe1bcbdd9371f4e1d35fac595c98c5856cbb'], + ('addressable', '2.8.0', { + 'checksums': ['f76d29d2d1f54b6c6a49aec58f9583b08d97e088c227a3fcba92f6c6531d5908'], }), ('concurrent-ruby', '1.1.9', { 'checksums': ['0ec0846d991c38f355b4228ad8ea77aa69c3fdaa320cd574dafedc10c4688a5b'], }), - ('i18n', '1.8.10', { - 'checksums': ['ca24e52fdd6ad7af419241eef8c41e65ef4e3499c6b252df13f697919eb24e3c'], + ('i18n', '1.8.11', { + 'checksums': ['ae133354590b49070b87c83f8fe8cc064ffdc40ca76364535e100312e30cad6d'], }), - ('minitest', '5.14.4', { - 'checksums': ['f4716634d71b3ffb627cd63ba4f6f0f77c7a3f17353b1bdf52c8a7f2e0e4e7a7'], + ('minitest', '5.15.0', { + 'checksums': ['6d2d5bfa301257ef2c2fe8818abeaa0932ed54735c8ed039459cb4f85029ae1b'], }), ('thread_safe', '0.3.6', { 'checksums': ['9ed7072821b51c57e8d6b7011a8e282e25aeea3a4065eab326e43f66f063b05a'], @@ -100,11 +100,11 @@ exts_list = [ ('tzinfo', '1.1.0', { 'checksums': ['715a47c25f8e4c2f106c92d5a97e612f84eb7e85f5822bf3d6cf615b44492abc'], }), - ('zeitwerk', '2.4.2', { - 'checksums': ['f4d6279b0ef0cb35c9e1bddbcecd6b148df82f1cf7b8023ac03d6625f567869c'], + ('zeitwerk', '2.5.3', { + 'checksums': ['ddfeb36d24444b10f402cae2ee5a05c580f54115ae25bcf2ac29bf814c4faf52'], }), - ('activesupport', '5.0.7.2', { - 'checksums': ['f75cc67fb08421bdf4c2a383a47d9b3b02ce5eec4749704b1286fb0c12c98bad'], + ('activesupport', '5.2.6', { + 'checksums': ['7249ee13859fc99ed2c833048674fd28c11605c679f1c65035190a2219e9cbef'], }), ('gh', '0.18.0', { 'checksums': ['eb93f18a88db3ba92eb888610fc53fae731d9dacfe55922b58cc3f3aca776a47'], @@ -112,8 +112,8 @@ exts_list = [ ('launchy', '2.5.0', { 'checksums': ['954243c4255920982ce682f89a42e76372dba94770bf09c23a523e204bdebef5'], }), - ('ethon', '0.14.0', { - 'checksums': ['10e267a39d7e2a92d944e5681ba46dbd211b5b5b6cf9b51afb769b8417247ead'], + ('ethon', '0.15.0', { + 'checksums': ['0809805a035bc10f54162ca99f15ded49e428e0488bcfe1c08c821e18261a74d'], }), ('typhoeus', '1.4.0', { 'checksums': ['fff9880d5dc35950e7706cf132fd297f377c049101794be1cf01c95567f642d4'], @@ -124,11 +124,11 @@ exts_list = [ ('pusher-client', '0.6.2', { 'checksums': ['c405c931090e126c056d99f6b69a01b1bcb6cbfdde02389c93e7d547c6efd5a3'], }), - ('diff-lcs', '1.4.4', { - 'checksums': ['bf3a658875f70c1467fe7a3b302b795f074c84b28db6e4a2bd6b1ad6d12a2255'], + ('diff-lcs', '1.5.0', { + 'checksums': ['49b934001c8c6aedb37ba19daec5c634da27b318a7a3c654ae979d6ba1929b67'], }), - ('rspec-support', '3.10.2', { - 'checksums': ['74315f89069fbaf2a710e2117340373b77ee45eceb026de87e0cad9dd5154596'], + ('rspec-support', '3.10.3', { + 'checksums': ['65c88f8cbe579461f411097682e6402960eae327eef08e86ef581b8c609e4c5e'], }), ('rspec-mocks', '3.10.2', { 'checksums': ['93fc76e312c3d19cacc1cb2eb64bf82731de2e216295cf2b4d0ce31ba77923b4'], @@ -160,27 +160,27 @@ exts_list = [ ('rack-test', '1.1.0', { 'checksums': ['154161f40f162b1c009a655b7b0c5de3a3102cc6d7d2e94b64e1f46ace800866'], }), - ('bundler', '2.2.21', { - 'checksums': ['3c8dc5e0cf66d385a9b33751e54986290d42023c5e1bba2b5df094917b6e234a'], + ('bundler', '2.3.5', { + 'checksums': ['2553cbd138b466bc56a3c724c5c28648dff8e2343b13a7c696cf9c2818c8d629'], }), # for Jupyter kernel - ('mime-types-data', '3.2021.0704', { - 'checksums': ['9ecd5aa031d5483156cd7a4e7d1956881d75f7ed8c08d487900df8580ee39d36'], + ('mime-types-data', '3.2022.0105', { + 'checksums': ['d8c401ba9ea8b648b7145b90081789ec714e91fd625d82c5040079c5ea696f00'], }), - ('mime-types', '3.3.1', { - 'checksums': ['708f737e28ceef48b9a1bc041aa9eec46fa36eb36acb95e6b64a9889131541fe'], + ('mime-types', '3.4.1', { + 'checksums': ['6bcf8b0e656b6ae9977bdc1351ef211d0383252d2f759a59ef4bcf254542fc46'], }), ('data_uri', '0.1.0', { 'checksums': ['7eb2f63487ccb943fae0eca561729c48d4d5654d76f8330aa16ed1dcdbebf33b'], }), - ('io-console', '0.5.9', { - 'checksums': ['4aaefa9e601433071a92a4761a9f0ceb6507975d31ac75a6bd2a7c043b77aa5e'], + ('io-console', '0.5.11', { + 'checksums': ['7e2418376fd185ad66e7aee2c58c207e9be0f2197aa89bc4c89931995cee3365'], }), - ('reline', '0.2.6', { - 'checksums': ['ea2f3c3209feb17594dbd33242719fa24ca0fd29a63a1b49d2a6035e265a5183'], + ('reline', '0.3.1', { + 'checksums': ['b101d93607bf7564657f082f68abfa19ae939d14a709eff89be048eae2d7f4c7'], }), - ('irb', '1.3.6', { - 'checksums': ['79c73e1cada8aee635a07a0dbb443fc6bfac357903d277476505d8700b949e68'], + ('irb', '1.4.1', { + 'checksums': ['4a6698d9ab9de30ffd2def6fb17327f5d0fc089ace62337eff95396f379bf0a8'], }), ('multi_json', '1.15.0', { 'checksums': ['1fd04138b6e4a90017e8d1b804c039031399866ff3fbabb7822aea367c78615d'], @@ -191,8 +191,11 @@ exts_list = [ ('ffi-rzmq', '2.0.7', { 'checksums': ['2feb3bc5bf46df633e2211514ac408521df0c198f54134fdb38322675d9f4591'], }), - ('iruby', '0.7.3', { - 'checksums': ['04d49dc6024168b67ab29a2458eae3e567756223a1e5eeb285b8ecfaad6e8fc3'], + ('native-package-installer', '1.1.3', { + 'checksums': ['ba899df70489b748a3fe1b48afe6325d1cb8ca67fdff759266c275b911c797dd'], + }), + ('iruby', '0.7.4', { + 'checksums': ['cc219e2ac797c3fbf8c2b937ee7d26547723c8ae0e5ad65f2975aa3325b3a620'], }), ] diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gomkl-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gomkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..69a041832d1c575bc3421497fa1ec771ae191db1 --- /dev/null +++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gomkl-2021b.eb @@ -0,0 +1,71 @@ +name = 'SUNDIALS' +version = '6.1.0' + +homepage = 'https://computation.llnl.gov/casc/sundials/' +description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. It consists of the +following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES, +solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value +ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for +differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities +(forward and adjoint); KINSOL, solves nonlinear algebraic systems. +""" + +examples = 'Examples can be found in $EBROOTSUNDIALS/examples' + +toolchain = {'name': 'gomkl', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True, 'pic': True} + +source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c'] + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), +] + +separate_build_dir = 'True' + +preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && ' + +configopts = '-DBUILD_SHARED_LIBS=ON ' +configopts += '-DENABLE_MPI=ON ' +configopts += '-DENABLE_FORTRAN=ON ' +configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON ' +configopts += '-DEXAMPLES_ENABLE_F2003=ON ' +configopts += '-DENABLE_OPENMP=ON ' +configopts += '-DEXAMPLES_ENABLE_CXX=ON ' +configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON ' +configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" ' +configopts += '-DENABLE_CUDA=ON ' +configopts += '-DCMAKE_C_STANDARD=17 ' +configopts += '-DCMAKE_C_COMPILER=mpicc ' + + +postinstallcmds = [ + "cp -r examples %(installdir)s/examples", + "ln -s %(installdir)s/lib64 %(installdir)s/lib", +] + +local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol'] + +sanity_check_paths = { + 'files': ['lib/libsundials_%s.a' % s for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']] + + ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']], + 'dirs': ['examples/%s' % s for s in local_solvers] + + ['include/%s' % s for s in local_solvers] + + ['examples/nvector', 'include/nvector', 'include/sundials'], +} + +postinstallcmds = [ + 'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include', +] + +modextravars = { + 'SUNDIALS_ROOT': '%(installdir)s', + 'SUNDIALS_LIB': '%(installdir)s/lib64', + 'SUNDIALS_INCLUDE': '%(installdir)s/include' +} + +moduleclass = 'math' diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gpsmkl-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gpsmkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..d9aede91a27b5e5226b431bce3042008cf8527be --- /dev/null +++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-gpsmkl-2021b.eb @@ -0,0 +1,70 @@ +name = 'SUNDIALS' +version = '6.1.0' + +homepage = 'https://computation.llnl.gov/casc/sundials/' +description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. It consists of the +following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES, +solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value +ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for +differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities +(forward and adjoint); KINSOL, solves nonlinear algebraic systems. +""" + +examples = 'Examples can be found in $EBROOTSUNDIALS/examples' + +toolchain = {'name': 'gpsmkl', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True, 'pic': True} + +source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c'] + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), +] + +separate_build_dir = 'True' + +preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && ' + +configopts = '-DBUILD_SHARED_LIBS=ON ' +configopts += '-DENABLE_MPI=ON ' +configopts += '-DENABLE_FORTRAN=ON ' +configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON ' +configopts += '-DEXAMPLES_ENABLE_F2003=ON ' +configopts += '-DENABLE_OPENMP=ON ' +configopts += '-DEXAMPLES_ENABLE_CXX=ON ' +configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON ' +configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" ' +configopts += '-DENABLE_CUDA=ON ' +configopts += '-DCMAKE_C_STANDARD=17 ' +configopts += '-DCMAKE_C_COMPILER=mpicc ' + +postinstallcmds = [ + "cp -r examples %(installdir)s/examples", + "ln -s %(installdir)s/lib64 %(installdir)s/lib", +] + +local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol'] + +sanity_check_paths = { + 'files': ['lib/libsundials_%s.a' % s for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']] + + ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']], + 'dirs': ['examples/%s' % s for s in local_solvers] + + ['include/%s' % s for s in local_solvers] + + ['examples/nvector', 'include/nvector', 'include/sundials'], +} + +postinstallcmds = [ + 'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include', +] + +modextravars = { + 'SUNDIALS_ROOT': '%(installdir)s', + 'SUNDIALS_LIB': '%(installdir)s/lib64', + 'SUNDIALS_INCLUDE': '%(installdir)s/include' +} + +moduleclass = 'math' diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..c362693104a3a439f476d0d8bd8d7ee8b1d43f21 --- /dev/null +++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-2021b.eb @@ -0,0 +1,70 @@ +name = 'SUNDIALS' +version = '6.1.0' + +homepage = 'https://computation.llnl.gov/casc/sundials/' +description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. It consists of the +following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES, +solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value +ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for +differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities +(forward and adjoint); KINSOL, solves nonlinear algebraic systems. +""" + +examples = 'Examples can be found in $EBROOTSUNDIALS/examples' + +toolchain = {'name': 'intel', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True, 'pic': True} + +source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c'] + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), +] + +separate_build_dir = 'True' + +preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && ' + +configopts = '-DBUILD_SHARED_LIBS=ON ' +configopts += '-DENABLE_MPI=ON ' +configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON ' +configopts += '-DEXAMPLES_ENABLE_F2003=ON ' +configopts += '-DENABLE_FORTRAN=ON ' +configopts += '-DENABLE_OPENMP=ON ' +configopts += '-DEXAMPLES_ENABLE_CXX=ON ' +configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON ' +configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" ' +configopts += '-DENABLE_CUDA=ON ' +configopts += '-DCMAKE_C_STANDARD=17 ' +configopts += '-DCMAKE_C_COMPILER=mpicc ' + +postinstallcmds = [ + "cp -r examples %(installdir)s/examples", + "ln -s %(installdir)s/lib64 %(installdir)s/lib", +] + +local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol'] + +sanity_check_paths = { + 'files': ['lib/libsundials_%s.a' % s for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']] + + ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']], + 'dirs': ['examples/%s' % s for s in local_solvers] + + ['include/%s' % s for s in local_solvers] + + ['examples/nvector', 'include/nvector', 'include/sundials'], +} + +postinstallcmds = [ + 'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include', +] + +modextravars = { + 'SUNDIALS_ROOT': '%(installdir)s', + 'SUNDIALS_LIB': '%(installdir)s/lib64', + 'SUNDIALS_INCLUDE': '%(installdir)s/include' +} + +moduleclass = 'math' diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-para-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-para-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..ae007131908eca50261af1162d65991a2e3bc219 --- /dev/null +++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-intel-para-2021b.eb @@ -0,0 +1,70 @@ +name = 'SUNDIALS' +version = '6.1.0' + +homepage = 'https://computation.llnl.gov/casc/sundials/' +description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. It consists of the +following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES, +solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value +ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for +differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities +(forward and adjoint); KINSOL, solves nonlinear algebraic systems. +""" + +examples = 'Examples can be found in $EBROOTSUNDIALS/examples' + +toolchain = {'name': 'intel-para', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True, 'pic': True} + +source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c'] + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), +] + +separate_build_dir = 'True' + +preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && ' + +configopts = '-DBUILD_SHARED_LIBS=ON ' +configopts += '-DENABLE_MPI=ON ' +configopts += '-DENABLE_FORTRAN=ON ' +configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON ' +configopts += '-DEXAMPLES_ENABLE_F2003=ON ' +configopts += '-DENABLE_OPENMP=ON ' +configopts += '-DEXAMPLES_ENABLE_CXX=ON ' +configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON ' +configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" ' +configopts += '-DENABLE_CUDA=ON ' +configopts += '-DCMAKE_C_STANDARD=17 ' +configopts += '-DCMAKE_C_COMPILER=mpicc ' + +postinstallcmds = [ + "cp -r examples %(installdir)s/examples", + "ln -s %(installdir)s/lib64 %(installdir)s/lib", +] + +local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol'] + +sanity_check_paths = { + 'files': ['lib/libsundials_%s.a' % s for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']] + + ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']], + 'dirs': ['examples/%s' % s for s in local_solvers] + + ['include/%s' % s for s in local_solvers] + + ['examples/nvector', 'include/nvector', 'include/sundials'], +} + +postinstallcmds = [ + 'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include', +] + +modextravars = { + 'SUNDIALS_ROOT': '%(installdir)s', + 'SUNDIALS_LIB': '%(installdir)s/lib64', + 'SUNDIALS_INCLUDE': '%(installdir)s/include' +} + +moduleclass = 'math' diff --git a/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-iomkl-2021b.eb b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-iomkl-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..fe4b01d063ed6dec4415a0f311e5a021917b1adf --- /dev/null +++ b/Golden_Repo/s/SUNDIALS/SUNDIALS-6.1.0-iomkl-2021b.eb @@ -0,0 +1,70 @@ +name = 'SUNDIALS' +version = '6.1.0' + +homepage = 'https://computation.llnl.gov/casc/sundials/' +description = """SUNDIALS is a SUite of Nonlinear and DIfferential/ALgebraic equation Solvers. It consists of the +following six solvers: CVODE, solves initial value problems for ordinary differential equation (ODE) systems; CVODES, +solves ODE systems and includes sensitivity analysis capabilities (forward and adjoint); ARKODE, solves initial value +ODE problems with additive Runge-Kutta methods, include support for IMEX methods; IDA, solves initial value problems for +differential-algebraic equation (DAE) systems; IDAS, solves DAE systems and includes sensitivity analysis capabilities +(forward and adjoint); KINSOL, solves nonlinear algebraic systems. +""" + +examples = 'Examples can be found in $EBROOTSUNDIALS/examples' + +toolchain = {'name': 'iomkl', 'version': '2021b'} +toolchainopts = {'openmp': True, 'usempi': True, 'pic': True} + +source_urls = ['https://github.com/LLNL/sundials/releases/download/v%(version)s/'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['eea49f52140640e54931c779e73aece65f34efa996a26b2263db6a1e27d0901c'] + +builddependencies = [ + ('CMake', '3.21.1', '', SYSTEM), +] + +separate_build_dir = 'True' + +preconfigopts = 'export CUDA_TOOLKIT_ROOT_DIR=$EBROOTCUDA && ' + +configopts = '-DBUILD_SHARED_LIBS=ON ' +configopts += '-DENABLE_MPI=ON ' +configopts += '-DENABLE_FORTRAN=ON ' +configopts += '-DBUILD_FORTRAN_MODULE_INTERFACE=ON ' +configopts += '-DEXAMPLES_ENABLE_F2003=ON ' +configopts += '-DENABLE_OPENMP=ON ' +configopts += '-DEXAMPLES_ENABLE_CXX=ON ' +configopts += '-DSUNDIALS_BUILD_PACKAGE_FUSED_KERNELS=ON ' +configopts += '-DENABLE_LAPACK=ON -DLAPACK_LIBRARIES="$LIBLAPACK" ' +configopts += '-DENABLE_CUDA=ON ' +configopts += '-DCMAKE_C_STANDARD=17 ' +configopts += '-DCMAKE_C_COMPILER=mpicc ' + +postinstallcmds = [ + "cp -r examples %(installdir)s/examples", + "ln -s %(installdir)s/lib64 %(installdir)s/lib", +] + +local_solvers = ['arkode', 'cvode', 'cvodes', 'ida', 'idas', 'kinsol'] + +sanity_check_paths = { + 'files': ['lib/libsundials_%s.a' % s for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']] + + ['lib/libsundials_%s.%s' % (s, SHLIB_EXT) for s in local_solvers + + ['nvecopenmp', 'nvecparallel', 'nvecserial']], + 'dirs': ['examples/%s' % s for s in local_solvers] + + ['include/%s' % s for s in local_solvers] + + ['examples/nvector', 'include/nvector', 'include/sundials'], +} + +postinstallcmds = [ + 'cp %(builddir)s/sundials-%(version)s/src/sundials/sundials_context_impl.h %(installdir)s/include', +] + +modextravars = { + 'SUNDIALS_ROOT': '%(installdir)s', + 'SUNDIALS_LIB': '%(installdir)s/lib64', + 'SUNDIALS_INCLUDE': '%(installdir)s/include' +} + +moduleclass = 'math' diff --git a/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb index 24a824b9ababf7a98ba6357d245cd1213a13292f..99c9e1eb052bf03b39df1b35d4024d8042ca2ce3 100644 --- a/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb +++ b/Golden_Repo/s/SciPy-bundle/SciPy-bundle-2021.10-gcccoremkl-11.2.0-2021.4.0.eb @@ -62,9 +62,9 @@ exts_list = [ # ('mpi4py', '3.1.1', { # 'checksums': ['e11f8587a3b93bb24c8526addec664b586b965d83c0882b884c14dc3fd6b9f5c'], # }), - # ('numexpr', '2.7.3', { - # 'checksums': ['43616529f9b7d1afc83386f943dc66c4da5e052f00217ba7e3ad8dd1b5f3a825'], - # }), + ('numexpr', '2.7.3', { + 'checksums': ['43616529f9b7d1afc83386f943dc66c4da5e052f00217ba7e3ad8dd1b5f3a825'], + }), ('Bottleneck', '1.3.2', { 'checksums': ['20179f0b66359792ea283b69aa16366419132f3b6cf3adadc0c48e2e8118e573'], }), diff --git a/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-2021b.eb b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..ca96c69b36e415e0159fa34bf9f0c5e344ee0aa4 --- /dev/null +++ b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-2021b.eb @@ -0,0 +1,27 @@ +name = 'Siesta' +version = '4.1.5' + +homepage = 'http://departments.icmab.es/leem/siesta' +description = """SIESTA is both a method and its computer program implementation, to perform efficient electronic + structure calculations and ab initio molecular dynamics simulations of molecules and solids.""" + +toolchain = {'name': 'intel', 'version': '2021b'} +toolchainopts = {'usempi': True, 'precise': True} + +source_urls = [ + 'https://gitlab.com/siesta-project/siesta/-/releases/v%(version)s/downloads'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['518df31aa6213af5e24cc73abb537b2c89a925b487171f5339d743d0c7140b3f'] + +dependencies = [ + ('netCDF-Fortran', '4.5.3'), + ('METIS', '5.1.0'), + ('ELPA', '2021.11.001'), +] + +# transiesta is now siesta --electrode +with_transiesta = False + +runtest = 'check' + +moduleclass = 'phys' diff --git a/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-para-2021b.eb b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-para-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..bc151e73d54971f5a00ef9fd4f1664e7d7681d80 --- /dev/null +++ b/Golden_Repo/s/Siesta/Siesta-4.1.5-intel-para-2021b.eb @@ -0,0 +1,27 @@ +name = 'Siesta' +version = '4.1.5' + +homepage = 'http://departments.icmab.es/leem/siesta' +description = """SIESTA is both a method and its computer program implementation, to perform efficient electronic + structure calculations and ab initio molecular dynamics simulations of molecules and solids.""" + +toolchain = {'name': 'intel-para', 'version': '2021b'} +toolchainopts = {'usempi': True, 'precise': True} + +source_urls = [ + 'https://gitlab.com/siesta-project/siesta/-/releases/v%(version)s/downloads'] +sources = [SOURCELOWER_TAR_GZ] +checksums = ['518df31aa6213af5e24cc73abb537b2c89a925b487171f5339d743d0c7140b3f'] + +dependencies = [ + ('netCDF-Fortran', '4.5.3'), + ('METIS', '5.1.0'), + ('ELPA', '2021.11.001'), +] + +# transiesta is now siesta --electrode +with_transiesta = False + +runtest = 'check' + +moduleclass = 'phys' diff --git a/Golden_Repo/s/Silo/Silo-4.11-ipsmpi-2021b.eb b/Golden_Repo/s/Silo/Silo-4.11-ipsmpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..5a66c4c5e239ef08e49f59225fba92367e53931b --- /dev/null +++ b/Golden_Repo/s/Silo/Silo-4.11-ipsmpi-2021b.eb @@ -0,0 +1,36 @@ +easyblock = 'ConfigureMake' + +name = 'Silo' +version = '4.11' + +homepage = 'https://wci.llnl.gov/simulation/computer-codes/silo/' +description = 'Silo is a library for reading and writing a wide variety of scientific data to binary, disk files.' + + +toolchain = {'name': 'ipsmpi', 'version': '2021b'} +toolchainopts = {'opt': True, 'pic': True, 'usempi': True} + +source_urls = ['https://wci.llnl.gov/sites/wci/files/2021-09/'] +sources = ['%(namelower)s-%(version)s.tgz'] +patches = ['silo-4.11-fix-hdf5.patch'] +checksums = [ + 'ab936c1f4fc158d9fdc4415965f7d9def7f4abeca596fe5a25bd8485654898ac', # silo-4.11.tgz + '62ac2c76d2a4fc6562a5cbf1e11957174858b3b238c7dc5057865db0cce8bef1', # silo-4.11-fix-hdf5.patch +] + +dependencies = [ + ('HDF5', '1.12.1'), + ('Szip', '2.1.1') +] + +configopts = [ + '--with-hdf5=$EBROOTHDF5/include,$EBROOTHDF5/lib --with-szlib=$EBROOTSZIP/lib --enable-shared --disable-silex', + '--with-szlib=$EBROOTSZIP/lib --enable-shared --disable-silex', +] + +sanity_check_paths = { + 'files': ['bin/browser', 'bin/silock', 'bin/silodiff', 'bin/silofile', 'lib/libsilo.a', 'lib/libsiloh5.a'], + 'dirs': [], +} + +moduleclass = 'data' diff --git a/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb b/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb index 9d6d7ebec2d0a64bbcfec2edde9698fb77134483..3d18e46604b93b672eedb0b4fbd61e324ed7e35d 100644 --- a/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb +++ b/Golden_Repo/s/scikit-image/scikit-image-0.18.3-gcccoremkl-11.2.0-2021.4.0.eb @@ -11,7 +11,7 @@ toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} dependencies = [ ('Python', '3.9.6'), ('matplotlib', '3.4.3'), - ('Pillow-SIMD', '8.3.1'), + ('Pillow-SIMD', '9.0.1'), ('dask', '2021.9.1'), ] diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.1.0_fix-cuda-build.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.1.0_fix-cuda-build.patch new file mode 100644 index 0000000000000000000000000000000000000000..5873bdc5ed029b3ba97d010d50ae2117e4b15ab7 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.1.0_fix-cuda-build.patch @@ -0,0 +1,47 @@ +fix for "undeclared inclusion(s) in rule" errors when building TensorFlow 1.14.0 with CUDA support, +if the installation directory for GCC is hosted in a path that is a symlink to another path; +the symlinked path is resolved in several places (both by 'gcc' itself and by the TF build process), +which makes hard comparisons between paths fail +author: Alexander Grund based on original patch by Kenneth Hoste (HPC-UGent) +diff --git a/third_party/gpus/cuda_configure.bzl b/third_party/gpus/cuda_configure.bzl +index ba4bd8ad75..dab492ecda 100644 +--- a/third_party/gpus/cuda_configure.bzl ++++ b/third_party/gpus/cuda_configure.bzl +@@ -303,11 +303,36 @@ def _get_cxx_inc_directories_impl(repository_ctx, cc, lang_is_cpp): + else: + inc_dirs = result.stderr[index1 + 1:index2].strip() + +- return [ ++ compiler_includes = [ + _normalize_include_path(repository_ctx, _cxx_inc_convert(p)) + for p in inc_dirs.split("\n") + ] + ++ # fix include path by also including paths where resolved symlink is replaced by original path ++ # Try to find real path to CC installation to "see through" compiler wrappers ++ # GCC has the path to g++ ++ index1 = result.stderr.find("COLLECT_GCC=") ++ if index1 != -1: ++ index1 = result.stderr.find("=", index1) ++ index2 = result.stderr.find("\n", index1) ++ cc_topdir = repository_ctx.path(result.stderr[index1 + 1 : index2]).dirname.dirname ++ else: ++ # Clang has the directory ++ index1 = result.stderr.find("InstalledDir: ") ++ if index1 != -1: ++ index1 = result.stderr.find(" ", index1) ++ index2 = result.stderr.find("\n", index1) ++ cc_topdir = repository_ctx.path(result.stderr[index1 + 1 : index2]).dirname ++ else: ++ # Fallback to the CC path ++ cc_topdir = repository_ctx.path(cc).dirname.dirname ++ cc_topdir_resolved = str(cc_topdir.realpath).strip() ++ cc_topdir = str(cc_topdir).strip() ++ if cc_topdir_resolved != cc_topdir: ++ original_compiler_includes = [p.replace(cc_topdir_resolved, cc_topdir) for p in compiler_includes] ++ compiler_includes = compiler_includes + original_compiler_includes ++ return compiler_includes ++ + def get_cxx_inc_directories(repository_ctx, cc, tf_sysroot): + """Compute the list of default C and C++ include directories.""" + diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_add-ldl.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_add-ldl.patch new file mode 100644 index 0000000000000000000000000000000000000000..611b441446521f31d3bbe107f7212135172e05f1 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_add-ldl.patch @@ -0,0 +1,19 @@ +The stacktrace library uses dladdr and friends but doesn't link libdl +See https://github.com/tensorflow/tensorflow/issues/45013 + +Author: Alexander Grund (TU Dresden) + +diff --git a/tensorflow/core/platform/BUILD b/tensorflow/core/platform/BUILD +index 0a324f31023..56a9c9e2455 100644 +--- a/tensorflow/core/platform/BUILD ++++ b/tensorflow/core/platform/BUILD +@@ -961,7 +961,8 @@ cc_library( + copts = tf_copts(), + linkopts = select({ + "//tensorflow:windows": [], +- "//conditions:default": ["-lm"], ++ "//tensorflow:freebsd": ["-lm"], ++ "//conditions:default": ["-lm", "-ldl"], + }), + deps = [ + ":platform", diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_dont-use-var-lock.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_dont-use-var-lock.patch new file mode 100644 index 0000000000000000000000000000000000000000..e33d0028a40a53df6315e7094ec2dce79256e5ce --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.4.0_dont-use-var-lock.patch @@ -0,0 +1,37 @@ +diff --git a/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh b/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh +index ee70f2f608b..ab5cbe7d7b5 100755 +--- a/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh ++++ b/tensorflow/tools/ci_build/gpu_build/parallel_gpu_execute.sh +@@ -53,7 +53,7 @@ TEST_BINARY="$(rlocation $TEST_WORKSPACE/${1#./})" + shift + # ******************************************************************* + +-mkdir -p /var/lock ++mkdir -p /tmp/tf-test-lock + # Try to acquire any of the TF_GPU_COUNT * TF_TESTS_PER_GPU + # slots to run a test at. + # +@@ -61,7 +61,7 @@ mkdir -p /var/lock + # So, we iterate over TF_TESTS_PER_GPU first. + for j in `seq 0 $((TF_TESTS_PER_GPU-1))`; do + for i in `seq 0 $((TF_GPU_COUNT-1))`; do +- exec {lock_fd}>/var/lock/gpulock${i}_${j} || exit 1 ++ exec {lock_fd}>/tmp/tf-test-lock/gpulock${i}_${j} || exit 1 + if flock -n "$lock_fd"; + then + ( +@@ -70,6 +70,7 @@ for j in `seq 0 $((TF_TESTS_PER_GPU-1))`; do + export CUDA_VISIBLE_DEVICES=$i + export HIP_VISIBLE_DEVICES=$i + echo "Running test $TEST_BINARY $* on GPU $CUDA_VISIBLE_DEVICES" ++ set +e + "$TEST_BINARY" $@ + ) + return_code=$? +@@ -79,5 +80,5 @@ for j in `seq 0 $((TF_TESTS_PER_GPU-1))`; do + done + done + +-echo "Cannot find a free GPU to run the test $* on, exiting with failure..." ++echo "Cannot find a free GPU to run the test $TEST_BINARY $* on, exiting with failure..." + exit 1 diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0-fix-alias-violation-in-absl.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0-fix-alias-violation-in-absl.patch new file mode 100644 index 0000000000000000000000000000000000000000..427f7555ecbf9a8bb785cbf5678598e05f548a89 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0-fix-alias-violation-in-absl.patch @@ -0,0 +1,26 @@ +The behavior relied on by Abseil is unsupported by GCC and leads to misoptimizations. +See https://github.com/tensorflow/tensorflow/issues/47179 + +Author: Alexander Grund + +diff --git a/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch b/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch +index 6301119ab2c..0b8b4838726 100644 +--- a/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch ++++ b/third_party/absl/com_google_absl_fix_mac_and_nvcc_build.patch +@@ -1,3 +1,16 @@ ++diff --git a/absl/container/internal/container_memory.h b/absl/container/internal/container_memory.h ++index d24b0f8..f8847b5 100644 ++--- a/absl/container/internal/container_memory.h +++++ b/absl/container/internal/container_memory.h ++@@ -338,7 +338,7 @@ struct map_slot_policy { ++ // If pair<const K, V> and pair<K, V> are layout-compatible, we can accept one ++ // or the other via slot_type. We are also free to access the key via ++ // slot_type::key in this case. ++- using kMutableKeys = memory_internal::IsLayoutCompatible<K, V>; +++ using kMutableKeys = std::false_type; ++ ++ public: ++ static value_type& element(slot_type* slot) { return slot->value; } + diff --git a/absl/container/internal/compressed_tuple.h b/absl/container/internal/compressed_tuple.h + index 4bfe92f..01db713 100644 + --- a/absl/container/internal/compressed_tuple.h diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_add-support-for-large-core-systems.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_add-support-for-large-core-systems.patch new file mode 100644 index 0000000000000000000000000000000000000000..673d76d12cd7b2b6b8a6fcec979b3764c4bdc8c7 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_add-support-for-large-core-systems.patch @@ -0,0 +1,32 @@ +Enhance NumSchedulableCPUs to allow for nodes with more than 1024 cores +See https://github.com/tensorflow/tensorflow/issues/49833 + +Author: Alexander Grund (TU Dresden) + +diff --git a/tensorflow/core/platform/default/port.cc b/tensorflow/core/platform/default/port.cc +index 8c8c8641b2c..e648f99c7f4 100644 +--- a/tensorflow/core/platform/default/port.cc ++++ b/tensorflow/core/platform/default/port.cc +@@ -71,9 +71,19 @@ string JobName() { + + int NumSchedulableCPUs() { + #if defined(__linux__) && !defined(__ANDROID__) +- cpu_set_t cpuset; +- if (sched_getaffinity(0, sizeof(cpu_set_t), &cpuset) == 0) { +- return CPU_COUNT(&cpuset); ++ for(int ncpus = 1024; ncpus < std::numeric_limits<int>::max() / 2; ncpus *= 2) { ++ size_t setsize = CPU_ALLOC_SIZE(ncpus); ++ cpu_set_t* mask = CPU_ALLOC(ncpus); ++ if (!mask) ++ break; ++ if (sched_getaffinity(0, setsize, mask) == 0) { ++ int result = CPU_COUNT_S(setsize, mask); ++ CPU_FREE(mask); ++ return result; ++ } ++ CPU_FREE(mask); ++ if (errno != EINVAL) ++ break; + } + perror("sched_getaffinity"); + #endif diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_disable-avx512-extensions.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_disable-avx512-extensions.patch new file mode 100644 index 0000000000000000000000000000000000000000..bbfad786fff9242c95b205a48715a3b55f4b3c84 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_disable-avx512-extensions.patch @@ -0,0 +1,19 @@ +(Some of the) AVX512 extensions to Eigen introduced by TensorFlow are broken and return wrong values. +So disable them for now to keep AVX512 in the other code parts working. +See https://github.com/tensorflow/tensorflow/issues/49944 + +Author: Alexander Grund (TU Dresden) + +diff --git a/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint b/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint +index 67cb111db80..0f3593b6c78 100644 +--- a/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint ++++ b/third_party/eigen3/unsupported/Eigen/CXX11/FixedPoint +@@ -31,7 +31,7 @@ + #include "src/FixedPoint/FixedPointTypes.h" + + // Use optimized implementations whenever available +-#if defined (EIGEN_VECTORIZE_AVX512DQ) || defined (EIGEN_VECTORIZE_AVX512BW) ++#if 0 + #include "src/FixedPoint/PacketMathAVX512.h" + #include "src/FixedPoint/TypeCastingAVX512.h" + diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch new file mode 100644 index 0000000000000000000000000000000000000000..5d80e47df8fb67e47fa0708fcc7ed62763e2bd89 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch @@ -0,0 +1,37 @@ +The comment is not true, the function actually takes the arguments as it should +Hence just redefine the function + +Author: Alexander Grund (TU Dresden) + +diff --git a/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h b/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h +index 916edd561ff..9c8025dac49 100644 +--- a/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h ++++ b/tensorflow/lite/kernels/internal/optimized/depthwiseconv_3x3_filter_common.h +@@ -122,26 +122,7 @@ inline int32x4_t vpaddq_s32(int32x4_t a, int32x4_t b) { + #endif // !__aarch64__ + + #ifdef __ARM_FEATURE_DOTPROD +-// The vdotq_lane_s32 takes int8x8t for the rhs parameter, whereas the actual +-// instruction selects from between 4 32-bit (4x8-bit packed) sub-registers, an +-// unusual interpretation of "lane". +-inline int32x4_t vdotq_four_lane_s32(int32x4_t acc, int8x16_t lhs, +- int8x16_t rhs, const int lane) { +- switch (lane) { +- case 0: +- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_low_s8(rhs)), 0); +- case 1: +- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_low_s8(rhs)), 1); +- case 2: +- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_high_s8(rhs)), +- 0); +- case 3: +- default: +- return vdotq_lane_s32(acc, lhs, vreinterpret_s32_s8(vget_high_s8(rhs)), +- 1); +- } +-} +- ++#define vdotq_four_lane_s32 vdotq_lane_s32 + #else + + inline int32x4_t vdotq_s32(int32x4_t acc, int8x16_t lhs, int8x16_t rhs) { diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-crash-on-shutdown.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-crash-on-shutdown.patch new file mode 100644 index 0000000000000000000000000000000000000000..18021a240ab4ea385d2f16adf1062e9bc87b878f --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix-crash-on-shutdown.patch @@ -0,0 +1,20 @@ +Releasing and reaquiring the GIL during Python shutdown is not possible and leads to force termination. +Remove that. +See https://github.com/tensorflow/tensorflow/issues/50853 + +Author: Alexander Grund + +diff --git a/tensorflow/python/client/tf_session_wrapper.cc b/tensorflow/python/client/tf_session_wrapper.cc +index 306381347c7..1208aa2ce61 100644 +--- a/tensorflow/python/client/tf_session_wrapper.cc ++++ b/tensorflow/python/client/tf_session_wrapper.cc +@@ -557,8 +557,7 @@ PYBIND11_MODULE(_pywrap_tf_session, m) { + + m.def("TF_NewGraph", TF_NewGraph, py::return_value_policy::reference, + py::call_guard<py::gil_scoped_release>()); +- m.def("TF_DeleteGraph", TF_DeleteGraph, +- py::call_guard<py::gil_scoped_release>()); ++ m.def("TF_DeleteGraph", TF_DeleteGraph); + + m.def("TF_GraphGetOpDef", + [](TF_Graph* graph, const char* op_name, TF_Buffer* output_op_def) { diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch new file mode 100644 index 0000000000000000000000000000000000000000..d05986a8eb281a5868744b443905b021360991fb --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch @@ -0,0 +1,55 @@ +TF-2.5.0 and 2.6.0 are not compatible with numpy > 1.20 +During the testing phase, TensorFlow throws errors like this +"Cannot convert a symbolic Tensor (lstm/strided_slice:0) to a numpy array. +This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported" +See https://github.com/tensorflow/tensorflow/pull/48935 + +Author: Alexander Grund (TU Dresden) + +diff --git a/tensorflow/python/framework/ops.py b/tensorflow/python/framework/ops.py +index 4e12a8a1d17..73afdd4ed8a 100644 +--- a/tensorflow/python/framework/ops.py ++++ b/tensorflow/python/framework/ops.py +@@ -864,7 +864,7 @@ class Tensor(internal.NativeObject, core_tf_types.Tensor): + __array_priority__ = 100 + + def __array__(self): +- raise NotImplementedError( ++ raise TypeError( + "Cannot convert a symbolic Tensor ({}) to a numpy array." + " This error may indicate that you're trying to pass a Tensor to" + " a NumPy call, which is not supported".format(self.name)) +diff --git a/tensorflow/python/framework/ops_test.py b/tensorflow/python/framework/ops_test.py +index c72b18e8df5..f69ec4a9ae2 100644 +--- a/tensorflow/python/framework/ops_test.py ++++ b/tensorflow/python/framework/ops_test.py +@@ -188,7 +188,7 @@ class TensorAndShapeTest(test_util.TensorFlowTestCase): + with ops.Graph().as_default(): + x = array_ops.ones((3, 4), name="test_ones") + +- with self.assertRaisesRegex(NotImplementedError, ++ with self.assertRaisesRegex(TypeError, + r"Cannot convert a symbolic.+test_ones"): + np.array(x) + +diff --git a/tensorflow/python/ops/array_ops.py b/tensorflow/python/ops/array_ops.py +index 77cebdad660..3c650d7808f 100644 +--- a/tensorflow/python/ops/array_ops.py ++++ b/tensorflow/python/ops/array_ops.py +@@ -36,6 +36,7 @@ from tensorflow.python.framework import tensor_util + from tensorflow.python.framework.constant_op import constant + from tensorflow.python.ops import gen_array_ops + from tensorflow.python.ops import gen_math_ops ++from tensorflow.python.ops import math_ops + # go/tf-wildcard-import + # pylint: disable=wildcard-import + from tensorflow.python.ops.gen_array_ops import * +@@ -2897,7 +2898,7 @@ def matrix_set_diag( + + def _constant_if_small(value, shape, dtype, name): + try: +- if np.prod(shape) < 1000: ++ if math_ops.reduce_prod(shape) < 1000: + return constant(value, shape=shape, dtype=dtype, name=name) + except (NotImplementedError, TypeError): + # Happens when shape is a Tensor, list with Tensor elements, etc. diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_protobuf_error_message.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_protobuf_error_message.patch new file mode 100644 index 0000000000000000000000000000000000000000..addc55bd710e16b23e18d4765390a6cae1f2733f --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_fix_protobuf_error_message.patch @@ -0,0 +1,30 @@ +Fix an issue where TensorFlow 2.5/2.6 won't build with a protobuf newer than 3.14 +Additionally, a TypeError ("expected tensorflow.TensorShapeProto got tensorflow.TensorShapeProto") +is fixed by inverting the import statements. +Solution/patch obtained from https://bugs.gentoo.org/800824 + +diff -Nrup tensorflow-2.5.0_old/tensorflow/core/kernels/example_parsing_ops.cc tensorflow-2.5.0/tensorflow/core/kernels/example_parsing_ops.cc +--- tensorflow-2.5.0_old/tensorflow/core/kernels/example_parsing_ops.cc 2021-05-12 15:26:41.000000000 +0200 ++++ tensorflow-2.5.0/tensorflow/core/kernels/example_parsing_ops.cc 2021-07-14 08:09:39.927536430 +0200 +@@ -1218,7 +1218,7 @@ class DecodeJSONExampleOp : public OpKer + resolver_.get(), "type.googleapis.com/tensorflow.Example", &in, &out); + OP_REQUIRES(ctx, status.ok(), + errors::InvalidArgument("Error while parsing JSON: ", +- string(status.error_message()))); ++ string(status.message()))); + } + } + +diff -Nrup tensorflow-2.5.0_old/tensorflow/python/__init__.py tensorflow-2.5.0/tensorflow/python/__init__.py +--- tensorflow-2.5.0_old/tensorflow/python/__init__.py 2021-05-12 15:26:41.000000000 +0200 ++++ tensorflow-2.5.0/tensorflow/python/__init__.py 2021-07-14 08:09:55.696294764 +0200 +@@ -37,8 +37,8 @@ import traceback + # go/tf-wildcard-import + # pylint: disable=wildcard-import,g-bad-import-order,g-import-not-at-top + +-from tensorflow.python.eager import context + from tensorflow.python import pywrap_tensorflow as _pywrap_tensorflow ++from tensorflow.python.eager import context + + # pylint: enable=wildcard-import + diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch new file mode 100644 index 0000000000000000000000000000000000000000..4e40a81b1472f2a7cdaf011fdeba736be5910a27 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch @@ -0,0 +1,45 @@ +TensorFlow adds some GPU tests twice increasing the runtime of the test suite. +This filters out the test part meant for CPU. + +See https://github.com/tensorflow/tensorflow/issues/47081 + +Author: Alexander Grund (TU Dresden) + +diff --git a/tensorflow/tensorflow.bzl b/tensorflow/tensorflow.bzl +index a4be1fea8bb..2343b8985f8 100644 +--- a/tensorflow/tensorflow.bzl ++++ b/tensorflow/tensorflow.bzl +@@ -1116,19 +1116,20 @@ def tf_gpu_cc_test( + args = [], + kernels = [], + linkopts = []): +- tf_cc_test( +- name = name, +- size = size, +- srcs = srcs, +- args = args, +- data = data, +- extra_copts = extra_copts + if_cuda(["-DNV_CUDNN_DISABLE_EXCEPTION"]), +- kernels = kernels, +- linkopts = linkopts, +- linkstatic = linkstatic, +- tags = tags, +- deps = deps, +- ) ++ if 'gpu' not in tags: ++ tf_cc_test( ++ name = name, ++ size = size, ++ srcs = srcs, ++ args = args, ++ data = data, ++ extra_copts = extra_copts + if_cuda(["-DNV_CUDNN_DISABLE_EXCEPTION"]), ++ kernels = kernels, ++ linkopts = linkopts, ++ linkstatic = linkstatic, ++ tags = tags, ++ deps = deps, ++ ) + tf_cc_test( + name = name, + size = size, diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb new file mode 100644 index 0000000000000000000000000000000000000000..a47edc66b901b794e421fa54bef3c0c4269d3aff --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb @@ -0,0 +1,259 @@ +easyblock = 'PythonBundle' + +name = 'TensorFlow' +version = '2.6.0' +versionsuffix = '-CUDA-%(cudaver)s' + +homepage = 'https://www.tensorflow.org/' +description = "An open-source software library for Machine Intelligence" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} +toolchainopts = {'pic': True} + +builddependencies = [ + ('Bazel', '3.7.2'), + ('protobuf', '3.17.3'), + # git 2.x required, see also https://github.com/tensorflow/tensorflow/issues/29053 + ('git', '2.33.1', '-nodocs'), + ('pybind11', '2.7.1'), + ('UnZip', '6.0'), +] +dependencies = [ + ('CUDA', '11.5', '', True), + ('cuDNN', '8.3.1.22', versionsuffix, True), + ('NCCL', '2.11.4', '-GCCcore-11.2.0%s' % versionsuffix, True), + ('Python', '3.9.6'), + ('SciPy-bundle', '2021.10'), + ('h5py', '3.5.0', '-serial'), + ('cURL', '7.78.0'), + ('double-conversion', '3.1.6'), + ('flatbuffers', '2.0.0'), + ('giflib', '5.2.1'), + ('hwloc', '2.5.0'), + ('ICU', '70.1'), + ('JsonCpp', '1.9.4'), + ('libjpeg-turbo', '2.1.1'), + ('LMDB', '0.9.29'), + ('NASM', '2.15.05'), + ('nsync', '1.24.0'), + ('SQLite', '3.36'), + ('protobuf-python', '3.17.3'), + ('flatbuffers-python', '2.0'), + ('typing-extensions', '3.10.0.0'), + ('libpng', '1.6.37'), + ('snappy', '1.1.9'), + ('zlib', '1.2.11'), +] + +use_pip = True +sanity_pip_check = True + +# Dependencies created and updated using findPythonDeps.sh: +# https://gist.github.com/Flamefire/49426e502cd8983757bd01a08a10ae0d +exts_list = [ + ('Markdown', '3.3.4', { + 'checksums': ['31b5b491868dcc87d6c24b7e3d19a0d730d59d3e46f4eea6430a321bed387a49'], + }), + ('pyasn1-modules', '0.2.8', { + 'checksums': ['905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e'], + }), + ('rsa', '4.7.2', { + 'checksums': ['9d689e6ca1b3038bc82bf8d23e944b6b6037bc02301a574935b2dd946e0353b9'], + }), + ('cachetools', '4.2.2', { + 'checksums': ['61b5ed1e22a0924aed1d23b478f37e8d52549ff8a961de2909c69bf950020cff'], + }), + ('google-auth', '1.35.0', { + 'modulename': 'google.auth', + 'checksums': ['b7033be9028c188ee30200b204ea00ed82ea1162e8ac1df4aa6ded19a191d88e'], + }), + ('oauthlib', '3.1.1', { + 'checksums': ['8f0215fcc533dd8dd1bee6f4c412d4f0cd7297307d43ac61666389e3bc3198a3'], + }), + ('requests-oauthlib', '1.3.0', { + 'checksums': ['b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a'], + }), + ('google-auth-oauthlib', '0.4.5', { + 'checksums': ['4ab58e6c3dc6ccf112f921fcced40e5426fba266768986ea502228488276eaba'], + }), + ('absl-py', '0.13.0', { + 'modulename': 'absl', + 'checksums': ['6953272383486044699fd0e9f00aad167a27e08ce19aae66c6c4b10e7e767793'], + }), + ('astunparse', '1.6.3', { + 'checksums': ['5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872'], + }), + ('grpcio', '1.39.0', { + 'modulename': 'grpc', + 'checksums': ['57974361a459d6fe04c9ae0af1845974606612249f467bbd2062d963cb90f407'], + }), + ('gviz-api', '1.9.0', { + 'source_tmpl': 'gviz_api-%(version)s.tar.gz', + 'checksums': ['43d13ccc21834d0501b33a291ef3265e933dbb4bbdca3d34b1ed0a048c0ef640'], + }), + ('tensorboard_data_server', '0.6.1', { + 'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl', + 'checksums': ['809fe9887682d35c1f7d1f54f0f40f98bb1f771b14265b453ca051e2ce58fca7'], + }), + ('tensorboard', version, { + # 'source_tmpl': '%(name)s-%(version)s-py3-none-any-JSC.whl', # This is for Jens + 'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl', + 'checksums': ['f7dac4cdfb52d14c9e3f74585ce2aaf8e6203620a864e51faf84988b09f7bbdb'], + }), + ('tensorboard_plugin_wit', '1.8.0', { + 'source_tmpl': '%(name)s-%(version)s-py3-none-any.whl', + 'checksums': ['2a80d1c551d741e99b2f197bb915d8a133e24adb8da1732b840041860f91183a'], + }), + ('tensorboard_plugin_profile', '2.5.0', { + 'checksums': ['f832698d87a773b9a017fc4dd5cf598a1ff942ccfbf3392c83fe12c949ab9f52'], + }), + ('google-pasta', '0.2.0', { + 'modulename': 'pasta', + 'checksums': ['c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e'], + }), + ('termcolor', '1.1.0', { + 'checksums': ['1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b'], + }), + ('tensorflow_estimator', version, { + 'source_tmpl': '%(name)s-%(version)s-py2.py3-none-any.whl', + 'checksums': ['cf78528998efdb637ac0abaf525c929bf192767544eb24ae20d9266effcf5afd'], + }), + ('astor', '0.8.1', { + 'checksums': ['6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e'], + }), + ('gast', '0.4.0', { + 'checksums': ['40feb7b8b8434785585ab224d1568b857edb18297e5a3047f1ba012bc83b42c1'], + }), + ('pythran', '0.9.11', { + 'checksums': ['a317f91e2aade9f6550dc3bf40b5caeb45b7e012daf27e2b3e4ad928edb01667'], + }), + ('beniget', '0.3.0', { + 'checksums': ['062c893be9cdf87c3144fb15041cce4d81c67107c1591952cd45fdce789a0ff1'], + }), + ('clang', '5.0', { + 'checksums': ['ceccae97eda0225a5b44d42ffd61102e248325c2865ca53e4407746464a5333a'], + }), + ('opt_einsum', '3.3.0', { + 'checksums': ['59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549'], + }), + ('wrapt', '1.12.1', { + 'checksums': ['b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7'], + }), + ('Keras_Preprocessing', '1.1.2', { + 'checksums': ['add82567c50c8bc648c14195bf544a5ce7c1f76761536956c3d2978970179ef3'], + }), + ('dill', '0.3.3', { + 'source_tmpl': '%(name)s-%(version)s.zip', + 'checksums': ['efb7f6cb65dba7087c1e111bb5390291ba3616741f96840bfc75792a1a9b5ded'], + }), + ('tblib', '1.7.0', { + 'checksums': ['059bd77306ea7b419d4f76016aef6d7027cc8a0785579b5aad198803435f882c'], + }), + ('portpicker', '1.4.0', { + 'checksums': ['c2831ff4328a21e928ffc9e52124bcafacaf5816d38a1a72dc329680dc1bb7ba'], + }), + ('keras', version, { + 'source_tmpl': '%(name)s-%(version)s-py2.py3-none-any.whl', + 'checksums': ['504af5656a9829fe803ce48a8580ef16916e89906aceddad9e098614269437e7'], + }), + (name, version, { + 'patches': [ + 'TensorFlow-2.1.0_fix-cuda-build.patch', + 'TensorFlow-2.4.0_add-ldl.patch', + 'TensorFlow-2.4.0_dont-use-var-lock.patch', + 'TensorFlow-2.5.0_add-support-for-large-core-systems.patch', + 'TensorFlow-2.5.0_disable-avx512-extensions.patch', + 'TensorFlow-2.5.0-fix-alias-violation-in-absl.patch', + 'TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch', + 'TensorFlow-2.5.0_fix-crash-on-shutdown.patch', + 'TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch', + 'TensorFlow-2.5.0_fix_protobuf_error_message.patch', + 'TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch', + 'TensorFlow-2.6.0_add-default-shell-env.patch', + 'TensorFlow-2.6.0_downgrade-required-versions.patch', + ], + 'source_tmpl': 'v%(version)s.tar.gz', + 'source_urls': ['https://github.com/tensorflow/tensorflow/archive/'], + 'test_script': 'TensorFlow-2.x_mnist-test.py', + 'test_tag_filters_cpu': '-gpu,-tpu,-no_cuda_on_cpu_tap,-no_pip,-no_oss,-oss_serial,-benchmark-test,-v1only', + 'test_tag_filters_gpu': "gpu,-no_gpu,-nogpu,-gpu_cupti,-no_cuda11,-no_pip,-no_oss,-oss_serial, \ + -benchmark-test,-v1only", + 'test_targets': [ + '//tensorflow/core/...', + '-//tensorflow/core:example_java_proto', + '-//tensorflow/core/example:example_protos_closure', + '//tensorflow/cc/...', + '//tensorflow/c/...', + '//tensorflow/python/...', + '-//tensorflow/c/eager:c_api_test_gpu', + '-//tensorflow/c/eager:c_api_distributed_test', + '-//tensorflow/c/eager:c_api_distributed_test_gpu', + '-//tensorflow/c/eager:c_api_cluster_test_gpu', + '-//tensorflow/c/eager:c_api_remote_function_test_gpu', + '-//tensorflow/c/eager:c_api_remote_test_gpu', + '-//tensorflow/core/common_runtime:collective_param_resolver_local_test', + '-//tensorflow/core/common_runtime:mkl_layout_pass_test', + '-//tensorflow/core/kernels/mkl:mkl_fused_ops_test', + '-//tensorflow/core/kernels/mkl:mkl_fused_batch_norm_op_test', + '-//tensorflow/python/kernel_tests/distributions:beta_test', + '-//tensorflow/python/kernel_tests:unique_op_test', + '-//tensorflow/python/kernel_tests/distributions:beta_test_gpu', + '-//tensorflow/python/kernel_tests:unique_op_test_gpu', + '-//tensorflow/python/keras/preprocessing:image_dataset_test', + '-//tensorflow/python/data/kernel_tests:placement_test', + '-//tensorflow/python/distribute:distribute_lib_test', + '-//tensorflow/python/kernel_tests:list_ops_test', + '-//tensorflow/python/kernel_tests:map_fn_test', + '-//tensorflow/python/data/kernel_tests:batch_test', + '-//tensorflow/python/data/experimental/kernel_tests:parallel_interleave_test', + '-//tensorflow/python/data/kernel_tests:map_test', + '-//tensorflow/python/data/kernel_tests:interleave_test', + '-//tensorflow/python/data/kernel_tests:dataset_test', + '-//tensorflow/python/data/kernel_tests:shuffle_test', + '-//tensorflow/python/data/kernel_tests:reduce_test', + '-//tensorflow/python/data/kernel_tests:iterator_test', + '-//tensorflow/c/eager:c_api_experimental_test_gpu', + '-//tensorflow/core/common_runtime/gpu:pool_allocator_test_gpu', + '-//tensorflow/core/kernels:diag_op_test_gpu', + '-//tensorflow/python/data/kernel_tests:iterator_test_gpu', + '-//tensorflow/python/data/kernel_tests:placement_test_gpu', + '-//tensorflow/python/kernel_tests:list_ops_test_gpu', + '-//tensorflow/python/kernel_tests:map_fn_test_gpu', + '-//tensorflow/python/data/kernel_tests:memory_cleanup_test_gpu', + '-//tensorflow/python/data/kernel_tests:reduce_test_gpu', + ], + 'testopts': "--test_timeout=3600 --test_size_filters=small", + 'testopts_gpu': "--test_timeout=3600 --test_size_filters=small \ + --run_under=//tensorflow/tools/ci_build/gpu_build:parallel_gpu_execute", + 'with_xla': True, + 'checksums': [ + '41b32eeaddcbc02b0583660bcf508469550e4cd0f86b22d2abe72dfebeacde0f', # v2.6.0.tar.gz + '78c20aeaa7784b8ceb46238a81e8c2461137d28e0b576deeba8357d23fbe1f5a', # TensorFlow-2.1.0_fix-cuda-build.patch + '917ee7282e782e48673596d8917c3207e60e0851bb9acf230a2a439b067af2e3', # TensorFlow-2.4.0_add-ldl.patch + # TensorFlow-2.4.0_dont-use-var-lock.patch + 'b14f2493fd2edf79abd1c4f2dde6c98a3e7d5cb9c25ab9386df874d5f072d6b5', + # TensorFlow-2.5.0_add-support-for-large-core-systems.patch + '915f3477d6407fafd48269fe1e684a05ce361d9b9b85e58686682df87760f636', + # TensorFlow-2.5.0_disable-avx512-extensions.patch + '3655ce24c97569ac9738c07cac85347ba6f5c815ada95b19b606ffa46d4dda03', + # TensorFlow-2.5.0-fix-alias-violation-in-absl.patch + '12454fda3330fb45cd380377e283f04488b40e0b8ae7378e786ddf731a581f75', + # TensorFlow-2.5.0_fix-arm-vector-intrinsics.patch + '6abfadc0f67ff3b510d70430843201cb46d7bd65db045ec9b482af70e0c8c0c8', + # TensorFlow-2.5.0_fix-crash-on-shutdown.patch + '578c7493221ebd3dc25ca43d63a72cbb28fdf4112b1e2baa7390f25781bd78fd', + # TensorFlow-2.5.0_fix_numpy_1.20_compatibility.patch + '4c32aba417e6ecb2642d5828b4ac618f1e4395f6c217cd621fa08a74433faa55', + # TensorFlow-2.5.0_fix_protobuf_error_message.patch + '4ca80aac8f7394f4c83af5e8b237f6264dde3d55d10bf0dcb93e49ee5e1c5697', + # TensorFlow-2.5.0_remove-duplicate-gpu-tests.patch + 'b940d438e036faac24453bff2cf1834c5e1359e87e84d1f1999fa7a30b278fec', + # TensorFlow-2.6.0_add-default-shell-env.patch + '8cc54ff4bc8e5fc8edd3a5e41ad338532e16db5c64a941cc45e1011d4b40dba7', + # TensorFlow-2.6.0_downgrade-required-versions.patch + 'e941df7025d39a6b57f508779775cf896691c34abe61d5f2eba9b891ef20d51a', + ], + }), +] + +moduleclass = 'lib' diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_add-default-shell-env.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_add-default-shell-env.patch new file mode 100644 index 0000000000000000000000000000000000000000..b80d92f0210a390dc1ad2ca832cd2233f1959ada --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_add-default-shell-env.patch @@ -0,0 +1,98 @@ +Make TensorFlow use the environment as set by EasyBuild + +From https://github.com/tensorflow/tensorflow/pull/44549 + +Author: Alexander Grund (TU Dresden) + +diff --git a/tensorflow/core/kernels/mlir_generated/build_defs.bzl b/tensorflow/core/kernels/mlir_generated/build_defs.bzl +index a6a136b8e38..e614b20bb02 100644 +--- a/tensorflow/core/kernels/mlir_generated/build_defs.bzl ++++ b/tensorflow/core/kernels/mlir_generated/build_defs.bzl +@@ -68,6 +68,7 @@ def _gen_mlir_op_impl(ctx): + ctx.outputs.out.path, + ) + ), ++ use_default_shell_env = True, + ) + + _gen_mlir_op_rule = rule( +@@ -157,6 +158,7 @@ def _gen_kernel_bin_impl(ctx): + "--enable_ftz=%s" % (ctx.attr.data_type == "f32"), + "--cpu_codegen=%s" % ctx.attr.cpu_codegen, + ], ++ use_default_shell_env = True, + mnemonic = "compile", + ) + compilation_outputs = cc_common.create_compilation_outputs( +diff --git a/third_party/flatbuffers/build_defs.bzl b/third_party/flatbuffers/build_defs.bzl +index d409f836cb0..754db3f5d86 100644 +--- a/third_party/flatbuffers/build_defs.bzl ++++ b/third_party/flatbuffers/build_defs.bzl +@@ -394,6 +394,7 @@ def _concat_flatbuffer_py_srcs_impl(ctx): + ctx.attr.deps[0].files.to_list()[0].path, + ctx.outputs.out.path, + ), ++ use_default_shell_env = True, + ) + + _concat_flatbuffer_py_srcs = rule( +diff --git a/third_party/mlir/tblgen.bzl b/third_party/mlir/tblgen.bzl +index 37577ed31ef..448284daefe 100644 +--- a/third_party/mlir/tblgen.bzl ++++ b/third_party/mlir/tblgen.bzl +@@ -154,6 +154,7 @@ def _gentbl_rule_impl(ctx): + executable = ctx.executable.tblgen, + arguments = [args], + mnemonic = "TdGenerate", # Kythe extractor hook. ++ use_default_shell_env = True, + ) + + return [DefaultInfo()] +diff --git a/third_party/nccl/build_defs.bzl.tpl b/third_party/nccl/build_defs.bzl.tpl +index c8757174038..fe163741f87 100644 +--- a/third_party/nccl/build_defs.bzl.tpl ++++ b/third_party/nccl/build_defs.bzl.tpl +@@ -100,6 +100,7 @@ def _device_link_impl(ctx): + "--output-file=%s" % cubin.path, + ] + [file.path for file in inputs], + mnemonic = "nvlink", ++ use_default_shell_env = True, + ) + cubins.append(cubin) + images.append("--image=profile=%s,file=%s" % (arch, cubin.path)) +@@ -125,6 +126,7 @@ def _device_link_impl(ctx): + arguments = arguments_list + images, + tools = [bin2c], + mnemonic = "fatbinary", ++ use_default_shell_env = True, + ) + + # Generate the source file #including the headers generated above. +@@ -203,6 +205,7 @@ def _prune_relocatable_code_impl(ctx): + executable = ctx.file._nvprune, + arguments = arguments, + mnemonic = "nvprune", ++ use_default_shell_env = True, + ) + outputs.append(output) + +@@ -236,6 +239,7 @@ def _merge_archive_impl(ctx): + inputs = ctx.files.srcs, # + ctx.files._crosstool, + outputs = [ctx.outputs.out], + command = "echo -e \"%s\" | %s -M" % (mri_script, cc_toolchain.ar_executable), ++ use_default_shell_env = True, + ) + + _merge_archive = rule( +diff --git a/third_party/systemlibs/grpc.bazel.generate_cc.bzl b/third_party/systemlibs/grpc.bazel.generate_cc.bzl +index 1534e526fd1..cd7304a9515 100644 +--- a/third_party/systemlibs/grpc.bazel.generate_cc.bzl ++++ b/third_party/systemlibs/grpc.bazel.generate_cc.bzl +@@ -140,6 +140,7 @@ def generate_cc_impl(ctx): + outputs = out_files, + executable = ctx.executable._protoc, + arguments = arguments, ++ use_default_shell_env = True, + ) + + return struct(files = depset(out_files)) diff --git a/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_downgrade-required-versions.patch b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_downgrade-required-versions.patch new file mode 100644 index 0000000000000000000000000000000000000000..15ec385988259a37f59eef3a375227518c29412e --- /dev/null +++ b/Golden_Repo/t/TensorFlow/TensorFlow-2.6.0_downgrade-required-versions.patch @@ -0,0 +1,36 @@ +TF introduced a change pinning versions to fixed major.minor or even patch versions +Loosen those a bit so we can build it with our versions. +See https://github.com/tensorflow/tensorflow/issues/44654 + +Author: Alexander Grund (TU Dresden) + +diff --git a/tensorflow/tools/pip_package/setup.py b/tensorflow/tools/pip_package/setup.py +index 3d4a64de2b4..b89d077a150 100644 +--- a/tensorflow/tools/pip_package/setup.py ++++ b/tensorflow/tools/pip_package/setup.py +@@ -78,20 +78,20 @@ REQUIRED_PACKAGES = [ + # NOTE: As numpy has releases that break semver guarantees and several other + # deps depend on numpy without an upper bound, we must install numpy before + # everything else. +- 'numpy ~= 1.19.2', ++ 'numpy >= 1.19.2', + # Install other dependencies + 'absl-py ~= 0.10', + 'astunparse ~= 1.6.3', + 'clang ~= 5.0', +- 'flatbuffers ~= 1.12.0', ++ 'flatbuffers >= 1.12.0', + 'google_pasta ~= 0.2', +- 'h5py ~= 3.1.0', ++ 'h5py ~= 3.1', + 'keras_preprocessing ~= 1.1.2', + 'opt_einsum ~= 3.3.0', + 'protobuf >= 3.9.2', +- 'six ~= 1.15.0', ++ 'six >= 1.15.0', + 'termcolor ~= 1.1.0', +- 'typing_extensions ~= 3.7.4', ++ 'typing_extensions >= 3.7.4', + 'wheel ~= 0.35', + 'wrapt ~= 1.12.1', + # These packages need to be pinned exactly as newer versions are diff --git a/Golden_Repo/t/TensorFlow/h5py-2.10.0_avoid-mpi-init.patch b/Golden_Repo/t/TensorFlow/h5py-2.10.0_avoid-mpi-init.patch new file mode 100644 index 0000000000000000000000000000000000000000..98034776400e528d4baebce3c01bd9dca5bfc4a9 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/h5py-2.10.0_avoid-mpi-init.patch @@ -0,0 +1,85 @@ +avoid that 'import h5py' triggers MPI_Init via mpi4py + +backported to h5py 2.10.0 from https://github.com/h5py/h5py/pull/1552 by Kenneth Hoste (HPC-UGent) + +diff -ru h5py-2.10.0.orig/h5py/api_types_ext.pxd h5py-2.10.0/h5py/api_types_ext.pxd +--- h5py-2.10.0.orig/h5py/api_types_ext.pxd 2019-09-06 23:29:33.000000000 +0200 ++++ h5py-2.10.0/h5py/api_types_ext.pxd 2020-05-25 19:30:30.000000000 +0200 +@@ -12,7 +12,7 @@ + include 'config.pxi' + + IF MPI: +- from mpi4py.MPI cimport MPI_Comm, MPI_Info, Comm, Info ++ from mpi4py.libmpi cimport MPI_Comm, MPI_Info + + cdef extern from "stdlib.h": + ctypedef long size_t +@@ -52,6 +52,7 @@ + cdef extern from "Python.h": + ctypedef void PyObject + ctypedef ssize_t Py_ssize_t ++ ctypedef size_t Py_uintptr_t + + PyObject* PyErr_Occurred() + void PyErr_SetString(object type, char *message) +diff -ru h5py-2.10.0.orig/h5py/h5p.pyx h5py-2.10.0/h5py/h5p.pyx +--- h5py-2.10.0.orig/h5py/h5p.pyx 2019-09-06 23:29:33.000000000 +0200 ++++ h5py-2.10.0/h5py/h5p.pyx 2020-05-25 19:33:24.000000000 +0200 +@@ -17,6 +17,7 @@ + from cpython.buffer cimport PyObject_CheckBuffer, \ + PyObject_GetBuffer, PyBuffer_Release, \ + PyBUF_SIMPLE ++from cpython.long cimport PyLong_AsVoidPtr + + from utils cimport require_tuple, convert_dims, convert_tuple, \ + emalloc, efree, \ +@@ -1161,7 +1162,7 @@ + + IF MPI: + @with_phil +- def set_fapl_mpio(self, Comm comm not None, Info info not None): ++ def set_fapl_mpio(self, comm, info): + """ (Comm comm, Info info) + + Set MPI-I/O Parallel HDF5 driver. +@@ -1169,7 +1170,12 @@ + Comm: An mpi4py.MPI.Comm instance + Info: An mpi4py.MPI.Info instance + """ +- H5Pset_fapl_mpio(self.id, comm.ob_mpi, info.ob_mpi) ++ from mpi4py.MPI import Comm, Info, _handleof ++ assert isinstance(comm, Comm) ++ assert isinstance(info, Info) ++ cdef Py_uintptr_t _comm = _handleof(comm) ++ cdef Py_uintptr_t _info = _handleof(info) ++ H5Pset_fapl_mpio(self.id, <MPI_Comm>_comm, <MPI_Info>_info) + + + @with_phil +@@ -1183,20 +1189,22 @@ + """ + cdef MPI_Comm comm + cdef MPI_Info info ++ from mpi4py.MPI import Comm, Info, _addressof + + H5Pget_fapl_mpio(self.id, &comm, &info) + pycomm = Comm() +- pyinfo = Info() +- MPI_Comm_dup(comm, &pycomm.ob_mpi) +- MPI_Info_dup(info, &pyinfo.ob_mpi) ++ MPI_Comm_dup(comm, <MPI_Comm *>PyLong_AsVoidPtr(_addressof(pycomm))) + MPI_Comm_free(&comm) ++ ++ pyinfo = Info() ++ MPI_Info_dup(info, <MPI_Info *>PyLong_AsVoidPtr(_addressof(pyinfo))) + MPI_Info_free(&info) + + return (pycomm, pyinfo) + + + @with_phil +- def set_fapl_mpiposix(self, Comm comm not None, bint use_gpfs_hints=0): ++ def set_fapl_mpiposix(self, comm, bint use_gpfs_hints=0): + """ Obsolete. + """ + raise RuntimeError("MPI-POSIX driver is broken; removed in h5py 2.3.1") diff --git a/Golden_Repo/t/TensorFlow/scipy-1.4.1-fix-pthread.patch b/Golden_Repo/t/TensorFlow/scipy-1.4.1-fix-pthread.patch new file mode 100644 index 0000000000000000000000000000000000000000..d399b2ba41265152cd2cf49902a187c45b0612d0 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/scipy-1.4.1-fix-pthread.patch @@ -0,0 +1,39 @@ +From https://github.com/scipy/scipy/pull/11324 +Author: Peter Bell <peterbell10@live.co.uk> +diff --git a/scipy/fft/_pocketfft/setup.py b/scipy/fft/_pocketfft/setup.py +index a4411bdedb1..493387d9719 100644 +--- a/scipy/fft/_pocketfft/setup.py ++++ b/scipy/fft/_pocketfft/setup.py +@@ -5,20 +5,28 @@ def pre_build_hook(build_ext, ext): + cc = build_ext._cxx_compiler + args = ext.extra_compile_args + +- std_flag = get_cxx_std_flag(build_ext._cxx_compiler) ++ std_flag = get_cxx_std_flag(cc) + if std_flag is not None: + args.append(std_flag) + + if cc.compiler_type == 'msvc': + args.append('/EHsc') + else: +- try_add_flag(args, cc, '-fvisibility=hidden') +- ++ # Use pthreads if available + has_pthreads = try_compile(cc, code='#include <pthread.h>\n' + 'int main(int argc, char **argv) {}') + if has_pthreads: + ext.define_macros.append(('POCKETFFT_PTHREADS', None)) +- ++ if has_flag(cc, '-pthread'): ++ args.append('-pthread') ++ ext.extra_link_args.append('-pthread') ++ else: ++ raise RuntimeError("Build failed: System has pthreads header " ++ "but could not compile with -pthread option") ++ ++ # Don't export library symbols ++ try_add_flag(args, cc, '-fvisibility=hidden') ++ # Set min macOS version + min_macos_flag = '-mmacosx-version-min=10.9' + import sys + if sys.platform == 'darwin' and has_flag(cc, min_macos_flag): diff --git a/Golden_Repo/t/TensorFlow/tensorboard-2.6.0-jupyter.patch b/Golden_Repo/t/TensorFlow/tensorboard-2.6.0-jupyter.patch new file mode 100644 index 0000000000000000000000000000000000000000..29be79e99025e6cbfd461724442530a263b06889 --- /dev/null +++ b/Golden_Repo/t/TensorFlow/tensorboard-2.6.0-jupyter.patch @@ -0,0 +1,93 @@ +--- tensorboard/tensorboard-2.6.0/tensorboard/notebook.py.orig 2022-04-04 15:13:24.242666542 +0200 ++++ tensorboard/tensorboard-2.6.0/tensorboard/notebook.py 2022-04-04 15:22:16.791830780 +0200 +@@ -34,6 +34,7 @@ + # details). + _CONTEXT_COLAB = "_CONTEXT_COLAB" + _CONTEXT_IPYTHON = "_CONTEXT_IPYTHON" ++_CONTEXT_JUPYTERHUB = "_CONTEXT_JUPYTERHUB" + _CONTEXT_NONE = "_CONTEXT_NONE" + + +@@ -70,11 +71,27 @@ + else: + ipython = IPython.get_ipython() + if ipython is not None and ipython.has_trait("kernel"): ++ if os.environ.get("JUPYTERHUB_SERVICE_PREFIX") is not None: ++ return _CONTEXT_JUPYTERHUB + return _CONTEXT_IPYTHON + + # Otherwise, we're not in a known notebook context. + return _CONTEXT_NONE + ++def _prefix_jupyterhub(port): ++ prefix = os.path.join(os.environ["JUPYTERHUB_SERVICE_PREFIX"], 'proxy/absolute') ++ return "%s/%d/" % (prefix, port) ++ ++ ++def _patch_args_jupyterhub(parsed_args): ++ if "--port" in parsed_args: ++ arg_idx = parsed_args.index("--port") ++ port = int(parsed_args[arg_idx+1]) ++ else: ++ port = 6006 ++ parsed_args += ["--port", str(port)] ++ return parsed_args + ["--path_prefix", _prefix_jupyterhub(port)] ++ + + def load_ipython_extension(ipython): + """Deprecated: use `%load_ext tensorboard` instead. +@@ -149,6 +166,9 @@ + handle.update(IPython.display.Pretty(message)) + + parsed_args = shlex.split(args_string, comments=True, posix=True) ++ if context == _CONTEXT_JUPYTERHUB: ++ parsed_args = _patch_args_jupyterhub(parsed_args) ++ + start_result = manager.start(parsed_args) + + if isinstance(start_result, manager.StartLaunched): +@@ -305,6 +325,7 @@ + fn = { + _CONTEXT_COLAB: _display_colab, + _CONTEXT_IPYTHON: _display_ipython, ++ _CONTEXT_JUPYTERHUB: _display_jupyterhub, + _CONTEXT_NONE: _display_cli, + }[_get_context()] + return fn(port=port, height=height, display_handle=display_handle) +@@ -401,6 +422,36 @@ + for (k, v) in replacements: + shell = shell.replace(k, v) + iframe = IPython.display.HTML(shell) ++ if display_handle: ++ display_handle.update(iframe) ++ else: ++ IPython.display.display(iframe) ++ ++ ++def _display_jupyterhub(port, height, display_handle): ++ import IPython.display ++ ++ frame_id = "tensorboard-frame-{:08x}".format(random.getrandbits(64)) ++ shell = """ ++ <iframe id="%HTML_ID%" width="100%" height="%HEIGHT%" frameborder="0"> ++ </iframe> ++ <script> ++ (function() { ++ const frame = document.getElementById(%JSON_ID%); ++ const url = new URL("%PREFIX%", window.location); ++ frame.src = url; ++ })(); ++ </script> ++ """ ++ replacements = [ ++ ("%HTML_ID%", html.escape(frame_id, quote=True)), ++ ("%JSON_ID%", json.dumps(frame_id)), ++ ("%PREFIX%", _prefix_jupyterhub(port)), ++ ("%HEIGHT%", "%d" % height), ++ ] ++ for (k, v) in replacements: ++ shell = shell.replace(k, v) ++ iframe = IPython.display.HTML(shell) + if display_handle: + display_handle.update(iframe) + else: diff --git a/Golden_Repo/t/TotalView/TotalView-2021-4.10-GCCcore-11.2.0.eb b/Golden_Repo/t/TotalView/TotalView-2021.4.10-GCCcore-11.2.0.eb similarity index 96% rename from Golden_Repo/t/TotalView/TotalView-2021-4.10-GCCcore-11.2.0.eb rename to Golden_Repo/t/TotalView/TotalView-2021.4.10-GCCcore-11.2.0.eb index be5d4ff83e070bb4664bbb414c49f854583b5239..d29655489ecde1d55b976e64a1def49e188558a2 100644 --- a/Golden_Repo/t/TotalView/TotalView-2021-4.10-GCCcore-11.2.0.eb +++ b/Golden_Repo/t/TotalView/TotalView-2021.4.10-GCCcore-11.2.0.eb @@ -52,8 +52,10 @@ sources = [ '%(namelower)s.%(version)s-doc.tar', ] checksums = [ - '7e5509b2cfb219100b0032304bdad7d422657c0736c386ba64bdb1bf11d10a1d', # totalview_2021.4.10_linux_x86-64.tar - 'c476288ebe1964e0803c7316975c71a957e52f45187b135bc1dc3b65491bb61d', # totalview.2021.4.10-doc.tar + # totalview_2021.4.10_linux_x86-64.tar + '7e5509b2cfb219100b0032304bdad7d422657c0736c386ba64bdb1bf11d10a1d', + # totalview.2021.4.10-doc.tar + 'c476288ebe1964e0803c7316975c71a957e52f45187b135bc1dc3b65491bb61d', ] sanity_check_paths = { diff --git a/Golden_Repo/t/torchvision/torchvision-0.12.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb b/Golden_Repo/t/torchvision/torchvision-0.12.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb new file mode 100644 index 0000000000000000000000000000000000000000..4d15d9bec076613067e8e6694d30a0609376ded9 --- /dev/null +++ b/Golden_Repo/t/torchvision/torchvision-0.12.0-gcccoremkl-11.2.0-2021.4.0-CUDA-11.5.eb @@ -0,0 +1,23 @@ +name = 'torchvision' +version = '0.12.0' +versionsuffix = '-CUDA-%(cudaver)s' + +homepage = 'https://github.com/pytorch/vision' +description = " Datasets, Transforms and Models specific to Computer Vision" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} + +source_urls = ['https://github.com/pytorch/vision/archive'] +sources = ['v%(version)s.tar.gz'] +checksums = ['99e6d3d304184895ff4f6152e2d2ec1cbec89b3e057d9c940ae0125546b04e91'] + +builddependencies = [('CMake', '3.21.1')] + +dependencies = [ + ('CUDA', '11.5', '', True), + ('Python', '3.9.6'), + ('Pillow-SIMD', '9.0.1'), + ('PyTorch', '1.11', '-CUDA-%(cudaver)s'), +] + +moduleclass = 'vis' diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb b/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb index 79cc3e6d1f10fe152b7f03df83019b8fdf25940f..10736b3933bac123080c49c1740d8de90fbf2362 100644 --- a/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb +++ b/Golden_Repo/u/UCX-settings/UCX-settings-DC-CUDA.eb @@ -4,7 +4,10 @@ name = 'UCX-settings' version = 'DC-CUDA' homepage = '' -description = 'This module sets UCX to use DC as the transport layer, together with the CUWA-aware transports.' +description = ''' +This module sets UCX to use DC as the transport layer, together with the CUWA-aware transports. +The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails. +''' site_contacts = 'd.alvarez@fz-juelich.de' @@ -15,6 +18,10 @@ source_urls = [] sources = [] modextravars = { 'UCX_TLS': 'dc_x,self,sm,cuda_ipc,gdr_copy,cuda_copy', + # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases. + # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet + # fabric and result in a slow down + 'UCX_MAX_RNDV_RAILS': '1', } moduleclass = 'system' diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb b/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb index 3c8fb051486c0b1d3c6b62e3d980f6b9bdfcefeb..b90e9b8d26c21fed3b94949589acd2567cc0fc65 100644 --- a/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb +++ b/Golden_Repo/u/UCX-settings/UCX-settings-DC.eb @@ -4,7 +4,10 @@ name = 'UCX-settings' version = 'DC' homepage = '' -description = 'This module sets UCX to use DC as the transport layer.' +description = ''' +This module sets UCX to use DC as the transport layer. +The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails. +''' site_contacts = 'd.alvarez@fz-juelich.de' @@ -15,6 +18,10 @@ source_urls = [] sources = [] modextravars = { 'UCX_TLS': 'dc_x,self,sm', + # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases. + # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet + # fabric and result in a slow down + 'UCX_MAX_RNDV_RAILS': '1', } moduleclass = 'system' diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb b/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb index 09b72c4dcccab0b121c9168df2edadedac1bedaf..ffeddf594c2951c303e2f1b4fc3b4d25c7e1c7c3 100644 --- a/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb +++ b/Golden_Repo/u/UCX-settings/UCX-settings-RC-CUDA.eb @@ -4,7 +4,10 @@ name = 'UCX-settings' version = 'RC-CUDA' homepage = '' -description = 'This module sets UCX to use RC as the transport layer, together with the CUWA-aware transports.' +description = ''' +This module sets UCX to use RC as the transport layer, together with the CUWA-aware transports. +The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails. +''' site_contacts = 'd.alvarez@fz-juelich.de' @@ -15,6 +18,10 @@ source_urls = [] sources = [] modextravars = { 'UCX_TLS': 'rc_x,self,sm,cuda_ipc,gdr_copy,cuda_copy', + # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases. + # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet + # fabric and result in a slow down + 'UCX_MAX_RNDV_RAILS': '1', } moduleclass = 'system' diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb b/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb index 8ff031dcc477c29b9a875972707f454d039f265f..b9ca3f7907ea480f5c9c9a1a7514f745df2b4367 100644 --- a/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb +++ b/Golden_Repo/u/UCX-settings/UCX-settings-RC.eb @@ -4,7 +4,10 @@ name = 'UCX-settings' version = 'RC' homepage = '' -description = 'This module sets UCX to use RC as the transport layer.' +description = ''' +This module sets UCX to use RC as the transport layer. +The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails. +''' site_contacts = 'd.alvarez@fz-juelich.de' @@ -15,6 +18,10 @@ source_urls = [] sources = [] modextravars = { 'UCX_TLS': 'rc_x,self,sm', + # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases. + # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet + # fabric and result in a slow down + 'UCX_MAX_RNDV_RAILS': '1', } moduleclass = 'system' diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb b/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb index 565dcf982e25928540f7a0d7e71b502d99960083..b5d411e1011daaa0f0b1024c5fe8a8e46dcd4851 100644 --- a/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb +++ b/Golden_Repo/u/UCX-settings/UCX-settings-UD-CUDA.eb @@ -4,7 +4,10 @@ name = 'UCX-settings' version = 'UD-CUDA' homepage = '' -description = 'This module sets UCX to use UD as the transport layer, together with the CUWA-aware transports.' +description = ''' +This module sets UCX to use UD as the transport layer, together with the CUWA-aware transports. +The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails. +''' site_contacts = 'd.alvarez@fz-juelich.de' @@ -15,6 +18,10 @@ source_urls = [] sources = [] modextravars = { 'UCX_TLS': 'ud_x,self,sm,cuda_ipc,gdr_copy,cuda_copy', + # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases. + # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet + # fabric and result in a slow down + 'UCX_MAX_RNDV_RAILS': '1', } moduleclass = 'system' diff --git a/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb b/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb index 7c4c85549c3ed853e78d0c3b0209a9ecf5eb6577..0d0e25b211d138cadc2f02b5ddf311070ff9952d 100644 --- a/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb +++ b/Golden_Repo/u/UCX-settings/UCX-settings-UD.eb @@ -4,7 +4,10 @@ name = 'UCX-settings' version = 'UD' homepage = '' -description = 'This module sets UCX to use UD as the transport layer.' +description = ''' +This module sets UCX to use UD as the transport layer. +The maximum number of rails is limited to 1 to avoid pitfalls of blindly using multiple rails. +''' site_contacts = 'd.alvarez@fz-juelich.de' @@ -15,6 +18,10 @@ source_urls = [] sources = [] modextravars = { 'UCX_TLS': 'ud_x,self,sm', + # Since most users do not share HCAs for a single process, it does not make sense to enable this in most cases. + # It actually has the side effect of using Ethernet and IB ports on JUSUF, which end up saturating the ethernet + # fabric and result in a slow down + 'UCX_MAX_RNDV_RAILS': '1', } moduleclass = 'system' diff --git a/Golden_Repo/u/UCX/UCX-1.12.1.eb b/Golden_Repo/u/UCX/UCX-1.12.1.eb new file mode 100644 index 0000000000000000000000000000000000000000..70f33c6b2711e42b65c10aec4ddfa725696fbcad --- /dev/null +++ b/Golden_Repo/u/UCX/UCX-1.12.1.eb @@ -0,0 +1,76 @@ +easyblock = 'ConfigureMake' + +name = 'UCX' +version = '1.12.1' + +homepage = 'https://www.openucx.org/' +description = """Unified Communication X +An open-source production grade communication framework for data centric +and high-performance applications +""" + +toolchain = SYSTEM +toolchainopts = {'pic': True} + +source_urls = ['https://github.com/openucx/ucx/releases/download/v%(version)s'] +sources = ['%(namelower)s-%(version)s.tar.gz'] +checksums = ['40b447c8e7da94a253f2828001b2d76021eb4ad39647107d433d62d61e18ae8e'] + +builddependencies = [ + ('binutils', '2.37'), + ('Autotools', '20210726'), + ('pkg-config', '0.29.2'), +] + +osdependencies = [OS_PKG_IBVERBS_DEV] + +dependencies = [ + ('zlib', '1.2.11'), + ('numactl', '2.0.14'), + ('CUDA', '11.5'), +] + +configopts = '--with-verbs ' # Build OpenFabrics support +configopts += '--without-java ' +configopts += '--disable-doxygen-doc ' + +# Enable machine-specific optimizations, default: NO +configopts += '--enable-optimizations ' +# configopts += '--enable-tuning ' # Enable parameter tuning in run-time, default: NO +# Enable thread support in UCP and UCT, default: NO +configopts += '--enable-mt ' +configopts += '--disable-debug ' +configopts += '--disable-logging ' +configopts += '--disable-assertions ' +configopts += '--disable-params-check ' +configopts += '--disable-dependency-tracking ' +configopts += '--with-cuda=$EBROOTCUDA ' + +configopts += '--enable-cma ' # Enable Cross Memory Attach + +# Compile with IB Reliable Connection support +configopts += '--with-rc ' +# Compile with IB Unreliable Datagram support +configopts += '--with-ud ' +# Compile with IB Dynamic Connection support +configopts += '--with-dc ' +configopts += '--with-mlx5-dv ' # Compile with mlx5 Direct Verbs support +configopts += '--with-ib-hw-tm ' # Compile with IB Tag Matching support +configopts += '--with-dm ' # Compile with Device Memory support + +configopts += '--with-avx ' # Compile with AVX +configopts += '--with-gdrcopy ' # Compile with GDRCopy + +# Compile without IB Connection Manager support +configopts += '--without-cm ' + +buildopts = 'V=1' + +sanity_check_paths = { + 'files': ['bin/ucx_info', 'bin/ucx_perftest', 'bin/ucx_read_profile'], + 'dirs': ['include', 'lib', 'share'] +} + +sanity_check_commands = ["ucx_info -d"] + +moduleclass = 'system' diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gompi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gompi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..18aac1c35e2cd0fb37b817a2382e9b76e3fc0b59 --- /dev/null +++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gompi-2021b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'Valgrind' +version = '3.18.1' + +homepage = 'https://valgrind.org' +description = "Valgrind: Debugging and profiling tools" + +toolchain = {'name': 'gompi', 'version': '2021b'} + +source_urls = [ + 'https://sourceware.org/pub/valgrind/', + 'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/', +] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5'] + +configopts = ' --with-mpicc="$MPICC"' + +local_binaries = [ + 'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff', + 'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb' +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in local_binaries] + + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'debugger' diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gpsmpi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gpsmpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..787b6fefd1a7404e2349385f842e6bd6269deaf6 --- /dev/null +++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-gpsmpi-2021b.eb @@ -0,0 +1,31 @@ +easyblock = 'ConfigureMake' + +name = 'Valgrind' +version = '3.18.1' + +homepage = 'https://valgrind.org' +description = "Valgrind: Debugging and profiling tools" + +toolchain = {'name': 'gpsmpi', 'version': '2021b'} + +source_urls = [ + 'https://sourceware.org/pub/valgrind/', + 'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/', +] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5'] + +configopts = ' --with-mpicc="$MPICC"' + +local_binaries = [ + 'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff', + 'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb' +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in local_binaries] + + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'debugger' diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iimpi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iimpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..6d3cac194b54b296bf1ec8c4060c5b7041b24249 --- /dev/null +++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iimpi-2021b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'Valgrind' +version = '3.18.1' + +homepage = 'https://valgrind.org' +description = "Valgrind: Debugging and profiling tools" + +toolchain = {'name': 'iimpi', 'version': '2021b'} + +source_urls = [ + 'https://sourceware.org/pub/valgrind/', + 'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/', +] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5'] + +preconfigopts = 'unset CC CFLAGS &&' +configopts = ' --with-mpicc="$MPICC"' + +local_binaries = [ + 'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff', + 'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb' +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in local_binaries] + + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'debugger' diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iompi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iompi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..950a0366028510f5679c8c0a0606a8c12f3b7550 --- /dev/null +++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-iompi-2021b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'Valgrind' +version = '3.18.1' + +homepage = 'https://valgrind.org' +description = "Valgrind: Debugging and profiling tools" + +toolchain = {'name': 'iompi', 'version': '2021b'} + +source_urls = [ + 'https://sourceware.org/pub/valgrind/', + 'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/', +] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5'] + +preconfigopts = 'unset CC CFLAGS &&' +configopts = ' --with-mpicc="$MPICC"' + +local_binaries = [ + 'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff', + 'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb' +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in local_binaries] + + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'debugger' diff --git a/Golden_Repo/v/Valgrind/Valgrind-3.18.1-ipsmpi-2021b.eb b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-ipsmpi-2021b.eb new file mode 100644 index 0000000000000000000000000000000000000000..7eec2e97e087135c619ba53e4c67e8a42fa20668 --- /dev/null +++ b/Golden_Repo/v/Valgrind/Valgrind-3.18.1-ipsmpi-2021b.eb @@ -0,0 +1,32 @@ +easyblock = 'ConfigureMake' + +name = 'Valgrind' +version = '3.18.1' + +homepage = 'https://valgrind.org' +description = "Valgrind: Debugging and profiling tools" + +toolchain = {'name': 'ipsmpi', 'version': '2021b'} + +source_urls = [ + 'https://sourceware.org/pub/valgrind/', + 'https://www.mirrorservice.org/sites/sourceware.org/pub/valgrind/', +] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['00859aa13a772eddf7822225f4b46ee0d39afbe071d32778da4d99984081f7f5'] + +preconfigopts = 'unset CC CFLAGS &&' +configopts = ' --with-mpicc="$MPICC"' + +local_binaries = [ + 'callgrind_annotate', 'callgrind_control', 'cg_annotate', 'cg_diff', + 'cg_merge', 'ms_print', 'valgrind', 'valgrind-listener', 'vgdb' +] + +sanity_check_paths = { + 'files': ['bin/%s' % x for x in local_binaries] + + ['lib/valgrind/libmpiwrap-amd64-linux.%s' % SHLIB_EXT], + 'dirs': [] +} + +moduleclass = 'debugger' diff --git a/Golden_Repo/x/xpra/xpra-4.3.1-GCCcore-11.2.0.eb b/Golden_Repo/x/xpra/xpra-4.3.2-GCCcore-11.2.0.eb similarity index 75% rename from Golden_Repo/x/xpra/xpra-4.3.1-GCCcore-11.2.0.eb rename to Golden_Repo/x/xpra/xpra-4.3.2-GCCcore-11.2.0.eb index 3fea4dff61129f13e6273a4204571949bf08a5ec..0cf74cbfd0963da9018069ce60ceea41fc4c5c40 100644 --- a/Golden_Repo/x/xpra/xpra-4.3.1-GCCcore-11.2.0.eb +++ b/Golden_Repo/x/xpra/xpra-4.3.2-GCCcore-11.2.0.eb @@ -1,7 +1,7 @@ easyblock = 'Bundle' name = 'xpra' -version = '4.3.1' +version = '4.3.2' homepage = "http://www.xpra.org" description = """Xpra is an open-source multi-platform persistent remote display server and client @@ -27,12 +27,14 @@ dependencies = [ ('PyGObject', '3.42.0'), ('Pandoc', '2.16.1', '', SYSTEM), ('GTK+', '3.24.23'), + ('rencode', '1.0.5'), ('lz4', '1.9.3'), ('yuicompressor', '2.4.8'), ('x264', '20210613'), ('x265', '3.4'), ('libvpx', '1.11.0'), ('FFmpeg', '4.4.1'), + ('GStreamer', '1.18.6'), ('libwebp', '1.2.0'), ('libpng', '1.6.37'), ('libspng', '0.7.1'), @@ -80,13 +82,23 @@ exts_list = [ ('checksums', [('sha256', '99392b676c77b5795b86b7d75274db33fe754fd1e06fb3d58b167c797dc47f0c')]), ('modulename', 'uinput'), ])), - ('xpra', '4.3.1', dict(list(local_common_opts.items()) + [ + ('ifaddr', '0.1.7', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '1f9e8a6ca6f16db5a37d3356f07b6e52344f6f9f7e806d618537731669eb1a94')]), + ])), + ('zeroconf', '0.38.4', dict(list(local_common_opts.items()) + [ + ('checksums', [('sha256', '080c540ea4b8b9defa9f3ac05823c1725ea2c8aacda917bfc0193f6758b95aeb')]), + ])), + ('xpra', '4.3.2', dict(list(local_common_opts.items()) + [ ('source_urls', ['https://github.com/Xpra-org/%(name)s/archive/']), ('source_tmpl', 'v%(version)s.tar.gz'), - ('patches', ['xpra-4.0.4-use_Xorg_on_PATH_first.patch']), + ('patches', [ + 'xpra-4.0.4-use_Xorg_on_PATH_first.patch', + 'xpra-iconsearch-XDG_DATA_DIRS.patch', + ]), ('checksums', [ - ('sha256', '1b90f68cc32a0b51d8bf09c92191b5c8b70ed98f0e9455c49e8a25d141de3660'), + ('sha256', '1e548b8d20c243fba40692abb0aa2759e3bd3f2d3b6b51a160f82746cdf1d782'), ('sha256', '83053938421de4dfd4ff8cd5430414180e9f33d5c59b4f1c1428095db6b1fa71'), + ('sha256', '7bb677302308dacdc55f9a862b6eee43f0a8d2b4524a8dec6d80bcdf3982d6af'), ]), ('use_pip', False), ('buildopts', '--without-strict --with-nvenc --with-nvjpeg --with-Xdummy'), @@ -95,7 +107,11 @@ exts_list = [ ('xpra-html5', '4.5.2', dict(list(local_common_opts.items()) + [ ('source_urls', ['https://github.com/Xpra-org/%(name)s/archive/']), ('source_tmpl', 'v%(version)s.tar.gz'), - ('checksums', [('sha256', '7f4ccea864fdfb8d6c71a77100fcb2ad07af0773eaafc528ec19ff8187d9bfdb')]), + ('patches', ['xprahtml-4.5.2-encryptionfix.patch']), + ('checksums', [ + ('sha256', '7f4ccea864fdfb8d6c71a77100fcb2ad07af0773eaafc528ec19ff8187d9bfdb'), + ('sha256', 'be0b430f7e6970eb35912c5c2cc7fb9f2073f94485c12776d06752cf8c0f6023'), + ]), ('use_pip', False), ('skipsteps', ['configure', 'build', 'install']), # install in postinstallcmds ('modulename', 'xpra'), @@ -109,6 +125,13 @@ postinstallcmds = [ './setup.py install %(installdir)s/share/xpra/www && ' 'popd' ), + # set specific configurations + ( + # server config + 'touch %(installdir)s/etc/xpra/server.env && ' + "sed -i 's!^source =.*!source = %(installdir)s/etc/xpra/server.env!' " + " %(installdir)s/etc/xpra/conf.d/60_server.conf" + ), # make Xpra randomly choose a GPU for acceleration if present 'mv %(installdir)s/bin/xpra %(installdir)s/bin/xpra.orig', 'head -1 %(installdir)s/bin/xpra.orig > %(installdir)s/bin/xpra', @@ -130,8 +153,12 @@ postinstallcmds = [ 'EOF' ), 'tail -n +2 %(installdir)s/bin/xpra.orig >> %(installdir)s/bin/xpra', + 'chmod +x %(installdir)s/bin/xpra', ] +modextravars = { + 'XPRA_SYSTEM_CONF_DIRS': '%(installdir)s/etc/xpra', +} modextrapaths = { 'PYTHONPATH': ['lib/python%(pyshortver)s/site-packages'], } diff --git a/Golden_Repo/x/xpra/xpra-iconsearch-XDG_DATA_DIRS.patch b/Golden_Repo/x/xpra/xpra-iconsearch-XDG_DATA_DIRS.patch new file mode 100644 index 0000000000000000000000000000000000000000..f5afb0bbd1c9d32b75e92354286d7a87dd04343d --- /dev/null +++ b/Golden_Repo/x/xpra/xpra-iconsearch-XDG_DATA_DIRS.patch @@ -0,0 +1,23 @@ +diff -Naur xpra.orig/xpra/platform/xposix/menu_helper.py xpra/xpra/platform/xposix/menu_helper.py +--- a/xpra.orig/xpra/platform/xposix/menu_helper.py 2022-03-30 23:59:37.274275428 +0200 ++++ a/xpra/xpra/platform/xposix/menu_helper.py 2022-03-31 00:06:49.279245408 +0200 +@@ -177,8 +177,9 @@ + def find_pixmap_icon(*names): + if not LOAD_FROM_PIXMAPS: + return None ++ pixmaps_dirs = [d + '/icons' for d in os.environ.get("XDG_DATA_DIRS").split(":")] + pixmaps_dir = "%s/share/pixmaps" % sys.prefix +- pixmaps_dirs = (pixmaps_dir, os.path.join(pixmaps_dir, "comps")) ++ pixmaps_dirs += (pixmaps_dir, os.path.join(pixmaps_dir, "comps")) + for d in pixmaps_dirs: + if not os.path.exists(d) or not os.path.isdir(d): + return None +@@ -411,6 +412,8 @@ + from xdg.Menu import MenuEntry + entries = {} + for d in LOAD_APPLICATIONS: ++ if not os.path.exists(d): ++ continue + for f in os.listdir(d): + if not f.endswith(".desktop"): + continue diff --git a/Golden_Repo/x/xpra/xprahtml-4.5.2-encryptionfix.patch b/Golden_Repo/x/xpra/xprahtml-4.5.2-encryptionfix.patch new file mode 100644 index 0000000000000000000000000000000000000000..40ec1ed1dad2ef5d34d422336ff42e888fce423b --- /dev/null +++ b/Golden_Repo/x/xpra/xprahtml-4.5.2-encryptionfix.patch @@ -0,0 +1,13 @@ +--- a/html5/js/Protocol.js.orig 2022-03-28 12:59:40.198667996 +0200 ++++ b/html5/js/Protocol.js 2022-03-28 13:02:38.099943598 +0200 +@@ -631,6 +631,10 @@ + throw "unsupported encryption specified: '"+cipher+"'"; + } + const key_salt = caps["cipher.key_salt"]; ++ let key_salt = caps["cipher.key_salt"]; ++ if (typeof key_salt !== 'string') { ++ key_salt = String.fromCharCode.apply(null, key_salt); ++ } + const iterations = caps["cipher.key_stretch_iterations"]; + if (iterations<0) { + throw "invalid number of iterations: "+iterations; diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-GCC-11.2.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-GCC-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..5c624b73d0e0d3a81b3610b3e9c9a5ea36e0f73d --- /dev/null +++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-GCC-11.2.0.eb @@ -0,0 +1,62 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '4.1.1' + +homepage = 'https://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-3 implementation.""" + +toolchain = {'name': 'GCC', 'version': '11.2.0'} +toolchainopts = {'pic': True} + +source_urls = [ + 'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['e24f7a778bd11a71ad0c14587a7f5b00e68a71aa5623e2157bafee3d44c07cda'] + +osdependencies = [ + # needed for --with-verbs + ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'), + # needed for --with-pmix + ('pmix-devel'), +] + +builddependencies = [ + ('Autotools', '20210726'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('zlib', '1.2.11'), + ('hwloc', '2.5.0'), + ('UCX', '1.11.2', '', SYSTEM), + ('CUDA', '11.5', '', SYSTEM), + ('libevent', '2.1.12'), +] + +configopts = '--enable-shared ' +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--with-ucx=$EBROOTUCX ' +configopts += '--with-verbs ' +configopts += '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--without-orte ' +configopts += '--without-psm2 ' +configopts += '--disable-oshmem ' +configopts += '--with-cuda=$EBROOTCUDA ' +# No IME in DEEP +# configopts += '--with-ime=/opt/ddn/ime ' +# configopts += '--with-gpfs ' + +# to enable SLURM integration (site-specific) +configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte' + +local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] + + ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", + "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-intel-compilers-2021.4.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-intel-compilers-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..ce0fe23c8128a77b152ae77d8fc43eac86266eb2 --- /dev/null +++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.1-intel-compilers-2021.4.0.eb @@ -0,0 +1,62 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '4.1.1' + +homepage = 'https://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-3 implementation.""" + +toolchain = {'name': 'intel-compilers', 'version': '2021.4.0'} +toolchainopts = {'pic': True} + +source_urls = [ + 'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['e24f7a778bd11a71ad0c14587a7f5b00e68a71aa5623e2157bafee3d44c07cda'] + +osdependencies = [ + # needed for --with-verbs + ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'), + # needed for --with-pmix + ('pmix-devel'), +] + +builddependencies = [ + ('Autotools', '20210726'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('zlib', '1.2.11'), + ('hwloc', '2.5.0'), + ('UCX', '1.11.2', '', SYSTEM), + ('CUDA', '11.5', '', SYSTEM), + ('libevent', '2.1.12'), +] + +configopts = '--enable-shared ' +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--with-ucx=$EBROOTUCX ' +configopts += '--with-verbs ' +configopts += '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--without-orte ' +configopts += '--without-psm2 ' +configopts += '--disable-oshmem ' +configopts += '--with-cuda=$EBROOTCUDA ' +# No IME in DEEP +# configopts += '--with-ime=/opt/ddn/ime ' +# configopts += '--with-gpfs ' + +# to enable SLURM integration (site-specific) +configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte' + +local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] + + ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", + "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-GCC-11.2.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-GCC-11.2.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..3b582b240f39375ab400c03b9ac8c6509ce9f608 --- /dev/null +++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-GCC-11.2.0.eb @@ -0,0 +1,62 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '4.1.2' + +homepage = 'https://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-3 implementation.""" + +toolchain = {'name': 'GCC', 'version': '11.2.0'} +toolchainopts = {'pic': True} + +source_urls = [ + 'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['9b78c7cf7fc32131c5cf43dd2ab9740149d9d87cadb2e2189f02685749a6b527'] + +osdependencies = [ + # needed for --with-verbs + ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'), + # needed for --with-pmix + ('pmix-devel'), +] + +builddependencies = [ + ('Autotools', '20210726'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('zlib', '1.2.11'), + ('hwloc', '2.5.0'), + ('UCX', '1.11.2', '', SYSTEM), + ('CUDA', '11.5', '', SYSTEM), + ('libevent', '2.1.12'), +] + +configopts = '--enable-shared ' +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--with-ucx=$EBROOTUCX ' +configopts += '--with-verbs ' +configopts += '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--without-orte ' +configopts += '--without-psm2 ' +configopts += '--disable-oshmem ' +configopts += '--with-cuda=$EBROOTCUDA ' +# No IME in DEEP +# configopts += '--with-ime=/opt/ddn/ime ' +# configopts += '--with-gpfs ' + +# to enable SLURM integration (site-specific) +configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte' + +local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] + + ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", + "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-NVHPC-22.1.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-NVHPC-22.1.eb new file mode 100644 index 0000000000000000000000000000000000000000..6a29134b5f34dd3cd064080e6006f6960b1d7bc6 --- /dev/null +++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-NVHPC-22.1.eb @@ -0,0 +1,62 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '4.1.2' + +homepage = 'https://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-3 implementation.""" + +toolchain = {'name': 'NVHPC', 'version': '22.1'} +toolchainopts = {'pic': True} + +source_urls = [ + 'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['9b78c7cf7fc32131c5cf43dd2ab9740149d9d87cadb2e2189f02685749a6b527'] + +osdependencies = [ + # needed for --with-verbs + ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'), + # needed for --with-pmix + ('pmix-devel'), +] + +builddependencies = [ + ('Autotools', '20210726', '', SYSTEM), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('zlib', '1.2.11'), + ('hwloc', '2.5.0'), + ('UCX', '1.11.2', '', SYSTEM), + ('CUDA', '11.5', '', SYSTEM), + ('libevent', '2.1.12'), +] + +configopts = '--enable-shared ' +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--with-ucx=$EBROOTUCX ' +configopts += '--with-verbs ' +configopts += '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--without-orte ' +configopts += '--without-psm2 ' +configopts += '--disable-oshmem ' +configopts += '--with-cuda=$EBROOTCUDA ' +# No IME in DEEP +# configopts += '--with-ime=/opt/ddn/ime ' +# configopts += '--with-gpfs ' + +# to enable SLURM integration (site-specific) +configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte' + +local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] + + ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", + "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' diff --git a/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-intel-compilers-2021.4.0.eb b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-intel-compilers-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..5f0dc64461efcb302a7ad8645559223112d51396 --- /dev/null +++ b/Overlays/deep_overlay/o/OpenMPI/OpenMPI-4.1.2-intel-compilers-2021.4.0.eb @@ -0,0 +1,62 @@ +easyblock = 'ConfigureMake' + +name = 'OpenMPI' +version = '4.1.2' + +homepage = 'https://www.open-mpi.org/' +description = """The Open MPI Project is an open source MPI-3 implementation.""" + +toolchain = {'name': 'intel-compilers', 'version': '2021.4.0'} +toolchainopts = {'pic': True} + +source_urls = [ + 'https://www.open-mpi.org/software/ompi/v%(version_major_minor)s/downloads'] +sources = [SOURCELOWER_TAR_BZ2] +checksums = ['9b78c7cf7fc32131c5cf43dd2ab9740149d9d87cadb2e2189f02685749a6b527'] + +osdependencies = [ + # needed for --with-verbs + ('libibverbs-dev', 'libibverbs-devel', 'rdma-core-devel'), + # needed for --with-pmix + ('pmix-devel'), +] + +builddependencies = [ + ('Autotools', '20210726'), + ('pkg-config', '0.29.2'), +] + +dependencies = [ + ('zlib', '1.2.11'), + ('hwloc', '2.5.0'), + ('UCX', '1.11.2', '', SYSTEM), + ('CUDA', '11.5', '', SYSTEM), + ('libevent', '2.1.12'), +] + +configopts = '--enable-shared ' +configopts += '--with-hwloc=$EBROOTHWLOC ' # hwloc support +configopts += '--with-ucx=$EBROOTUCX ' +configopts += '--with-verbs ' +configopts += '--with-libevent=$EBROOTLIBEVENT ' +configopts += '--without-orte ' +configopts += '--without-psm2 ' +configopts += '--disable-oshmem ' +configopts += '--with-cuda=$EBROOTCUDA ' +# No IME in DEEP +# configopts += '--with-ime=/opt/ddn/ime ' +# configopts += '--with-gpfs ' + +# to enable SLURM integration (site-specific) +configopts += '--with-slurm --with-pmix=external --with-libevent=external --with-ompi-pmix-rte' + +local_libs = ["mpi_mpifh", "mpi", "ompitrace", "open-pal", "open-rte"] +sanity_check_paths = { + 'files': ["bin/%s" % local_binfile for local_binfile in ["ompi_info", "opal_wrapper"]] + + ["lib/lib%s.%s" % (local_libfile, SHLIB_EXT) for local_libfile in local_libs] + + ["include/%s.h" % x for x in ["mpi-ext", "mpif-config", + "mpif", "mpi", "mpi_portable_platform"]], + 'dirs': [], +} + +moduleclass = 'mpi' diff --git a/Overlays/deep_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb b/Overlays/deep_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb new file mode 100644 index 0000000000000000000000000000000000000000..8a708fe116bc9b3c4af7d1f575164cd73e5d79cc --- /dev/null +++ b/Overlays/deep_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb @@ -0,0 +1,57 @@ +name = 'psmpi' +version = '5.5.0-1' +versionsuffix = '-mt' + +homepage = 'https://github.com/ParaStation/psmpi2' +description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation, +based on MPICH v3. It provides extra low level communication libraries and integration with +various batch systems for tighter process control. +""" + +toolchain = {'name': 'NVHPC', 'version': '22.1'} + +sources = [SOURCE_TAR_BZ2] +source_urls = ['https://github.com/ParaStation/psmpi/archive/'] +checksums = [ + # psmpi-5.5.0-1.tar.bz2 + 'c178bf618f139857c1bc191938677145cf4fdbec5b8d3afa2ca1de666c791b48', + '978eb3223c978477c40987f745c07fda26ccbad2f468616faf92f0d71b81a156', # psmpi_shebang.patch +] + +builddependencies = [ + # needed for autogen.sh on CentOS 7 + ('Autotools', '20210726'), + # Autoconf >2.69 is generating a buggy configure script, so take it down to the one that works + ('Autoconf', '2.69'), +] +dependencies = [ + ('pscom', '5.4-default', '', SYSTEM), + # needed due to the inclusion of hwloc + ('libxml2', '2.9.10'), + # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed + ('CUDA', '11.5', '', SYSTEM) +] + +patches = [ + 'psmpi_shebang.patch', + # We don't have IME in HDFML so we skip this + # 'psmpi-5.5.0-1_ime.patch' +] + +# We don't have IME in HDFML so we skip this +# mpich_opts = '--enable-static --with-file-system=ime+ufs --enable-romio' +# +# preconfigopts += 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && ' +# preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && ' +# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio' +# We disable gpfs support, since it seems to be problematic under some circumstances. One can disable it by setting +# ROMIO_FSTYPE_FORCE="ufs:", but then we loose IME support +mpich_opts = '--enable-static --with-file-system=ufs --enable-romio' + +preconfigopts = "./autogen.sh && " + +threaded = True + +cuda = True + +moduleclass = 'mpi' diff --git a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb new file mode 100644 index 0000000000000000000000000000000000000000..8a708fe116bc9b3c4af7d1f575164cd73e5d79cc --- /dev/null +++ b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-NVHPC-22.1-mt.eb @@ -0,0 +1,57 @@ +name = 'psmpi' +version = '5.5.0-1' +versionsuffix = '-mt' + +homepage = 'https://github.com/ParaStation/psmpi2' +description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation, +based on MPICH v3. It provides extra low level communication libraries and integration with +various batch systems for tighter process control. +""" + +toolchain = {'name': 'NVHPC', 'version': '22.1'} + +sources = [SOURCE_TAR_BZ2] +source_urls = ['https://github.com/ParaStation/psmpi/archive/'] +checksums = [ + # psmpi-5.5.0-1.tar.bz2 + 'c178bf618f139857c1bc191938677145cf4fdbec5b8d3afa2ca1de666c791b48', + '978eb3223c978477c40987f745c07fda26ccbad2f468616faf92f0d71b81a156', # psmpi_shebang.patch +] + +builddependencies = [ + # needed for autogen.sh on CentOS 7 + ('Autotools', '20210726'), + # Autoconf >2.69 is generating a buggy configure script, so take it down to the one that works + ('Autoconf', '2.69'), +] +dependencies = [ + ('pscom', '5.4-default', '', SYSTEM), + # needed due to the inclusion of hwloc + ('libxml2', '2.9.10'), + # Including CUDA here to trigger the hook to add the gpu property, and because it is actually needed + ('CUDA', '11.5', '', SYSTEM) +] + +patches = [ + 'psmpi_shebang.patch', + # We don't have IME in HDFML so we skip this + # 'psmpi-5.5.0-1_ime.patch' +] + +# We don't have IME in HDFML so we skip this +# mpich_opts = '--enable-static --with-file-system=ime+ufs --enable-romio' +# +# preconfigopts += 'export CFLAGS="-I/opt/ddn/ime/include $CFLAGS" && ' +# preconfigopts += 'export LDFLAGS="$LDFLAGS -L/opt/ddn/ime/lib -lim_client" && ' +# mpich_opts = '--enable-static --with-file-system=ime+ufs+gpfs --enable-romio' +# We disable gpfs support, since it seems to be problematic under some circumstances. One can disable it by setting +# ROMIO_FSTYPE_FORCE="ufs:", but then we loose IME support +mpich_opts = '--enable-static --with-file-system=ufs --enable-romio' + +preconfigopts = "./autogen.sh && " + +threaded = True + +cuda = True + +moduleclass = 'mpi' diff --git a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb index 42b37f8225fcc5f8d12dbd51a6439fba12c7d9a1..1235961b352d6923a78e94b9e771b6c9541fc474 100644 --- a/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb +++ b/Overlays/hdfml_overlay/p/psmpi/psmpi-5.5.0-1-intel-compilers-2021.4.0-mt.eb @@ -4,7 +4,7 @@ versionsuffix = '-mt' homepage = 'https://github.com/ParaStation/psmpi2' description = """ParaStation MPI is an open source high-performance MPI 3.0 implementation, -based on MPICH v3. It provides extra low level communication libraries and integration with +based on MPICH v3. It provides extra low level communication libraries and integration with various batch systems for tighter process control. """ diff --git a/Overlays/juwels_overlay/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb b/Overlays/juwels_overlay/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb new file mode 100644 index 0000000000000000000000000000000000000000..5f4b2522a9660bc5f44d35621c4529baf06a2fab --- /dev/null +++ b/Overlays/juwels_overlay/r/R/R-4.1.2-gcccoremkl-11.2.0-2021.4.0.eb @@ -0,0 +1,3198 @@ +name = 'R' +version = '4.1.2' + +homepage = 'https://www.r-project.org/' +description = """R is a free software environment for statistical computing + and graphics.""" + +toolchain = {'name': 'gcccoremkl', 'version': '11.2.0-2021.4.0'} + +source_urls = ['https://cloud.r-project.org/src/base/R-%(version_major)s'] +sources = [SOURCE_TAR_GZ] +patches = ['%(name)s-4.1.0_identify-flexiblas-in-configure.patch'] +checksums = [ + '2036225e9f7207d4ce097e54972aecdaa8b40d7d9911cd26491fac5a0fab38af', # R-4.1.2.tar.gz + '2c6720e2e144ae4fe00842daab0ebba72241080603e0ff1a6ca758738041b257', # R-4.1.0_identify-flexiblas-in-configure.patch +] + +builddependencies = [ + ('pkg-config', '0.29.2'), + ('XServer', '1.20.13'), +] + +dependencies = [ + ('Java', '15', '', SYSTEM), + ('X11', '20210802'), + ('OpenGL', '2021b'), + ('cairo', '1.16.0'), + ('libreadline', '8.1'), + ('ncurses', '6.2'), + ('bzip2', '1.0.8'), + ('XZ', '5.2.5'), + ('zlib', '1.2.11'), + ('SQLite', '3.36'), + ('PCRE2', '10.37'), + ('libpng', '1.6.37'), # for plotting in R + ('libjpeg-turbo', '2.1.1'), # for plottting in R + ('LibTIFF', '4.3.0'), + ('Tk', '8.6.11'), # for tcltk + ('cURL', '7.78.0'), # for RCurl + ('libxml2', '2.9.10'), # for XML + ('PROJ', '8.1.0'), # for rgdal + ('GMP', '6.2.1'), # for igraph + ('NLopt', '2.7.0'), # for nloptr + ('FFTW', '3.3.10', '-nompi'), # for fftw + ('libsndfile', '1.0.31'), # for seewave + ('ICU', '70.1'), # for rJava & gdsfmt + ('HDF5', '1.12.1', '-serial'), # for hdf5r + ('UDUNITS', '2.2.28'), # for units + ('GSL', '2.7'), # for RcppGSL + ('ImageMagick', '7.1.0-13'), # for animation + ('GLPK', '5.0'), # for Rglpk + ('netCDF', '4.8.1', '-serial'), # the ndf4 needs it + ('GEOS', '3.9.1'), # for rgeos + ('nodejs', '16.13.0'), # for V8 (required by rstan) + ('GDAL', '3.3.2'), # for sf + ('MPFR', '4.1.0'), # for Rmpfr + ('libgit2', '1.1.1'), + ('ZeroMQ', '4.3.4'), # for pbdZMQ needed by IRkernel + ('OpenSSL', '1.1', '', True), + ('texlive', '20200406'), +] + + +# Some R extensions (mclust, quantreg, waveslim for example) require the math library (-lm) to avoid undefined symbols. +# Adding it to FLIBS makes sure it is present when needed. +preconfigopts = 'export FLIBS="$FLIBS -lm" && ' + +configopts = "--with-pic --enable-threads --enable-R-shlib" +# some recommended packages may fail in a parallel build (e.g. Matrix), and +# we're installing them anyway below +configopts += " --with-recommended-packages=no" + +# specify that at least EasyBuild v3.5.0 is required, +# since we rely on the updated easyblock for R to configure correctly w.r.t. BLAS/LAPACK +easybuild_version = '3.5.0' + +exts_default_options = { + 'source_urls': [ + 'https://cran.r-project.org/src/contrib/Archive/%(name)s', # package archive + 'https://cran.r-project.org/src/contrib/', # current version of packages + 'https://cran.freestatistics.org/src/contrib', # mirror alternative for current packages + ], + 'source_tmpl': '%(name)s_%(version)s.tar.gz', +} + +# !! order of packages is important !! +# packages updated on 1st November 2021 +exts_list = [ + 'base', + 'compiler', + 'datasets', + 'graphics', + 'grDevices', + 'grid', + 'methods', + 'parallel', + 'splines', + 'stats', + 'stats4', + 'tcltk', + 'tools', + 'utils', + # ('Rmpi', '0.6-9.2', { + # 'checksums': ['358ac1af97402e676f209261a231f36a35e60f0301edf8ca53dac11af3c3bd1a'], + # }), + ('abind', '1.4-5', { + 'checksums': ['3a3ace5afbcb86e56889efcebf3bf5c3bb042a282ba7cc4412d450bb246a3f2c'], + }), + ('magic', '1.5-9', { + 'checksums': ['fa1d5ef2d39e880f262d31b77006a2a7e76ea38e306aae4356e682b90d6cd56a'], + }), + ('Rcpp', '1.0.7', { + 'checksums': ['15e5a4732216daed16263c79fb37017c2ada84a2d4e785e3b76445d0eba3dc1d'], + }), + ('RcppProgress', '0.4.2', { + 'checksums': ['b1624b21b7aeb1dafb30f092b2a4bef4c3504efd2d6b00b2cdf55dc9df194b48'], + }), + ('lpSolve', '5.6.15', { + 'checksums': ['4627be4178abad34fc85a7d264c2eb5e27506f007e46687b0b8a4f8fbdf4f3ba'], + }), + ('linprog', '0.9-2', { + 'checksums': ['8937b2e30692e38de1713f1513b78f505f73da6f5b4a576d151ad60bac2221ce'], + }), + ('geometry', '0.4.5', { + 'checksums': ['8fedd17c64468721d398e3c17a39706321ab71098b29f5e8d8039dd115a220d8'], + }), + ('bit', '4.0.4', { + 'checksums': ['e404841fbe4ebefe4ecd4392effe673a8c9fa05f97952c4ce6e2f6159bd2f168'], + }), + ('filehash', '2.4-2', { + 'checksums': ['b6d056f75d45e315943a4618f5f62802612cd8931ba3f9f474b595140a3cfb93'], + }), + ('ff', '4.0.5', { + 'checksums': ['9aba9e271144ec224063ddba0d791e2fcdb9c912d48fdc49e204fce628355037'], + }), + ('bnlearn', '4.7', { + 'checksums': ['2e1dd7ba9b7cf07e51eec3238684310edbeb0573d9b907049fb6b28db3022817'], + }), + ('bootstrap', '2019.6', { + 'checksums': ['5252fdfeb944cf1fae35016d35f9333b1bd1fc8c6d4a14e33901160e21968694'], + }), + ('combinat', '0.0-8', { + 'checksums': ['1513cf6b6ed74865bfdd9f8ca58feae12b62f38965d1a32c6130bef810ca30c1'], + }), + ('deal', '1.2-39', { + 'checksums': ['a349db8f1c86cbd8315c068da49314ce9eb585dbb50d2e5ff09300506bd8806b'], + }), + ('fdrtool', '1.2.16', { + 'checksums': ['e7dea648ee018e2c8c8834084051c76f7e8b2b42067772c62035a941c32457a9'], + }), + ('formatR', '1.11', { + 'checksums': ['bd81662d09cf363652761e63ba5969c71be4dd5ae6fc9098f440d6729254a30c'], + }), + ('gtools', '3.9.2', { + 'checksums': ['03b1898bf581f6d12fa90e23ff700cfa7c834ac10c6654bdac42d7ec943fa953'], + }), + ('gdata', '2.18.0', { + 'checksums': ['4b287f59f5bbf5fcbf18db16477852faac4a605b10c5284c46b93fa6e9918d7f'], + }), + ('GSA', '1.03.1', { + 'checksums': ['e192d4383f53680dbd556223ea5f8cad6bae62a80a337ba5fd8d05a8aee6a917'], + }), + ('xfun', '0.27', { + 'checksums': ['c775bf33a6bc57f8022960cbf7dc20a4e82175a9c71807b2723f46ade6805485'], + }), + ('highr', '0.9', { + 'checksums': ['beff11390d936c90fdcc00e7ed0eb72220f3de403a51b56659e3d3e0b6d8ed4d'], + }), + ('infotheo', '1.2.0', { + 'checksums': ['9b47ebc3db5708c88dc014b4ffec6734053a9c255a9241fcede30fec3e63aaa3'], + }), + ('lars', '1.2', { + 'checksums': ['64745b568f20b2cfdae3dad02fba92ebf78ffee466a71aaaafd4f48c3921922e'], + }), + ('lazy', '1.2-16', { + 'checksums': ['c796c8b987ed1bd9dfddd593e17312ed681fc4fa3a1ecfe51da2def0ac1e50df'], + }), + ('kernlab', '0.9-29', { + 'checksums': ['c3da693a0041dd34f869e7b63a8d8cf7d4bc588ac601bcdddcf7d44f68b3106f'], + }), + ('mime', '0.12', { + 'checksums': ['a9001051d6c1e556e881910b1816b42872a1ee41ab76d0040ce66a27135e3849'], + }), + ('markdown', '1.1', { + 'checksums': ['8d8cd47472a37362e615dbb8865c3780d7b7db694d59050e19312f126e5efc1b'], + }), + ('mlbench', '2.1-3', { + 'checksums': ['b1f92be633243185ab86e880a1e1ac5a4dd3c535d01ebd187a4872d0a8c6f194'], + }), + ('NLP', '0.2-1', { + 'checksums': ['05eaa453ad2757311c073fd30093c738b20a977c5089031eb454345a1d01f2b6'], + }), + ('mclust', '5.4.7', { + 'checksums': ['45f5a666caee5bebd3160922b8655295a25e37f624741f6574365e4ac5a14c23'], + }), + ('RANN', '2.6.1', { + 'checksums': ['b299c3dfb7be17aa41e66eff5674fddd2992fb6dd3b10bc59ffbf0c401697182'], + }), + ('rmeta', '3.0', { + 'checksums': ['b9f9d405935cffcd7a5697ff13b033f9725de45f4dc7b059fd68a7536eb76b6e'], + }), + ('segmented', '1.3-4', { + 'checksums': ['8276bfbb3e5c1d7a9a61098f72ac9b2b0f52c89ae9f9b715f76b22303cc3902d'], + }), + ('som', '0.3-5.1', { + 'checksums': ['a6f4c0e5b36656b7a8ea144b057e3d7642a8b71972da387a7133f3dd65507fb9'], + }), + ('SuppDists', '1.1-9.5', { + 'checksums': ['680b67145c07d44e200275e08e48602fe19cd99fb106c05422b3f4a244c071c4'], + }), + ('stabledist', '0.7-1', { + 'checksums': ['06c5704d3a3c179fa389675c537c39a006867bc6e4f23dd7e406476ed2c88a69'], + }), + ('survivalROC', '1.0.3', { + 'checksums': ['1449e7038e048e6ad4d3f7767983c0873c9c7a7637ffa03a4cc7f0e25c31cd72'], + }), + ('pspline', '1.0-18', { + 'checksums': ['f71cf293bd5462e510ac5ad16c4a96eda18891a0bfa6447dd881c65845e19ac7'], + }), + ('timeDate', '3043.102', { + 'checksums': ['377cba03cddab8c6992e31d0683c1db3a73afa9834eee3e95b3b0723f02d7473'], + }), + ('longmemo', '1.1-2', { + 'checksums': ['7964e982287427dd58f98e1144e468ae0cbd572d25a4bea6ca9ae9c7522f3207'], + }), + ('ADGofTest', '0.3', { + 'checksums': ['9cd9313954f6ecd82480d373f6c5371ca84ab33e3f5c39d972d35cfcf1096846'], + }), + ('MASS', '7.3-54', { + 'checksums': ['eb644c0e94b447c46387aa22436ef5a43192960ee9cfd0df2940f4a4116179ae'], + }), + ('pixmap', '0.4-12', { + 'checksums': ['893ba894d4348ba05e6edf9c1b4fd201191816b444a214f7a6b2c0a79b0a2aec'], + }), + ('lattice', '0.20-45', { + 'checksums': ['22388d92bdb7d3959da84d7308d9026dd8226ef07580783729e8ad2f7d7507ad'], + }), + ('sp', '1.4-5', { + 'checksums': ['6beeb216d540475cdead5f2c72d6c7ee400fe2423c1882d72cf57f6df58f09da'], + }), + ('pkgconfig', '2.0.3', { + 'checksums': ['330fef440ffeb842a7dcfffc8303743f1feae83e8d6131078b5a44ff11bc3850'], + }), + ('rlang', '0.4.12', { + 'checksums': ['2a26915738be120a56ec93e781bcb50ffa1031e11904544198b4a15c35029915'], + }), + ('ellipsis', '0.3.2', { + 'checksums': ['a90266e5eb59c7f419774d5c6d6bd5e09701a26c9218c5933c9bce6765aa1558'], + }), + ('digest', '0.6.28', { + 'checksums': ['4a328c75e95f8522fc07390d1dd00c19fb643f558e761a8aed04f99c1dc7db00'], + }), + ('glue', '1.4.2', { + 'checksums': ['9f7354132a26e9a876428fa87629b9aaddcd558f9932328e6ac065b95b8ef7ad'], + }), + ('vctrs', '0.3.8', { + 'checksums': ['7f4e8b75eda115e69dddf714f0643eb889ad61017cdc13af24389aab2a2d1bb1'], + }), + ('lifecycle', '1.0.1', { + 'checksums': ['1da76e1c00f1be96ca34e122ae611259430bf99d6a1b999fdef70c00c30f7ba0'], + }), + ('hms', '1.1.1', { + 'checksums': ['6b5f30db1845c70d27b5de33f31caa487cdd0787cd80a4073375e5f482269062'], + }), + ('prettyunits', '1.1.1', { + 'checksums': ['9a199aa80c6d5e50fa977bc724d6e39dae1fc597a96413053609156ee7fb75c5'], + }), + ('R6', '2.5.1', { + 'checksums': ['8d92bd29c2ed7bf15f2778618ffe4a95556193d21d8431a7f75e7e5fc102bf48'], + }), + ('crayon', '1.4.2', { + 'checksums': ['ee34397f643e76e30588068d4c93bd3c9afd2193deacccacb3bffcadf141b857'], + }), + ('progress', '1.2.2', { + 'checksums': ['b4a4d8ed55db99394b036a29a0fb20b5dd2a91c211a1d651c52a1023cc58ff35'], + }), + ('ade4', '1.7-18', { + 'checksums': ['ecb6f4c42c60f39702aa96f454bb536a333049c9608ee2b6bdf8795e059cc525'], + }), + ('AlgDesign', '1.2.0', { + 'checksums': ['ff86c9e19505770520e7614970ad19c698664d08001ce888b8603e44c2a3b52a'], + }), + ('base64enc', '0.1-3', { + 'checksums': ['6d856d8a364bcdc499a0bf38bfd283b7c743d08f0b288174fba7dbf0a04b688d'], + }), + ('BH', '1.75.0-0', { + 'checksums': ['ae4c10992607dd697663f60675a46a5770851da159330bb63c4a68890bdd6f5a'], + }), + ('brew', '1.0-6', { + 'checksums': ['d70d1a9a01cf4a923b4f11e4374ffd887ad3ff964f35c6f9dc0f29c8d657f0ed'], + }), + ('Brobdingnag', '1.2-6', { + 'checksums': ['19eccaed830ce9d93b70642f6f126ac66722a98bbd48586899cc613dd9966ad4'], + }), + ('corpcor', '1.6.10', { + 'checksums': ['71a04c503c93ec95ddde09abe8c7ddeb36175b7da76365a14b27066383e10e09'], + }), + ('longitudinal', '1.1.12', { + 'checksums': ['d4f894c38373ba105b1bdc89e3e7c1b215838e2fb6b4470b9f23768b84e603b5'], + }), + ('backports', '1.3.0', { + 'checksums': ['4f231e91ca8298fb1a27810ef5dd4c84e05c2b2b6f6748eab68f70ff4827812d'], + }), + ('checkmate', '2.0.0', { + 'checksums': ['0dc25b0e20c04836359df1885d099c6e4ad8ae0e585a9e4107f7ea945d9c6fa4'], + }), + ('cubature', '2.0.4.2', { + 'checksums': ['605bdd9d90fb6645359cccd1b289c5afae235b46360ef5bdd2001aa307a7694e'], + }), + ('DEoptimR', '1.0-9', { + 'checksums': ['6151aa74f52ff4be664343e3992749e63235ebba51c9fded3775c1a2407c6512'], + }), + ('fastmatch', '1.1-3', { + 'checksums': ['1defa0b08bc3f48e4c3e4ba8df4f1b9e8299932fd8c747c67d32de44f90b9861'], + }), + ('ffbase', '0.13.3', { + 'checksums': ['b3f61f80ba6851130247779786903d42a24ee5219aa24556c8470aece8a2e6b6'], + }), + ('iterators', '1.0.13', { + 'checksums': ['778e30e4c292da9f94d62acc637cf55273dae258199d847e62658f44840f11a4'], + }), + ('maps', '3.4.0', { + 'checksums': ['7918ccb2393ca19589d4c4e77d9ebe863dc6317ebfc1ff41869dbfaf439f5747'], + }), + ('nnls', '1.4', { + 'checksums': ['0e5d77abae12bc50639d34354f96a8e079408c9d7138a360743b73bd7bce6c1f'], + }), + ('sendmailR', '1.2-1', { + 'checksums': ['04feb08c6c763d9c58b2db24b1222febe01e28974eac4fe87670be6fb9bff17c'], + }), + ('dotCall64', '1.0-1', { + 'checksums': ['f10b28fcffb9453b1d8888a72c8fd2112038b5ac33e02a481492c7bd249aa5c6'], + }), + ('spam', '2.7-0', { + 'checksums': ['632b5c48f587a34c997a487b72099c9c89d76a43f2cd9a36cb95fdec1d07850d'], + }), + ('subplex', '1.6', { + 'checksums': ['0d05da1622fffcd20a01cc929fc6c2b7df40a8246e7018f7f1f3c175b774cbf9'], + }), + ('stringi', '1.7.5', { + 'checksums': ['2914cc34e1cbfb65147090263b0e1bf2727ad32bc9bb860732094fecff4b2565'], + }), + ('magrittr', '2.0.1', { + 'checksums': ['75c265d51cc2b34beb27040edb09823c7b954d3990a7a931e40690b75d4aad5f'], + }), + ('stringr', '1.4.0', { + 'checksums': ['87604d2d3a9ad8fd68444ce0865b59e2ffbdb548a38d6634796bbd83eeb931dd'], + }), + ('evaluate', '0.14', { + 'checksums': ['a8c88bdbe4e60046d95ddf7e181ee15a6f41cdf92127c9678f6f3d328a3c5e28'], + }), + ('logspline', '2.1.16', { + 'checksums': ['7418491b8c778483c24e4354ee47b1e1b1d68b0057c12d6e012cce7d4e6c138a'], + }), + ('ncbit', '2013.03.29', { + 'checksums': ['4480271f14953615c8ddc2e0666866bb1d0964398ba0fab6cc29046436820738'], + }), + ('permute', '0.9-5', { + 'checksums': ['d2885384a07497e8df273689d6713fc7c57a7c161f6935f3572015e16ab94865'], + }), + ('plotrix', '3.8-2', { + 'checksums': ['bb72953102889cea41cd6521874e35d2458ebd10aab97ba6f262e102cac0bc1f'], + }), + ('randomForest', '4.6-14', { + 'checksums': ['f4b88920419eb0a89d0bc5744af0416d92d112988702dc726882394128a8754d'], + }), + ('scatterplot3d', '0.3-41', { + 'checksums': ['4c8326b70a3b2d37126ca806771d71e5e9fe1201cfbe5b0d5a0a83c3d2c75d94'], + }), + ('SparseM', '1.81', { + 'checksums': ['bd838f381ace680fa38508ff70b3d83cb9ffa28ac1ab568509249bca53c34b33'], + }), + ('tripack', '1.3-9.1', { + 'checksums': ['7f82f8d63741c468767acc6fb35281bd9903f6c3c52e8fada60a6ae317511fbe'], + }), + ('irace', '3.4.1', { + 'checksums': ['7eea92ba42e6ba320fa8bdca3c53091ae42f26a0f097244f65e7e117f6d514b6'], + }), + ('rJava', '1.0-5', { + 'checksums': ['2fdba5774f6333440e0ef6d96567b37f9f382820242a4d885f2891796fb36fde'], + }), + ('RColorBrewer', '1.1-2', { + 'checksums': ['f3e9781e84e114b7a88eb099825936cc5ae7276bbba5af94d35adb1b3ea2ccdd'], + }), + ('png', '0.1-7', { + 'checksums': ['e269ff968f04384fc9421d17cfc7c10cf7756b11c2d6d126e9776f5aca65553c'], + }), + ('jpeg', '0.1-9', { + 'checksums': ['01a175442ec209b838a56a66a3908193aca6f040d537da7838d9368e46913072'], + }), + ('latticeExtra', '0.6-29', { + 'checksums': ['6cadc31d56f73d926e2e8d72e43ae17ac03607a4d1a374719999a4a231e3df11'], + }), + ('Matrix', '1.3-4', { + 'checksums': ['ab42179d44545e99bbdf44bb6d04cab051dd2aba552b1f6edd51ed71b55f6c39'], + }), + ('RcppArmadillo', '0.10.7.0.0', { + 'checksums': ['01a8eac49d5b2bcefcba076f0ee7b234bee3d22d54d7f4d56d9a6ae7cbea65f4'], + }), + ('plyr', '1.8.6', { + 'checksums': ['ea55d26f155443e9774769531daa5d4c20a0697bb53abd832e891b126c935287'], + }), + ('gtable', '0.3.0', { + 'checksums': ['fd386cc4610b1cc7627dac34dba8367f7efe114b968503027fb2e1265c67d6d3'], + }), + ('reshape2', '1.4.4', { + 'checksums': ['d88dcf9e2530fa9695fc57d0c78adfc5e361305fe8919fe09410b17da5ca12d8'], + }), + ('dichromat', '2.0-0', { + 'checksums': ['31151eaf36f70bdc1172da5ff5088ee51cc0a3db4ead59c7c38c25316d580dd1'], + }), + ('colorspace', '2.0-2', { + 'checksums': ['b891cd2ec129ed5f116429345947bcaadc33969758a108521eb0cf36bd12183a'], + }), + ('munsell', '0.5.0', { + 'checksums': ['d0f3a9fb30e2b5d411fa61db56d4be5733a2621c0edf017d090bdfa5e377e199'], + }), + ('labeling', '0.4.2', { + 'checksums': ['e022d79276173e0d62bf9e37d7574db65ab439eb2ae1833e460b1cff529bd165'], + }), + ('viridisLite', '0.4.0', { + 'checksums': ['849955dc8ad9bc52bdc50ed4867fd92a510696fc8294e6971efa018437c83c6a'], + }), + ('farver', '2.1.0', { + 'checksums': ['e5c8630607049f682fb3002b99ca4f5e7c6b94f8b2a4342df594e7853b77cef4'], + }), + ('scales', '1.1.1', { + 'checksums': ['40b2b66522f1f314a20fd09426011b0cdc9d16b23ee2e765fe1930292dd03705'], + }), + ('utf8', '1.2.2', { + 'checksums': ['a71aee87d43a9bcf29249c7a5a2e9ca1d2a836e8d5ee3a264d3062f25378d8f4'], + }), + ('zeallot', '0.1.0', { + 'checksums': ['439f1213c97c8ddef9a1e1499bdf81c2940859f78b76bc86ba476cebd88ba1e9'], + }), + ('assertthat', '0.2.1', { + 'checksums': ['85cf7fcc4753a8c86da9a6f454e46c2a58ffc70c4f47cac4d3e3bcefda2a9e9f'], + }), + ('fansi', '0.5.0', { + 'checksums': ['9d1bf8c316969c163abd3dd41cc1425b2671df9471fe806bf8783794a19ca54f'], + }), + ('cli', '3.1.0', { + 'checksums': ['c70a61830bf706a84c59eb74a809978846cee93742198ab4192742a5df1ace11'], + }), + ('pillar', '1.6.4', { + 'checksums': ['033a92a271ddeec2a17323d070de8257b9ca4d57f5be6181e2ad35fe7e1ea19e'], + }), + ('tibble', '3.1.5', { + 'checksums': ['da6387ba683a67cd7fc2a111f6b62468e480a8078bc1867d433a40c5460edbe7'], + }), + ('lazyeval', '0.2.2', { + 'checksums': ['d6904112a21056222cfcd5eb8175a78aa063afe648a562d9c42c6b960a8820d4'], + }), + ('withr', '2.4.2', { + 'checksums': ['48f96a4cb780cf6fd5fbbea1f1eb04ea3102d7a4a644cae1ed1e91139dcbbac8'], + }), + ('nlme', '3.1-153', { + 'checksums': ['3d27a98edf1b16ee868949e823ac0babbf10c937a7220d648b7ef9480cd680e3'], + }), + ('mgcv', '1.8-38', { + 'checksums': ['cd12ed5787d6fdcead34e782e48b62b3f9efd523616c906e2da77bd9c142ddbb'], + }), + ('rprojroot', '2.0.2', { + 'checksums': ['5fa161f0d4ac3b7a99dc6aa2d832251001dc92e93c828593a51fe90afd019e1f'], + }), + ('desc', '1.4.0', { + 'checksums': ['8220e4c706449b8121b822e70b1414f391ef419aed574836a234c63b83e5d649'], + }), + ('ps', '1.6.0', { + 'checksums': ['89ad7ddc5e0818bccacfd0673ddf2da0892ac2a3b4d3a821e40884ab1e96bf31'], + }), + ('processx', '3.5.2', { + 'checksums': ['ed6f2d1047461c6061e6ed58fb6de65a289b56009867892abad76c6bba46fc2b'], + }), + ('callr', '3.7.0', { + 'checksums': ['d67255148595c6d0ba4c4d241bc9f6b5e00cafe25fdc13e38c10acc38653360a'], + }), + ('pkgbuild', '1.2.0', { + 'checksums': ['2e19308d3271fefd5e118c6d132d6a2511253b903620b5417892c72d2010a963'], + }), + ('rstudioapi', '0.13', { + 'checksums': ['aac35bbdcb4a8e8caba943bc8a2b98120e8940b80cd1020224bb1a26ff776d8b'], + }), + ('pkgload', '1.2.3', { + 'checksums': ['105ae5b2caca495bd0702757c5c676353cca8525954d0822f07103ca8a54b349'], + }), + ('praise', '1.0.0', { + 'checksums': ['5c035e74fd05dfa59b03afe0d5f4c53fbf34144e175e90c53d09c6baedf5debd'], + }), + ('brio', '1.1.2', { + 'checksums': ['42dde6953151e31cc38bbec72335c01ac9e755cc07d11e26f4e1fcd0f9f471ef'], + }), + ('jsonlite', '1.7.2', { + 'checksums': ['06354b50435942f67ba264f79831e577809ef89e5f9a5a2201985396fe651fd2'], + }), + ('diffobj', '0.3.5', { + 'checksums': ['d860a79b1d4c9e369282d7391b539fe89228954854a65ba47181407c53e3cf60'], + }), + ('rematch2', '2.1.2', { + 'checksums': ['fe9cbfe99dd7731a0a2a310900d999f80e7486775b67f3f8f388c30737faf7bb'], + }), + ('waldo', '0.3.1', { + 'checksums': ['ec2c8c1afbc413f8db8b6b0c6970194a875f616ad18e1e72a004bc4497ec019b'], + }), + ('testthat', '3.1.0', { + 'checksums': ['e714b105891a766d03d5bab09d705b1f6c23f04db56dfe310bff8cfa00464987'], + }), + ('isoband', '0.2.5', { + 'checksums': ['46f53fa066f0966f02cb2bf050190c0d5e950dab2cdf565feb63fc092c886ba5'], + }), + ('ggplot2', '3.3.5', { + 'checksums': ['b075294faf3af31b18e415f260c62d6000b218770e430484fe38819bdc3224ea'], + }), + ('pROC', '1.18.0', { + 'checksums': ['d5ef54b384176ece6d6448014ba40570a98181b58fee742f315604addb5f7ba9'], + }), + ('quadprog', '1.5-8', { + 'checksums': ['22128dd6b08d3516c44ff89276719ad4fe46b36b23fdd585274fa3a93e7a49cd'], + }), + ('BB', '2019.10-1', { + 'checksums': ['04d0b6ce6e5f070b109478a6005653dbe78613bb4e3ea4903203d851b5d3c94d'], + }), + ('BBmisc', '1.11', { + 'checksums': ['1ea48c281825349d8642a661bb447e23bfd651db3599bf72593bfebe17b101d2'], + }), + ('fail', '1.3', { + 'checksums': ['ede8aa2a9f2371aff5874cd030ac625adb35c33954835b54ab4abf7aeb34d56d'], + }), + ('rlecuyer', '0.3-5', { + 'checksums': ['4723434ff7624d4f404a6854ffa0673fc43daa46f58f064dbeeaa17da28ab626'], + }), + ('snow', '0.4-4', { + 'checksums': ['84587f46f222a96f3e2fde10ad6ec6ddbd878f4e917cd926d632f61a87db13c9'], + }), + ('tree', '1.0-41', { + 'checksums': ['21cf995b187d97de0bce8330973a52c46235db0fc09a133cad26283b7a6f5c8e'], + }), + ('pls', '2.8-0', { + 'checksums': ['eff3a92756ca34cdc1661fa36d2bf7fc8e9f4132d2f1ef9ed0105c83594618bf'], + }), + ('class', '7.3-19', { + 'checksums': ['9012f5c65384b441b5738ed7bd18ea735884bab32b31776e80cf3679f38a3769'], + }), + ('proxy', '0.4-26', { + 'checksums': ['676bad821343974e0297a0566c4bf0cf0ea890104906a745b87d3b5989c81a4d'], + }), + ('e1071', '1.7-9', { + 'checksums': ['9bf9a15e7ce0b9b1a57ce3048d29cbea7f2a5bb2e91271b1b6aaafe07c852226'], + }), + ('nnet', '7.3-16', { + 'checksums': ['c5b73eb4fff0d225e14f898cec987a7a88796b6e70cde4cf277374428f2d5c13'], + }), + ('minqa', '1.2.4', { + 'checksums': ['cfa193a4a9c55cb08f3faf4ab09c11b70412523767f19894e4eafc6e94cccd0c'], + }), + ('RcppEigen', '0.3.3.9.1', { + 'checksums': ['8a0486249b778a4275a1168fc89fc7fc49c2bb031cb14b50a50089acae7fe962'], + }), + ('MatrixModels', '0.5-0', { + 'checksums': ['a87faf1a185219f79ea2307e6787d293e1d30bf3af9398e8cfe1e079978946ed'], + }), + ('matrixStats', '0.61.0', { + 'checksums': ['dbd3c0ec59b1ae62ff9b4c2c90c4687cbd680d1796f6fdd672319458d4d2fd9a'], + }), + ('codetools', '0.2-18', { + 'checksums': ['1a9ea6b9792dbd1688078455929385acc3a5e4bef945c77bec1261fa4a084c28'], + }), + ('foreach', '1.5.1', { + 'checksums': ['fb5ad69e295618c52b2ac7dff84a0771462870a97345374d43b3de2dc31a68e1'], + }), + ('data.table', '1.14.2', { + 'checksums': ['f741b951e5937440139514aedbae78dbd6862d825066848bdb006aa02c2f3d2b'], + }), + ('ModelMetrics', '1.2.2.2', { + 'checksums': ['5e06f1926aebca5654e1329c66ef19b04058376b2277ebb16e3bf8c208d73457'], + }), + ('generics', '0.1.1', { + 'checksums': ['a2478ebf1a0faa8855a152f4e747ad969a800597434196ed1f71975a9eb11912'], + }), + ('purrr', '0.3.4', { + 'checksums': ['23ebc93bc9aed9e7575e8eb9683ff4acc0270ef7d6436cc2ef4236a9734840b2'], + }), + ('tidyselect', '1.1.1', { + 'checksums': ['18eb6a6746196a81ce19ee6cbf1db0c33f494177b97e2419312ef25a00ae486b'], + }), + ('dplyr', '1.0.7', { + 'checksums': ['d2fe3aedbce02fdddce09a8a80f85f5918a9d1f15f792ad4a98f254959d7123d'], + }), + ('gower', '0.2.2', { + 'checksums': ['3f022010199fafe34f6e7431730642a76893e6b4249b84e5a61012cb83483631'], + }), + ('rpart', '4.1-15', { + 'checksums': ['2b8ebe0e9e11592debff893f93f5a44a6765abd0bd956b0eb1f70e9394cfae5c'], + }), + ('survival', '3.2-13', { + 'checksums': ['3fab9c0ba2c4e2b6a475207e2629a7f06a104c70093dfb768f50a7caac9a317f'], + }), + ('KernSmooth', '2.23-20', { + 'checksums': ['20eb75051e2473933d41eedc9945b03c632847fd581e2207d452cf317fa5ec39'], + }), + ('globals', '0.14.0', { + 'checksums': ['203dbccb829ca9cc6aedb6f5e79cb126ea31f8dd379dff9111ec66e3628c32f3'], + }), + ('listenv', '0.8.0', { + 'checksums': ['fd2aaf3ff2d8d546ce33d1cb38e68401613975117c1f9eb98a7b41facf5c485f'], + }), + ('parallelly', '1.28.1', { + 'checksums': ['f4ae883b18409adb83c561ed69427e740e1b50bf85ef57f48c3f2edf837cc663'], + }), + ('future', '1.23.0', { + 'checksums': ['d869c80e837c0937a414b8050deff081aefeac586b796f3d634d64f0f4fdb8f8'], + }), + ('future.apply', '1.8.1', { + 'checksums': ['0d5bc3cb0289665bb27ae4ccad51fcc5ebf6dca46872b0a4e57790b9dc0aa6c7'], + }), + ('progressr', '0.9.0', { + 'checksums': ['cfe70f8423041ea5b5a2a39122c166462e58b1bba84df935858a7b86362b530f'], + }), + ('numDeriv', '2016.8-1.1', { + 'checksums': ['d8c4d19ff9aeb31b0c628bd4a16378e51c1c9a3813b525469a31fe89af00b345'], + }), + ('SQUAREM', '2021.1', { + 'checksums': ['66e5e18ca29903e4950750bbd810f0f9df85811ee4195ce0a86d939ba8183a58'], + }), + ('lava', '1.6.10', { + 'checksums': ['7a88f8a885872e2abb3011c446e9e1c4884cd4dbe6ab4cfe9207538e5560232e'], + }), + ('prodlim', '2019.11.13', { + 'checksums': ['6809924f503a14681de84730489cdaf9240d7951c64f5b98ca37dc1ce7809b0f'], + }), + ('ipred', '0.9-12', { + 'checksums': ['d6e1535704d39415a799d7643141ffa4f6f55597f03e763f4ccd5d8106005843'], + }), + ('cpp11', '0.4.0', { + 'checksums': ['1768fd07dc30dfbbf8f3fb1a1183947cb7e1dfd909165c4d612a63c163a41e87'], + }), + ('lubridate', '1.8.0', { + 'checksums': ['87d66efdb1f3d680db381d7e40a202d35645865a0542e2f270ef008a19002ba5'], + }), + ('tidyr', '1.1.4', { + 'checksums': ['0b0c98be98a433e15a2550f60330b31a58529a9c58bc2abd7bff6462ab761241'], + }), + ('recipes', '0.1.17', { + 'checksums': ['ed20ba0ea0165310e31864ed7d2e005a2a37b76c7913977fd124d8b567616d3d'], + }), + ('caret', '6.0-90', { + 'checksums': ['e851a4ed7d939c665e57e3551a5464b09fe4285e7c951236efdd890b0da866bc'], + }), + ('conquer', '1.2.0', { + 'checksums': ['10451223658e02b31b87f7f86a14e3d8c71bfbff62ea30f85b89cdef829f07f9'], + }), + ('quantreg', '5.86', { + 'checksums': ['71d1c829af7574ca00575cc0375376ac3ecd54b3d6d36e8eecd71ed8acb9d605'], + }), + ('robustbase', '0.93-9', { + 'checksums': ['d75fb5075463fec61d063bced7003936e9198492328b6fae15f67e8415713c45'], + }), + ('zoo', '1.8-9', { + 'checksums': ['b7be259067a8b9d4a8f5d387e0946a5ba1eb43474baa67ccf4f8bf4b15f772a3'], + }), + ('lmtest', '0.9-38', { + 'checksums': ['32a22cea45398ffc5732d9f5c0391431d0cdd3a9e29cc7b77bea32c1eb4a216b'], + }), + ('vcd', '1.4-9', { + 'checksums': ['a5b420ad5ff1a27fa92f98099a8b43f2dded7e5f60297b3e4d947ad6f039568f'], + }), + ('snowfall', '1.84-6.1', { + 'checksums': ['5c446df3a931e522a8b138cf1fb7ca5815cc82fcf486dbac964dcbc0690e248d'], + }), + ('bindr', '0.1.1', { + 'checksums': ['7c785ca77ceb3ab9282148bcecf64d1857d35f5b800531d49483622fe67505d0'], + }), + ('plogr', '0.2.0', { + 'checksums': ['0e63ba2e1f624005fe25c67cdd403636a912e063d682eca07f2f1d65e9870d29'], + }), + ('bindrcpp', '0.2.2', { + 'checksums': ['48130709eba9d133679a0e959e49a7b14acbce4f47c1e15c4ab46bd9e48ae467'], + }), + ('tmvnsim', '1.0-2', { + 'checksums': ['97f63d0bab3b240cc7bdbe6e6e74e90ad25a4382a345ee51a26fe3959edeba0f'], + }), + ('mnormt', '2.0.2', { + 'checksums': ['5c6aa036d3f1035ffe8f9a8e95bb908b191b126b016591cf893c50472851f334'], + }), + ('foreign', '0.8-81', { + 'checksums': ['1ae8f9f18f2a037697fa1a9060417ff255c71764f0145080b2bd23ba8262992c'], + }), + ('psych', '2.1.9', { + 'checksums': ['1475e03a17f1ae6837834f01c2472aed68887c89d90a84a3e09a532ce218500c'], + }), + ('broom', '0.7.10', { + 'checksums': ['129fd5a53abef7f42b7efac6c64ebd71269b136aa648846d640562357927464f'], + }), + ('nloptr', '1.2.2.2', { + 'checksums': ['e80ea9619ac18f4bfe44812198b40b9ae5c0ddf3f9cc91778f9ccc82168d1372'], + }), + ('boot', '1.3-28', { + 'checksums': ['9f7158fd2714659f590c3955651893dc24bd8f39196bc5a4cc35b0b031744a32'], + }), + ('statmod', '1.4.36', { + 'checksums': ['14e897c83d426caca4d920d3d5bead7ae9a679276b3cb2e227f299ad189d7bc2'], + }), + ('lme4', '1.1-27.1', { + 'checksums': ['25fa873e39b8192e48c15eec93db8c8bf6f03baf3bd8d5ca9188482ce8442ec5'], + }), + ('ucminf', '1.1-4', { + 'checksums': ['a2eb382f9b24e949d982e311578518710f8242070b3aa3314a331c1e1e7f6f07'], + }), + ('ordinal', '2019.12-10', { + 'checksums': ['7a41e7b7e852a8fa3e911f8859d36e5709ccec5ca42ee3de14a813b7aaac7725'], + }), + ('jomo', '2.7-2', { + 'checksums': ['3962d5cbecc60e72670329dbef0dd74303080f5ea2a79c91e27f75db99ba6ce9'], + }), + ('clipr', '0.7.1', { + 'checksums': ['ffad477b07847e3b68f7e4406bbd323025a8dae7e3c768943d4d307ee3248afb'], + }), + ('tzdb', '0.2.0', { + 'checksums': ['c335905d452b400af7ed54b916b5246cb3f47ede0602911a2bcb25a1cf56d5a9'], + }), + ('bit64', '4.0.5', { + 'checksums': ['25df6826ea5e93241c4874cad4fa8dadc87a40f4ff74c9107aa12a9e033e1578'], + }), + ('vroom', '1.5.5', { + 'checksums': ['1d45688c08f162a3300eda532d9e87d144f4bc686769a521bf9a12e3d3b465fe'], + }), + ('readr', '2.0.2', { + 'checksums': ['98b05ed751dda2bcf7a29d070ce3d3e8475e0138a3e3ec68941dc45218db7615'], + }), + ('forcats', '0.5.1', { + 'checksums': ['c4fb96e874e2bedaa8a1aa32ea22abdee7906d93b5c5c7b42c0894c0c5b6a289'], + }), + ('haven', '2.4.3', { + 'checksums': ['95b70f47e77792bed4312441787299d2e3e27d79a176f0638a37e5301b93295f'], + }), + ('pan', '1.6', { + 'checksums': ['adc0df816ae38bc188bce0aef3aeb71d19c0fc26e063107eeee71a81a49463b6'], + }), + ('mitml', '0.4-3', { + 'checksums': ['49bd3eb68a60fb2a269e7ddca8b862e1e81e0651e2b29759482fb7bcad452102'], + }), + ('mice', '3.13.0', { + 'checksums': ['5108e4673512c96ced19c23fdbb0feea2b2a655a4c7dc9afb06a2a1a29f69785'], + }), + ('urca', '1.3-0', { + 'checksums': ['621cc82398e25b58b4a16edf000ed0a1484d9a0bc458f734e97b6f371cc76aaa'], + }), + ('fracdiff', '1.5-1', { + 'checksums': ['b8103b32a4ca3a59dda1624c07da08ecd144c7a91a747d1f4663e99421950eb6'], + }), + ('operator.tools', '1.6.3', { + 'checksums': ['e5b74018fb75bfa02820dec4b822312f1640422f01d9fec1b58d880ffb798dec'], + }), + ('formula.tools', '1.7.1', { + 'checksums': ['4fe0e72d9d96f2398e86cbd8536d0c84de38e5583d4ff7dcd73f415ddd8ca395'], + }), + ('logistf', '1.24', { + 'checksums': ['6561d311fe21b789954cb33c008b86abdd6509b2a2900385dd6046163679d96b'], + }), + ('akima', '0.6-2.2', { + 'checksums': ['deefc9ff82f78e68b7333c2fc88bd23863da9919493f2b73658044436f6b8742'], + }), + ('bitops', '1.0-7', { + 'checksums': ['e9b5fc92c39f94a10cd0e13f3d6e2a9c17b75ea01467077a51d47a5f708517c4'], + }), + ('mixtools', '1.2.0', { + 'checksums': ['ef033ef13625209065d26767bf70d129972e6808927f755629f1d70a118b9023'], + }), + ('cluster', '2.1.2', { + 'checksums': ['5c8aa760fb6dda4fcfe6196e561ffcd2dc12b1a6c7659cb90be2cde747311499'], + }), + ('gclus', '1.3.2', { + 'checksums': ['9cc61cdff206c11213e73afca3d570a7234250cf6044a9202c2589932278e0b3'], + }), + ('coda', '0.19-4', { + 'checksums': ['422d3cfd34797a3631e9c4812431940599c0ca4bb9937797bed07b7b1d6fe58f'], + }), + ('doMC', '1.3.7', { + 'checksums': ['defab27adc298a6746896d83251f8355d62c01012d51ef96d491875a2e74b54d'], + }), + ('DBI', '1.1.1', { + 'checksums': ['572ab3b8a6421d0ac3e7665c4c842826f1723af98fca25d4f43edb419e771344'], + }), + ('gam', '1.20', { + 'checksums': ['91eb416ba06aa1c3f611661530467f4513992f6c168e3f6e474cf57bae131efe'], + }), + ('gamlss.data', '6.0-1', { + 'checksums': ['98fdec571aeacea4318c9e1c9d56b74716f3dc6acce385cbaad0d6128b154bb2'], + }), + ('gamlss.dist', '5.3-2', { + 'checksums': ['0caa92cd20c3d2d11b1af4656fd0de09adf145992345cba07fdcd33b7716ced3'], + }), + ('gamlss', '5.3-4', { + 'checksums': ['72707187471fd35c5379ae8c9b7b0ca87e302557f09cb3979d1cdb2e2500b01a'], + }), + ('gamlss.tr', '5.1-7', { + 'checksums': ['8f9975bceaf8000b1d39317daf490e59c8385b5291326ed6a2630be11dae3137'], + }), + ('hwriter', '1.3.2', { + 'checksums': ['6b3531d2e7a239be9d6e3a1aa3256b2745eb68aa0bdffd2076d36552d0d7322b'], + }), + ('xts', '0.12.1', { + 'checksums': ['d680584af946fc30be0b2046e838cff7b3a65e00df1eadba325ca5e96f3dca2c'], + }), + ('curl', '4.3.2', { + 'checksums': ['90b1facb4be8b6315bb3d272ba2dd90b88973f6ea1ab7f439550230f8500a568'], + }), + ('TTR', '0.24.2', { + 'checksums': ['2587b988d9199474a19470b9b999b99133d0d8aa45410813e05c5f0ed763711b'], + }), + ('quantmod', '0.4.18', { + 'checksums': ['aa40448e93a1facf399213ac691784007731e869ad243fe762381ab099cd6c35'], + }), + ('mvtnorm', '1.1-3', { + 'checksums': ['ff4e302139ba631280fc9c4a2ab168596bfd09e17a805974199b043697c02448'], + }), + ('pcaPP', '1.9-74', { + 'checksums': ['50837b434d67e4b5fcec34c689a9e30c7a9fb94c561b39f24e68a1456ff999b6'], + }), + ('pscl', '1.5.5', { + 'checksums': ['054c9b88a991abdec3338688f58e81b6ba55f91edb988621864b24fd152fee6f'], + }), + ('fastmap', '1.1.0', { + 'checksums': ['9113e526b4c096302cfeae660a06de2c4c82ae4e2d3d6ef53af6de812d4c822b'], + }), + ('cachem', '1.0.6', { + 'checksums': ['9a9452f7bcf3f79436c418b3c3290449fb8fd338714d9b992153754d112f1864'], + }), + ('memoise', '2.0.0', { + 'checksums': ['ff9ae3a1a95ad6271d98e6eca016768b790e44bd613356b8e86b685aefd9ecaf'], + }), + ('blob', '1.2.2', { + 'checksums': ['4976053c65994c769a4c22b4553bea0bd9c623b3b991dbaf023d2a164770c7fa'], + }), + ('RSQLite', '2.2.8', { + 'checksums': ['1b8adc1b7ed4bc5ec070b8765837cd4104fcdda482a1d335c030f51b427c4cc3'], + }), + ('BatchJobs', '1.8', { + 'checksums': ['35cc2dae31994b1df982d11939509ce965e12578418c4fbb8cd7a422afd6e4ff'], + }), + ('sandwich', '3.0-1', { + 'checksums': ['f6584b7084f3223bbc0c4722f53280496be73849747819b0cb4e8f3910284a89'], + }), + ('sfsmisc', '1.1-12', { + 'checksums': ['9b12184a28fff87cacd0c3602d0cf63acb4d0f3049ad3a6ff16177f6df350782'], + }), + ('spatial', '7.3-14', { + 'checksums': ['50e6daacbacff6c716485d20b15eb7fff7b8108dc5ea0ff508024beb4f0a8b9b'], + }), + ('VGAM', '1.1-5', { + 'checksums': ['30190b150f3e5478137d288a45f575b2654ad7c29254b0a1fe5c954ee010a1bb'], + }), + ('waveslim', '1.8.2', { + 'checksums': ['133c4f7a027282742fe99b583ca65f178fc7a3df2ce75cb4d60650f0a1dd7145'], + }), + ('xtable', '1.8-4', { + 'checksums': ['5abec0e8c27865ef0880f1d19c9f9ca7cc0fd24eadaa72bcd270c3fb4075fd1c'], + }), + ('profileModel', '0.6.1', { + 'checksums': ['91dc25e81f52506593f5c8d80a6131510b14525262f65b4ac10ae0cad0b2a506'], + }), + ('brglm', '0.7.2', { + 'checksums': ['56098d2ce238478e7a27cacc4cdec0bc65f287fe746b38fbb1edda20c1675023'], + }), + ('deSolve', '1.30', { + 'checksums': ['39f65d7af6b4d85eb023cce2a200c2de470644b22d45e210c5b7d558c3abf548'], + }), + ('tseriesChaos', '0.1-13.1', { + 'checksums': ['23cb5fea56409a305e02a523ff8b7642ec383942d415c9cffdc92208dacfd961'], + }), + ('tseries', '0.10-48', { + 'checksums': ['53bd22708c936205c5f839a10f2e302524d2cc54dc309e7d885ebd081ccb4471'], + }), + ('fastICA', '1.2-3', { + 'checksums': ['e9ef82644cb64bb49ae3b7b6e0885f4fb2dc08ae030f8c76fe8dd8507b658950'], + }), + ('R.methodsS3', '1.8.1', { + 'checksums': ['8a98fb81bcfa78193450f855f614f6f64e6c65daf115f301d97d1f474f5e619b'], + }), + ('R.oo', '1.24.0', { + 'checksums': ['37a1dab8dd668ceba69a1ba36c0c60e9809e29b74bd56d1e8ed519e19c8e3bb6'], + }), + ('sys', '3.4', { + 'checksums': ['17f88fbaf222f1f8fd07919461093dac0e7175ae3c3b3264b88470617afd0487'], + }), + ('askpass', '1.1', { + 'checksums': ['db40827d1bdbb90c0aa2846a2961d3bf9d76ad1b392302f9dd84cc2fd18c001f'], + }), + ('openssl', '1.4.5', { + 'checksums': ['4fc141aba8e94e9f5ecce6eda07e45a5e7048d8609ba909ede4f7f4933e0c1f7'], + }), + ('httr', '1.4.2', { + 'checksums': ['462bed6ed0d92f811d5df4d294336025f1dbff357286999d9269bfd9c20b1ef9'], + }), + ('cgdsr', '1.3.0', { + 'checksums': ['4aa2a3564cee2449c3ff39ab2ad631deb165d4c78b8107e0ff77a9095340cc1f'], + }), + ('R.utils', '2.11.0', { + 'checksums': ['622860f995f78be3a6e439f29d945874c5cb0866f6a73a9b43ac1d4d7f23fed8'], + }), + ('R.matlab', '3.6.2', { + 'checksums': ['1ba338f470a24b7f6ef68cadbd04eb468ead4a689f263d2642408ad591b786bb'], + }), + ('gridExtra', '2.3', { + 'checksums': ['81b60ce6f237ec308555471ae0119158b115463df696d2eca9b177ded8988e3b'], + }), + ('gbm', '2.1.8', { + 'checksums': ['7d5de3b980b8f23275e86ac9bed48a497c9aa53c58e407dfd676309f38272ec1'], + }), + ('Formula', '1.2-4', { + 'checksums': ['cb70e373b5ed2fc8450937fb3321d37dfd22dcc6f07cb872a419d51205125caf'], + }), + ('acepack', '1.4.1', { + 'checksums': ['82750507926f02a696f6cc03693e8d4a5ee7e92500c8c15a16a9c12addcd28b9'], + }), + ('proto', '1.0.0', { + 'checksums': ['9294d9a3b2b680bb6fac17000bfc97453d77c87ef68cfd609b4c4eb6d11d04d1'], + }), + ('chron', '2.3-56', { + 'checksums': ['863ecbb951a3da994761ea9062fa96d34e94e19fbc4122521ac179274dfa3f5d'], + }), + ('viridis', '0.6.2', { + 'checksums': ['69b58cd1d992710a08b0b227fd0a9590430eea3ed4858099412f910617e41311'], + }), + ('yaml', '2.2.1', { + 'checksums': ['1115b7bc2a397fa724956eec916df5160c600c99a3be186d21558dd38d782783'], + }), + ('htmltools', '0.5.2', { + 'checksums': ['7dc7d50436e5a82a5801f85bcd2f572a06a98b4027d71aa17b4854ec9b2767fb'], + }), + ('htmlwidgets', '1.5.4', { + 'checksums': ['1a3fc60f40717de7f1716b754fd1c31a132e489a2560a278636ee78eba46ffc1'], + }), + ('knitr', '1.36', { + 'checksums': ['6ecef5b428d135e95a05f24f9f194d0d828b1180c61be44ad89b6210e32b8e41'], + }), + ('htmlTable', '2.3.0', { + 'checksums': ['070d9a0ef6311304f6739d81f7690d8f19899451524b376b403d6a40d477a577'], + }), + ('Hmisc', '4.6-0', { + 'checksums': ['2c1ce906b2333c6dc946dc7f10b74cfa552bce2b12dbebf295d143163562a1ad'], + }), + ('fastcluster', '1.2.3', { + 'checksums': ['1f229129e1cddc78c7bb5ecc90c4d28ed810ee68cf210004c7cdfa12cfaf2a01'], + }), + ('registry', '0.5-1', { + 'checksums': ['dfea36edb0a703ec57e111016789b47a1ba21d9c8ff30672555c81327a3372cc'], + }), + ('bibtex', '0.4.2.3', { + 'checksums': ['7bad194920b412781ac9754ad41058d52d3cd7186e1851c2bce3640490e9bc6d'], + }), + ('pkgmaker', '0.32.2', { + 'checksums': ['ce45b22def771a9c90a414093823e6befe7e23489c500eeccee5154b44d3ef91'], + }), + ('rngtools', '1.5.2', { + 'checksums': ['7f8c76ca4c7851b69a86e27be09b02ddc86357f0388659ef8787634682e8a74d'], + }), + ('doParallel', '1.0.16', { + 'checksums': ['f1bb26f964f30d47ae4d6cf2b0a2ca0c2122d376424875e82d9abe9e7b054eb2'], + }), + ('gridBase', '0.4-7', { + 'checksums': ['be8718d24cd10f6e323dce91b15fc40ed88bccaa26acf3192d5e38fe33e15f26'], + }), + ('irlba', '2.3.3', { + 'checksums': ['6ee233697bcd579813bd0af5e1f4e6dd1eea971e8919c748408130d970fef5c0'], + }), + ('igraph', '1.2.7', { + 'checksums': ['25c1a03273359e012e2625d0d8826264c805037f247785e0b432e02c2aae1be5'], + }), + ('GeneNet', '1.2.15', { + 'checksums': ['555ac4e1d6c53c099b94b9298b6a8893a07797886a21ce3655a98fa9a1326a85'], + }), + ('ape', '5.5', { + 'checksums': ['a3aa01c74b99eafec7d98284e05957b6487b6971ced93f26881f2479bcd5299a'], + }), + ('RJSONIO', '1.3-1.6', { + 'checksums': ['82d1c9ea7758b2a64ad683f9c46223dcba9aa8146b43c1115bf9aa76a657a09f'], + }), + ('caTools', '1.18.2', { + 'checksums': ['75d61115afec754b053ed1732cc034f2aeb27b13e6e1932aa0f26bf590cf0293'], + }), + ('gplots', '3.1.1', { + 'checksums': ['f9ae19c2574b6d41adbeccaf7bc66cf56d7b2769004daba7e0038d5fbd821339'], + }), + ('ROCR', '1.0-11', { + 'checksums': ['57385a773220a3aaef5b221a68b2d9c2a94794d4f9e9fc3c1eb9521767debb2a'], + }), + ('later', '1.3.0', { + 'checksums': ['08f50882ca3cfd2bb68c83f1fcfbc8f696f5cfb5a42c1448c051540693789829'], + }), + ('promises', '1.2.0.1', { + 'checksums': ['8d3a8217909e91f4c2a2eebba5ac8fc902a9ac1a9e9d8a30815c9dc0f162c4b7'], + }), + ('httpuv', '1.6.3', { + 'checksums': ['bfe338c86cc09968c5ec2fd1023040db323d3c3aa413d8d3e5ad4b320bf00876'], + }), + ('rjson', '0.2.20', { + 'checksums': ['3a287c1e5ee7c333ed8385913c0a307daf99335fbdf803e9dcca6e3d5adb3f6c'], + }), + ('sourcetools', '0.1.7', { + 'checksums': ['47984406efb3b3face133979ccbae9fefb7360b9a6ca1a1c11473681418ed2ca'], + }), + ('xml2', '1.3.2', { + 'checksums': ['df22f9e7e3189d8c9b8804eaf0105324fdac983cffe743552f6d76613600a4cf'], + }), + ('commonmark', '1.7', { + 'checksums': ['d14a767a3ea9778d6165f44f980dd257423ca6043926e3cd8f664f7171f89108'], + }), + ('jquerylib', '0.1.4', { + 'checksums': ['f0bcc11dcde3a6ff180277e45c24642d3da3c8690900e38f44495efbc9064411'], + }), + ('rappdirs', '0.3.3', { + 'checksums': ['49959f65b45b0b189a2792d6c1339bef59674ecae92f8c2ed9f26ff9e488c184'], + }), + ('fs', '1.5.0', { + 'checksums': ['36df1653571de3c628a4f769c4627f6ac53d0f9e4106d9d476afb22ae9603897'], + }), + ('sass', '0.4.0', { + 'checksums': ['7d06ca15239142a49e88bb3be494515abdd8c75f00f3f1b0ee7bccb55019bc2b'], + }), + ('bslib', '0.3.1', { + 'checksums': ['5f5cb56e5cab9039a24cd9d70d73b69c2cab5b2f5f37afc15f71dae0339d9849'], + }), + ('fontawesome', '0.2.2', { + 'checksums': ['572db64d1b3c9be301935e0ca7baec69f3a6e0aa802e23f1f224b3724259df64'], + }), + ('shiny', '1.7.1', { + 'checksums': ['c03b2056fb41430352c7c0e812bcc8632e6ec4caef077d2f7633512d91721d00'], + }), + ('seqinr', '4.2-8', { + 'checksums': ['584b34e9dec0320cef02096eb356a0f6115bbd24356cf62e67356963e9d5e9f7'], + }), + ('LearnBayes', '2.15.1', { + 'checksums': ['9b110858456523ca0b2a63f22013c4e1fbda6674b9d84dc1f4de8bffc5260532'], + }), + ('deldir', '1.0-6', { + 'checksums': ['6df6d8325c607e0b7d63cbc53c29e774eff95ad4acf9c7ec8f70693b0505f8c5'], + }), + ('gmodels', '2.18.1', { + 'checksums': ['626140a34eb8c53dd0a06511a76c71bc61c48777fa76fcc5e6934c9c276a1369'], + }), + ('expm', '0.999-6', { + 'checksums': ['2c79912fd2e03fcf89c29f09555880934402fcb2359af8b4579d79b4f955addc'], + }), + ('terra', '1.4-11', { + 'checksums': ['0a8fc0deffd4f2d0065ac6b70ae5cda079a38fe86e40861df94d01d01412fd21'], + }), + ('raster', '3.5-2', { + 'checksums': ['99565167f3ef41ade08b8466a172fc471c73184815c9fb199f9555db63e03d72'], + }), + ('spData', '2.0.1', { + 'checksums': ['c635a3e2e5123b4cdb2e6877b9b09e3d50169e1512a53b2ba2db7fbe63b990fc'], + }), + ('units', '0.7-2', { + 'checksums': ['b90be023431100632b3081747af9e743e615452b4ad38810991f7b024b7040eb'], + }), + ('classInt', '0.4-3', { + 'checksums': ['9ede7a2a7a6b6c114919a3315a884fb592e33b037a50a4fe45cbd4fe2fc434ac'], + }), + ('vegan', '2.5-7', { + 'checksums': ['e63b586951ea7d8b0118811f329c700212892ec1db3b93951603ce1d68aa462a'], + }), + ('rncl', '0.8.4', { + 'checksums': ['6b19d0dd9bb08ecf99766be5ad684bcd1894d1cd9291230bdd709dbd3396496b'], + }), + ('XML', '3.99-0.8', { + 'checksums': ['081f691c2ee8ad39c7c95281e7d9153ec04cee79ca2d41f5d82c2ec2f1d36b50'], + }), + ('tinytex', '0.34', { + 'checksums': ['1d059397b70579c325b64bfd548ef7b985a7558bd1e3d95716e0ed7a0dd8e69b'], + }), + ('rmarkdown', '2.11', { + 'checksums': ['9371255300e7ea4cd936978ad2ca3d205d8605e09f4913cb0d4725005a7a9775'], + }), + ('reshape', '0.8.8', { + 'checksums': ['4d5597fde8511e8fe4e4d1fd7adfc7ab37ff41ac68c76a746f7487d7b106d168'], + }), + ('triebeard', '0.3.0', { + 'checksums': ['bf1dd6209cea1aab24e21a85375ca473ad11c2eff400d65c6202c0fb4ef91ec3'], + }), + ('urltools', '1.7.3', { + 'checksums': ['6020355c1b16a9e3956674e5dea9ac5c035c8eb3eb6bbdd841a2b5528cafa313'], + }), + ('httpcode', '0.3.0', { + 'checksums': ['593a030a4f94c3df8c15576837c17344701bac023ae108783d0f06c476062f76'], + }), + ('crul', '1.1.0', { + 'checksums': ['f0b6cfd19f7470a8aacc7621530315f83796aa64e24a47b96365963e5f615ace'], + }), + ('bold', '1.2.0', { + 'checksums': ['8f1597f04acbe6b090232929325734c802049d82649ae102b438e1fa3af5a464'], + }), + ('rredlist', '0.7.0', { + 'checksums': ['d2e66b655c43565a4cc0984dc3fcc9732652cb9677baaa9bb2b82e9f9d65e7f0'], + }), + ('rentrez', '1.2.3', { + 'checksums': ['fb256597ebe7780e38bef9c4c2626b3feacd60c7a5a29fc6a218cf0d8d132f74'], + }), + ('rotl', '3.0.11', { + 'checksums': ['339bf0b7527449eb495673e406b76a0831aa529fe05952c3448b455cd2c91c2c'], + }), + ('solrium', '1.2.0', { + 'checksums': ['7ec64199497cc69f542fded955b709fc548cf8e2734c9db0f4a99a0ea67ca49b'], + }), + ('ritis', '1.0.0', { + 'checksums': ['327b221872408b1f0fe0cce953685535b66d2fa5d6cac628e1142a26e4856136'], + }), + ('worrms', '0.4.2', { + 'checksums': ['1ab228ea762a431a5e3a565b589b804fcb2865ceaa2b1459bd2ab3ebe8f5ebbe'], + }), + ('natserv', '1.0.0', { + 'checksums': ['30f90f938e963191ef19b1433db1e265f67d8efe29c92a1d3603c3dc9a03d5c8'], + }), + ('WikipediR', '1.5.0', { + 'checksums': ['f8d0e6f04fb65f7ad9c1c068852a6a8b699ffe8d39edf1f3fa07d32d087e8ff0'], + }), + ('ratelimitr', '0.4.1', { + 'checksums': ['2b21e4574521c5336feeb3041eaf096bde7857b140049cdeb6ec97dc652aa71b'], + }), + ('rex', '1.2.0', { + 'checksums': ['06b491f1469078862e40543fd74e1d38b2e0fb61fdf01c8083add4b11ac2eb54'], + }), + ('WikidataQueryServiceR', '1.0.0', { + 'checksums': ['0e14eec8471a72227f800b41b331cfc49a94b4d4f49e68936448ebbae0b281ae'], + }), + ('pbapply', '1.5-0', { + 'checksums': ['effdfee286e5ba9534dc2ac3cee96590a37f5cd2af28c836d00c25ca9f070a55'], + }), + ('WikidataR', '2.3.1', { + 'checksums': ['dd349d160c1c0bae9e3efa336efc622ea9dd481cc0a449ceab49852d220eb2da'], + }), + ('wikitaxa', '0.4.0', { + 'checksums': ['ba872853af59fdc8f1121d6e205f15e5bf4f2ec5ad68cd5755a423fa783bf7fc'], + }), + ('phangorn', '2.7.1', { + 'checksums': ['d8a9d67851f16c3947575eb3344b9ce7ef856354e691211ef23c92b7889e1398'], + }), + ('uuid', '1.0-2', { + 'checksums': ['0bed1a3fe298123e818b631c1a2d8bcf5c6ab334f625a482197324a877a6387a'], + }), + ('conditionz', '0.1.0', { + 'checksums': ['ccd81e4f2534d29cddf44cf697f76ff01417cbeb22001a93477edc61cdd35646'], + }), + ('taxize', '0.9.99', { + 'checksums': ['1a5d2783a82db4b6dd13df3639c7cd07112c1d83ddaabc83706ff235d977681c'], + }), + ('RNeXML', '2.4.5', { + 'checksums': ['2b667ecb6400e4c0c125ca73a98cde81330cde3a85b764261f77159e702754f3'], + }), + ('phylobase', '0.8.10', { + 'checksums': ['5a44380ff49bab333a56f6f96157324ade8afb4af0730e013194c4badb0bf94b'], + }), + ('magick', '2.7.3', { + 'checksums': ['83877b2e23ea43fbc1164de9c2422eafbe7858393ac384df5adf3a7eec122441'], + }), + ('animation', '2.7', { + 'checksums': ['88418f1b04ec785963bad492f30eb48b05914e9e5d88c7eef705d949cbd7e469'], + }), + ('bigmemory.sri', '0.1.3', { + 'checksums': ['55403252d8bae9627476d1f553236ea5dc7aa6e54da6980526a6cdc66924e155'], + }), + ('bigmemory', '4.5.36', { + 'checksums': ['18c67fbe6344b2f8223456c4f19ceebcf6c1166255eab81311001fd67a45ef0e'], + }), + ('calibrate', '1.7.7', { + 'checksums': ['713b09b415c954e1ef5216088acd40621b0546c45afbb8c2c6f118ecb5cd6fa6'], + }), + ('clusterGeneration', '1.3.7', { + 'checksums': ['534f29d8f7ed11e6e9a496f15845b588ec7133f3da5e6def8140b88500e52d5c'], + }), + ('dismo', '1.3-5', { + 'checksums': ['812e1932d42c0f40acf2ab5c5b2d068f93128caf648626e1d11baf1a09340ee7'], + }), + ('extrafontdb', '1.0', { + 'checksums': ['faa1bafee5d4fbc24d03ed237f29f1179964ebac6e3a46ac25b0eceda020b684'], + }), + ('Rttf2pt1', '1.3.9', { + 'checksums': ['8667e48ed639c80180b1c1b65eff6ca2031bc9633a4fe79b50772f92375e3e71'], + }), + ('extrafont', '0.17', { + 'checksums': ['2f6d7d79a890424b56ddbdced361f8b9ddede5edd33e090b816b88a99315332d'], + }), + ('fields', '13.3', { + 'checksums': ['c652838b1ae7eb368831522824bfbc1d1db7b9d1db5e9bb52b194098549944c3'], + }), + ('shapefiles', '0.7', { + 'checksums': ['eeb18ea4165119519a978d4a2ba1ecbb47649deb96a7f617f5b3100d63b3f021'], + }), + ('fossil', '0.4.0', { + 'checksums': ['37c082fa15ebae89db99d6071b2bb2cad6a97a0405e9b4ef77f62a8f6ad274c1'], + }), + ('phytools', '0.7-90', { + 'checksums': ['48615a709760af5f298f0af6615d238c96cad7d26e997fb65467520aad37e0d1'], + }), + ('geiger', '2.0.7', { + 'checksums': ['d200736c4ad7ed4bc55a13e7d0126ddc7fed88e245cd5706d4692aaa437e9596'], + }), + ('shape', '1.4.6', { + 'checksums': ['b9103e5ed05c223c8147dbe3b87a0d73184697343634a353a2ae722f7ace0b7b'], + }), + ('glmnet', '4.1-2', { + 'checksums': ['06ab2b58c0b431736605aee2d42e517e0e2640d16b5a6c7867a25f05dd44cdcd'], + }), + ('crosstalk', '1.1.1', { + 'checksums': ['ed3234f7f000fb607cc42e005d68be1dd598d95fa687a3f6e6b17ba38e36ccd8'], + }), + ('miniUI', '0.1.1.1', { + 'checksums': ['452b41133289f630d8026507263744e385908ca025e9a7976925c1539816b0c0'], + }), + ('webshot', '0.5.2', { + 'checksums': ['f183dc970157075b51ac543550a7a48fa3428b9c6838abb72fe987c21982043f'], + }), + ('shinyjs', '2.0.0', { + 'checksums': ['c2cdd9fab41f6b46bb41b288cd9b3fb3a7fe9627b664e3a58a0cb5dd4c19f8ff'], + }), + ('manipulateWidget', '0.11.1', { + 'checksums': ['5b73728d7d6dcc32f32d861375074cd65112c03a01e4ee4fa94e21b063fdefb6'], + }), + # ('rgl', '0.107.14', { + # 'checksums': ['67213c3215bcadb56e15922fbf0dc7f6a6642cc3d924363dcb1705291727b0fc'], + # }), + ('Rtsne', '0.15', { + 'checksums': ['56376e4f0a382fad3d3d40e2cb0562224be5265b827622bcd235e8fc63df276c'], + }), + ('labdsv', '2.0-1', { + 'checksums': ['5a4d55e9be18222dc47e725008b450996448ab117d83e7caaa191c0f13fd3925'], + }), + ('stabs', '0.6-4', { + 'checksums': ['f8507337789f668e421a6ee7b11dd5ea331bf8bff0f9702dd1b93f46c2f3c1d9'], + }), + ('modeltools', '0.2-23', { + 'checksums': ['6b3e8d5af1a039db5c178498dbf354ed1c5627a8cea9229726644053443210ef'], + }), + ('strucchange', '1.5-2', { + 'checksums': ['7d247c5ae6f5a63c80e478799d009c57fb8803943aa4286d05f71235cc1002f8'], + }), + ('TH.data', '1.1-0', { + 'checksums': ['21b37e251da5635ae91668f64b4c6f6a7ccedbe1f01af769d30fb532af83113e'], + }), + ('multcomp', '1.4-17', { + 'checksums': ['41509d8457cfad9ce579115e6e0ed1f7c0244455a8639cbd38a6d755d338fb0b'], + }), + ('libcoin', '1.0-9', { + 'checksums': ['2d7dd0b7c6dfc20472430570419ea36a714da7bbafd336da1fb53c5c6463d9eb'], + }), + ('coin', '1.4-2', { + 'checksums': ['7546d1f27a82d98b4b3e43e4659eba0f74a67d5919ce85d2fb360282ba3cfbb2'], + }), + ('party', '1.3-9', { + 'checksums': ['29a1fefdb86369285ebf5d48ab51268a83e2011fb9d9f609a2250b5f0b169089'], + }), + ('inum', '1.0-4', { + 'checksums': ['5febef69c43a4b95b376c1418550a949d988a5f26b1383ca01c9728a94fc13ce'], + }), + ('partykit', '1.2-15', { + 'checksums': ['b2e9454b2f4b9a39c9581c5871462f00acef4eeee5696ce3e32cfa1468d1e3ac'], + }), + ('mboost', '2.9-5', { + 'checksums': ['cf9b13e00efe0b25702cb33151e8c11eff2de07db805db217472e9d09a3be079'], + }), + ('msm', '1.6.9', { + 'checksums': ['aefcd9bb40b0167311d088d6fe23fdf7aa35deaac0f8b47ef02377cff5577023'], + }), + ('nor1mix', '1.3-0', { + 'checksums': ['9ce4ee92f889a4a4041b5ea1ff09396780785a9f12ac46f40647f74a37e327a0'], + }), + ('np', '0.60-11', { + 'checksums': ['a3b31b8ad70c42826076786b2b1b63b79cdbadfa55fe126773bc357686fd33a9'], + }), + ('polynom', '1.4-0', { + 'checksums': ['c5b788b26f7118a18d5d8e7ba93a0abf3efa6603fa48603c70ed63c038d3d4dd'], + }), + ('polspline', '1.1.19', { + 'checksums': ['953e3c4d007c3ef86ac2af3c71b272a99e8e35b194bdd58575785558c6711f66'], + }), + ('rms', '6.2-0', { + 'checksums': ['10d58cbfe39fb434223834e29e5248c9384cded23e6267cfc99367d0f5ee24b6'], + }), + ('RWekajars', '3.9.3-2', { + 'checksums': ['16e6b019aab1646f89c5203f0d6fc1cb800129e5169b15aaef30fd6236f5da1a'], + }), + ('RWeka', '0.4-43', { + 'checksums': ['8c227a5935cff180d03c30eb73bdd00b16737579c8b8503ec7fccc17e746179a'], + }), + ('slam', '0.1-48', { + 'checksums': ['0a0b32d35fd6b8d1ac021b1358e73d32ab942d274a84fbba732d6c02efdcfade'], + }), + ('tm', '0.7-8', { + 'checksums': ['b1eb1683d956db1a207b61cc086ae08b3ca7f46b6b8bc46d09ba5a4fafa66256'], + }), + ('leaps', '3.1', { + 'checksums': ['3d7c3a102ce68433ecf167ece96a7ebb4207729e4defd0ac8fc00e7003f5c3b6'], + }), + ('cNORM', '2.1.0', { + 'checksums': ['52d0f831c2bfac93999b004c6f9ef84fe8230dc954da7b3d10030640fb7e3106'], + }), + ('TraMineR', '2.2-2', { + 'checksums': ['0c0823e2f591bb669f8f36dac22199c0d2e2dfb20fc89d62e4a44575d57397a9'], + }), + ('chemometrics', '1.4.2', { + 'checksums': ['b705832fa167dc24b52b642f571ed1efd24c5f53ba60d02c7797986481b6186a'], + }), + ('FNN', '1.1.3', { + 'checksums': ['de763a25c9cfbd19d144586b9ed158135ec49cf7b812938954be54eb2dc59432'], + }), + ('miscTools', '0.6-26', { + 'checksums': ['be3c5a63ca12ce7ce4d43767a1815cd3dcf32664728ade251cfb03ea6f77fc9a'], + }), + ('maxLik', '1.5-2', { + 'checksums': ['7cee05be0624b6a76911fa7b0d66f3e1b78460e0c55ed8bc904ce1e8af7bb15d'], + }), + ('gbRd', '0.4-11', { + 'checksums': ['0251f6dd6ca987a74acc4765838b858f1edb08b71dbad9e563669b58783ea91b'], + }), + ('rbibutils', '2.2.4', { + 'checksums': ['bb9e7bd0ca472f7851704bd9a52ef7eca7540db32523f1b1f7e3bf06268cde97'], + }), + ('Rdpack', '2.1.2', { + 'checksums': ['714897ec115344d9a9d423519f4c289e71038f80abccced02a47cdc05d61a168'], + }), + ('dfidx', '0.0-4', { + 'checksums': ['04255de9b002b2f89db04144edcd72e21804e0c129a3e5082b4a21630c850702'], + }), + ('mlogit', '1.1-1', { + 'checksums': ['6f3ea97db410be929a3078422f3d354d2f17855a21bbdc7c2c09d901e233d143'], + }), + ('getopt', '1.20.3', { + 'checksums': ['531f5fdfdcd6b96a73df2b39928418de342160ac1b0043861e9ea844f9fbf57f'], + }), + ('gsalib', '2.1', { + 'checksums': ['e1b23b986c18b89a94c58d9db45e552d1bce484300461803740dacdf7c937fcc'], + }), + ('optparse', '1.7.1', { + 'checksums': ['324e304c13efd565d766766193d4ccd75e2cd949dfcfb416afc3939489071fe7'], + }), + ('labelled', '2.9.0', { + 'checksums': ['36ac0e169ee065a8bced9417efeb85d62e1504a590d4321667d8a6213285d639'], + }), + ('R.cache', '0.15.0', { + 'checksums': ['adb4d3b08f7917e10fe6188c7b90a3318701a974c58eaa09943b929382bdf126'], + }), + ('styler', '1.6.2', { + 'checksums': ['a62fcc76aac851069f33874f9eaabdd580973b619cfc625d6ec910476015f75c'], + }), + ('questionr', '0.7.5', { + 'checksums': ['a1a25d8ab228a8d3bdb6c37d50db3964fe33a3fe1c46a95331b029261977d4a3'], + }), + ('klaR', '0.6-15', { + 'checksums': ['5bfe5bc643f8a64b222317732c26e9f93be297cdc318a869f15cc9ab0d9e0fae'], + }), + ('neuRosim', '0.2-12', { + 'checksums': ['f4f718c7bea2f4b61a914023015f4c71312f8a180124dcbc2327b71b7be256c3'], + }), + ('locfit', '1.5-9.4', { + 'checksums': ['d9d3665c5f3d49f698fb4675daf40a0550601e86db3dc00f296413ceb1099ced'], + }), + ('GGally', '2.1.2', { + 'checksums': ['30352f36bf061bc98bdd5fa373ea0f23d007040bd908c7c018c8e627e0fb28e5'], + }), + ('beanplot', '1.2', { + 'checksums': ['49da299139a47171c5b4ccdea79ffbbc152894e05d552e676f135147c0c9b372'], + }), + ('clValid', '0.7', { + 'checksums': ['037da469891462021eb177f9c9e18caefa8532f08c68fb576fae1668a1f451a1'], + }), + ('DiscriMiner', '0.1-29', { + 'checksums': ['5aab7671086ef9940e030324651976456f0e84dab35edb7048693ade885228c6'], + }), + ('ellipse', '0.4.2', { + 'checksums': ['1719ce9a00b9ac4d56dbf961803085b892d3359726fda3567bb989ddfed9a5f2'], + }), + ('pbkrtest', '0.5.1', { + 'checksums': ['b2a3452003d93890f122423b3f2487dcb6925440f5b8a05578509e98b6aec7c5'], + }), + ('carData', '3.0-4', { + 'checksums': ['cda6f5e3efc1d955a4a0625e9c33f90d49f5455840e88b3bd757129b86044724'], + }), + ('maptools', '1.1-2', { + 'checksums': ['3995c96e8472cd6717fe3cbd3506358ff460b6c2cf92dbe4b00f75f507514439'], + }), + ('zip', '2.2.0', { + 'checksums': ['9f95987c964039834f770ecda2d5f7e3d3a9de553c89db2a5926c4219bf4b9d8'], + }), + ('openxlsx', '4.2.4', { + 'checksums': ['af571b3c60cea2a5975f6a394469f1c50266d4a5c5c91896b991b1b3ba8bc86e'], + }), + ('rematch', '1.0.1', { + 'checksums': ['a409dec978cd02914cdddfedc974d9b45bd2975a124d8870d52cfd7d37d47578'], + }), + ('cellranger', '1.1.0', { + 'checksums': ['5d38f288c752bbb9cea6ff830b8388bdd65a8571fd82d8d96064586bd588cf99'], + }), + ('readxl', '1.3.1', { + 'checksums': ['24b441713e2f46a3e7c6813230ad6ea4d4ddf7e0816ad76614f33094fbaaaa96'], + }), + ('rio', '0.5.27', { + 'checksums': ['e0eb616cdbba9f2d5c4489ae05336201d717ce65b0ea6854023054d1c2e3dd0a'], + }), + ('car', '3.0-11', { + 'checksums': ['b32c927206f515631ff276dbb337b0f22e9b2d851f4abb1d2c272e534c19542c'], + }), + ('flashClust', '1.01-2', { + 'checksums': ['48a7849bb86530465ff3fbfac1c273f0df4b846e67d5eee87187d250c8bf9450'], + }), + ('ggrepel', '0.9.1', { + 'checksums': ['29fb916d4799ba6503a5dd019717ffdf154d2aaae9ff1736f03e2be24af6bdfc'], + }), + ('DT', '0.19', { + 'checksums': ['baa6bdae215ab84a5dee9c0a6c55dd92135c795d13dfce3c3485519c6f0e3b13'], + }), + ('FactoMineR', '2.4', { + 'checksums': ['b9e3adce9a66b4daccc85fa67cb0769d6be230beeb126921b386ccde5db2e851'], + }), + ('flexclust', '1.4-0', { + 'checksums': ['82fe445075a795c724644864c7ee803c5dd332a89ea9e6ccf7cd1ae2d1ecfc74'], + }), + ('flexmix', '2.3-17', { + 'checksums': ['36019b7833032409ac61720dd625fa5a581a1d8bcba9045b04979c90907b5649'], + }), + ('prabclus', '2.3-2', { + 'checksums': ['f421bcbcb557281e0de4a06b15f9a496adb5c640e883c0f7bb12051efc69e441'], + }), + ('diptest', '0.76-0', { + 'checksums': ['508a5ebb161519cd0fcd156dc047b51becb216d545d62c6522496463f94ec280'], + }), + ('trimcluster', '0.1-5', { + 'checksums': ['9239f20e4a06ac2fa89e5d5d89b23a45c8c534a7264d89bede8a35d43dda518b'], + }), + ('fpc', '2.2-9', { + 'checksums': ['29b0006e96c8645645d215d3378551bd6525aaf45abde2d9f12933cf6e75fa38'], + }), + ('BiasedUrn', '1.07', { + 'checksums': ['2377c2e59d68e758a566452d7e07e88663ae61a182b9ee455d8b4269dda3228e'], + }), + ('TeachingDemos', '2.12', { + 'checksums': ['3e75405ce1affa406d6df85e06f96381412bc7a2810b25d8c81bfe64c4698644'], + }), + ('kohonen', '3.0.10', { + 'checksums': ['996956ea46a827c9f214e4f940a19304a0ff35bda707d4d7312f80d3479067b2'], + }), + ('base64', '2.0', { + 'checksums': ['8e259c2b12446197d1152b83a81bab84ccb5a5b77021a9b5645dd4c63c804bd1'], + }), + ('doRNG', '1.8.2', { + 'checksums': ['33e9d45b91b0fde2e35e911b9758d0c376049121a98a1e4c73a1edfcff11cec9'], + }), + ('nleqslv', '3.3.2', { + 'checksums': ['f54956cf67f9970bb3c6803684c84a27ac78165055745e444efc45cfecb63fed'], + }), + ('Deriv', '4.1.3', { + 'checksums': ['dbdbf5ed8babf706373ae33a937d013c46110a490aa821bcd158a70f761d0f8c'], + }), + ('RGCCA', '2.1.2', { + 'checksums': ['20f341fca8f616c556699790814debdf2ac7aa4dd9ace2071100c66af1549d7d'], + }), + ('pheatmap', '1.0.12', { + 'checksums': ['579d96ee0417203b85417780eca921969cda3acc210c859bf9dfeff11539b0c1'], + }), + ('pvclust', '2.2-0', { + 'checksums': ['7892853bacd413b5a921006429641ad308a344ca171b3081c15e4c522a8b0201'], + }), + ('RCircos', '1.2.1', { + 'checksums': ['3b9489ab05ea83ead99ca6e4a1e6830467a2064779834aff1317b42bd41bb8fd'], + }), + ('lambda.r', '1.2.4', { + 'checksums': ['d252fee39065326c6d9f45ad798076522cec05e73b8905c1b30f95a61f7801d6'], + }), + ('futile.options', '1.0.1', { + 'checksums': ['7a9cc974e09598077b242a1069f7fbf4fa7f85ffe25067f6c4c32314ef532570'], + }), + ('futile.logger', '1.4.3', { + 'checksums': ['5e8b32d65f77a86d17d90fd8690fc085aa0612df8018e4d6d6c1a60fa65776e4'], + }), + ('VennDiagram', '1.7.0', { + 'checksums': ['7537566ae94ea4bde97ca819ce5ec477943f33847a8eb0042d0859ce11ab35d1'], + }), + ('xlsxjars', '0.6.1', { + 'checksums': ['37c1517f95f8bca6e3514429394d2457b9e62383305eba288416fb53ab2e6ae6'], + }), + ('xlsx', '0.6.5', { + 'checksums': ['378c5ed475a3d7631ea1ea13e0a69d619c1a52260922abda42818752dbb32107'], + }), + ('uroot', '2.1-2', { + 'checksums': ['bd7fd9e35928d09d0e8fae9e4359a2b2bca6e6865b278436319e2f91db0e4b37'], + }), + ('forecast', '8.15', { + 'checksums': ['c73aabed083095b457ed875c240716686fbd41d1cbafa116b7b890a54b919174'], + }), + ('fma', '2.4', { + 'checksums': ['69a94c3bd464176a80232d49fcd04d478d4dd59f9bf128d6a9f46e49612d27f4'], + }), + ('expsmooth', '2.3', { + 'checksums': ['ac7da36347f983d6ec71715daefd2797fe2fc505c019f4965cff9f77ce79982a'], + }), + ('fpp', '0.5', { + 'checksums': ['9c87dd8591b8a87327cae7a03fd362a5492495a96609e5845ccbeefb96e916cb'], + }), + ('tensor', '1.5', { + 'checksums': ['e1dec23e3913a82e2c79e76313911db9050fb82711a0da227f94fc6df2d3aea6'], + }), + ('polyclip', '1.10-0', { + 'checksums': ['74dabc0dfe5a527114f0bb8f3d22f5d1ae694e6ea9345912909bae885525d34b'], + }), + ('goftest', '1.2-3', { + 'checksums': ['3a5f74b6ae7ece5b294781ae57782abe12375d61789c55ff5e92e4aacf347f19'], + }), + ('spatstat.utils', '2.2-0', { + 'checksums': ['5ad87e524285621dc4ef75c941eba933d980125293ee8f2bef5b7db02f63d7ab'], + }), + ('spatstat.data', '2.1-0', { + 'checksums': ['1b9840ad0ec7eddfa98a01e8b8a5291e5cb447c3082aa7d7b4df762577f95533'], + }), + ('spatstat.geom', '2.3-0', { + 'checksums': ['7b1746a44509a6d518799332477fffa3474217c6cb3c6b92a325525b48fce9c7'], + }), + ('spatstat.sparse', '2.0-0', { + 'checksums': ['27fbce64e21f095a5e9ac54c86f91c9f4b45eac3c2358580e04423b4beba19c7'], + }), + ('spatstat.core', '2.3-0', { + 'checksums': ['5795ec6db2961dce740c7cd39a9c1b855d92a4af351a794a9bfd634a3f1526c9'], + }), + ('spatstat.linnet', '2.3-0', { + 'checksums': ['f0c089c41db8fe83d09ecb396ce8952a593c265411fb997847201d9784f9a2f9'], + }), + ('spatstat', '2.2-0', { + 'checksums': ['8f0f90e8d5af1e2e97ef5f01e595511916290d554fc1ae3ad7b217605bd4e353'], + }), + ('pracma', '2.3.3', { + 'checksums': ['cf1f8d7724a385d9a2e1a5496d9ba0e9908940b85669fb2c506b9059722cb93c'], + }), + ('RCurl', '1.98-1.5', { + 'checksums': ['73187c9a039188ffdc255fb7fa53811a6abfb31e6375a51eae8c763b37dd698d'], + }), + ('bio3d', '2.4-2', { + 'checksums': ['91415766cda0f96557e6bc568dbce8d44254a9460f2e2d0beed0ce14ffad6ccb'], + }), + ('AUC', '0.3.0', { + 'checksums': ['e705f2c63d336249d19187f3401120d738d42d323fce905f3e157c2c56643766'], + }), + ('interpretR', '0.2.4', { + 'checksums': ['4c08a6dffd6fd5764f27812f3a085c53e6a21d59ae82d903c9c0da93fd1dd059'], + }), + ('cvAUC', '1.1.0', { + 'checksums': ['c4d8ed53b93869650aa2f666cf6d1076980cbfea7fa41f0b8227595be849738d'], + }), + ('SuperLearner', '2.0-28', { + 'checksums': ['5f42233abd48f1740c33aae1ec4ad8e9952fddb5df1ee49ff2d43d5d89f05601'], + }), + ('mediation', '4.5.0', { + 'checksums': ['210206618787c395a67689be268283df044deec7199d9860ed95218ef1e60845'], + }), + ('CVST', '0.2-2', { + 'checksums': ['854b8c983427ecf9f2f7798c4fd1c1d06762b5b0bcb1045502baadece6f78316'], + }), + ('DRR', '0.0.4', { + 'checksums': ['93e365a4907e301ae01f7d943e6bdcda71ef23c51a4759ba3c94bcf842d4e0f8'], + }), + ('dimRed', '0.2.3', { + 'checksums': ['e6e56e3f6999ebdc326e64ead5269f3aaf61dd587beefafb7536ac3890370d84'], + }), + ('ddalpha', '1.3.11', { + 'checksums': ['c30b4a3a9549cb4dc0a8e51e06f5b6e4c457c5326acc8f4680968c920f59b6e9'], + }), + ('RcppRoll', '0.3.0', { + 'checksums': ['cbff2096443a8a38a6f1dabf8c90b9e14a43d2196b412b5bfe5390393f743f6b'], + }), + ('adabag', '4.2', { + 'checksums': ['47019eb8cefc8372996fbb2642f64d4a91d7cedc192690a8d8be6e7e03cd3c81'], + }), + ('parallelMap', '1.5.1', { + 'checksums': ['c108a634a335ed47b0018f532a52b032487e239c5061f939ba32355dfefde7e1'], + }), + ('ParamHelpers', '1.14', { + 'checksums': ['b17652d0a69de3241a69f20be4ad1bfe02c413328a17f3c1ac7b73886a6ba2eb'], + }), + ('ggvis', '0.4.7', { + 'checksums': ['9e6b067e11d497c796d42156570e2481afb554c5db265f42afbb74d2ae0865e3'], + }), + ('mlr', '2.19.0', { + 'checksums': ['1149c9b453896481c85906045aa82d511d96979ddecbe5a3faf04f9f4a5e6113'], + }), + ('unbalanced', '2.0', { + 'checksums': ['9be32b1ce9d972f1abfff2fbe18f5bb5ba9c3f4fb1282063dc410b82ad4d1ea2'], + }), + ('RSNNS', '0.4-14', { + 'checksums': ['7f6262cb2b49b5d5979ccce9ded9cbb2c0b348fd7c9eabc1ea1d31c51a102c20'], + }), + ('abc.data', '1.0', { + 'checksums': ['b242f43c3d05de2e8962d25181c6b1bb6ca1852d4838868ae6241ca890b161af'], + }), + ('abc', '2.1', { + 'checksums': ['0bd2dcd4ee1915448d325fb5e66bee68e0497cbd91ef67a11b400b2fbe52ff59'], + }), + ('lhs', '1.1.3', { + 'checksums': ['e43b8d48db1cf26013697e2a798ed1d31d1ee1790f2ebfecb280176c0e0c06d1'], + }), + ('tensorA', '0.36.2', { + 'checksums': ['8e8947566bd3b65a54de4269df1abaa3d49cf5bfd2a963c3274a524c8a819ca7'], + }), + ('EasyABC', '1.5', { + 'checksums': ['1dd7b1383a7c891cafb34d9cec65d92f1511a336cff1b219e63c0aa791371b9f'], + }), + ('whisker', '0.4', { + 'checksums': ['7a86595be4f1029ec5d7152472d11b16175737e2777134e296ae97341bf8fba8'], + }), + ('roxygen2', '7.1.2', { + 'checksums': ['b3693d1eb57bb1c27134447ea7f64c353c085dd2237af7cfacc75fca3d2fc5fd'], + }), + ('git2r', '0.28.0', { + 'checksums': ['ce6d148d21d2c87757e98ef4474b2d09faded9b9b866f046bd26d4ca925e55f2'], + }), + ('rversions', '2.1.1', { + 'checksums': ['79aaacf5a1258d91ac0ddedf3c8c16a2d10d39010993dcc7b0a2638afee27cb1'], + }), + ('xopen', '1.0.0', { + 'checksums': ['e207603844d69c226142be95281ba2f4a056b9d8cbfae7791ba60535637b3bef'], + }), + ('sessioninfo', '1.2.0', { + 'checksums': ['adebf738ad3d3af9e018302d949994240311ef06c0a77c645b2f761c1a8c07df'], + }), + ('rcmdcheck', '1.4.0', { + 'checksums': ['bbd4ef7d514b8c2076196a7c4a6041d34623d55fbe73f2771758ce61fd32c9d0'], + }), + ('remotes', '2.4.1', { + 'checksums': ['d5d777b2e10d70fd0670166d539eab88ec4f7fe030f54ec5cd2703f548473276'], + }), + ('clisymbols', '1.2.0', { + 'checksums': ['0649f2ce39541820daee3ed408d765eddf83db5db639b493561f4e5fbf88efe0'], + }), + ('ini', '0.3.1', { + 'checksums': ['7b191a54019c8c52d6c2211c14878c95564154ec4865f57007953742868cd813'], + }), + ('gitcreds', '0.1.1', { + 'checksums': ['b14aaf4e910a9d2d6c65c93e645f0b0159c00898e669f917f83c03dfedb1dfea'], + }), + ('gh', '1.3.0', { + 'checksums': ['a44039054e8ca56496f2d9c7a10cdadf4a7383bc91086e768ba7e7f1fbcaed1c'], + }), + ('credentials', '1.3.1', { + 'checksums': ['8795a73a65d1ce2e9f0be66546e85231c846ba6445a11948b9816fbee20a7a60'], + }), + ('gert', '1.4.1', { + 'checksums': ['623b58f12c5530b101e91a352269fe011814b074cf7a7ed0b3cd4506390a63f8'], + }), + ('usethis', '2.1.3', { + 'checksums': ['2db075980247d854110de60e7afe6f6e0b654a3ba49d0699ff40dd516e8e9bbf'], + }), + ('covr', '3.5.1', { + 'checksums': ['a54cfc3623ea56084158ac5d7fe33f216f45191f6dcddab9c9ed4ec1d9d8ac6c'], + }), + ('devtools', '2.4.2', { + 'checksums': ['71f0a55054d293fb553702b21b91941bc5c83a933610fad6f9662bf0a6178f05'], + }), + ('Rook', '1.1-1', { + 'checksums': ['00f4ecfa4c5c57018acbb749080c07154549a6ecaa8d4130dd9de79427504903'], + }), + ('Cairo', '1.5-12.2', { + 'checksums': ['dd524105c83b82b5c3b3ee2583ef90d4cafa54b0c29817dac48b425b79f90f92'], + }), + ('RMTstat', '0.3', { + 'checksums': ['81eb4c5434d04cb66c749a434c33ceb1c07d92ba79765d4e9233c13a092ec2da'], + }), + ('Lmoments', '1.3-1', { + 'checksums': ['7c9d489a08f93fa5877e2f233ab9732e0d1b2761596b3f6ac91f2295e41a865d'], + }), + ('distillery', '1.2-1', { + 'checksums': ['4b88f0b34e472b9134ad403fb32283424f1883a5943e52c55f1fe05995efb5fa'], + }), + ('extRemes', '2.1-1', { + 'checksums': ['5a1927bb21f178ec5a3e3f862d792e690e45c16c88190e64e83aa1fb9e3ffa02'], + }), + ('tkrplot', '0.0-26', { + 'checksums': ['dd66264c2553f6927aff297c6b1c3b61867d6c63aec080f40a1e9d53cfc9d120'], + }), + ('misc3d', '0.9-1', { + 'checksums': ['a07bbb0de153e806cd79675ed478d2d9221cff825654f59a71a9cf61f4293d65'], + }), + ('multicool', '0.1-12', { + 'checksums': ['487d28d9c3c606be0cf56e2d8f8b0d79fb71949c68886ea9251fbb1c01664a36'], + }), + ('plot3D', '1.4', { + 'checksums': ['d04a45197646fb36bc38870c1c2351cb56b912bd772b1ebfa25eaeef35fda9c0'], + }), + # ('plot3Drgl', '1.0.2', { + # 'checksums': ['aa874891446a395f01791d80a5a0f1f9a1c2c41f029de3a8d5af9aa47f46a496'], + # }), + # ('OceanView', '1.0.6', { + # 'checksums': ['2c5165975d6c49fdc83a892cb0406584928dd44000c9774fffc00fbd2fec86f3'], + # }), + ('ks', '1.13.2', { + 'checksums': ['7c9e4e178adcecb0817213c0210b82d91647f4acf5c4d4056d46d286a5bff609'], + }), + ('logcondens', '2.1.6', { + 'checksums': ['785bbda00b9a25e56440e11356ac219cfbf0fdf8b08c7b0728e53a9febe7a365'], + }), + ('Iso', '0.0-18.1', { + 'checksums': ['2fa5f78a7603cbae94a5e38e791938596a053d48c609a7c120a19cbb7d93c66f'], + }), + ('penalized', '0.9-51', { + 'checksums': ['eaa80dca99981fb9eb576261f30046cfe492d014cc2bf286c447b03a92e299fd'], + }), + ('clusterRepro', '0.9', { + 'checksums': ['940d84529ff429b315cf4ad25700f93e1156ccacee7b6c38e4bdfbe2d4c6f868'], + }), + ('data.tree', '1.0.0', { + 'checksums': ['40674c90a5bd00f5185db9adbd221c6f1114043e69095249f5fa8b3044af3f5e'], + }), + ('influenceR', '0.1.0.1', { + 'checksums': ['63c46f1175fced33fb1b78d4d56e37fbee09b408945b0106dac36e3344cd4766'], + }), + ('visNetwork', '2.1.0', { + 'checksums': ['a2b91e7fbbd9d08a9929a5b2c891d9c0bca5977ad772fa37510d96656af1152f'], + }), + ('downloader', '0.4', { + 'checksums': ['1890e75b028775154023f2135cafb3e3eed0fe908138ab4f7eff1fc1b47dafab'], + }), + ('DiagrammeR', '1.0.6.1', { + 'checksums': ['be4e4c520a3692902ce405e8225aef9f3d5f0cd11fcde614f6541e981b63673d'], + }), + ('randomForestSRC', '2.13.0', { + 'checksums': ['beb981cae3a8c7232a2ca67f0a7bf3293eb44d5f1ac14913632ca8f8d4728abd'], + }), + ('sm', '2.2-5.7', { + 'checksums': ['2607a2cafc68d7e99005daf99e36f4a66eaf569ebb6b7500e962642cf58be80f'], + }), + ('pbivnorm', '0.6.0', { + 'checksums': ['07c37d507cb8f8d2d9ae51a9a6d44dfbebd8a53e93c242c4378eaddfb1cc5f16'], + }), + ('lavaan', '0.6-9', { + 'checksums': ['d404c4eb40686534f9c05f24f908cd954041f66d1072caea4a3adfa83a5f108a'], + }), + ('matrixcalc', '1.0-5', { + 'checksums': ['5906e1ef06dbc18efc7a4b370adc180ef8941b5438119703bd981d1c76a06fca'], + }), + ('arm', '1.12-2', { + 'checksums': ['816ba1c31eec00feef472c57e280488d3d233b592f6f0a1a30e4abb903cb4f5d'], + }), + ('mi', '1.0', { + 'checksums': ['34f44353101e8c3cb6bf59c5f4ff5b2391d884dcbb9d23066a11ee756b9987c0'], + }), + ('servr', '0.23', { + 'checksums': ['4492d1dabc8f62cf7f7a53c97413a664823a3916dcaf99a7b04bcb279f7b2eb8'], + }), + ('rgexf', '0.16.2', { + 'checksums': ['6ee052b0de99d0c7492366b991d345a51b3d0cc890d10a68b8670e1bd4fc8201'], + }), + ('sem', '3.1-13', { + 'checksums': ['07749f710ad800f43cacdff8f1aa4f20105a619c72be4465f29860c381242f65'], + }), + ('statnet.common', '4.5.0', { + 'checksums': ['3cdb23db86f3080462f15e29bcf3e941590bc17ea719993b301199b22d6f882f'], + }), + ('network', '1.17.1', { + 'checksums': ['fc3c3a0014f8895a11c33994c9b44c6ef6cc49c7d026cd41ae6bba5ef63005a7'], + }), + ('rle', '0.9.2', { + 'checksums': ['803cbe310af6e882e27be61d37d660dbe5910ac1ee1eff61a480bcf724a04f69'], + }), + ('sna', '2.6', { + 'checksums': ['3a016550d9f424a0613c3f5b0b680dbd3a1f20a343173d39a96034340ad9202a'], + }), + ('glasso', '1.11', { + 'checksums': ['4c37844b26f55985184a734e16b8fe880b192e3d2763614b0ab3f99b4530e30a'], + }), + ('huge', '1.3.5', { + 'checksums': ['9240866e2f773cd0ac8a02514871149d2babaa162a49e151eab9591ad42984ea'], + }), + ('d3Network', '0.5.2.1', { + 'checksums': ['5c798dc0c87c6d574abb7c1f1903346e6b0fec8adfd1df7aef5e4f9e7e3a09be'], + }), + ('BDgraph', '2.64', { + 'checksums': ['243f3af3724552049f8f4f55dd425e3313adab95e1128ae4d6551d96005fdf5e'], + }), + ('graphlayouts', '0.7.1', { + 'checksums': ['380f8ccb0b08735694e83f661fd56a0d592a78448ae91b89c290ba8582d66717'], + }), + ('tweenr', '1.0.2', { + 'checksums': ['1805f575da6705ca4e5ec1c4605222fc826ba806d9ff9af41770294fe08ff69f'], + }), + ('ggforce', '0.3.3', { + 'checksums': ['2a283bb409da6b96929863a926b153bcc59b2c6f00551805db1d1d43e5929f2f'], + }), + ('tidygraph', '1.2.0', { + 'checksums': ['057d6c42fc0144109f3ace7f5058cca7b2fe493c761daa991448b23f86b6129f'], + }), + ('ggraph', '2.0.5', { + 'checksums': ['e36ad49dba92ee8652e18b1fb197be0ceb9f0a2f8faee2194453a62578449654'], + }), + ('qgraph', '1.9', { + 'checksums': ['e1d7489c4db47878dccd34ded7e8173d58a190ad453d2e6e89f33549ccfd10aa'], + }), + ('HWxtest', '1.1.9', { + 'patches': ['HWxtest-1.1.9_add-fcommon.patch'], + 'checksums': [ + 'a37309bed4a99212ca104561239d834088217e6c5e5e136ff022544c706f25e6', # HWxtest_1.1.9.tar.gz + '4ce08c35035dbcc4edf092cdb405ae32c21c05b3786c15c0aa4bfe13bd81f451', # HWxtest-1.1.9_add-fcommon.patch + ], + }), + ('diveRsity', '1.9.90', { + 'checksums': ['b8f49cdbfbd82805206ad293fcb2dad65b962fb5523059a3e3aecaedf5c0ee86'], + }), + ('doSNOW', '1.0.19', { + 'checksums': ['4cd2d080628482f4c6ecab593313d7e42516f5ff13fbf9f90e461fcad0580738'], + }), + ('geepack', '1.3-2', { + 'checksums': ['99b53e40f7e5fda7422b143e6fee16513e2f880cb04a97cd403e98c4760670a6'], + }), + ('biom', '0.3.12', { + 'checksums': ['4ad17f7811c7346dc4923bd6596a007c177eebb1944a9f46e5674afcc5fdd5a1'], + }), + ('pim', '2.0.2', { + 'checksums': ['1195dbdbd67348dfef4b6fc34fcec643da685ebe58d34bbe049ab121aca9944f'], + }), + ('minpack.lm', '1.2-1', { + 'checksums': ['14cb7dba3ef2b46da0479b46d46c76198e129a31f6157cd8b37f178adb15d5a3'], + }), + ('rootSolve', '1.8.2.3', { + 'checksums': ['b5b3d1641642a3fd1279dbd1245f968d2331ac9588d77f872b113f7dc4594ba0'], + }), + ('diagram', '1.6.5', { + 'checksums': ['e9c03e7712e0282c5d9f2b760bafe2aac9e99a9723578d9e6369d60301f574e4'], + }), + ('FME', '1.3.6.2', { + 'checksums': ['65a200f8171e27f0a3d7ffce3e49b01561f219a11f3cb515ff613a45927ff618'], + }), + ('bmp', '0.3', { + 'checksums': ['bdf790249b932e80bc3a188a288fef079d218856cf64ffb88428d915423ea649'], + }), + ('tiff', '0.1-8', { + 'checksums': ['4b7482f70d8ecef9596b766ef1c64102c8b09208cb769c39d9e4db81cb3ba1a2'], + }), + ('readbitmap', '0.1.5', { + 'checksums': ['737d7d585eb33de2c200da64d16781e3c9522400fe2af352e1460c6a402a0291'], + }), + ('imager', '0.42.10', { + 'checksums': ['01939eb03ad2e1369a4240a128c3b246a4c56f572f1ea4967f1acdc555adaeee'], + }), + ('signal', '0.7-7', { + 'checksums': ['67a015c46d67de7548c3adb83a1b22524de75501a861d91668c3c2ea761a4e61'], + }), + ('tuneR', '1.3.3.1', { + 'checksums': ['cdcbf04ab5b547002ee5b1d3bc46145882c5a551f164cac43df71596f1edd18a'], + }), + ('pastecs', '1.3.21', { + 'checksums': ['8c1ef2affe88627f0b23295aa5edb758b8fd6089ef09f60f37c46445128b8d7c'], + }), + ('audio', '0.1-8', { + 'checksums': ['1a1c78bca63ed1fb5e30e00c593b67e1230b408e6a77c67082b41373d79b5bb4'], + }), + ('fftw', '1.0-6', { + 'checksums': ['397ef5ec354b919884f74fba4202bfc13ad11a70b16285c41677aad1d3b170ce'], + }), + ('seewave', '2.1.8', { + 'checksums': ['10e6487325ccd1c3cd64617182733f1472f3170974b32bb61a6b12ba7ddeeceb'], + }), + ('gsw', '1.0-6', { + 'checksums': ['147ce73da75777799af9cb712862ef25b52fcae146a64ce0a525460ddfea1deb'], + }), + ('wk', '0.5.0', { + 'checksums': ['71d500e0beaeed40501702adf214054d30278acb3171af6db4ae8dcdf5e7423a'], + }), + ('s2', '1.0.7', { + 'checksums': ['2010c1c6ae29938ec9cd153a8b2c06a333ea4d647932369b2fc7d0c68d6d9e3f'], + }), + ('sf', '1.0-3', { + 'checksums': ['2ee3ece4e5056fe267d76a785912a2285ddfc235b1be67b4c21b74dc39a831f8'], + }), + ('oce', '1.4-0', { + 'checksums': ['3b341448001164dc62b54a26c8f86adf50e68705ddc47615b290b950da734408'], + }), + ('ineq', '0.2-13', { + 'checksums': ['e0876403f59a3dfc2ea7ffc0d965416e1ecfdecf154e5856e5f54800b3efda25'], + }), + ('soundecology', '1.3.3', { + 'checksums': ['276164d5eb92c78726c647be16232d2443acbf7061371ddde2672b4fdb7a069a'], + }), + ('memuse', '4.2-1', { + 'checksums': ['f5e9dbaad4efbbfe219a93f446e318a00cad5b294bfc60ca2146eca894b47cf3'], + }), + ('pinfsc50', '1.2.0', { + 'checksums': ['ed1fe214b9261feef8abfbf724c2bd9070d68e99a6ea95208aff2c57bbef8794'], + }), + ('vcfR', '1.12.0', { + 'checksums': ['dd87ff010365de363864a44ca49887c0fdad0dd18d0d9c66e44e39c2d4581d52'], + }), + ('glmmML', '1.1.1', { + 'checksums': ['255fe2640933d83ef7ea5813ba8006038c18195147d1f34f47a759210a674dd4'], + }), + ('cowplot', '1.1.1', { + 'checksums': ['c7dce625b456dffc59ba100c816e16226048d12fdd29a7335dc1f6f6e12eed48'], + }), + ('tsne', '0.1-3', { + 'checksums': ['66fdf5d73e69594af529a9c4f261d972872b9b7bffd19f85c1adcd66afd80c69'], + }), + ('sn', '2.0.0', { + 'checksums': ['abd6ccdb3719b482db43ff2d5b12f2efcb8244792ec08e1176c5eb98fcc7886a'], + }), + ('tclust', '1.4-2', { + 'checksums': ['95dcd07dbd16383f07f5cea8561e7f3bf314e4a7483879841103b149fc8c65d9'], + }), + ('ranger', '0.13.1', { + 'checksums': ['60934f0accc21edeefddbb4ddebfdd7cd10a3d3e90b31aa2e6e4b7f50d632d0a'], + }), + ('hexbin', '1.28.2', { + 'checksums': ['6241f8d3a6c6be2c1c693c3ddb99554bc103e3c6cf602d0c2787c0ce6fd1702d'], + }), + ('lobstr', '1.1.1', { + 'checksums': ['b8c9ce00095bd4f304b4883ef71da24572022f0632a18c3e1ba317814e70716e'], + }), + ('pryr', '0.1.5', { + 'checksums': ['7b1653ec51850f4633cee8e2eb7d0b2724fb587b801539488b426cf88f0f770b'], + }), + ('moments', '0.14', { + 'checksums': ['2a3b81e60dafdd092d2bdd3513d7038855ca7d113dc71df1229f7518382a3e39'], + }), + ('laeken', '0.5.2', { + 'checksums': ['22790f7157f23eb0b7b0b89e2ea53478fb3c0d15b5be8ad11525d3e6d5626cdc'], + }), + ('VIM', '6.1.1', { + 'checksums': ['7581adca64cf20b93d5a111da83f663215b4529868b065b3463c4238bca97739'], + }), + ('smoother', '1.1', { + 'checksums': ['91b55b82f805cfa1deedacc0a4e844a2132aa59df593f3b05676954cf70a195b'], + }), + ('dynamicTreeCut', '1.63-1', { + 'checksums': ['831307f64eddd68dcf01bbe2963be99e5cde65a636a13ce9de229777285e4db9'], + }), + ('beeswarm', '0.4.0', { + 'checksums': ['51f4339bf4080a2be84bb49a844c636625657fbed994abeaa42aead916c3d504'], + }), + ('vipor', '0.4.5', { + 'checksums': ['7d19251ac37639d6a0fed2d30f1af4e578785677df5e53dcdb2a22771a604f84'], + }), + ('ggbeeswarm', '0.6.0', { + 'checksums': ['bbac8552f67ff1945180fbcda83f7f1c47908f27ba4e84921a39c45d6e123333'], + }), + ('shinydashboard', '0.7.2', { + 'checksums': ['a56ee48572649830cd8d82f1caa2099411461e19e19223cbad36a375299f3843'], + }), + ('rrcov', '1.6-0', { + 'checksums': ['795f3a49b3e17c9c6e0fdd865e81a0402cefda970032c8299bcf2056ca7ec944'], + }), + ('WriteXLS', '6.3.0', { + 'checksums': ['0b1d987abe4b08f6a32003b77d1cfc2eefdc5a478382e77ca0da98bccf6e526b'], + }), + ('bst', '0.3-23', { + 'checksums': ['70957f1db8800bf0d628a9e6f72b7273329786dd119427790b326844591aa0f3'], + }), + ('pamr', '1.56.1', { + 'checksums': ['d0e527f2336ee4beee91eefb2a8f0dfa96413d9b5a5841d6fc7ff821e67c9779'], + }), + ('WeightSVM', '1.7-9', { + 'checksums': ['983733b618631d9ad754fb12f5e576912aff1f529cafdee4fddfd38d81ccc710'], + }), + ('mpath', '0.4-2.19', { + 'checksums': ['fa0d92984910b8f556677850e3d899bc675724f0e2a3a73629d2700040335afe'], + }), + ('timereg', '2.0.1', { + 'checksums': ['38429ae21d9d090ed968d2e0c06cd0310cc304e974c353a97cde3d2e49f138d7'], + }), + ('peperr', '1.3', { + 'checksums': ['64d30b0ec09bf9b8f7b6edce67dd0f9e0e3dbe665fec8f5411f74142e53e9f5d'], + }), + ('heatmap3', '1.1.9', { + 'checksums': ['594c33947b2be2cc8a592075f41a0df2398c892add7d63a15c613a5eeb8fdb69'], + }), + ('GlobalOptions', '0.1.2', { + 'checksums': ['47890699668cfa9900a829c51f8a32e02a7a7764ad07cfac972aad66f839753e'], + }), + ('circlize', '0.4.13', { + 'checksums': ['6cbadbf8e8b1abbd71a79080677d2b95f2bdd18f2e4d707c32d5c2ff26c5369b'], + }), + ('GetoptLong', '1.0.5', { + 'checksums': ['8c237986ed3dfb72d956ad865ef7768644eebf144675ad66140acfd1aca9d701'], + }), + ('dendextend', '1.15.2', { + 'checksums': ['4ba3885b66694589d455ffef31c218fe653fa25aff3efb7e8db6c25008d2921b'], + }), + ('RInside', '0.2.16', { + 'checksums': ['7ae4ade128ea05f37068d59e610822ff0b277f9d39d8900f7eb31759ad5a2a0e'], + }), + ('limSolve', '1.5.6', { + 'checksums': ['b97ea9930383634c8112cdbc42f71c4e93fe0e7bfaa8f401921835cb44cb49a0'], + }), + ('dbplyr', '2.1.1', { + 'checksums': ['aba4cf47b85ab240fd3ec4cd8d512f6e1958201e151577c1a2ebc3d6ebc5bc08'], + }), + ('modelr', '0.1.8', { + 'checksums': ['825ba77d95d60cfb94920bec910872ca2ffe7790a44148b2992be2759cb361c4'], + }), + ('debugme', '1.1.0', { + 'checksums': ['4dae0e2450d6689a6eab560e36f8a7c63853abbab64994028220b8fd4b793ab1'], + }), + ('reprex', '2.0.1', { + 'checksums': ['0e6d8667cacb63135476a766fba3a4f91e5ad86274ea66d2b1e6d773b5ca6426'], + }), + ('selectr', '0.4-2', { + 'checksums': ['5588aed05f3f5ee63c0d29953ef53da5dac7afccfdd04b7b22ef24e1e3b0c127'], + }), + ('rvest', '1.0.2', { + 'checksums': ['89bb477e0944c80298a52ccf650db8f6377fd7ed3c1bc7034d000f695fdf05a4'], + }), + ('dtplyr', '1.1.0', { + 'checksums': ['99681b7285d7d5086e5595ca6bbeebf7f4e2ee358a32b694cd9d35916cdfc732'], + }), + ('gargle', '1.2.0', { + 'checksums': ['4d46ca2933f19429ca5a2cfe47b4130a75c7cd9931c7758ade55bac0c091d73b'], + }), + ('googledrive', '2.0.0', { + 'checksums': ['605c469a6a086ef4b049909c2e20a35411c165ce7ce4f62d68fd39ffed8c5a26'], + }), + ('ids', '1.0.1', { + 'checksums': ['b6212a186063c23116c5cbd3cca65dbb8977dd737261e4526ebee8f64852cfe8'], + }), + ('googlesheets4', '1.0.0', { + 'checksums': ['0a107d76aac99d6db48d97ce55810c1412b2197f457b8476f676169a36c7cc7a'], + }), + ('tidyverse', '1.3.1', { + 'checksums': ['83cf95109d4606236274f5a8ec2693855bf75d3a1b3bc1ab4426dcc275ed6632'], + }), + ('R.rsp', '0.44.0', { + 'checksums': ['8969075bdcabd43bad40eef6b82223e119426279fded041163fd41e55cee3a59'], + }), + ('gdistance', '1.3-6', { + 'checksums': ['2ccabeb2f8cf44630c0bd2da79815fe357b812737ebece1bed8f90b27c126a24'], + }), + ('vioplot', '0.3.7', { + 'checksums': ['06475d9a47644245ec91598e9aaef7db1c393802d9fc314420ac5139ae56adb6'], + }), + ('emulator', '1.2-21', { + 'checksums': ['9b50b2c1e673dbc5e846a4fa72e8bd03434add9f659bde6d7b0c4f1bbd713346'], + }), + ('gmm', '1.6-6', { + 'checksums': ['b1b321ad1b4a4a14a2825a2c3eb939ce2f2bcef995247a1d638eca250e59739b'], + }), + ('tmvtnorm', '1.4-10', { + 'checksums': ['1a9f35e9b4899672e9c0b263affdc322ecb52ec198b2bb015af9d022faad73f0'], + }), + ('IDPmisc', '1.1.20', { + 'checksums': ['bcb9cd7b8097e5089d1936286ef310ac2030ea7791350df706382ba470afc67f'], + }), + ('gap', '1.2.3-1', { + 'checksums': ['343ae58ca91e75147ae3961285c3413bdf6dedf7cb4743a822a6c5b16d1b89e7'], + }), + ('qrnn', '2.0.5', { + 'checksums': ['3bd83ee8bd83941f9defdab1b5573d0ceca02bf06759a67665e5b9358ff92f52'], + }), + ('TMB', '1.7.22', { + 'checksums': ['c24125e1a37ed2b3c2554133183465cb6f3c0021cd4d4609c61336f59c3bd384'], + }), + ('glmmTMB', '1.1.2.3', { + 'checksums': ['55631e001ff3f1d8e419e3b0b5555317713c733c11a2f7d4db6434d8c4e7dcf9'], + }), + ('gmp', '0.6-2', { + 'checksums': ['6bfcb45b3f1e7da27d8773f911027355cab371d150c3dabf7dbaf8fba85b7f0e'], + }), + ('ROI', '1.0-0', { + 'checksums': ['b0d87fb4ed2137d982734f3c5cdc0305aabe6e80f95de29655d02a9e82a0a341'], + }), + ('Rglpk', '0.6-4', { + 'checksums': ['a28dbc3130b9618d6ed2ef718d2c55df8ed8c44a47161097c53fe15fa3bfbfa6'], + }), + ('ROI.plugin.glpk', '1.0-0', { + 'checksums': ['b361b0d4222d74b21432cdc6990762affecdbcec8fd6bbdb13b78b59cb04b444'], + }), + ('spaMM', '3.9.13', { + 'checksums': ['f9ded29106c656ff15ddc2564c16d44b77f08dac1f2dea5720028923e83e2514'], + }), + ('qgam', '1.3.3', { + 'checksums': ['9a68fe4e74f4188862f7c01d682d50ffadd96ce7b98383404472309c87e3a26f'], + }), + ('DHARMa', '0.4.4', { + 'checksums': ['b5a073f84faf7144f2074a43f619f8f264773afb0e09ca0294735e792552edca'], + }), + ('mvnfast', '0.2.7', { + 'checksums': ['b67d50936c9a466977669ef6bb7b23df8e7c90a820ac916328c20e41ef8e0b72'], + }), + ('bridgesampling', '1.1-2', { + 'checksums': ['54ecd39aa2e36d4d521d3d36425f9fe56a3f8547df6048c814c5931d790f3e6b'], + }), + ('BayesianTools', '0.1.7', { + 'checksums': ['af49389bdeb794da3c39e1d63f59e6219438ecb8613c5ef523b00c6fed5a600c'], + }), + ('gomms', '1.0', { + 'checksums': ['52828c6fe9b78d66bde5474e45ff153efdb153f2bd9f0e52a20a668e842f2dc5'], + }), + ('feather', '0.3.5', { + 'checksums': ['50ff06d5e24d38b5d5d62f84582861bd353b82363e37623f95529b520504adbf'], + }), + ('dummies', '1.5.6', { + 'checksums': ['7551bc2df0830b98c53582cac32145d5ce21f5a61d97e2bb69fd848e3323c805'], + }), + ('SimSeq', '1.4.0', { + 'checksums': ['5ab9d4fe2cb1b7634432ff125a9e04d2f574fed06246a93859f8004e10790f19'], + }), + ('uniqueAtomMat', '0.1-3-2', { + 'checksums': ['f7024e73274e1e76a870ce5e26bd58f76e8f6df0aa9775c631b861d83f4f53d7'], + }), + ('PoissonSeq', '1.1.2', { + 'checksums': ['6f3dc30ad22e33e4fcfa37b3427c093d591c02f1b89a014d85e63203f6031dc2'], + }), + ('aod', '1.3.1', { + 'checksums': ['052d8802500fcfdb3b37a8e3e6f3fbd5c3a54e48c3f68122402d2ea3a15403bc'], + }), + ('cghFLasso', '0.2-1', { + 'checksums': ['6e697959b35a3ceb2baa1542ef81f0335006a5a9c937f0173c6483979cb4302c'], + }), + ('svd', '0.5', { + 'checksums': ['d042d448671355d0664d37fd64dc90932eb780e6494c479d4431d1faae2071a1'], + }), + ('Rssa', '1.0.4', { + 'checksums': ['4115b516f6782d52f02695bbbd52921a474aafc7232d49aca85010f1c33b08a7'], + }), + ('JBTools', '0.7.2.9', { + 'checksums': ['b33cfa17339df7113176ad1832cbb0533acf5d25c36b95e888f561d586c5d62f'], + }), + ('RUnit', '0.4.32', { + 'checksums': ['23a393059989000734898685d0d5509ece219879713eb09083f7707f167f81f1'], + }), + ('DistributionUtils', '0.6-0', { + 'checksums': ['7443d6cd154760d55b6954142908eae30385672c4f3f838dd49876ec2f297823'], + }), + ('gapfill', '0.9.6-1', { + 'checksums': ['22f04755873e34a9077bb1b1de8d16f5bc56cb8c395c4f797f9ad0b209b1b996'], + }), + ('gee', '4.13-20', { + 'checksums': ['53014cee059bd87dc22f9679dfbf18fe6813b9ab41dfe90361921159edfbf798'], + }), + ('Matching', '4.9-11', { + 'checksums': ['1c71ca8462b3168839bf446ee8e5b4baa6288a72f8c8590c9d7565c91fba7688'], + }), + ('MatchIt', '4.3.0', { + 'checksums': ['ca897ab81a7c19ebd4cbc67011c6223668ad5a8876b10f665a86f5f79ed85446'], + }), + ('RItools', '0.1-17', { + 'checksums': ['75654780e9ca39cb3c43acfaca74080ad74de50f92c5e36e95694aafdfdc0cea'], + }), + ('mitools', '2.4', { + 'checksums': ['f204f3774e29d79810f579f128de892539518f2cbe6ed237e08c8e7283155d30'], + }), + ('survey', '4.1-1', { + 'checksums': ['05e89a1678a39e32bfb41af8a31d643b04fc4d2660a96e701825e6bffcd75a52'], + }), + ('optmatch', '0.9-15', { + 'checksums': ['7500fdbed939b7f16603a097d734a332793a3ac68e6a80c7957bef2a567691d8'], + }), + ('SPAtest', '3.1.2', { + 'checksums': ['b3d74ed2b0a6475a9966dd50eb5d363d0b2985636271dfbf82f0472b8d22b9f4'], + }), + ('SKAT', '2.0.1', { + 'checksums': ['c8637cf5786b926f6bbef3f4ef1d3af5130cc0cfd9094d4835839724b2d0e8c7'], + }), + ('GillespieSSA', '0.6.1', { + 'checksums': ['272e9b6b26001d166fd7ce8d04f32831ba23c676075fbd1e922e27ba2c962052'], + }), + ('startupmsg', '0.9.6', { + 'checksums': ['1d60ff13bb260630f797bde66a377a5d4cd65d78ae81a3936dc4374572ec786e'], + }), + ('distr', '2.8.0', { + 'checksums': ['bb7df05d6b946bcdbbec2e3397c7c7e349b537cabfcbb13a34bcf6312a71ceb7'], + }), + ('distrEx', '2.8.0', { + 'checksums': ['b064cde7d63ce93ec9969c8c4463c1e327758b6f8ea7765217d77f9ba9d590bf'], + }), + ('minerva', '1.5.10', { + 'checksums': ['2f26353d8fcc989ac698c4e45bb683801b1a7bb60b14903d05a4d73c629c590f'], + }), + ('KODAMA', '1.8', { + 'checksums': ['1ed9c14826c3c549c7323672cee04a71048c505c130e739ef5a95ed9bfe43444'], + }), + ('locfdr', '1.1-8', { + 'checksums': ['42d6e12593ae6d541e6813a140b92591dabeb1df94432a515507fc2eee9a54b9'], + }), + ('ica', '1.0-2', { + 'checksums': ['e721596fc6175d3270a60d5e0b5b98be103a8fd0dd93ef16680af21fe0b54179'], + }), + ('dtw', '1.22-3', { + 'checksums': ['df7cf9adf613422ddb22a160597eb5f5475ab6c67c0d790092edb7f72ba98f00'], + }), + ('SDMTools', '1.1-221.2', { + 'checksums': ['f0dd8c5f98d2f2c012536fa56d8f7a58aaf0c11cbe3527e66d4ee3194f6a6cf7'], + }), + ('ggridges', '0.5.3', { + 'checksums': ['f5eafab17f2d4a8a2a83821ad3e96ae7c26b62bbce9de414484c657383c7b42e'], + }), + ('TFisher', '0.2.0', { + 'checksums': ['bd9b7484d6fba0165841596275b446f85ba446d40e92f3b9cb37381a3827e76f'], + }), + ('lsei', '1.3-0', { + 'checksums': ['6289058f652989ca8a5ad6fa324ce1762cc9e36c42559c00929b70f762066ab6'], + }), + ('npsurv', '0.5-0', { + 'checksums': ['bc87db76e7017e178c2832a684fcd49c42e20054644b21b586413d26c8821dc6'], + }), + ('fitdistrplus', '1.1-6', { + 'checksums': ['17c2990041a3bb7479f3c3a6d13d96c989db8eaddab17eff7e1fbe172a5b96be'], + }), + ('here', '1.0.1', { + 'checksums': ['08ed908033420d3d665c87248b3a14d1b6e2b37844bf736be620578c20ca346b'], + }), + ('reticulate', '1.22', { + 'checksums': ['b06e7b39abf08ae9604ea26d02e3c6e4ef6dcc4b6c7c98118fd85192f615f56c'], + }), + ('hdf5r', '1.3.4', { + 'installopts': '--configure-args="--with-hdf5=$EBROOTHDF5/bin/h5cc"', + 'preinstallopts': "unset LIBS && ", + 'checksums': ['64d057601841b604e04e8514d33a1e5e515dcbfd9cc8369d40d717d7036fab53'], + }), + ('DTRreg', '1.7', { + 'checksums': ['f0fad2244d960cec8fc33d9a1078df359ceb0aadff980ce6149aa9f01c62223b'], + }), + ('pulsar', '0.3.7', { + 'checksums': ['78c9f7e3b2bf8a8d16a81d6ee43bb05b0c360219be473d920c8c8ccb2aba4e3d'], + }), + ('bayesm', '3.1-4', { + 'checksums': ['061b216c62bc72eab8d646ad4075f2f78823f9913344a781fa53ea7cf4a48f94'], + }), + ('gsl', '2.1-7', { + 'checksums': ['1a86af59d9864ecf2a85d5371076786e7a0491d6d6b4d5c1a7590ea8919f3b17'], + }), + ('energy', '1.7-8', { + 'checksums': ['de08e8de037bb30068bbf0c1880b153a586d342304681f4ba103ab808c7f4789'], + }), + ('compositions', '2.0-2', { + 'checksums': ['b5e47a14a1bb010b47b4ad7fbfabfead1a08b009b92e1f7d4bd3bd7f8589f216'], + }), + ('clustree', '0.4.3', { + 'checksums': ['5ff3afc3fb3e1d20d033328935084de574250d29545c0a5b69180fe4846fbe53'], + }), + ('plotly', '4.10.0', { + 'checksums': ['bd995c654dbc8c09a84adaba8def99766919e3894caf18b551bb26b2f591389a'], + }), + ('tweedie', '2.3.3', { + 'checksums': ['a032cad512dac37a8619e6f66cb513eb82a88a5a2ffbe91e92c2d44d1756d0d9'], + }), + ('RcppGSL', '0.3.10', { + 'checksums': ['8612087da02fb791f427fed310c23d0482a8eb60fb089119f018878143f95451'], + }), + ('mvabund', '4.1.12', { + 'checksums': ['c1af39dbfd048c9bb367765ee266be49622e1a5d964186920a2d47bec4e6f780'], + }), + ('fishMod', '0.29', { + 'checksums': ['5989e49ca6d6b2c5d514655e61f75b019528a8c975f0d6056143f17dc4277a5d'], + }), + ('gllvm', '1.3.1', { + 'checksums': ['cd3f72b84f0c722e9c0b21c2b2de7683ec742345d7f8e62f67c8c93342c1a5c6'], + }), + ('grpreg', '3.4.0', { + 'checksums': ['fd57d20baf63d2cc5821998bca5c3fdcbe46c933c9553caa492911b12654d6ad'], + }), + ('trust', '0.1-8', { + 'checksums': ['952e348b62aec35988b103fd152329662cb6a451538f184549252fbf49d7dcac'], + }), + ('lpSolveAPI', '5.5.2.0-17.7', { + 'checksums': ['9ebc8e45ad73eb51e0b25049598a5bc758370cf89508e2328cf4bd93d68d55bb'], + }), + ('ergm', version, { + 'checksums': ['1abc6ef53376a4132530c376ce477ae7a2590e95fe8feb011c0da9cfb4d49ba0'], + }), + ('networkDynamic', '0.11.0', { + 'checksums': ['aa21caaddce75c22e08b94adfb6036f5ee151ffb79d174ad250fe4592d27dad2'], + }), + ('tergm', '4.0.2', { + 'checksums': ['5ab1d61166c90f90c77edd12544b5946e01a933cc3e7ca609cae72075b742a64'], + }), + ('ergm.count', '4.0.2', { + 'checksums': ['316ed3cbe4b472eec79e8a5fd4183ce953070f6d98056d87423bd6d9ac155bd1'], + }), + ('tsna', '0.3.4', { + 'checksums': ['08fd9612388b86077cd877a48f81068d63f20291836eedbc727c9e00c1a2b4d2'], + }), + ('statnet', '2019.6', { + 'checksums': ['0903e1a81ed1b6289359cefd12da1424c92456d19e062c3f74197b69e536b29d'], + }), + ('aggregation', '1.0.1', { + 'checksums': ['86f88a02479ddc8506bafb154117ebc3b1a4a44fa308e0193c8c315109302f49'], + }), + ('ComICS', '1.0.4', { + 'checksums': ['0af7901215876f95f309d7da6e633c38e4d7faf04112dd6fd343bc15fc593a2f'], + }), + ('dtangle', '2.0.9', { + 'checksums': ['c375068c1877c2e8cdc5601cfd5a9c821645c3dff90ddef64817f788f372e179'], + }), + ('mcmc', '0.9-7', { + 'checksums': ['b7c4d3d5f9364c67a4a3cd49296a61c315ad9bd49324a22deccbacb314aa8260'], + }), + ('MCMCpack', '1.6-0', { + 'checksums': ['b5b9493457d11d4dca12f7732bd1b3eb1443852977c8ee78393126f13deaf29b'], + }), + ('shinythemes', '1.2.0', { + 'checksums': ['37d68569ce838c7da9f0ea7e2b162ecf38fba2ae448a4888b6dd29c4bb5b2963'], + }), + ('csSAM', '1.2.4', { + 'checksums': ['3d6442ad8c41fa84633cbbc275cd67e88490a160927a5c55d29da55a36e148d7'], + }), + ('bridgedist', '0.1.0', { + 'checksums': ['dc7c1c8874d6cfa34d550d9af194389e13471dfbc55049a1ab66db112fbf1343'], + }), + ('asnipe', '1.1.16', { + 'checksums': ['be50f9fdef0f4bf9676b9c3c2906d0431afc678af55cf48b1119f9fc0adac44f'], + }), + ('liquidSVM', '1.2.4', { + 'patches': ['liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch'], + 'preinstallopts': 'LIQUIDSVM_TARGET="empty"', + 'checksums': [ + '15a9c7f2930e2ed3f4c5bcd9b042884ea580d2b2e52e1c68041600c196046aba', # liquidSVM_1.2.4.tar.gz + # liquidSVM-1.2.4-fix_ppc_and_aarch64_build.patch + '46b09e441c3b59af535f20d8db0dee7f1d6a7ddd511175d252115b53cb8b86f8', + ], + }), + ('oddsratio', '2.0.1', { + 'checksums': ['2097e7a8bf623379d55652de5dce4946d05163e85d30df50dc19055962bf60b5'], + }), + ('mltools', '0.3.5', { + 'checksums': ['7093ffceccdf5d4c3f045d8c8143deaa8ab79935cc6d5463973ffc7d3812bb10'], + }), + ('h2o', '3.34.0.3', { + 'checksums': ['2a707b9f7271eae611c9e81b13d2024b8829f6b06b3c41c5b97de1aef591931e'], + }), + ('mlegp', '3.1.8', { + 'checksums': ['eac1df085a608451828575028ca05b78dc6b5035da14cabc141bfee5ef986de9'], + }), + ('itertools', '0.1-3', { + 'checksums': ['b69b0781318e175532ad2d4f2840553bade9637e04de215b581704b5635c45d3'], + }), + ('missForest', '1.4', { + 'checksums': ['f785804b03bdf424e1c76095989a803afb3b47d6bebca9a6832074b6326c0278'], + }), + ('bartMachineJARs', '1.1', { + 'checksums': ['f2c31cb94d7485174a2519771127a102e35b9fe7f665e27beda3e76a56feeef2'], + }), + ('bartMachine', '1.2.6', { + 'checksums': ['5e1ac0033da5b41a96d95782886a167e51ff8e43822800e8d40874ff9c13847f'], + }), + ('lqa', '1.0-3', { + 'checksums': ['3889675dc4c8cbafeefe118f4f20c3bd3789d4875bb725933571f9991a133990'], + }), + ('PresenceAbsence', '1.1.9', { + 'checksums': ['1a30b0a4317ea227d674ac873ab94f87f8326490304e5b08ad58953cdf23169f'], + }), + ('GUTS', '1.1.1', { + 'checksums': ['094b8f51719cc36ddc56e3412dbb146eafc93c5e8fbb2c5999c2e80ea7a7d216'], + }), + ('GenSA', '1.1.7', { + 'checksums': ['9d99d3d0a4b7770c3c3a6de44206811272d78ab94481713a8c369f7d6ae7b80f'], + }), + ('parsedate', '1.2.1', { + 'checksums': ['6b078da4a47904194bfe29e2c3b6fbbf6e3ad190e33979f840a3ea366c708616'], + }), + ('circular', '0.4-93', { + 'checksums': ['76cee2393757390ad91d3db3e5aeb2c2d34c0a46822b7941498571a473417142'], + }), + ('cobs', '1.3-4', { + 'checksums': ['a1c7b77e4ca097349884fd1c0d863d74f9092766131094d603f34d33ab2e3c42'], + }), + ('resample', '0.4', { + 'checksums': ['f0d5f735e1b812612720845d79167a19f713a438fd10a6a3206e667045fd93e5'], + }), + ('MIIVsem', '0.5.8', { + 'checksums': ['a908f51e1598290d25864c358d57201bd50c1c40775d4d0405cbc8077bee61e1'], + }), + ('medflex', '0.6-7', { + 'checksums': ['d28107a4bbbb0ace1d571f0aa6884ee4c50d7731c04bceba207fd55a39b83b9c'], + }), + ('Rserve', '1.7-3.1', { + 'checksums': ['3ba1e919706e16a8632def5f45d666b6e44eafa6c14b57064d6ddf3415038f99'], + }), + ('spls', '2.2-3', { + 'checksums': ['bbd693da80487eef2939c37aba199f6d811ec289828c763d9416a05fa202ab2e'], + }), + ('Boruta', '7.0.0', { + 'checksums': ['6ff520d27d68637058c33a34c547a656bb44d5e351b7cc7afed6cd4216275c78'], + }), + ('dr', '3.0.10', { + 'checksums': ['ce523c1bdb62a9dda30afc12b1dd96975cc34695c61913012236f3b80e24bf36'], + }), + ('CovSel', '1.2.1', { + 'checksums': ['b375d00cc567e125ff106b4357654f43bba3abcadeed2238b6dea4b7a68fda09'], + }), + ('tmle', '1.5.0.2', { + 'checksums': ['4772c352e8d3d9b5a0b7480c0e0962de4f5060fb7bf3fcb8ee4fa1cb10f93fd4'], + }), + ('ctmle', '0.1.2', { + 'checksums': ['e3fa0722cd87aa0e0b209c2dddf3fc44c6d09993f1e66a6c43285fe950948161'], + }), + ('BayesPen', '1.0', { + 'checksums': ['772df9ae12cd8a3da1d5b7d1f1629602c7693f0eb03945784df2809e2bb061b0'], + }), + ('inline', '0.3.19', { + 'checksums': ['0ee9309bb7dab0b97761ddd18381aa12bd7d54678ccd7bec00784e831f4c99d5'], + }), + ('BMA', '3.18.15', { + 'checksums': ['4be0d52f433503631e9574944067f613bafba129ebe27396bcfccb3b95992b1a'], + }), + ('BCEE', '1.3.0', { + 'checksums': ['82afc9b8c6d617f5f728341960ae32922194f637c550916b3bea12c231414fa7'], + }), + ('bacr', '1.0.1', { + 'checksums': ['c847272e2c03fd08ed79b3b739f57fe881af77404b6fd087caa0c398c90ef993'], + }), + ('clue', '0.3-60', { + 'checksums': ['6d21ddfd0d621ed3bac861890c600884b6ed5ff7d2a36c9778b892636dbbef2a'], + }), + ('bdsmatrix', '1.3-4', { + 'checksums': ['251e21f433a016ec85e478811ea3ad34c572eb26137447f48d1bbf3cc8bb06ea'], + }), + ('fftwtools', '0.9-11', { + 'checksums': ['f1f0c9a9086c7b2f72c5fb0334717cc917213a004eaef8448eab4940c9852c7f'], + }), + ('imagerExtra', '1.3.2', { + 'checksums': ['0ebfa1eabb89459d774630ab73c7a97a93b9481ea5afc55482975475acebd5b8'], + }), + ('MALDIquant', '1.20', { + 'checksums': ['fff39d5df295b937cdad57b73d4e06e925f69e68784ef58b5dfcd3cf500931c1'], + }), + ('threejs', '0.3.3', { + 'checksums': ['76c759c8b20fb34f4f7a01cbd1b961296e1f19f4df6dded69aae7f1bca80219c'], + }), + ('LaplacesDemon', '16.1.6', { + 'checksums': ['57b53882fd7a195b38bbdbbf0b17745405eb3159b1b42f7f11ce80c78ab94eb7'], + }), + ('rda', '1.0.2-2.1', { + 'checksums': ['eea3a51a2e132a023146bfbc0c384f5373eb3ea2b61743d7658be86a5b04949e'], + }), + ('sampling', '2.9', { + 'checksums': ['7f5ba5978f6cdbbbdb6f51958197b28b6fc63e7eeee59e6845ea09fb37d1b187'], + }), + ('lda', '1.4.2', { + 'checksums': ['5606a1e1bc24706988853528023f7a004c725791ae1a7309f1aea2fc6681240f'], + }), + ('jiebaRD', '0.1', { + 'checksums': ['045ee670f5378fe325a45b40fd55136b355cbb225e088cb229f512c51abb4df1'], + }), + ('jiebaR', '0.11', { + 'checksums': ['adde8b0b21c01ec344735d49cd33929511086719c99f8e10dce4ca9479276623'], + }), + ('hdm', '0.3.1', { + 'checksums': ['ba087565e9e0a8ea30a6095919141895fd76b7f3c05a03e60e9e24e602732bce'], + }), + ('abe', '3.0.1', { + 'checksums': ['66d2e9ac78ba64b7d27b22b647fc00378ea832f868e51c18df50d6fffb8029b8'], + }), + ('SignifReg', '4.2', { + 'checksums': ['53d2ff3ddbb398655b245ad3a19c028d6fb6bb1d59adeb30bb3497606733fc2d'], + }), + ('bbmle', '1.0.24', { + 'checksums': ['01edc00479fabf7491e47ff59bc4adbe6f0d4c23d22e76d1d49c4c1b6b4693ad'], + }), + ('emdbook', '1.3.12', { + 'checksums': ['0646caf9e15aaa61ff917a4b5fdf82c06ac17ef221a61dec3fbb554e7bff4353'], + }), + ('SOAR', '0.99-11', { + 'checksums': ['d5a0fba3664087308ce5295a1d57d10bad149eb9771b4fe67478deae4b7f68d8'], + }), + ('rasterVis', '0.51.0', { + 'checksums': ['5225334add4dd3502044cf80a00543b766568c2d93c47af180f66a76942d76be'], + }), + ('tictoc', '1.0.1', { + 'checksums': ['a09a1535c417ddf6637bbbda5fca6edab6c7f7b252a64e57e99d4d0748712705'], + }), + ('ISOcodes', '2021.02.24', { + 'checksums': ['152769bcb4ae99d06a767384541c2000c94990a2c6983780837f85e885b539a6'], + }), + ('stopwords', '2.3', { + 'checksums': ['c5ec1c6ab1bad1786d87d7823d4b63abc94d2fd84ed7d8e985906e96fb6321b2'], + }), + ('janeaustenr', '0.1.5', { + 'checksums': ['992f6673653daf7010fe176993a01cd4127d9a88be428da8da7a28241826d6f3'], + }), + ('SnowballC', '0.7.0', { + 'checksums': ['b10fee9d322f567a22c580b49b5d4ba1c86eae40a71794ca92552c726b3895f3'], + }), + ('tokenizers', '0.2.1', { + 'checksums': ['28617cdc5ddef5276abfe14a2642999833322b6c34697de1d4e9d6dc7670dd00'], + }), + ('hunspell', '3.0.1', { + 'checksums': ['1fedbb913bc13c790d2fabfe4edda0a987db3a078bea8c0ca9b777d20af08662'], + }), + ('topicmodels', '0.2-12', { + 'checksums': ['afd83a4381bf39e470446ebefd41ed03f314be400c1b2f702a4b1060eb8fd1b4'], + }), + ('tidytext', '0.3.2', { + 'checksums': ['6fe0ada78ee2cdf77c16e519a29b9baff61d8e23ab56aa0a9adc1b2a99a6472b'], + }), + ('splitstackshape', '1.4.8', { + 'checksums': ['656032c3f1e3dd5b8a3ee19ffcae617e07104c0e342fc3da4d863637a770fe56'], + }), + ('grImport2', '0.2-0', { + 'checksums': ['a102a2d877e42cd4e4e346e5510a77b2f3e57b43ae3c6d5c272fdceb506b00a7'], + }), + ('preseqR', '4.0.0', { + 'checksums': ['0143db473fb9a811f9cf582a348226a5763e62d9857ce3ef4ec41412abb559bc'], + }), + ('idr', '1.2', { + 'checksums': ['8bbfdf82c8c2b5c73eb079127e198b6cb65c437bb36729f502c7bcd6037fdb16'], + }), + ('entropy', '1.3.1', { + 'checksums': ['6f5a89f5ce0e90cbed1695b81259326c976e7a8f538157e223ee5f63b54412b8'], + }), + ('kedd', '1.0.3', { + 'checksums': ['38760abd8c8e8f69ad85ca7992803060acc44ce68358de1763bd2415fdf83c9f'], + }), + ('HiddenMarkov', '1.8-13', { + 'checksums': ['7186d23e561818f3e1f01376a4fb2af9ccee775ce5afc1e3175f3b07a81db515'], + }), + ('lmerTest', '3.1-3', { + 'checksums': ['35aa75e9f5f2871398ff56a482b013e6828135ef04916ced7d1d7e35257ea8fd'], + }), + ('loo', '2.4.1', { + 'checksums': ['bc21fb6b4a93a7e95ee1be57e4e787d731895fb8b4743c26b30b43adee475b50'], + }), + ('RcppParallel', '5.1.4', { + 'checksums': ['76b545a6878c55edba780183fd89a76fe723b7f19709c5243495dcf3d54eea82'], + }), + ('StanHeaders', '2.21.0-7', { + 'checksums': ['27546e064f0e907e031d9185ad55245d118d82fbe3074ecb1d76fae8b9f2336b'], + }), + ('V8', '3.4.2', { + 'installopts': '--configure-vars="INCLUDE_DIR=$CPATH LIB_DIR=$LIBRARY_PATH"', + 'preinstallopts': "export CPATH=$EBROOTNODEJS/include/node:$CPATH && ", + 'checksums': ['210643473ca8bf423fae34ce72ceb37a3e44c3315ec4abae59a77f077542d2ed'], + }), + ('rstan', '2.21.2', { + 'checksums': ['e30e04d38a612e2cb3ac69b53eaa19f7ede8b3548bf82f7892a2e9991d46054a'], + }), + ('Rborist', '0.2-3', { + 'checksums': ['f3b3f953ca99e0d17425ac6ba9a7b1e9d6098343abace575cdb492bca2a9c461'], + }), + ('VSURF', '1.1.0', { + 'checksums': ['eee99e0c441795c2ccb21cc6e0a37b24f580241e494c83e811b726b43469eeab'], + }), + ('mRMRe', '2.1.2', { + 'checksums': ['a59a3cb3cca89f51d9ee6702cd479fd7db8bc2e25b72f45cb6712da983777ca0'], + }), + ('dHSIC', '2.1', { + 'checksums': ['94c86473790cf69f11c68ed8ba9d6ae98218c7c69b7a9a093f235d175cf83db0'], + }), + ('ggsci', '2.9', { + 'checksums': ['4af14e6f3657134c115d5ac5e65a2ed74596f9a8437c03255447cd959fe9e33c'], + }), + ('ggsignif', '0.6.3', { + 'checksums': ['ca8545b25590e531512a90a18449a2cbab945f7434a1d60188c41f7d1839a7a9'], + }), + ('corrplot', '0.90', { + 'checksums': ['d9871f219351f443f879ae93c45e3a364eb32cc6f41491a801e7b8a91e96d5dd'], + }), + ('rstatix', '0.7.0', { + 'checksums': ['a5ae17dc32cc26fc5dcab9ff0a9747ce3786c9fe091699247ad8b9f823f2600c'], + }), + ('ggfan', '0.1.3', { + 'checksums': ['5c888b203ecf5e3dc7a317a790ca059c733002fbca4b4bc1a4f62b7ded5f70dc'], + }), + ('ggpubr', '0.4.0', { + 'checksums': ['abb21ec0b1ae3fa1c58eedca2d59b9b009621b30e3660f1247b3880c5fa50675'], + }), + ('yaImpute', '1.0-32', { + 'checksums': ['08eee5d851b80aad9c7c80f9531aadd50d60e4b16b3a80657a50212269cd73ff'], + }), + ('intrinsicDimension', '1.2.0', { + 'checksums': ['6cc9180a83aa0d123f1e420136bb959c0d5877867fa170b79536f5ee22106a32'], + }), + ('patchwork', '1.1.1', { + 'checksums': ['cf0d7d9f92945729b499d6e343441c55007d5b371206d5389b9e5154dc7cf481'], + }), + ('leiden', '0.3.9', { + 'checksums': ['81754276e026a9a8436476365bbadf0f15a403a525a349cb56418da5d8edea0d'], + }), + ('sctransform', '0.3.2', { + 'checksums': ['5dbb0a045e514c19f51bbe11c2dba0b72dca1942d6eb044c36b0538b443475dc'], + }), + ('packrat', '0.7.0', { + 'checksums': ['e8bce1fd78f28f3a7bf56e65a2ae2c6802e69bf55466c24e1d1a4b8a5f83dcc2'], + }), + ('colourpicker', '1.1.1', { + 'checksums': ['a0d09982b048b143e2c3438ccec039dd20d6f892fa0dedc9fdcb0d40de883ce0'], + }), + ('ggExtra', '0.9', { + 'checksums': ['f22db92d6e3e610901998348acbcaa6652fa6c62a285a622d3b962ba9e89aba2'], + }), + ('findpython', '1.0.7', { + 'checksums': ['59f904b9c2ec84b589380de59d13afbf14d1ec3b670e3a07e820298aaf04c149'], + }), + ('argparse', '2.1.2', { + 'checksums': ['9997359a735359580ab6b054672388a55701fca71c80b54bab1aedc13bc5e5b3'], + }), + ('intergraph', '2.0-2', { + 'checksums': ['6cbe77f1e87fa1c110db2d46010f2f3ae72bfdb708ce2ca84c1cdc2cd6eb47a1'], + }), + ('ggnetwork', '0.5.10', { + 'checksums': ['1b655dbab8eed8d0aa3ab2148aac8e0e5bfa190468f5e3c06b001ce88b7f0d3f'], + }), + ('qqman', '0.1.8', { + 'checksums': ['58da8317df8d726d1fde4805919da5d64f880894a423ee20937cafb479b9d8a8'], + }), + ('rstantools', '2.1.1', { + 'checksums': ['c95b15de8ec577eeb24bb5206e7b685d882f88b5e6902efda924b7217f463d2d'], + }), + ('bayesplot', '1.8.1', { + 'checksums': ['d8d74201ea91fa5438714686ca22a947ec9375b6c12b0cfef010c57104b1aa2a'], + }), + ('dygraphs', '1.1.1.6', { + 'checksums': ['c3d331f30012e721a048e04639f60ea738cd7e54e4f930ac9849b95f0f005208'], + }), + ('rsconnect', '0.8.24', { + 'checksums': ['cf6bef1e073d6fa95c8be8a00e9e4982b88f4bab0e8ecd77db816a585be2e4a6'], + }), + ('shinystan', '2.5.0', { + 'checksums': ['45f9c552a31035c5de8658bb9e5d72da7ec1f88fbddb520d15fe701c677154a1'], + }), + ('optimx', '2021-10.12', { + 'checksums': ['39384c856b5efa3992cd230548b60eff936d428111ad6ad5b8fb98a3bcbb7943'], + }), + ('gamm4', '0.2-6', { + 'checksums': ['57c5b66582b2adc32f6a3bb6a259f5b95198e283a96d966a6007e8e48b380c89'], + }), + ('projpred', '2.0.2', { + 'checksums': ['af0a9fb53f706090fe81b6381b27b0b6bd3f7ae1e1e44b0ada6f40972b09a55b'], + }), + ('distributional', '0.2.2', { + 'checksums': ['028e5a91aabe3a676eb7b7f3dc907f7f34735a123fe0d9adcabc03476504435f'], + }), + ('posterior', '1.1.0', { + 'checksums': ['eff6262dbcc1bf18337f535b0c75ba2fe360322e8b170c466e24ed3ee76cf4d2'], + }), + ('brms', '2.16.1', { + 'checksums': ['749efbd9fb061fe207cf2e729c1387d9a8538b922f12ceec4e82a9f8dd9c1bc4'], + }), + ('drgee', '1.1.10', { + 'checksums': ['e684f07f7dfec922380d4202922c11094f859721f77b31ff38b0d35d0f42c743'], + }), + ('stdReg', '3.4.1', { + 'checksums': ['285335dbe29b6898641e1151ab2f06acf76c6f4d6fbeadd66d151c25d7e38a74'], + }), + ('mcmcse', '1.5-0', { + 'checksums': ['4a820dc22c48efd32b7f9d1e1b897b4b3f165cd64b2ff85ba7029621cf9e7463'], + }), + ('copCAR', '2.0-4', { + 'checksums': ['8b4ed53c58a665f70e48bdca689a992a81d5ecb5a6051ca7361d3870e13c77f3'], + }), + ('batchmeans', '1.0-4', { + 'checksums': ['8694573009d9070a76007281407d3314da78902e122a9d8aec1f819d3bbe562c'], + }), + ('ngspatial', '1.2-2', { + 'checksums': ['3fa79e45d3a502a58c1454593ec83dfc73144e92b34c14f617a6126557dd0d26'], + }), + # ('BIGL', '1.6.5', { + # 'checksums': ['5be825734d76760723e2d5b8fbe03524a2b59d9163b33841d4a2c9ab2d4257cf'], + # }), + # ('drugCombo', '1.2.1', { + # 'checksums': ['9a605c655c159604033558d757711e6d83d33dfc286c1280f722d4cb7d130f80'], + # }), + ('betareg', '3.1-4', { + 'checksums': ['5106986096a68b2b516215968158589b71969ce7912879253d6e930355a18101'], + }), + ('unmarked', '1.1.1', { + 'checksums': ['48474f396c4a91e257490025ede6a998883683e8020a898fff5d4e23a3764bfd'], + }), + ('maxlike', '0.1-8', { + 'checksums': ['90aaab9602f259cbfae61fe96e105cc4a0c2a385b42380f85c14f5d544107251'], + }), + ('coxme', '2.2-16', { + 'checksums': ['a0ce4b5649c4c1abbfe2c2bf23089744d1f66eb8368dea16e74e090f366a5111'], + }), + ('AICcmodavg', '2.3-1', { + 'checksums': ['d0517da15a38e9b1df20fa73f5342b586624e65792d266e7dff278ad7fc458b0'], + }), + ('pacman', '0.5.1', { + 'checksums': ['9ec9a72a15eda5b8f727adc877a07c4b36f8372fe7ed80a1bc6c2068dab3ef7c'], + }), + ('spaa', '0.2.2', { + 'checksums': ['a5a54454d4a7af473ce797875f849bd893005cb04325bf3e0dbddb19fe8d7198'], + }), + ('maxnet', '0.1.4', { + 'checksums': ['fd21e5ecf3c1ac00ef1bbe79fab4cdd62789e0c4c45f126f1b64bda667238216'], + }), + ('oai', '0.3.2', { + 'checksums': ['ebfa756e08f6ac0aa61556b1a5bbe611f407bfff8aef1f8d075a24c361678bfd'], + }), + ('wellknown', '0.7.4', { + 'checksums': ['483e6fc43edf09ed583e74ce5ca7e2d7838ef8a32291e06d774c37546eed1a34'], + }), + ('rgbif', '3.6.0', { + 'checksums': ['2941857c85d89ebaf614ed130ec2f68e326a8ca99e00263ac4e2a9c556917f20'], + }), + ('rgdal', '1.5-27', { + 'checksums': ['62a555ed7b5424dd0252b3764e3542fb30c524d06e8245215bcfaedd84ee5756'], + }), + ('rgeos', '0.5-8', { + 'checksums': ['0db35392146cefb5eea0392eecb6b0bfee53708222b98b06de54a3e1a04ea314'], + }), + ('mapproj', '1.2.7', { + 'checksums': ['f0081281b08bf3cc7052c4f1360d6d3c20d9063be57754448ad9b48ab0d34c5b'], + }), + ('rbison', '1.0.0', { + 'checksums': ['9957e5f85ce68f5dd0ddc3c4b2b3c9d2f52d6f37587e1022ab8a44863534a83c'], + }), + ('rebird', '1.3.0', { + 'checksums': ['b238d3f246aa0249145894e1f3a90f46902f6615fc2f23b24c99bb5feecc55d3'], + }), + ('rvertnet', '0.8.2', { + 'checksums': ['2de9a3ec33a213c7592b49cca1d510a25aef0625369376d9b1b4e5d0da519226'], + }), + ('ridigbio', '0.3.5', { + 'checksums': ['e5cfb2e4dd8ddd1452a5afcf24fcc260889179d0f52eff4f41835adf99b64614'], + }), + ('spocc', '1.2.0', { + 'checksums': ['4bac45db5e69bfa3bf6cebd1b0c9241214c95561f275cee6d31e00911aa79d84'], + }), + ('spThin', '0.2.0', { + 'checksums': ['2e997afb79a2a990eded34c71afaac83986669cfa9ac51b15ae3f2b558902048'], + }), + ('rangeModelMetadata', '0.1.4', { + 'checksums': ['529d529ca90437db3d1e45118443e27a920422806383c7edaa2102beb43f5f80'], + }), + ('ENMeval', '2.0.1', { + 'checksums': ['2f7b7760ae70a45cd3c766aacf1e39f498de4f2e8c7b6dcde6b9adf6d8100250'], + }), + ('plotmo', '3.6.1', { + 'checksums': ['245a0c87f0cca08746c6fdc60da2e3856cd69b1a2b7b5641293c620d4ae04343'], + }), + ('earth', '5.3.1', { + 'checksums': ['0bbe06ba974ceb8ec5de1d59cb53f9487d1828d7130fe2503c48b6cb449c4b03'], + }), + ('mda', '0.5-2', { + 'checksums': ['344f2053215ddf535d1554b4539e9b09067dac878887cc3eb995cef421fc00c3'], + }), + ('biomod2', '3.5.1', { + 'checksums': ['30ed33ff980558a59782ec9e35f9c2c710a540718010654363f63878cdc0ac18'], + }), + ('poLCA', '1.4.1', { + 'checksums': ['2e69975b5e7da8c36641bfa9453afdb4861523866b8799bec1d4eace9ab5762e'], + }), + ('PermAlgo', '1.1', { + 'checksums': ['d7157b92241c34b71ad19901b52144973b49df453bf2a5edf4497d4bf26bd099'], + }), + ('coxed', '0.3.3', { + 'checksums': ['d0d6cb8fea9516b3c63b34d0d81f3804c18a07f97a83e51555575c8ed4c75626'], + }), + ('testit', '0.13', { + 'checksums': ['90d47168ab6bdbd1274b600b457626ac07697ce09792c92b2043be5f5b678d80'], + }), + ('NISTunits', '1.0.1', { + 'checksums': ['eaccd68db5c73d6a089ce5b323cdd51bc6a6a58ce467987158ba8c9be6a0a94e'], + }), + ('celestial', '1.4.6', { + 'checksums': ['9f647f41465ac65b254717698f1978871c378ad8e6ccaa693abf579437069abe'], + }), + ('fasterize', '1.0.3', { + 'checksums': ['62b459625e9bdb00251ec5f6cb873e0c59713f3e86dc1e2c8332adc0cea17f81'], + }), + ('RPMM', '1.25', { + 'checksums': ['f04a524b13918062616beda50c4e759ce2719ce14150a0e677d07132086c88c8'], + }), + ('RefFreeEWAS', '2.2', { + 'checksums': ['de2812f166caabf6ea01c0533402e5cd9d8a525a2a7583e4757decf22319caab'], + }), + ('wordcloud', '2.6', { + 'checksums': ['53716954430acd4f164bfd8eacd7068a908ee3358293ded6cd992d53b7f72649'], + }), + ('JADE', '2.0-3', { + 'checksums': ['56d68a993fa16fc6dec758c843960eee840814c4ca2271e97681a9d2b9e242ba'], + }), + ('awsMethods', '1.1-1', { + 'checksums': ['50934dc20cf4e015f1304a89de6703fed27e7bd54c6b9fc9fb253cdf2ecb7541'], + }), + ('aws', '2.5-1', { + 'checksums': ['e8abadc5614f132edc3fb9cb1c82ce4dacc1315b727fbd49db7399aee24115ba'], + }), + ('ruv', '0.9.7.1', { + 'checksums': ['a0c54e56ba3d8f6ae178ae4d0e417a79295abf5dcb68bbae26c4b874734d98d8'], + }), + ('mhsmm', '0.4.16', { + 'checksums': ['fab573abdc0dd44e8c8bc7242a1428df20b3ec64c4c194e5f1f907393f902d01'], + }), + ('dbarts', '0.9-20', { + 'checksums': ['1d75e795812819b7637d38fc909f4d7942bddf359acfb40a7b8e7cd167a5e92a'], + }), + ('proftools', '0.99-3', { + 'checksums': ['e034eb1531af54013143da3e15229e1d4c2260f8eb79c93846014db3bdefb724'], + }), + ('NCmisc', '1.1.6', { + 'checksums': ['2aa85997d5ec2222e610604022684c004a4925241761d9a0104919f1cf3a8c79'], + }), + ('reader', '1.0.6', { + 'checksums': ['905c7c5a1b035ac8213fc533fa26e511abfeea40bd22e3edfde42a49074e88f4'], + }), + ('gnumeric', '0.7-8', { + 'checksums': ['28b10c91d693b938ebca610933889095ca160b22e6ca750c46103dfd2b009447'], + }), + ('tcltk2', '1.2-11', { + 'checksums': ['ad183ae3b7190501504a0589e0b3be480f04267303e3384fef00987446a37dc5'], + }), + ('readODS', '1.7.0', { + 'checksums': ['f6a8ec724df68983c9b176a1b3b3b01239cc4e99aac4bfb42ce1c2b3d40922c2'], + }), + ('nortest', '1.0-4', { + 'checksums': ['a3850a048181d5d059c1e74903437569873b430c915b709808237d71fee5209f'], + }), + ('EnvStats', '2.4.0', { + 'checksums': ['49459e76412037b3d8021bd83ee93d140bc3e715a2a2282a347ef60061900514'], + }), + ('outliers', '0.14', { + 'checksums': ['b6ce8f1db6442481546131def8253cabdf4472116d193daea7cb935d2b76986d'], + }), + ('elementR', '1.3.7', { + 'checksums': ['4275f88f372a2efe96ccd0afc20f4f12be92f28c7db35c68b80bb0ffb2c2ab07'], + }), + ('gWidgets2', '1.0-8', { + 'checksums': ['1615ce9ab07a251d06c68780be15ab5a4814df877a23aa93e0faf14ccd56d45c'], + }), + ('gWidgets2tcltk', '1.0-6', { + 'modulename': False, + 'preinstallopts': "xvfb-run ", + 'checksums': ['aa3a2f4612116a652e5573a369e3d89c5939f7c06067c6826ba40ed3bb07302b'], + }), + ('mgsub', '1.7.3', { + 'checksums': ['c9ae2560fe2690bedc5248af3fc89e7ef2bc6c147d46ced28f9824584c3791d5'], + }), + ('ie2misc', '0.8.6', { + 'checksums': ['f3e2cc8a88f3789a5e339d2676455472a52a303c8273191f27aa2f2f02fdd8cd'], + }), + ('assertive.base', '0.0-9', { + 'checksums': ['4bf0910b0eaa507e0e11c3c43c316b524500c548d307eb045d6f89047e6ba01e'], + }), + ('assertive.properties', '0.0-4', { + 'checksums': ['5c0663fecb4b7c30f2e1d65da8644534fcfe97fb3d8b51f74c1327cd14291a6b'], + }), + ('assertive.types', '0.0-3', { + 'checksums': ['ab6db2eb926e7bc885f2043fab679330aa336d07755375282d89bf9f9d0cb87f'], + }), + ('assertive.numbers', '0.0-2', { + 'checksums': ['bae18c0b9e5b960a20636e127eb738ecd8a266e5fc29d8bc5ca712498cd68349'], + }), + ('assertive.strings', '0.0-3', { + 'checksums': ['d541d608a01640347d661cc9a67af8202904142031a20caa270f1c83d0ccd258'], + }), + ('assertive.datetimes', '0.0-3', { + 'checksums': ['014e2162f5a8d95138ed8330f7477e71c908a29341697c09a1b7198b7e012d94'], + }), + ('assertive.files', '0.0-2', { + 'checksums': ['be6adda6f18a0427449249e44c2deff4444a123244b16fe82c92f15d24faee0a'], + }), + ('assertive.sets', '0.0-3', { + 'checksums': ['876975a16ed911ea1ad12da284111c6eada6abfc0118585033abc0edb5801bb3'], + }), + ('assertive.matrices', '0.0-2', { + 'checksums': ['3462a7a7e11d7cc24180330d48cc3067cf92eab1699b3e4813deec66d99f5e9b'], + }), + ('assertive.models', '0.0-2', { + 'checksums': ['b9a6d8786f352d53371dbe8c5f2f2a62a7866e30313f268e69626d5c3691c42e'], + }), + ('assertive.data', '0.0-3', { + 'checksums': ['5a00fb48ad870d9b3c872ce3d6aa20a7948687a980f49fe945b455339e789b01'], + }), + ('assertive.data.uk', '0.0-2', { + 'checksums': ['ab48dab6977e8f43d6fffb33228d158865f68dde7026d123c693d77339dcf2bb'], + }), + ('assertive.data.us', '0.0-2', { + 'checksums': ['180e64dfe6339d25dd27d7fe9e77619ef697ef6e5bb6a3cf4fb732a681bdfaad'], + }), + ('assertive.reflection', '0.0-5', { + 'checksums': ['c2ca9b27cdddb9b9876351afd2ebfaf0fbe72c636cd12aa2af5d64e33fbf34bd'], + }), + ('assertive.code', '0.0-3', { + 'checksums': ['ef80e8d1d683d776a7618e78ddccffca7f72ab4a0fcead90c670bb8f8cb90be2'], + }), + ('assertive', '0.3-6', { + 'checksums': ['c403169e83c433b65e911f7fd640b378e2a4a4765a36063584b8458168a4ea0a'], + }), + ('rdrop2', '0.8.2.1', { + 'checksums': ['b9add765fe8e7c966f0d36eef939a9e38f253958bd2a3c656b890cbb0366300b'], + }), + ('Exact', '3.0', { + 'checksums': ['a76114e9780c86e4ea0a561300db024b95af9b0ebb6c3bf9a7598d276d009529'], + }), + ('lmom', '2.8', { + 'checksums': ['cae2a925c39429d8e9f91bdb2682ea0d1343e9b2e5c9e8752c5929eb5f20d2d2'], + }), + ('gld', '2.6.2', { + 'checksums': ['915860ac054ba4d29854c7d274e9c927995c5df2a7d4a6a0122b1fbc4a3c3cf3'], + }), + ('DescTools', '0.99.43', { + 'checksums': ['8c3c4e5975428b9f2817907931449cd704d3df0e19e4337010f0dee333e7a4ff'], + }), + ('orthopolynom', '1.0-5', { + 'checksums': ['6da4f437aae5c8fafdf791ce3c6a66f68198df4054af3aab8406402a4dc770bf'], + }), + ('gaussquad', '1.0-2', { + 'checksums': ['ba3a1ab6ffe92f592c9f2bb1d4070f1fb1019325226dcb4863cf725eb59e9b2d'], + }), + ('nlsem', '0.8', { + 'checksums': ['495a5d07aa5f59efdcd43acf429ae842453abd6c0720a80e2102d663fa997c60'], + }), + ('tableone', '0.13.0', { + 'checksums': ['1c73a5a7595dc0ae2299d17c74738e077984af7d5429e4858b7be3c55e121346'], + }), + ('jstable', '1.0.7', { + 'checksums': ['a8f66172973dc75d1d751d7015e0f028c441263f6649909bd25fa944be0042c3'], + }), + ('RCAL', '2.0', { + 'checksums': ['10f5f938a8322d8737159e1e49ce9d12419a5130699b8a19c6ca53d6508da8cc'], + }), + ('stargazer', '5.2.2', { + 'checksums': ['70eb4a13a6ac1bfb35af07cb8a63d501ad38dfd9817fc3fba6724260b23932de'], + }), + ('sensemakr', '0.1.4', { + 'checksums': ['6a1354f05392fa9343b90f69a54022c995651fb3c3d05cb08fa088ef52258caf'], + }), + ('CompQuadForm', '1.4.3', { + 'checksums': ['042fc56c800dd8f5f47a017e2efa832caf74f0602824abf7099898d9708660c4'], + }), + ('nonnest2', '0.5-5', { + 'checksums': ['027f510e322122fc75c936251a95ddd392f96047ac86e0fae6cf8f883ac7aab5'], + }), + ('blavaan', '0.3-17', { + 'checksums': ['ada14fcc665a22f11fc57392d70141c398d85dbb35f0a3373a501bc51d27f1e5'], + }), + ('mathjaxr', '1.4-0', { + 'checksums': ['ba57378236d593a39c5839054adc5473526de0c8f05b7eeb87c99438496ddc67'], + }), + ('metafor', '3.0-2', { + 'checksums': ['02df435197b225da736103edf73d19253a542bc31fc0b99610c02daec434138a'], + }), + ('fmri', '1.9.6', { + 'checksums': ['7614290d880667512744d3450480a670cc38abdb270f3f776ac9a17a793f07f2'], + }), + ('AnalyzeFMRI', '1.1-24', { + 'checksums': ['0d2acfe9ce8f25eb5cc9e6ef1db3ea8e232a31d46a95e50914489b1997e17062'], + }), + ('linkcomm', '1.0-14', { + 'checksums': ['36f1557c65d862fc87635eedfad77f18a5deb66da00895e50e2d5eac0f23b597'], + }), + ('rnetcarto', '0.2.4', { + 'checksums': ['266702330250e9fbeb8616d86edf1d50d63084a0731d17e84a04dc6faacf653a'], + }), + ('DEoptim', '2.2-6', { + 'checksums': ['8c63397d83a067212d003ef3e639fd81f5f00bf61e3c271b4e4999031a69e2e1'], + }), + ('optextras', '2019-12.4', { + 'checksums': ['59006383860826be502ea8757e39ed94338f04d246c4fc398a088e004d8b13eb'], + }), + ('setRNG', '2013.9-1', { + 'checksums': ['1a1a399682a06a5fea3934985ebb1334005676c6a2a22d06f3c91c3923432908'], + }), + ('Rvmmin', '2018-4.17.1', { + 'checksums': ['55000ac4ff57d42f172c46c7d6b0a603da3b65866d6440d6b32bac4d2b81814e'], + }), + ('Rcgmin', '2013-2.21', { + 'checksums': ['a824a09c32d7565a3e30607c71333506d5b7197478fbe8b43f8a77dad6c12f0a'], + }), + ('optimr', '2019-12.16', { + 'checksums': ['73b1ed560ffd74599517e8baa4c5b293aa062e9c8d50219a3a24b63e72fa7c00'], + }), + ('DMCfun', '2.0.2', { + 'checksums': ['430cbc18f17db11a7941e6a8274a0eefbb8a6b0bdac8800970530d60d5881fde'], + }), + ('miceadds', '3.11-6', { + 'checksums': ['121d03c812fbcf584a25585ac73f6c44f4b5d6cd21b05362ddd15395fb3909f6'], + }), + ('visdat', '0.5.3', { + 'checksums': ['527c76b6643b8475a58516763ef40238cdc61ec62d2dcf690f7c316b93b878c6'], + }), + ('UpSetR', '1.4.0', { + 'checksums': ['351e5fee64204cf77fd378cf2a2c0456cc19d4d98a2fd5f3dac74b69a505f100'], + }), + ('norm', '1.0-9.5', { + 'checksums': ['305cbf007f3905cfd535ed9bf5ae3e2995e228cc8883d6482e5d3a2f02814106'], + }), + ('naniar', '0.6.1', { + 'checksums': ['d546ca15bf6c224f3103eb1441abef91d34feebb7320c2398d598f5d50177450'], + }), + ('stringdist', '0.9.8', { + 'checksums': ['efccd6ccc5c74c578be95b7dae1099c52b0d7805452ab14ee91ca34adb8261bb'], + }), + ('image.binarization', '0.1.2', { + 'checksums': ['0621ca94a74264bb73f689b1a00484b5a3bbef93fc203d9c001d791a18fcc13f'], + }), + ('lassosum', '0.4.5', { + 'source_urls': ['https://github.com/tshmak/%(name)s/releases/download/v%(version)s/'], + 'sources': ['%(name)s_%(version)s.tar.gz'], + 'checksums': ['18c0d0b5022bcf81a9bf1b3b6647da3e080f221828b473ea2a45a9bf98474fbc'], + }), + ('lslx', '0.6.10', { + 'checksums': ['adc2b2a621625b52165245ab2f3a0bfba4f4db64fcc6ad48a3e5b219c3bd2fa1'], + }), + ('truncnorm', '1.0-8', { + 'checksums': ['49564e8d87063cf9610201fbc833859ed01935cc0581b9e21c42a0d21a47c87e'], + }), + ('Rsolnp', '1.16', { + 'checksums': ['3142776062beb8e2b45cdbc4fe6e5446b6d33505253d79f2890fe4178d9cf670'], + }), + ('regsem', '1.8.0', { + 'checksums': ['28ff1c2dbddcafc6ed6c30154f46074aa0c8974757466680529b71a5f3e463ec'], + }), + ('semPLS', '1.0-10', { + 'checksums': ['cb587ccfdaf970f426dc7146035c7e010b1c51c17bf4fc089fd796eda58db460'], + }), + ('GxEScanR', '2.0.2', { + 'checksums': ['6d42fd15d83dd1491405b282d26fa472f9f9902a9dc68836d6a48b459ada6a4c'], + }), + ('alabama', '2015.3-1', { + 'checksums': ['6600fcf4842488950e196d3f5a8fc4d69e8271b36292ce67ac3ab697449a8f56'], + }), + ('polycor', '0.7-10', { + 'checksums': ['caea3beca2c889e12e5b976c20c19cf5a76d42e6329e9ab646112eeae8fcfc73'], + }), + ('multipol', '1.0-7', { + 'checksums': ['0abe3c894c0d8e928a920e73708a397133386a0d73a1e7952c4075afe67879e6'], + }), + ('symmoments', '1.2.1', { + 'checksums': ['9a6be1f8fe44f6ab5a1790e870fd8b18de1686a48a14a9fca2d035bfb5458672'], + }), + ('cSEM', '0.4.0', { + 'checksums': ['7753ac7db9d2c0392e51dd31ec8638e1a7fcbb2546dd9103f5ecc03dd51836c1'], + }), + ('cubelyr', '1.0.1', { + 'checksums': ['740a34100592b2c6b7bc89a31bddccf4c8fd95720caf68f530104f17aada77bc'], + }), + ('broom.mixed', '0.2.7', { + 'checksums': ['ff29385557af239a41452ffb5ebe230630a2a30f4a91e95505c3178b62df01ba'], + }), + ('DiceKriging', '1.6.0', { + 'checksums': ['ab5d1332809f2bb16d156ed234b102eb9fbd6de792e4291f9f6ea4652215cb49'], + }), + ('grf', '2.0.2', { + 'checksums': ['043f21a057762a2d5e0febb37c1d9cb8d2f94d19f2eded20c672dec7ff54b505'], + }), + ('xgboost', '1.4.1.1', { + 'checksums': ['9f986f3895ce5f6744335c82afe3a87d9ac2e473e60785295edf2be80d34e0c4'], + }), + ('twang', '2.5', { + 'checksums': ['fc355527c57e4f6e0f60d26d7c690c4475fcd5fb165d125fea7cc6b9fafc4ce5'], + }), + ('neuralnet', '1.44.2', { + 'checksums': ['5f66cd255db633322c0bd158b9320cac5ceff2d56f93e4864a0540f936028826'], + }), + ('PCAmatchR', '0.3.0', { + 'checksums': ['73876c6d1cf42928a03a64aba197c67b4a4f4de2c431cfbc6fce615bbea32fa0'], + }), + ('origami', '1.0.5', { + 'checksums': ['8d0d08aaecc428cbbf5db4615ad3623777c10c6d7947a1cc3ccc7f8db8cb5263'], + }), + ('hal9001', '0.4.1', { + 'checksums': ['386fa93ae6c0f409a9137adc54da25a2770826fbed63787e33a36c95f3f89441'], + }), + ('cobalt', '4.3.1', { + 'checksums': ['67e26a700ca083a39beb255df54c6ab495f34ea5847a0bf1c4bac895e980eef8'], + }), + ('CBPS', '0.22', { + 'checksums': ['d19247e6765f02737d15a0a2ee86ae24e7206ae740dfaa61821622eb3a309aef'], + }), + ('SBdecomp', '1.1', { + 'checksums': ['ad4e4f00bc58eafe551ad6288c0642a16e16ef8f73c2ae649f808b1e559df644'], + }), + ('naturalsort', '0.1.3', { + 'checksums': ['cd38a9c5f323f61459e6096cdbf4493851d40497baf671af4f8dfe9a7c00e857'], + }), + ('lwgeom', '0.2-8', { + 'checksums': ['f48a92de222da0590b37a30d5cbf2364555044a842795f6b488afecc650b8b34'], + }), + ('finalfit', '1.0.3', { + 'checksums': ['bbfa841a2b1a7b1f8c153d773ff076a2e465e451815f8166ff0ce8c4018ff61e'], + }), + ('broom.helpers', '1.4.0', { + 'checksums': ['7f6a5c0c79260b57cd31976bc216fffbc79a1641e01b74630dcd37d2c84e3f75'], + }), + ('gt', '0.3.1', { + 'checksums': ['ddd1fee446f156d1b52bb2db83262aac2a896db93748e92e08407d317e126019'], + }), + ('gtsummary', '1.5.0', { + 'checksums': ['54dd5e11c5b2a808ca93284760a5cd102f820332d2fa40474d5cedea030711a7'], + }), + ('ncdf4', '1.17', { + 'checksums': ['db95c4729d3187d1a56dfd019958216f442be6221bd15e23cd597e6129219af6'], + }), + ('geex', '1.0.12', { + 'checksums': ['037aece09bc0c4349897cd1d8f5dcf1e680598cdfdf72148b6d1506e02690e7f'], + }), + ('momentfit', '0.2', { + 'checksums': ['a10d43ac23bb61b9c67efa4800e3e2b6a444c1afaca8bad351648accd7e003f6'], + }), + ('StatMatch', '1.4.0', { + 'checksums': ['820091cd2213734ea16f5fcd616491bbf39d3e6c2bcfb34a7c9fe09f4fd1a459'], + }), + ('stars', '0.5-3', { + 'checksums': ['44944a82af36bea09ac1874ff9647acbb7fef021ebdca5aae7c34794be929401'], + }), + ('rapidjsonr', '1.2.0', { + 'checksums': ['62c94fcdcf5d0fbdfa2f6168affe526bf547c37c16d94e2e1b78d7bf608eed1f'], + }), + ('jsonify', '1.2.1', { + 'checksums': ['929191ab32e34af6a02ad991e29314cc78ea40763fcf232388ef2d132137fbce'], + }), + ('geometries', '0.2.0', { + 'checksums': ['8cf5094f3c2458fef5d755799c766afd27c66cd1c292574a6ab532d608360314'], + }), + ('sfheaders', '0.4.0', { + 'checksums': ['86bcd61018a0491fc8a1e7fb0422c918296287b82be299a79ccee8fcb515e045'], + }), + ('geojsonsf', '2.0.1', { + 'checksums': ['42df40433bfbece5a39cd97b5bd4690b4424855241fcc3e7322ee68a3988bfbf'], + }), + ('leaflet.providers', '1.9.0', { + 'checksums': ['9e8fc75c83313ab24663c2e718135459599549ed6e7396086cacb44e36cfd67b'], + }), + ('leaflet', '2.0.4.1', { + 'checksums': ['b0f038295f1de5d32d9ffa1d0dbc1562320190f2f1365f3a5e95863fff88901f'], + }), + ('leafsync', '0.1.0', { + 'checksums': ['7d8fd8dbbbf66417cf32575f14c0fe68199762ecf1c036c7905c7c5ff859d75c'], + }), + ('leafem', '0.1.6', { + 'checksums': ['ca50e0a699f564449248511857a2df0d48cd07de3157e099478a19b533088156'], + }), + ('widgetframe', '0.3.1', { + 'checksums': ['44089a2cf8b0941a6f3da55da36353e2f44653ca58bfec7960ee5b71ea380d48'], + }), + ('tmaptools', '3.1-1', { + 'checksums': ['fd89cb0d7fb44e0a5dd5311fa3e75a729746bf2e8e158d5ec423e5963f1b542d'], + }), + ('tmap', '3.3-2', { + 'checksums': ['2bcb74c5c5546223d79abe5d633581fb2664b910f6246f4b8b7166b208b4629a'], + }), + ('collapse', '1.6.5', { + 'checksums': ['1e232a3a62b5eb5ed5d81e7d92ce1bae34c3d877d593d47d7edbd3f515b95a46'], + }), + ('genoPlotR', '0.8.11', { + 'checksums': ['f127f7fe8b19c899ecfdf98bf69d2e18926afb593a72fc40097acca66d401607'], + }), + ('VineCopula', '2.4.3', { + 'checksums': ['42727aa7345ab544242182222eb97476f5dc04bc837f94f6fd3ea6ccac93ea17'], + }), + ('Rmpfr', '0.8-7', { + 'checksums': ['93c2db785ff705dcfc6fa7f0373c2426cdc2ef72ceb5b294edeb2952775f57d2'], + }), + ('scam', '1.2-12', { + 'checksums': ['0ce5f844221370884719424eb5b2b22c34a8a8ad64eac3de981e5539b6e88f4a'], + }), + ('copula', '1.0-1', { + 'checksums': ['d09b2ccffc7379e48b00952aa6b282baf502feebaf55cc44e93f881d7b909742'], + }), + ('evd', '2.3-3', { + 'checksums': ['2fc5ef2e0c3a2a9392425ddd45914445497433d90fb80b8c363877baee4559b4'], + }), + ('ismev', '1.42', { + 'checksums': ['0d57fbeca83bd478e84fcff795967d51d8448c629abe7adc6c4c18c7fb8bf1a5'], + }), + ('GJRM', '0.2-5.1', { + 'checksums': ['516dd73c70e5c8ab60b24027f94cab42603797c41cb7aa740882cb850f6d6ab4'], + }), + ('penfa', '0.1.1', { + 'checksums': ['a22a8ac3d4a040c77e50ddc92328c1989eae536d79fe56013e9372ba27c114e5'], + }), + ('rngWELL', '0.10-7', { + 'checksums': ['0c00c54e69d7d552cfa08d766e4854c01c6c1c8e2c558f387760b91a55ef2d38'], + }), + ('randtoolbox', '1.31.1', { + 'checksums': ['30992e8156782542e9a2bffb75eb2e35f6d302a8c22cb7c3ed9004f0f0973bad'], + }), + ('kde1d', '1.0.3', { + 'checksums': ['d645652d09f1981eb37be9f041034da9b9191885dd38be8a7e485e5e41eb050e'], + }), + ('RcppThread', '1.0.0', { + 'checksums': ['544a48ee4ea381e2e1421d4edbec54365f17059084d94ded7c339de36deeccf5'], + }), + ('wdm', '0.2.2', { + 'checksums': ['11c616f0896d62993f5eee1daf7b021d27f13751f6617067b57cf463aea32dde'], + }), + ('rvinecopulib', '0.6.1.1.1', { + 'checksums': ['779fd288774ebb1a0adde6b960053e5c63750bfa66d5ddf349e0f1d8730f08cd'], + }), + ('PearsonDS', '1.2.1', { + 'checksums': ['354be30b8df4e5432d1bc2b6162900522d4c08dc63b207331819d589fb069824'], + }), + ('covsim', '0.2.1', { + 'checksums': ['57ca810c6950ab295078b745eb87fdd7f195e15082777eed9f1059b6302f13bf'], + }), + ('semTools', '0.5-5', { + 'checksums': ['ddf883753c5964eae8313d7e8a4703be52e649f10d3bc1d12ede6d1707b1fab6'], + }), + ('GPArotation', '2014.11-1', { + 'checksums': ['351bc15fc8dc6c8ea5045fbba22180d1e68314fc34d267545687748e312e5096'], + }), + ('dcurver', '0.9.2', { + 'checksums': ['cc6c55090d3607910515981ea0c7221e40e7a29e0da0c5a5f42c3847012290ec'], + }), + ('mirt', '1.35.1', { + 'checksums': ['788b7e499b7d48f5f590eb5cfdac260c4e993b94a3956d30bc2d8bce8cd2ba3e'], + }), + ('rpf', '1.0.11', { + 'checksums': ['e1fd670ae7c3e947db08ce50d6b16ce1b3b8f63a9016b03baba760aee78921fb'], + }), + ('OpenMx', '2.19.8', { + 'checksums': ['cb4be9850f61d320dcd47ef0ad7b20e5baafde558ebbc67301b13d883baf6760'], + }), +] + +moduleclass = 'lang' diff --git a/acls.yml b/acls.yml index 0993cc359c64ef13e9e48d7a0149d5fd2f5056ce..a579f99e1b9a18ce2a533b227182a5568fcc2417 100644 --- a/acls.yml +++ b/acls.yml @@ -72,12 +72,18 @@ software: - name: 'Blosc' owner: 'goebbert1' base: True + - name: 'ceres-solver' + owner: 'goebbert1' + base: True - name: 'Cirq' owner: 'goebbert1' base: True - name: 'Cling' owner: 'goebbert1' base: True + - name: 'Colmap' + owner: 'goebbert1' + base: True - name: 'CVXOPT' owner: 'goebbert1' mpi: True @@ -96,15 +102,27 @@ software: - name: 'FFmpeg' owner: 'goebbert1' base: True - - name: 'Freesurfer' + - name: 'FreeImage' + owner: 'goebbert1' + base: True + - name: 'FreeSurfer' owner: 'deepu1' base: True - name: 'eudev' owner: 'goebbert1' base: True + - name: 'glog' + owner: 'goebbert1' + base: True - name: 'GPicView' owner: 'goebbert1' base: True + - name: 'GStreamer' + owner: 'goebbert1' + base: True + - name: 'IRkernel' + owner: 'goebbert1' + base: True - name: 'ImageMagick' owner: 'goebbert1' base: True @@ -200,6 +218,9 @@ software: - name: 'lz4' owner: 'goebbert1' base: True + - name: 'MCR' + owner: 'goebbert1' + system: True - name: 'mpi4py' owner: 'goebbert1' mpi: True @@ -359,6 +380,9 @@ software: - name: 'ANTLR' owner: 'strube1' base: True + - name: 'Arcade-Learning-Environment' + owner: 'strube1' + base: True - name: 'ASE' owner: 'strube1' base: True @@ -388,9 +412,6 @@ software: - name: 'CFITSIO' owner: 'strube1' base: True - - name: 'CGAL' - owner: 'strube1' - mpi: True - name: 'CMake' owner: 'strube1' system: True @@ -473,6 +494,12 @@ software: - name: 'git-lfs' owner: 'strube1' system: True + - name: 'glew' + owner: 'strube1' + base: True + - name: 'GLFW' + owner: 'strube1' + base: True - name: 'GMP' owner: 'strube1' base: True @@ -544,6 +571,9 @@ software: - name: 'libgeotiff' owner: 'strube1' base: True + - name: 'libgit2' + owner: 'strube1' + base: True - name: 'libiconv' owner: 'strube1' base: True @@ -593,14 +623,21 @@ software: owner: 'strube1' mpi: True - name: 'METIS' - owner: 'strube1' + owner: 'ridley2' base: True + compiler: True - name: 'MPFR' owner: 'strube1' base: True - name: 'mpiP' owner: 'strube1' mpi: True + - name: 'MuJoCo' + owner: 'strube1' + base: True + - name: 'mujoco-py' + owner: 'strube1' + base: True - name: 'nano' owner: 'strube1' base: True @@ -640,6 +677,9 @@ software: - name: 'parallel' owner: 'strube1' base: True + - name: 'patchelf' + owner: 'strube1' + base: True - name: 'Perl' owner: 'strube1' base: True @@ -914,7 +954,7 @@ software: - name: 'PETSc' owner: 'mathprod' mpi: True - - name: 'sundials' + - name: 'SUNDIALS' owner: 'mathprod' mpi: True - name: 'MUMPS' @@ -993,7 +1033,7 @@ software: owner: 'koh1' mpi: True - name: 'OpenFOAM' - owner: 'koerfgen1' + owner: 'ridley2' mpi: True - name: 'CP2K' owner: 'mueller1' @@ -1053,3 +1093,9 @@ software: - name: 'Extrae' owner: 'knobloch1' mpi: True + - name: 'AMD-uProf' + owner: 'zhukov1' + base: True + - name: 'HDFView' + owner: 'luehrs2' + base: True diff --git a/bin/eb_bash_completion_local.bash b/bin/eb_bash_completion_local.bash new file mode 100644 index 0000000000000000000000000000000000000000..c85ca740b86e6d75b7e39593f2ba55a34714a75b --- /dev/null +++ b/bin/eb_bash_completion_local.bash @@ -0,0 +1,12 @@ +_eb() +{ + local cur prev quoted + _get_comp_words_by_ref cur prev + _quote_readline_by_ref "$cur" quoted + + case $cur in + --*) _optcomplete "$@"; return 0 ;; + *) COMPREPLY=( $(compgen -f -X '!*.eb' -- $cur ) ) ;; + esac +} +complete -F _eb eb diff --git a/bin/gcc11ize.py b/bin/gcc11ize.py index f0e063a492d36816fa78497fa732837647d5c3a9..19f3462b73a7defacf5231c39810ffa5790001c2 100755 --- a/bin/gcc11ize.py +++ b/bin/gcc11ize.py @@ -10,6 +10,7 @@ import argparse releases = { + 'ASE': ['3.19.2', '3.22.0'], 'ATK': ['2.36.0', '2.36.0'], 'AT-SPI2-ATK': ['2.34.2', '2.38.0'], 'AT-SPI2-core': ['2.36.0', '2.40.3'], @@ -63,7 +64,7 @@ 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'], + 'h5py': ['3.1.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'], @@ -84,6 +85,7 @@ releases = { 'libreadline': ['8.0', '8.1'], 'librsvg': ['2.48.8', '2.51.2'], 'LibTIFF': ['4.1.0', '4.3.0'], + 'libunwind': ['1.4,0', '1.5.0'], 'libxc': ['5.1.5', '5.1.6'], 'libxml2': ['2.9.10', '2.9.10'], 'LLVM': ['10.0.1', '13.0.0'], @@ -113,6 +115,7 @@ releases = { 'pybind11': ['2.5.0', '2.7.1'], 'pyproj': ['2.6.1.post1', '3.3.0'], 'Python': ['3.8.5', '3.9.6'], + 'PyTorch': ['1.8.1', '1.11'], 'Qhull': ['2020.1', '2020.2'], 'Qt5': ['5.14.2', '5.15.2'], 'RDFlib': ['5.0.0', '6.0.2'], @@ -127,7 +130,9 @@ releases = { 'Tcl': ['8.6.10', '8.6.11'], 'texinfo': ['6.7', '6.8'], 'texlive': ['20200406', '20200406'], + 'torchvision': ['0.9.1', '0.12.0'], 'tqdm': ['4.62.3', '4.62.3'], + 'trimesh': ['3.8.11', '3.9.36'], 'UDUNITS': ['2.2.26', '2.2.28'], 'uftp': ['1.4.1', '1.4.2'], 'X11': ['20200222', '20210802'], diff --git a/bin/setacls b/bin/setacls index adf32ed1643f4a58869df864a89dfe6b57d9a970..0eae3ea7b39b7c3c12762c5daab184bc4699e0ac 100755 --- a/bin/setacls +++ b/bin/setacls @@ -29,7 +29,7 @@ logging.basicConfig( LOGGER = logging.getLogger('setacls') config_file = 'acls.yml' -config_path = f'{os.getenv("FASTDATA_jsc")}/swmanage/EasyBuild/{os.getenv("STAGE")}/{config_file})' +config_path = f'{os.getenv("FASTDATA_jsc")}/swmanage/EasyBuild/{os.getenv("STAGE")}/{config_file}' executed_cmds = 0 @@ -299,7 +299,11 @@ def run(): # The syntax commented below is more convenient, but just works with PyYAML >5.1 # l_config = yaml.load(args.config[0], Loader=yaml.FullLoader) - with open(args.config[0].name) as config: + if isinstance(args.config, list): + config_file_path = args.config[0].name + else: + config_file_path = args.config.name + with open(config_file_path) as config: l_config = yaml.safe_load(config) log_file = '<stderr>' @@ -316,7 +320,7 @@ def run(): if args.debug: LOGGER.setLevel(logging.DEBUG) LOGGER.debug(f'{bcolors.HEADER}{bcolors.UNDERLINE}Configuration:{bcolors.ENDC}') - LOGGER.debug(f'* {bcolors.CYAN}Config file:{bcolors.ENDC} {args.config[0].name}') + LOGGER.debug(f'* {bcolors.CYAN}Config file:{bcolors.ENDC} {config_file_path}') LOGGER.debug(f'* {bcolors.CYAN}Debug:{bcolors.ENDC} {args.debug}') LOGGER.debug(f'* {bcolors.CYAN}Log file:{bcolors.ENDC} {log_file}') LOGGER.debug(f'* {bcolors.CYAN}Check:{bcolors.ENDC} {args.check}')