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