#!/bin/bash
#
#
#  build options used with the Intel compiler, version 8 and 9,
#  for the daily testing on ACES (which are initiated by cron jobs
#  on the "ao" head node).
#
#  Needs the appropriate module commands,
#  and DON'T FORGET to set environment variable MPI_INC_DIR to the include
#  directory of the selected MPI implementation
#
#-- using default intel (v8.1) and default mpich/intel:
#    module add mpich/intel
#    module add netcdf/3.6.1/icc
#   e.g.(sh,bash):
#    export MPI_INC_DIR='/usr/local/pkg/mpich/mpich-intel/include/'
#   (and run using mpirun -machinefile my_list_of_nodes)
#
#-- using intel v9.0 and mpich2-intel, in this order:
#    module add ifc/9.0.021 icc/9.0.021 intel/9.0
#    module add mpich2/1.0.3/intel
#    module add netcdf/3.6.1/icc
#    module add mpiexec             (<-- to run with mpiexec)
#   e.g.(sh,bash):
#    export MPI_INC_DIR='/usr/local/pkg/mpich2/mpich2-1.0.3/intel/include/'
#   (and run using mpiexec)
#
#-- Multi-Threading with OpenMP:
#  -several problems with earlier version of ifort (including some version 8)
#  -with version 9 and more recent one:
#   1) compile with genmake2 -omp option ;
#   2) needs to set environment variable OMP_NUM_THREADS, and generally,
#      needs also to increase the thread stack-size:
#     (sh, bash) > export OMP_NUM_THREADS=2
#                > export KMP_STACKSIZE=400m
#     (csh,tcsh) > setenv OMP_NUM_THREADS 2
#                > setenv KMP_STACKSIZE 400m
#  NOTE: set KMP_STACKSIZE in .bashrc/.profile/.cshrc/.tcshrc is the easiest
#  way (I found) to set it for all proc; not an issue (?) for OMP_NUM_THREADS

# Notes: the PBS -V option for exporting environment variables does not work
#        => need to set all env var on compute nodes

FC='mpif77'
CC='mpicc'
F90C='mpif90 -fixed -c '
LINK='mpif77'

#-- for NetCDF:
INCLUDES="-I$NETCDF_INCDIR"
INCLUDEDIRS=$NETCDF_INCDIR
LIBS="-L$NETCDF_LIBDIR"

#- for MPI:
INCLUDES="$INCLUDES -I$MPI_INC_DIR"
INCLUDEDIRS="$INCLUDEDIRS $MPI_INC_DIR"
MPIINCLUDEDIR="$MPI_INC_DIR"
MPI_HEADER_FILES='mpif.h mpiof.h'
MPI_HEADER_FILES_INC='./mpi_headers/mpif.h ./mpi_headers/mpiof.h'

DEFINES='-DALLOW_USE_MPI -DALWAYS_USE_MPI -DWORDLENGTH=4'
CPP='cpp  -traditional -P'
EXTENDED_SRC_FLAG='-132'
OMPFLAG='-openmp'

NOOPTFLAGS='-O0'
NOOPTFILES='mds_byteswapr8.F mds_byteswapr4.F mds_byteswapi4.F'

#  Note that the -mp switch is for ieee "maintain precision" and is
#  roughly equivalent to -ieee
if test "x$IEEE" = x ; then
    FOPTIM='-O3 -align'
    #P3 FOPTIM=$FOPTIM' -tpp6 -xWKM'
    #P4 FOPTIM=$FOPTIM' -tpp7 -xWKM'
    FFLAGS="$FFLAGS -r8 -i4 -w95 -W0 -WB -assume byterecl -convert big_endian"
else
    # FOPTIM='-O0 -noalign -CA -CB -CU -CV -CS'
    FOPTIM='-O0 -noalign -CB -CU -CV'
    FFLAGS="$FFLAGS -w95 -W0 -WB -pc64 -xW -assume byterecl -convert big_endian"
    # FLAGS="$FFLAGS -mp -w95 -W0 -WB -assume byterecl -convert big_endian"
fi
#- might want to use '-r8' for fizhi pkg:
#FFLAGS="$FFLAGS -r8"

F90FLAGS=$FFLAGS
F90OPTIM=$FOPTIM

NOOPTFILES=$NOOPTFILES' mitcplr_char2real.F mitcplr_real2char.F'
NOOPTFILES=$NOOPTFILES' mitcplr_char2int.F mitcplr_int2char.F mds_byteswap.F'

