source: flexpart.git/preprocessing/flex_extract_ecgate_V6.0/flex_ecmwf_body @ 027e844

10.4.1_peseiFPv9.3.1FPv9.3.1b_testingFPv9.3.2GFS_025bugfixes+enhancementsdevfp9.3.1-20161214-nc4grib2nc4_repairrelease-10release-10.4.1scaling-bugunivie
Last change on this file since 027e844 was ba05105, checked in by flexpart <>, 9 years ago

add preprocessing routines flex_extract_ecgate_V6.0

  • Property mode set to 100644
File size: 17.3 KB
Line 
1# no changes below
2
3NRW=0
4
5#ksh scripts for date manipulation
6juldate2()
7   {
8    let jc=$1
9    if (( ${#jc} < 8 ))
10    then
11    print "illegal date!"
12    exit 1
13    fi
14    let y=`echo $jc | cut -c1-4`
15    let m1=`echo $jc | cut -c5`
16    let m2=`echo $jc | cut -c6`
17    m=$m1$m2
18    let d1=`echo $jc | cut -c7`
19    let d2=`echo $jc | cut -c8`
20    d=$d1$d2
21    let jd=367*y-7*(y+(m+9)/12)/4+275*m/9+d+1721014
22    let jd=jd+15-3*((y+(m-9)/7)/100+1)/4
23    print $jd
24    }
25
26civildate2()
27   {
28    let jd=$1
29    if (( jd < 1721060 ))
30    then
31       print "Julian date not in AD."
32       exit 1
33    fi
34    let k=jd+68569
35    let n=4*k/146097
36    let k=k-\(146097*n+3\)/4
37    let y=4000*(k+1)/1461001
38    let k=k-1461*y/4+31
39    let m=80*k/2447
40    let d=k-\(2447*m\)/80
41    let k=m/11
42    let m=m+2-12*k
43    let y=100*(n-49)+y+k
44    [ $m -le 9 ] && m=0$m
45    [ $d -le 9 ] && d=0$d
46    print $y$m$d
47    }
48
49date2m1()
50    {
51    let ymd=$1
52    let j1=`juldate2 $ymd`
53    let j0=j1-1
54    civildate2 $j0
55    }
56
57date2p1()
58    {
59    let ymd=$1
60    let j1=`juldate2 $ymd`
61    let j0=j1+1
62    civildate2 $j0
63    }
64
65
66marsinst()
67{
68MTYPE="${1}"
69MDAY="${2}"
70MTIME="${3}"
71MSTEP="${4}"
72MPAR="${5}"
73MFN=$6
74MLTY=$7
75MGRID="${8}"
76MLEV="${9}"
77
78RED=0
79#if [[ ${MTYPE} != 'AN' ]] ; then
80  MPAR2=`echo ${MPAR} | sed s,160/,,`
81  MPAR2=`echo ${MPAR2} | sed s,27/,,`
82  MPAR2=`echo ${MPAR2} | sed s,28/,,`
83  MPAR2=`echo ${MPAR2} | sed s,173/,,`
84  if [[ ${MPAR2} != ${MPAR} ]] ; then
85    MPAR=${MPAR2}
86    RED=1
87  fi
88#fi
89
90MAREA=${M_AREA}
91if [[ ${10} == 'GAUSSIAN=REDUCED,' ]] ; then
92  MAREA=G
93fi
94
95if [[ -f ${MFN} ]] ; then
96  rm ${MFN}
97fi
98
99cat <<EOF >> marsjob
100RETRIEVE,
101TYPE=${MTYPE},
102CLASS=${M_CLASS},NUMBER=${M_NUMBER},
103EXPVER=${M_EXPVER},STREAM=${M_STREAM},
104PARAM=${MPAR},
105RESOL=${M_RESOL},
106AREA=${MAREA},
107GRID=${MGRID},
108LEVTYPE=${MLTY},
109LEVELIST=${MLEV},
110ACCURACY=${M_ACCURACY},
111DATE=${MDAY},
112TIME=${MTIME},
113STEP=${MSTEP},${10}
114TARGET="${MFN}"
115EOF
116
117if [[ ! -f 'OROLSM' && $RED -eq 1 ]] ; then
118
119cat <<EOF >> marsjob
120RETRIEVE,TYPE=AN,TIME=0,STEP=0,CLASS=OD,
121  PARAM=160/27/28/173,
122  TARGET="OROLSM"
123EOF
124fi
125
126}
127
128marsflux()
129{
130MTYPE="${1}"
131MSTEP="${2}"
132
133cat <<EOF >>mars_flux
134RETRIEVE,
135TYPE=${MTYPE},
136CLASS=${M_CLASS},NUMBER=${M_NUMBER},
137EXPVER=${M_EXPVER},STREAM=${M_STREAM},
138PARAM=LSP/CP/SSHF/EWSS/NSSS/SSR,
139AREA=${M_AREA},
140GRID=${D_GRID},
141LEVTYPE=SFC,
142LEVELIST=OFF,
143ACCURACY=${M_ACCURACY}, REPRES=GG,
144DATE=${DAY1M1}/TO/${DAY2P1},
145TIME=00/12,
146AC=N,
147STEP=${MSTEP},
148TARGET="surf_${MSTEP}_ub"
149EOF
150}
151
152
153myerror()
154  {
155   
156    echo $1
157    echo $2
158    echo $3
159    echo ABORT!
160
161    for MUSER in $MAILFAIL
162    do
163      mailx -s ERROR:${JOBNAME} ${MUSER} <${LOG_FILE}
164    done
165  }
166
167#
168# MAIN SCRIPT CONTINUES HERE
169#
170#read CONTROL file, process specifications
171while read NAME PARA
172do
173
174if [[ $NAME == 'M_TYPE' || $NAME == 'M_TIME' || $NAME == 'M_STEP' ]] ; then
175  eval "set -A $NAME $PARA"
176else
177  eval "export $NAME='$PARA'"
178fi
179echo `echo $NAME`=$PARA
180
181done <${CONTROLFILE}
182
183
184if [ -z "$DAY1" -o -z "$DAY2" ]; then
185    myerror 'DAY specification missing !'
186    exit 1
187fi
188
189#defaults
190[ -z "$M_EXPVER" ] && M_EXPVER=1
191[ -z "$M_CLASS" ] && M_CLASS=OD
192[ -z "$M_STREAM" ] && M_STREAM=OPER
193[ -z "$M_NUMBER" ] && M_NUMBER=OFF
194[ -z "$M_TYPE" ] && set -A M_TYPE AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC AN FC FC FC FC FC
195[ -z "$M_TIME" ] && set -A M_TIME 00 00 00 00 00 00 06 00 00 00 00 00 12 12 12 12 12 12 18 12 12 12 12 12
196[ -z "$M_STEP" ] && set -A M_STEP 00 01 02 03 04 05 00 07 08 09 10 11 00 01 02 03 04 05 00 07 08 09 10 11
197[ -z "$DTIME" ] && DTIME=6
198[ -z "$M_GRID" ] && M_GRID=1000
199[ -z "$M_LOWER" ] && M_LOWER=-90000
200[ -z "$M_LEFT" ] && M_LEFT=-179000
201[ -z "$M_UPPER" ] && M_UPPER=90000
202[ -z "$M_RIGHT" ] && M_RIGHT=180000
203[ -z "$M_LEVEL" ] && M_LEVEL=91
204[ -z "$M_LEVELIST" ] && M_LEVELIST=1/TO/$M_LEVEL
205[ -z "$M_ADDPAR" ] && M_ADDPAR=''
206[ -z "$M_RESOL" ] &&  M_RESOL=799
207[ -z "$M_GAUSS" ] &&  M_GAUSS=0
208[ -z "$M_SMOOTH" ] &&  M_SMOOTH=0
209[ -z "$M_OMEGA" ] &&  M_OMEGA=0
210[ -z "$M_OMEGADIFF" ] &&  M_OMEGADIFF=0
211[ -z "$M_ETA" ] &&  M_ETA=0
212[ -z "$M_ETADIFF" ] &&  M_ETADIFF=0
213[ -z "$M_ETAPAR" ] &&  M_ETAPAR=77
214[ -z "$M_DPDETA" ] &&  M_DPDETA=1
215[ -z "$M_ACCURACY" ] &&  M_ACCURACY=24
216[ -z "$EXEDIR" ] && EXEDIR=.
217[ -z "$SOURCECODE" ] && SOURCECODE=ecgate:flex_extract_ecgate
218[ -z "$GATEWAY" ] && GATEWAY=''
219[ -z "$DESTINATION" ] && DESTINATION=''
220[ -z "$PREFIX" ] && PREFIX=EN
221[ -z "$COMPRESSION" ] && COMPRESSION=grid_simple
222[ -z "$ECTRANS" ] && ECTRANS=0
223[ -z "$ECSTORAGE" ] && ECSTORAGE=1
224[ -z "$ECFSDIR" ] && ECFSDIR=ectmp:
225[ -z "$MAILOPS" ] && MAILOPS=${USER}
226[ -z "$MAILFAIL" ] && MAILFAIL=${USER}
227
228
229#additional dates for flux retrievals (polynomial interpolation)
230DAY1M1=`date2m1 ${DAY1}`
231DAY2P1=`date2p1 ${DAY2}`
232
233#julian dates for time loops
234JULDAY1=`juldate2 ${DAY1}`
235JULDAY2=`juldate2 ${DAY2}`
236
237echo JULDATES $JULDAY1 $JULDAY2
238
239#check consistency
240if [ ${DAY1} -gt ${DAY2} ]; then
241    `myerror "ERROR: DAY1 > DAY2: ${DAY1}, ${DAY2}"`
242    exit 1
243fi
244
245
246# determine number of gridpoints and whether grid is cyclic
247ZYK=`expr \( $M_RIGHT + 360000 \) % 360000 - \( $M_LEFT + 360000 \) % 360000 + $M_GRID`
248
249if [ $M_RIGHT -le $M_LEFT ] ; then
250  if [ $M_RIGHT -le 0 ] ; then
251    M_RIGHT=$(($M_RIGHT+360000))
252  else
253    M_LEFT=$(($M_LEFT-360000))
254  fi
255fi
256
257if [[ $ZYK -ne 0 ]] ; then
258  MAXB=$((($M_UPPER-($M_LOWER))/$M_GRID+1))
259  MAXL=$((($M_RIGHT-($M_LEFT))/$M_GRID+1))
260
261  if [[ $((($M_RIGHT-($M_LEFT))%$M_GRID)) -ne 0 || $((($M_UPPER-($M_LOWER))%$M_GRID)) -ne 0 ]] ; then
262    myerror "ERROR: LAT/LON RANGE MUST BE INTEGER MULTIPLES OF GRID SIZE"     "URLO: $M_UPPER  $M_RIGHT $M_LOWER  $M_LEFT GRID: $M_GRID"     "GRID ASSUMED NON-CYCLIC"
263    exit 1
264  fi
265else
266  MAXL=$((($M_RIGHT-($M_LEFT))/$M_GRID+1))
267  MAXB=$((($M_UPPER-($M_LOWER))/$M_GRID+1))
268  if [[ $((($M_RIGHT-($M_LEFT))%$M_GRID)) -ne 0 || $((($M_UPPER-($M_LOWER))%$M_GRID)) -ne 0 ]] ; then
269    myerror "ERROR: LAT/LON RANGE MUST BE INTEGER MULTIPLES OF GRID SIZE"           "URLO: $M_UPPER  $M_RIGHT $M_LOWER  $M_LEFT GRID: $M_GRID"           "GRID ASSUMED CYCLIC"
270    exit 1
271  fi
272fi
273
274if [ $((180000/$M_GRID-$M_RESOL)) -lt 0 ] ; then
275
276   if [ ${M_SMOOTH} -eq 0 ] ; then
277    myerror "ERROR: OUTPUT GRID SPACING OF $((${M_GRID}/1000)).$((${M_GRID}%1000)) DEGREE IS TOO COARSE FOR GIVEN SPECTRAL RESOLUTION ${M_RESOL} " "USE M_SMOOTH FOR SMOOTHING OR FINER OUTPUT GRID"
278#    exit 1
279   else
280    if [ $((180000/$M_GRID-$M_SMOOTH)) -lt 0 ] ; then
281      myerror "ERROR: OUTPUT GRID SPACING OF $((${M_GRID}/1000)).$((${M_GRID}%1000)) DEGREE IS TOO COARSE FOR GIVEN SMOOTHED SPECTRAL RESOLUTION ${M_SMOOTH} "
282    fi
283   fi
284
285fi
286
287
288# convert lat/lon to MARS format (degrees)
289if [[ $M_LEFT -lt 0 ]] ; then
290  LLLO=$(($M_LEFT / 1000)).$((($M_LEFT)*(-1) % 1000))
291else
292  LLLO=$(($M_LEFT / 1000)).$(($M_LEFT % 1000))
293fi
294if [[ $M_LOWER -lt 0 ]] ; then
295  LLLA=$(($M_LOWER / 1000)).$(($M_LOWER*(-1) % 1000))
296else
297  LLLA=$(($M_LOWER / 1000)).$((($M_LOWER) % 1000))
298fi
299if [[ $M_RIGHT -lt 0 ]] ; then
300  URLO=$(($M_RIGHT / 1000)).$((($M_RIGHT)*(-1) % 1000))
301else
302  URLO=$(($M_RIGHT / 1000)).$(($M_RIGHT % 1000))
303fi
304if [[ $M_UPPER -lt 0 ]] ; then
305  URLA=$(($M_UPPER / 1000)).$((($M_UPPER)*(-1) % 1000))
306else
307  URLA=$(($M_UPPER / 1000)).$(($M_UPPER % 1000))
308fi
309
310M_AREA=${URLA}/${LLLO}/${LLLA}/${URLO}
311
312if [ $M_GAUSS -eq 1 ] ; then
313# Gaussian grid detected
314  D_GRID=$(($M_GRID / 1000)).$(($M_GRID % 1000))
315  G_GRID=OFF
316  QG_GRID=OFF
317  if [ $M_RESOL -le 799 ] ; then
318    QG_GRID=$((($M_RESOL+1)/2))
319  fi
320  D_GRID=${D_GRID}/${D_GRID}
321 
322else
323  D_GRID=$(($M_GRID / 1000)).$(($M_GRID % 1000))
324  G_GRID=$(($M_GRID / 1000)).$(($M_GRID % 1000))
325  G_GRID=${G_GRID}/${G_GRID}
326  D_GRID=${D_GRID}/${D_GRID}
327fi
328
329G_LEVELIST=1/to/${M_LEVEL}
330
331
332#namelist
333cat <<EOF >fort.4
334&NAMGEN
335   MAXL=${MAXL}, MAXB=${MAXB},
336   MLEVEL=${M_LEVEL}, MLEVELIST="${M_LEVELIST}",
337   MNAUF=${M_RESOL},METAPAR=${M_ETAPAR},
338   RLO0=${LLLO}, RLO1=${URLO}, RLA0=${LLLA}, RLA1=${URLA},
339   MOMEGA=${M_OMEGA},MOMEGADIFF=${M_OMEGADIFF},MGAUSS=${M_GAUSS},
340   MSMOOTH=${M_SMOOTH},META=${M_ETA},METADIFF=${M_ETADIFF},
341   MDPDETA=${M_DPDETA}
342/
343&NAMFX2
344   NX=${MAXL}, NY=${MAXB},
345   MAXTIME=400,JPOLY=4,
346   JHRF=${DTIME},
347   RLO0=${LLLO}, RLA0=${LLLA}, DX=${D_GRID}, DY=${D_GRID}
348/
349EOF
350
351
352if [[ $OS_VERSION == aix ]] ; then
353  scp ecgb:${SOURCECODE}/source.tar .
354  tar -xvf source.tar
355  make -f Makefile.IBM FLXACC2 CONVERT2 CHECK
356else
357  cp ${SOURCECODE}/source.tar .
358  tar -xvf source.tar
359  make -f Makefile.ecgb FLXACC2 CONVERT2 CHECK
360fi
361
362if [ $? -ne 0 ]; then
363
364   ls
365   myerror 'ERROR: FLXACC2 and CONVERT2 could not be compiled:' 'ABORT!'
366   exit 1
367else
368  echo 'compile worked'
369fi
370
371
372#
373#MARS requests (field)
374#
375imax=6
376set -A PARLIST  U/V  T    Q  LNSP SD/MSL/TCC/10U/10V/2T/2D 129/172/160${M_ADDPAR}
377set -A PARNAME  131/132 130 133 152 SURF OROLSM
378set -A REPR     SH    SH   GG   SH   GG   GG
379set -A UNIT     10    11   17   12   14   20
380set -A LTY      ML    ML   ML   ML   SFC  SFC
381set -A GRID  ${G_GRID} ${D_GRID} ${D_GRID} OFF ${D_GRID} ${D_GRID}
382set -A LEVELIST ${M_LEVELIST} ${M_LEVELIST} ${M_LEVELIST} 1 1 1
383
384set -A FIELD    00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 00
385
386
387if [[ $M_OMEGA -eq 1 || $M_OMEGADIFF -eq 1 ]] ; then
388  M_OMEGA=1
389  PARLIST[imax]=W
390  PARNAME[imax]=135
391  REPR[imax]=SH
392  UNIT[imax]=19
393  LTY[imax]=ML
394  GRID[imax]=${D_GRID}
395  LEVELIST[imax]=${M_LEVELIST}
396  imax=$(($imax+1))
397fi
398if [[ $M_ETA -eq 1 || $M_ETADIFF -eq 1 ]] ; then
399  M_ETA=1
400  PARLIST[imax]=77
401  PARNAME[imax]=77
402  REPR[imax]=SH
403  UNIT[imax]=21
404  LTY[imax]=ML
405  GRID[imax]=${D_GRID}
406  LEVELIST[imax]=${M_LEVELIST}
407  imax=$(($imax+1))
408fi
409
410if [[ $M_GAUSS -eq 2 ]] ; then
411  PARLIST[imax]=VO
412  PARNAME[imax]=138
413  REPR[imax]=SH
414  UNIT[imax]=30
415  LTY[imax]=ML
416  GRID[imax]=${G_GRID}
417  LEVELIST[imax]=${G_LEVELIST}
418  imax=$(($imax+1))
419fi
420if [[ $M_ETA -eq 0 || $M_GAUSS -eq 1 || $M_ETADIFF -eq 1 ]] ; then
421  PARLIST[imax]=D
422  PARNAME[imax]=155
423  REPR[imax]=SH
424  UNIT[imax]=13
425  LTY[imax]=ML
426  GRID[imax]=${G_GRID}
427  LEVELIST[imax]=${G_LEVELIST}
428  LEVELIST[1]=${G_LEVELIST} # U/V needed on all levels for calculating ETA
429  imax=$(($imax+1))
430fi
431
432jmax=${#M_TYPE[*]}
433
434# M_TIME needs leading zeros while M_STEP must have leading zeros
435# to be consistent with MARS file naming convention
436# The following loop ensures this
437j=0
438while [[ $j -lt $jmax ]] ; do
439  if [[ ${M_TIME[$j]} -lt 10 ]] ; then
440    M_TIME[$j]=0$((${M_TIME[$j]}))
441  fi
442  if [[ ${M_STEP[$j]} -lt 10 ]] ; then
443    M_STEP[$j]=$((${M_STEP[$j]}))
444  fi
445
446  j=$(($j+1))
447done
448
449echo ${M_TIME[*]}
450echo ${M_STEP[*]}
451
452
453rm mars_flux 2>/dev/null
454j=$DTIME
455while [[ $j -lt 13 ]] ; do
456  marsflux ${M_TYPE[2]} ${FIELD[$j]}
457  j=$(($j+$DTIME))
458done
459mars mars_flux | grep -i -v 'MARS - INFO'
460[ $? -ne 0 ] && myerror "Job stopped because of failing MARS request"
461
462
463#
464# FLXACC job
465#
466
467
468${EXEDIR}/FLXACC2
469if [ -f OROLSM ] ; then
470  rm OROLSM
471fi
472
473#
474# CONVERT job
475#
476
477#loop over DATE and TIME for CONVERT/CHECK/ECtrans job
478
479IJULDAY=${JULDAY1}
480while [ $IJULDAY -le $JULDAY2 ];
481do
482
483MDATE=`civildate2 ${IJULDAY}`
484MDATEX=`echo ${MDATE} | cut -c3-8`
485
486
487i=0
488rm marsjob 2>/dev/null
489
490#humidity on reduced Gaussian grid for initialization
491#of spectral transformations
492if [ ${M_GAUSS} -eq 1 ] ; then
493  NGRID=$(( ( ${M_RESOL} + 1 ) / 2 ))
494
495  marsinst ${M_TYPE[0]} ${DAY1} 00 00 Q fort.18 ML ${QG_GRID} 1 'GAUSSIAN=REDUCED,'
496
497set -e
498mars marsjob | grep -i -v 'MARS - INFO'
499[ $? -ne 0 ] && myerror "Job stopped because of failing MARS request"
500rm marsjob
501
502fi
503
504set -e
505
506set -A TYPEKEY ${M_TYPE[0]}
507j=$DTIME
508kmax=0
509while [[ $j -lt $jmax ]] ; do
510  if [[ ${M_TYPE[j]} != ${TYPEKEY[0]} ]] ; then
511    if [[ $kmax == 1 ]] ; then
512      if [[ ${M_TYPE[j]} != ${TYPEKEY[1]} ]] ; then
513        set -A TYPEKEY ${TYPEKEY[0]} ${TYPEKEY[1]} ${M_TYPE[j]}
514        kmax=2
515      fi
516    else
517      if [[ $kmax == 0 ]] ; then   
518      set -A TYPEKEY ${TYPEKEY[0]} ${M_TYPE[j]}
519      kmax=1
520      else
521        if [[ $kmax == 2 && ${M_TYPE[j]} != ${TYPEKEY[1]}  ]] ; then   
522          if [[ $kmax == 2 && ${M_TYPE[j]} != ${TYPEKEY[2]}  ]] ; then   
523
524            echo ${TYPEKEY[0]} ${TYPEKEY[1]}  ${TYPEKEY[2]} ${M_TYPE[j]}
525            myerror 'More than three different MARS TYPES not supported'
526       
527            exit 1
528          fi
529        fi
530      fi
531    fi
532  fi
533  j=$(($j+$DTIME))
534done
535 
536set -A GRIDKEY $D_GRID
537mmax=1
538i=0
539while [[ $i -lt $imax ]] ; do
540  if [[ ${GRID[$i]} == 'OFF' && ${PARLIST[$i]} != LNSP ]] ; then
541    set -A GRIDKEY $D_GRID OFF
542    mmax=2
543  fi
544  i=$(($i+1))
545done
546
547k=0
548kmax=$(($kmax+1))
549while [[ $k -lt $kmax ]] ; do
550MMTIME=''
551MMSTEP=''
552TSUFF=''
553SSUFF=''
554j=0
555while [[ $j -lt $jmax ]] ; do
556  if [[ ${M_TYPE[$j]} == ${TYPEKEY[$k]} ]] ; then
557    if [[ `echo $MMTIME | grep ${M_TIME[$j]}` == '' ]] ; then
558      MMTIME=${MMTIME}$TSUFF${M_TIME[$j]}
559      TSUFF='/'
560    fi
561    if [[ `echo $MMSTEP | grep ${M_STEP[$j]}` == '' ]] ; then
562      MMSTEP=${MMSTEP}$SSUFF${M_STEP[$j]}
563      SSUFF='/'
564    fi
565  fi
566j=$(($j+$DTIME))
567done
568
569m=0
570while [[ $m -lt $mmax ]] ; do
571MMPAR=''
572PSUFF=''
573i=0
574while [[ $i -lt $imax ]] ; do
575  if [[ ${LTY[$i]} == ML && ${GRID[$i]} == ${GRIDKEY[m]} && ${PARLIST[$i]} != LNSP ]] ; then
576    if [[ `echo $MMPAR | grep ${PARLIST[$i]}` == '' ]] ; then
577      MMPAR=${MMPAR}$PSUFF${PARLIST[$i]}
578      PSUFF='/'
579    fi
580  fi
581i=$(($i+1))
582done
583
584  marsinst ${TYPEKEY[$k]} ${MDATE} ${MMTIME} ${MMSTEP} $MMPAR "[param].[date].[time].[step]" ML ${GRIDKEY[$m]} ${LEVELIST[$m]}
585  mars marsjob | grep -i -v 'MARS - INFO'
586  [ $? -ne 0 ] && myerror "Job stopped because of failing MARS request"
587  rm marsjob
588
589m=$(($m+1))
590done
591
592# LNSP treated separately since it exists only on 1 level
593 
594  marsinst ${TYPEKEY[$k]} ${MDATE} ${MMTIME} ${MMSTEP} LNSP "[param].[date].[time].[step]" ML OFF 1
595  mars marsjob | grep -i -v 'MARS - INFO'
596  [ $? -ne 0 ] && myerror "Job stopped because of failing MARS request"
597  rm marsjob
598
599# For some data classes, MARS adds GRIB table number to parameter number,
600# e.g. for Temperature it is 130.128 instead of just 130
601#
602  set +e
603  TNR=`ls 131*${MDATE}.${M_TIME[00]}00.${M_STEP[00]} | awk -F . '{print $2}' - | grep -v ${MDATE}`.
604  set -e
605  if [[ $TNR != '.' ]] ; then
606    TNR=.$TNR
607  fi
608
609# SURF treated separately since it exists only on 1 level
610
611  marsinst ${TYPEKEY[$k]} ${MDATE} ${MMTIME} ${MMSTEP} ${PARLIST[4]} "SURF${TNR}[date].[time].[step]" SFC $D_GRID OFF
612  mars marsjob | grep -i -v 'MARS - INFO'
613  [ $? -ne 0 ] && myerror "Job stopped because of failing MARS request"
614  rm marsjob
615 
616# OROLSM treated separately since it exists only on 1 level
617 
618  marsinst ${TYPEKEY[$k]} ${MDATE} ${MMTIME} ${MMSTEP} ${PARLIST[5]} "OROLSM${TNR}[date].[time].[step]" SFC $D_GRID OFF
619  mars marsjob | grep -i -v 'MARS - INFO'
620  [ $? -ne 0 ] && myerror "Job stopped because of failing MARS request"
621  rm marsjob
622
623k=$(($k+1))
624done
625
626
627
628j=0
629while [[ $j -lt $jmax ]] ; do
630
631
632TIME=${FIELD[j]}
633XTIME=${TIME}00
634
635set +e
636i=0
637while [[ $i -lt $imax ]] ; do
638  \rm fort.${UNIT[$i]} 2>/dev/null
639  if [[ ${PARLIST[$i]} == U/V ]] ; then
640    cat 131${TNR}${MDATE}.${M_TIME[$j]}00.${M_STEP[$j]} 132${TNR}${MDATE}.${M_TIME[$j]}00.${M_STEP[$j]} > fort.${UNIT[$i]}
641    rm  131${TNR}${MDATE}.${M_TIME[$j]}00.${M_STEP[$j]} 132${TNR}${MDATE}.${M_TIME[$j]}00.${M_STEP[$j]}
642  else
643    mv  ${PARNAME[$i]}${TNR}${MDATE}.${M_TIME[$j]}00.${M_STEP[$j]}  fort.${UNIT[$i]}
644  fi
645  i=$(($i+1))
646done
647
648# flux data need special GRIB conversion
649#if [ ${M_FORMAT} == GRIB2 ] ; then
650#  grib_set -w shortName!=lsp,shortName!=cp,shortName!=ewss,shortName!=nsss  -s edition=2,productDefinitionTemplateNumber=8 flux${MDATE}${TIME} flux${MDATE}${TIME}.grib2
651
652#else
653# mv flux${MDATE}${TIME} flux${MDATE}${TIME}.grib2
654#fi
655
656${EXEDIR}/CONVERT2
657
658INFILE=${PREFIX}${MDATEX}${TIME}
659
660if [ -s fort.15 ]; then
661    cp fort.15                   ${INFILE}
662    cat fort.14              >>  ${INFILE}
663    cat flux${MDATE}${TIME}  >>  ${INFILE}
664    cat OROLSM   >>  ${INFILE}
665    cat fort.20  >>  ${INFILE}
666#
667#  Convert also surface fields to GRIB2 if needed
668#
669#  Note: GRIB2 surface fields are incompatible with FLEXPART versions < 9.2
670#
671#  To enable additional compression
672#  set packingType="grid_jpeg";
673#  this is rather time consuming.
674
675if [ ${M_FORMAT} == GRIB2 ] ; then
676 grib_set -s edition=2,productDefinitionTemplateNumber=8 $INFILE ${INFILE}_2
677 mv ${INFILE}_2 ${INFILE}
678 
679  if [ ${COMPRESSION} != grid_simple ] ; then
680
681cat >rule.filter<<EOF
682set packingType="${COMPRESSION}";
683write "[file]_2";
684EOF
685    grib_filter rule.filter ${INFILE}
686    mv ${INFILE}_2 ${INFILE}
687  fi
688fi
689ls -l ${INFILE}
690
691
692else
693    myerror "ERROR: ENfile ${INFILE} missing!" "ABORT!"
694    exit 1
695fi
696
697#check ENxxx file & ECtrans to local gateway
698if [ -s fort.25 ]; then
699    mv fort.25 OMEGA${MDATEX}${TIME}
700    ln -s  OMEGA${MDATEX}${TIME} fort.25
701fi
702
703
704\rm fort.15 2>/dev/null
705ln -s ${INFILE} fort.15
706
707[ -s CHECK.SUCCESS ] && rm CHECK.SUCCESS
708
709${EXEDIR}/CHECK
710
711#check fields
712if [ -s CHECK.SUCCESS ]; then
713    SUCCESS=1
714else
715    myerror 'ERROR: check on ENfile failed:' ${INFILE} "ABORT!"
716    exit 1
717fi
718
719
720#ECtrans
721if [ $SUCCESS -eq 1 -a $ECTRANS -eq 1 ] ; then
722  ectrans -overwrite -gateway ${GATEWAY} -remote ${DESTINATION} -source $INFILE
723fi
724
725if [[ $M_OMEGA -eq 1 && $SUCCESS -eq 1 && $ECTRANS -eq 1 ]] ; then
726   ectrans -overwrite -gateway ${GATEWAY} -remote ${DESTINATION} -source OMEGA${MDATEX}${TIME}
727fi
728
729#ECFS
730if [ $SUCCESS -eq 1 -a $ECSTORAGE -eq 1 ] ; then
731 ecp -o $INFILE $ECFSDIR
732fi
733
734if [[ $SUCCESS -eq 1 && $ECSTORAGE -eq 1 &&  $M_OMEGA -eq 1 ]] ; then
735  ecp -o OMEGA${MDATEX}${TIME} $ECFSDIR
736fi
737
738rm ${INFILE}_2 ${INFILE} fort.15  flux${MDATE}${TIME}* OMEGA${MDATEX}${TIME} fort.25
739
740j=$(($j+$DTIME))
741
742#done TIME
743done
744
745(( IJULDAY = IJULDAY + 1 ))
746
747#done JULDAY
748done
749
750#any warnings ?
751[ $NRW -gt 0 ] && echo There were $NRW warnings !
752
753#mail logfile (list MAILOPS)
754for MUSER in $MAILOPS
755do
756
757mailx -s ${JOBNAME} ${MUSER} <${LOG_FILE}
758done
759
760#
761# cleanup
762#
763cd ${SCRATCH}
764echo $SCRATCHDIR not removed!
765#\rm -fR $SCRATCHDIR
766
767exit 0
768
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG