#!/bin/bash
#
# $Header: /u/gcmpack/MITgcm/tools/build_options/SUPER-UX_SX-ACE_sxf90_awi,v 1.3 2015/06/15 15:34:59 mlosch Exp $
# $Name:  $

# for cross compiling on stan1.awi.de
# uname -a:
# Linux stan1.awi.de 2.6.32-358.18.1.el6.x86_64 #1 SMP Fri Aug 2 17:04:38 EDT 2013 x86_64 x86_64 x86_64 GNU/Linux
# before using this build-options file make sure you have the correct
# modules loaded, currently:
# module load sxf90 sxc++ sxmpi sxnetcdf


CC='sxcc -sxace'
if test "x$MPI" = xtrue ; then
  FC='sxmpif90'
  LINK='sxmpif90'
 #LINK='sxmpif90 -p' # with profiler
else
  FC='sxf90'
  LINK='sxf90'
fi

FC_NAMEMANGLE="#define FC_NAMEMANGLE(X)  X ## _"
# nec use
DEFINES='-DTARGET_NEC_SX -DWORDLENGTH=1 -DHAVE_CLOC -UHAVE_SIGREG -DSEAICE_VECTORIZE_LSR -DSEAICE_LSR_ZEBRA -DCG2D_OUTERLOOPITERS=10 -DCG3D_OUTERLOOPITERS=10'
CPP='/lib/cpp -traditional -P'
RMFILES='*.L'

FFLAGS='-Pstack -sxace'
# automatic inlining for routines < 50 lines (default) and in the same file
# where they are to be inlined (we do not have too many of those)
FFLAGS="$FFLAGS -pi"

# This is how you inline external routines if they are longer than 50 lines
# and live in a separate file (the actual routines depend on the packages
# used, therefore there are only a few examples here); unfortunately, these
# flags break the genmake2 tests, so they get an extra flag variable that
# is not tested in genmake2
FEXTRAFLAGS='-pi auto fullmsg exp=barrier,ucase,timestep_tracer,ilnblnk,ifnblnk,cycle_tracer,pressure_for_eos,sw_temp,sw_ptmp,gsw_pt_from_ct rexp=fool_the_compiler,fool_the_compiler_r8,bar2,sw_adtg,gsw_ct_from_pt,gsw_gibbs_pt0_pt0 expin=barrier.f,timestep_tracer.f,fool_the_compiler.f,bar2.f,utils.f,cycle_tracer.f,pressure_for_eos.f,seawater.f,gsw_teos10.f'
# additional candidates for inlining are parts of packages that are not
# always used, therefore use this at your own risk:
#FEXTRAFLAGS="${FEXTRAFLAGS} -pi fullmsg exp= expin="
#
# Note: explicit inlining requires that all files (*.f) are already
# available, so that the building sequence should be 
# genmake2 [OPTIONS] && make depend && make small_f && make

#-- additional options:
# include a formated code listing and a listing of compiler transformations
# in *.L files
#FFLAGS="$FFLAGS -R2"
# assume a loop count of 5,000,000 instead of estimating it from field
# declarations and include details messages about vectorization (if -R2
# specified)
#FFLAGS=$FFLAGS' -Wf "-pvctl noassume loopcnt=5000000 fullmsg"'
# trace output for performance analysis
#FFLAGS=$FFLAGS' -ftrace'
# default automatic optimization level
#FOPTIM='-C vopt'

# these files require lower optimization
NOOPTFILES='ini_forcing.F mom_calc_visc.F'
NOOPTFILES="$NOOPTFILES ptracers_dyn_state_data_mod.F ptracers_dyn_state_mod.F"
if test "x$IEEE" = x ; then
    # highest automatic optimization level, handle with care
    FOPTIM='-C hopt'
    NOOPTFLAGS='-C vopt'
else
    if test "x$DEVEL" = x ; then  #- no optimisation + IEEE :
	FOPTIM='-C vsafe'
	NOOPTFLAGS=$FOPTIM
    else                          #- development/check options:
	# enable runtime checking of array bounds and arguments of routines
	FOPTIM='-C vsafe -g -eC -eP'
	NOOPTFLAGS=$FOPTIM
        # remove extra flags and explicit inlining
	FEXTRAFLAGS=
    fi
fi

# awi specific paths and stuff, available only after "module load sxnetcdf"
INCLUDES="-I${SX_NETCDF_INC}"
LIBS="-L${SX_NETCDF_LIB} -lnetcdf"

if test "x$MPI" = xtrue ; then
    # path to mpi header files, available only after "module load sxmpi"
    INCLUDES="$INCLUDES -I${SX_BASE_MPI}/include"
fi

