def get_lakefraction(path='data/geophys_lam_na_0.5deg_170x158_class', margin=20): r = RPN(path) data = r.get_first_record_for_name_and_level('VF', level=3) r.close() return data[margin:-margin, margin:-margin, 0] pass
def calculate_monthly_sum( data_folder="/home/huziy/skynet3_rech1/gemclim/quebec/Samples", month=6, year=1999, prefix="quebec_220x220_", var_name="GWDI", level=-1, ): suffix = name_format % (year, month) folder_for_month = os.path.join(data_folder, prefix + suffix) count = 0.0 result_data = None if not os.path.isdir(folder_for_month): return 0, 0 for file in os.listdir(folder_for_month): if not file.startswith("pm"): continue the_path = os.path.join(folder_for_month, file) print(the_path) r = RPN(the_path) the_data = r.get_first_record_for_name_and_level(var_name, level=level) if result_data == None: result_data = the_data else: result_data += the_data count += 1 r.close() return result_data, count pass
def test_FV_AV(path='data/pm1957090100_00589248p'): r = RPN(path) av = r.get_first_record_for_name('AV') fv = r.get_first_record_for_name_and_level(varname='FV', level=5) nx, ny = av[:, :, 0].shape ratio = np.zeros((nx, ny)) for i in range(nx): for j in range(ny): if fv[i, j] != 0: ratio[i, j] = av[i, j] / fv[i, j] print(np.max(av)) print(np.max(fv)) print(np.max(av) / np.max(fv)) plt.figure() plt.imshow(av[:, :, 0]) plt.colorbar() plt.figure() plt.imshow(fv[:, :, 0]) plt.colorbar() plt.show()
def calculate_monthly_sum( data_folder='/home/huziy/skynet3_rech1/gemclim/quebec/Samples', month=6, year=1999, prefix='quebec_220x220_', var_name='GWDI', level=-1): suffix = name_format % (year, month) folder_for_month = os.path.join(data_folder, prefix + suffix) count = 0.0 result_data = None if not os.path.isdir(folder_for_month): return 0, 0 for file in os.listdir(folder_for_month): if not file.startswith('pm'): continue the_path = os.path.join(folder_for_month, file) print(the_path) r = RPN(the_path) the_data = r.get_first_record_for_name_and_level(var_name, level=level) if result_data == None: result_data = the_data else: result_data += the_data count += 1 r.close() return result_data, count pass
def test(): path = 'data/pm1957090100_00589248p' #path = 'data/crcm_sim_with_lakes/data_selected/Coupled11_36cpu_Test_C_198505/pm1957090100_00727920p' rpn = RPN(path) data = rpn.get_first_record_for_name_and_level(varname = 'FV', level = 7 ) lons, lats = rpn.get_longitudes_and_latitudes() print(lons.shape, np.min(lons), np.max(lons)) print(lats.shape, np.min(lats), np.max(lats)) # print data.shape # plot_field_2d(lons, lats, data[:,:,0]) print(data.shape) plot_field_2d(lons, lats, data) plt.savefig('plot.png') #plt.figure() #plt.imshow(np.transpose(lons[:,:]), origin = 'lower') #plt.imshow(np.transpose(data[:,:]), origin = 'lower') #for plotting in order to see i,j we supply j,i plt.show()
def test_FV_AV(path = 'data/pm1957090100_00589248p'): r = RPN(path) av = r.get_first_record_for_name('AV') fv = r.get_first_record_for_name_and_level(varname = 'FV', level = 5) nx, ny = av[:,:,0].shape ratio = np.zeros((nx, ny)) for i in range(nx): for j in range(ny): if fv[i, j] != 0: ratio[i, j] = av[i, j] / fv[i, j] print(np.max(av)) print(np.max(fv)) print(np.max(av) / np.max(fv)) plt.figure() plt.imshow(av[:,:,0]) plt.colorbar() plt.figure() plt.imshow(fv[:,:,0]) plt.colorbar() plt.show()
def calculate_time_integral( data_folder='data/crcm_sim_with_lakes/data_selected', start_date=None, end_date=None, var_name='FV', level=7, level_kind=level_kinds.ARBITRARY, name_pattern='Coupled11_36cpu_Test_C_%Y%m', dt=3 * 60 * 60, file_size_limit_bytes=None): date = start_date time_integral = None while date <= end_date: current_folder = os.path.join(data_folder, date.strftime(name_pattern)) for file in os.listdir(current_folder): if not file.startswith('pm'): #skip non physics files continue file_path = os.path.join(current_folder, file) if file_size_limit_bytes != None: if os.path.getsize(file_path) < file_size_limit_bytes: continue r = RPN(file_path) print('current folder ', current_folder) print('reading file {0}'.format(file)) data = r.get_first_record_for_name_and_level(varname=var_name, level=level, level_kind=level_kind) data = data[:, :, 0] if date == start_date: time_integral = data else: time_integral += data r.close() #add month if date.month == 12: date = datetime(date.year + 1, 1, date.day, date.hour, date.minute) else: date = datetime(date.year, date.month + 1, date.day, date.hour, date.minute) return time_integral * dt pass
def calculate_time_integral(data_folder = 'data/crcm_sim_with_lakes/data_selected', start_date = None, end_date = None, var_name = 'FV', level = 7, level_kind = level_kinds.ARBITRARY, name_pattern = 'Coupled11_36cpu_Test_C_%Y%m', dt = 3 * 60 * 60, file_size_limit_bytes = None ): date = start_date time_integral = None while date <= end_date: current_folder = os.path.join(data_folder, date.strftime(name_pattern)) for file in os.listdir(current_folder): if not file.startswith('pm'): #skip non physics files continue file_path = os.path.join(current_folder, file) if file_size_limit_bytes != None: if os.path.getsize(file_path) < file_size_limit_bytes: continue r = RPN(file_path) print('current folder ', current_folder) print('reading file {0}'.format(file)) data = r.get_first_record_for_name_and_level(varname = var_name, level = level, level_kind = level_kind) data = data[:,:,0] if date == start_date: time_integral = data else: time_integral += data r.close() #add month if date.month == 12: date = datetime(date.year + 1, 1, date.day, date.hour, date.minute) else: date = datetime(date.year, date.month + 1, date.day, date.hour, date.minute) return time_integral * dt pass
def get_lakefraction(path = 'data/geophys_lam_na_0.5deg_170x158_class', margin = 20): r = RPN(path) data = r.get_first_record_for_name_and_level('VF', level = 3) r.close() return data[margin:-margin, margin:-margin, 0] pass