NCEPLIBS-bufr  11.7.0
 All Data Structures Files Functions Variables Pages
openmg.f
Go to the documentation of this file.
1 C> @file
2 C> @brief Open a new message for output in a BUFR file that was
3 C> previously opened for writing.
4 
5 C> This subroutine opens and initializes a new BUFR message within
6 C> internal arrays, for eventual output to logical unit LUNIT.
7 C>
8 C> @author J. Woollen
9 C> @date 1994-01-06
10 C>
11 C> @param[in] LUNIT -- integer: Fortran logical unit number for BUFR
12 C> file
13 C> @param[in] SUBSET -- character*(*): Table A mnemonic for type of
14 C> BUFR message to be opened
15 C> (see [DX BUFR Tables](@ref dfbftab) for
16 C> further information about Table A mnemonics)
17 C> @param[in] JDATE -- integer: Date-time to be stored within Section 1
18 C> of BUFR message being opened, in format of either
19 C> YYMMDDHH or YYYYMMDDHH
20 C>
21 C> <p>Logical unit LUNIT should have already been opened for output
22 C> operations via a previous call to subroutine openbf().
23 C>
24 C> <p>This subroutine is similar to subroutine openmb(), except that it
25 C> will always open a new message for output, regardless of the values
26 C> of SUBSET and JDATE. Any existing message within the internal
27 C> arrays will be automatically flushed and written to logical unit LUNIT
28 C> via an internal call to subroutine closmg().
29 C>
30 C> <b>Program history log:</b>
31 C> | Date | Programmer | Comments |
32 C> | -----|------------|----------|
33 C> | 1994-01-06 | J. Woollen | Original author |
34 C> | 1998-07-08 | J. Woollen | Replaced call to Cray library routine "ABORT" with call to new internal routine bort(); modified to make Y2K compliant |
35 C> | 1999-11-18 | J. Woollen | The number of BUFR files which can be opened at one time increased from 10 to 32 |
36 C> | 2003-11-04 | J. Ator | Added documentation |
37 C> | 2003-11-04 | S. Bender | Added remarks and routine interdependencies |
38 C> | 2003-11-04 | D. Keyser | Unified/portable for WRF; added documentation; outputs more complete diagnostic info when routine terminates abnormally |
39 C> | 2014-12-10 | J. Ator | Use modules instead of COMMON blocks |
40 C>
41  SUBROUTINE openmg(LUNIT,SUBSET,JDATE)
42 
43  USE moda_msgcwd
44 
45  CHARACTER*(*) subset
46 
47 C-----------------------------------------------------------------------
48 C-----------------------------------------------------------------------
49 
50 C CHECK THE FILE STATUS
51 C ---------------------
52 
53  CALL status(lunit,lun,il,im)
54  IF(il.EQ.0) goto 900
55  IF(il.LT.0) goto 901
56  IF(im.NE.0) CALL closmg(lunit)
57  CALL wtstat(lunit,lun,il, 1)
58 
59 C GET SOME SUBSET PARTICULARS
60 C ---------------------------
61 
62 c .... Given SUBSET, returns MTYP,MSTB,INOD
63  CALL nemtba(lun,subset,mtyp,mstb,inod)
64 c .... Set pos. index for new Tbl A mnem.
65  inode(lun) = inod
66 c .... Set date for new message
67  idate(lun) = i4dy(jdate)
68 
69 C INITIALIZE THE OPEN MESSAGE
70 C ---------------------------
71 
72  CALL msgini(lun)
73  CALL usrtpl(lun,1,1)
74 
75 C EXITS
76 C -----
77 
78  RETURN
79 900 CALL bort('BUFRLIB: OPENMG - OUTPUT BUFR FILE IS CLOSED, IT '//
80  . 'MUST BE OPEN FOR OUTPUT')
81 901 CALL bort('BUFRLIB: OPENMG - OUTPUT BUFR FILE IS OPEN FOR '//
82  . 'INPUT, IT MUST BE OPEN FOR OUTPUT')
83  END
function i4dy(IDATE)
This function converts a date-time with a 2-digit year (YYMMDDHH) to a date-time with a 4-digit year ...
Definition: i4dy.f:31
subroutine usrtpl(LUN, INVN, NBMP)
THIS SUBROUTINE STORES THE SUBSET TEMPLATE INTO INTERNAL SUBSET ARRAYS IN MODULE USRINT FOR CASES OF ...
Definition: usrtpl.f:51
subroutine openmg(LUNIT, SUBSET, JDATE)
This subroutine opens and initializes a new BUFR message within internal arrays, for eventual output ...
Definition: openmg.f:41
subroutine wtstat(LUNIT, LUN, IL, IM)
This subroutine can be used to connect or disconnect a specified Fortran logical unit number to/from ...
Definition: wtstat.f:52
subroutine status(LUNIT, LUN, IL, IM)
This subroutine checks whether a specified Fortran logical unit number is currently connected to the ...
Definition: status.f:55
subroutine msgini(LUN)
THIS SUBROUTINE INITIALIZES, WITHIN THE INTERNAL ARRAYS, A NEW BUFR MESSAGE FOR OUTPUT.
Definition: msgini.f:57
subroutine closmg(LUNIN)
This subroutine closes the BUFR message that is currently open for writing within internal arrays ass...
Definition: closmg.f:40
subroutine bort(STR)
This subroutine calls subroutine errwrt() to log an error message, then calls subroutine bort_exit() ...
Definition: bort.f:22
subroutine nemtba(LUN, NEMO, MTYP, MSBT, INOD)
This subroutine searches for a descriptor within Table A of the internal DX BUFR tables.
Definition: nemtba.f:35