NOAA-EMC / NCEPLIBS-bufr

The NCEPLIBS-bufr library contains routines and utilites for working with the WMO BUFR format.
Other
44 stars 19 forks source link

how to read replication? #475

Closed edwardhartnett closed 1 year ago

edwardhartnett commented 1 year ago

I have a data file who's dump is this:

MESSAGE TYPE ADPSFC    

001192  SID                         CWGN  ( 8)CCITT IA5                 TABLE B ENTRY - STATION IDENTIFICATION          
006002  XOB                       262.43  DEG E                         TABLE B ENTRY - LONGITUDE                       
005002  YOB                        49.03  DEG N                         TABLE B ENTRY - LATITUDE                        
004192  DHR                         0.00  HOURS                         TABLE B ENTRY - OBSERVATION TIME MINUS CYCLE TIM
010194  ELV                        251.0  METER                         TABLE B ENTRY - STATION ELEVATION               
001193  TYP                        284.0  CODE TABLE                    TABLE B ENTRY - OI/SSI REPORT TYPE              
055006  T29                        512.0  CODE TABLE                    TABLE B ENTRY - NMC OFFICE NOTE 29 REPORT TYPE  
002001  ITP                      MISSING  CODE TABLE                    TABLE B ENTRY - INSTRUMENT TYPE                 
           {PLEVL}     2 REPLICATIONS
    ++++++  PLEVL  REPLICATION #     1  ++++++
001194  CAT                          0.0  CODE TABLE                    TABLE B ENTRY - NMC OFFICE NOTE 29 CATEGORY     
007192  PRC                        980.6  MB                            TABLE B ENTRY - PRESSURE COORDINATE             
010198  PQM                          3.0  CODE TABLE                    TABLE B ENTRY - PRESSURE (QUALITY) MARKER       
013193  QQM                          3.0  CODE TABLE                    TABLE B ENTRY - SPECIFIC HUMIDITY (QUALITY) MARK
012195  TQM                          2.0  CODE TABLE                    TABLE B ENTRY - REPORTED TEMPERATURE (QUALITY) M
010196  ZQM                          3.0  CODE TABLE                    TABLE B ENTRY - HEIGHT (QUALITY) MARKER         
011192  WQM                          2.0  CODE TABLE                    TABLE B ENTRY - WIND (QUALITY) MARKER           
 (<enter> for MORE, q <enter> to QUIT)

           [OBLVL]     1 REPLICATIONS
001198  SRC                          PRP  ( 3)CCITT IA5                 TABLE B ENTRY - FILE NAME OF DATA SOURCE        
001200  FHR                      MISSING  HOUR                          TABLE B ENTRY - FORECAST LENGTH                 
           <PEVN>     1 REPLICATIONS
010197  POB                        980.6  MB                            TABLE B ENTRY - (SURFACE) PRESSURE OBSERVATION  
010192  PMO                       1014.0  MB                            TABLE B ENTRY - MEAN SEA-LEVEL PRESSURE OBSERVAT
           <QEVN>     1 REPLICATIONS
013192  QOB                        664.0  MG/KG                         TABLE B ENTRY - SPECIFIC HUMIDITY OBSERVATION   
           <TEVN>     1 REPLICATIONS
012192  TOB                        -16.0  DEG C                         TABLE B ENTRY - REPORTED TEMPERATURE OBSERVATION
           <ZEVN>     1 REPLICATIONS
010195  ZOB                        251.0  METER                         TABLE B ENTRY - HEIGHT OBSERVATION              
           <WEVN>     1 REPLICATIONS
011003  UOB                          4.8  M/S                           TABLE B ENTRY - U-COMPONENT WIND OBSERVATION    
 (<enter> for MORE, q <enter> to QUIT)

011004  VOB                         -1.7  M/S                           TABLE B ENTRY - V-COMPONENT WIND OBSERVATION    
           <CEVN>     0 REPLICATIONS
           <SEVN>     1 REPLICATIONS
020001  HOVI                     MISSING  METER                         TABLE B ENTRY - HORIZONTAL VISIBILITY           
012111  MXTM                     MISSING  KELVIN                        MAXIMUM TEMPERATURE                             
012112  MITM                     MISSING  KELVIN                        MINIMUM TEMPERATURE                             
012244  TDO                      MISSING  DEG C                         DEWPOINT TEMPERATURE OBSERVATION (NOT ASSIMILATE
020010  TOCC                     MISSING  PERCENT                       CLOUD COVER (TOTAL)                             
011041  MXGS                     MISSING  M/S                           MAXIMUM WIND SPEED (GUSTS)                      
012245  THI                      MISSING  DEG F                         HEAT INDEX                                      
012246  TCH                      MISSING  DEG F                         WIND CHILL                                      
050197  CDBZ                     MISSING  METER                                                                         
050217  CEIL                     MISSING  METER                         CEILING                                         
           <SBT>     0 REPLICATIONS
           <AODSEQ>     0 REPLICATIONS
    ++++++  PLEVL  REPLICATION #     2  ++++++
001194  CAT                          0.0  CODE TABLE                    TABLE B ENTRY - NMC OFFICE NOTE 29 CATEGORY     
007192  PRC                        980.6  MB                            TABLE B ENTRY - PRESSURE COORDINATE             
 (<enter> for MORE, q <enter> to QUIT)

010198  PQM                          3.0  CODE TABLE                    TABLE B ENTRY - PRESSURE (QUALITY) MARKER       
013193  QQM                          3.0  CODE TABLE                    TABLE B ENTRY - SPECIFIC HUMIDITY (QUALITY) MARK
012195  TQM                          2.0  CODE TABLE                    TABLE B ENTRY - REPORTED TEMPERATURE (QUALITY) M
010196  ZQM                          3.0  CODE TABLE                    TABLE B ENTRY - HEIGHT (QUALITY) MARKER         
011192  WQM                          2.0  CODE TABLE                    TABLE B ENTRY - WIND (QUALITY) MARKER           
           [OBLVL]     1 REPLICATIONS
001198  SRC                          PRP  ( 3)CCITT IA5                 TABLE B ENTRY - FILE NAME OF DATA SOURCE        
001200  FHR                      MISSING  HOUR                          TABLE B ENTRY - FORECAST LENGTH                 
           <PEVN>     1 REPLICATIONS
010197  POB                        980.6  MB                            TABLE B ENTRY - (SURFACE) PRESSURE OBSERVATION  
010192  PMO                       1014.0  MB                            TABLE B ENTRY - MEAN SEA-LEVEL PRESSURE OBSERVAT
           <QEVN>     1 REPLICATIONS
013192  QOB                        664.0  MG/KG                         TABLE B ENTRY - SPECIFIC HUMIDITY OBSERVATION   
           <TEVN>     1 REPLICATIONS
012192  TOB                        -16.0  DEG C                         TABLE B ENTRY - REPORTED TEMPERATURE OBSERVATION
           <ZEVN>     1 REPLICATIONS
 (<enter> for MORE, q <enter> to QUIT)

010195  ZOB                        251.0  METER                         TABLE B ENTRY - HEIGHT OBSERVATION              
           <WEVN>     1 REPLICATIONS
011003  UOB                          4.8  M/S                           TABLE B ENTRY - U-COMPONENT WIND OBSERVATION    
011004  VOB                         -1.7  M/S                           TABLE B ENTRY - V-COMPONENT WIND OBSERVATION    
           <CEVN>     0 REPLICATIONS
           <SEVN>     1 REPLICATIONS
020001  HOVI                     MISSING  METER                         TABLE B ENTRY - HORIZONTAL VISIBILITY           
012111  MXTM                     MISSING  KELVIN                        MAXIMUM TEMPERATURE                             
012112  MITM                     MISSING  KELVIN                        MINIMUM TEMPERATURE                             
012244  TDO                        -22.0  DEG C                         DEWPOINT TEMPERATURE OBSERVATION (NOT ASSIMILATE
020010  TOCC                     MISSING  PERCENT                       CLOUD COVER (TOTAL)                             
011041  MXGS                     MISSING  M/S                           MAXIMUM WIND SPEED (GUSTS)                      
012245  THI                      MISSING  DEG F                         HEAT INDEX                                      
012246  TCH                      MISSING  DEG F                         WIND CHILL                                      
050197  CDBZ                     MISSING  METER                                                                         
050217  CEIL                     MISSING  METER                         CEILING                                         
           <SBT>     0 REPLICATIONS
 (<enter> for MORE, q <enter> to QUIT)

           <AODSEQ>     0 REPLICATIONS

 >>> END OF SUBSET <<< 

I am reading it like this:

  ! Get and check more values.
  call ufbint(12, hdr, 1, 1, iret, 'XOB')
  if (abs(hdr(1, 1) - 262.43) > EPSILON) stop 40
  call ufbint(12, hdr, 1, 1, iret, 'YOB')
  if (abs(hdr(1, 1) - 49.03) > EPSILON) stop 41
  call ufbint(12, hdr, 1, 1, iret, 'DHR')
  if (abs(hdr(1, 1) - 0.0) > EPSILON) stop 42
  call ufbint(12, hdr, 1, 1, iret, 'ELV')
  if (abs(hdr(1, 1) - 251.0) > EPSILON) stop 43
  call ufbint(12, hdr, 1, 1, iret, 'TYP')
  if (abs(hdr(1, 1) - 284) > EPSILON) stop 44
  call ufbint(12, hdr, 1, 1, iret, 'T29')
  if (abs(hdr(1, 1) - 512.0) > EPSILON) stop 45
  call ufbint(12, hdr, 1, 1, iret, 'ITP')
  if (abs(hdr(1, 1) - missing) > EPSILON) stop 45

  ! Read a sequence.
  call ufbrep(12, hdr, 1, 1, iret, 'PLEVL')
  print *, iret, hdr(1, 1)

The problem is with 'PLEVL' which gives me this error:

***********BUFR ARCHIVE LIBRARY ABORT**************
 BUFRLIB: PARUTG - ILLEGAL NODE TYPE: RPC FOR MNEMONIC PLEVL                                                                     
 ***********BUFR ARCHIVE LIBRARY ABORT**************

How do I read the replication PLEVL?

jack-woollen commented 1 year ago

@edwardhartnett You have some choices on how to read PLEVL, depending on what you want to see. You can read the entire replicated sequence by call ufbseq(12,arr,i1,i2,iret,'PLEVL') where I1 is big enough to hold the contents of any one replication, and I2 is big enough to hold all the replications. You can read the number of replications of the sequence by call ufbint(12, hdr, 1, 1, iret, '{PLEVL}') You can read selected contents using ufbint by call ufbint(12,arr,10,255,iret,'POB QOB TOB ZOB UOB VOB') for example. You could use ufbrep also, but for delayed replicated sequences ufbint is better.

edwardhartnett commented 1 year ago

Thanks @jack-woollen I will give it a try...

edwardhartnett commented 1 year ago

OK, I got this working and it's in #461 . I still have lots to learn! Thanks for the help...