#!/usr/bin/env python3

# reading sequentially is much faster than random access reading 
# reading sequentially with one wgrib2 call is much faster than multiple calls to wgrib2
#
# this is like cookbook_read_seq_1.py but reads the data in one wgrib2 call
#  drawback is that the results are saved in memory
#
import pywgrib2_s
import numpy
import os.path

in_file='a.grb'
in_inv_file='a.inv'

# if in_inv_file does not exist, make inv file
if not os.path.isfile(in_inv_file) :
    err=pywgrib2_s.mk_inv(in_file,in_inv_file)
    print("mk_inv err=", err)

# read data, save binary data in @mem:0
ntime = pywgrib2_s.inq(in_file, ':TMP:2 m above ground:', inv=in_inv_file, bin='@mem:0', Matched=True, Latlon=True)
print('inq ntime=',ntime)
if ntime < 1:
    print("no data")
    quit()
nx = pywgrib2_s.nx
ny = pywgrib2_s.ny
print("ntime=",ntime)

data=pywgrib2_s.get_flt_mem(0)
if data is None:
    print("get_flt_mem(0) failed")
data = data.reshape((nx, ny, ntime), order='F')

for i in range(ntime):
    print("i,nx,ny=",i,nx,ny)
    print ("inv=", pywgrib2_s.matched[i], ' data[0,10,i]=', data[0,10,i],' lat/lon=',pywgrib2_s.lat[0,10],'  ',pywgrib2_s.lon[0,10])

print("done count=", ntime)