# environment_variables -- settings for running Quantum ESPRESSO examples

LC_ALL=C
export LC_ALL

######## YOU MAY NEED TO EDIT THIS FILE TO MATCH YOUR CONFIGURATION ########

# BIN_DIR = path of compiled executables
#     Usually this is $PREFIX/bin, where $PREFIX is the root of the
#     Quantum ESPRESSO source tree.
# PSEUDO_DIR = path of pseudopotentials required by the examples
#     if required pseudopotentials are not found in $PSEUDO_DIR, 
#     example scripts will try to download them from NETWORK_PSEUDO
# TMP_DIR = temporary directory to be used by the examples
#     Make sure that it is writable by you and that it doesn't contain
#     any valuable data (EVERYTHING THERE WILL BE DESTROYED)

# The following should be good for most cases 

PREFIX=`cd ../../.. ; pwd`
BIN_DIR=$PREFIX/bin
PSEUDO_DIR=$PREFIX/pseudo
# Beware: everything in $TMP_DIR will be destroyed !
TMP_DIR=$PREFIX/tempdir

# There should be no need to change anything below this line

NETWORK_PSEUDO=http://www.quantum-espresso.org/wp-content/uploads/upf_files/


# wget or curl needed if some PP has to be downloaded from web site
# script wizard will surely find a better way to find what is available
if test "`which curl`" = "" ; then
   if test "`which wget`" = "" ; then
      echo "wget or curl not found: will not be able to download missing PP"
   else
      WGET="wget -O"
      # echo "wget found"
   fi
else
   WGET="curl -o"
   # echo "curl found"
fi

# To run the ESPRESSO programs on a parallel machine, you may have to
# add the appropriate commands (poe, mpirun, mpprun...) and/or options
# (specifying number of processors, pools...) before and after the
# executable's name.  That depends on how your machine is configured.
# For example on an IBM SP4:
#
#     poe             pw.x -procs 4              < file.in > file.out
#     ^^^ PARA_PREFIX      ^^^^^^^^ PARA_POSTFIX
#
# To run on a single processor, you can usually leave them empty.
# BEWARE: most tests and examples are devised to be run serially or on
# a small number of processors; do not use tests and examples to benchmark
# parallelism, do not run on too many processors


PARA_PREFIX=" "
PARA_PREFIX="mpirun -np 4"
#
# available flags: 
#                  -ni n        number of images        (or -nimage)
#                               (only for NEB; for PHonon, see below)
#                  -nk n        number of pools         (or -npool, -npools)
#                  -nb n        number of band groups   (or -nbgrp,-nband_group)
#                  -nt n        number of task groups   (or -ntg, -ntask_groups)
#                  -nd n        number of processors for linear algebra 
#                                            (or -ndiag, -northo) 
#
PARA_POSTFIX=" -nk 1 -nd 1 -nb 1 -nt 1 "
#
# The following variables are used for image parallelization of PHonon 
# (see example in PHonon/examples/Image_example) 
# NB: the number of processors in PARA_IMAGE_PREFIX is the product of the
# number of processors in PARA_PREFIX and the number of images in
# PARA_IMAGE_POSTFIX
#
PARA_IMAGE_POSTFIX="-ni 2 $PARA_POSTFIX"
PARA_IMAGE_PREFIX="mpirun -np 4"

#
# In case of mixed MPI / OpenMP parallelization you may want to limit the maximum
# number to OpenMP threads so that the number of threads per MPI process times the
# number of MPI processes equals the number of available cores to avoid hyperthreading
#
# OpenMP parallelization max number of threads
#
export OMP_NUM_THREADS=1

# function to test the exit status of a job
check_failure () {
    # usage: check_failure $?
    if test $1 != 0
    then
        echo "Error condition encountered during test: exit status = $1"
        echo "Aborting"
        exit 1
    fi
}

