NCEPLIBS-w3emc 2.12.0
|
BUFR Message decoder. More...
Go to the source code of this file.
Functions/Subroutines | |
subroutine | fi7801 (iptr, ident, msga, istack, iwork, aname, kdata, ivals, mstack, aunits, kdesc, mwidth, mref, mscale, knr, index, maxr, maxd, iunitb, iunitd) |
Data extraction. | |
subroutine | fi7802 (iptr, ident, msga, kdata, kdesc, ll, mstack, aunits, mwidth, mref, mscale, jdesc, ivals, j, maxr, maxd) |
Process standard descriptor. | |
subroutine | fi7803 (iptr, ident, msga, kdata, ivals, mstack, mwidth, mref, mscale, j, jdesc, maxr, maxd) |
Process compressed data. | |
subroutine | fi7804 (iptr, msga, kdata, ivals, mstack, mwidth, mref, mscale, j, ll, jdesc, maxr, maxd) |
Process serial data. | |
subroutine | fi7805 (iptr, ident, msga, iwork, lx, ly, kdata, ll, knr, mstack, maxr, maxd) |
Process a replication descriptor. | |
subroutine | fi7806 (iptr, lx, ly, ident, msga, kdata, ivals, mstack, mwidth, mref, mscale, j, ll, kdesc, iwork, jdesc, maxr, maxd) |
Process operator descriptors. | |
subroutine | fi7807 (iptr, iwork, itbld, jdesc, maxd) |
Process queue descriptor. | |
subroutine | fi7808 (iptr, iwork, lf, lx, ly, jdesc, maxd) |
Program history log: | |
subroutine | fi7809 (ident, mstack, kdata, iptr, maxr, maxd) |
Reformat profiler w hgt increments. | |
subroutine | fi7810 (ident, mstack, kdata, iptr, maxr, maxd) |
Reformat profiler edition 2 data. | |
subroutine | w3fi78 (iptr, ident, msga, istack, mstack, kdata, knr, index, maxr, maxd, iunitb, iunitd) |
This set of routines will decode a BUFR message and place information extracted from the BUFR message into selected arrays for the user.The array kdata can now be sized by the user by indicating the maximum number of substes and the maximum number of descriptors that are expected in the course of decoding selected input data. | |
subroutine fi7801 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | ident, | ||
integer, dimension(*) | msga, | ||
integer, dimension(*) | istack, | ||
integer, dimension(*) | iwork, | ||
character*40, dimension(*) | aname, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(*) | ivals, | ||
integer, dimension(2,maxd) | mstack, | ||
character*24, dimension(*) | aunits, | ||
integer, dimension(*) | kdesc, | ||
integer, dimension(*) | mwidth, | ||
integer, dimension(700,3) | mref, | ||
integer, dimension(*) | mscale, | ||
integer, dimension(maxr) | knr, | ||
integer | index, | ||
maxr, | |||
maxd, | |||
iunitb, | |||
iunitd | |||
) |
Data extraction.
Program history log:
[in] | IPTR | See w3fi78() routine docblock |
[in] | IDENT | See w3fi78() routine docblock |
[in] | MSGA | Array containing bufr message |
[in,out] | ISTACK | Original array of descriptors extracted from source bufr message. |
[in] | MSTACK | Working array of descriptors (expanded)and scaling factor |
[in,out] | KDESC | Image of current descriptor |
[in] | INDEX | |
[in] | MAXR | maximum number of reports/subsets that may be contained in a bufr message |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice |
[in] | IUNITB | Unit number of data set holding table b |
[in] | IUNITD | Unit number of data set holding table d |
[out] | IWORK | Working descriptor list |
[out] | KDATA | Array containing decoded reports from bufr message. KDATA(Report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) arrays containing data from table b |
[out] | ANAME | Descriptor name |
[out] | AUNITS | Units for descriptor |
[out] | MSCALE | Scale for value of descriptor |
[out] | MREF | Reference value for descriptor |
[out] | MWIDTH | Bit width for value of descriptor |
IVALS | ||
KNR |
Error return: IPTR(1)
subroutine fi7802 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | ident, | ||
integer, dimension(*) | msga, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(*) | kdesc, | ||
ll, | |||
integer, dimension(2,maxd) | mstack, | ||
character*24, dimension(*) | aunits, | ||
integer, dimension(*) | mwidth, | ||
integer, dimension(700,3) | mref, | ||
integer, dimension(*) | mscale, | ||
integer | jdesc, | ||
integer, dimension(*) | ivals, | ||
integer | j, | ||
maxr, | |||
maxd | |||
) |
Process standard descriptor.
Program history log:
[in] | IPTR | See w3fi78 routine docblock |
[in] | IDENT | See w3fi78 routine docblock |
[in] | MSGA | Array containing bufr message |
[in,out] | KDATA | Array containing decoded reports from bufr message. KDATA(Report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) |
[in,out] | KDESC | Image of current descriptor |
[in] | MSTACK | |
[in] | MAXR | maximum number of reports/subsets that may be contained in a bufr message |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice Arrays containing data from table B |
[out] | AUNITS | Units for descriptor |
[out] | MSCALE | Scale for value of descriptor |
[out] | MREF | Reference value for descriptor |
[out] | MWIDTH | Bit width for value of descriptor |
LL | ||
JDESC | ||
IVALS | ||
J |
Error return: IPTR(1) = 3 - Message contains a descriptor with f=0 that does not exist in table b.
subroutine fi7803 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | ident, | ||
integer, dimension(*) | msga, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(*) | ivals, | ||
integer, dimension(2,maxd) | mstack, | ||
integer, dimension(*) | mwidth, | ||
integer, dimension(700,3) | mref, | ||
integer, dimension(*) | mscale, | ||
integer | j, | ||
integer | jdesc, | ||
maxr, | |||
maxd | |||
) |
Process compressed data.
PROGRAM HISTORY LOG:
[in] | IPTR | See w3fi78() routine docblock |
[in] | IDENT | See w3fi78() routine docblock |
[in] | MSGA | Array containing bufr message,mstack, |
[in] | IVALS | Array of single parameter values |
[in,out] | J | |
[in] | MAXR | Maximum number of reports/subsets that may be contained in a bufr message. |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; Upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice. |
[out] | KDATA | Array containing decoded reports from bufr message. KDATA(Report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) Arrays containing data from table B. |
[out] | MSCALE | Scale for value of descriptor |
[out] | MREF | Reference value for descriptor |
[out] | MWIDTH | Bit width for value of descriptor |
MSTACK | ||
JDESC |
subroutine fi7804 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | msga, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(*) | ivals, | ||
integer, dimension(2,maxd) | mstack, | ||
integer, dimension(*) | mwidth, | ||
integer, dimension(700,3) | mref, | ||
integer, dimension(*) | mscale, | ||
integer | j, | ||
integer | ll, | ||
integer | jdesc, | ||
maxr, | |||
maxd | |||
) |
Process serial data.
Program history log:
[in] | IPTR | See w3fi78 routine docblock |
[in] | MSGA | Array containing bufr message |
[in,out] | IVALS | Array of single parameter values |
[in,out] | J | |
[in] | MAXR | Maximum number of reports/subsets that may be contained in a bufr message |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice |
[out] | KDATA | Array containing decoded reports from bufr message. KDATA(report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) arrays containing data from table B |
[out] | MSCALE | Scale for value of descriptor |
[out] | MREF | Reference value for descriptor |
[out] | MWIDTH | Bit width for value of descriptor |
MSTACK | ||
LL | ||
JDESC |
Error return: IPTR(1) = 13 - Bit width on ascii chars not a multiple of 8
subroutine fi7805 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | ident, | ||
integer, dimension(*) | msga, | ||
integer, dimension(maxd) | iwork, | ||
integer | lx, | ||
integer | ly, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer | ll, | ||
integer, dimension(maxr) | knr, | ||
integer, dimension(2,maxd) | mstack, | ||
maxr, | |||
maxd | |||
) |
Process a replication descriptor.
Program history log:
[in] | IWORK | Working descriptor list |
[in] | IPTR | See w3fi78 routine docblock |
[in] | IDENT | See w3fi78 routine docblock |
[in,out] | LX | X portion of current descriptor |
[in,out] | LY | Y portion of current descriptor |
[in] | MAXR | Maximum number of reports/subsets that may be contained in a bufr message. |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice |
[out] | KDATA | Array containing decoded reports from bufr message. KDATA(report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) |
MSGA | ||
LL | ||
KNR | ||
MSTACK |
Error return: IPTR(1):
subroutine fi7806 | ( | integer, dimension(*) | iptr, |
integer | lx, | ||
integer | ly, | ||
integer, dimension(*) | ident, | ||
integer, dimension(*) | msga, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(*) | ivals, | ||
integer, dimension(2,maxd) | mstack, | ||
integer, dimension(*) | mwidth, | ||
integer, dimension(700,3) | mref, | ||
integer, dimension(*) | mscale, | ||
integer | j, | ||
integer | ll, | ||
integer, dimension(*) | kdesc, | ||
integer, dimension(*) | iwork, | ||
integer | jdesc, | ||
maxr, | |||
maxd | |||
) |
Process operator descriptors.
Program history log:
[in] | IPTR | See w3fi78 routine docblock |
[in] | LX | X portion of current descriptor |
[in] | LY | Y portion of current descriptor |
[in] | MAXR | Maximum number of reports/subsets that may be contained in a bufr message |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice |
[out] | KDATA | Array containing decoded reports from bufr message. KDATA(Report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) Arrays containing data from table b |
[out] | MSCALE | Scale for value of descriptor |
[out] | MREF | Reference value for descriptor |
[out] | MWIDTH | Bit width for value of descriptor |
IDENT | ||
MSGA | ||
IVALS | ||
MSTACK | ||
J | ||
LL | ||
KDESC | ||
JDESC | ||
IWORK |
Error return: IPTR(1) = 5 - Erroneous X value in data descriptor operator
subroutine fi7807 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | iwork, | ||
integer, dimension(500,11) | itbld, | ||
integer | jdesc, | ||
maxd | |||
) |
Process queue descriptor.
Program history log:
[in] | IWORK | Working descriptor list |
[in] | IPTR | See w3fi78 routine docblock |
MAXD | ||
[in] | ITBLD | Array containing descriptor queues |
[in] | JDESC | Queue descriptor to be expanded |
subroutine fi7808 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | iwork, | ||
integer | lf, | ||
integer | lx, | ||
integer | ly, | ||
integer | jdesc, | ||
maxd | |||
) |
subroutine fi7809 | ( | integer, dimension(*) | ident, |
integer, dimension(2,maxd) | mstack, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(*) | iptr, | ||
maxr, | |||
maxd | |||
) |
Reformat profiler w hgt increments.
Program history log:
[in] | IDENT | Array contains message information extracted from BUFR message:
|
[in] | MSTACK | Working descriptor list and scaling factor |
[in] | KDATA | Array containing decoded reports from bufr message. KDATA(Report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) |
[in] | IPTR | See w3fi78 |
[in] | MAXR | Maximum number of reports/subsets that may be contained in a bufr message |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice. |
subroutine fi7810 | ( | integer, dimension(*) | ident, |
integer, dimension(2,maxd) | mstack, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(*) | iptr, | ||
maxr, | |||
maxd | |||
) |
Reformat profiler edition 2 data.
Program history log:
[in] | IDENT | Array contains message information extracted from bufr message:
|
[in] | MSTACK | Working descriptor list and scaling factor |
[in] | KDATA | Array containing decoded reports from bufr message. kdata(report number,parameter number) (report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) |
[in] | IPTR | See w3fi78 |
[in] | MAXR | Maximum number of reports/subsets that may be contained in a bufr message |
[in] | MAXD | Maximum number of descriptor combinations that may be processed; upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice |
subroutine w3fi78 | ( | integer, dimension(*) | iptr, |
integer, dimension(*) | ident, | ||
integer, dimension(*) | msga, | ||
integer, dimension(*) | istack, | ||
integer, dimension(2,maxd) | mstack, | ||
integer, dimension(maxr,maxd) | kdata, | ||
integer, dimension(maxr) | knr, | ||
integer | index, | ||
maxr, | |||
maxd, | |||
iunitb, | |||
iunitd | |||
) |
This set of routines will decode a BUFR message and place information extracted from the BUFR message into selected arrays for the user.The array kdata can now be sized by the user by indicating the maximum number of substes and the maximum number of descriptors that are expected in the course of decoding selected input data.
This allows for realistic sizing of kdata and the mstack arrays. This version also allows for the inclusion of the unit numbers for tables b and d into the argument list. This routine does not include ifod processing.
Program history log:
[in] | MSGA | Array containing supposed BUFR message size is determined by user, can be greater than 10000 bytes. | ||||
[in] | MAXR | Maximum number of reports/subsets that may be contained in a BUFR message. | ||||
[in] | MAXD | Maximum number of descriptor combinations that may be processed; Upper air data and some satellite data require a value for maxd of 1600, but for most other data a value for maxd of 500 will suffice. | ||||
[in] | IUNITB | Unit number of data set holding table b | ||||
[in] | IUNITD | Unit number of data set holding table d | ||||
KNR | ||||||
[out] | ISTACK | Original array of descriptors extracted from source BUFR message. | ||||
[out] | MSTACK | (A,B)
| ||||
[out] | IPTR | Utility array
| ||||
[out] | IDENT | Array contains message information extracted from BUFR Message.
| ||||
[out] | KDATA | Array containing decoded reports from BUFR message. KDATA(report number,parameter number) (Report number limited to value of input argument maxr and parameter number limited to value of input argument maxd) Arrays containing data from table b:
| ||||
[out] | INDEX | Pointer to available subset |
Error returns: IPTR(1):
On the initial call to w3fi78() with a BUFR message the argument index must be set to zero (index = 0). On the return from w3fi78() 'index' will be set to the next available subset/report. When there are no more subsets available a 99 err return will occur.
If the original BUFR message does not contain delayed replication the BUFR message will be completely decoded and 'index' will point to the first decoded subset. The users will then have the option of indexing through the subsets on their own or by recalling this routine (without resetting 'index') to have the routine do the indexing.
If the original BUFR message does contain delayed replication one subset/report will be decoded at a time and passed back to the user. This is not an option.
The arrays to contain the output information are defined as follows: