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