[3684] | 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 | |
---|
[4340] | 8 | source ~/env_Multi_atlas.sh |
---|
[4330] | 9 | |
---|
[3684] | 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 ;; |
---|
[3882] | 38 | "-comp") COMP_D=/thredds/ipsl/fabric/lmdz/MultiSimu/$2 ; shift ; shift ;; |
---|
[3684] | 39 | "-seas") listeseas=$2 ; shift ; shift ;; |
---|
| 40 | *) ./cmor.sh -h ; shift ; exit ;; |
---|
| 41 | esac |
---|
| 42 | done |
---|
| 43 | |
---|
| 44 | #################################################################### |
---|
| 45 | # About the grid |
---|
| 46 | #################################################################### |
---|
| 47 | case $GR in |
---|
| 48 | VLR) remapf="/home/hourdin/CMIP5/Anal/Feb21_2012_tsol_OBS_AVE_ANM.nc" ;; |
---|
| 49 | *) echo "grille $GR non prevue" ; exit |
---|
| 50 | esac |
---|
| 51 | mkdir -p $MAINDIR/$GR/GR |
---|
| 52 | if [ ! -f $MAINDIR/$GR/GR/LAT ] ; then |
---|
| 53 | ncks -v LAT $remapf | grep 'LAT\[' | sed -e '/LAT_bn/d' | cut -d= -f2 | awk ' { print $1 } ' >| $MAINDIR/$GR/GR/LAT |
---|
| 54 | fi |
---|
| 55 | if [ "$remapf" != "" ] ; then remap="-remapcon,$remapf" ; fi |
---|
| 56 | |
---|
| 57 | |
---|
| 58 | ################################################################################ |
---|
| 59 | # Loop on seasons |
---|
| 60 | for SEAS in `echo $listeseas | sed -e 's/,/ /g'` ; do |
---|
| 61 | ################################################################################ |
---|
| 62 | echo $SEAS |
---|
| 63 | |
---|
| 64 | case $SEAS in |
---|
| 65 | YEAR) months="" ;; |
---|
| 66 | DJF) months="-selmon,1,2,12" ;; |
---|
| 67 | JJA) months="-selmon,6,7,8" ;; |
---|
| 68 | JJAS) months="-selmon,6,7,8,9" ;; |
---|
| 69 | *) echo "Cas $cas non prevu" ; exit |
---|
| 70 | esac |
---|
| 71 | |
---|
| 72 | |
---|
| 73 | ################################################################################ |
---|
| 74 | # Boucle sur les simulations |
---|
| 75 | ################################################################################ |
---|
| 76 | |
---|
| 77 | cd $MAINDIR/SE/CMOR ; \rm ferret* |
---|
| 78 | |
---|
| 79 | if [ "$COMP_D" != "" ] ; then |
---|
| 80 | listesim=`awk ' { print $1"_"$2 } ' $COMP_D/def.txt` |
---|
| 81 | fi |
---|
| 82 | echo listesim $listesim |
---|
| 83 | |
---|
| 84 | |
---|
| 85 | if [ "$listesim" = "" ] ; then listesim=`ls` ; fi |
---|
| 86 | |
---|
| 87 | for sim in $listesim ; do |
---|
| 88 | |
---|
| 89 | IN_DIR=$MAINDIR/SE/CMOR/$sim |
---|
| 90 | echo $IN_DIR |
---|
| 91 | |
---|
| 92 | if [ -d $IN_DIR ] ; then |
---|
| 93 | |
---|
| 94 | echo seasons.sh : mise a jour pour $sim |
---|
| 95 | if [ $force_create = 1 ] ; then |
---|
| 96 | rm -rf $MAINDIR/$GR/$SEAS/$sim |
---|
| 97 | fi |
---|
| 98 | OUT_DIR=$MAINDIR/$GR/$SEAS/$sim/NC ; mkdir -p $OUT_DIR |
---|
| 99 | |
---|
| 100 | cd $IN_DIR |
---|
| 101 | # boucle sur les variables (chacune correspondant à un .nc) |
---|
| 102 | for f in *nc ; do |
---|
| 103 | var=`basename $f .nc` |
---|
| 104 | # Pour le 3D, on prend directement les moyennes zonales |
---|
| 105 | |
---|
| 106 | # facteurs mutliplicatifs si besoin |
---|
| 107 | mulc=1. |
---|
| 108 | case $var in |
---|
| 109 | pr) mulc=86400. ;; |
---|
| 110 | autre) mulc=achanger ;; |
---|
| 111 | dernier) mulc=bou |
---|
| 112 | esac |
---|
| 113 | |
---|
| 114 | # Moyenne saisonniere (et zonale pour les champs 3D) |
---|
| 115 | if [ ! -f $OUT_DIR/$f -a -f $IN_DIR/$f ] ; then |
---|
| 116 | echo cdo mulc,$mulc -timavg $months $remap $IN_DIR/$f $OUT_DIR/$f |
---|
| 117 | cdo mulc,$mulc -timavg $months $remap $IN_DIR/$f $OUT_DIR/$f |
---|
| 118 | else |
---|
| 119 | echo $OUT_DIR/$f : deja cree |
---|
| 120 | fi |
---|
| 121 | |
---|
| 122 | done |
---|
| 123 | |
---|
| 124 | |
---|
| 125 | ######################################################################## |
---|
| 126 | # Regroupement des variables 2D dans all.nc |
---|
| 127 | ######################################################################## |
---|
| 128 | cd $OUT_DIR |
---|
| 129 | liste3d="" |
---|
| 130 | listef="" |
---|
| 131 | if [ "`ls -rt *nc | tail -1`" != "all.nc" ] ; then |
---|
| 132 | for f in `ls *nc | sed -e 's/all.nc//'` ; do |
---|
| 133 | var=`basename $f .nc` |
---|
| 134 | case $var in |
---|
| 135 | ua|va|wap|ta|hus|hur) liste3d="$liste3d $f" ;; |
---|
| 136 | *) listef="$listef $f" |
---|
| 137 | esac |
---|
| 138 | done |
---|
| 139 | \rm -f all.nc |
---|
| 140 | echo cdo merge $listef all.nc |
---|
| 141 | cdo merge $listef all.nc |
---|
| 142 | fi |
---|
| 143 | |
---|
| 144 | else |
---|
| 145 | echo ERREUR: repertoire $IN_DIR absent |
---|
| 146 | fi # Boucle sur $sim |
---|
| 147 | done |
---|
| 148 | |
---|
| 149 | done |
---|