#!/bin/bash
set -e

if [ $# -ne 1 ] ; then
  echo "Usage: rs_add_100PgC <input_restart_file>"
  exit
fi
rsin=$1
echo rsin=$rsin

rs=`echo $rsin | sed -e 's/\.[0-9][0-9][0-9]$//'`
ed=`echo $rsin | sed -e 's/.*[.]\([0-9][0-9][0-9]\)$/\1/'`
if [ "$rs" = "$ed" ] ; then
  ed=001
fi
echo rs=$rs ed=$ed

# create a temp dir
tmpdir=$RUNPATH/tmp.rs_add_100PgC.$$
mkdir -p $tmpdir
cd $tmpdir

# set a trap to remove $tmpdir on exit
trap "cleanup" 0 1 2 3 6 15
cleanup()
{
  exit_status=$?
  echo exit_status=$exit_status
  echo "Caught Signal ... cleaning up."
  rm -rf $tmpdir
  exit $exit_status
}

release rs_nmf
access  rs_nmf $rs ed=$ed

# Pack rs file
pakrs_float1 rs_nmf rs

##########################################
# adjust X016 and XM16 records
# derive record numbers for X016 and XM16
n01=`ggstat rs | grep X016 | head -1 | cut -c1-7 | awk '{printf "%05d",$1}'`
n02=`ggstat rs | grep X016 | tail -1 | cut -c1-7 | awk '{printf "%05d",$1}'`
nm1=`ggstat rs | grep XM16 | head -1 | cut -c1-7 | awk '{printf "%05d",$1}'`
nm2=`ggstat rs | grep XM16 | tail -1 | cut -c1-7 | awk '{printf "%05d",$1}'`

n01m1=`echo $n01 | awk '{printf "%05d",$1 - 1}'`
n02p1=`echo $n02 | awk '{printf "%05d",$1 + 1}'`

nm1m1=`echo $nm1 | awk '{printf "%05d",$1 - 1}'`
nm2p1=`echo $nm2 | awk '{printf "%05d",$1 + 1}'`

echo 1 $n01m1 $n01 $n02 $n02p1 $nm1m1 $nm1 $nm2 $nm2p1 999999

# select parts
echo "                   1     $n01m1" | ccc rcopy rs rs1
echo "               $n01     $n02" | ccc rcopy rs x016
echo "               $n02p1     $nm1m1" | ccc rcopy rs rs2
echo "               $nm1     $nm2" | ccc rcopy rs xm16
echo "               $nm2p1 999999999" | ccc rcopy rs rs3

# convert X016 and XM16 to grid
echo "C*COFAGG    128   64    0    1" | ccc cofagg x016 x016g
echo "C*COFAGG    128   64    0    1" | ccc cofagg xm16 xm16g

# XM16 100PgC/2.12*1.5188126e-6      = 7.164e-05                  (fully time-filtered field)
# X016 100PgC/2.12*1.5188126e-6*0.95 = 7.16421e-05*0.95=6.806e-05 (partially time-filtered field with time filter factor of 0.95)
addC=100 # PgC
addm=`echo "$addC" | awk '{printf "%10.4e",$1/2.12*1.5188126e-6}'`
add0=`echo "$addC" | awk '{printf "%10.4e",$1/2.12*1.5188126e-6*0.95}'`
echo addm=$addm
echo add0=$add0

echo "C*XLIN           1.0$addm" | ccc xlin xm16g xm16gc
echo "C*XLIN           1.0$add0" | ccc xlin x016g x016gc

# convert back to grids
echo "C*  GGACOF   63   63    2    0    1" | ccc ggacof x016gc x016c
echo "C*  GGACOF   63   63    2    0    1" | ccc ggacof xm16gc xm16c

# combine all pieces
release rs
cat rs1 x016c rs2 xm16c rs3 > rs

save rs $rs

echo "Do not forget to set these tracer_corr namelist parameters in the PHYS_PARM file:

      reset_tracer_at_kount = NNNNNNNNN ! kount value in the restart file
      reset_tracer_corr = 1       	! reset all tracer corrections computed in ENERSVB if set to 1
      reset_xsfx_corr = 1       	! reset CO2 tracer corrections XC* in GCM18 if set to 1
"
