diff --git a/Custom_MNS/custom_hierarchical_mns.py b/Custom_MNS/custom_hierarchical_mns.py
new file mode 100644
index 0000000000000000000000000000000000000000..3c5ae5bd6bf8e2f70c88f99dfb8801fb62454843
--- /dev/null
+++ b/Custom_MNS/custom_hierarchical_mns.py
@@ -0,0 +1,165 @@
+##
+# Copyright 2013-2016 Ghent University
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# the Hercules foundation (http://www.herculesstichting.be/in_English)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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/>.
+##
+"""
+Implementation of an example hierarchical module naming scheme.
+
+@author: Kenneth Hoste (Ghent University)
+@author: Markus Geimer (Forschungszentrum Juelich GmbH)
+"""
+
+import os
+import re
+from easybuild.base import fancylogger
+
+from easybuild.tools.build_log import EasyBuildError
+from easybuild.tools.module_naming_scheme.hierarchical_mns import HierarchicalMNS
+from easybuild.tools.module_naming_scheme.toolchain import det_toolchain_compilers, det_toolchain_mpi
+
+CORE = 'Core'
+COMPILER = 'Compiler'
+MPI = 'MPI'
+
+MODULECLASS_COMPILER = 'compiler'
+MODULECLASS_MPI = 'mpi'
+
+GCCCORE = 'GCCcore'
+
+# note: names in keys are ordered alphabetically
+COMP_NAME_VERSION_TEMPLATES = {
+    'icc,ifort': ('intel', '%(icc)s'),
+    'Clang,GCC': ('Clang-GCC', '%(Clang)s-%(GCC)s'),
+    'CUDA,GCC': ('GCC-CUDA', '%(GCC)s-%(CUDA)s'),
+    'xlc,xlf': ('xlcxlf', '%(xlc)s'),
+}
+
+class CustomHierarchicalMNS(HierarchicalMNS):
+    """Class implementing an example hierarchical module naming scheme."""
+    def is_short_modname_for(self, short_modname, name):
+        """
+        Determine whether the specified (short) module name is a module for software with the specified name.
+        Default implementation checks via a strict regex pattern, and assumes short module names are of the form:
+            <name>/<version>[-<toolchain>]
+        """
+        # We rename our iccifort compiler to INTEL and this needs a hard fix because it is a toolchain
+        if name == 'iccifort':
+            modname_regex = re.compile('^%s/\S+$' % re.escape('Intel'))
+        elif name == 'psmpi':
+            modname_regex = re.compile('^%s/\S+$' % re.escape('ParaStationMPI'))
+        elif name == 'impi':
+            modname_regex = re.compile('^%s/\S+$' % re.escape('IntelMPI'))
+        else:
+            modname_regex = re.compile('^%s/\S+$' % re.escape(name))
+        res = bool(modname_regex.match(short_modname))
+
+        self.log.debug("Checking whether '%s' is a module name for software with name '%s' via regex %s: %s",
+                       short_modname, name, modname_regex.pattern, res)
+
+        return res
+
+    def det_module_subdir(self, ec):
+        """
+        Determine module subdirectory, relative to the top of the module path.
+        This determines the separation between module names exposed to users, and what's part of the $MODULEPATH.
+        Examples: Core, Compiler/GCC/4.8.3, MPI/GCC/4.8.3/OpenMPI/1.6.5
+        """
+        tc_comps = det_toolchain_compilers(ec)
+        tc_comp_info = self.det_toolchain_compilers_name_version(tc_comps)
+        # determine prefix based on type of toolchain used
+        if tc_comp_info is None:
+            # no compiler in toolchain, dummy toolchain => Core module
+            subdir = CORE
+        else:
+            tc_comp_name, tc_comp_ver = tc_comp_info
+            tc_mpi = det_toolchain_mpi(ec)
+            if tc_mpi is None:
+                # compiler-only toolchain => Compiler/<compiler_name>/<compiler_version> namespace
+                # but we want the mpi module class to stand alone
+                if ec['moduleclass'] == MODULECLASS_MPI:
+                    subdir = os.path.join(COMPILER, MODULECLASS_MPI, tc_comp_name, tc_comp_ver)
+                else:
+                    subdir = os.path.join(COMPILER, tc_comp_name, tc_comp_ver)
+            else:
+                # compiler-MPI toolchain => MPI/<comp_name>/<comp_version>/<MPI_name>/<MPI_version> namespace
+                tc_mpi_fullver = self.det_full_version(tc_mpi)
+                subdir = os.path.join(MPI, tc_comp_name, tc_comp_ver, tc_mpi['name'], tc_mpi_fullver)
+
+        return subdir
+
+    def det_modpath_extensions(self, ec):
+        """
+        Determine module path extensions, if any.
+        Examples: Compiler/GCC/4.8.3 (for GCC/4.8.3 module), MPI/GCC/4.8.3/OpenMPI/1.6.5 (for OpenMPI/1.6.5 module)
+        """
+        modclass = ec['moduleclass']
+        tc_comps = det_toolchain_compilers(ec)
+        tc_comp_info = self.det_toolchain_compilers_name_version(tc_comps)
+
+        paths = []
+        if modclass == MODULECLASS_COMPILER or ec['name'] in ['iccifort']:
+            # obtain list of compilers based on that extend $MODULEPATH in some way other than <name>/<version>
+            extend_comps = []
+            # exclude GCC for which <name>/<version> is used as $MODULEPATH extension
+            excluded_comps = ['GCC']
+            for comps in COMP_NAME_VERSION_TEMPLATES.keys():
+                extend_comps.extend([comp for comp in comps.split(',') if comp not in excluded_comps])
+
+            comp_name_ver = None
+            if ec['name'] in extend_comps:
+                for key in COMP_NAME_VERSION_TEMPLATES:
+                    if ec['name'] in key.split(','):
+                        comp_name, comp_ver_tmpl = COMP_NAME_VERSION_TEMPLATES[key]
+                        comp_versions = {ec['name']: self.det_full_version(ec)}
+                        if ec['name'] == 'ifort':
+                            # 'icc' key should be provided since it's the only one used in the template
+                            comp_versions.update({'icc': self.det_full_version(ec)})
+                        if tc_comp_info is not None:
+                            # also provide toolchain version for non-dummy toolchains
+                            comp_versions.update({tc_comp_info[0]: tc_comp_info[1]})
+
+                        comp_name_ver = [comp_name, comp_ver_tmpl % comp_versions]
+                        break
+            else:
+                comp_name_ver = [ec['name'], self.det_full_version(ec)]
+                # Handle the case where someone only wants iccifort to extend the path
+                # This means icc/ifort are not of the moduleclass compiler but iccifort is
+                if ec['name'] == 'iccifort':
+                    comp_name_ver = ['intel', self.det_full_version(ec)]
+            # Exclude extending the path for icc/ifort, the iccifort special case is handled above
+            if ec['name'] not in ['icc', 'ifort']:
+                paths.append(os.path.join(COMPILER, *comp_name_ver))
+                # Always extend to capture the MPI implementations too (which are in a separate directory)
+                if ec['name'] not in [GCCCORE]:
+                    paths.append(os.path.join(COMPILER, MODULECLASS_MPI, *comp_name_ver))
+        elif modclass == MODULECLASS_MPI:
+            if tc_comp_info is None:
+                raise EasyBuildError("No compiler available in toolchain %s used to install MPI library %s v%s, "
+                                     "which is required by the active module naming scheme.",
+                                     ec['toolchain'], ec['name'], ec['version'])
+            else:
+                tc_comp_name, tc_comp_ver = tc_comp_info
+                fullver = self.det_full_version(ec)
+                paths.append(os.path.join(MPI, tc_comp_name, tc_comp_ver, ec['name'], fullver))
+
+        return paths
diff --git a/Custom_Toolchains/compiler/pgi.py b/Custom_Toolchains/compiler/pgi.py
new file mode 100644
index 0000000000000000000000000000000000000000..38b51f274cbc797041c65b8f21597e23febc90d2
--- /dev/null
+++ b/Custom_Toolchains/compiler/pgi.py
@@ -0,0 +1,117 @@
+##
+# Copyright 2015 Bart Oldeman
+#
+# This file is triple-licensed under GPLv2 (see below), MIT, and
+# BSD three-clause licenses.
+#
+# 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),
+# the Hercules foundation (http://www.herculesstichting.be/in_English)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# https://github.com/easybuilders/easybuild
+#
+# EasyBuild is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation v2.
+#
+# EasyBuild is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with EasyBuild.  If not, see <http://www.gnu.org/licenses/>.
+##
+"""
+Support for PGI compilers (pgcc, pgc++, pgf90/pgfortran) as toolchain compilers.
+
+:author: Bart Oldeman (McGill University, Calcul Quebec, Compute Canada)
+:author: Damian Alvarez (Forschungszentrum Juelich GmbH)
+"""
+
+from distutils.version import LooseVersion
+
+import easybuild.tools.systemtools as systemtools
+from easybuild.tools.build_log import EasyBuildError
+from easybuild.tools.toolchain.compiler import Compiler
+
+
+TC_CONSTANT_PGI = "PGI"
+
+
+class Pgi(Compiler):
+    """PGI compiler class
+    """
+
+    COMPILER_MODULE_NAME = ['PGI']
+
+    COMPILER_FAMILY = TC_CONSTANT_PGI
+
+    # References:
+    # http://www.pgroup.com/doc/pgiref.pdf
+    # http://www.pgroup.com/products/freepgi/freepgi_ref/ch02.html#Mflushz
+    # http://www.pgroup.com/products/freepgi/freepgi_ref/ch02.html#Mfprelaxed
+    # http://www.pgroup.com/products/freepgi/freepgi_ref/ch02.html#Mfpapprox
+    COMPILER_UNIQUE_OPTION_MAP = {
+        'i8': 'i8',
+        'r8': 'r8',
+        'optarch': '', # PGI by default generates code for the arch it is running on!
+        'openmp': 'mp',
+        'ieee': 'Kieee',
+        'strict': ['Mnoflushz','Kieee'],
+        'precise': ['Mnoflushz'],
+        'defaultprec': ['Mflushz'],
+        'loose': ['Mfprelaxed'],
+        'veryloose': ['Mfprelaxed=div,order,intrinsic,recip,sqrt,rsqrt', 'Mfpapprox'],
+        'vectorize': {False: 'Mnovect', True: 'Mvect'},
+    }
+
+    # used when 'optarch' toolchain option is enabled (and --optarch is not specified)
+    COMPILER_OPTIMAL_ARCHITECTURE_OPTION = {
+        (systemtools.X86_64, systemtools.AMD): '',
+        (systemtools.X86_64, systemtools.INTEL): '',
+    }
+    # used with --optarch=GENERIC
+    COMPILER_GENERIC_OPTION = {
+        (systemtools.X86_64, systemtools.AMD): 'tp=x64',
+        (systemtools.X86_64, systemtools.INTEL): 'tp=x64',
+    }
+
+    COMPILER_CC = 'pgcc'
+    # C++ compiler command is version-dependent, see below
+    COMPILER_CXX = None
+
+    COMPILER_F77 = 'pgf77'
+    COMPILER_F90 = 'pgf90'
+    COMPILER_FC = 'pgfortran'
+
+    LINKER_TOGGLE_STATIC_DYNAMIC = {
+        'static': '-Bstatic',
+        'dynamic':'-Bdynamic',
+    }
+
+    def _set_compiler_flags(self):
+        """Set -tp=x64 if optarch is set to False."""
+        if not self.options.get('optarch', False):
+            self.variables.nextend('OPTFLAGS', ['tp=x64'])
+        super(Pgi, self)._set_compiler_flags()
+
+    def _set_compiler_vars(self):
+        """Set the compiler variables"""
+        pgi_version = self.get_software_version(self.COMPILER_MODULE_NAME)[0]
+
+        # based on feedback from PGI support: use pgc++ with PGI 14.10 and newer, pgCC for older versions
+        if LooseVersion(pgi_version) >= LooseVersion('14.10'):
+            self.COMPILER_CXX = 'pgc++'
+        else:
+            self.COMPILER_CXX = 'pgCC'
+
+        if LooseVersion(pgi_version) >= LooseVersion('19.1'):
+            self.COMPILER_F77 = 'pgfortran'
+        else:
+            self.COMPILER_F77 = 'pgf77'
+
+        super(Pgi, self)._set_compiler_vars()
diff --git a/Custom_Toolchains/fft/intelfftw.py b/Custom_Toolchains/fft/intelfftw.py
new file mode 100644
index 0000000000000000000000000000000000000000..4e89a667bd2c7b5b57dac7fde9d5fc29fb2c5ce4
--- /dev/null
+++ b/Custom_Toolchains/fft/intelfftw.py
@@ -0,0 +1,114 @@
+##
+# Copyright 2012-2018 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/>.
+##
+"""
+Support for Intel FFTW as toolchain FFT library.
+
+:author: Stijn De Weirdt (Ghent University)
+:author: Kenneth Hoste (Ghent University)
+"""
+import os
+from distutils.version import LooseVersion
+
+from easybuild.tools.build_log import EasyBuildError, dry_run_warning
+from easybuild.tools.config import build_option
+from easybuild.toolchains.fft.fftw import Fftw
+from easybuild.tools.modules import get_software_root, get_software_version
+
+
+class IntelFFTW(Fftw):
+    """FFTW wrapper functionality of Intel MKL"""
+
+    FFT_MODULE_NAME = ['imkl']
+
+    FFT_LIB_GROUP = True
+    FFT_LIB_STATIC = True
+
+    def _set_fftw_variables(self):
+        if not hasattr(self, 'BLAS_LIB_DIR'):
+            raise EasyBuildError("_set_fftw_variables: IntelFFT based on IntelMKL (no BLAS_LIB_DIR found)")
+
+        imklver = get_software_version(self.FFT_MODULE_NAME[0])
+
+        picsuff = ''
+        if self.options.get('pic', None):
+            picsuff = '_pic'
+        bitsuff = '_lp64'
+        if self.options.get('i8', None):
+            bitsuff = '_ilp64'
+        compsuff = '_intel'
+        if get_software_root('icc') is None:
+            if get_software_root('PGI'):
+                compsuff = '_pgi'
+            elif get_software_root('GCC') or get_software_root('GCCcore'):
+                compsuff = '_gnu'
+            else:
+                raise EasyBuildError("Not using Intel compilers, PGI nor GCC, don't know compiler suffix for FFTW libraries.")
+
+        interface_lib = "fftw3xc%s%s" % (compsuff, picsuff)
+        fftw_libs = [interface_lib]
+        cluster_interface_lib = None
+        if self.options.get('usempi', False):
+            # add cluster interface for recent imkl versions
+            if LooseVersion(imklver) >= LooseVersion('10.3'):
+                suff = picsuff
+                if LooseVersion(imklver) >= LooseVersion('11.0.2'):
+                    suff = bitsuff + suff
+                cluster_interface_lib = 'fftw3x_cdft%s' % suff
+                fftw_libs.append(cluster_interface_lib)
+            fftw_libs.append("mkl_cdft_core")  # add cluster dft
+            fftw_libs.extend(self.variables['LIBBLACS'].flatten()) # add BLACS; use flatten because ListOfList
+
+        self.log.debug('fftw_libs %s' % fftw_libs.__repr__())
+        fftw_libs.extend(self.variables['LIBBLAS'].flatten())  # add BLAS libs (contains dft)
+        self.log.debug('fftw_libs %s' % fftw_libs.__repr__())
+
+        self.FFT_LIB_DIR = self.BLAS_LIB_DIR
+        self.FFT_INCLUDE_DIR = [os.path.join(d, 'fftw') for d in self.BLAS_INCLUDE_DIR]
+
+        # building the FFTW interfaces is optional,
+        # so make sure libraries are there before FFT_LIB is set
+        imklroot = get_software_root(self.FFT_MODULE_NAME[0])
+        fft_lib_dirs = [os.path.join(imklroot, d) for d in self.FFT_LIB_DIR]
+        fftw_lib_exists = lambda x: any([os.path.exists(os.path.join(d, "lib%s.a" % x)) for d in fft_lib_dirs])
+        if not fftw_lib_exists(interface_lib) and LooseVersion(imklver) >= LooseVersion("10.2"):
+            # interface libs can be optional:
+            # MKL >= 10.2 include fftw3xc and fftw3xf interfaces in LIBBLAS=libmkl_gf/libmkl_intel
+            # See https://software.intel.com/en-us/articles/intel-mkl-main-libraries-contain-fftw3-interfaces
+            # The cluster interface libs (libfftw3x_cdft*) can be omitted if the toolchain does not provide MPI-FFTW
+            # interfaces.
+            fftw_libs = [l for l in fftw_libs if l not in [interface_lib, cluster_interface_lib]]
+
+        # filter out libraries from list of FFTW libraries to check for if they are not provided by Intel MKL
+        check_fftw_libs = [lib for lib in fftw_libs if lib not in ['dl', 'gfortran']]
+
+        if all([fftw_lib_exists(lib) for lib in check_fftw_libs]):
+            self.FFT_LIB = fftw_libs
+        else:
+            msg = "Not all FFTW interface libraries %s are found in %s" % (check_fftw_libs, fft_lib_dirs)
+            msg += ", can't set $FFT_LIB."
+            if self.dry_run:
+                dry_run_warning(msg, silent=build_option('silent'))
+            else:
+                raise EasyBuildError(msg)
diff --git a/Custom_Toolchains/gcccoremkl.py b/Custom_Toolchains/gcccoremkl.py
new file mode 100644
index 0000000000000000000000000000000000000000..c974930d7d6d060a48156518e54e856679a1964c
--- /dev/null
+++ b/Custom_Toolchains/gcccoremkl.py
@@ -0,0 +1,39 @@
+##
+# Copyright 2013-2018 Ghent University
+#
+# This file is triple-licensed under GPLv2 (see below), MIT, and
+# BSD three-clause licenses.
+#
+# 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 gpsmkl compiler toolchain (includes GCC, ParaStation MPI and MKL).
+"""
+
+from easybuild.toolchains.gcccore import GCCcore
+from easybuild.toolchains.fft.intelfftw import IntelFFTW
+from easybuild.toolchains.linalg.intelmkl import IntelMKL
+
+class Gcccoremkl(GCCcore, IntelMKL, IntelFFTW):
+    """Compiler toolchain with GCCcore and MKL."""
+    NAME = 'gcccoremkl'
+    SUBTOOLCHAIN = GCCcore.NAME
diff --git a/Custom_Toolchains/gmvapich2c.py b/Custom_Toolchains/gmvapich2c.py
new file mode 100644
index 0000000000000000000000000000000000000000..918f86f5ebacc274f87352e4f3770e9450cab1da
--- /dev/null
+++ b/Custom_Toolchains/gmvapich2c.py
@@ -0,0 +1,42 @@
+##
+# Copyright 2012-2016 Ghent University
+# Copyright 2016-2016 Forschungszentrum Juelich
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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 gmvapich2 compiler toolchain (includes GCC and MVAPICH2, and CUDA as a dependency).
+
+@author: Kenneth Hoste (Ghent University)
+@author: Damian Alvarez (Forschungszentrum Juelich)
+"""
+
+from easybuild.toolchains.gcc import GccToolchain
+# We pull in MPI and CUDA at once so this maps nicely to HMNS
+from easybuild.toolchains.mpi.mvapich2 import Mvapich2
+from easybuild.toolchains.compiler.cuda import Cuda
+
+# Order matters here!
+class Gmvapich2c(GccToolchain, Cuda, Mvapich2):
+    """Compiler toolchain with GCC and MVAPICH2, and CUDA as a dependency."""
+    NAME = 'gmvapich2c'
+    SUBTOOLCHAIN = GccToolchain.NAME
diff --git a/Custom_Toolchains/gmvmklc.py b/Custom_Toolchains/gmvmklc.py
new file mode 100644
index 0000000000000000000000000000000000000000..6394f7e3b226ef6843ab18f30b069d099e3bcd1a
--- /dev/null
+++ b/Custom_Toolchains/gmvmklc.py
@@ -0,0 +1,43 @@
+##
+# Copyright 2016-2016 Ghent University
+# Copyright 2016-2016 Forschungszentrum Juelich
+#
+# This file is triple-licensed under GPLv2 (see below), MIT, and
+# BSD three-clause licenses.
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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 gmvmklc compiler toolchain (includes GCC, MVAPICH2 and MKL, and CUDA as dependency).
+
+@author: Damian Alvarez (Forschungszentrum Juelich)
+"""
+
+from easybuild.toolchains.gmvapich2c import Gmvapich2c
+from easybuild.toolchains.fft.intelfftw import IntelFFTW
+from easybuild.toolchains.linalg.intelmkl import IntelMKL
+
+
+class Gmvmklc(Gmvapich2c, IntelMKL, IntelFFTW):
+    """Compiler toolchain with GCC, MVAPICH2 and MKL, and CUDA as dependency."""
+    NAME = 'gmvmklc'
+    SUBTOOLCHAIN = Gmvapich2c.NAME
diff --git a/Custom_Toolchains/gmvolfc.py b/Custom_Toolchains/gmvolfc.py
new file mode 100644
index 0000000000000000000000000000000000000000..c5ce82ba892144082109cfe7850233c40dd582f4
--- /dev/null
+++ b/Custom_Toolchains/gmvolfc.py
@@ -0,0 +1,45 @@
+##
+# Copyright 2016-2016 Ghent University
+# Copyright 2016-2016 Forschungszentrum Juelich
+#
+# This file is triple-licensed under GPLv2 (see below), MIT, and
+# BSD three-clause licenses.
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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 gmvolfc compiler toolchain (includes GCC, MVAPICH2, OpenBLAS, LAPACK, ScaLAPACK 
+and FFTW, and CUDA as dependency).
+
+@author: Damian Alvarez (Forschungszentrum Juelich)
+"""
+
+from easybuild.toolchains.gmvapich2c import Gmvapich2c
+from easybuild.toolchains.fft.fftw import Fftw
+from easybuild.toolchains.linalg.openblas import OpenBLAS
+from easybuild.toolchains.linalg.scalapack import ScaLAPACK
+
+
+class Gmvolfc(Gmvapich2c, OpenBLAS, ScaLAPACK, Fftw):
+    """Compiler toolchain with GCC, MVAPICH2, OpenBLAS, ScaLAPACK and FFTW, and CUDA as dependency."""
+    NAME = 'gmvolfc'
+    SUBTOOLCHAIN = Gmvapich2c.NAME
diff --git a/Custom_Toolchains/gpsmkl.py b/Custom_Toolchains/gpsmkl.py
new file mode 100644
index 0000000000000000000000000000000000000000..d56bd28f0605d615222c973f506c24a31004f964
--- /dev/null
+++ b/Custom_Toolchains/gpsmkl.py
@@ -0,0 +1,41 @@
+##
+# Copyright 2013-2018 Ghent University
+#
+# This file is triple-licensed under GPLv2 (see below), MIT, and
+# BSD three-clause licenses.
+#
+# 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 gpsmkl compiler toolchain (includes GCC, ParaStation MPI and MKL).
+
+"""
+
+from easybuild.toolchains.gpsmpi import Gpsmpi
+from easybuild.toolchains.fft.intelfftw import IntelFFTW
+from easybuild.toolchains.linalg.intelmkl import IntelMKL
+
+
+class Gpsmkl(Gpsmpi, IntelMKL, IntelFFTW):
+    """Compiler toolchain with GCC, Parastation MPI and MKL."""
+    NAME = 'gpsmkl'
+    SUBTOOLCHAIN = Gpsmpi.NAME
diff --git a/Custom_Toolchains/imvapich2c.py b/Custom_Toolchains/imvapich2c.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5656074ff71563661a8e8028f2a123f95691efa
--- /dev/null
+++ b/Custom_Toolchains/imvapich2c.py
@@ -0,0 +1,41 @@
+##
+# Copyright 2016-2016 Ghent University
+# Copyright 2016-2016 Forschungszentrum Juelich
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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 imvapich2c compiler toolchain (includes Intel and MVAPICH2, and CUDA as dependency).
+
+@author: Damian Alvarez (Forschungszentrum Juelich)
+"""
+
+from easybuild.toolchains.iccifort import IccIfort
+# We pull in MPI and CUDA at once so this maps nicely to HMNS
+from easybuild.toolchains.mpi.mvapich2 import Mvapich2
+from easybuild.toolchains.compiler.cuda import Cuda
+
+# Order matters here!
+class Imvapich2c(IccIfort, Cuda, Mvapich2):
+    """Compiler toolchain with Intel and MVAPICH2, with CUDA as dependency."""
+    NAME = 'imvapich2c'
+    SUBTOOLCHAIN = IccIfort.NAME
diff --git a/Custom_Toolchains/imvmklc.py b/Custom_Toolchains/imvmklc.py
new file mode 100644
index 0000000000000000000000000000000000000000..92f88582f41fda21946afdcce19aa6c2755673be
--- /dev/null
+++ b/Custom_Toolchains/imvmklc.py
@@ -0,0 +1,43 @@
+##
+# Copyright 2016-2016 Ghent University
+# Copyright 2016-2016 Forschungszentrum Juelich
+#
+# This file is triple-licensed under GPLv2 (see below), MIT, and
+# BSD three-clause licenses.
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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 imvmklc compiler toolchain (includes Intel, MVAPICH2 and MKL, and CUDA as dependency).
+
+@author: Damian Alvarez (Forschungszentrum Juelich)
+"""
+
+from easybuild.toolchains.imvapich2c import Imvapich2c
+from easybuild.toolchains.fft.intelfftw import IntelFFTW
+from easybuild.toolchains.linalg.intelmkl import IntelMKL
+
+
+class Imvmklc(Imvapich2c, IntelMKL, IntelFFTW):
+    """Compiler toolchain with Intel, MVAPICH2 and MKL, and CUDA as dependency."""
+    NAME = 'imvmklc'
+    SUBTOOLCHAIN = Imvapich2c.NAME
diff --git a/Custom_Toolchains/pmvapich2c.py b/Custom_Toolchains/pmvapich2c.py
new file mode 100644
index 0000000000000000000000000000000000000000..9328b2122c159fae822bc0611729eb390163a180
--- /dev/null
+++ b/Custom_Toolchains/pmvapich2c.py
@@ -0,0 +1,41 @@
+##
+# Copyright 2016-2016 Ghent University
+# Copyright 2016-2016 Forschungszentrum Juelich
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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 pmvapich2c compiler toolchain (includes PGI and MVAPICH2, and CUDA as dependency).
+
+@author: Damian Alvarez (Forschungszentrum Juelich)
+"""
+
+from easybuild.toolchains.pgi import PgiToolchain
+# We pull in MPI and CUDA at once so this maps nicely to HMNS
+from easybuild.toolchains.mpi.mvapich2 import Mvapich2
+from easybuild.toolchains.compiler.cuda import Cuda
+
+# Order matters!
+class Pmvapich2c(PgiToolchain, Cuda, Mvapich2):
+    """Compiler toolchain with PGI and MVAPICH2, with CUDA as dependency."""
+    NAME = 'pmvapich2c'
+    SUBTOOLCHAIN = PgiToolchain.NAME
diff --git a/Custom_Toolchains/pmvmklc.py b/Custom_Toolchains/pmvmklc.py
new file mode 100644
index 0000000000000000000000000000000000000000..08e355c6b6dad4d0b3faad8290033626ad58b2f8
--- /dev/null
+++ b/Custom_Toolchains/pmvmklc.py
@@ -0,0 +1,43 @@
+##
+# Copyright 2016-2016 Ghent University
+# Copyright 2016-2016 Forschungszentrum Juelich
+#
+# This file is triple-licensed under GPLv2 (see below), MIT, and
+# BSD three-clause licenses.
+#
+# This file is part of EasyBuild,
+# originally created by the HPC team of Ghent University (http://ugent.be/hpc/en),
+# with support of Ghent University (http://ugent.be/hpc),
+# the Flemish Supercomputer Centre (VSC) (https://vscentrum.be/nl/en),
+# Flemish Research Foundation (FWO) (http://www.fwo.be/en)
+# and the Department of Economy, Science and Innovation (EWI) (http://www.ewi-vlaanderen.be/en).
+#
+# http://github.com/hpcugent/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 pmvmklc compiler toolchain (includes PGI, MVAPICH2 and MKL, and CUDA as dependency).
+
+@author: Damian Alvarez (Forschungszentrum Juelich)
+"""
+
+from easybuild.toolchains.pmvapich2c import Pmvapich2c
+from easybuild.toolchains.fft.intelfftw import IntelFFTW
+from easybuild.toolchains.linalg.intelmkl import IntelMKL
+
+
+class Pmvmklc(Pmvapich2c, IntelMKL, IntelFFTW):
+    """Compiler toolchain with PGI, MVAPICH2 and MKL, and CUDA as dependency."""
+    NAME = 'pmvmklc'
+    SUBTOOLCHAIN = Pmvapich2c.NAME