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