source: BOL/Multi_atlas/METRICS/POUB/metrics.sh.save_241016 @ 3684

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