#!/bin/bash

#set -x

version="v3.14.3"           # The MAR version

MARdir=$HOME/MAR${version} # directory where MAR will be installed

DOM=GR                     # GR (Greenland) or EU (Europe) 

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

[ ${#1} -eq 1 ] && [ $1 -eq 0 ] && echo $version && exit

[ ! -f INSTALL ] && echo "INSTALL no found" && exit 

# INSTALL should be started from ~/$MARsim/bin

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

echo "1. Make the archive tgz"
echo "2. Make the full archive tgz (including everything)"
echo "3. Install the MAR model from the small archive tgz"
echo "4. Install and test the MAR model from the full archive tgz"


[ ${#1} -eq 1 ] && [ $1 -ge 0 ] && [ $1 -le 4 ] && option=$1

until [ ${#option} -gt 0 ] && [ ${option} -ge 0 ] && [ ${option} -le 4 ] ; do

 read option

done

[ $option -eq 0 ] && echo $version && exit

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

if [ $option -eq 1 ] || [ $option -eq 2 ] ; then

 cd $PWD/../..

 MAR=${PWD%/bin*}
 MAR=${MAR##*/}

 [ -d MAR    ] && MAR=MAR 
 [ -d MARsrc ] && MAR=MARsrc

 if [ ! -d $MAR ] ; then 
  echo "the directory $MAR where MAR should be installed is not found" ; exit
 fi

 archive="$HOME/MAR${version}_`date '+%Y-%m-%d'`".tgz

 files="$MAR/src/forMAR/forMAR    $MAR/src/NESTOR/NESTOR"
 files="$files $MAR/src/datMAR    $MAR/src/libMAR $MAR/src/MAPOST/MAPOST"
 files="$files $MAR/src/preMAR    $MAR/bin/test   $MAR/usr $MAR/doc"
 files="$files $MAR/bin/FUNCTION* $MAR/bin/CODE*  $MAR/bin/COMPILE"
 files="$files $MAR/bin/IN*       $MAR/bin/MAR*   $MAR/bin/MAR.ctr*"
 files="$files $MAR/bin/NST       $MAR/bin/PMP*   $MAR/bin/*check"
 files="$files $MAR/src/ETHcamp   $MAR/bin/NST.ctr"

 tar czfh $archive --exclude=*bkp* --exclude=$MAR/bin/run --exclude=$MAR/usr/*.cdf $files   

fi

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

if [ $option -eq 2 ] ; then

 [ -f $MAR/bin/INI.ctr ] && . $MAR/bin/INI.ctr

 [ -d $MARdir ] && echo "MARdir $MARdir already exit" && exit

 mkdir               $MARdir 
 tar xzf $archive -C $MARdir
 mv                  $MARdir/MAR/* $MARdir
 rm -rf              $MARdir/MAR
 mkdir               $MARdir/in
 mkdir               $MARdir/out

 for dir in "ETOPO1" "ETOPO" "FAO" "ICEmask" "SOIL" "VEGE" ; do
 mkdir                                    $MARdir/in/$dir
 scp ${ustock}@${stock}:$STKsrf/$dir/*gz  $MARdir/in/$dir
 done

 mkdir -p                                                                    $MARdir/in/NCEP-NCARv1/2000/
 scp ${ustock}@${stock}:$STKsrf/NCEP-NCARv1/2000/NC1.2000.09.01-30.GRD.nc.gz $MARdir/in/NCEP-NCARv1/2000/
 scp ${ustock}@${stock}:$STKsrf/NCEP-NCARv1/2000/NC1.2000.10.01-31.GRD.nc.gz $MARdir/in/NCEP-NCARv1/2000/

 pwd=$PWD
 
 cd $MARdir/in/NCEP-NCARv1/2000/
 for file in *.gz ; do
  echo $file > toto.dat1
  sed 's/GRD/ANT/g' toto.dat1 > toto.dat2
  sed 's/GRD/EUR/g' toto.dat1 > toto.dat3
  sed 's/GRD/AFW/g' toto.dat1 > toto.dat4
  sed 's/GRD/WAF/g' toto.dat1 > toto.dat5
  ln -s $file `cat toto.dat2`
  ln -s $file `cat toto.dat3`
  ln -s $file `cat toto.dat4`
  ln -s $file `cat toto.dat5`
  rm -f toto*
 done

 cd $pwd

 mkdir -p                    $MARdir/lib/fsplit/
 cp    $MAR/lib/fsplit/*.c   $MARdir/lib/fsplit/ 
 cp    $MAR/lib/fsplit/Make* $MARdir/lib/fsplit/ 

#mkdir -p                    $MARdir/lib/intel-12.0.2/
#cp    $MAR/lib/intel*/*.tgz $MARdir/lib/intel-12.0.2/

 mkdir -p                       $MARdir/lib/intel-21/
 cp    $MAR/lib/intel-21*/*.tgz $MARdir/lib/intel-21/


 mkdir -p                    $MARdir/lib/netcdf
 cp    $MAR/lib/netcdf/*.tgz $MARdir/lib/netcdf &>/dev/null
 cp    $MAR/lib/netcdf/*.inc $MARdir/lib/netcdf &>/dev/null

 archive="$HOME/MAR${version}_full_`date '+%Y-%m-%d'`".tgz

 tar czf $archive MAR${version}
 rm -rf           MAR${version}

fi

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

if [ $option -eq 3 ] || [ $option -eq 4 ] ; then

 [ $SHELL != "/bin/bash" ] && echo "SHELL $SHELL is not bash" && exit 

 #MAR

 [ -d $HOME/MAR           ] && export MARdir=$HOME/MAR
 [ -d $HOME/MAR${version} ] && export MARdir=$HOME/MAR${version}
 [ ! -d $MARdir           ] && export MARdir=$HOME/MAR    
 

 echo "Did you configure $MARdir/bin/INI.ctr ? (sleep 3s)"
 
# until [ ${#yes} -gt 0 ] && [ $yes == "y" ] ; do
#  read yes
#  [ ${#yes} -gt 0 ] && [ ${yes} == "n" ] && exit
# done

 sleep 3

 cd $MARdir

 source $MARdir/bin/INI.ctr

 mkdir bin/run msg tmp sim lib $WRKdir &>/dev/null
 cd    $MARdir/src/datMAR
 if [ ! -f climatologies/greenhouse_gas_climatology_46r1.nc ] ; then
 ./climatologies_wget.bash
 fi
 cd    $MARdir

 # PATH
 # ####

            verBASH=`grep -i "MARdir="     $HOME/.bashrc`

 if [ -z "${verBASH}" ]; then
 echo " "
 echo " _______  ______________________________________________________________"
 echo " WARNING: Your .bashrc is appended:                   $MARdir is defined"
 echo " ^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
 echo " "
 echo "export MARdir=$MARdir"                                   >> $HOME/.bashrc
 fi

            verBASH=`grep -i "\$MARdir/bin" $HOME/.bashrc` 
 if [ -z "${verBASH}" ]; then
 echo " "
 echo " _______  _________________________________________________________"
 echo " WARNING: Your .bashrc is appended: PATH completed by $MARdir/bin"
 echo " ^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
 echo " "
 echo "export PATH=\"\$PATH:\$MARdir/bin\" # To run the MAR model" >> $HOME/.bashrc
 fi

 export PATH="$PATH:$MARdir/bin"

 # SSH

 [ $option -eq 4 ] && ssh=
 

 if [ ${#ssh} -gt 0 ] && [ "${ssh}" != "no" ] && [ "${ssh}" != "n" ] ; then

  type sftp  &>/dev/null ; err=$? ; [ ${err} -eq 1 ] && echo "ERROR: sftp  not found"
  type scp   &>/dev/null ; err=$? ; [ ${err} -eq 1 ] && echo "ERROR: scp   not found" 
  type ssh   &>/dev/null ; err=$? ; [ ${err} -eq 1 ] && echo "ERROR: ssh   not found" && exit

  mkdir $HOME/.ssh &>/dev/null
  cd    $HOME/.ssh

  ssh-keygen -trsa
  ssh                         $ustock@$stock mkdir .ssh
  ssh-copy-id -i ./id_rsa.pub $ustock@$stock
 #ssh                         $ustock@$stock "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2 ; ln -s ~/.ssh/authorized_keys2 ~/.ssh/authorized_keys"

  ssh $ustock@$stock mkdir $STKmar $STKsrf $STKlsc

  echo "if \"ssh $ustock@$stock date\" requests a password, you need to do this:"
  echo "cd ~/.ssh ; ssh-keygen  # press 3x ENTER + yes" 
  echo "scp id_rsa.pub  $ustock@$stock:~/.ssh"
  echo "ssh $ustock@$stock \"cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys2\""
  echo "ssh $ustock@$stock \"ln -s ~/.ssh/authorized_keys2 ~/.ssh/authorized_keys\""

 fi

fi

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

if [ $option -eq 4 ] ; then


 [ ! -d $MARdir ] && echo "$MARdir not found" && exit 

 mkdir                              $MARdir/bin/bkp
 mv    $MARdir/bin/INI.ctr          $MARdir/bin/bkp
 cp    $MARdir/bin/test/INI.ctr$DOM $MARdir/bin/INI.ctr
 
#type gcc   &>/dev/null ; err=$? ; [ ${err} -eq 1 ] && echo "ERROR: gcc   not found" && exit
#cd      $MARdir/lib/fsplit
#rm -f   $MARdir/lib/fsplit/fsplit   &>/dev/null
#rm -f   $MARdir/lib/fsplit/fsplit.o &>/dev/null
#make
#cp -f   $MARdir/lib/fsplit/fsplit $MARdir/bin 

#cd      $MARdir/lib/intel-12.0.2/
#tar xzf intel-12.0.2-MAR.tgz 

 cd      $MARdir/lib/intel-21/
 tar xzf intel-21.tgz  


 # PATH
 # ####

            verBASH=`grep -i "intel-21"      $HOME/.bashrc` 
 if [ -z "${verBASH}" ]; then
 echo " "
 echo " _______  _________________________________________________________"
 echo " WARNING: Your .bashrc is appended: intel COMPILER may be activated"
 echo " ^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
 echo " "
 echo "source \$MARdir/lib/intel-21/setvars.sh --force" >> $HOME/.bashrc
#echo "source \$MARdir/lib/intel-12.0.2/composerxe-2011.2.137/bin/compilervars.sh intel64" >> $HOME/.bashrc
 fi

            verBASH=`grep -i "intel-21"      $MARdir/bin/INI.ctr` 
 if [ -z "${verBASH}" ]; then
 echo " "
 echo " _______  _________________________________________________________"
 echo " WARNING: Your INI.ctr is appended: intel COMPILER may be activated"
 echo " ^^^^^^^  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
 echo " "
 echo "source \$MARdir/lib/intel-21/setvars.sh --force" >> $MARdir/bin/INI.ctr
#echo "source \$MARdir/lib/intel-12.0.2/composerxe-2011.2.137/bin/compilervars.sh intel64" >> $MARdir/bin/INI.ctr
 fi


 source  $HOME/.bashrc


 export MARstatic=n


 export MARdir=$MARdir
 export PATH="$PATH:$MARdir/bin"
#source $MARdir/lib/intel-12.0.2/composerxe-2011.2.137/bin/compilervars.sh intel64
 source $MARdir/lib/intel-21/setvars.sh --force

 type ifort   &>/dev/null ; err=$? ; [ ${err} -eq 1 ] && echo "ERROR: ifort   not found" && exit


# cd      $MARdir/src/preMAR/preMAR_MARONH.0.1
# ifort -w -zero MAR_pp_dat.f MAR_pp.f -o    MAR_pp
# ifort -w -zero MAR_pp_dat.f MAR_pp.f -o ../MAR_pp

 rm -rf  $MARdir/sim/${DOM}a &>/dev/null

 INI ${DOM}a

 cd $MARdir/sim/${DOM}a/input/NESTOR

 cp $MARdir/bin/test/NSTdim.inc$DOM src/NSTdim.inc
 cp $MARdir/bin/test/MARgrd.ctr$DOM     MARgrd.ctr

 rm -f NESTOR.exe &> /dev/null &

 ./Compile.exe

 [ ! -f NESTOR.exe ] && echo "NESTOR.exe not found" && exit

 mv $MARdir/bin/NST.ctr          $MARdir/bin/bkp
 cp $MARdir/bin/test/NST.ctr     $MARdir/bin
 cp $MARdir/bin/test/NST.ctr$DOM $MARdir/bin &>/dev/null

 NST ${DOM}a 2000 09

 $MARdir/sim/${DOM}a/input/NESTOR/run/NST_${DOM}a.00.09.*.cmd

 cd $MARdir/usr

 if [ -f SBCnew.fEU ] && [ -f SBCnew.f ] && [ $DOM == "EU" ] ; then
  mv SBCnew.f   SBCnew.fGR
  mv SBCnew.fEU SBCnew.f 
 fi

 CODE a01

 [ ! -f $MARdir/out/${DOM}a/a01/code/MAR_a01.exe ] && echo "ERROR in the a01 compilation" && exit

 mv $MARdir/bin/MAR.ctr      $MARdir/bin/bkp
 cp $MARdir/bin/test/MAR.ctr $MARdir/bin

 cp $MARdir/usr/MARvou.dat $MARdir/usr/MARvou.dat.bkp
 cp $MARdir/usr/ICEvou.dat $MARdir/usr/ICEvou.dat.bkp
 cp $MARdir/bin/test/*.dat $MARdir/usr

 MAR a01 2000 09 01 02
 
 $MARdir/sim/${DOM}a/run/a01/MAR_*a01.00.09.01-02.cmd

 if [ -d $MARdir/out/${DOM}a/a01/2000 ] ; then

  echo "Great !! Everything is OK"

  echo "See the $MARdir/out/${DOM}a/a01/2000" 

 fi

fi

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


