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