source: BOL/Multi_atlas/METRICS/POUB/metricsIM_new.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: 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 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/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
156prw         1  PRW
157psl         1  SLP
158ts         10  Ts*10
159sst        10  sst*10
160tas        10  T2m*10
161rlds        1  LWdn srf
162rldscs      1  LWdn srf Clr
163rlus       -1  LWup Srf
164rlutcs     -1  LW TOA Clr
165rlut       -1  LW TOA
166rsdscs      1  SWdn srf Clr
167rsds        1  SWdn srf
168rsdt        1  SWdn TOA
169rsuscs     -1  SWup srf Clr
170rsus       -1  SWup srf
171rsutcs     -1  SW TOA Clr
172rstcs      -1  SW TOA Clr
173rsut       -1  SW TOA
174crest       1  SW CRE TOA
175crelt       1  LW CRE TOA
176cres        1  CRE srf
177crehfls     1  CRE - LE
178cret        1  CRE TOA
179rst         1  SW TOA
180rt          1  SW+LW TOA
181trbs       -1  -(LE+H)
182rls         1  LW srf
183rss         1  SW srf
184rs          1  SW+LW srf
185bils        1  Srf budget
186eod
187
188# -------------------  debut boucle sur les figures ----------------------------
189for mask in $mask_figs ; do
190# -------------------  debut boucle sur les figures ----------------------------
191
192   case $mask in
193       etoa|oce|otrop) listevars="ts bils crehfls cres rs rss crest hfls tas cllcalipso clhcalipso " ;;
194       interH|glob|ter|NAtl|circA|conv|weak|subs) listevars="bils tas rt rlutcs crelt rsutcs crest cllcalipso clmcalipso clhcalipso pr" ;;
195       Arct|Sibe|USA) listevars="tas rs rlds rsds crelt crest cllcalipso clmcalipso clhcalipso pr prw" ;;
196       *) echo cas non prevu ; exit
197   esac
198
199   nvars=`echo $listevars | wc -w | awk ' { print $1 } '`
200   case $mask in
201     NAtl) yax="North Atlantic " ;;
202     Arct) yax="Arctic ocean" ;;
203     circA) yax="Circum Antartica " ;;
204     Sibe) yax="Siberia " ;;
205     USA) yax="US Gr. Plains " ;;
206     glob) yax="Global " ;;
207     ter) yax="Land " ;;
208     oce) yax="Ocean " ;;
209     otrop) yax="Tropical ocean " ;;
210     interH) yax="Inter Hemispheric " ;;
211     etoa) yax="ETOA " ;;
212     conv) yax="Convective regimes " ;;
213     weak) yax="Weak convection " ;;
214     subs) yax="Subsidences "
215   esac
216   cat <<...eod>| tmp.param
217    g0 type Chart
218    world -0.5, -35, $nvars, 35
219    yaxis  label "$yax Fluxes (W/m2) "
220    xaxis  ticklabel font 0
221    xaxis  ticklabel color 1
222    xaxis  tick place both
223    xaxis  tick spec type both
224    xaxis  tick spec 11
225    xaxis  ticklabel char size 1.3
226    xaxis  ticklabel angle 90
227    yaxis  tick major 10
228    yaxis  tick minor ticks 1
229    legend 1.20, 0.8
230...eod
231
232   ii=0
233   for var in $listevars ; do
234      fact=`grep "^$var " descr | awk ' { print $2 } '`
235      titre=`grep "^$var " descr | sed -e 's/'$var'//' -e 's/'$fact'//'`
236      cat <<......eod>> tmp.param
237      xaxis  tick major $ii, $ii
238      xaxis  ticklabel $ii, "$titre"
239......eod
240      (( ii = $ii + 1 ))
241   done
242
243
244   prev=""
245   ip=0
246   listex=""
247   echo LISTESIMSY $listsimsy
248   for simy in $listsimsy ; do
249      sim=`echo $simy | sed -e 's/_[0-9][0-9][0-9][0-9]_[0-9][0-9][0-9][0-9]//'`
250      years=`echo $simy | sed -e s/${sim}//`
251      echo $sim
252      SIM_DIR=$CMOR_DIR/$sim$years/METRICS
253      ls $SIM_DIR
254      OBS_DIR=$CMOR_DIR/OBS/METRICS
255      mkdir -p $WRK_D/$mask
256      if [ "$sim" = "$prev" ] ; then # Cas ou on a plusieurs decennies de la meme simu
257         (( ip = $ip + 1 ))
258         xmgr=$WRK_D/$mask/$sim.$ip
259         listex="$listex $sim.$ip"
260      else
261         xmgr=$WRK_D/$mask/$sim 
262         ip=0 ; prev=$sim
263         listex="$listex $sim"
264      fi
265      rm -f $xmgr ; touch $xmgr
266      for var in $listevars ; do
267         echo var $var
268         fact=`grep "^$var " descr | awk ' { print $2 } '`
269         #paste $OBS_DIR/$mask $SIM_DIR/$mask | grep "^$var " | awk ' { if ( $4 == 999999 ) print 0 ; else print '$fact' * ( $4 - $2 ) } ' >> $xmgr
270         oval=`more $OBS_DIR/$mask | grep "^$var " | awk ' { if ( $4 == 999999 ) print 0 ; else print '$fact' * $2 } '` 
271         sval=`more $SIM_DIR/$mask | grep "^$var " | awk ' { if ( $4 == 999999 ) print 0 ; else print '$fact' * $2 } '` 
272         echo $oval $sval | awk ' { print '$fact' * ( $2 - $1 ) }' >> $xmgr
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.