[10] | 1 | #! /bin/sh |
---|
[11] | 2 | # |
---|
| 3 | #+ |
---|
| 4 | # |
---|
| 5 | # .. program:: compute_erai_daily_region_2d.sh |
---|
| 6 | # |
---|
| 7 | # .. _compute_erai_daily_region_2d.sh: |
---|
| 8 | # |
---|
| 9 | # ========================================================================== |
---|
| 10 | # compute_erai_daily_region_2d.sh - get ERA-I uninterpolated reference files |
---|
| 11 | # ========================================================================== |
---|
| 12 | # |
---|
| 13 | # SYNOPSIS |
---|
| 14 | # ======== |
---|
| 15 | # |
---|
| 16 | # :: |
---|
| 17 | # |
---|
[51] | 18 | # $ compute_erai_daily_region_2d.sh [--debug] [--diff_cmd arg] -b yyyymmdd -e yyyymmdd |
---|
[11] | 19 | # |
---|
| 20 | # DESCRIPTION |
---|
| 21 | # =========== |
---|
| 22 | # |
---|
[33] | 23 | # .. option:: --diff_cmd <arg> |
---|
| 24 | # |
---|
[51] | 25 | # By default :samp:`ncflint` command is used to compute difference between NetCDF files |
---|
[33] | 26 | # |
---|
[51] | 27 | # If :samp:`cdo` is specified here, this command will be used instead. |
---|
[33] | 28 | # |
---|
| 29 | # .. option:: --debug |
---|
| 30 | # |
---|
[51] | 31 | # If this option is set, :samp:`ncdump -v time` will be added to log file |
---|
[33] | 32 | # |
---|
[51] | 33 | # .. option:: -b beginning date <yyyymmdd> |
---|
| 34 | # .. option:: -e end date <yyyymmdd> |
---|
[33] | 35 | # |
---|
[51] | 36 | # Put in ${PROJECT_ID} ERA-Intermin reference files. |
---|
[22] | 37 | # |
---|
[50] | 38 | # Log file is written on :file:`${PROJECT_LOG}/compute_erai_daily_region_2d.log.{YYYYMMDDTHHMMSSZ}` |
---|
[22] | 39 | # |
---|
[11] | 40 | # .. graphviz:: |
---|
| 41 | # |
---|
| 42 | # digraph compute_erai_daily_region_2d { |
---|
| 43 | # graph [ |
---|
| 44 | # rankdir="LR", |
---|
| 45 | # ] |
---|
[33] | 46 | # filein_str [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/yyyy/mm/str.yyyymmdd.fshei.GLOBAL_075.nc"]; |
---|
| 47 | # filein_msl [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/msl.yyyymm.ashei.GLOBAL_075.nc"]; |
---|
| 48 | # filein_sstk [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/sstk.yyyymm.ashei.GLOBAL_075.nc"]; |
---|
| 49 | # filein_t2 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/t2.yyyymm.ashei.GLOBAL_075.nc"]; |
---|
| 50 | # filein_d2 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/d2.yyyymm.ashei.GLOBAL_075.nc"]; |
---|
| 51 | # filein_u10 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/u10.yyyymm.ashei.GLOBAL_075.nc"]; |
---|
| 52 | # filein_v10 [shape=ellipse,fontname=Courier,label="/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/AN_SF/yyyy/v10.yyyymm.ashei.GLOBAL_075.nc"]; |
---|
[11] | 53 | # |
---|
[50] | 54 | # fileout_str [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/erai_TROP_1d_yyyy0101_yyyy1231_str_gridOrig.nc"]; |
---|
| 55 | # fileout_msl [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/erai_TROP_1d_yyyy0101_yyyy1231_msl_gridOrig.nc"]; |
---|
| 56 | # fileout_sstk [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/erai_TROP_1d_yyyy0101_yyyy1231_sstk_gridOrig.nc"]; |
---|
| 57 | # fileout_t2 [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/erai_TROP_1d_yyyy0101_yyyy1231_t2_gridOrig.nc"]; |
---|
| 58 | # fileout_d2 [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/erai_TROP_1d_yyyy0101_yyyy1231_d2_gridOrig.nc"]; |
---|
| 59 | # fileout_u10 [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/erai_TROP_1d_yyyy0101_yyyy1231_u10_gridOrig.nc"]; |
---|
| 60 | # fileout_v10 [shape=ellipse,fontname=Courier,label="${PROJECT_ID}/erai_TROP_1d_yyyy0101_yyyy1231_v10_gridOrig.nc"]; |
---|
[11] | 61 | # |
---|
| 62 | # compute_erai_daily_region_2d [shape=box, |
---|
| 63 | # fontname=Courier, |
---|
| 64 | # color=blue, |
---|
| 65 | # URL="http://forge.ipsl.jussieu.fr/tropflux/browser/trunk/src/compute_erai_daily_region_2d.sh", |
---|
[50] | 66 | # label="${PROJECT}/src/compute_erai_daily_region_2d.sh"]; |
---|
[11] | 67 | # |
---|
[32] | 68 | # {filein_str filein_msl filein_sstk filein_t2 filein_d2 filein_u10 filein_v10} -> {compute_erai_daily_region_2d} -> {fileout_str fileout_msl fileout_sstk fileout_t2 fileout_d2 fileout_u10 fileout_v10} |
---|
[11] | 69 | # |
---|
| 70 | # } |
---|
| 71 | # |
---|
[32] | 72 | # .. caution:: |
---|
| 73 | # |
---|
| 74 | # Output files if exist are overwritten. |
---|
| 75 | # |
---|
[22] | 76 | # EXAMPLES |
---|
| 77 | # ======== |
---|
| 78 | # |
---|
| 79 | # On climserv only if you don't have any ERA-I reference data, |
---|
| 80 | # you just have to run this tool :: |
---|
| 81 | # |
---|
[67] | 82 | # $ compute_erai_daily_region_2d.sh -b 19890102 -e 20091231 |
---|
[22] | 83 | # |
---|
| 84 | # And look at log file with :: |
---|
| 85 | # |
---|
| 86 | # $ tlogd.sh compute_erai_daily_region_2d |
---|
| 87 | # |
---|
[50] | 88 | # and of course on files in ${PROJECT_ID}. |
---|
[22] | 89 | # |
---|
[11] | 90 | # SEE ALSO |
---|
| 91 | # ======== |
---|
| 92 | # |
---|
| 93 | # :ref:`guide data ERA-I <data_in_erai>` |
---|
| 94 | # |
---|
[22] | 95 | # http://climserv.ipsl.polytechnique.fr/fr/les-donnees/era-interim-4.html |
---|
| 96 | # for variables names |
---|
| 97 | # |
---|
[50] | 98 | # :ref:`project_profile.sh` |
---|
[22] | 99 | # |
---|
[25] | 100 | # :func:`ncpdq <nco:ncpdq>` |
---|
| 101 | # :func:`ncks <nco:ncks>` |
---|
| 102 | # :func:`ncrcat <nco:ncrcat>` |
---|
| 103 | # :func:`ncea <nco:ncea>` |
---|
| 104 | # :func:`ncflint <nco:ncflint>` |
---|
| 105 | # |
---|
[34] | 106 | # :func:`sub <cdo:sub>` |
---|
| 107 | # :func:`divc <cdo:divc>` |
---|
| 108 | # |
---|
[26] | 109 | # :ref:`interp_erai_dewt_1989_2009.pro` |
---|
| 110 | # :ref:`interp_erai_lwr_1989_2009.pro` |
---|
| 111 | # :ref:`interp_erai_sst_1989_2009.pro` |
---|
| 112 | # :ref:`interp_erai_t2m_1989_2009.pro` |
---|
| 113 | # :ref:`interp_erai_ws_1989_2009.pro` |
---|
| 114 | # |
---|
[11] | 115 | # TODO |
---|
| 116 | # ==== |
---|
| 117 | # |
---|
[52] | 118 | # catalog |
---|
| 119 | # |
---|
| 120 | # improve log |
---|
| 121 | # |
---|
| 122 | # handle dd parameter : now from 1 to end of month |
---|
| 123 | # |
---|
[51] | 124 | # adjust yyyymmddb_min and yyyymmddb_max |
---|
| 125 | # |
---|
[34] | 126 | # trouble with cdo reference (extra %23name in generated url using sphinx1.0.7) |
---|
[33] | 127 | # |
---|
| 128 | # minimize use of generic characters (*) to avoid ambiguity |
---|
| 129 | # |
---|
[22] | 130 | # split get and process files |
---|
[11] | 131 | # |
---|
| 132 | # coding rules |
---|
| 133 | # |
---|
[33] | 134 | # correction of min and max values of latitude attributes (still -90,+90 !) in output files |
---|
[25] | 135 | # |
---|
[32] | 136 | # are cmonthmin and cmonthmax the real info to put in output file name ? may be not because if input files do not exist |
---|
[22] | 137 | # |
---|
[33] | 138 | # same idea for day min and max - some time hard coded with 01 or 31 (avoid yyyy0231 !!) |
---|
[22] | 139 | # |
---|
[32] | 140 | # solve this kind of warning:: |
---|
| 141 | # |
---|
| 142 | # ncrcat: WARNING Intra-file non-monotonicity. Record coordinate "time" does not monotonically decrease between (input file /homedata/pinsard/log//compute_erai_daily_region_2d.20110126T154235Z.temp//temp_int_str_199012.nc record indices: 29, 30) (output file /homedata/pinsard/tropflux_d//erai_TROP_1d_19900101_19901231_str_gridOrig.nc record indices 363, 364) record coordinate values -0.000278, -0.000278 |
---|
| 143 | # |
---|
[33] | 144 | # this seems to be solved by using cdo instead of ncflint. to be confirmed ! |
---|
[32] | 145 | # |
---|
[33] | 146 | # no files *19890101* in /bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/FC_SF/1989/01/ : |
---|
| 147 | # is it normal ? |
---|
| 148 | # |
---|
| 149 | # check units of str :: |
---|
| 150 | # |
---|
| 151 | # str:long_name = "Surface thermal radiation" ; |
---|
[34] | 152 | # str:units = "W/m^2 s" |
---|
| 153 | # |
---|
[33] | 154 | # still true after ncflint/cdo arithmetic ? |
---|
| 155 | # |
---|
| 156 | # Modify global attributes : Still CF ? no more "five time values per day " in Forecast attributes |
---|
| 157 | # |
---|
| 158 | # enrich info in log file |
---|
| 159 | # |
---|
[11] | 160 | # EVOLUTIONS |
---|
| 161 | # ========== |
---|
| 162 | # |
---|
[33] | 163 | # $URL$ |
---|
| 164 | # |
---|
[51] | 165 | # - fplod 20110429T114649Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
| 166 | # |
---|
| 167 | # * add -b and -e parameters |
---|
| 168 | # |
---|
[34] | 169 | # - fplod 20110203T101720Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
| 170 | # |
---|
| 171 | # * add cdo reference |
---|
| 172 | # |
---|
[33] | 173 | # - pinsard 2011-02-02T16:11:07Z loholt1.ipsl.polytechnique.fr (Linux) |
---|
| 174 | # |
---|
| 175 | # * add parameter --debug |
---|
| 176 | # * add parameter --diff_cmd to choose between ncflint and cdo |
---|
| 177 | # * usage of :samp:`cdo sub` and :samp: cdo divc,86400.` if parameter --diff_cmd is set to cdo |
---|
| 178 | # thanks to https://code.zmaw.de/embedded/cdo/1.4.7/cdo.html#x1-2280002.7.4 |
---|
| 179 | # * add natural language explanation on ncflit usage provided by Matthieu |
---|
| 180 | # |
---|
| 181 | # - fplod 20110127T142038Z |
---|
| 182 | # |
---|
| 183 | # * correction of path of input files in header |
---|
| 184 | # |
---|
[32] | 185 | # - fplod 20110126T132641Z |
---|
| 186 | # |
---|
| 187 | # * avoid ncrcat interactive question |
---|
| 188 | # * remove unused variables |
---|
| 189 | # * change GLOG to TROP (36N,36S) |
---|
| 190 | # * yearmax 2009 |
---|
| 191 | # * add a test of existence of monthly file (symetric to test on daily files) |
---|
| 192 | # |
---|
[25] | 193 | # - fplod 20101223T084153Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
| 194 | # |
---|
| 195 | # * add reference to nco commands |
---|
| 196 | # |
---|
[23] | 197 | # - fplod 20101220T150356Z aedon.locean-ipsl.upmc.fr# |
---|
| 198 | # |
---|
| 199 | # * indentation |
---|
| 200 | # * replace date by yyyy (date is a shell command) |
---|
| 201 | # * replace for yyyy by while yyyy |
---|
| 202 | # * replace for month by while month |
---|
| 203 | # * replace for day by while day |
---|
| 204 | # * work only on existing dates |
---|
| 205 | # |
---|
[22] | 206 | # - fplod 20101220T142107Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
| 207 | # |
---|
| 208 | # * add Long name variables |
---|
| 209 | # * replace /bdd/IPCC/Reanalysis/ERAI/${reg}/ by ${TROPFLUX_ID} |
---|
| 210 | # * add examples |
---|
| 211 | # * add log management |
---|
| 212 | # * dirtemp not hard coded values |
---|
| 213 | # * check dirin permission |
---|
| 214 | # |
---|
[11] | 215 | # - fplod 20101216T110626Z aedon.locean-ipsl.upmc.fr (Darwin) |
---|
| 216 | # |
---|
| 217 | # * add minimal header |
---|
| 218 | # * add graph in header |
---|
| 219 | # |
---|
| 220 | #- |
---|
[22] | 221 | system=$(uname) |
---|
| 222 | case "${system}" in |
---|
| 223 | AIX|IRIX64) |
---|
| 224 | echo "www : no specific posix checking" |
---|
[51] | 225 | date_cmd=date |
---|
[22] | 226 | ;; |
---|
[51] | 227 | Darwin) |
---|
| 228 | set -o posix |
---|
| 229 | date_cmd=gdate |
---|
| 230 | ;; |
---|
| 231 | Linux) |
---|
| 232 | set -o posix |
---|
| 233 | date_cmd=date |
---|
| 234 | ;; |
---|
[22] | 235 | *) |
---|
| 236 | set -o posix |
---|
| 237 | ;; |
---|
| 238 | esac |
---|
| 239 | unset system |
---|
[11] | 240 | # |
---|
[22] | 241 | LANG=POSIX |
---|
| 242 | # |
---|
| 243 | command=$(basename ${0}) |
---|
| 244 | log_date=$(date -u +"%Y%m%dT%H%M%SZ") |
---|
| 245 | # |
---|
[51] | 246 | usage=" Usage : ${command} [--debug] [--diff_cmd [ncflint|cdo]] -b yyyymmdd -e yyyymmdd" |
---|
[22] | 247 | # |
---|
| 248 | hostname=$(hostname) |
---|
[51] | 249 | # |
---|
| 250 | yyyymmddb_min=19890101 |
---|
| 251 | yyyymmdde_max=20091231 |
---|
| 252 | # |
---|
[22] | 253 | # default |
---|
[33] | 254 | diff_cmd=ncflint |
---|
| 255 | debug=0 |
---|
[51] | 256 | yyyymmddb=19890101 |
---|
| 257 | yyyymmdde=20091231 |
---|
[52] | 258 | minlat=-36. |
---|
| 259 | maxlat=36. |
---|
| 260 | minlon=0. |
---|
| 261 | maxlon=360. |
---|
| 262 | reg=TROP |
---|
[22] | 263 | # |
---|
[51] | 264 | minargcount=4 |
---|
[33] | 265 | if [ ${#} -lt ${minargcount} ] |
---|
| 266 | then |
---|
| 267 | echo "${command} : eee : not enought arguments" |
---|
| 268 | echo "${usage}" |
---|
| 269 | exit 1 |
---|
| 270 | fi |
---|
| 271 | # |
---|
| 272 | set +u |
---|
| 273 | while [ ! -z "${1}" ] |
---|
| 274 | do |
---|
| 275 | case ${1} in |
---|
| 276 | --debug) |
---|
| 277 | debug=1 |
---|
| 278 | ;; |
---|
| 279 | --diff_cmd) |
---|
| 280 | diff_cmd=${2} |
---|
| 281 | shift |
---|
| 282 | ;; |
---|
[51] | 283 | -b) |
---|
| 284 | # first date to get |
---|
| 285 | yyyymmddb=${2} |
---|
| 286 | shift |
---|
| 287 | ;; |
---|
| 288 | -e) |
---|
| 289 | # last date to get |
---|
| 290 | yyyymmdde=${2} |
---|
| 291 | shift |
---|
| 292 | ;; |
---|
[33] | 293 | *) |
---|
| 294 | # anything else |
---|
| 295 | echo "${command} : eee : unknown option ${1}" |
---|
| 296 | echo "${command} : eee : ${usage}" |
---|
| 297 | exit 1 |
---|
| 298 | ;; |
---|
| 299 | esac |
---|
| 300 | # next flag |
---|
| 301 | shift |
---|
| 302 | done |
---|
| 303 | # |
---|
[22] | 304 | set -u |
---|
[51] | 305 | # check parameters |
---|
| 306 | # |
---|
| 307 | ${date_cmd} -d "${yyyymmddb}" > /dev/null |
---|
| 308 | status_date=${?} |
---|
| 309 | if [ ${status_date} -ne 0 ] |
---|
| 310 | then |
---|
| 311 | echo "${command} : eee : yyyymmddb ${yyyymmddb} argument invalid" |
---|
| 312 | exit 1 |
---|
| 313 | fi |
---|
| 314 | unset status_date |
---|
| 315 | # |
---|
| 316 | if [[ "${yyyymmddb}" < "${yyyymmddb_min}" ]] |
---|
| 317 | then |
---|
| 318 | echo "${command} : eee : yyyymmddb ${yyyymmddb} must be equal or greater than ${yyyymmddb_min}" |
---|
| 319 | exit 1 |
---|
| 320 | fi |
---|
| 321 | # |
---|
| 322 | ${date_cmd} -d "${yyyymmdde}" > /dev/null |
---|
| 323 | status_date=${?} |
---|
| 324 | if [ ${status_date} -ne 0 ] |
---|
| 325 | then |
---|
| 326 | echo "${command} : eee : yyyymmdde ${yyyymmdde} argument invalid" |
---|
| 327 | exit 1 |
---|
| 328 | fi |
---|
| 329 | unset status_date |
---|
| 330 | # |
---|
| 331 | if [[ "${yyyymmdde}" > "${yyyymmdde_max}" ]] |
---|
| 332 | then |
---|
| 333 | echo "${command} : eee : yyyymmdde ${yyyymmdde} must be lower or equal to ${yyyymmdde_max}" |
---|
| 334 | exit 1 |
---|
| 335 | fi |
---|
| 336 | # |
---|
| 337 | # |
---|
| 338 | if [[ "${yyyymmdde}" < "${yyyymmddb}" ]] |
---|
| 339 | then |
---|
| 340 | echo "${command} : eee : yyyymmdde ${yyyymmdde} must be equal or greater than yyyymmddb ${yyyymmddb}" |
---|
| 341 | exit 1 |
---|
| 342 | fi |
---|
| 343 | # |
---|
[33] | 344 | # test if diff_cmd valid |
---|
| 345 | case ${diff_cmd} in |
---|
| 346 | ncflint) |
---|
| 347 | # test if ncflint available |
---|
| 348 | tool=ncflint |
---|
| 349 | type ${tool} 1> /dev/null 2>&1 |
---|
| 350 | status=${?} |
---|
| 351 | if [ ${status} -ne 0 ] |
---|
| 352 | then |
---|
| 353 | echo "${command} : eee : ${tool} not found" |
---|
| 354 | exit 1 |
---|
| 355 | fi |
---|
| 356 | unset status |
---|
| 357 | ;; |
---|
| 358 | cdo) |
---|
| 359 | # test if cdo available |
---|
| 360 | tool=cdo |
---|
| 361 | type ${tool} 1> /dev/null 2>&1 |
---|
| 362 | status=${?} |
---|
| 363 | if [ ${status} -ne 0 ] |
---|
| 364 | then |
---|
| 365 | echo "${command} : eee : ${tool} not found" |
---|
| 366 | exit 1 |
---|
| 367 | fi |
---|
| 368 | unset status |
---|
| 369 | ;; |
---|
| 370 | *) |
---|
| 371 | echo "${command} : eee : diff_cmd ${diff_cmd} argument invalid" |
---|
| 372 | exit 1 |
---|
| 373 | esac |
---|
| 374 | |
---|
[50] | 375 | # check for ${PROJECT_LOG} definition |
---|
| 376 | if [ "${PROJECT_LOG}" = "" ] |
---|
[22] | 377 | then |
---|
[50] | 378 | echo "${command} : eee : \${PROJECT_LOG} not defined" |
---|
[22] | 379 | exit 1 |
---|
| 380 | fi |
---|
| 381 | # |
---|
[50] | 382 | # check for ${PROJECT_LOG} existence |
---|
| 383 | if [ ! -d ${PROJECT_LOG} ] |
---|
[22] | 384 | then |
---|
[50] | 385 | echo "${command} : eee : ${PROJECT_LOG} not found" |
---|
[22] | 386 | exit 1 |
---|
| 387 | fi |
---|
| 388 | # |
---|
[50] | 389 | # check for permission access on PROJECT_LOG |
---|
| 390 | if [ ! -x ${PROJECT_LOG} ] |
---|
[22] | 391 | then |
---|
[50] | 392 | echo "${command} : eee : ${PROJECT_LOG} not reachable" |
---|
[22] | 393 | exit 1 |
---|
| 394 | fi |
---|
| 395 | # |
---|
[50] | 396 | # check for write permission on PROJECT_LOG |
---|
| 397 | if [ ! -w ${PROJECT_LOG} ] |
---|
[22] | 398 | then |
---|
[50] | 399 | echo "${command} : eee : ${PROJECT_LOG} not writable" |
---|
[22] | 400 | exit 1 |
---|
| 401 | fi |
---|
| 402 | # |
---|
[50] | 403 | dirtemp=${PROJECT_LOG}/$(basename ${0} .sh).${log_date}.temp/ |
---|
[22] | 404 | mkdir -p ${dirtemp} |
---|
| 405 | # |
---|
[50] | 406 | log=${PROJECT_LOG}/$(basename ${0} .sh).log.${log_date} |
---|
[22] | 407 | echo "[Context]" 1>> ${log} |
---|
| 408 | echo "command=$(basename ${0})" 1>>${log} |
---|
| 409 | echo "hostname=${hostname}" 1>> ${log} |
---|
| 410 | echo "runtime=${log_date}" 1>> ${log} |
---|
| 411 | unset log_date |
---|
[33] | 412 | # |
---|
[22] | 413 | echo "" 1>> ${log} |
---|
[33] | 414 | echo "[Parameters]" 1>> ${log} |
---|
[52] | 415 | echo "yyyymmddb=${yyyymmddb}" 1>> ${log} |
---|
| 416 | echo "yyyymmdde=${yyyymmdde}" 1>> ${log} |
---|
| 417 | echo "minlat=${minlat}" 1>> ${log} |
---|
| 418 | echo "maxlat=${maxlat}" 1>> ${log} |
---|
| 419 | echo "minlon=${minlon}" 1>> ${log} |
---|
| 420 | echo "maxlon=${maxlon}" 1>> ${log} |
---|
[33] | 421 | echo "diff_cmd=${diff_cmd}" 1>> ${log} |
---|
| 422 | echo "" 1>> ${log} |
---|
[22] | 423 | # |
---|
[51] | 424 | yearmin=$(${date_cmd} -d "${yyyymmddb}" +%Y) |
---|
| 425 | yearmax=$(${date_cmd} -d "${yyyymmdde}" +%Y) |
---|
| 426 | monthmin=$(${date_cmd} -d "${yyyymmddb}" +%m) |
---|
| 427 | monthmax=$(${date_cmd} -d "${yyyymmdde}" +%m) |
---|
[23] | 428 | cmonthmin=$(printf "%2.2d" ${monthmin}) |
---|
| 429 | cmonthmax=$(printf "%2.2d" ${monthmax}) |
---|
[10] | 430 | dirin=/bdd/ERAI/NETCDF/GLOBAL_075/4xdaily/ |
---|
[22] | 431 | # check for dirin existence |
---|
| 432 | if [ ! -d ${dirin} ] |
---|
| 433 | then |
---|
| 434 | echo "${command} : eee : ${dirin} not found" |
---|
| 435 | exit 1 |
---|
| 436 | fi |
---|
| 437 | # |
---|
| 438 | # check for permission access on dirin |
---|
| 439 | if [ ! -x ${dirin} ] |
---|
| 440 | then |
---|
| 441 | echo "${command} : eee : ${dirin} not reachable" |
---|
| 442 | exit 1 |
---|
| 443 | fi |
---|
| 444 | # |
---|
[32] | 445 | # str = Surface thermal radiation |
---|
| 446 | for var in str ; do |
---|
[23] | 447 | yyyy=${yearmin} |
---|
| 448 | while [ ${yyyy} -le ${yearmax} ] |
---|
| 449 | do |
---|
| 450 | month=${monthmin} |
---|
| 451 | while [ ${month} -le ${monthmax} ] |
---|
| 452 | do |
---|
| 453 | cmonth=$(printf "%2.2d" ${month}) |
---|
| 454 | daymin=1 |
---|
| 455 | daymax=$(cal ${month} ${yyyy} | grep . | fmt -1 | tail -1) |
---|
| 456 | day=${daymin} |
---|
| 457 | while [ ${day} -le ${daymax} ] |
---|
| 458 | do |
---|
[52] | 459 | echo "iii : ${yyyy}${cmonth}${day}" |
---|
[23] | 460 | cday=$(printf "%2.2d" ${day}) |
---|
[33] | 461 | if [ -f ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}.fshei.GLOBAL_075.nc ] |
---|
[23] | 462 | then |
---|
[33] | 463 | if [ ${debug} -eq 1 ] |
---|
| 464 | then |
---|
| 465 | ncdump -v time ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}.fshei.GLOBAL_075.nc >> ${log} 2>&1 |
---|
| 466 | fi |
---|
| 467 | ncpdq -U ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}.fshei.GLOBAL_075.nc ${dirtemp}/${var}.${yyyy}${cmonth}${cday}.temp.GLOBAL_075.nc |
---|
| 468 | if [ ${debug} -eq 1 ] |
---|
| 469 | then |
---|
| 470 | ncdump -v time ${dirtemp}/${var}.${yyyy}${cmonth}${cday}.temp.GLOBAL_075.nc >> ${log} 2>&1 |
---|
| 471 | fi |
---|
[23] | 472 | else |
---|
| 473 | echo "${command} : iii : no files ${dirin}/FC_SF/${yyyy}/${cmonth}/${var}.${yyyy}${cmonth}${cday}*" >> ${log} |
---|
| 474 | fi |
---|
| 475 | day=$(( ${day} + 1 )) |
---|
| 476 | done |
---|
| 477 | exist_temp_files=$(find ${dirtemp} -name "${var}.${yyyy}${cmonth}*temp*") |
---|
| 478 | if [ "${exist_temp_files}" != "" ] |
---|
| 479 | then |
---|
[33] | 480 | # concatenation of daily files |
---|
| 481 | ncrcat -O ${dirtemp}/${var}.${yyyy}${cmonth}??.temp.GLOBAL_075.nc ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc |
---|
| 482 | if [ ${debug} -eq 1 ] |
---|
| 483 | then |
---|
| 484 | ncdump -v time ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc >> ${log} 2>&1 |
---|
| 485 | fi |
---|
| 486 | rm ${dirtemp}/${var}.${yyyy}${cmonth}??.temp.GLOBAL_075.nc 2> /dev/null |
---|
[23] | 487 | ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,0,,5 ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc ${dirtemp}/temp_time0.nc |
---|
[33] | 488 | if [ ${debug} -eq 1 ] |
---|
| 489 | then |
---|
| 490 | ncdump -v time ${dirtemp}/temp_time0.nc >> ${log} 2>&1 |
---|
| 491 | fi |
---|
[23] | 492 | ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,4,,5 ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc ${dirtemp}/temp_time4.nc |
---|
[33] | 493 | if [ ${debug} -eq 1 ] |
---|
| 494 | then |
---|
| 495 | ncdump -v time ${dirtemp}/temp_time4.nc >> ${log} 2>&1 |
---|
| 496 | fi |
---|
| 497 | case "${diff_cmd}" in |
---|
| 498 | ncflint) |
---|
| 499 | # différence entre les forcast a 36 et a 12h (pour avoir des flux par jour) et la constante suivant le -w permet de se ramener a des unites connues |
---|
| 500 | ncflint -w 1.1574074,-1.1574074 ${dirtemp}/temp_time0.nc ${dirtemp}/temp_time4.nc ${dirtemp}/temp_time.nc |
---|
| 501 | if [ ${debug} -eq 1 ] |
---|
| 502 | then |
---|
| 503 | ncdump -v time ${dirtemp}/temp_time.nc >> ${log} 2>&1 |
---|
| 504 | fi |
---|
| 505 | # La deuxieme permet uniquement de passer en seconde. 1.1574074*.00001=1/86400. (jour a seconde) |
---|
| 506 | ncflint -w 0.00001,0.0 ${dirtemp}/temp_time.nc ${dirtemp}/temp_time.nc ${dirtemp}/temp_int_${var}_${yyyy}${cmonth}.nc |
---|
| 507 | if [ ${debug} -eq 1 ] |
---|
| 508 | then |
---|
| 509 | ncdump -v time ${dirtemp}/temp_int_${var}_${yyyy}${cmonth}.nc >> ${log} 2>&1 |
---|
| 510 | fi |
---|
| 511 | ;; |
---|
| 512 | cdo) |
---|
| 513 | cdo sub ${dirtemp}/temp_time0.nc ${dirtemp}/temp_time4.nc ${dirtemp}/temp_time.nc >> ${log} 2>&1 |
---|
| 514 | if [ ${debug} -eq 1 ] |
---|
| 515 | then |
---|
| 516 | ncdump -v time ${dirtemp}/temp_time.nc >> ${log} 2>&1 |
---|
| 517 | fi |
---|
| 518 | cdo divc,86400. ${dirtemp}/temp_time.nc ${dirtemp}/temp_int_${var}_${yyyy}${cmonth}.nc >> ${log} 2>&1 |
---|
| 519 | if [ ${debug} -eq 1 ] |
---|
| 520 | then |
---|
| 521 | ncdump -v time ${dirtemp}/temp_int_${var}_${yyyy}${cmonth}.nc >> ${log} 2>&1 |
---|
| 522 | fi |
---|
| 523 | ;; |
---|
| 524 | esac |
---|
[23] | 525 | rm ${dirtemp}/temp_time* 2> /dev/null |
---|
| 526 | rm ${dirtemp}/${var}.${yyyy}${cmonth}.fshei.GLOBAL_075.nc 2> /dev/null |
---|
| 527 | else |
---|
| 528 | echo "${command} : iii : no files ${dirtemp}/${var}.${yyyy}${cmonth}*temp*" >> ${log} |
---|
| 529 | fi |
---|
| 530 | unset exist_temp_files |
---|
| 531 | month=$(( ${month} + 1 )) |
---|
| 532 | done |
---|
[33] | 533 | # concatenation of monthly files |
---|
| 534 | if [ ${debug} -eq 1 ] |
---|
| 535 | then |
---|
| 536 | ncdump -v time ${dirtemp}/temp_int_${var}_${yyyy}??.nc 1>> ${log} 2>&1 |
---|
| 537 | fi |
---|
[50] | 538 | ncrcat -O ${dirtemp}/temp_int_${var}_${yyyy}??.nc ${PROJECT_ID}/erai_${reg}_1d_${yyyy}${cmonthmin}01_${yyyy}${cmonthmax}31_${var}_gridOrig.nc 1>> ${log} 2>&1 |
---|
[23] | 539 | rm ${dirtemp}/temp_int_${var}_${yyyy}* 2> /dev/null |
---|
| 540 | yyyy=$(( ${yyyy} + 1 )) |
---|
| 541 | done |
---|
[10] | 542 | done |
---|
[23] | 543 | # |
---|
[22] | 544 | # msl = Mean sea level pressure |
---|
| 545 | # sstk = Sea surface temperature |
---|
| 546 | # t2 = Temperature at 2 meters |
---|
| 547 | # d2 = Dew point at 2 meters |
---|
| 548 | # u10 = 10m U wind component |
---|
| 549 | # v10 = 10m V wind component |
---|
[32] | 550 | for var in msl sstk t2 d2 u10 v10 ; do |
---|
[23] | 551 | yyyy=${yearmin} |
---|
| 552 | while [ ${yyyy} -le ${yearmax} ] |
---|
| 553 | do |
---|
| 554 | month=${monthmin} |
---|
| 555 | while [ ${month} -le ${monthmax} ] |
---|
| 556 | do |
---|
| 557 | cmonth=$(printf "%2.2d" ${month}) |
---|
[33] | 558 | if [ -f ${dirin}/AN_SF/${yyyy}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ] |
---|
[32] | 559 | then |
---|
| 560 | ncpdq -U ${dirin}/AN_SF/${yyyy}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc |
---|
| 561 | ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,0,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time1.nc |
---|
| 562 | ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,1,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time2.nc |
---|
| 563 | ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,2,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time3.nc |
---|
| 564 | ncks -d lat,${minlat},${maxlat} -d lon,${minlon},${maxlon} -d time,3,,4 ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc ${dirtemp}/temp_time4.nc |
---|
| 565 | ncea ${dirtemp}/temp_time* ${dirtemp}/temp_int_${yyyy}${cmonth}.nc |
---|
| 566 | rm ${dirtemp}/temp_time* 2> /dev/null |
---|
| 567 | rm ${dirtemp}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc 2> /dev/null |
---|
| 568 | month=$(( ${month} + 1 )) |
---|
| 569 | else |
---|
| 570 | echo "${command} : iii : no file ${dirin}/AN_SF/${yyyy}/${var}.${yyyy}${cmonth}.ashei.GLOBAL_075.nc " >> ${log} |
---|
| 571 | fi |
---|
[23] | 572 | done |
---|
[33] | 573 | # concatenation of monthly files |
---|
| 574 | if [ ${debug} -eq 1 ] |
---|
| 575 | then |
---|
| 576 | ncdump -v time ${dirtemp}/temp_int_${yyyy}??.nc >> ${log} 2>&1 |
---|
| 577 | fi |
---|
[50] | 578 | ncrcat -O ${dirtemp}/temp_int_${yyyy}??.nc ${PROJECT_ID}/erai_${reg}_1d_${yyyy}${cmonthmin}01_${yyyy}${cmonthmax}31_${var}_gridOrig.nc >> ${log} 2>&1 |
---|
[23] | 579 | rm ${dirtemp}/temp_int_${yyyy}* 2> /dev/null |
---|
| 580 | yyyy=$(( ${yyyy} + 1 )) |
---|
| 581 | done |
---|
[10] | 582 | done |
---|
[33] | 583 | # debug to check if clean is done |
---|
| 584 | if [ ${debug} -eq 1 ] |
---|
| 585 | then |
---|
| 586 | ls ${dirtemp}/ >> ${log} 2>&1 |
---|
| 587 | fi |
---|
[22] | 588 | # end |
---|
| 589 | exit 0 |
---|