# IT4Innovations
# PH 2025

easyblock = 'MakeCp'

name = 'VASP'
version = '6.4.3'
versionsuffix = '-libxc-7.0.0'

homepage = 'http://www.vasp.at'
docurls = 'https://www.vasp.at/wiki/index.php/The_VASP_Manual'
description = """The Vienna Ab initio Simulation Package (VASP) is a local computer program for atomic scale
materials modelling, e.g. electronic structure calculations and quantum-mechanical molecular dynamics,
from first principles.

To use VASP, you need an academic license from University of Vienna. Follow the instructions at https://www.vasp.at/index.php/faqs.

Please send us a list of authorized users and their IDs for which you need access (use only http://support.it4i.cz/rt). We are responsible for verifying your licenses."""

toolchain = {'name': 'intel', 'version': '2022b'}

# Vasp is proprietary software, see http://www.vasp.at/index.php/faqs on
# how to get access to the code
sources = ['%(namelower)s.%(version)s.tgz']
patches = ['VASP-%(version)s-NVHPC-24.3-CUDA-12.3.0-adjust-makefile.patch']
checksums = [
    {'vasp.%(version)s.tgz': 'fe30e773f2a3e909b5e0baa9654032dfbdeff7ec157bc348cee7681a7b6c24f4'},
    {'VASP-%(version)s-NVHPC-24.3-CUDA-12.3.0-adjust-makefile.patch':
     '2991eb38d138f4066164d185968f37ad9ab88ec00ce80e7cfe9f095dffa115b5'},
]

# use serial compilation of W90, see https://www.vasp.at/wiki/index.php/Makefile.include#Wannier90_.28optional.29
# Important: In case of Wannier90 3.x, you should compile a serial version by removing COMMS=mpi in the make.inc of Wannier90.
dependencies = [
    ('HDF5', '1.14.0'),
    ('Wannier90', '3.1.0', '-serial'),
    ('libxc', '7.0.0', '-intel-compilers-2022.2.1-nofhc', True),
]

prebuildopts = 'cp arch/makefile.include.intel ./makefile.include && '

# AMD/Intel CPU switch - We set xHost by default; change it to -march=core-avx2 when necessary
import os
if os.environ.get("CLUSTERNAME") in ["KAROLINA"]:
    prebuildopts += 'sed -i "s|-xHOST|-march=core-avx2|" makefile.include && '
    prebuildopts += 'sed -i "s|-march=xHost|-march=core-avx2|" makefile.include && '

# compile with libxc
prebuildopts += 'echo "CPP_OPTIONS += -DUSELIBXC" >> makefile.include && '
prebuildopts += 'echo "LIBXC_ROOT  ?= $EBROOTLIBXC" >> makefile.include && '
prebuildopts += 'echo "LLIBS       += -L$(LIBXC_ROOT)/lib -lxcf03 -lxc" >> makefile.include && '
prebuildopts += 'echo "INCS        += -I$(LIBXC_ROOT)/include" >> makefile.include && '

# VASP uses LIBS as a list of folders
prebuildopts += 'unset LIBS && '

buildopts = 'std gam ncl '

parallel = 1

files_to_copy = [(['bin/vasp_std', 'bin/vasp_gam', 'bin/vasp_ncl'], 'bin')]
sanity_check_paths = {
    'files': ['bin/vasp_std', 'bin/vasp_gam', 'bin/vasp_ncl'],
    'dirs': []
}
modluafooter = 'add_property("state","license")'

moduleclass = 'chem'