# IT4Innovations 2022
# JK

easyblock = 'CMakeMake'

name = 'QMCPACK'
version = '3.14.0'
versionsuffix = "-Python-%(pyver)s"

homepage = "https://qmcpack.org/"
description = """QMCPACK, is a modern high-performance open-source Quantum Monte Carlo (QMC) simulation code. Its main applications are electronic structure calculations of molecular, quasi-2D and solid-state systems. Variational Monte Carlo (VMC), diffusion Monte Carlo (DMC) and a number of other advanced QMC algorithms are implemented. Orbital space auxiliary field QMC (AFQMC) has recently been added. By directly solving the Schrodinger equation, QMC methods offer greater accuracy than methods such as density functional theory, but at a trade-off of much greater local_computational expense.
"""

toolchain = {'name': 'intel', 'version': '2020b'}
#import os
#if os.environ.get("CLUSTERNAME") in ["KAROLINA"]:
#   toolchainopts = {'opt': True, 'pic': True, 'usempi': True, 'optarch': 'march=core-avx2'}
#   prebuildopts = "echo %(builddir)s && while read i; do echo $i; sed 's|-xHost|-march=core-avx2|g' -i $i; done < <(grep xHost %(builddir)s -R | cut -d ':' -f 1 | sort -u) &&"
#else:
#   toolchainopts = {'opt': True, 'pic': True, 'usempi': True}
toolchainopts = {'opt': True, 'usempi': True}

source_urls = ['https://github.com/QMCPACK/qmcpack/archive/']
sources = ['v%(version)s.tar.gz']

builddependencies = [('CMake', '3.20.1', '', True),]

# delete GCC from the module file - hack for compilation with intel toolchain
dependencies = [
    ('libxml2', '2.9.10'),
    ('Boost', '1.74.0'),
    ('HDF5', '1.10.7', '', ('iimpi', '2020b')),
    ('Python', '3.8.6'),
    ('h5py', '3.1.0'),
    ('SciPy-bundle', '2020.11'),
    ('FFTW', '3.3.8'),
#   ('PySCF', '2.0.1'), # does not work with intel toolchain
    ('GCC', '9.3.0', '', True), # downgrade from 9.3.0 to compile 3.14.0
]

separate_build_dir = True

configopts = ' -DENABLE_SOA=1 '
configopts += ' -DCMAKE_C_COMPILER=mpiicc -DCMAKE_CXX_COMPILER=mpiicpc '
configopts += ' -DHDF5_PREFER_PARALLEL=1 -DENABLE_PHDF5=1 '
configopts += ' -DQMC_SYMLINK_TEST_FILES=0 '
configopts += ' -DCMAKE_BUILD_TYPE=Release '
configopts += ' -DQMC_OMP=ON '
configopts += ' -DCMAKE_INSTALL_PREFIX=%(installdir)s'
configopts += ' -DINSTALL_NEXUS=ON '
configopts += ' -DBUILD_UNIT_TESTS=ON -DBUILD_MICRO_BENCHMARKS=ON '
configopts += ' -DBUILD_AFQMC=ON ' # FCIQMC fails
#configopts += '-DQMC_COMPLEX=1'

preinstallopts = [
    ' ctest -j128 -V -R short -LE unstable && ' # run CMake tests in parallel
    ' mkdir -p %(installdir)s/nexus && ',
    ' mkdir -p %(installdir)s/QMCTools && ',
    ' cp -r %(builddir)s/qmcpack-%(version)s/nexus %(installdir)s/ && ',
    ' cp %(builddir)s/qmcpack-%(version)s/src/QMCTools/*.py %(installdir)s/QMCTools/ && ',
]

modextrapaths = {'PYTHONPATH': ['nexus/lib', 'QMCTools']}

sanity_check_paths = {
    'files': ['bin/qmcpack'],
    'dirs': ['bin'],
}

moduleclass = 'phys'
