Ejemplo n.º 1
0
def main():

	case=7
	mesocase=get_mesocase(case)
	mesofiles=mesocase['files']
	st = mesocase['dates'][0]
	en = mesocase['dates'][1]
	stations=mesocase['stations']
	var=['TMP','RELH','PMSL','DRCT']
	hl=[]
	xticks = pd.date_range(start=st,end=en, freq='3H')
	fig,ax = plt.subplots(len(var),1,figsize=(13,10),sharex=True)
	for i,f in enumerate(mesofiles):
		df=mf.parse_mesowest_excel(f)
		df2=df[st:en]
		for j in range(len(var)):
			l=ax[j].plot(df2.index,df2[var[j]],'-o')
			ax[j].invert_xaxis()
			ax[j].set_xticks(xticks)
			ax[j].set_xlim([en,st])
			if j == 0: hl.append(l)

	deg_sign= u'\N{DEGREE SIGN}'
	lns = [line[0] for line in hl]
	ax[0].legend(lns, stations, loc=0)
	ax[0].set_ylabel('Temperature [' +deg_sign+'C]')
	ax[1].set_ylim([40,105])
	ax[1].set_ylabel('Relative humidity [%]')
	ax[2].set_ylim([1015,1025])
	ax[2].set_ylabel('Pressure MSL [hPa]')
	
	ax[3].set_yticks(range(0,360+60,60))
	ax[3].set_ylabel('Wind direction [deg]')
	datefmt = dates.DateFormatter('%d\n%H')
	ax[3].xaxis.set_major_formatter(datefmt)
	ax[3].set_xlabel(r'$\Leftarrow$'+' Time [UTC]')
	
	t1='METAR surface observations (source: Mesowest)'
	t2='\nDate: ' + st.strftime('%b-%Y')
	plt.suptitle(t1+t2)
	plt.show(block=False)
Ejemplo n.º 2
0
        ax=None,
        homedir=None,
        color_surf=(0, 0, 0.5, 0.5),
        color_wp=(0, 0.5, 0, 0.5),
        add_date=False,
        wprof_hgt=None):

    " process gapflow analysis"

    " first index is mesowest file, second index is \
    BBY (1 or more files) "

    f = get_filenames(case, homedir)

    " parse mesowest data "
    meso = mf.parse_mesowest_excel(f[0])
    t = get_times(case)
    mpress = meso.loc[t[0]:t[1]]['PMSL'].values
    mesoidx = meso.loc[t[0]:t[1]].index

    " parse surface BBY data "
    if len(f[1]) > 1:
        '  more than one day of obs '
        surf = mf.parse_surface(f[1][0])
        for ff in f[1][1:]:
            surf = surf.append(mf.parse_surface(ff))
    else:
        ' only one day '
        surf = mf.parse_surface(f[1][0])

    " resample to 1min so we can find \
Ejemplo n.º 3
0
def run(case, tta=None, plot_theory=False, grid=True, ax=None, homedir=None,
        color_surf=(0, 0, 0.5, 0.5),color_wp=(0, 0.5, 0, 0.5),
        add_date=False, wprof_hgt=None):

    " process gapflow analysis"

    " first index is mesowest file, second index is \
    BBY (1 or more files) "
    f = get_filenames(case,homedir)

    " parse mesowest data "
    meso = mf.parse_mesowest_excel(f[0])
    t = get_times(case)
    mpress = meso.loc[t[0]: t[1]]['PMSL'].values
    mesoidx = meso.loc[t[0]: t[1]].index

    " parse surface BBY data "
    if len(f[1]) > 1:
        '  more than one day of obs '
        surf = mf.parse_surface(f[1][0])
        for ff in f[1][1:]:
            surf = surf.append(mf.parse_surface(ff))
    else:
        ' only one day '
        surf = mf.parse_surface(f[1][0])

    " resample to 1min so we can find \
    mesowest index "
    surf = surf.resample('1T').interpolate()

    " adjust bias is mesowest in case 1 and 2 "
    if case in [1, 2]:
        bias = 9
    else:
        bias = 0
    spress = surf.loc[mesoidx]['press'].values - bias

    " BBY and mesowest pressure difference "
    pressDiff = spress - mpress

    " BBY surface winds "
    swspd = surf.loc[mesoidx]['wspd'].values
    swdir = surf.loc[mesoidx]['wdir'].values
    ucomp = -swspd*np.sin(np.radians(swdir))

    " gapflow dataframe "
    d = {'ucomp': ucomp, 'wspd': swspd, 'wdir': swdir,
         'pdiff': pressDiff, 'Bpress': spress, 'Kpress': mpress}
    gapflow = pd.DataFrame(data=d, index=mesoidx)

    " removes rows with NaN "
    gapflow = gapflow[np.isfinite(gapflow['Kpress'])]

    " add wind profiler data at target altitude "
    out = get_windprof(case,
                       gapflow_time=gapflow.index,
                       top_hgt_km=wprof_hgt,
                       homedir=homedir)
    wp_wspd, wp_wdir = out
    wp_ucomp = -wp_wspd*np.sin(np.radians(wp_wdir))
    gapflow['wp_ws'] = wp_wspd
    gapflow['wp_wd'] = wp_wdir
    gapflow['wp_ucomp'] = wp_ucomp

    " Mass etal 95 equation "
    # blh = get_BLH(case)
    blh = 500  #[m]
    massPa, massU = mass_eq(air_density=1.24, BLH=blh)
    path = make_polygon(massPa, massU)

    gapflow = check_polygon(gapflow, path)
    # gapflow['gapflow'] = ((gapflow.poly is True) & (gapflow.wdir <= 120))
#    sub = gapflow[(gapflow.poly is True) & (gapflow.wdir <= 120)]

    " theoretical lines "
    if plot_theory:
        if ax is None:
            fig, ax = plt.subplots(figsize=(8, 7))
            ax.set_xlabel('Pressure difference, BBY-SCK [hPa]')
            ax.set_ylabel('BBY zonal wind [m s-1]')
        # ax.scatter(gapflow['pdiff'], gapflow['ucomp'],
        #            color=color_surf, label='surf')
        # ax.scatter(gapflow['pdiff'], gapflow['wp_ucomp'],
        #            color=color_wp, label='wp')
        # ax.scatter(sub['pdiff'], sub['ucomp'], color='r')
        ax.plot(massPa/100, massU[0], marker=None)
        ax.plot(massPa/100, massU[1], linestyle='--', color='r')
        ax.plot(massPa/100, massU[2], linestyle='--', color='r')
        if grid:
            ax.grid(True)
        ax.set_xlim([-12, 1])
        ax.set_ylim([-20, 15])
        ini = mesoidx[0]
        end = mesoidx[-1]
        date = ini.strftime('%b-%Y ')
        beg = ini.strftime('%d')
        end = end.strftime('%d')
#        ax.text(0.03, 0.76, timetxt.format(str(case).zfill(2),
#                                           date, beg, end),
        if add_date is True:
            if beg == end:
                ax.text(0.03, 0.85,'{} {}'.format(beg,date),
                        fontsize=12,
                        transform=ax.transAxes)
            else:
                ax.text(0.03, 0.85,'{}-{} {}'.format(beg,end,date),
                        fontsize=12,
                        transform=ax.transAxes)

    return gapflow