%include <head.h>

export FORCING_ROOT_DIR=%ECF_HOME%/forcings
export FORCING_CONFIG=%NWM_DOMAIN%-%NWM_CYCLE%
export FORCING_CONFIGS_DIR=%FORCING_CONFIGS_DIR%
export FORCING_PARAMS_DIR="%FORCING_PARAMS_DIR%"
export FORCING_INPUT_DIR="%FORCING_INPUT_DIR%"
export GEOGRID_FILE=%DOMAIN_DIR%/%GEOGRID_FILE%
export SPATIAL_METADATA_FILE=%DOMAIN_DIR%/%SPATIAL_METADATA_FILE%


if [[ "%NWM_ENSEMBLE_MEM%" == "" ]]; then
    cycle=%NWM_CYCLE%
    echo "=== STARTING Forcing Engine %NWM_CYCLE% ==="
else
    cycle=%NWM_CYCLE%_mem%NWM_ENSEMBLE_MEM%
    echo "=== STARTING Forcing EngineL %NWM_CYCLE%, MEMBER %NWM_ENSEMBLE_MEM% ==="
fi

export FORCING_SCRATCH_DIR=%NWM_JOBDIR%/%NWM_DOMAIN%/$cycle/forcings-scratch
export FORCING_OUTPUT_DIR=%NWM_JOBDIR%/%NWM_DOMAIN%/$cycle/forcings-output

if [[ %LENGTH_HRS% < 0 ]]; then
    export FORCING_BEGIN_DATE=$(date -ud "%CYCLE_DATE% %CYCLE_TIME% $((%LENGTH_HRS%+1)) hours" +%%Y%%m%%d%%H%%M)
    export FORCING_END_DATE=$(date -ud "%CYCLE_DATE% %CYCLE_TIME%" +%%Y%%m%%d%%H%%M)
    daily_forcings_dir=$FORCING_OUTPUT_DIR/${FORCING_END_DATE:0:10}
else
    export FORCING_BEGIN_DATE=$(date -ud "%CYCLE_DATE% %CYCLE_TIME% +1 hours" +%%Y%%m%%d%%H%%M)
    export FORCING_END_DATE=$(date -ud "%CYCLE_DATE% %CYCLE_TIME% +%LENGTH_HRS% hours" +%%Y%%m%%d%%H%%M)
    daily_forcings_dir=$FORCING_OUTPUT_DIR/$(date -ud "%CYCLE_DATE% %CYCLE_TIME%" +%%Y%%m%%d%%H)
fi

mkdir -p $FORCING_SCRATCH_DIR
mkdir -p $FORCING_OUTPUT_DIR

# qsub -V -A %PROJ% -q %QUEUE% -o %ECF_JOBOUT% -W block=true -l select=%NUM_COMPUTE_NODES%:ncpus=%NUM_CPUS% -l walltime=%WALLTIME% $FORCING_ROOT_DIR/forcings_job.sh

# MOCK FE -- SYMLINK LDASIN FILES FROM ARCHIVE
cycle_length=%LENGTH_HRS%
if [[ %LENGTH_HRS% < 0 ]]; then
    let cycle_length=$cycle_length*-1
else
    let cycle_length=$cycle_length-1
fi

archive_dir=%FORCING_ARCHIVE_DIR%
daily_start_date=$FORCING_BEGIN_DATE

mkdir -p $daily_forcings_dir
touch $daily_forcings_dir/DUMMY_LDASIN
rm -f $daily_forcings_dir/*LDASIN* 

missing=""

for i in $(seq 0 $(($cycle_length)))
do
    d=$(date -ud "${daily_start_date:0:8} ${daily_start_date:8} +$i hours" +%%Y%%m%%d%%H%%M)
    ln -sf $archive_dir/$d.LDASIN_DOMAIN1 $daily_forcings_dir/$d.LDASIN_DOMAIN1
    if [[ ! -e $archive_dir/$d.LDASIN_DOMAIN1 ]]; then
        missing="$missing$d.LDASIN_DOMAIN1\n"
    fi
done
touch $daily_forcings_dir/WrfHydroForcing.COMPLETE

if [[ "$missing" != "" ]]; then
    echo "Missing LDASIN files:"
    echo $missing
    exit 1 
fi

echo "=== Forcing Engine COMPLETE ==="

%include <tail.h>
%manual
This task runs the Forcing Engine. Input data is read from:

     $FORCING_INPUT_DIR

using FE configurations in:

     $FORCING_CONFIGS_DIR

and FE parameters in:

     $FORCING_PARAMS_DIR

for the $NWM_DOMAIN domain. LDASIN files are written to:
 
     $NWM_JOBDIR/$NWM_DOMAIN/$NWM_CYCLE/forcings-output/YYYYMMDDHH

for $LENGTH_HRS hours beginning at $CYCLE_DATE $CYCLE_TIME (or ending at this time, if using a negative lookback).

NOTE: Currently, the FE is being bypassed and a "mock FE" is being run instead, which copies pre-generated LDASIN files
from a fixed location, until an FE configuration for this domain and model cycle are created.

%end