source: BOL/Multi_atlas/METRICS/POUB/metrics.sh_with_eva_PB @ 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.1 KB
Line 
1#!/bin/bash
2
3set -vx
4force_create=0
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 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 eva ; 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/SH $ETOA_DIR/NH | awk ' { if ( $2 == 999999 || $4 == 999999 ) print $1 , 999999 ; else print $1 , $4 - $2 } ' >| $ETOA_DIR/interH
134   set -e
135
136done
137
138
139#########################################################################################
140# Tracers
141#########################################################################################
142
143
144
145cat <<eod>| descr
146clhcalipso  1  High Clouds
147cllcalipso  1  Low Clouds
148clmcalipso  1  Mid Clouds
149cltcalipso  1  Total Clouds
150clt         1  LMDZ Total Clouds
151hfls       -1  -LE
152hfss       -1  -H
153hurs        1  RHsrf
154huss        1 Surface specific humidity
155pr         10  PR*10
156eva        10  EVA*10
157prw         1  PRW
158psl         1  SLP
159ts         10  Ts*10
160sst        10  sst*10
161tas        10  T2m*10
162rlds        1  LWdn srf
163rldscs      1  LWdn srf Clr
164rlus       -1  LWup Srf
165rlutcs     -1  LW TOA Clr
166rlut       -1  LW TOA
167rsdscs      1  SWdn srf Clr
168rsds        1  SWdn srf
169rsdt        1  SWdn TOA
170rsuscs     -1  SWup srf Clr
171rsus       -1  SWup srf
172rsutcs     -1  SW TOA Clr
173rstcs      -1  SW TOA Clr
174rsut       -1  SW TOA
175crest       1  SW CRE TOA
176crelt       1  LW CRE TOA
177cres        1  CRE srf
178crehfls     1  CRE - LE
179cret        1  CRE TOA
180rst         1  SW TOA
181rt          1  SW+LW TOA
182trbs       -1  -(LE+H)
183rls         1  LW srf
184rss         1  SW srf
185rs          1  SW+LW srf
186bils        1  Srf budget
187eod
188
189# -------------------  debut boucle sur les figures ----------------------------
190for mask in $mask_figs ; do
191# -------------------  debut boucle sur les figures ----------------------------
192
193   case $mask in
194       etoa|oce|otrop) listevars="ts bils crehfls cres rs rss crest hfls tas cllcalipso clhcalipso " ;;
195       interH|glob|ter|NAtl|circA|conv|weak|subs) listevars="bils tas rt rlutcs crelt rsutcs crest cllcalipso clmcalipso clhcalipso pr" ;;
196       Arct|Sibe|USA) listevars="tas rs rlds rsds crelt crest cllcalipso clmcalipso clhcalipso pr prw" ;;
197       *) echo cas non prevu ; exit
198   esac
199
200   nvars=`echo $listevars | wc -w | awk ' { print $1 } '`
201   case $mask in
202     NAtl) yax="North Atlantic " ;;
203     Arct) yax="Arctic ocean" ;;
204     circA) yax="Circum Antartica " ;;
205     Sibe) yax="Siberia " ;;
206     USA) yax="US Gr. Plains " ;;
207     glob) yax="Global " ;;
208     ter) yax="Land " ;;
209     oce) yax="Ocean " ;;
210     otrop) yax="Tropical ocean " ;;
211     interH) yax="Inter Hemispheric " ;;
212     etoa) yax="ETOA " ;;
213     conv) yax="Convective regimes " ;;
214     weak) yax="Weak convection " ;;
215     subs) yax="Subsidences "
216   esac
217   cat <<...eod>| tmp.param
218    g0 type Chart
219    world -0.5, -35, $nvars, 35
220    yaxis  label "$yax Fluxes (W/m2) "
221    xaxis  ticklabel font 0
222    xaxis  ticklabel color 1
223    xaxis  tick place both
224    xaxis  tick spec type both
225    xaxis  tick spec 11
226    xaxis  ticklabel char size 1.3
227    xaxis  ticklabel angle 90
228    yaxis  tick major 10
229    yaxis  tick minor ticks 1
230    legend 1.20, 0.8
231...eod
232
233   ii=0
234   for var in $listevars ; do
235      fact=`grep "^$var " descr | awk ' { print $2 } '`
236      titre=`grep "^$var " descr | sed -e 's/'$var'//' -e 's/'$fact'//'`
237      cat <<......eod>> tmp.param
238      xaxis  tick major $ii, $ii
239      xaxis  ticklabel $ii, "$titre"
240......eod
241      (( ii = $ii + 1 ))
242   done
243
244
245   prev=""
246   ip=0
247   listex=""
248   echo LISTESIMSY $listsimsy
249   for simy in $listsimsy ; do
250      sim=`echo $simy | sed -e 's/_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]//'`
251      years=`echo $simy | sed -e s/${sim}//`
252      echo $sim
253      SIM_DIR=$CMOR_DIR/$sim$years/METRICS
254      ls $SIM_DIR
255      OBS_DIR=$CMOR_DIR/OBS/METRICS
256      mkdir -p $WRK_D/$mask
257      if [ "$sim" = "$prev" ] ; then # Cas ou on a plusieurs decennies de la meme simu
258         (( ip = $ip + 1 ))
259         xmgr=$WRK_D/$mask/$sim.$ip
260         listex="$listex $sim.$ip"
261      else
262         xmgr=$WRK_D/$mask/$sim 
263         ip=0 ; prev=$sim
264         listex="$listex $sim"
265      fi
266      rm -f $xmgr ; touch $xmgr
267      for var in $listevars ; do
268         echo var $var
269         fact=`grep "^$var " descr | awk ' { print $2 } '`
270         paste $OBS_DIR/$mask $SIM_DIR/$mask | grep "^$var " | awk ' { if ( $4 == 999999 ) print 0 ; else print '$fact' * ( $4 - $2 ) } ' >> $xmgr
271      done
272   done
273         
274
275
276   size=`echo $listsims | wc -w | awk ' { print 3. / $1 } '`
277   for ii in 0 1 2 3 4 5 6 7 8 9 10 11 12 ; do
278      echo "s$ii type bar" >> tmp.param
279      echo "s$ii symbol fill pattern 1" >> tmp.param
280      echo "s$ii symbol size $size" >> tmp.param
281      echo "s$ii line linestyle 0" >> tmp.param
282   done
283
284   cd $WRK_D/$mask
285   pwd ; echo xmgrace $listex -param ../../../tmp.param -legend load -hardcopy -hdevice EPS -printfile tmp.eps
286   xmgrace $listex -param ../../../tmp.param -legend load -hardcopy -hdevice EPS -printfile tmp.eps
287   epstopdf tmp.eps
288   OUT_D=$COMP_D/METRICS/$season ; mkdir -p $OUT_D
289   \mv -f tmp.pdf $OUT_D/$mask.pdf ; convert -density 144 $OUT_D/$mask.pdf $OUT_D/$mask.png
290   cd ../../..
291
292done
293
294cp mask*png $OUT_D
295done
Note: See TracBrowser for help on using the repository browser.