#
#   This config file set up most of the defaults for the cfs_v2 fore(hind)cast
#   and post processing.  Authored by Shrinivas Moorthi - March/April 2010
#
set -x
POSTTYPE=${POSTTYPE:-$RUN}
NTHREADS=${NTHREADS:-1}
machine=${machine:-WCOSS}

####################################
# Specify Execution Areas
####################################

cfsp=${cfsp:-cfs_}              # prefix for cfs specific directories

############################################################
# Set relevant parameters for the coupled  model           #
############################################################
#
#                    AM related parameters
#                    ---------------------
JCAP=${JCAP:-126}
LEVS=${LEVS:-64}
LSOIL=${LSOIL:-4}

FIX_AM=${FIX_AM:-$FIXcfs/${cfsp}fix_am}
PARM_AM=${PARM_AM:-$PARMcfs/${cfsp}parm_am}

CO2DIR=${CO2DIR:-$FIX_AM/fix_co2_proj}
CO2_seasonal_cycle=${CO2_seasonal_cycle:-$FIX_AM/global_co2monthlycyc1976_2009.txt}

if [ $JCAP -eq 1148 ]     ; then          # Linear Grid - SLSI version
  LONB=${LONB:-2304}     ; LATB=${LATB:-1152}  ; DELTIM=${DELTIM:-600}
elif [ $JCAP -eq 574 ]     ; then
  LONB=${LONB:-1760}     ; LATB=${LATB:-880}  ; DELTIM=${DELTIM:-120}
elif [ $JCAP -eq 382 ]   ; then
  LONB=${LONB:-1152}     ; LATB=${LATB:-576}  ; DELTIM=${DELTIM:-180}
elif [ $JCAP -eq 254 ]   ; then
  LONB=${LONB:-768}      ; LATB=${LATB:-384}  ; DELTIM=${DELTIM:-300}
elif [ $JCAP -eq 190 ]   ; then
  LONB=${LONB:-576}      ; LATB=${LATB:-288}  ; DELTIM=${DELTIM:-360}
elif [ $JCAP -eq 170 ]   ; then
  LONB=${LONB:-512}      ; LATB=${LATB:-256}  ; DELTIM=${DELTIM:-450}
elif [ $JCAP -eq 126 ]   ; then
  LONB=${LONB:-384}      ; LATB=${LATB:-190}  ; DELTIM=${DELTIM:-600}
elif [ $JCAP -eq 62 ]    ; then
  LONB=${LONB:-192}      ; LATB=${LATB:-94}   ; DELTIM=${DELTIM:-900}
fi
LONR=${LONR:-$LONB}    ; LATR=${LATR:-$LATB}
LONF=${LONF:-$LONB}    ; LATG=${LATG:-$LATB}
if [ $LSOIL -eq 2 ] ; then
  lsm=${lsm:-0}                           # This will run OSU LSM option
fi
lsm=${lsm:-1}      ;# lsm=1 is for NOAH land model (=0 for OSU model)
ntrac=${ntrac:-3}
varid=${varid:-21}
numcld=${numcld:-1}
im=${im:-$LONB}
jm=${jm:-$LATB}
iop=${iop:-360}
jop=${jop:-181}
kop=${kop:-37}
KTO=${KTO:-16}
IGEN=${IGEN:-98}
IGEN_ANL=${IGEN_ANL:-98}
IGEN_FCST=${IGEN_FCST:-98}
IGEN_OCNP=${IGEN_OCNP:-98}
GENPSICHI=${GENPSICHI:-YES}
ivssig=${ivssig:-198410}
#ivssfc=${ivssfc:-NONE}
ivssfc=${ivssfc:-200509}
IDVC=${IDVC:-2}
IDVM=${IDVM:-1}
IDSL=${IDSL:-1}
FHLWR=${FHLWR:-1}
FHSWR=${FHSWR:-1}

if [ $LEVS -gt 99 ] ; then ivssig=200509 ; fi
THERMODYN_ID=${THERMODYN_ID:-0}
SFCPRESS_ID=${SFCPRESS_ID:-1}
#
if [ $IDVC = 1 ] ; then
 IDVM=1 ; IDSL=1 ; nvcoord=1
 SIGLEVEL1=${SIGLEVEL1:-$FIXGLOBAL/global_siglevel.l$LEVS.txt}
elif [ $IDVC = 2 ] ; then
  IDVM=1 ; IDSL=1 ; nvcoord=2
  SIGLEVEL2=${SIGLEVEL2:-$FIXGLOBAL/global_hyblev.l$LEVS.txt}
elif [ $IDVC = 3 ] ; then
 ivssig=200509
#Apercent=${Apercent:-050}
 Apercent=${Apercent:-100}
 if [ $Apercent -lt 100 ] ; then
   SIGLEVEL3=${SIGLEVEL3:-$FIXGLOBAL/global_hyblev3.ipa$Apercent.txt}
 else
   SIGLEVEL3=${SIGLEVEL3:-$FIXGLOBAL/global_hyblev3.l$LEVS.txt}
 fi
fi
#
gfsio_in=${gfsio_in:-.false.}
gfsio_out=${gfsio_out:-.false.}
LANDICE_OPT=${LANDICE_OPT:-2}
CLIMO_FIELDS_OPT=${CLIMO_FIELDS_OPT:-2}
if [ $lsm -eq 0 ] ; then # all climo/static fields interpolated from input grid
  CLIMO_FIELDS_OPT=${CLIMO_FIELDS_OPT:-1}
else                     # Interpolate veg type, soil type and slope type from input grid, all others from sfcsub.f
  CLIMO_FIELDS_OPT=${CLIMO_FIELDS_OPT:-2}
fi

ccnorm=${ccnorm:-.true.}
climate=${climate:-.true.}
mfcstcpl=${mfcstcpl:-1}
cnvgwd=${cnvgwd:-${CNVGWD:-.true.}}
crtrh=${crtrh:-'0.85,0.85,0.85'}
ctei_rm=${ctei_rm:-0.5}

flgmin=${flgmin:-'0.200,0.300'}

IAER=${IAER:-${iaer:-111}}
ialb=${ialb:-${IALB:-0}}
ICO2=${ICO2:-${ico2:-2}}
ictm=${ictm:-${ICTM:--2}}
IEMS=${IEMS:-${iems:-1}}
ISOL=${ISOL:-${isol:-1}}

IOVR_LW=${IOVR_LW:-1}
IOVR_SW=${IOVR_SW:-1}
ISUBC_LW=${ISUBC_LW:-2}
ISUBC_SW=${ISUBC_SW:-2}

ldiag3d=${ldiag3d:-.false.}
lgoc3d=${lgoc3d:-.false.}
liope=${liope:-.true.}
mstrat=${mstrat:-.false.}
ncw=${ncw:-'20,120'}
nsout=${nsout:-0}
old_monin=${old_monin:-.true.}
OUT_VIRTTEMP=${OUT_VIRTTEMP:-.true.}
ras=${ras:-.false.}
RUN_ENTHALPY=${RUN_ENTHALPY:-.false.}
tfiltc=${tfiltc:-0.85}
zflxtvd=${zflxtvd:-.false.}
zhao_mic=${zhao_mic:-.true.}

CHGRESVARS="IALB=$ialb,ntrac=3,idvc=2,idvt=21,idsl=1,IDVM=1,IGEN=$IGEN"

#
FCSTVARS=${FCSTVARS:-NULL}

if [ $FCSTVARS = NULL ] ; then
 FCSTVARS="ccnorm=$ccnorm,climate=$climate,cnvgwd=$cnvgwd,crtrh=$crtrh,   \
           flgmin=$flgmin,ictm=$ictm,IALB=$ialb,iovr_lw=$IOVR_LW,          \
           iovr_sw=$IOVR_SW,isubc_lw=$ISUBC_LW,isubc_sw=$ISUBC_SW,lsm=$lsm,\
           liope=$liope,mstrat=$mstrat,ncw=$ncw,nsout=$nsout,              \
           old_monin=$old_monin,OUT_VIRTTEMP=$OUT_VIRTTEMP,ras=$ras,       \
           RUN_ENTHALPY=$RUN_ENTHALPY,zflxtvd=$zflxtvd,zhao_mic=$zhao_mic"
fi

if [ $ldiag3d = .true. ] ; then FCSTVARS="LDIAG3D=$ldiag3d,$FCSTVARS" ; fi
if [ $lgoc3d = .true. ]  ; then
  FHGOC3D=${FHGOC3D:-72}
  FCSTVARS="LGOC3D=$LGOC3D,FHGOC3D=$FHGOC3D,$FCSTVARS"
fi
if [ $RUN_ENTHALPY = .true. ] ; then
  RIlist=${RIlist:-"   287.05, 461.50, 173.2247,    0.0"}
  CPIlist=${CPIlist:-" 1004.6, 1846.0, 820.2391,    0.0"}
  TRACERVARS="RI=$RIlist,CPI=$CPIlist,"
# FCSTVARS="RUN_ENTHALPY=$RUN_ENTHALPY,$FCSTVARS"
  IDVM=${THERMODYN_ID}${SFCPRESS_ID}
  IDSL=2 ; nvcoord=3 ; LATCH=${LATCH:-8}
fi
export SIGLEVEL=$(eval echo \${SIGLEVEL$IDVC})

COUP_FCST=${COUP_FCST:-YES}
if [ $RTYPE = hindpost -o $RTYPE = forepost ] ; then
 tasks=${tot_post_tasks:-32}
else
 tasks=${tot_fcst_tasks:-128}
fi

#                    OM related parameters
#                    ---------------------
if [ $COUP_FCST = YES ] ; then
  dt_ocean=${dt_ocean:-1800}
  dt_cpld=${dt_cpld:-$dt_ocean}
  dt_aocpl=${dt_aocpl:-$dt_ocean}
  im_mom4=720
  jm_mom4=410
  jmtp_mom4=50
  imos=160
  omres=${omres:-05}
  
  CouplingPeriod=${CouplingPeriod:-$DELTIM}
  FSICL=${FSICL:-99999}
#
#          Fix files and parm files for OM
#          -------------------------------

  FIX_OM=${FIX_OM:-$HOMEcfs/fix/${cfsp}fix_om}
  FIX_OCN=${FIX_OCN:-$FIX_OM}
  PARM_OM=${PARM_OM:-$HOMEcfs/parm/${cfsp}parm_om}
  SNOWNC=${SNOWNC:-$FIX_OCN/SNOW.nc}
  SSTICECLIM=${SSTICECLIM:-$FIX_OCN/sst_ice_clim.nc}
  diagtable=${diagtable:-$PARM_OM/diag_table.hrs}   # Hourly output
  diagtable_long=${diagtable_long:-$diagtable}      # Hourly output
  datatable=${datatable:-$PARM_OM/data_override}    # data override table
  fieldtable=${fieldtable:-$PARM_OM/field_table}    # field table
  namelist=${namelist:-$PARM_OM/namelist}           # namelist file

  do_irestart=${do_irestart:-.false.}
  grid_mom4ice=${grid_mom4ice:-$FIX_OM/grid_spec_$omres.nc.T$JCAP}
  chl=${chl:-$FIX_OM/chl_$omres.nc}
  salt_sfc_restore=${salt_sfc_restore:-$FIX_OM/salt_sfc_restore_$omres.nc}
  SALTSFCRESTORE=$salt_sfc_restore
  temp_sfc_restore=${temp_sfc_restore:-$FIX_OM/temp_sfc_restore_$omres.nc}
  runoff=${runoff:-$FIX_OM/runoff_$omres.nc}
  ohf_sice=${ohf_sice:-$FIX_OM/ohf_sice.nc}

# diagtable_1dy=$PARM_OM/parm_om/diag_table
# diagtable_3hr=$PARM_OM/diag_table.3hr
# diagtable_6hr=$PARM_OM/diag_table.6hr
# diagtable_1hr=$PARM_OM/diag_table.hr
# diagtable=$diagtable_1hr
# diagtable_long=$PARM_OM/diag_table.hrs

  GODAS_FREQ=${GODAS_FREQ:-0}
else
  NPROCS_a=$tasks
  NPROCS_o=0
  NPROCS_c=0
fi

ENS_NUM=${ENS_NUM:-1}    # This is for uncoupled ensemble runs
task_mem=$((NPROCS_a/ENS_NUM))
c=1
while [ $c -le $ENS_NUM ] ; do
 eval PE$c=$task_mem
 c=$((c+1))
done

#######################################################################

IC_FROM_HPSS=${IC_FROM_HPSS:-NO}
if [ $IC_FROM_HPSS = YES ] ; then IC_FROM_DISK=NO ; fi
IC_FROM_DISK=${IC_FROM_DISK:-YES}
gespath=${gespath:-$GESROOT/${envir}}
INI_DIR=${INI_DIR:-$gespath/cdas.$PDY}

ENS_MEM=$((ENS_MEM+0))
PERTURB_IC=${PERTURB_IC:-YES}
if [ $PERTURB_IC = YES ] ; then
 wt1_02=0.85 ; wt2_02=0.15               # for second member
 wt1_03=1.0 ; wt2_03=0.5  ; wt3_03=-0.5  # for third  member
 wt1_04=1.0 ; wt2_04=-0.5 ; wt3_04=0.5   # for fourth member
fi
############################################
# Define the forecast length
############################################
if [ $RUN_ENVIR = nco  -o $RUN_ENVIR = devpara ] ; then
  if [ $ENS_MEM -eq 1 ] ; then
    CDATEP5=$($NDATE +120 $CDATE |cut -c7-8)
#   if [ $(echo $CDATE |cut -c7-8) -lt 8 ] ; then
    if [ $CDATEP5 -le 5 ]; then
      LENMON=${LENMON:-10}
    else
      LENMON=${LENMON:-9}
    fi
  else
    if [ $(echo $CDATE |cut -c9-10) -eq 00 ] ; then
      LENMON=${LENMON:-3}
    else
      LENMON=0
      LENDAY=${LENDAY:-45}
      AVG_GRB=${AVG_GRB:-NO}
    fi
  fi
fi

AVG_GRB=${AVG_GRB:-YES}

if [ $ENS_MEM -lt 10 ] ; then ENS_MEM=0$ENS_MEM ; fi

LENMON=${LENMON:-0}                         #  Length of forecast in months
LENDAY=${LENDAY:-0}                         #  Length of forecast in days
LENHR=${LENHR:-0}                           #  Length of forecast in hours
                                                                            
#######################################################
# Specify the year of the start and end of the hindcast
#######################################################
if [ $RUN = hindcast -o $RUN = hindpost ] ; then
   START_YEAR=${STARTYEAR:-1981}
   END_YEAR=${END_YEAR:-2010}
fi
                                                                            
##########################
# Define the leap day
##########################
LEAPDAY=0229

# #############################################
# SETUP CLIM FCST PROCESSING VARIABLES
# #############################################
#
# Replacing some initial surface fileds (if SFC0=YES)
#
SFC0=NO

CTLFILE=${CTLFILE:-$HOMEcfs/parm/${cfsp}parm_am/am_cntrl.parm_5}
LONSPERLAT=${LONSPERLAT:-$FIXcfs/${cfsp}fix_am/global_lonsperlat.t$JCAP.txt}

#  These are for the new GFS - already in /nwpara/fix

OROGRAPHY=${OROGRAPHY:-$FIX_AM/global_orography.t$JCAP.grb}
SLMASK=${SLMASK:-$FIX_AM/global_slmask.t$JCAP.grb}
MTNVAR=${MTNVAR:-$FIX_AM/global_mtnvar.t$JCAP.f77}
FNOROG=${FNOROG:-$FIX_AM/global_orography.t$JCAP.grb}
FNMASK=${FNMASK:-$FIX_AM/global_slmask.t$JCAP.grb}
FNMSKH=${FNMSKH:-$FIX_AM/seaice_newland.grb}
FNTG3C=${FNTG3C:-$FIX_AM/global_tg3clim.2.6x1.5.grb}
O3FORC=${O3FORC:-$FIX_AM/global_o3prdlos.f77}

###################################
# Define forecast output variables
###################################

FHOUT=${FHOUT:-6}          # Forecast Hour Output Frequency
FHRES=${FHRES:-120}        # Forecast Hour Restart Frequency
FHZER=${FHZER:-6}          # Interval to Zero the bucket - must be >= FHOUT
FHCYC=${FHCYC:-24}         # Surface boundary condition update interval in hours
FHDFI=${FHDFI:-3}          # Half of the digital filter initialization hours
FHDFI_INIT=${FHDFI_INIT:-3}  # Same but for cold start
RUN_NAME=${RUN_NAME:-cfs_run}


###########################################
# Define integration parameter and hours  #
###########################################
FCST_RESTART=YES
RESTART_SUBMIT=YES
INC_HOUR=${INC_HOUR:-360}
INC_HOUR_FST=${INC_HOUR_FST:-24}
if [ $INC_HOUR -lt $FHRES ] ; then
  FHRES=$INC_HOUR
fi
if [[ $RUN_ENVIR = nco || $RUN_ENVIR = devpara ]] ; then
 if [ $ENS_MEM -gt 2 ] ; then
   INC_HOUR_FST=$INC_HOUR
 fi
fi

##########################################################
# Define the max number of days the perturbation members
# could look back for the sigma and ocean IC files
##########################################################
export ndays_back_pert=${ndays_back_pert:-3}

#
#############################################
# Define file for kept, avearged and send
#############################################
#
if [ $ldiag3d = .true. ] ; then
 LIST_OF_FILES='sig sfc flx pgb ocn d3d'
 FILES_TO_BE_KEPT='sig sfc flx pgb avrg ocn d3d'
 FILES_TO_BE_AVERAGED='flx pgb ocn ipv d3d'
 FILES_TO_SEND_COM='sig sfc flx pgb avrg ocn d3d'
 HRLY_FILES_TO_BE_KEPT='flxf pgbf ocnf ipvf sigf sfcf d3df'
#HRLY_FILES_TO_BE_KEPT='flxf pgbf ocnh ipvf sigf sfcf d3df'
else
 LIST_OF_FILES='sig sfc flx pgb ocn'
 FILES_TO_BE_KEPT='sig sfc flx pgb avrg ocn'
 FILES_TO_BE_AVERAGED='flx pgb ocn ipv'
 FILES_TO_SEND_COM='sig sfc flx pgb avrg ocn'
 HRLY_FILES_TO_BE_KEPT='flxf pgbf ocnf ipvf sigf sfcf'
#HRLY_FILES_TO_BE_KEPT='flxf pgbf ocnh ipvf sigf sfcf'
fi
DAY_TO_KEEP=${DAY_TO_KEEP:-45}
MON_TO_KEEP=${MON_TO_KEEP:-6}
if [ $ENS_MEM -le 2 ]; then
  if [ $cyc -eq 00 -a $ENS_MEM -eq 1 ]; then
    HOUR_TO_KEEP_SIG=${HOUR_TO_KEEP_SIG:-120}
  else
    HOUR_TO_KEEP_SIG=${HOUR_TO_KEEP_SIG:-48}
  fi
else
  HOUR_TO_KEEP_SIG=${HOUR_TO_KEEP_SIG:-6}
fi
HOUR_TO_KEEP_SFC=${HOUR_TO_KEEP_SFC:-${HOUR_TO_KEEP_SIG:-6}}

######################################################################
## Define whether to save the first 45-day of the time series files
#######################################################################
if [ $ENS_MEM -eq 1 -o $cyc -eq 00 ] ; then
  export SAVE_TIME_45DAYS=${SAVE_TIME_45DAYS:-YES}
  export FH_45DAYS=${FH_45DAYS:-1080}
else
  export SAVE_TIME_45DAYS=${SAVE_TIME_45DAYS:-NO}
fi

#
####################################
# Specify Special Fcst times
####################################
#
CURRENT_YEAR=$(echo $CDATE | cut -c1-4)
CURRENT_MONTH=$(echo $CDATE | cut -c5-6)
CURRENT_DAY=$(echo $CDATE | cut -c7-8)
CURRENT_HOUR=$(echo $CDATE | cut -c9-10)
#
####################################
# Number of members in an ensemble
####################################
if [ $RUN = forecast ] ; then
#NUM_ENS=1
 NUM_ENS=10
 NENS_BREAK=1
 INCHOUR_ENS=24        # Ensemble time interval for forecast
else
#NUM_ENS=1
#NENS_BREAK=1
 NUM_ENS=10
 NENS_BREAK=3
 INCHOUR_ENS=24        # Ensemble time interval for hindcast
fi