#!/bin/bash #################################################################### # Frederic Hourdin. 2015/09/07 # Script de calcl de moyennes saisonnieres sur une grille reduite # en utilisant cdo. Preparation des tracers d'atlas. #################################################################### login=`whoami` ulimit -s unlimited GR=VLR hostname=`hostname` if [ ${hostname:0:5} = cicla ] ; then DODSDIR=/prodigfs/ipslfs/dods fi if [ ${hostname:0:5} = camel ] ; then DODSDIR=/prodigfs/ipslfs/dods fi if [ ${hostname:0:5} = irene ] ; then DODSDIR= fi if [ ${hostname:0:5} = jean- ] ; then DODSDIR= fi MAINDIR=$DODSDIR/$login/lmdz force_create=0 #################################################################### # Interactive options #################################################################### COMP_D="" listeseas="JJA,YEAR" listeseas="JJA,YEAR,DJF" listesim="" listeseas="YEAR,DJF,JJA,JJAS" while (($# > 0)) do case $1 in "-h") cat <<........fin Usage : cmor.sh [ -s sim1,sim2... -seas DJF,YEAR -f] -f forces execution even if the output file already exists ........fin shift ; exit ;; "-s") listesim=`echo $2 | sed -e 's/,/ /g'` ; shift ; shift ;; "-f") force_create=1 ; shift ;; "-comp") COMP_D=/prodigfs/ipslfs/dods/fabric/lmdz/MultiSimu/$2 ; shift ; shift ;; "-seas") listeseas=$2 ; shift ; shift ;; *) ./cmor.sh -h ; shift ; exit ;; esac done i=1 while [ "`ps -ux | grep season.sh | grep bin | wc -l`" != "2" ] ; do echo Mise en attente de season.sh deja en cours d execution $i sleep 2 ; (( i = $i + 1 )) if [ "$i" = "3600" ] ; then exit ; fi done #################################################################### # About the grid #################################################################### case $GR in VLR) remapf="/home/hourdin/CMIP5/Anal/Feb21_2012_tsol_OBS_AVE_ANM.nc" ;; *) echo "grille $GR non prevue" ; exit esac mkdir -p $MAINDIR/$GR/GR if [ ! -f $MAINDIR/$GR/GR/LAT ] ; then ncks -v LAT $remapf | grep 'LAT\[' | sed -e '/LAT_bn/d' | cut -d= -f2 | awk ' { print $1 } ' >| $MAINDIR/$GR/GR/LAT fi if [ "$remapf" != "" ] ; then remap="-remapcon,$remapf" ; fi ################################################################################ # Loop on seasons for SEAS in `echo $listeseas | sed -e 's/,/ /g'` ; do ################################################################################ echo $SEAS case $SEAS in YEAR) months="" ;; DJF) months="-selmon,1,2,12" ;; JJA) months="-selmon,6,7,8" ;; JJAS) months="-selmon,6,7,8,9" ;; *) echo "Cas $cas non prevu" ; exit esac ################################################################################ # Boucle sur les simulations ################################################################################ cd $MAINDIR/SE/CMOR ; \rm ferret* if [ "$COMP_D" != "" ] ; then listesim=`awk ' { print $1"_"$2 } ' $COMP_D/def.txt` fi echo listesim $listesim if [ "$listesim" = "" ] ; then listesim=`ls` ; fi for sim in $listesim ; do IN_DIR=$MAINDIR/SE/CMOR/$sim echo $IN_DIR if [ -d $IN_DIR ] ; then echo seasons.sh : mise a jour pour $sim if [ $force_create = 1 ] ; then rm -rf $MAINDIR/$GR/$SEAS/$sim fi OUT_DIR=$MAINDIR/$GR/$SEAS/$sim/NC ; mkdir -p $OUT_DIR cd $IN_DIR # boucle sur les variables (chacune correspondant à un .nc) for f in *nc ; do var=`basename $f .nc` # Pour le 3D, on prend directement les moyennes zonales # facteurs mutliplicatifs si besoin mulc=1. case $var in pr) mulc=86400. ;; autre) mulc=achanger ;; dernier) mulc=bou esac # Moyenne saisonniere (et zonale pour les champs 3D) if [ ! -f $OUT_DIR/$f -a -f $IN_DIR/$f ] ; then echo cdo mulc,$mulc -timavg $months $remap $IN_DIR/$f $OUT_DIR/$f cdo mulc,$mulc -timavg $months $remap $IN_DIR/$f $OUT_DIR/$f else echo $OUT_DIR/$f : deja cree fi done ######################################################################## # Regroupement des variables 2D dans all.nc ######################################################################## cd $OUT_DIR liste3d="" listef="" if [ "`ls -rt *nc | tail -1`" != "all.nc" ] ; then for f in `ls *nc | sed -e 's/all.nc//'` ; do var=`basename $f .nc` case $var in ua|va|wap|ta|hus|hur) liste3d="$liste3d $f" ;; *) listef="$listef $f" esac done \rm -f all.nc echo cdo merge $listef all.nc cdo merge $listef all.nc fi else echo ERREUR: repertoire $IN_DIR absent fi # Boucle sur $sim done done