Changeset aa275fc in flex_extract.git for source/python/classes/EcFlexpart.py
- Timestamp:
- Oct 9, 2018, 9:13:15 PM (5 years ago)
- Branches:
- master, ctbto, dev
- Children:
- efba13f
- Parents:
- c5074d2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
source/python/classes/EcFlexpart.py
rc5074d2 raa275fc 81 81 from datetime import datetime, timedelta 82 82 import numpy as np 83 from gribapi import grib_set, grib_index_select, grib_new_from_index, grib_get,\ 84 grib_write, grib_get_values, grib_set_values, grib_release,\ 85 grib_index_release, grib_index_get 83 84 from eccodes import (codes_index_select, codes_new_from_index, codes_get, 85 codes_get_values, codes_set_values, codes_set, 86 codes_write, codes_release, codes_new_from_index, 87 codes_index_release) 86 88 87 89 # software specific classes and modules from flex_extract … … 789 791 790 792 for i in range(len(index_keys)): 791 grib_index_select(iid, index_keys[i], prod[i])793 codes_index_select(iid, index_keys[i], prod[i]) 792 794 793 795 # get first id from current product 794 gid = grib_new_from_index(iid)796 gid = codes_new_from_index(iid) 795 797 796 798 # if there is no data for this specific time combination / product … … 800 802 801 803 # create correct timestamp from the three time informations 802 cdate = str( grib_get(gid, 'date'))803 ctime = '{:0>2}'.format( grib_get(gid, 'time')/100)804 cstep = '{:0>3}'.format( grib_get(gid, 'step'))804 cdate = str(codes_get(gid, 'date')) 805 ctime = '{:0>2}'.format(codes_get(gid, 'time')/100) 806 cstep = '{:0>3}'.format(codes_get(gid, 'step')) 805 807 t_date = datetime.strptime(cdate + ctime, '%Y%m%d%H') 806 808 t_dt = t_date + timedelta(hours=int(cstep)) … … 834 836 if not gid: 835 837 break 836 cparamId = str( grib_get(gid, 'paramId'))837 step = grib_get(gid, 'step')838 time = grib_get(gid, 'time')839 ni = grib_get(gid, 'Ni')840 nj = grib_get(gid, 'Nj')838 cparamId = str(codes_get(gid, 'paramId')) 839 step = codes_get(gid, 'step') 840 time = codes_get(gid, 'time') 841 ni = codes_get(gid, 'Ni') 842 nj = codes_get(gid, 'Nj') 841 843 if cparamId in valsdict.keys(): 842 values = grib_get_values(gid)844 values = codes_get_values(gid) 843 845 vdp = valsdict[cparamId] 844 846 svdp = svalsdict[cparamId] … … 879 881 values = svdp[0] 880 882 881 grib_set_values(gid, values)883 codes_set_values(gid, values) 882 884 883 885 if c.maxstep > 12: 884 grib_set(gid, 'step', max(0, step-2*int(c.dtime)))886 codes_set(gid, 'step', max(0, step-2*int(c.dtime))) 885 887 else: 886 grib_set(gid, 'step', 0)887 grib_set(gid, 'time', t_m2dt.hour*100)888 grib_set(gid, 'date', int(t_m2dt.strftime('%Y%m%d')))888 codes_set(gid, 'step', 0) 889 codes_set(gid, 'time', t_m2dt.hour*100) 890 codes_set(gid, 'date', int(t_m2dt.strftime('%Y%m%d'))) 889 891 890 892 with open(fnout, 'w') as f_handle: 891 grib_write(gid, f_handle)893 codes_write(gid, f_handle) 892 894 893 895 if c.basetime: … … 909 911 910 912 values = svdp[3] 911 grib_set_values(gid, values)912 grib_set(gid, 'step', 0)913 codes_set_values(gid, values) 914 codes_set(gid, 'step', 0) 913 915 truedatetime = t_m2dt + timedelta(hours= 914 2*int(c.dtime))915 grib_set(gid, 'time', truedatetime.hour * 100)916 grib_set(gid, 'date', truedatetime.year * 10000 +917 truedatetime.month * 100 +918 truedatetime.day)916 2*int(c.dtime)) 917 codes_set(gid, 'time', truedatetime.hour * 100) 918 codes_set(gid, 'date', truedatetime.year * 10000 + 919 truedatetime.month * 100 + 920 truedatetime.day) 919 921 with open(hnout, 'w') as h_handle: 920 grib_write(gid, h_handle)922 codes_write(gid, h_handle) 921 923 922 924 #values = (svdp[1]+svdp[2])/2. … … 926 928 values = disaggregation.dapoly(list(reversed(svdp))) 927 929 928 grib_set(gid, 'step', 0)930 codes_set(gid, 'step', 0) 929 931 truedatetime = t_m2dt + timedelta(hours=int(c.dtime)) 930 grib_set(gid, 'time', truedatetime.hour * 100)931 grib_set(gid, 'date', truedatetime.year * 10000 +932 codes_set(gid, 'time', truedatetime.hour * 100) 933 codes_set(gid, 'date', truedatetime.year * 10000 + 932 934 truedatetime.month * 100 + 933 935 truedatetime.day) 934 grib_set_values(gid, values)936 codes_set_values(gid, values) 935 937 with open(gnout, 'w') as g_handle: 936 grib_write(gid, g_handle)937 938 grib_release(gid)939 940 gid = grib_new_from_index(iid)941 942 grib_index_release(iid)938 codes_write(gid, g_handle) 939 940 codes_release(gid) 941 942 gid = codes_new_from_index(iid) 943 944 codes_index_release(iid) 943 945 944 946 return … … 1014 1016 1015 1017 for i in range(len(index_keys)): 1016 grib_index_select(iid, index_keys[i], prod[i])1018 codes_index_select(iid, index_keys[i], prod[i]) 1017 1019 1018 1020 # get first id from current product 1019 gid = grib_new_from_index(iid)1021 gid = codes_new_from_index(iid) 1020 1022 1021 1023 # if there is no data for this specific time combination / product … … 1032 1034 1033 1035 # create correct timestamp from the three time informations 1034 cdate = str( grib_get(gid, 'date'))1035 ctime = '{:0>2}'.format( grib_get(gid, 'time')/100)1036 cstep = '{:0>3}'.format( grib_get(gid, 'step'))1036 cdate = str(codes_get(gid, 'date')) 1037 ctime = '{:0>2}'.format(codes_get(gid, 'time')/100) 1038 cstep = '{:0>3}'.format(codes_get(gid, 'step')) 1037 1039 timestamp = datetime.strptime(cdate + ctime, '%Y%m%d%H') 1038 1040 timestamp += timedelta(hours=int(cstep)) … … 1062 1064 if not gid: 1063 1065 break 1064 paramId = grib_get(gid, 'paramId')1065 gridtype = grib_get(gid, 'gridType')1066 levtype = grib_get(gid, 'typeOfLevel')1066 paramId = codes_get(gid, 'paramId') 1067 gridtype = codes_get(gid, 'gridType') 1068 levtype = codes_get(gid, 'typeOfLevel') 1067 1069 if paramId == 77: # ETADOT 1068 grib_write(gid, fdict['21'])1070 codes_write(gid, fdict['21']) 1069 1071 elif paramId == 130: # T 1070 grib_write(gid, fdict['11'])1072 codes_write(gid, fdict['11']) 1071 1073 elif paramId == 131 or paramId == 132: # U, V wind component 1072 grib_write(gid, fdict['10'])1074 codes_write(gid, fdict['10']) 1073 1075 elif paramId == 133 and gridtype != 'reduced_gg': # Q 1074 grib_write(gid, fdict['17'])1076 codes_write(gid, fdict['17']) 1075 1077 elif paramId == 133 and gridtype == 'reduced_gg': # Q, gaussian 1076 grib_write(gid, fdict['18'])1078 codes_write(gid, fdict['18']) 1077 1079 elif paramId == 135: # W 1078 grib_write(gid, fdict['19'])1080 codes_write(gid, fdict['19']) 1079 1081 elif paramId == 152: # LNSP 1080 grib_write(gid, fdict['12'])1082 codes_write(gid, fdict['12']) 1081 1083 elif paramId == 155 and gridtype == 'sh': # D 1082 grib_write(gid, fdict['13'])1084 codes_write(gid, fdict['13']) 1083 1085 elif paramId == 246 or paramId == 247: # CLWC, CIWC 1084 1086 # sum cloud liquid water and ice 1085 1087 if not scwc: 1086 scwc = grib_get_values(gid)1088 scwc = codes_get_values(gid) 1087 1089 else: 1088 scwc += grib_get_values(gid)1089 grib_set_values(gid, scwc)1090 grib_set(gid, 'paramId', 201031)1091 grib_write(gid, fdict['22'])1090 scwc += codes_get_values(gid) 1091 codes_set_values(gid, scwc) 1092 codes_set(gid, 'paramId', 201031) 1093 codes_write(gid, fdict['22']) 1092 1094 elif c.wrf and paramId in [129, 138, 155] and \ 1093 1095 levtype == 'hybrid': # Z, VO, D … … 1099 1101 # SD/MSL/TCC/10U/10V/2T/2D/Z/LSM/SDOR/CVL/CVH/SR 1100 1102 # and all ADDPAR parameter 1101 grib_write(gid, fdict['16'])1103 codes_write(gid, fdict['16']) 1102 1104 savedfields.append(paramId) 1103 1105 else: … … 1109 1111 if levtype == 'hybrid' and \ 1110 1112 paramId in [129, 130, 131, 132, 133, 138, 155]: 1111 grib_write(gid, fwrf)1113 codes_write(gid, fwrf) 1112 1114 # sfc layer 1113 1115 elif paramId in wrfpars: 1114 grib_write(gid, fwrf)1116 codes_write(gid, fwrf) 1115 1117 except AttributeError: 1116 1118 pass 1117 1119 1118 grib_release(gid)1119 gid = grib_new_from_index(iid)1120 codes_release(gid) 1121 gid = codes_new_from_index(iid) 1120 1122 1121 1123 for f in fdict.values(): … … 1171 1173 fwrf.close() 1172 1174 1173 grib_index_release(iid)1175 codes_index_release(iid) 1174 1176 1175 1177 return
Note: See TracChangeset
for help on using the changeset viewer.