1 | #!/bin/bash |
---|
2 | #################################################################### |
---|
3 | # Frederic Hourdin. 2015/09/07 |
---|
4 | # Script de calcl de moyennes saisonnieres sur une grille reduite |
---|
5 | # en utilisant cdo. Preparation des tracers d'atlas. |
---|
6 | #################################################################### |
---|
7 | |
---|
8 | source ./env.sh |
---|
9 | |
---|
10 | ulimit -s unlimited |
---|
11 | GR=VLR |
---|
12 | |
---|
13 | MAINDIR=$DODSDIR/$login/lmdz |
---|
14 | |
---|
15 | force_create=0 |
---|
16 | |
---|
17 | #################################################################### |
---|
18 | # Interactive options |
---|
19 | #################################################################### |
---|
20 | |
---|
21 | COMP_D="" |
---|
22 | listeseas="JJA,YEAR" |
---|
23 | listeseas="JJA,YEAR,DJF" |
---|
24 | listesim="" |
---|
25 | listeseas="YEAR,DJF,JJA,JJAS" |
---|
26 | |
---|
27 | |
---|
28 | while (($# > 0)) |
---|
29 | do |
---|
30 | case $1 in |
---|
31 | "-h") cat <<........fin |
---|
32 | Usage : cmor.sh [ -s sim1,sim2... -seas DJF,YEAR -f] |
---|
33 | -f forces execution even if the output file already exists |
---|
34 | ........fin |
---|
35 | shift ; exit ;; |
---|
36 | "-s") listesim=`echo $2 | sed -e 's/,/ /g'` ; shift ; shift ;; |
---|
37 | "-f") force_create=1 ; shift ;; |
---|
38 | "-comp") COMP_D=/thredds/ipsl/fabric/lmdz/MultiSimu/$2 ; shift ; shift ;; |
---|
39 | "-seas") listeseas=$2 ; shift ; shift ;; |
---|
40 | *) ./cmor.sh -h ; shift ; exit ;; |
---|
41 | esac |
---|
42 | done |
---|
43 | |
---|
44 | i=1 |
---|
45 | while [ "`ps -ux | grep season.sh | grep bin | wc -l`" != "2" ] ; do |
---|
46 | echo Mise en attente de season.sh deja en cours d execution $i |
---|
47 | sleep 2 ; (( i = $i + 1 )) |
---|
48 | if [ "$i" = "3600" ] ; then exit ; fi |
---|
49 | done |
---|
50 | |
---|
51 | |
---|
52 | #################################################################### |
---|
53 | # About the grid |
---|
54 | #################################################################### |
---|
55 | case $GR in |
---|
56 | VLR) remapf="/home/hourdin/CMIP5/Anal/Feb21_2012_tsol_OBS_AVE_ANM.nc" ;; |
---|
57 | *) echo "grille $GR non prevue" ; exit |
---|
58 | esac |
---|
59 | mkdir -p $MAINDIR/$GR/GR |
---|
60 | if [ ! -f $MAINDIR/$GR/GR/LAT ] ; then |
---|
61 | ncks -v LAT $remapf | grep 'LAT\[' | sed -e '/LAT_bn/d' | cut -d= -f2 | awk ' { print $1 } ' >| $MAINDIR/$GR/GR/LAT |
---|
62 | fi |
---|
63 | if [ "$remapf" != "" ] ; then remap="-remapcon,$remapf" ; fi |
---|
64 | |
---|
65 | |
---|
66 | ################################################################################ |
---|
67 | # Loop on seasons |
---|
68 | for SEAS in `echo $listeseas | sed -e 's/,/ /g'` ; do |
---|
69 | ################################################################################ |
---|
70 | echo $SEAS |
---|
71 | |
---|
72 | case $SEAS in |
---|
73 | YEAR) months="" ;; |
---|
74 | DJF) months="-selmon,1,2,12" ;; |
---|
75 | JJA) months="-selmon,6,7,8" ;; |
---|
76 | JJAS) months="-selmon,6,7,8,9" ;; |
---|
77 | *) echo "Cas $cas non prevu" ; exit |
---|
78 | esac |
---|
79 | |
---|
80 | |
---|
81 | ################################################################################ |
---|
82 | # Boucle sur les simulations |
---|
83 | ################################################################################ |
---|
84 | |
---|
85 | cd $MAINDIR/SE/CMOR ; \rm ferret* |
---|
86 | |
---|
87 | if [ "$COMP_D" != "" ] ; then |
---|
88 | listesim=`awk ' { print $1"_"$2 } ' $COMP_D/def.txt` |
---|
89 | fi |
---|
90 | echo listesim $listesim |
---|
91 | |
---|
92 | |
---|
93 | if [ "$listesim" = "" ] ; then listesim=`ls` ; fi |
---|
94 | |
---|
95 | for sim in $listesim ; do |
---|
96 | |
---|
97 | IN_DIR=$MAINDIR/SE/CMOR/$sim |
---|
98 | echo $IN_DIR |
---|
99 | |
---|
100 | if [ -d $IN_DIR ] ; then |
---|
101 | |
---|
102 | echo seasons.sh : mise a jour pour $sim |
---|
103 | if [ $force_create = 1 ] ; then |
---|
104 | rm -rf $MAINDIR/$GR/$SEAS/$sim |
---|
105 | fi |
---|
106 | OUT_DIR=$MAINDIR/$GR/$SEAS/$sim/NC ; mkdir -p $OUT_DIR |
---|
107 | |
---|
108 | cd $IN_DIR |
---|
109 | # boucle sur les variables (chacune correspondant à un .nc) |
---|
110 | for f in *nc ; do |
---|
111 | var=`basename $f .nc` |
---|
112 | # Pour le 3D, on prend directement les moyennes zonales |
---|
113 | |
---|
114 | # facteurs mutliplicatifs si besoin |
---|
115 | mulc=1. |
---|
116 | case $var in |
---|
117 | pr) mulc=86400. ;; |
---|
118 | autre) mulc=achanger ;; |
---|
119 | dernier) mulc=bou |
---|
120 | esac |
---|
121 | |
---|
122 | # Moyenne saisonniere (et zonale pour les champs 3D) |
---|
123 | if [ ! -f $OUT_DIR/$f -a -f $IN_DIR/$f ] ; then |
---|
124 | echo cdo mulc,$mulc -timavg $months $remap $IN_DIR/$f $OUT_DIR/$f |
---|
125 | cdo mulc,$mulc -timavg $months $remap $IN_DIR/$f $OUT_DIR/$f |
---|
126 | else |
---|
127 | echo $OUT_DIR/$f : deja cree |
---|
128 | fi |
---|
129 | |
---|
130 | done |
---|
131 | |
---|
132 | |
---|
133 | ######################################################################## |
---|
134 | # Regroupement des variables 2D dans all.nc |
---|
135 | ######################################################################## |
---|
136 | cd $OUT_DIR |
---|
137 | liste3d="" |
---|
138 | listef="" |
---|
139 | if [ "`ls -rt *nc | tail -1`" != "all.nc" ] ; then |
---|
140 | for f in `ls *nc | sed -e 's/all.nc//'` ; do |
---|
141 | var=`basename $f .nc` |
---|
142 | case $var in |
---|
143 | ua|va|wap|ta|hus|hur) liste3d="$liste3d $f" ;; |
---|
144 | *) listef="$listef $f" |
---|
145 | esac |
---|
146 | done |
---|
147 | \rm -f all.nc |
---|
148 | echo cdo merge $listef all.nc |
---|
149 | cdo merge $listef all.nc |
---|
150 | fi |
---|
151 | |
---|
152 | else |
---|
153 | echo ERREUR: repertoire $IN_DIR absent |
---|
154 | fi # Boucle sur $sim |
---|
155 | done |
---|
156 | |
---|
157 | done |
---|