diff --git a/source/python/classes/EcFlexpart.py b/source/python/classes/EcFlexpart.py index badc7359d59186a8cfd069e10f3d3d1eed583d52..85d4bcee618b7071d1f1a68f1fd8ffdffdc02669 100644 --- a/source/python/classes/EcFlexpart.py +++ b/source/python/classes/EcFlexpart.py @@ -81,10 +81,14 @@ import subprocess from datetime import datetime, timedelta import numpy as np -from eccodes import (codes_index_select, codes_new_from_index, codes_get, - codes_get_values, codes_set_values, codes_set, - codes_write, codes_release, codes_new_from_index, - codes_index_release, codes_index_get) +from gribapi import (grib_set, grib_index_select, grib_new_from_index, grib_get, + grib_write, grib_get_values, grib_set_values, grib_release, + grib_index_release, grib_index_get) + +# from eccodes import (codes_index_select, codes_new_from_index, codes_get, + # codes_get_values, codes_set_values, codes_set, + # codes_write, codes_release, codes_new_from_index, + # codes_index_release, codes_index_get) # software specific classes and modules from flex_extract sys.path.append('../') @@ -432,7 +436,7 @@ class EcFlexpart(object): for key in index_keys: #index_vals.append(grib_index_get(iid, key)) #print(index_vals[-1]) - key_vals = codes_index_get(iid, key) + key_vals = grib_index_get(iid, key) print(key_vals) # have to sort the steps for disaggregation, # therefore convert to int first @@ -790,10 +794,10 @@ class EcFlexpart(object): print('current product: ', prod) for i in range(len(index_keys)): - codes_index_select(iid, index_keys[i], prod[i]) + grib_index_select(iid, index_keys[i], prod[i]) # get first id from current product - gid = codes_new_from_index(iid) + gid = grib_new_from_index(iid) # if there is no data for this specific time combination / product # skip the rest of the for loop and start with next timestep/product @@ -801,9 +805,9 @@ class EcFlexpart(object): continue # create correct timestamp from the three time informations - cdate = str(codes_get(gid, 'date')) - ctime = '{:0>2}'.format(codes_get(gid, 'time')/100) - cstep = '{:0>3}'.format(codes_get(gid, 'step')) + cdate = str(grib_get(gid, 'date')) + ctime = '{:0>2}'.format(grib_get(gid, 'time')/100) + cstep = '{:0>3}'.format(grib_get(gid, 'step')) t_date = datetime.strptime(cdate + ctime, '%Y%m%d%H') t_dt = t_date + timedelta(hours=int(cstep)) t_m1dt = t_date + timedelta(hours=int(cstep)-int(c.dtime)) @@ -835,13 +839,13 @@ class EcFlexpart(object): while 1: if not gid: break - cparamId = str(codes_get(gid, 'paramId')) - step = codes_get(gid, 'step') - time = codes_get(gid, 'time') - ni = codes_get(gid, 'Ni') - nj = codes_get(gid, 'Nj') + cparamId = str(grib_get(gid, 'paramId')) + step = grib_get(gid, 'step') + time = grib_get(gid, 'time') + ni = grib_get(gid, 'Ni') + nj = grib_get(gid, 'Nj') if cparamId in valsdict.keys(): - values = codes_get_values(gid) + values = grib_get_values(gid) vdp = valsdict[cparamId] svdp = svalsdict[cparamId] # sd = stepsdict[cparamId] @@ -880,17 +884,17 @@ class EcFlexpart(object): else: values = svdp[0] - codes_set_values(gid, values) + grib_set_values(gid, values) if c.maxstep > 12: - codes_set(gid, 'step', max(0, step-2*int(c.dtime))) + grib_set(gid, 'step', max(0, step-2*int(c.dtime))) else: - codes_set(gid, 'step', 0) - codes_set(gid, 'time', t_m2dt.hour*100) - codes_set(gid, 'date', int(t_m2dt.strftime('%Y%m%d'))) + grib_set(gid, 'step', 0) + grib_set(gid, 'time', t_m2dt.hour*100) + grib_set(gid, 'date', int(t_m2dt.strftime('%Y%m%d'))) with open(fnout, 'w') as f_handle: - codes_write(gid, f_handle) + grib_write(gid, f_handle) if c.basetime: t_enddate = datetime.strptime(c.end_date + @@ -910,16 +914,16 @@ class EcFlexpart(object): t_dt == t_enddate: values = svdp[3] - codes_set_values(gid, values) - codes_set(gid, 'step', 0) + grib_set_values(gid, values) + grib_set(gid, 'step', 0) truedatetime = t_m2dt + timedelta(hours= 2*int(c.dtime)) - codes_set(gid, 'time', truedatetime.hour * 100) - codes_set(gid, 'date', truedatetime.year * 10000 + + grib_set(gid, 'time', truedatetime.hour * 100) + grib_set(gid, 'date', truedatetime.year * 10000 + truedatetime.month * 100 + truedatetime.day) with open(hnout, 'w') as h_handle: - codes_write(gid, h_handle) + grib_write(gid, h_handle) #values = (svdp[1]+svdp[2])/2. if cparamId == '142' or cparamId == '143': @@ -927,21 +931,21 @@ class EcFlexpart(object): else: values = disaggregation.dapoly(list(reversed(svdp))) - codes_set(gid, 'step', 0) + grib_set(gid, 'step', 0) truedatetime = t_m2dt + timedelta(hours=int(c.dtime)) - codes_set(gid, 'time', truedatetime.hour * 100) - codes_set(gid, 'date', truedatetime.year * 10000 + + grib_set(gid, 'time', truedatetime.hour * 100) + grib_set(gid, 'date', truedatetime.year * 10000 + truedatetime.month * 100 + truedatetime.day) - codes_set_values(gid, values) + grib_set_values(gid, values) with open(gnout, 'w') as g_handle: - codes_write(gid, g_handle) + grib_write(gid, g_handle) - codes_release(gid) + grib_release(gid) - gid = codes_new_from_index(iid) + gid = grib_new_from_index(iid) - codes_index_release(iid) + grib_index_release(iid) return @@ -1015,10 +1019,10 @@ class EcFlexpart(object): print('current product: ', prod) for i in range(len(index_keys)): - codes_index_select(iid, index_keys[i], prod[i]) + grib_index_select(iid, index_keys[i], prod[i]) # get first id from current product - gid = codes_new_from_index(iid) + gid = grib_new_from_index(iid) # if there is no data for this specific time combination / product # skip the rest of the for loop and start with next timestep/product @@ -1033,9 +1037,9 @@ class EcFlexpart(object): fdict[k] = open(fortfile, 'w') # create correct timestamp from the three time informations - cdate = str(codes_get(gid, 'date')) - ctime = '{:0>2}'.format(codes_get(gid, 'time')/100) - cstep = '{:0>3}'.format(codes_get(gid, 'step')) + cdate = str(grib_get(gid, 'date')) + ctime = '{:0>2}'.format(grib_get(gid, 'time')/100) + cstep = '{:0>3}'.format(grib_get(gid, 'step')) timestamp = datetime.strptime(cdate + ctime, '%Y%m%d%H') timestamp += timedelta(hours=int(cstep)) cdate_hour = datetime.strftime(timestamp, '%Y%m%d%H') @@ -1063,34 +1067,34 @@ class EcFlexpart(object): while 1: if not gid: break - paramId = codes_get(gid, 'paramId') - gridtype = codes_get(gid, 'gridType') - levtype = codes_get(gid, 'typeOfLevel') + paramId = grib_get(gid, 'paramId') + gridtype = grib_get(gid, 'gridType') + levtype = grib_get(gid, 'typeOfLevel') if paramId == 77: # ETADOT - codes_write(gid, fdict['21']) + grib_write(gid, fdict['21']) elif paramId == 130: # T - codes_write(gid, fdict['11']) + grib_write(gid, fdict['11']) elif paramId == 131 or paramId == 132: # U, V wind component - codes_write(gid, fdict['10']) + grib_write(gid, fdict['10']) elif paramId == 133 and gridtype != 'reduced_gg': # Q - codes_write(gid, fdict['17']) + grib_write(gid, fdict['17']) elif paramId == 133 and gridtype == 'reduced_gg': # Q, gaussian - codes_write(gid, fdict['18']) + grib_write(gid, fdict['18']) elif paramId == 135: # W - codes_write(gid, fdict['19']) + grib_write(gid, fdict['19']) elif paramId == 152: # LNSP - codes_write(gid, fdict['12']) + grib_write(gid, fdict['12']) elif paramId == 155 and gridtype == 'sh': # D - codes_write(gid, fdict['13']) + grib_write(gid, fdict['13']) elif paramId == 246 or paramId == 247: # CLWC, CIWC # sum cloud liquid water and ice - if not scwc: - scwc = codes_get_values(gid) + if scwc is None: + scwc = grib_get_values(gid) else: - scwc += codes_get_values(gid) - codes_set_values(gid, scwc) - codes_set(gid, 'paramId', 201031) - codes_write(gid, fdict['22']) + scwc += grib_get_values(gid) + grib_set_values(gid, scwc) + grib_set(gid, 'paramId', 201031) + grib_write(gid, fdict['22']) elif c.wrf and paramId in [129, 138, 155] and \ levtype == 'hybrid': # Z, VO, D # do not do anything right now @@ -1100,7 +1104,7 @@ class EcFlexpart(object): if paramId not in savedfields: # SD/MSL/TCC/10U/10V/2T/2D/Z/LSM/SDOR/CVL/CVH/SR # and all ADDPAR parameter - codes_write(gid, fdict['16']) + grib_write(gid, fdict['16']) savedfields.append(paramId) else: print('duplicate ' + str(paramId) + ' not written') @@ -1110,15 +1114,15 @@ class EcFlexpart(object): # model layer if levtype == 'hybrid' and \ paramId in [129, 130, 131, 132, 133, 138, 155]: - codes_write(gid, fwrf) + grib_write(gid, fwrf) # sfc layer elif paramId in wrfpars: - codes_write(gid, fwrf) + grib_write(gid, fwrf) except AttributeError: pass - codes_release(gid) - gid = codes_new_from_index(iid) + grib_release(gid) + gid = grib_new_from_index(iid) for f in fdict.values(): f.close() @@ -1172,7 +1176,7 @@ class EcFlexpart(object): if c.wrf: fwrf.close() - codes_index_release(iid) + grib_index_release(iid) return diff --git a/source/python/classes/GribTools.py b/source/python/classes/GribTools.py index 068b1f5cfc49cac00adbf78385b82b710f495cbe..247d1785dbf6bff7e20789637dd1a59a8c653232 100644 --- a/source/python/classes/GribTools.py +++ b/source/python/classes/GribTools.py @@ -43,11 +43,16 @@ # MODULES # ------------------------------------------------------------------------------ import os +from gribapi import grib_new_from_file, grib_is_defined, grib_get, \ + grib_release, grib_set, grib_write, grib_index_read, \ + grib_index_new_from_file, grib_index_add_file, \ + grib_index_write -from eccodes import (codes_grib_new_from_file, codes_is_defined, codes_get, - codes_release, codes_set, codes_write, codes_index_read, - codes_index_new_from_file, codes_index_add_file, - codes_index_write) + +# from eccodes import (codes_grib_new_from_file, codes_is_defined, codes_get, + # codes_release, codes_set, codes_write, codes_index_read, + # codes_index_new_from_file, codes_index_add_file, + # codes_index_write) # ------------------------------------------------------------------------------ # CLASS @@ -104,7 +109,7 @@ class GribTools(object): return_list = [] while 1: - gid = codes_new_from_file(fileid) + gid = grib_new_from_file(fileid) if gid is None: break @@ -116,20 +121,20 @@ class GribTools(object): select = True i = 0 for wherekey in wherekeynames: - if not codes_is_defined(gid, wherekey): + if not grib_is_defined(gid, wherekey): raise Exception("where key was not defined") select = (select and (str(wherekeyvalues[i]) == - str(codes_get(gid, wherekey)))) + str(grib_get(gid, wherekey)))) i += 1 if select: llist = [] for key in keynames: - llist.extend([str(codes_get(gid, key))]) + llist.extend([str(grib_get(gid, key))]) return_list.append(llist) - codes_release(gid) + grib_release(gid) fileid.close() @@ -178,7 +183,7 @@ class GribTools(object): fin = open(fromfile) while 1: - gid = codes_new_from_file(fin) + gid = grib_new_from_file(fin) if gid is None: break @@ -189,22 +194,22 @@ class GribTools(object): select = True i = 0 for wherekey in wherekeynames: - if not codes_is_defined(gid, wherekey): + if not grib_is_defined(gid, wherekey): raise Exception("where Key was not defined") select = (select and (str(wherekeyvalues[i]) == - str(codes_get(gid, wherekey)))) + str(grib_get(gid, wherekey)))) i += 1 if select: i = 0 for key in keynames: - codes_set(gid, key, keyvalues[i]) + grib_set(gid, key, keyvalues[i]) i += 1 - codes_write(gid, fout) + grib_write(gid, fout) - codes_release(gid) + grib_release(gid) fin.close() fout.close() @@ -245,7 +250,7 @@ class GribTools(object): fout = open(self.filenames, filemode) while 1: - gid = codes_new_from_file(fin) + gid = grib_new_from_file(fin) if gid is None: break @@ -256,21 +261,21 @@ class GribTools(object): select = True i = 0 for key in keynames: - if not codes_is_defined(gid, key): + if not grib_is_defined(gid, key): raise Exception("Key was not defined") if selectWhere: select = (select and (str(keyvalues[i]) == - str(codes_get(gid, key)))) + str(grib_get(gid, key)))) else: select = (select and (str(keyvalues[i]) != - str(codes_get(gid, key)))) + str(grib_get(gid, key)))) i += 1 if select: - codes_write(gid, fout) + grib_write(gid, fout) - codes_release(gid) + grib_release(gid) fin.close() fout.close() @@ -301,18 +306,18 @@ class GribTools(object): iid = None if os.path.exists(index_file): - iid = codes_index_read(index_file) + iid = grib_index_read(index_file) print("Use existing index file: %s " % (index_file)) else: for filename in self.filenames: print("Inputfile: %s " % (filename)) if iid is None: - iid = codes_index_new_from_file(filename, index_keys) + iid = grib_index_new_from_file(filename, index_keys) else: - codes_index_add_file(iid, filename) + grib_index_add_file(iid, filename) if iid is not None: - codes_index_write(iid, index_file) + grib_index_write(iid, index_file) print('... index done')