NOAA-EMC / NCEPLIBS-bufr

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

MAKESTAB - NUMBER OF JSEQ ENTRIES IN JUMP/LINK TABLE EXCEEDS THE LIMIT ( 96000) #544

Closed wx20jjung closed 7 months ago

wx20jjung commented 7 months ago

I am trying to review EUMETSAT's EPS-SG test data (https://www.eumetsat.int/first-version-eps-sg-test-data-bufr-format) and getting the following error from the proxy IASI_NG bufr data (W_XX-EUMETSAT-Darmstadt,SAT,SGA1-IAS-1C-RAD_C_EUMT_20230905163246_G_D_20080223100148_20080223100418_T_N____.bin).

*BUFR ARCHIVE LIBRARY ABORT** BUFRLIB: MAKESTAB - NUMBER OF JSEQ ENTRIES IN JUMP/LINK TABLE EXCEEDS THE LIMIT ( 96000) *BUFR ARCHIVE LIBRARY ABORT**

I am using debufr from v12.0.0. Best I can tell, the JSEQ value is 104919. I changed the value of MAXJL from 96000 to 105000 in modules_vars.F90 and everything is now working.

jbathegit commented 7 months ago

Hello @wx20jjung. As an FYI, you should never need to modify modules_vars.F90 or any other part of the library source code. Instead, these parameter sizes have always been configurable at run time with a call to function isetprm().

In other words, just modify your application code to add something like ier = isetprm('MAXJL', 105000) as a new source line. Also, if by chance your application code is compiled using 8-byte integers, then you'll also need to explicitly declare isetprm and ier as 4-byte integers in your application code, as noted in the Release Notes for v12.0.0. But then, and presuming the return value for ier is 0 when your code runs, then you're good to go.

However, please note that this and any other calls to isetprm() must be made before the first call to subroutine openbf() in your application code, because that first call to openbf() is where all internal library arrays are allocated. This is noted in the aforementioned documentation link for isetprm(), and it's very important in order to ensure that your specified parameter settings take effect as you intend inside of the library.

jbathegit commented 7 months ago

Also note that, if you're using the debufr utility instead of your own application program, you can just pass in -p MAXJL=105000 as an extra argument to debufr, and this will accomplish the same thing. See the help menu for debufr (just type debufr -h) for more information.