#!/bin/bash

set -vx

comp=$1 
local=`pwd`
season=DJF
force_create=1

WRK_D=$local/XMGR$$
if [ -d $WRK_D ] ; then WRK_D=$WRK_D$$ ; fi
mkdir -p $WRK_D
cd $WRK_D
ln -s ../mas*nc .

comp=`basename $1`
if [ -d /prodigfs/ipslfs/dods/fabric/lmdz/MultiSimu ] ; then
   # Installation multi modele fabric
   COMP_D=/prodigfs/ipslfs/dods/fabric/lmdz/MultiSimu/$comp
   CMOR_DIR=/prodigfs/ipslfs/dods/fabric/lmdz/VLR/$season
elif [ "$comp" = "$1" ] ; then
   # Installation locale
   COMP_D=.
   CMOR_DIR=.
else
   # Path absolu
   COMP_D=$1
   CMOR_DIR=.
fi

###############################################
# Liste des simulations de la comparasion $comp
listsims=""
DEF_FILE=$COMP_D/def.txt ; if [ ! -f $DEF_FILE ] ; then renseigner $DEF_FILE ; exit ; fi
for s in `awk ' {print $1"_"$2 } ' $DEF_FILE` ; do listsimsy="$listsimsy $s" ; done
for s in `awk ' {print $1 } ' $DEF_FILE` ; do listsims="$listsims $s" ; done
###############################################

echo $listsimsy
ici=`pwd`

for simy in  OBS $listsimsy ; do
  sim=`echo $simy | sed -e 's/_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]//'`
  years=`echo $simy | sed -e s/${sim}//`
  echo SIM $sim
  echo years $years


  SIM_DIR=$CMOR_DIR/$GR/$sim$years
ETOA_DIR=$SIM_DIR/METRICS


   for mask in ter oce NAtl Arct circA otrop glob eto weak conv subs NH SH ; do
#      mkdir -p XMGR$$/$mask
     xmgr=$ETOA_DIR/$mask
     mkdir -p $ETOA_DIR
     if [ ! -f $xmgr -o "$force_create" = "1" ] ; then
        \rm -f $xmgr ; touch $xmgr
        if [ ! -d $SIM_DIR ] ; then echo $SIM_DIR absent ; exit ; fi
        \rm resu$sim
        for var in rsut clhcalipso cllcalipso clmcalipso cltcalipso clt hfls hfss hurs huss pr ts tas sst psl rldscs rlds rlus rlutcs rlut rsdscs rsds rsdt rsuscs rsus rsutcs prw ; do
          if [ -f $SIM_DIR/NC/$var.nc ] ; then
           if [ "$mask" = "glob" ] ; then
              val=`cdo output -fldmean -selvar,$var $SIM_DIR/NC/$var.nc`
           elif [ ! -f mask$mask.nc ] ; then
               echo Le fichier mask$mask.nc n existe pas ; exit
           else
             if [ 1 = 1 ] ; then
              if [ $var = "hfls" ] && [ $simy == "OBS" ]; then
               cdo remapcon,mask$mask.nc $SIM_DIR/NC/$var.nc_ocean-only tmp.nc
               val=`cdo output -fldmean -selvar,$var -mul tmp.nc mask$mask.nc`
              else
               cdo remapcon,mask$mask.nc $SIM_DIR/NC/$var.nc tmp.nc
               val=`cdo output -fldmean -selvar,$var -mul tmp.nc mask$mask.nc`
              fi
             else
              cdo remapcon,maskotrop.nc $SIM_DIR/NC/$var.nc tmp.nc
              cdo remapcon,maskotrop.nc mask$mask.nc mask.nc
              val=`cdo output -fldmean -selvar,$var -mul tmp.nc mask.nc`
             fi
           fi
           echo $mask  $sim $var $val
           echo $var $val >> $xmgr
          else
            echo $var 999999 >> $xmgr
          fi
        done
      rsut=`grep '^rsut ' $xmgr | awk ' { print $2 } '`
      rsutcs=`grep '^rsutcs ' $xmgr | awk ' { print $2 } '`
      rlut=`grep '^rlut ' $xmgr | awk ' { print $2 } '`
      rlutcs=`grep '^rlutcs ' $xmgr | awk ' { print $2 } '`
      hfls=`grep '^hfls ' $xmgr | awk ' { print $2 } '`
      hfss=`grep '^hfss ' $xmgr | awk ' { print $2 } '`
      rlds=`grep '^rlds ' $xmgr | awk ' { print $2 } '`
      rldscs=`grep '^rldscs ' $xmgr | awk ' { print $2 } '`
      rsds=`grep '^rsds ' $xmgr | awk ' { print $2 } '`
      rsdscs=`grep '^rsdscs ' $xmgr | awk ' { print $2 } '`
      rlus=`grep '^rlus ' $xmgr | awk ' { print $2 } '`
      rsus=`grep '^rsus ' $xmgr | awk ' { print $2 } '`
      rsuscs=`grep '^rsuscs ' $xmgr | awk ' { print $2 } '`
      rsdt=`grep '^rsdt ' $xmgr | awk ' { print $2 } '`
      echo $rsut $rsutcs | awk ' { print "crest" , $2 - $1 } ' >> $xmgr
      echo $rlut $rlutcs | awk ' { print "crelt" , $2 - $1 } ' >> $xmgr
      echo $rsut $rsutcs $rlut $rlutcs | awk ' { print "cret"  , $2 - $1 +$4 -$3 } ' >> $xmgr
      echo $rsdt $rsut | awk ' { print "rst"  , $1 - $2 } ' >> $xmgr
      echo $rsdt $rsutcs | awk ' { print "rstcs"  , $1 - $2 } ' >> $xmgr
      echo $rsdt $rsut $rlut | awk ' { print "rt"  , $1 - $2 -$3 } ' >> $xmgr
      echo $hfls $hfss   | awk ' { print "trbs"  , $1 + $2 } ' >> $xmgr
      echo $rlds $rlus   | awk ' { print "rls"  , $1 - $2 } ' >> $xmgr
      echo $rsds $rsus   | awk ' { print "rss"  , $1 - $2 } ' >> $xmgr
      echo $rlds $rlus $rsds $rsus  | awk ' { print "rs"   , $1 - $2 +$3 - $4 } ' >> $xmgr
      echo $rlds $rldscs $rsds $rsdscs $rsus $rsuscs | awk ' { print "cres"   , $1 - $2 + $3 - $4 - $5 + $6 } ' >> $xmgr
      echo $rlds $rldscs $rsds $rsdscs $rsus $rsuscs $hfls | awk ' { print "crehfls"   , $1 - $2 + $3 - $4 - $5 + $6 - $7 } ' >> $xmgr
      echo $rlds $rlus $rsds $rsus  $hfls $hfss   | awk ' { print "bils"  , $1 - $2 + $3 - $4 - $5 - $6 } ' >> $xmgr
      fi
   done
   
   # Masques combinés
   paste $ETOA_DIR/otrop $ETOA_DIR/eto | awk ' { if ( $2 == 999999 || $4 == 999999 ) print $1 , 999999 ; else print $1 , $4 - $2 } ' >| $ETOA_DIR/etoa
   paste $ETOA_DIR/SH $ETOA_DIR/NH | awk ' { if ( $2 == 999999 || $4 == 999999 ) print $1 , 999999 ; else print $1 , $4 - $2 } ' >| $ETOA_DIR/interH

done


#########################################################################################
# Tracers
#########################################################################################



cat <<eod>| descr
clhcalipso  1  High Clouds
cllcalipso  1  Low Clouds
clmcalipso  1  Mid Clouds
cltcalipso  1  Total Clouds
clt         1  LMDZ Total Clouds
hfls       -1  -LE
hfss       -1  -H
hurs        1  RHsrf
huss        1 Surface specific humidity
pr         10  PR*10
prw         1  PRW
psl         1  SLP
ts         10  Ts*10
sst        10  sst*10
tas        10  T2m*10
rlds        1  LWdn srf
rldscs      1  LWdn srf Clr
rlus       -1  LWup Srf
rlutcs     -1  LW TOA Clr
rlut       -1  LW TOA
rsdscs      1  SWdn srf Clr
rsds        1  SWdn srf
rsdt        1  SWdn TOA
rsuscs     -1  SWup srf Clr
rsus       -1  SWup srf
rsutcs     -1  SW TOA Clr
rstcs      -1  SW TOA Clr
rsut       -1  SW TOA
crest       1  SW CRE TOA
crelt       1  LW CRE TOA
cres        1  CRE srf
crehfls     1  CRE - LE
cret        1  CRE TOA
rst         1  SW TOA
rt          1  SW+LW TOA
trbs       -1  -(LE+H)
rls         1  LW srf
rss         1  SW srf
rs          1  SW+LW srf
bils        1  Srf budget
eod


for mask in NAtl Arct circA glob ter oce otrop interH etoa conv weak subs ; do

   case $mask in
       etoa|oce|otrop) listevars="ts bils crehfls cres rs rss crest hfls tas cllcalipso clhcalipso " ;;
       interH|glob|ter|NAtl|circA|conv|weak|subs) listevars="bils tas rt rlutcs crelt rsutcs crest cllcalipso clmcalipso clhcalipso pr" ;;
       Arct) listevars="tas rs rlds rsds crelt crest cllcalipso clmcalipso clhcalipso pr prw" ;;
       *) echo cas non prevu ; exit
   esac

   nvars=`echo $listevars | wc -w | awk ' { print $1 } '`
   case $mask in
     NAtl) yax="North Atlantic " ;;
     Arct) yax="Arctic ocean" ;;
     circA) yax="Circum Antartica " ;;
     glob) yax="Global " ;;
     ter) yax="Land " ;;
     oce) yax="Ocean " ;;
     otrop) yax="Tropical ocean " ;;
     interH) yax="Inter Hemispheric " ;;
     etoa) yax="ETOA " ;;
     conv) yax="Convective regimes " ;;
     weak) yax="Weak convection " ;;
     subs) yax="Subsidences "
   esac
   cat <<...eod>| tmp.param
    g0 type Chart
    world -0.5, -35, $nvars, 35
    yaxis  label "$yax Fluxes (W/m2) "
    xaxis  ticklabel font 0
    xaxis  ticklabel color 1
    xaxis  tick place both
    xaxis  tick spec type both
    xaxis  tick spec 11
    xaxis  ticklabel char size 1.3
    xaxis  ticklabel angle 90
    yaxis  tick major 10
    yaxis  tick minor ticks 1
    legend 1.20, 0.8
...eod

   ii=0
   for var in $listevars ; do
      fact=`grep "^$var " descr | awk ' { print $2 } '`
      titre=`grep "^$var " descr | sed -e 's/'$var'//' -e 's/'$fact'//'`
      cat <<......eod>> tmp.param
      xaxis  tick major $ii, $ii
      xaxis  ticklabel $ii, "$titre"
......eod
      (( ii = $ii + 1 ))
   done


   prev=""
   ip=0
   listex=""
   for simy in $listsimsy ; do
      sim=`echo $simy | sed -e 's/_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]//'`
      years=`echo $simy | sed -e s/${sim}//`
      echo $sim
      SIM_DIR=$CMOR_DIR/$sim$years/METRICS
      ls $SIM_DIR
      OBS_DIR=$CMOR_DIR/OBS/METRICS
      mkdir -p $WRK_D/$mask
      if [ "$sim" = "$prev" ] ; then # Cas ou on a plusieurs decennies de la meme simu
         (( ip = $ip + 1 ))
         xmgr=$WRK_D/$mask/$sim.$ip
         listex="$listex $sim.$ip"
      else
         xmgr=$WRK_D/$mask/$sim 
         ip=0 ; prev=$sim
         listex="$listex $sim"
      fi
      rm -f $xmgr ; touch $xmgr
      for var in $listevars ; do
         echo var $var
         fact=`grep "^$var " descr | awk ' { print $2 } '`
         paste $OBS_DIR/$mask $SIM_DIR/$mask | grep "^$var " | awk ' { if ( $4 == 999999 ) print 0 ; else print '$fact' * ( $4 - $2 ) } ' >> $xmgr
      done
   done
         


   size=`echo $listsims | wc -w | awk ' { print 3. / $1 } '`
   for ii in 0 1 2 3 4 5 6 7 8 9 10 11 12 ; do
      echo "s$ii type bar" >> tmp.param
      echo "s$ii symbol fill pattern 1" >> tmp.param
      echo "s$ii symbol size $size" >> tmp.param
      echo "s$ii line linestyle 0" >> tmp.param
   done

   cd $WRK_D/$mask
   xmgrace $listex -param ../../tmp.param -legend load -hardcopy -hdevice EPS -printfile tmp.eps
   epstopdf tmp.eps
   OUT_D=$COMP_D/METRICS/$season ; mkdir -p $OUT_D
   \mv -f tmp.pdf $OUT_D/$mask.pdf ; convert -density 144 $OUT_D/$mask.pdf $OUT_D/$mask.png
   cd ../..

done

cp mask*png $OUT_D
