Changelog - Version 2 series#
v0.2.0.8 2/2019 - v2.0.8#
fix makefile to put png.h into include
support for proposed cubed sphere (gdt-60)
added new if-structure: else, elseif, endif, nested if
added -start_timer -timer
added -import_grib_fs
-grib_out, checks if gds was changed, if ndata != npnts, warns and sets data to undefined
added -wind_uv
enhanced -wind_dir, wind_speed to have error messages like wind_uv
-grid_def: recognize GEOLAT and GEOLON
makefile: added for g95: -wFFLAGS+=-O2 -> wFFLAGS+=-c -O2
-rpn: added sto_lat, sto_lon
-wind_speed, wind_dir, diagnostics for no match if mode > 0
added -set_gds, update_sec3
-wind_dir: scaling .. to nearest degree
complex_pk.c: parallelized a loop
added int check_datecode(int year, int month, int day, int hour, int minute, int second);
-ndate, -ndates now check for valid date code
ip2lib_d: polefix for nearest neighbor
added -new_grid grib (template) dummy new_file
takes gdt from template, dummy will be used in irr2 files
new_grid: wind_direction is now initialized by init(); affects calls to wgrib2
require -new_grid_winds
new_grid: added grib for ip2lib_d (IPOLATES==3)
fixed debug statement in c_api/grb2_cmds();
fixed mk_gdt, test for failed lookup
added -new_grid location
fixed: import_text
updated code table 4.9, Prob.c CodeTable.c
added: Level.c "highest level > xxx DBz"
-set_prob can take values of "", so can make set_meta work.
set_meta.c: fix prob
-new_grid, undefined -new_grid_winds, fix error message
same_sec4_but_ensemble(), do not check code table 4.6
-ens_processing: can ensemble process perturbed runs and control runs
code table 4.6 is not checked
-submsg_uv: added flush_file()
new_grid: support for FLANG (LLVM compiler)
added -new_grid_order, replaces -submsg_uv
more support for pdt 70
-GRIB: free memory when mode==-2
-ieee: free memory when mode==-2
-bin: free memory when mode==-2
-grib_out: free memory when mode==-2
added string2time_unit()
set_date: calls string2time_unit()
time_processing: calls string2time_unit()
ndates: calls string2time_unit()
updated gribtable: STPRATE -> STRPRATE (Stratiform Precipitation Rate:kg/m^2/s)
BNEGLAY -> BNEGELAY:Bourgoiun Negative Energy Layer
TSEC -> RTSEC
SRAD -> SCRAD (Scaled Radiance)
TSEC -> IRTSEC
import_netcdf: fix scale_factor,
import_netcdf: data can be in anytype (old: float only)
import_netcdf: calculations are in double precision, before returning float[]
import_netcdf: fix scaling: old: required offset and scaling to be set
import_netcdf: parallelized code
-new_grid: lambertc ignored the -new_grid_winds option.
-ndates: check to prevent of overflow of inv_out[]
added char *base_inv_out(void) to check size of inv_out that is used
INV_BUFFER increased to 50000 (from 30000)
-grid: lambert conformal: remove "mode %d" which printed out res flag, added " " after m
-grid: Albert eq area: remove "mode %d" which printed out res flag
-AAIG output filenames include ensemble info (Manfred Schwarb)
initialize nc_time_step (doesn't appear to need it) but compiler complains (Manfred Schwarb)
-fix_CFSv2_fcst: fixes the encode the number of ensemble members (Manfred Schwarb)
reduced-_gaussian_grid: fixed declaration of enum interpol
note: cubed_sphere2ll is not complete
added: int sub_angle(char *)) old: grb2.h used int4(p) to read subangle
new: grb2.h uses sub_angle(p) to read subangle
handles case: subangle == 0 -> use 1, subangle == undefined -> use 1e6
this changes subangle displayed in -v -grid
removed tab from ip2lib_d/splat.f90
new_grid: added checks for thinned grids, staggered grids, and ploughing order
-ens_processing: fix d75 (typo) .. better accuracy for 75 percentile
-ens_processing: will not do illegal memory reference to ens[save->n_ens]
(value is multiplied by zero, so value is effectively not used)
-ens_processing: k2 is made private
-ens_processing: OpenMP structure revised to eliminate non-reproduceability with gcc 6.3.0
testing of reproducablity OMP_NUM_THREADS > 1 same as OMP_NUM_THREADS=1
gcc 4.4.8 good testing of wgrib2 v2.0.8
gcc 4.8.1 good
gcc 5.3.0 good (bad with wgrib2 v2.0.9beta)
gcc 6.3.0 bad
intel 18.0.1 good
comment: I don't see why the original OpenMP pragmas were wrong aside from the k2
not being private.ZZ
summary: wgrib2 v2.0.8 -ens_processing should be avoided
1. newer versions of gcc have problems when OMP_NUM_THREADS > 1
2. 75% interpolation between 2 points is inaccurate
3. precip trace amounts is bad (cpc private)
4. possible seg fault (array out of bounds multiplied by zero).
Dump.c -d, added dump_offset from George Trojan
fseek_file: works with pipe is whence is SEEK_CUR, needed by -d dump_offset
init.c wgrib2.c: updates for -d dump_offset
ffopen.c change mode of file by freopen: (George Trojan)
added: geolocation variable that indicates which geolocation package created lat/lon values
added: -geolocation which prints out which geolocation package created lat/lon values
added: -new_grid_format
makefile: fix typos to make USE_G2CLIB work, submitted G. Trojan
-rpn: old: (number)(characters) -> number
new: (number)(characters) -> error
changed grib2/makefile and grib2/lib/makefile to make shared library libwgrib2.so,
for COMP_SYS=gnu_linux in use by python interface
wgrib2lowapi.f90: changed c_char -> c_signed_char for buffer
splib: ncpus.f -> ncpus.F .. now compile when compiled without OpenMP
splib: #if USE_SPECTRAL == 1 in polatess4.f90 -> polatess4.F90
splib: #if USE_SPECTRAL == 1 in polatesv4.f90 -> polatesv4.F90
RPN.c logf() -> log() fix bug in gclib
RPN.c more parallel code
wgrib2.c: flush after writes to inv_file
-rpn_rcl: fixed if (rpn_data == NULL and rpn_n != 0) should never occur
makefile, New_grid.c minor fixes George Trojan
mk_gdt.c: added grid 101, added \x03 to interpreted bytes
new_grid() ip2lib_d version, if wind_rotation == undefined , use wind_rot of old file
ffopen.c(): changed wgrib2_free_file(): old would remove file from linked list if not in use
new: will close file and removee from linked list if in use/unused
f_new_grid(): fix up wind_rotation. should be set in phase == -1
on setjmp: fclose(&infile) George Trojan
added: -S_out .. needed for python
set_metadata_str(): now allows metadata of form (d|D)=....... besides n:byte:(d|D)=...
f_last(), f_last0(), added repeat_inv_out(): allow -last file1 -last file2
fixed *new_mem_buffer(int n, size_t size) when buffer is unallocated. until pywgrib2_s,
nobody can closed a memory file.
wgrib2_free_file: removed warning if file not found
grib2/makefile --fast-math -> -ffast-math George Trojan
grib2/makefile, ftp_api/makefile: changes to get make -j N to work with gcc and aocc
Tried making it work before but compiling was too slow with hard disks and a slow cpu.
With newish home system with nvme and 3600 cpu allowed me to make the many trials.
fixed: ffopen() works with all models r/w/a
Mem_buffer.c George Trojan fixed errors
KMA local levels and local grib table added, Dong-il Jang
added extern to init.c and wgrib2.c for following variables: run_flag, free_gribfield,
grib_data, found by George Trojan using gcc v10.x
GDT.c: added free list_opt, George Trojan
mk_gdt.c: added Space View Perspective or orthographic, George Trojan
mk_gdt.c: minor cleanup
PyInv.c: added for pywgrib2_xr, George Trojan
makefile: check for f77, quit if used
added fatal_error_lu(..)
added check for memory allocation in rd_seq_grib.c found by George Trojan
wgrib2.h changed INV_BUFFER from 50000 to 100000
added pyinv: for pywgrib2_xr and pywgrib2_lite, George Trojan, expermental
v0.2.0.8b9 12/2018 - never released v2.0.8#
-ens_processing: fixed spread calculation (one pass -> 2 pass calculation)
-ndate, -ndates: added with mn (minutes) support
-set_date, -time_processing: now supports mn time offsets
added spectral option to -new_grid
new_grid: removed loop to determine ibi
-set_ftime2: works with pdt 2, 3, 4, 5, 6, 9, 10, 12, 13, 15, 41, 43
-alarm will clear alarm in finalize stage
init.c added include <string.h> in
v0.2.0.7 12/2017 ———————————–#
report that missing. zlib.h in RedHat system, changed makefile which may
but probably doesn't fix the problem
update Code_Values.c
Time_processing.c: do_ave .. quit if save->n_fields == 0
added -ens_processing
Level.c update code table 4.5 (level_table[]), replace CodeTable_4.5_ncep.dat
by ncep_level_table[] (needed by -set_lev) and makes codes more consistent
eliminated need for CodeTable_4.5_ncep.dat and get_code_Table_4.5_ncep.sh
simplified special ncep levels
-set_lev: fixed lowest level 11% integrated cloud cover
-set_lev: added (level1) - (level2)
ftn_wgrib2api: added grb2_UNDEFINED, grb2_DEFINED_VAL(), grb2_UNDEFINED_VAL()
-set_lev: added %g in sequence (ncep level 241)
net result: inventory levels is updated, -set_lev handles more levels
makefile: gfort, icc, ifort more info in -config
wgrib2(argc, const char **argv) => wgrib2(argc, char **argv)
added -box_ave
ncep grid 184 added: C. McGill
grb2_inq(): bufer size was 53 instead of 71.
move -fi from Match.c -> Fi.c
move -end from Match.c -> End.c
wgrib2api: grb2_inv: grid/desc, -last -> -last0
no affect on good code, less space used code with non-unique matches
prob: added fcst number/total
prob >2.54 -> prob >2.54:prob fcst 255/255
wgrib2_get_mem_buffer_size(int n): return 0 instead of -1
size_t is unsigned
bug in sub_dt(..): if subtract time, and result should be dec 31
bug: dtime > jday -> dtime >= jday
bug affects: -set_date when using -set_date -Xhr
and the reference date should be dec 31.
bug affects: verfification time when using negative forecast time (rare) and
verification time should be Dec 31.
wgrib2api.f90: changes len=100 to len=300 for longer file names
USE_IPOLATES = 0,1,3 (new): changed makefile, Config.c ncep_grids.c mk_kgds.c New_grid.c
-new_grid_winds: old-needed IPOLATES to be installed. new-IPOLATES does not need
to be installed, needed for -submsg_uv
wgrib2/makefile: removed references to NCEP_local_levels_test.h as no longer used
added copy_dbl_data(..) same as copy_data(..) except for double rather than float
support for PDT 70 (post processing)
sec3_grids.c sets wind rotation to earth
modified -match_inv_add to use 2 arguments to the option
added diagnostics to -merge_fcst: same_sec4_for_merge(.) when fails to merge
fixed -set_radius 3:major_km:minor_km
-set data_* and -set data_+ added
closest(..): 2G+, some openmp speedup
removed OpenMP from gctpc_ll2xy. gctpc_ll2i
rot_regular2ll (returns lat-lon of rotated lat-lon grid) OpenMP enabled.
fixed Warn_old_g2lib.c, HEADER swapped 0:inv (from Dusan Jovic)
rm jasper-1.900.1 jasper-1.900.1.orig from jasper-1.900.1-14ubuntu3.2.debian.tgz (from Dusan Jovic)
fix rpn smth9r
makefile: rm tmpz.tar, ${cwd}/share, ${cwd}/tmp (from Dusan Jovic)
Manfred Schwarb made his usual no-changes-needed contribution. He
fixed and updated get_gribtab.sh which updates the gribtable. Some
corrections and units are made more consistent. Thanks Manfred.
-new_grid: correct file name in error message if could not open output file
grb2_inq(..) fix error message if no message matches.
-ens_processing: do all calcs from sorted data (speedup)
Ensemble.c: added more statistics, set code_table 4.3
updated code table table 4.3
changed makefile: cd ${proj4} -> cd ${proj4dir} thansk Simon Horton
changed makefile to use latest netcdf4 and hdf5 v4.6.1 and 1.8.20
note: hdf5 v1.10 can read v1.8 but not vice versa. stupid.
ftime2: change "ave(0 min fcst)" to "ave anl", like ftime1, set_ftime2 already works
added to -set_lev "n-m hybrid layer", needed for fv3
iplib2_d: change splat -> ip_splat
wgrib2api: added get_(ref/start/end)_edate, dynamical allocation of @mem:XX
change number of memory buffers to 30, should fix wgrib2api to read N_num_memory_buffers
from wgrib2.h file
Level.c and Mod_grib.c added %g (Eta|logarithmic hybrid|hybrid height|hybrid pressure)
level and layers, needed by fv3-core
Grads.c: added hyp and hyh (hybrid pressure level/layer and hybrid height level/layer)
changed Ftime2.c so that when NCEP prints TMIN/TMAX
old: 264:30420217:d=2004021912:TMIN:2 m above ground:66-72 hour missing fcst:
new: 264:30420217:d=2004021912:TMIN:2 m above ground:66-72 hour fcst:
the missing refers to a missing statistical operator (ex. ave, acc, min, max)
this verion is 1 hour newer than v0.1.7.8 .. for operations
RPN.c: old: -rpn :asasdf was ignored, now a warning
netcdf4 - change hdf5 1.8.18/1.8.18 to 1.10.4
problem with newer gcc (ubuntu) with v1.8.20, however, 1.10.x
may produce files that are not compatible with 1.8.
Aerosol.c if (pdt < 44 && pdt > 48) -> if (pdt < 44 || pdt > 48) from Manfred Schwarb
Time_processing.c duplicate else if (pdt == 12) from Manfred Schwarb
Reduced_gaussian.c removed extran extern output_order_type output_order; from Manfred Schwarb
dec_png_clone.c void user_read_data_clone(.... png_uint_32) -> void user_read_data_clone(... png_size_t)
from Manfred Schwarb, worked on 32 bit machines because png_uint_32 == png_size_t
worked on X86_64 because X86_64 calling conventions transferred arg in a 64-bit
register for both microsoft, linux and AIX(?) calling conventions
makefile, config.h and Config.c: list version of hdf5
11/2018 updated gribtab manually changed CLWMR to CLMR
Sec3.c added static print_stagger(), more grids with stagger
-ens_processing: fixed bug in setting number of ens members
-N_ens: fixed to print nothing if doesn't exist
-import_text, open changed from r+ to r
-import_ieee, -import_bin, open changed from rb+ to rb
added const char *wgrib2api_info() .. library info
makefile: compile netcdf4 without OpenMP
fixed same_sec4_but_ensemble .. f1..f4 were off by 1, no affect on released codes fixed ens_processing
v0.2.0.6c 2/2017 ———————————–#
added -set table_4.230 number and -set table_4.230 string chemical types
f_misc: chemical=chemical_40009 => chemical=40009
CodeTable. 4.6: pdt 40 and 42 identified as ensemble
-set_num_ens: works with any PDT with code table 4.6
error if g2clib == 1 and decoding png field
decoding png is ok
decimal scaling is set to decimal scale of last constant field or 0.
This causes an error in -grib (BAD) or using the input scaling parameters (Not Great)
The BAD effects are rare because pngs are rare and people rarely decode and do -grib at the same time
The Not Great problems are only rare vs rare**2. This involves a change a precision
which could results in a loss of precision.
-set_grib_type now understands complex1-bitmap (c1b), complex2-bitmap (c2b), complex3-bitmap (c3b)
-mysql_speed: size of character strings for table data changed from 1500 to MAX_SQL_INSERT=3000
user added an additional variable to a 40-level GFS output and wgrib2 crashed.
code should be updated to keep "row" from overflowing.
makefile: added -I../include to compiling libpng (needed by Windows 10, WLS)
makefile: added code so that gfortran on MacOS could find gfortran.dylib
grb2_wrt: old: order='ns' -> order='we:ns' or order='ns', doc should say we:ns
-ftime2: some fixes
new makefile:
old libwgrib2.a uses thinned archived which is a gnu ar feature
libwgrib2a_small.a -> libwgrib2x.a because unix ar has 15 letter limit
added lib/makefile
Set_ftime2.c: allow -set_ftime2 "0-1 month ave anl"
same_sec4_not_time: all pdts
better diagnostics: same_sec4_not_time(sec, sec) -> same_sec_not_time(int mode, sec, sec)
better diagnostics: same_sec1_not_time(sec, sec) -> same_sec_not_time(int mode, sec, sec)
added timing='6 hour fcst' into wgrib2api: grb2_wrt(..)
changed fatal_error if n=0 (statistical processing) to warning
seperate n=0 and memory size to different error messages (stat processing)
-ncep_norm: changed debug output is output with v98 instead of v99
several: tried to make ** Warning: reference time includes non-zero minutes/seconds **
better, turn off if f_T(..) is called
f_new_grid(..): improved error message if ipolates fails
if 1st or 2nd grid is smaller than grid cell of 2nd or 1st grid
-ftn_api_fn0: output format changed from i8,5(1x,i8) to i8,5(1x,i11)
grb_inq(..): read of ftn_api_fn0 changed from i8,5(1x,i8) to i11,5(1x,i11)
this allows reading of grids bigger than 99,999,999 points
-v -varX : the output has been reformatted for local variables have the format
var discipline=0 center=34 local_table=1 parmcat=1 parm=203
-set_var(..) now understands: -var (undefined variables) and -varX formats
var discipline=0 center=34 local_table=1 parmcat=1 parm=203
var discipline=10 master_table=2 parmcat=0 parm=11
var10_2_1_7_0_11
small_domain(..) use GDS_change_no to avoid duplicate calculations
small_domain(..) for lat/lon, mercator, only scan axis to save time
fwrite_file(..): added ferror(..) after fwrite
fread_file(..): added ferror(..) after fread
mk_bms(..): optimize code by finding 1st undefined grid point value
added check for malloc(..) working
-set_pdt: supports aerosols pdt=46, 48
-set_ftime2: fixed error message Set_ftime2: no match string=$s
-set_pdt, if len specified, do not add extra bytes
if len not specified, add extra bytes for n time ranges
f_misc: print aerosol size for pdt 44..47 (only did 44 before)
f_spatial_proc(..): pdt 15, changed output format, more info
-set_metadata, -set_metadata_str: uses f_set_ftime2 rather than f_set_ftime / f_set_ave
f_set_pdt: moved code into new_pdt(..), so other codes can call
-set_pdt: supports minutes_of_observational_data_cutoff_after_reference_time
-set_pdt: supports model version date pdt 60, 61
-f_Match_inv, f_match_inv, replace CALL_ARG0 by call_ARG0 (modern)
Set_metadata.c replace CALL_ARG0 by call_ARG1 (modern)
f_(set|get)_(byte|hex|int|int2|ieee): Boi used octet == 0, so I added error checking
for octet <= 0, slightly changed error message for out of bounds section
Config.c: make #include <jasper/jasper.h> conditionally compiled
added -time_processing
changed: -ave -> -ave0, -fcst_ave -> -fcst_ave0
added: -ave, -fcst_ave, both point to -time_processing
axes_earth, radius_earth: change GRS80 and WGS84 minor axis .xxx m
-radius now prints out major/minor axes
-radius output for user define oblate spheroid changed, consistent with other new output
-rpn print_ave,print_rms,print_diff,print_corr will work when lat not defined
-rpn_rcl, -rpn_sto, bug fix: do not set decode=1
makefile: clean now cleans ftp_api
default vector fields: added USSD/VSSD
added -alarm, terminates wgrib2 after N seconds by the alarm function
added for web processing (nomads) to terminate jobs that may have
stopped running because of broken I/O links
added code_table 3.2 for grid def 101
modified Earth.c as grid def 101 does not support user major/minor axes
sec3_lc: change LatSP 0.000000 LonSP 0.000000 -> LatSP -90.000000 LonSP 0.000000
change definition of latitude of southern pole
THIS CHANGE REQUIRES TIN for interpolation products
support for grid 101: -grib_out_irr2, Sec3.c
updated documenation: undefine_val.html to reflect that the code can undefine a range
added -import_netcdf
Changed -alarm: text description, removed un-needed test
added -match_inv_add, so can customize match_inv/Match_inv
makefile: fixed clang support
Ftime2: defined left and right in in unsupported cases
received space view perspective grid with a satellite not on 0N OE but 0N 41.5E
which exposed some problems.
space_view.c: remove conversion of lop to radians
space_view2ij.c: fix value of lap, fix corrections of lap, lop to radians
note: codes still requires lap, position of satellite, to be on equator
get_latlon(): return error code instead of 0
geo.c improved error messages, a little OpenMP for mercator2ll
set_pdt(): removed char *sec4 because it was unused
RPN.c xave and xdev fixed after bug introduced signed -> unsigned conversion
RPN.c some missing 2G+ conversions fixed
Sec3.c: in -grid for thinned Gaussian grid, remove print of dlon .. dlon doesn't apply here
cyclic(), handles thinned Gaussian grid, handles 4G grids .. for incorrect
ECMWF files. Lat/lon is assumes a global Gaussian grid
updated gribtable
fix: rpn_rcl, rpn_sto: Aug 8 2017: removed decode=1 from rpn_rcl and rpn_sto
12/5/2017 added it back
Small_grib.c: added check for thinned grids. Never should be encountered.
complex_pk.c: cleanup code, change so that old g2lib can read c2 and c3 files.
wrtieee.c: fixed sizeof(ieee-float) = sizeof(float) to 4.
I can't think of a current machine for which this is not true.
added: -reduced_gaussian_grid, transform from reduced Gaussian to full Gaussian grids
v0.2.0.0 6/2014 ———————————–#
-gctpc changed from inv to misc option
-merge_fcst: if N == 0, output every merge step, for S2S (tigge)
-set_metadata: fixed problems made in the 2.0.0 release.
v0.2.0.1 7/2014 ———————————–#
Level.c added more fixed levels
support for PDT=60,61
alias pdt=code_table_4.0
set_pdt(), copies all metadata for common pdts (-set_pdt +PDT) not complete
-Sec4, removed code for extra info when PDT=4.0
set_pdt(), fixed default sizes esp stat processing PDTs, added more PDTs
enable staggered grids (gctpc)
proj4_get_latlon: lambert, lat-lon, mercator, nps
added ncep grids 4 and 45 to ncep_grids.c
-s_out write new-line at end
-nl_out is now inv_output function
geo: regular2ll: 1x1 grids allowed
updated code_table_4.3.dat
updated code_table_4.10.dat
updated: prod_def_temp_size.c
add option -hybrid
f_ctl_ens: fixed and updated pdt==2 and pdt==12 are ensembles, added new pdts
updated CodeTable.4.7.dat
support for pdt 4.6 and 4.10, added -percent, percent_value(), percent_value_location()
support for pdt 4.6 and 4.10, in ctl_inv (Grads.c)
fixed cname.c units for pdt 4.6 and 4.10 should not be %
ffclose, by John Howard, ffclose_finished WND
added ffclose to -bin -ieee -text -spread -grib -GRIB -import_ieee, -import_bin,
-import_text -csv -cress_lola -ijbox -new_grid -small_grib -ijsmall_grib
-grib_ieee -ncep_uv -set_metadata -grib_out -lola -s_out -inv_f77 -inv
-print_out -nl_out -NCEP_norm -merge_fcst -ave -fcst_ave -irr_grid
-grib_out_irr -eof_string -eof_bin
EOF.c: if wgrib2 called with no arguments
old: eof_bin and eof_string were called
new: err_bin and err_string are called
if f_h is called
old: eof_bin and eof_string were called
new: err_bin and err_string are called
eof_string, eof_bin are called with mode -2 instead of explicitly
err_bin, err_string: not called if no error
all ffopens are paired with ffclose
Match.c free memory, make match_count a global variable.
rd_inventory: split from wgrib.c and put in own file, reads from input rather than stdin
setup options will get finalized, so to close files
pdt 4.44 only has 2 octets for forecast time!
set_ftime .. forecast time from int -> uint
added declaration Cyclic.c, dummy function f_proj4 from John Howard
moved scaling() from Precision.c to Code_Values.c added png, complex spectral
and simple log-pre-processed
change exit(0) to return 0 in main()
CALLABLE_WGRIB2: setjmp/longjmp, exit -> return, fopen -> ffopen (input)
CALLABLE_WGRIB2: -persistant_file
replace fopen by ffopen in options, AAIG, i_file,
f_h does not print out help message
setup_user_gribtable.c, close input file
-unix_time is now compile time option for John Howard
converted some strcpy -> strncpy
is_match: reorder loops for speed, add OMP for one loop
added Match_fs package, like Match but for fixed strings
wgrib2.c change to add Match_fs package
wgrib2.c reorder search for option names
initial support for code table 1.5 and 1.6
wgrib2.c replaced seq_input into enum in_dev_type in_type;
small_grib: unsigned int new_sec[7] -> new_sec[8] .. pretty typing
rd_grib_msg* updated to read more than 1 file at a time
increased size sec[], sec[9] = last valid bitmap .. only by sec[] used to read
added error messages Gctpc.c
unpk_run_length.c: David Bindermani
while (vals[i]> mv && i < nvals) -> while (i < nvals && mvals[i]> mv)
setup_user_gribtable.c added fclose(input)
set_metadata: fixed format of scanf
cleanup of defined but unused variables (found using cppcheck)
Scan.c: added parameters to routines, make it callable by f_import_grib()
added -import_grib
-fcst_ave, -ave, -wind_dir, -wind_speed, -merge, -ncep_norm : old: picked
up scaling from first record. Problem when first record was constant field.
set use_scaling=0
-fcst_ave, -ave: replaced undo_scan_order, saved many mallocs/frees
can now write complex-packed files with bitmaps (for NAM), added -set_bitmap
added MAXUW and MAXUV to list of vector fields
Ensemble.c Manfred Schwarb: treat number_of_forecasts_in_the_ensemble(sec) as signed
instead of cast to unsigned, (no change in code behavior)
Level.c Manfred Schwarb: if (type <= 192) -> if (type < 192) problem if level = 192 (local level)
Merge.c Manfred Schwarb: treat code_table_4_10(sec) as signed instead of case to unsigned
(no change in code behavior)
NCEP_norm.c Manfred Schwarb: removed unused variable pdt, typo in format
Prob.c Manfred Schwarb: fixed format print hex number with %u format
f_new_grid_vectors() accepts lists
NCEP_uv.c: put struct local_struct into function definition (looks better)
NCEP_uv: better error messages
match_inv: added -varX, -T, -start_FT and -end_FT, decided against -VT
-VT has same value as -start_FT, -VT and -vt have similar vt=(number) entries
complex_grib_out: strange nam file: RIME had val=(1e+10+i*2^1)*10^-10, i=0..511 (#bits=9)
convert to data to integer vector u[i] = floor((data[i] - ref)*scale + 0.5);
when using decimal scaling, ref is not quite the min value under all compilation
options (could be 64-bit register vs 32-bit memory value). The scaling factor is
so large that u[i] could be negative! Added a step to make sure u[i] is >= 0
-fcst_ave, -ave, -wind_dir, -wind_speed, -merge, -ncep_norm : restored to old
behavior, scaling from first record.
added -code_table_4.8
-set added table_4.7 table_4.8
-rpn: added smth9g and smth9r
-set_percentile: added, added "N% level" to set_metadata
Ensemble.c pdt=2 changed output to make clearer
-pdt old output: code table 4.0=1 Individual ... new: pdt=1
added -pdt to match_inv
-set_prob: added, added support in set_metadata
-set_ens_num: now callable from code
-set_metadata: supports ens=(+/-)number, ens=hi-res ctl ens=low-res ctl, X ensemble members
note:earlier versions ignored "ens=low-res ctl"
polar2ll: make openmp gau2ll
Config.c: would say that gctpc was default even if not
v0.2.0.2 3/2015 ———————————–#
updated New_grid.c, vectors and default_vectors
v0.2.0.2a beta 3/2015 ———————————–#
-rpn: smth9r would do a wrap-around like smthg, fixed
moved set_metadata() from Mod_grib.c to Set_metadata.c, added -set_metadata_str
added UICE/VICE to list of vector fields in New_grid.c, George Trojan
rd_inventory: changed save inventory in buffer for (future) grep operations
added -fgrep, -fgrep_v, -egrep and -egrep_v
fixed wgrib2 so that "wgrib2 file -last file.txt -s" works, if -last is 1st option,
picks "message no:position"
fixed makefile: added mkdir include
space_view.c space_view2ll() Leon Majewski found that lop was incorrectly defined.
lop = int4(sec[3]+38); -> lop = int4(sec[3]+42); Not noticed because EUMET
satellite has lap = lop = 0.0.
CW2: f_inv open files a+ and w+, need to opens
rewind_file: changed from rewind() to fseek() to get error code
CW2: fixed ffopen() so if error, link list is in good shape for future call
forecast_time_in_units now signed: Code_Values.c Merge.c, Set_date.c
Set_ts_dates.c, Mod_grib, Verftime.c
added sub_dt, add_time: dtime can now be plus or minus
Verftime.c use code_table_4_4() to check for no forecast hour
f_rpn(): do not cleanup on mode == -2, allow callable wgrib2 to keep
registers between calls
updated to libpng from v1.2.50 to v1.2.52
changed GB2_Subcenter(sec) from (int) int2(..) to (int) uint2(..)
changed GB2_Center(sec) from (int) int2(..) to (int) uint2(..)
wgrib2(): if malloc of data fails && callable wgrib2 .. set ndata = 0
EOF.c: many small changes
wgrib2: fixed setjmp code .. must save current stack frame!!!! else seg fault
on subsequent calls to wgrib2 && fatal_error!!!
rd_inventory: make buffer[STRING_SIZE] -> buffer[INV_STRING_SIZE]
updated New_grid.c, vectors and default_vectors so can compile without IPOLATES
removed unused variable i from Set_percentile.c
updated Match.c extern int use_ext_name is now defined if REGEX is off
added -ftn_api_fn0
cleanup wgrib2.c
free memory Undefine.c Set_val.c Set_ensm_derived_fcst.c Import_grib.c Cress_lola.c
Fix_CFSv2_fcst.c
f_i: removed comparison of rd_inventory == stdin as done in ffclose
int8: changed arguments from unsigned char * to unsigned const char where applicable
ijsmall_grib, small_grib: now respects append flag
many: replace FILE *xyz by struct seq_file *xyz and struct seq_File xyz
to support @mem: files
tosubmsg: better test for writes to pipes which is not allowed
-last does not include \n
-inv (write inventory to file) is changed from misc to setup
wgrib2.c changed fprintf(inv_out,..) to fwrite(...,inv_out)
inv_file changed to struct seq_file
user_grib_file, all rejected table entries are printed out
cname: use local table if (discipline, parmcat, parmnum) is member of [192..254]
many files: changed FILE *file to struct seq_file *file.
changed gctpc to remove warning about som_series by removing static som_series from proj.h
and adding them to sominv.c and somfor.c
Mem_buffer: data structures are statically initialized here instead of call to
init_mem_buffers, this allows external routines to initialize memory file.for CW2
init_mem_buffers only checks that initialization was done
RPN.c initialize rpn_n[] and rpn_data[] at compile time rather than at run time
allows external routines to initialize RPN registers
-full_name: fixed, now full_name = -ext_name "." level
added U-GWD, V-GWD to vector list
wrtieee: OpenMP the conversion loop works now.
-import_grib: fixed definiton from read grib1 -> read grib2
swap_buffer: OpenMP version
added MRMS grib table https://www.nssl.noaa.gov/projects/mrms/operational/tables.php
change makefile: openmp and no gfortran is ok, MAKE_FTN_API
prt_stat_tr: "-1-2 hour ave fcst,anl++" -> "-1-2 hour ave anl" affects inventories
complex_pk.c: error when writing msg with all undefined (code table 6.0 is undefined)
*** this bug affects writing of fields that are ALL undefined in complex packing ***
complex_pk.c: OpenMP directives added, renamed igrp -> itmp
added min_max_array() - OpenMN min/max of an array
f_min, f_max, complex_pk.c call min_max_array()
updated jasper to latest ubuntu code (security fixes)
updated gribtable - thank Manfred for the updated get_gribtab.sh
many formating changes to units/description
some differences from NCO tables because of dup names
SOILM -> SOILM and SOILM_
WILT -> WILT and WILTPT (WILT is old)
CDCT -> CDCT and CDTYP
TCOND -> TCOND and TCONDold
TCOLW -> TCOLW and TCOLWold
FRICV -> FRICV and FRICVW
makefile: ubuntu 12.10 /usr/lib/libgfortran is gone
get location of libgfortran from compiler
link ipolates library before fortran library
Mem_buffer.c gmerge.c: cleanup as indicated by clang
added code_table_4_1_location and code_table_4_2_location
preliminary support for local JMA table 4.50008
New_grid.c minor OpenMP additions
update gribtable:
get_gribtab.sh update by Manfred Schwarb
make_gribtable.sh by Manfred Schwarb
manual change to gribtab
0:1:0:255:0:0:6:17:TCOND:Total Condensate:kg/kg -> TCONDold
0:1:0:255:0:0:6:18:TCOLW:Total Column-Integrated Cloud Water:kg/m^2 -> TCOLWold
0:1:0:255:0:0:6:19:TCOLI:Total Column-Integrated Cloud Ice:kg/m^2 -> TCOLIold
10:1:0:0:0:17:FRICV:Friction Velocity:m/s -> FRICVW
2:1:0:0:0:26:WILT:Wilting Point:kg/m^3 -> WILTPT
manual change to gribtab
new_grid_lambertc: check return codes (long_i)
misc changes to remove warning .. unused variables
ieee_pk.c simple_pk.c Small_grib.c remove #include <jasper/jasper.h>
added dec_png_clone.c changes to makefile and unpk.c: Need to make
wgrib2 totally independent of g2clib in default mode.
Problem was NCEP Central Operations (NCO) had g2clib compiled with
-D __64BITS__ which told g2clib that ints were 64 bits even
though ints were 32 bits! Normal people don't do this.
So if you linked in NCO's libraries you had problems in the API.
However, NCO requires you to link in their libraries. I have no idea
how many external versions of g2clib this will affect as it is unknown
if the NCO makefile for g2clib is widely distributed.
Small_grib.c small optimizations
simple_pk.c: OpenMP optimizations
grads.c: f_lev0() added adcl
f_rpn(): number starts with +/-/0-9/. (period is new)
free_mem_buffer(): added mem_buffer[n] = NULL; fixed seg fault with callable wgrib2 and mem files
-last: old: rewind files, new: rewind all file types
-rewind_file: warning if fails, support for memory files (@mem:0)
added -error_count
return code from wgrib2 is |= (all function calls in phase -2, finalize)
-config: added more configuration details
prelim Lambert Az. Equal Area projection: gctpc
proj4.c gdt==32769 is now restricted to NCEP
changed order of calculation of lat-lon: proj4, gctpc, built-in
-- new programming rule: assume OpenMP can use unsigned ints in for loops
unpk.c i and ndata are unsigned int
Mysql_dump: make i,j unsigned int, format %d -> %u for ndata and npts
updated level.c for more definitions
update lev0 for more definitions
-rewind_file -> -rewind_init, -rewind_final, -rewind_proc
-close_persistent_file -> -transient
-persistent_file -> -persistent
wgrib2.c expanded error message for no input file
added fatal_error_ss
changed to new error message "too many grib files .. 1st=%s 2nd=%s"
added error message for undefined option
mem_init: set mem_buffer_size[n] = 0 on failed read
f_AAIG(): change fclose to ffclose
added preliminary version -AAIGlong
Ftn_api.c: removed references to nndata
enc_jpeg2000_clone: added #include "wgrib2.h" to add prototyping
v0.2.0.3 11/2015 ———————————–#
fix comments in import_grib.c, improved error message in import_bin
changed NDFD_gribtable.dat, set local table=1, NDFD variable now work
allow -d ' 1' f_dump() trim leading spaces
added -rpn_rcl and -rpn_sto .. for CW2 .. no need for geolocation
parallelized finding min/max jpeg_pk.c
-set_prob will not crash with unsupported PDT
return void: changed add_bitstream and add_many_bitstream, finish_bitstream
-stats is optimized, cos -> cosf for speedup, may give slightly different results
updated cyclic(): staggered grids never return cyclic, updated help msg
-stats is openmp optimized, cos -> cosf for speedup, may give slightly different results
2G++ grids enabled: -f_lola, -set_ival, -set_ijval, simple_grib_out
f_ctl_ens: went back to original version which was coded to GrADS documentation.
complex_grib_out: removed u[], saved sizeof(int)*ndata bytes peak usage
prelim: added support for JMA radar grid and template
added f_JMA to f_misc
complex packing: fixed, could not handle grid greater than 512M grid points
limit should be 4G grid points, problem testing 4G limit because of limited memory
complex packing: fixed, problem the group size could grow to >= 2**25
(artificial data) and the group size could not be stored because
of a limitation of the bitstream package.
f_ens(): for pdt=2,12 (derived ensemble fcst based on ALL ensemble members)
removed mention of cluster mean in CodeTable 4.7.
-N_ens: if N = 255 (undefined), print -1
-ensm_derived_fcst(): fixed case where pdt == 2 and 12
-ensm_derived_fcst(): can now be called by set_metadata_str
-set_metadata and -set_metadata_str will scan 3 more free format fields 5 -> 8
new_grid: had to add sec1 in order to run mk_kgds. With locally defined grids,
sec3 routines now have to look at the center.
unpk_complex() some 2G+ modifications, test for more failed mallocs
added BOM local grib table definitions, prelim (I made it up) grib variable names
Scan.c: 2G+, speed-up, undef nx, ny = 0 or -1
translation[] from int -> unsigned int: ave(), -ave, -fcst_ave, Scan.c
to_we_ns: fixed problem which caused "undo_output_order: program error"
would appear with wgrib2 ndfdfile -order we:ns -grib_out junk
regular2ll: Gctpc.c: f_bin: -checksum: 2G+
copy_sec(): size[] -> unsigned int*, copy_data(): fixed malloc to be 2G+
-wind_speed, -wind_dir: added openmp
changed extern int npnts -> extern unsigned int npnts
many, changed malloc(ndata *sizeof(XXX)) -> malloc(((size_t) ndata) * sizeof(XXX))
changed uint4_missing: old: return int , if missing return -1
new: return unsigned int, if missing return 0.
added get_nxny_, like get_nxny but nx, ny are unsigned int
rd_grib2_msg_seq_file(): change j to from int to size_t, len_grib to size_t;
unsigned long int -> size_t: grib_ieee(), Checksum, cksum(), f_GRIB(), NCEP_uv(), submsg_uv()
add xdev to -rpn xdev: deviation from zonal mean
nx/ny -> nx_/ny_: AAIG.c
remove f_spectral (satellite), -spectral_bands exists, works and provides more info
support for pdt=4.32, 4.33, 4.34
space_view_closest: return long int, error if iy >= nny (before: iy > nny), 2G
closest(), latlon_closest(), space_view_closest(): from int to long int
bug fix: Many thanks to Steve Sullivan (mathcom.com) who found a bug in complex packing
(complex_grib_out) and provided a bug fix. Complex packing divides the string of grid
points into groups. The minimum grid point value within the group is the group reference
value. In order to pack the group references, you need to find the maximum
group reference value (grefmx). The loop that finds the grefmx bypasses the reference
value of the 1st group. This is a problem when the reference value of the 1st group is
the maximum reference values and the number of bits required to encode this value is
larger than number of bits required to encode the second largest reference value.
This bug is for versions 2.0.0 - 2.0.3. This bug is more likely to occur when the grid
is small.
v0.2.0.4 2/2016 ———————————–#
updated to libpng.1.2.56
f_match_inv: old match inv depended on verbosity, new: match_inv is fixed
-proj4_ll2i: works for lat-lon grids, always writes to inv
updated ExtName.c adds new NCEP defn, and adds process=X for val >= 192
-lli2: 0 == out of domain, always write to inv
-ave: support pdt = 2 and 12
wrtieee(): initialize i
added -set_date +10hr, set_date -12mo,
-ave: pdt==1, fixed rt, sec4[50] = 1;
updated code for table 4.233, updated table 4.233, remove <sub> and </sub>
support for pdt 4.45, 4.46, 4.47
wgrib2.c: "g2lib/g2clib XXX decode may differ from WMO standard"
replaced by "g2lib/g2clib XXX encode/decode may differ from WMO standard"
FlagTable.c break; break; -> break;
parallelize missing_points(), unpk_0, unpacking of simple packed fields
mk_sec5_sec7(): fixed seg fault when number of grid points is 0, added test for mem allocation
affects v2.0.3-v2.0.4
jpeg_pk: if n_defined == 0, initialized min_val = max_val = 0.0, no change in validity of output
ext_name: do not print out code table 4.3 if value = 255
set_metadata: added code table X.Y=Z and flag table X.Y=Z
-set table_0.0, -set discipline now works
unpk_run_length.c: Takayuki Usui found that the code was off by one in reading the table
values. Suggested a bug fix.
-config show the version of IPOLATES library
makefile shows version of gcc
iplib.2012: interpolation to Gaussian grid and writing to stdout
fails: wgrib2 IN.grb -new_grid_winds earth -new_grid ncep grid t62 - | wgrib2 -
debug write statement in gdswiz04.f gets written into grib message. Fortran and C
buffers are not unified and problems occur on flushing the buffers.
remove writes from gdswiz04.f and splat.f
iplib.v3.0.0: added as possible iplib, same output, faster (16s -> 15s)
will make it the default iplib after more testing
code table 4.15: added location function
preliminary support for PDT 4.57
set_pdt: copy percentile info, all probability info
units.c: added a2code_4_10()
new_grid: added ncep grid 194
added struct full_date: make code nicer by storing date in a structure
added Ref_time which is the same as reftime but uses struct full_date
added Get_time which is the same as get_time but uses struct full_date
New_grid.c added #ifdef CRAYCE for cray fortran compiler, cray compilers compatibility has not been tested
tried using setvbuf() but removed change: minimal improvement vs portability?
added --version as an alias to -version
added f_ftime2 code as a replacement of f_ftime: bug fixes, easier to understand
move f_ftime code to Ftime.c, in prep of eventual removal
changed makefile so that zlib is static than dynamic linked
changed makefile so that pngs grids can be up to (200M x 1M)
updated gribtable (HWRF upgrade)
Sam Trahan (HWRF upgrade) updated Spectral.c for the current defn of PDT 4.32 and mod ExtName
Gregor Schnee, Daniel Lee both of DWD: added support for CCSDS/aec compression, template 5.42
renamed min_max_array.c to openmp_util.c
openmp_util.c: added min_max_array_all_defined()
jpeg_pk: openmp to find min/max of data[]
complex_grib_out: preprocessing are now all openmp
complex_grib_out: problem when all grid points undefined, fixed sec5[51] = 1; -> sec[41] = 1
note: output is a valid grib file, possible problem when making file
added Verf_time(sec, &date;
AAIG.c AAIGlong.c: allow dx != dy cleanup (Manfred Schwarb)
cleanup: format, small errors, compiler warnings, grammar Manfred Schwarb
Manfred Schwarb: output from gctpc renamed gctpc_1.txt -> gctpc_error.txt gctpc_2.txt -> gctpc_param.txt
simple_pk: handle case of n_defined == 0, affects v2.0.4
add_bitstream: can handle n_bits up to 32. (previously was up to 25)
fread_mem: (void *) mem_buffer[n] + mem_buffer_pos[n] -> (void *) (mem_buffer[n] + mem_buffer_pos[n])
swap_buffer(a,b) b changed from int to unsigned int
v0.2.0.5rc 7/2016 ———————————–#
mv Setftime2.c and Ftime2.c to *.cc (code in development)
v0.2.0.5 7/2016 ———————————–#
added -set table_4.5a, -set table_4.5b (some MDL files used a bad code table 4.5b)
removed error message from wgrib2_set_mem_buffer() and wgrib2_get_mem_buffer()
changed return code for wgrib2_set_mem_buffer from 2 to 3. unify return codes for set/get mem_buffer()
change N_REGS -> N_RPN_REGS, moved to wgrib2.h, set N_RPN_REGS=20
fixed RPN.c to reflect new values of N_RPN_REGS (vectors had to be manually increased)
changed grb2_inq() in wgrib2api.c: old: used rpn register 0,1,2 new: uses registers 17,18,19
ftn_api grb2_inq(): added lastuse variable
wgrib2.h: fixed int stagger(unsigned char **sec, unsigned int assumed_npnts, double *x, double *y)
parse_time_range2: error if no match
f_ftime(): removed \n in fatal_error message
t ftime2_tr(): added fatal_error "Statistical processing bad n=0"
RPN.c: dimensioned rpn_n[N_RPN_REGS], and rpn_data[N_RPN_REG] rather than default
which causes an error message when N_RPN_REGS is modified. Now assume that
undeclared inits are 0 and NULL.
main(): combined scans for input_files/inv_option and compile into one loop
search for option names is done once instead of twice
removed the (alpha) from -mysql header
fixed header for -v97
BOM gribtable: removed colons as they adversely affected g2ctl
libaec 3.4 now used, Config.c changed
new versions of netcdf4 4.4.1 and hdf5 1.8.17
unpk.c for (i=0;i<pcmpt->height_;i++) { .. i replaced by ii .. undefined variable.
unpk.c remove declaration for c when compiling Jasper
init.c, rd_inventory.c: egrep* is only used when REGEX, bug report by J. Crockett
stagger.c assumed_npnts -> unsigned int
enc_jpeg2000_clone.c: jasper v1.900.25+ changes ABI, need to comment out line image.inmem_=1
in makefile, JASPER_1_900_25PLUS is defined in config.h
at this point jasper v1.900.29 doesn't test cleanly on redhat
but library works.
added grib_max_bits: so set_metadata can look like inventory
added precision: so set_metadata can look like inventory
simplified set_bin_prec
metadata string: added "encode %d bits"
wgrib2(..): flush_inv_file: so for CW2, inventory is readable
updated level.c, lev0(..) for new fixed levels
updated Ensemble.c for new table entries
Ngoan Tan: updates to CodeTable.c, fill in some missing info for JMA pdt 50011 and 50008.
note: I did not have any readable documentation to verify locations.
Sec1: f_t(..): added warning if minutes or seconds is non-zero
makefile: fixed problem: $TMPDIR is required to compile pnglib, fixed
makefile: fixed problem with icc with openmp in compiling pnglib
status_fopen(): now prints out usage
mk_file_transient, mk_file_persistent: always return 0
wgrib2_free_file: removes file from ffopen link lists if usage == 0
main(); int err_4_3_count -> static int err_4_3_count = 0; so only 3 msgs for CW2
-grid_def: will not free NULL, will work on all records
makefile: TMPDIR is now set
f_set_lev(): support of A-B m ocean layer (WMO version)
level(): A-B m ocean layer, old: ncep version, new: ncep & WMO
added code_4_230_location(..)
makefile: fix ifndef ${..} =? ifndef ...
makefile: zlib: make check fails with undefined symbol cygwin64
v0.2.0.6 2/2017 ———————————–#
withdrawn before 48 hours to allow changes to ftn_api
The following changes are so that metadata returned from grb2_inq(..) is of the
format: D=YYYYMMDDHHmmss:var:lev:etc
The rest is so that index file is a superset of that format and
compatibility with the D= instead of d=
set_metadata: old str: x:x:d=yyyymmddhh(mmss):etc
new str: x:x:(d|D)=yyyymmddhh(mmss):etc
grb2_inq(..,desc=str,.. old: str=`wgrib2 -s` ie d=YYYYMMDDHH:var:lev:,etc
new: str=`wgrib2 -S` ie D=YYYYMMDDHHmmss:var:lev:etc
grb2_mk_inv: old wgrib2 GRB -match_inv > INV
new wgrib2 GRB -Match_inv > INV swap D= and d=
so desc=meta, then meta can be used in a search
grb2_inq: searches are now fixed strings rather than reg
use regex=1 to convert to regex searches
v0.2.0.6a 2/2017 ———————————–#
withdrawn to fix problems with compiling on Macs. (6 hours of release)
set_ftime2: uint missing -> unsigned int missing
fix makefile so that it will compile on Macs .. thanks Daniel Bowman
v0.2.0.6b 2/2017 ———————————–#
fixed code_4_230_location(..) broken in v2.0.6
v0.2.0.6c 2/2017 ———————————–#
added -set table_4.230 number and -set table_4.230 string chemical types
f_misc: chemical=chemical_40009 => chemical=40009
CodeTable. 4.6: pdt 40 and 42 identified as ensemble
-set_num_ens: works with any PDT with code table 4.6
error if g2clib == 1 and decoding png field
decoding png is ok
decimal scaling is set to decimal scale of last constant field or 0.
This causes an error in -grib (BAD) or using the input scaling parameters (Not Great)
The BAD effects are rare because pngs are rare and people rarely decode and do -grib at the same time
The Not Great problems are only rare vs rare**2. This involves a change a precision
which could results in a loss of precision.
-set_grib_type now understands complex1-bitmap (c1b), complex2-bitmap (c2b), complex3-bitmap (c3b)
-mysql_speed: size of character strings for table data changed from 1500 to MAX_SQL_INSERT=3000
user added an additional variable to a 40-level GFS output and wgrib2 crashed.
code should be updated to keep "row" from overflowing.
makefile: added -I../include to compiling libpng (needed by Windows 10, WLS)
makefile: added code so that gfortran on MacOS could find gfortran.dylib
grb2_wrt: old: order='ns' -> order='we:ns' or order='ns', doc should say we:ns
-ftime2: some fixes
new makefile:
old libwgrib2.a uses thinned archived which is a gnu ar feature
libwgrib2a_small.a -> libwgrib2x.a because unix ar has 15 letter limit
added lib/makefile
Set_ftime2.c: allow -set_ftime2 "0-1 month ave anl"
same_sec4_not_time: all pdts
better diagnostics: same_sec4_not_time(sec, sec) -> same_sec_not_time(int mode, sec, sec)
better diagnostics: same_sec1_not_time(sec, sec) -> same_sec_not_time(int mode, sec, sec)
added timing='6 hour fcst' into wgrib2api: grb2_wrt(..)
changed fatal_error if n=0 (statistical processing) to warning
seperate n=0 and memory size to different error messages (stat processing)
-ncep_norm: changed debug output is output with v98 instead of v99
several: tried to make ** Warning: reference time includes non-zero minutes/seconds **
better, turn off if f_T(..) is called
f_new_grid(..): improved error message if ipolates fails
if 1st or 2nd grid is smaller than grid cell of 2nd or 1st grid
-ftn_api_fn0: output format changed from i8,5(1x,i8) to i8,5(1x,i11)
grb_inq(..): read of ftn_api_fn0 changed from i8,5(1x,i8) to i11,5(1x,i11)
this allows reading of grids bigger than 99,999,999 points
-v -varX : the output has been reformatted for local variables have the format
var discipline=0 center=34 local_table=1 parmcat=1 parm=203
-set_var(..) now understands: -var (undefined variables) and -varX formats
var discipline=0 center=34 local_table=1 parmcat=1 parm=203
var discipline=10 master_table=2 parmcat=0 parm=11
var10_2_1_7_0_11
small_domain(..) use GDS_change_no to avoid duplicate calculations
small_domain(..) for lat/lon, mercator, only scan axis to save time
fwrite_file(..): added ferror(..) after fwrite
fread_file(..): added ferror(..) after fread
mk_bms(..): optimize code by finding 1st undefined grid point value
added check for malloc(..) working
-set_pdt: supports aerosols pdt=46, 48
-set_ftime2: fixed error message Set_ftime2: no match string=$s
-set_pdt, if len specified, do not add extra bytes
if len not specified, add extra bytes for n time ranges
f_misc: print aerosol size for pdt 44..47 (only did 44 before)
f_spatial_proc(..): pdt 15, changed output format, more info
-set_metadata, -set_metadata_str: uses f_set_ftime2 rather than f_set_ftime / f_set_ave
f_set_pdt: moved code into new_pdt(..), so other codes can call
-set_pdt: supports minutes_of_observational_data_cutoff_after_reference_time
-set_pdt: supports model version date pdt 60, 61
-f_Match_inv, f_match_inv, replace CALL_ARG0 by call_ARG0 (modern)
Set_metadata.c replace CALL_ARG0 by call_ARG1 (modern)
f_(set|get)_(byte|hex|int|int2|ieee): Boi used octet == 0, so I added error checking
for octet <= 0, slightly changed error message for out of bounds section
Config.c: make #include <jasper/jasper.h> conditionally compiled
added -time_processing
changed: -ave -> -ave0, -fcst_ave -> -fcst_ave0
added: -ave, -fcst_ave, both point to -time_processing
axes_earth, radius_earth: change GRS80 and WGS84 minor axis .xxx m
-radius now prints out major/minor axes
-radius output for user define oblate spheroid changed, consistent with other new output
-rpn print_ave,print_rms,print_diff,print_corr will work when lat not defined
-rpn_rcl, -rpn_sto, bug fix: do not set decode=1
makefile: clean now cleans ftp_api
default vector fields: added USSD/VSSD
added -alarm, terminates wgrib2 after N seconds by the alarm function
added for web processing (nomads) to terminate jobs that may have
stopped running because of broken I/O links
added code_table 3.2 for grid def 101
modified Earth.c as grid def 101 does not support user major/minor axes
sec3_lc: change LatSP 0.000000 LonSP 0.000000 -> LatSP -90.000000 LonSP 0.000000
change definition of latitude of southern pole
THIS CHANGE REQUIRES TIN for interpolation products
support for grid 101: -grib_out_irr2, Sec3.c
updated documenation: undefine_val.html to reflect that the code can undefine a range
added -import_netcdf
Changed -alarm: text description, removed un-needed test
added -match_inv_add, so can customize match_inv/Match_inv
makefile: fixed clang support
Ftime2: defined left and right in in unsupported cases
received space view perspective grid with a satellite not on 0N OE but 0N 41.5E
which exposed some problems.
space_view.c: remove conversion of lop to radians
space_view2ij.c: fix value of lap, fix corrections of lap, lop to radians
note: codes still requires lap, position of satellite, to be on equator
get_latlon(): return error code instead of 0
geo.c improved error messages, a little OpenMP for mercator2ll
set_pdt(): removed char *sec4 because it was unused
RPN.c xave and xdev fixed after bug introduced signed -> unsigned conversion
RPN.c some missing 2G+ conversions fixed
Sec3.c: in -grid for thinned Gaussian grid, remove print of dlon .. dlon doesn't apply here
cyclic(), handles thinned Gaussian grid, handles 4G grids .. for incorrect
ECMWF files. Lat/lon is assumes a global Gaussian grid
updated gribtable
fix: rpn_rcl, rpn_sto: Aug 8 2017: removed decode=1 from rpn_rcl and rpn_sto
12/5/2017 added it back
Small_grib.c: added check for thinned grids. Never should be encountered.
complex_pk.c: cleanup code, change so that old g2lib can read c2 and c3 files.
wrtieee.c: fixed sizeof(ieee-float) = sizeof(float) to 4.
I can't think of a current machine for which this is not true.
added: -reduced_gaussian_grid, transform from reduced Gaussian to full Gaussian grids