예제 #1
0
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
예제 #2
0
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
예제 #3
0
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()
예제 #4
0
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
예제 #5
0
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()
예제 #6
0
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()
예제 #7
0
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
예제 #8
0
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
예제 #9
0
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