[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

20020227: GEMPAK MOS decoders 2nd try



Thanks Larry.

The 6Z and 18Z dcmosa decoding changes are made in 5.6.F.
I will look at your other points for inclusion in our 5.6.F
release and forward on to NCEP.

Steve Chiswell
Unidata User Support



>From: "Larry D. Oolman" <address@hidden>
>Organization: University of Wyoming
>Keywords: 200202271840.g1RIesx15140

>I have been looking at the text portion of the surface
>files producted by the dcmos decoders and have noted
>several problems and personal preference changes.
>
>Larry Oolman
>Department of Atmospheric Science
>University of Wyoming
>address@hidden
>http://www-das.uwyo.edu
>
>1. g77 (at least under Linux) converts LF to spaces 
>   with reads from strings.  This produces one long
>   string with no line feeds.  I use equivalences instead
>   of reads to fix the problem.
>
>*** gempak/source/gemlib/st/ststoi.f.dist       Wed Jul 12 12:34:26 2000
>--- gempak/source/gemlib/st/ststoi.f    Wed Feb 27 10:21:25 2002
>***************
>*** 28,33 ****
>--- 28,35 ----
>        INTEGER         iarray (*)
>  C*
>        CHARACTER       buff*4
>+       INTEGER         ibuff
>+       EQUIVALENCE     (buff,ibuff)
>  C------------------------------------------------------------------------
>  C*    Check that actual length of string is greater than NCHAR.
>  C
>***************
>*** 52,60 ****
>                ie = is + 3
>                IF  ( ie .gt. ichars ) ie = ichars
>                buff  =  string (is:ie)
>!               READ   ( buff, 1000, IOSTAT = iostat ) iarray (i)
>! 1000          FORMAT ( a4 )
>!               IF ( iostat .ne. 0 ) iret = -2
>                is = is + 4
>            END DO
>        END IF
>--- 54,60 ----
>                ie = is + 3
>                IF  ( ie .gt. ichars ) ie = ichars
>                buff  =  string (is:ie)
>!               iarray(i) = ibuff
>                is = is + 4
>            END DO
>        END IF
>
>2. The AVN now produces 6 Z and 18 Z MOS forecasts.  The decoders need a
>   couple changes to deal with this.
>
>*** gempak/source/bridge/ms/msdate.f.dist       Fri Sep 29 06:51:17 2000
>--- gempak/source/bridge/ms/msdate.f    Wed Feb 27 10:35:50 2002
>***************
>*** 66,74 ****
>            iret = -3
>          ELSE
>  C
>! C*          Reset hour if time is 1200 UTC.
>  C
>!           IF ( time ( 1:2 ) .eq. '12' ) irhour = 12 
>        END IF
>  C*
>        RETURN
>--- 66,75 ----
>            iret = -3
>          ELSE
>  C
>! C*          Decode hour.
>  C
>!           CALL ST_INTG( time(1:2), irhour, iret )
>!           IF ( iret .ne. 0 ) iret = -3
>        END IF
>  C*
>        RETURN
>*** gempak/source/bridge/ms/msdcda.f.dist       Fri Sep 29 06:51:17 2000
>--- gempak/source/bridge/ms/msdcda.f    Tue Feb 26 16:42:44 2002
>***************
>*** 39,48 ****
>  C*    X/N -> TDYF, TNTF and N/X -> TNTF, TDYF
>  C
>        istrt = istart ( 1 ) 
>!       IF ( istrt .ne. 0 ) istrt = istrt + 18
>!       CALL MS_MXMN ( report, istrt, 4*INCR, ifcstm, 7, line, lineb,
>!      +                       ier )
>!       IF ( irhour .eq. 0 ) THEN
>            iprm1 = iprms ( 2 )
>            iprm2 = iprms ( 1 )
>          ELSE
>--- 39,53 ----
>  C*    X/N -> TDYF, TNTF and N/X -> TNTF, TDYF
>  C
>        istrt = istart ( 1 ) 
>!       IF ( mod( irhour, 12 ) .eq. 0 ) THEN
>!         initft = 7
>!       ELSE
>!         initft = 5
>!       END IF
>!       IF ( istrt .ne. 0 ) istrt = istrt + 3 * ( initft - 1)
>!       CALL MS_MXMN ( report, istrt, 4*INCR, ifcstm, initft, line,
>!      +                       lineb, ier )
>!       IF ( irhour .le. 6 ) THEN
>            iprm1 = iprms ( 2 )
>            iprm2 = iprms ( 1 )
>          ELSE
>
>3. I like to be able to list the information.  I commented out the 256 
>   character restriction in sflist.
>
>*** gempak/source/programs/sf/sflist/sflprt.f.dist      Wed Aug 29 08:11:22 20
> 01
>--- gempak/source/programs/sf/sflist/sflprt.f   Sun Feb 24 15:09:02 2002
>***************
>*** 73,79 ****
>                    IF  ( tflg )  THEN
>                        CALL SF_RSTR  ( iflno, string, ihhmm, lenstr,
>       +                                        ier ) 
>!                       IF ( lenstr .gt. 256 ) lenstr = 256 
>  C
>  C*                    Write data to output units.
>  C
>--- 73,79 ----
>                    IF  ( tflg )  THEN
>                        CALL SF_RSTR  ( iflno, string, ihhmm, lenstr,
>       +                                        ier ) 
>! c                     IF ( lenstr .gt. 256 ) lenstr = 256 
>  C
>  C*                    Write data to output units.
>  C
>
>4. Finally, I like the two lines of station and date information in the AVN
>   and MRF MOS reports which dcmosa and dcmosm deletes.  It does partially 
>   reconstruct the station line.
>
>*** gempak/source/programs/dc/dcmosa/dcavnm.f.dist      Fri Sep 29 06:53:01 20
> 00
>--- gempak/source/programs/dc/dcmosa/dcavnm.f   Wed Feb 27 10:45:04 2002
>***************
>*** 185,190 ****
>--- 185,191 ----
>  C
>                    good = .true.
>                    IF ( getid ) THEN
>+                       jbpnt = ibpnt
>                        CALL MS_STID ( bultin, ibpnt, stid, carr, num,
>       +                                       ier )
>                        IF ( ier .ne. 0 ) THEN
>***************
>*** 327,339 ****
>  C*                        Write the text data to the output file.
>  C
>                            IF ( good ) THEN
>                                CALL ST_UNP1 ( report, lenr, report,
>       +                                               lenrnw, ierr )
>                                CALL ST_INCH ( ihhmm, time, ierr )
>-                               IF ( time .eq. '0   ' ) time = '0000'
>-                               report = stid // date // ' ' // time //
>-      +                                         ' UTC' // CHLF //
>-      +                                         report ( :lenrnw )
>                                        CALL SF_WSTR ( lunf, ihhmm, report,
>       +                                               ierr )
>                                IF ( ierr .ne. 0 ) THEN
>--- 328,338 ----
>  C*                        Write the text data to the output file.
>  C
>                            IF ( good ) THEN
>+                               report = bultin(jbpnt:ibpnt-1)
>+                               lenr = ibpnt - jbpnt
>                                CALL ST_UNP1 ( report, lenr, report,
>       +                                               lenrnw, ierr )
>                                CALL ST_INCH ( ihhmm, time, ierr )
>                                        CALL SF_WSTR ( lunf, ihhmm, report,
>       +                                               ierr )
>                                IF ( ierr .ne. 0 ) THEN
>*** gempak/source/programs/dc/dcmosm/dcmrfm.f.dist      Thu Aug  9 14:27:41 20
> 01
>--- gempak/source/programs/dc/dcmosm/dcmrfm.f   Mon Feb 25 15:26:51 2002
>***************
>*** 202,207 ****
>--- 202,208 ----
>  C
>                    good = .true.
>                    IF ( getid ) THEN
>+                       jbpnt = ibpnt
>                        CALL MS_STID ( bultin, ibpnt, stid, carr, num, 
>       +                                      ier )
>                        IF ( ier .ne. 0 ) THEN
>***************
>*** 352,361 ****
>  C*                        Write the text data to the output file.
>  C
>                            IF ( good ) THEN
>                                CALL ST_UNP1 ( report, lenr, report,
>       +                                               lenrnw, ierr )
>-                               report = stid // date // ' 0000 UTC' //
>-      +                                         CHLF // report ( :lenrnw )
>                                        CALL SF_WSTR ( lunf, ihhmm, report,
>       +                                               ierr )
>                                IF ( ierr .ne. 0 ) THEN
>--- 353,362 ----
>  C*                        Write the text data to the output file.
>  C
>                            IF ( good ) THEN
>+                               report = bultin(jbpnt:ibpnt-1)
>+                               lenr = ibpnt - jbpnt
>                                CALL ST_UNP1 ( report, lenr, report,
>       +                                               lenrnw, ierr )
>                                        CALL SF_WSTR ( lunf, ihhmm, report,
>       +                                               ierr )
>                                IF ( ierr .ne. 0 ) THEN
>