source: BOL/Multi_atlas/METRICS/POUB/metrics.sh.v1IM @ 3684

Last change on this file since 3684 was 3684, checked in by idelkadi, 4 years ago

Repository under svn of a first version of Multiatlas diagnostics for LMDZ. This version is adapted to be able to run a LMDZ multiatlas on an individual account on the ciclad machine of the IPSL. In this version, the parts to be modified are identified so as to subsequently adapt it to other machines.
This version is still under development.

  • Property svn:executable set to *
File size: 8.8 KB
Line 
1#-!/bin/bash
2
3set -vx
4
5comp=$1
6local=`pwd`
7season=YEAR
8force_create=1
9
10WRK_D=$local/XMGR$$
11if [ -d $WRK_D ] ; then WRK_D=$WRK_D$$ ; fi
12mkdir -p $WRK_D
13cd $WRK_D
14ln -s ../mas*nc .
15
16comp=`basename $1`
17if [ -d /prodigfs/ipslfs/dods/fabric/lmdz/MultiSimu ] ; then
18   # Installation multi modele fabric
19   COMP_D=/prodigfs/ipslfs/dods/fabric/lmdz/MultiSimu/$comp
20   CMOR_DIR=/prodigfs/ipslfs/dods/fabric/lmdz/VLR/YEAR
21elif [ "$comp" = "$1" ] ; then
22   # Installation locale
23   COMP_D=.
24   CMOR_DIR=.
25else
26   # Path absolu
27   COMP_D=$1
28   CMOR_DIR=.
29fi
30
31###############################################
32# Liste des simulations de la comparasion $comp
33listsims=""
34DEF_FILE=$COMP_D/def.txt ; if [ ! -f $DEF_FILE ] ; then renseigner $DEF_FILE ; exit ; fi
35for s in `awk ' {print $1"_"$2 } ' $DEF_FILE` ; do listsimsy="$listsimsy $s" ; done
36for s in `awk ' {print $1 } ' $DEF_FILE` ; do listsims="$listsims $s" ; done
37###############################################
38
39echo $listsimsy
40ici=`pwd`
41
42for simy in  OBS $listsimsy ; do
43  sim=`echo $simy | sed -e 's/_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]//'`
44  years=`echo $simy | sed -e s/${sim}//`
45  echo SIM $sim
46  echo years $years
47
48
49  SIM_DIR=$CMOR_DIR/$GR/$sim$years
50ETOA_DIR=$SIM_DIR/METRICS
51
52
53   for mask in ter oce circA otrop glob eto circA weak conv subs NH SH ; do
54#      mkdir -p XMGR$$/$mask
55     xmgr=$ETOA_DIR/$mask
56     mkdir -p $ETOA_DIR
57     if [ ! -f $xmgr -o "$force_create" = "1" ] ; then
58        \rm -f $xmgr ; touch $xmgr
59        if [ ! -d $SIM_DIR ] ; then echo $SIM_DIR absent ; exit ; fi
60        \rm resu$sim
61        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 ; do
62          if [ -f $SIM_DIR/NC/$var.nc ] ; then
63           if [ "$mask" = "glob" ] ; then
64              val=`cdo output -fldmean $SIM_DIR/NC/$var.nc`
65           elif [ ! -f mask$mask.nc ] ; then
66               echo Le fichier mask$mask.nc n existe pas ; exit
67           else
68             if [ 1 = 1 ] ; then
69              cdo remapcon,mask$mask.nc $SIM_DIR/NC/$var.nc tmp.nc
70              val=`cdo output -fldmean -mul tmp.nc mask$mask.nc`
71             else
72              cdo remapcon,maskotrop.nc $SIM_DIR/NC/$var.nc tmp.nc
73              cdo remapcon,maskotrop.nc mask$mask.nc mask.nc
74              val=`cdo output -fldmean -mul tmp.nc mask.nc`
75             fi
76           fi
77           echo $mask  $sim $var $val
78           echo $var $val >> $xmgr
79          else
80            echo $var 999999 >> $xmgr
81          fi
82        done
83      rsut=`grep '^rsut ' $xmgr | awk ' { print $2 } '`
84      rsutcs=`grep '^rsutcs ' $xmgr | awk ' { print $2 } '`
85      rlut=`grep '^rlut ' $xmgr | awk ' { print $2 } '`
86      rlutcs=`grep '^rlutcs ' $xmgr | awk ' { print $2 } '`
87      hfls=`grep '^hfls ' $xmgr | awk ' { print $2 } '`
88      hfss=`grep '^hfss ' $xmgr | awk ' { print $2 } '`
89      rlds=`grep '^rlds ' $xmgr | awk ' { print $2 } '`
90      rldscs=`grep '^rldscs ' $xmgr | awk ' { print $2 } '`
91      rsds=`grep '^rsds ' $xmgr | awk ' { print $2 } '`
92      rsdscs=`grep '^rsdscs ' $xmgr | awk ' { print $2 } '`
93      rlus=`grep '^rlus ' $xmgr | awk ' { print $2 } '`
94      rsus=`grep '^rsus ' $xmgr | awk ' { print $2 } '`
95      rsuscs=`grep '^rsuscs ' $xmgr | awk ' { print $2 } '`
96      rsdt=`grep '^rsdt ' $xmgr | awk ' { print $2 } '`
97      echo $rsut $rsutcs | awk ' { print "crest" , $2 - $1 } ' >> $xmgr
98      echo $rlut $rlutcs | awk ' { print "crelt" , $2 - $1 } ' >> $xmgr
99      echo $rsut $rsutcs $rlut $rlutcs | awk ' { print "cret"  , $2 - $1 +$4 -$3 } ' >> $xmgr
100      echo $rsdt $rsut | awk ' { print "rst"  , $1 - $2 } ' >> $xmgr
101      echo $rsdt $rsutcs | awk ' { print "rstcs"  , $1 - $2 } ' >> $xmgr
102      echo $rsdt $rsut $rlut | awk ' { print "rt"  , $1 - $2 -$3 } ' >> $xmgr
103      echo $hfls $hfss   | awk ' { print "trbs"  , $1 + $2 } ' >> $xmgr
104      echo $rlds $rlus   | awk ' { print "rls"  , $1 - $2 } ' >> $xmgr
105      echo $rsds $rsus   | awk ' { print "rss"  , $1 - $2 } ' >> $xmgr
106      echo $rlds $rlus $rsds $rsus  | awk ' { print "rs"   , $1 - $2 +$3 - $4 } ' >> $xmgr
107      echo $rlds $rldscs $rsds $rsdscs $rsus $rsuscs | awk ' { print "cres"   , $1 - $2 + $3 - $4 - $5 + $6 } ' >> $xmgr
108      echo $rlds $rldscs $rsds $rsdscs $rsus $rsuscs $hfls | awk ' { print "crehfls"   , $1 - $2 + $3 - $4 - $5 + $6 - $7 } ' >> $xmgr
109      echo $rlds $rlus $rsds $rsus  $hfls $hfss   | awk ' { print "bils"  , $1 - $2 + $3 - $4 - $5 - $6 } ' >> $xmgr
110      fi
111   done
112   
113   # Masques combinés
114   paste $ETOA_DIR/otrop $ETOA_DIR/eto | awk ' { if ( $2 == 999999 || $4 == 999999 ) print $1 , 999999 ; else print $1 , $4 - $2 } ' >| $ETOA_DIR/etoa
115   paste $ETOA_DIR/SH $ETOA_DIR/NH | awk ' { if ( $2 == 999999 || $4 == 999999 ) print $1 , 999999 ; else print $1 , $4 - $2 } ' >| $ETOA_DIR/interH
116
117done
118
119
120#########################################################################################
121# Tracers
122#########################################################################################
123
124
125
126cat <<eod>| descr
127clhcalipso  1  High Clouds
128cllcalipso  1  Low Clouds
129clmcalipso  1  Mid Clouds
130cltcalipso  1  Total Clouds
131clt
132hfls       -1  -LE
133hfss       -1  -H
134hurs        1  RHsrf
135huss
136pr         10  PR*10
137psl         1  SLP
138ts         10  Ts*10
139sst        10  sst*10
140tas        10  T2m*10
141rlds        1  LWdn srf
142rldscs      1  LWdn srf Clr
143rlus       -1  LWup Srf
144rlutcs     -1  LW TOA Clr
145rlut       -1  LW TOA
146rsdscs      1  SWdn srf Clr
147rsds        1  SWdn srf
148rsdt        1  SWdn TOA
149rsuscs     -1  SWup srf Clr
150rsus       -1  SWup srf
151rsutcs     -1  SW TOA Clr
152rstcs      -1  SW TOA Clr
153rsut       -1  SW TOA
154crest       1  SW CRE TOA
155crelt       1  LW CRE TOA
156cres        1  CRE srf
157crehfls     1  CRE - LE
158cret        1  CRE TOA
159rst         1  SW TOA
160rt          1  SW+LW TOA
161trbs       -1  -(LE+H)
162rls         1  LW srf
163rss         1  SW srf
164rs          1  SW+LW srf
165bils        1  Srf budget
166eod
167
168
169for mask in circA glob ter oce otrop interH etoa conv weak subs ; do
170
171   case $mask in
172       etoa) listevars="ts bils crehfls cres rs rss crest hfls tas cllcalipso clhcalipso " ;;
173       interH|glob|ter|oce|otrop|circA|conv|weak|subs) listevars="bils tas rt rlutcs crelt rsutcs crest cllcalipso clmcalipso clhcalipso pr" ;;
174       *) echo cas non prevu ; exit
175   esac
176
177   nvars=`echo $listevars | wc -w | awk ' { print $1 } '`
178   case $mask in
179     glob) yax="Global " ;;
180     etoa) yax="ETOA " ;;
181     interH) yax="Inter Hemispheric " ;;
182     circA) yax="Circum Antartica " ;;
183     conv) yax="Convective regimes " ;;
184     weak) yax="Weak convection " ;;
185     otrop) yax="Tropical ocean" ;;
186     oce) yax="Ocean" ;;
187     ter) yax="Land" ;;
188     subs) yax="Subsidences "
189   esac
190   cat <<...eod>| tmp.param
191    g0 type Chart
192    world -0.5, -35, $nvars, 35
193    yaxis  label "$yax, Fluxes (W/m2) "
194    xaxis  ticklabel font 0
195    xaxis  ticklabel color 1
196    xaxis  tick place both
197    xaxis  tick spec type both
198    xaxis  tick spec 11
199    xaxis  ticklabel char size 1.3
200    xaxis  ticklabel angle 90
201    yaxis  tick major 10
202    yaxis  tick minor ticks 1
203    legend 1.20, 0.8
204...eod
205
206   ii=0
207   for var in $listevars ; do
208      fact=`grep "^$var " descr | awk ' { print $2 } '`
209      titre=`grep "^$var " descr | sed -e 's/'$var'//' -e 's/'$fact'//'`
210      cat <<......eod>> tmp.param
211      xaxis  tick major $ii, $ii
212      xaxis  ticklabel $ii, "$titre"
213......eod
214      (( ii = $ii + 1 ))
215   done
216
217
218   prev=""
219   ip=0
220   listex=""
221   for simy in $listsimsy ; do
222      sim=`echo $simy | sed -e 's/_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]//'`
223      years=`echo $simy | sed -e s/${sim}//`
224      echo $sim
225      SIM_DIR=$CMOR_DIR/$sim$years/METRICS
226      ls $SIM_DIR
227      OBS_DIR=$CMOR_DIR/OBS/METRICS
228      mkdir -p $WRK_D/$mask
229      if [ "$sim" = "$prev" ] ; then # Cas ou on a plusieurs decennies de la meme simu
230         (( ip = $ip + 1 ))
231         xmgr=$WRK_D/$mask/$sim.$ip
232         listex="$listex $sim.$ip"
233      else
234         xmgr=$WRK_D/$mask/$sim
235         ip=0 ; prev=$sim
236         listex="$listex $sim"
237      fi
238      rm -f $xmgr ; touch $xmgr
239      for var in $listevars ; do
240         echo var $var
241         fact=`grep "^$var " descr | awk ' { print $2 } '`
242         paste $OBS_DIR/$mask $SIM_DIR/$mask | grep "^$var " | awk ' { if ( $4 == 999999 ) print 0 ; else print '$fact' * ( $4 - $2 ) } ' >> $xmgr
243      done
244   done
245         
246
247
248   size=`echo $listsims | wc -w | awk ' { print 3. / $1 } '`
249   for ii in 0 1 2 3 4 5 6 7 8 9 10 11 12 ; do
250      echo "s$ii type bar" >> tmp.param
251      echo "s$ii symbol fill pattern 1" >> tmp.param
252      echo "s$ii symbol size $size" >> tmp.param
253      echo "s$ii line linestyle 0" >> tmp.param
254   done
255
256   cd $WRK_D/$mask
257   xmgrace $listex -param ../../tmp.param -legend load -hardcopy -hdevice EPS -printfile tmp.eps
258   epstopdf tmp.eps
259   OUT_D=$COMP_D/METRICS ; mkdir -p $OUT_D
260   \mv -f tmp.pdf $OUT_D/$mask.pdf ; convert -density 144 $OUT_D/$mask.pdf $OUT_D/$mask.png
261   cd ../..
262
263done
264
265cp mask*png $OUT_D
Note: See TracBrowser for help on using the repository browser.