diff --git a/Custom_EasyBlocks/cpmd.py b/Custom_EasyBlocks/cpmd.py index 25b38296877dd66301ef190bc1d46b1c8a5f3c3c..8885f4b26da9e8646fc4f11f6e61632d14724894 100644 --- a/Custom_EasyBlocks/cpmd.py +++ b/Custom_EasyBlocks/cpmd.py @@ -36,7 +36,8 @@ EasyBuild support for building and installing CPMD, implemented as an easyblock #the pseudo-fix is to remove installdir/obj as postinstallcmds from the easyconfig file #the documentation was missing and is now added in a somewhat weird procedure #to the builddir and subsequently copied to the installdir/doc via postinstallcmds from the easyconfig file -#the hybrid MPI/OMP version can solely installed through the openmp toolchain option +#the hybrid version is installed via prefix_opt = '-omp -DEST=' independent of toolchain options in easyconfig file +# #the cuda implementation is ignored # @@ -68,6 +69,7 @@ class EB_CPMD(ConfigureMake): """Custom easyconfig parameters for CPMD.""" extra_vars = { 'base_configuration': [None, "Base configuration from which to start (file name)", CUSTOM], + 'MIT' : [None, "Open-Source Version of CPMD (MIT licence)",CUSTOM], } return ConfigureMake.extra_options(extra_vars) @@ -89,7 +91,12 @@ class EB_CPMD(ConfigureMake): config_file_candidates = [] for confdirname in ["configure", "CONFIGURE"]: - config_file_prefix = os.path.join(self.builddir, "CPMD", confdirname) + if self.cfg['MIT']: + cpmdname = 'CPMD-%s' % self.version + else: + cpmdname = 'CPMD' + + config_file_prefix = os.path.join(self.builddir, cpmdname , confdirname) if os.path.isdir(config_file_prefix): break else: @@ -149,6 +156,8 @@ class EB_CPMD(ConfigureMake): (r"^(\s*CC=.*)", r"#\1"), (r"^(\s*FC=.*)", r"#\1"), (r"^(\s*LD)=.*", r"\1='$(FC)'"), + (r" -openmp ", r" -qopenmp "), + (r"-mkl=", r"-qmkl="), ]) except IOError as err: raise EasyBuildError("Failed to patch %s: %s", selected_base_config, err) @@ -174,8 +183,8 @@ class EB_CPMD(ConfigureMake): options = [self.cfg['configopts']] # enable OpenMP support if desired - if self.toolchain.options.get('openmp', None) and LooseVersion(self.version) >= LooseVersion('4.0'): - options.append("-omp") +# if self.toolchain.options.get('openmp', None) and LooseVersion(self.version) >= LooseVersion('4.0'): +# options.append("-omp") # This "option" has to come last as it's the chief argument, coming after # all flags and so forth. @@ -240,11 +249,12 @@ class EB_CPMD(ConfigureMake): if preproc_flag is None: preproc_flag = '' +# do not use default='None' for CPPFLAGS apply_regex_substitutions(makefile, [ - (r"^(\s*CPPFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('CPPFLAGS'))), - (r"^(\s*CFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('CFLAGS'))), - (r"^(\s*FFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('FFLAGS'))), - (r"^(\s*LFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('LDFLAGS'))), + (r"^(\s*CPPFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('CPPFLAGS',' '))), + (r"^(\s*CFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('CFLAGS',' '))), + (r"^(\s*FFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('FFLAGS',' '))), + (r"^(\s*LFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('LDFLAGS',' '))), # Allow to define own XFLAGS (r"# CPPFLAGS =", r"CPPFLAGS +="), @@ -259,14 +269,14 @@ class EB_CPMD(ConfigureMake): ]) if self.toolchain.options.get('openmp', None): apply_regex_substitutions(makefile, [ - (r"^(\s*LFLAGS\s*=.*)", r"\1 {0} {1}".format(os.getenv('LIBLAPACK_MT'), os.getenv('LIBBLAS_MT'))) + (r"^(\s*LFLAGS\s*=.*)", r"\1 {0} {1}".format(os.getenv('LIBLAPACK_MT',' '), os.getenv('LIBBLAS_MT',' '))) ]) else: apply_regex_substitutions(makefile, [ - (r"^(\s*LFLAGS\s*=.*)", r"\1 {0} {1}".format(os.getenv('LIBLAPACK'), os.getenv('LIBBLAS'))) + (r"^(\s*LFLAGS\s*=.*)", r"\1 {0} {1}".format(os.getenv('LIBLAPACK',' '), os.getenv('LIBBLAS',' '))) ]) apply_regex_substitutions(makefile, [ - (r"^(\s*LFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('LIBFFT'))), + (r"^(\s*LFLAGS\s*=.*)", r"\1 {0}".format(os.getenv('LIBFFT',' '))), ]) if get_software_root('imkl'): diff --git a/Golden_Repo/c/CPMD/CPMD-4.3-intel-para-2022a_MIT.eb b/Golden_Repo/c/CPMD/CPMD-4.3-intel-para-2022a_MIT.eb new file mode 100644 index 0000000000000000000000000000000000000000..3085814b6d28470fcfc7ead35a9a0db02212c346 --- /dev/null +++ b/Golden_Repo/c/CPMD/CPMD-4.3-intel-para-2022a_MIT.eb @@ -0,0 +1,58 @@ +name = 'CPMD' +version = '4.3' +versionsuffix = '_MIT' + +homepage = 'https://github.com/CPMD-code' +description = """The CPMD code is a parallelized plane wave / pseudopotential +implementation of Density Functional Theory, particularly designed for +ab-initio molecular dynamics. This is version 4.3 released under MIT licence in January 2023. +""" + +toolchain = {'name': 'intel-para', 'version': '2022a'} +toolchainopts = {'usempi': True} + +sources = [ + {'download_filename': 'archive/refs/tags/%(version)s.tar.gz', 'filename': 'cpmd-4.3MIT.tar.gz'}, + 'cpmd4.3_manual.pdf', +] + +source_urls = [ + 'https://github.com/CPMD-code/CPMD', +] + +patches = [ + 'cppflags.patch', + '%(namelower)s-v%(version)s-config.patch' +] + +checksums = [ + 'e0290f9da0d255f90a612e60662b14a97ca53003f89073c6af84fa7bc8739f65', + '2bfe01db05df1cb21cc8eae500da92b7744c786beeef25e6b2c86116ffc2e135', + '36c57801d5643c5e07f81ce7d4e973ae2e3100fb61220bccbbe4de3629c20d8c', + '45719bf7ca0c567c9c78b3f23201976fceda565d47fea2d1bc998b72fdc53caa', +] + +# the cpmd.py post-cleanup of the results of the configure step +# is rather error-prone + +preconfigopts = 'pwd && chmod u+x scripts/configure.sh && ' + +prefix_opt = '-DEST=' + +MIT = True + +postinstallcmds = [ + 'rm -rf %(installdir)s/obj', + 'mkdir %(installdir)s/doc', + 'cp %(builddir)s/cpmd4.3_manual.pdf %(installdir)s/doc' +] + + +sanity_check_paths = { + 'files': ['bin/cpmd.x', 'lib/libcpmd.a'], + 'dirs': ['bin', 'lib'], +} + +modloadmsg = 'MPI-Version: cpmd.x \n' + +moduleclass = 'chem'