Skip to content

[GROMACS] [package list]

GROMACS/2024.1-cpeAMD-23.09-HeFFTe-rocm-5.2.3 (GROMACS-2024.1-cpeAMD-23.09-HeFFTe-rocm-5.2.3.eb)

Install with the EasyBuild-user module:

eb GROMACS-2024.1-cpeAMD-23.09-HeFFTe-rocm-5.2.3.eb -r
To access module help after installation and get reminded for which stacks and partitions the module is installed, use module spider GROMACS/2024.1-cpeAMD-23.09-HeFFTe-rocm-5.2.3.

EasyConfig:

# Based on recipe from Rasmus Kronberg (CSC) 
#
easyblock = 'CMakeMake'

name =          'GROMACS'
version =       '2024.1'
versionsuffix = '-HeFFTe-rocm-5.2.3' 

homepage = 'http://www.gromacs.org'

whatis = [
    'Description: GROMACS is a versatile package to perform molecular dynamics, i.e. simulate the Newtonian equations of motion for systems with hundreds to millions of particles.',
]

description = """
GROMACS is a versatile package to perform molecular dynamics, i.e. simulate the
Newtonian equations of motion for systems with hundreds to millions of
particles.

Binaries included:
* gmx_mpi: Compiled with MPI, hipSYCL and heFFTe support for multiple GPU compute nodes

The module sets the environment variables that would otherwise be set by running
the script $EBROOTGROMACS/bin/GMXRC. So running this script snould not be
}necessary in most cases.

The module also defines the shell function gromacs-completion that can be used to
turn bash command completion on for GROMACS. Note that unloading the module will
not turn this off, so it may have consequences for things you do later on or
conflict with the command completion of a different version of GROMACS.

"""

toolchain = {'name': 'cpeAMD', 'version': '23.09'}
toolchainopts = {'opt': True, 'usempi': True, 'verbose': False, 'pic': True, 'openmp': True}

source_urls = ['https://ftp.gromacs.org/pub/gromacs/']
sources =     [SOURCELOWER_TAR_GZ]

builddependencies = [
    ('buildtools', '%(toolchain_version)s', '', True), 
]

local_rocm_version = '5.2.3'

dependencies = [
    ('AdaptiveCpp', '23.10.0', f'-rocm-{local_rocm_version}'),
    ('HeFFTe', '2.4.0', f'-rocm-{local_rocm_version}'),
    ('Boost', '1.82.0'),
    ('cray-fftw/3.3.10.5', EXTERNAL_MODULE),
    ('cray-python/3.10.10', EXTERNAL_MODULE),
    ('cray-libsci/23.09.1.1', EXTERNAL_MODULE),
]

# These options are taken from CSC installation developed by Rasmus adapted for AMD toolchain 

configopts  = '-D CMAKE_BUILD_TYPE=Release '
configopts += '-D ROCM_PATH=${ROCM_PATH} '
configopts += '-D CMAKE_C_COMPILER=${ROCM_PATH}/llvm/bin/clang '
configopts += '-D CMAKE_CXX_COMPILER=${ROCM_PATH}/llvm/bin/clang++ '
configopts += '-D CMAKE_PREFIX_PATH=${CRAY_MPICH_PREFIX}:${ROCM_PATH}/lib '
configopts += '-D CMAKE_CXX_FLAGS="--gcc-toolchain=${GCC_PATH}/snos/" '
configopts += '-D GMX_GPU=SYCL '
configopts += '-D GMX_MPI=ON '
configopts += '-D GMX_OPENMP=ON '
configopts += '-D GMX_SYCL_HIPSYCL=ON '
configopts += '-D GMX_USE_HEFFTE=ON '
configopts += '-D GMX_GPU_FFT_LIBRARY=rocFFT '
configopts += '-D GMX_BUILD_OWN_FFTW=OFF '
configopts += '-D GMX_BLAS_USER=${CRAY_LIBSCI_PREFIX_DIR}/lib/libsci_amd.so '
configopts += '-D GMX_LAPACK_USER=${CRAY_LIBSCI_PREFIX_DIR}/lib/libsci_amd.so '
configopts += '-D ACPP_TARGETS="hip:gfx90a" '
configopts += '-D HIPSYCL_ROCM_PATH=${ROCM_PATH} '
configopts += '-D HIPSYCL_TARGETS="hip:gfx90a" '
configopts += '-D Heffte_ROOT=${EBROOTHEFFTE} '

skipsteps = ['test']

# This does what GMXRC.bash does except that it does not enable the command completion.
modextravars = {
    'GROMACS_DIR':     '%(installdir)s',
    'GMXBIN':          '%(installdir)s/bin',
    'GMXMAN':          '%(installdir)s/share/man',
    'GMXDATA':         '%(installdir)s/share/data',
    'GMXTOOLCHAINDIR': '%(installdir)s/share/cmake', # Defined in the standard script but not exported.
}

local_bash_completion = """
[==[
  if test -n "${BASH_VERSION+set}" && (complete) > /dev/null 2>&1; then
    if (shopt -s extglob) > /dev/null 2>&1; then
      shopt -s extglob ;
      if [ -f $GMXBIN/gmx-completion.bash ]; then
        source $GMXBIN/gmx-completion.bash ;
        for cfile in $GMXBIN/gmx-completion-*.bash ; do
          source $cfile ;
        done ;
      fi ;
    fi ;
  elif test -n "${ZSH_VERSION+set}" > /dev/null 2>&1 ; then
    autoload bashcompinit ;
    if (bashcompinit) > /dev/null 2>&1; then
      bashcompinit ;
      if [ -f $GMXBIN/gmx-completion.bash ]; then
        source $GMXBIN/gmx-completion.bash ;
        for cfile in $GMXBIN/gmx-completion-*.bash ; do
          source $cfile ;
        done ;
      fi ;
    fi ;
  fi
]==]
"""

local_csh_completion = '"echo \'Not implemented\'"'

modluafooter = """
prepend_path("LD_LIBRARY_PATH", pathJoin(os.getenv("ROCM_PATH"), "llvm/lib"))

set_shell_function( 'gromacs-completion', %(bash_completion)s, %(csh_completion)s )
""" % {
    'bash_completion': local_bash_completion,
    'csh_completion':  local_csh_completion,
}

moduleclass = 'bio'

[GROMACS] [package list]