123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- #!/bin/bash
- #SBATCH -n 1
- #SBATCH -t 12:00:00
- #SBATCH -J pre_perturbation
- #SBATCH -o slurm_pre-%j.out
- #SBATCH -e slurm_pre-%j.err
- set -o nounset
- set -o errexit
- set -x
- # =============================================================================
- # Author - F. Massonnet
- # Purpose- Prepare DFS5.2 forcing set to create perturbations later
- # What the script does:
- # 1) Make daily means in the case atmospheric data is at higher frequency
- # 2) Remove leap days if any
- # 3) Computes year-to-year differences
- #
- # The year-to-year differences are then used to generate perturbations,
- # in a second script.
- #
- # History - February 2016: creation for T2 perturbation
- # - March 2016: sorting problems with values beyond bounds
- # - April 2016: extension to other variables
- # =============================================================================
- # Which variable of the DFS5.2 forcing set has to be perturbed?
- # Possibilities: t2, q2, u10, v10, qlw, qsw, snow or precip
- var=qsw
- # Years defining the period considered. If perturbations have to be generated
- # for 1980-1990 but based on anomalies of the period 1975-1985, the longest
- # period has to be set: 1975-1990
- #
- # yearb = 1979 and yeare = 2015 are recommended choices since the forcing
- # spans these years and all variables are interannual
- yearb=1973
- yeare=1974
- # Directory of the source of the data (i.e., the original files)
- sourcedir=/esarchive/releases/fg/ocean/DFS5.2/
- # Working directory
- workdir=/esnas/scratch/$USER/TMP/TMP_${var}_26904
- # =============================================================================
- # Script Starts
- # =============================================================================
- mkdir -p $workdir
- cd $workdir
- echo "Workdir is $workdir"
- case ${var} in
- t2)
- min=100.0 # Min and max values allowed
- max=400.0
- freq=3hour # Frequency of availability
- fvar=${var} # Name of the variable in the NetCDF
- ;;
- q2)
- min=0.0
- max=0.1
- freq=3hour
- fvar=${var}
- ;;
- u10)
- min=-100.0
- max=100.0
- freq=3hour
- fvar=${var}
- ;;
- v10)
- min=-100.0
- max=100.0
- freq=3hour
- fvar=${var}
- ;;
- qsw)
- min=0.0
- max=1000.0
- freq=1day
- fvar=radsw
- ;;
- qlw)
- min=0.0
- max=1000.0
- freq=1day
- fvar=radlw
- ;;
- snow)
- min=0.0
- max=0.001
- freq=1day
- fvar=${var}
- ;;
- precip)
- min=0.0
- max=0.01
- freq=1day
- fvar=${var}
- ;;
- *)
- echo "Variable $var unknown"
- exit
- esac
- for year in `seq ${yearb} ${yeare}`
- do
- echo "Year $year / $yeare"
- # Reset valid range. Otherwise, the CDO command settaxis messes up and several points are reported as
- # missing values. This then makes NEMO crash.
- ncatted -O -a valid_range,${fvar},m,f,"${min}, ${max}" ${sourcedir}/${var}_DFS5.2_${year}.nc tmp.${year}.nc
- cdo settaxis,${year}-01-01,00:00,${freq} tmp.${year}.nc ${var}_DFS5.2_${year}.nc
- if [ ${freq} = 3hour ]
- then
- cdo daymean ${var}_DFS5.2_${year}.nc ${var}_DFS5.2_day_${year}.nc
- else
- cp ${var}_DFS5.2_${year}.nc ${var}_DFS5.2_day_${year}.nc
- fi
- # Cope with leap years
- ndays=`cdo ntime ${var}_DFS5.2_day_${year}.nc`
- if [[ $ndays = 366 ]]
- then
- cdo delete,month=2,day=29 ${var}_DFS5.2_day_${year}.nc ${var}_DFS5.2_day_${year}.nc.X
- mv ${var}_DFS5.2_day_${year}.nc.X ${var}_DFS5.2_day_${year}.nc
- else
- if [[ $ndays != 365 ]]
- then
- echo "Problem: nb of days is neither 365 nor 366"
- exit
- fi
- fi
- if [[ $year -ge $(( ${yearb} + 1 )) ]]
- then
- cdo sub ${var}_DFS5.2_day_${year}.nc ${var}_DFS5.2_day_$(( ${year} - 1 )).nc diff_${var}_DFS5.2_day_${year}-$(( ${year} - 1 )).nc
- fi
- rm -f tmp.${year}.nc
- done
- echo "SCRIPT SUCCESSFULLY FINISHED"
|