Exemple #1
0
def fcstSounding(ens_obs, sounding_obs, file_name):
    ens_t = theta2Temperature(pt=ens_obs['pt'], p=ens_obs['p'])
    ens_td = qv2Dewpoint(qv=ens_obs['qv'], p=ens_obs['p'])
    ens_p = ens_obs['p']

    pylab.figure(figsize=(8, 10))
    plotSkewTBackground(pylab.gca())

#   print ens_t.shape

    for lde in xrange(ens_obs.shape[0]):
#       print ens_t[lde] - 273.15
#       print ens_p[lde] / 100.

        order = np.argsort(ens_p[lde])

#       print ens_t[lde][order].shape, ens_p[lde][order].shape, ens_td[lde][order].shape
#       print ens_t[lde][order]
#       print ens_p[lde][order]

        plotProfile(ens_t[lde][order] - 273.15, ens_p[lde][order] / 100., color='r', lw=0.5)
        plotProfile(ens_td[lde][order] - 273.15, ens_p[lde][order] / 100., color='g', lw=0.5)

    order = np.argsort(sounding_obs['pres'])
    temp_C = 5. / 9. * (sounding_obs['temp'][order] - 32)
    dewp_C = 5. / 9. * (sounding_obs['dewp'][order] - 32)

    plotProfile(temp_C, sounding_obs['pres'][order], color='k', lw=1.5)
    plotProfile(dewp_C, sounding_obs['pres'][order], color='k', lw=1.5)

    pylab.savefig(file_name)
    pylab.close()
    return
def main():
    base_path = "/caps2/tsupinie/1kmf-control/"
    temp = goshen_1km_temporal(start=14400, end=14400)
    grid = goshen_1km_grid()
    n_ens_members = 40

    x_snd, y_snd = grid.getXY(115, 115)
    ens_anal = loadEnsemble(base_path, n_ens_members, temp.getTimes(), (['u', 'v', 'pt', 'p', 'qv'], getSndParams), {'x':x_snd, 'y':y_snd}, fcst=False)
    ens_fcst = loadEnsemble(base_path, n_ens_members, temp.getTimes(), (['u', 'v', 'pt', 'p', 'qv'], getSndParams), {'x':x_snd, 'y':y_snd}, fcst=True)

    robs = RadarObsFile("qc/1km/KCYS.20090605.220000")
    grdbas = nio.open_file("%s/ena001.hdfgrdbas" % base_path, mode='r', format='hdf')
    weights = computeInflWeights(grdbas.variables['zp'], robs.heights, grid, robs['Z'] > 20., 6000, 0)

    ens_mean = np.empty(ens_anal.shape[1:], dtype=ens_anal.dtype)
    ens_preinfl = np.empty(ens_anal.shape, dtype=ens_anal.dtype)

    for field in ens_anal.dtype.fields.iterkeys():
        ens_mean[field] = ens_anal[field].mean(axis=0)
        ens_preinfl[field] = undoAdaptiveInfl(ens_fcst[field], ens_anal[field], 0.9)

    for wdt, (t_ens, time_str) in enumerate(zip(temp, temp.getStrings("%d %B %Y %H%M UTC"))):
        pylab.figure(figsize=(8, 10))
        plotSkewTBackground(pylab.gca())

        for n_ens in xrange(n_ens_members):
            pres_profile = ens_preinfl['p'][n_ens, wdt]
            temp_profile = theta2Temperature(pt=ens_preinfl['pt'][n_ens, wdt], p=ens_preinfl['p'][n_ens, wdt])
            dewp_profile = qv2Dewpoint(qv=ens_preinfl['qv'][n_ens, wdt], p=ens_preinfl['p'][n_ens, wdt])

            if np.any(temp_profile < dewp_profile):
                print "Dewpoint greater than temperature at t=%06d, n=%03d" % (t_ens, n_ens + 1), np.where(temp_profile < dewp_profile)

            plotProfile(temp_profile - 273.15, pres_profile / 100., color='r', linewidth=0.5)
            plotProfile(dewp_profile - 273.15, pres_profile / 100., color='g', linewidth=0.5)

        mean_pres_profile = ens_mean['p'][wdt]
        mean_temp_profile = theta2Temperature(pt=ens_mean['pt'][wdt], p=ens_mean['p'][wdt])
        mean_dewp_profile = qv2Dewpoint(qv=ens_mean['qv'][wdt], p=ens_mean['p'][wdt])

        plotProfile(mean_temp_profile - 273.15, mean_pres_profile / 100., color='k', linewidth=1.5)
        plotProfile(mean_dewp_profile - 273.15, mean_pres_profile / 100., color='k', linewidth=1.5)

        pylab.suptitle("Ensemble Soundings at %s" % time_str)
        pylab.savefig("fcst_snd_1kmf-control_preinfl_%06d.png" % t_ens)
    return
Exemple #3
0
def getSurface(**kwargs):
    sfc = np.empty(kwargs['u'].shape, dtype=[('u', np.float32), ('v', np.float32), ('pt', np.float32), ('td', np.float32)])

    sfc['u'] = kwargs['u']
    sfc['v'] = kwargs['v']
    sfc['pt'] = kwargs['pt'] 
    sfc['td'] = 9. / 5. * (qv2Dewpoint(**kwargs) - 273.15) + 32
    return sfc
def getTempDewpRefl(**kwargs):
    tempdewprefl = np.empty(kwargs['pt'].shape, dtype=[('t', np.float32), ('td', np.float32), ('u', np.float32), ('v', np.float32)])

    tempdewprefl['t'] = theta2Temperature(**kwargs)
    tempdewprefl['td'] = qv2Dewpoint(**kwargs)
    tempdewprefl['u'] = kwargs['u']
    tempdewprefl['v'] = kwargs['v']
    return tempdewprefl
Exemple #5
0
def getTempDewpRefl(**kwargs):
    tempdewprefl = np.empty(kwargs['pt'].shape, dtype=[('t', np.float32), ('td', np.float32), ('u', np.float32), ('v', np.float32), ('refl', np.float32)])

    tempdewprefl['t'] = theta2Temperature(**kwargs)
    tempdewprefl['td'] = qv2Dewpoint(**kwargs)
    tempdewprefl['u'] = kwargs['u']
    tempdewprefl['v'] = kwargs['v']
    tempdewprefl['refl'] = computeReflectivity(**kwargs)
    return tempdewprefl
Exemple #6
0
def getSurface(**kwargs):
    sfc = np.empty(kwargs['u'].shape,
                   dtype=[('u', np.float32), ('v', np.float32),
                          ('pt', np.float32), ('td', np.float32)])

    sfc['u'] = kwargs['u']
    sfc['v'] = kwargs['v']
    sfc['pt'] = kwargs['pt']
    sfc['td'] = 9. / 5. * (qv2Dewpoint(**kwargs) - 273.15) + 32
    return sfc
Exemple #7
0
def main():
    base_time = datetime(2009, 6, 5, 18, 0, 0)
    epoch = datetime(1970, 1, 1, 0, 0, 0)
    times_seconds = range(14700, 18300, 300)
    times = [ base_time + timedelta(seconds=t) for t in times_seconds ]

    proj = setupMapProjection(goshen_1km_proj, goshen_1km_gs)
    map = Basemap(**proj)

    sounding_obs = loadObs(['soundings.pkl'], times, map, sounding_obs=['soundings.pkl'])

    obs_x, obs_y = map(sounding_obs['longitude'], sounding_obs['latitude'])
    obs_z = sounding_obs['elevation']

    start_time = floor(sounding_obs['time'].min() / 300) * 300 - (base_time - epoch).total_seconds()
    sonde_ids = np.unique1d(sounding_obs['id'])

    sondes = {}
    for id in sonde_ids:
        sondes[id] = {'obs':[], 'ens':[] }

    for time in times_seconds[times_seconds.index(start_time):]:
        time_epoch = time + (base_time - epoch).total_seconds()
#       time_base = (epoch + timedelta(seconds=time) - base_time).total_seconds()
        files = glob.glob("/caps1/tsupinie/1km-control-20120712/ena???.hdf%06d" % time)

        round_times = np.round(sounding_obs['time'] / 300) * 300
        time_idxs = np.where(round_times == time_epoch)

        ens_obs, ens_members, ens_times = loadAndInterpolateEnsemble(files, ['u', 'v', 'pt', 'p', 'qv'], getObsData, "/caps1/tsupinie/1km-control-20120712/ena001.hdfgrdbas", 
            {'z':obs_z[time_idxs], 'y':obs_y[time_idxs], 'x':obs_x[time_idxs]}, agl=False, wrap=True)
        
        ens_obs = np.transpose(ens_obs, axes=(2, 0, 1))

        for sonde in sonde_ids:
            sonde_idxs = np.where(sounding_obs['id'][time_idxs] == sonde)

            sondes[sonde]['obs'].extend(sounding_obs[time_idxs[0][sonde_idxs]])
            sondes[sonde]['ens'].extend([ e[:,0] for e in ens_obs[sonde_idxs] ])
    
    for sonde in sonde_ids:
        ens_obs = np.array(sondes[sonde]['ens'], dtype=sondes[sonde]['ens'][0].dtype)
        ens_temp = theta2Temperature(pt=ens_obs['pt'], p=ens_obs['p'])
        ens_dewp = qv2Dewpoint(qv=ens_obs['qv'], p=ens_obs['p'])

        data_obs = np.array(sondes[sonde]['obs'], dtype=sondes[sonde]['obs'][0].dtype)
        order = np.argsort(data_obs['time'])

        time = data_obs['time'][order] - (base_time - epoch).total_seconds()
        obs_temp = data_obs['temp'][order] + 273.15
        obs_dewp = data_obs['dewp'][order] + 273.15

#       pylab.figure(figsize=(8, 10), dpi=100)
#       pylab.axes((0, 0, 1, 1))

        pylab.figure()

        for ens in xrange(ens_obs.shape[1]):
#           plotSounding(None, t=ens_temp[:, ens][order], td=ens_dewp[:, ens][order], p=ens_obs['p'][:, ens][order] / 100., u=ens_obs['u'][:, ens][order], v=ens_obs['v'][:, ens][order])
            pylab.subplot(211)
            pylab.plot(time, ens_temp[:, ens][order], 'r-', linewidth=0.5)
            pylab.plot(time, ens_dewp[:, ens][order], 'g-', linewidth=0.5)

            pylab.subplot(212)
            pylab.plot(time, ens_obs['p'][:, ens][order] / 100., 'b-', linewidth=0.5)

#       plotSounding(None, t=obs_temp, td=obs_dewp, p=data_obs['pres'][order], u=np.ones(order.shape), v=np.zeros(order.shape))
        pylab.subplot(211)
        pylab.plot(time, obs_temp, 'k-', linewidth=1.0)
        pylab.plot(time, obs_dewp, 'k-', linewidth=1.0)

        pylab.subplot(212)
        pylab.plot(time, data_obs['pres'][order], 'k-', linewidth=1.0)

        sonde_name = sonde.replace('/', '_')
        pylab.savefig("sonde_swath_%s.png" % sonde_name)

        pylab.close()       
    return
def main():
    base_path = "/caps2/tsupinie/1kmf-control/"
    temp = goshen_1km_temporal(start=14400, end=14400)
    grid = goshen_1km_grid()
    n_ens_members = 40

    x_snd, y_snd = grid.getXY(115, 115)
    ens_anal = loadEnsemble(base_path,
                            n_ens_members,
                            temp.getTimes(),
                            (['u', 'v', 'pt', 'p', 'qv'], getSndParams), {
                                'x': x_snd,
                                'y': y_snd
                            },
                            fcst=False)
    ens_fcst = loadEnsemble(base_path,
                            n_ens_members,
                            temp.getTimes(),
                            (['u', 'v', 'pt', 'p', 'qv'], getSndParams), {
                                'x': x_snd,
                                'y': y_snd
                            },
                            fcst=True)

    robs = RadarObsFile("qc/1km/KCYS.20090605.220000")
    grdbas = nio.open_file("%s/ena001.hdfgrdbas" % base_path,
                           mode='r',
                           format='hdf')
    weights = computeInflWeights(grdbas.variables['zp'], robs.heights, grid,
                                 robs['Z'] > 20., 6000, 0)

    ens_mean = np.empty(ens_anal.shape[1:], dtype=ens_anal.dtype)
    ens_preinfl = np.empty(ens_anal.shape, dtype=ens_anal.dtype)

    for field in ens_anal.dtype.fields.iterkeys():
        ens_mean[field] = ens_anal[field].mean(axis=0)
        ens_preinfl[field] = undoAdaptiveInfl(ens_fcst[field], ens_anal[field],
                                              0.9)

    for wdt, (t_ens, time_str) in enumerate(
            zip(temp, temp.getStrings("%d %B %Y %H%M UTC"))):
        pylab.figure(figsize=(8, 10))
        plotSkewTBackground(pylab.gca())

        for n_ens in xrange(n_ens_members):
            pres_profile = ens_preinfl['p'][n_ens, wdt]
            temp_profile = theta2Temperature(pt=ens_preinfl['pt'][n_ens, wdt],
                                             p=ens_preinfl['p'][n_ens, wdt])
            dewp_profile = qv2Dewpoint(qv=ens_preinfl['qv'][n_ens, wdt],
                                       p=ens_preinfl['p'][n_ens, wdt])

            if np.any(temp_profile < dewp_profile):
                print "Dewpoint greater than temperature at t=%06d, n=%03d" % (
                    t_ens, n_ens + 1), np.where(temp_profile < dewp_profile)

            plotProfile(temp_profile - 273.15,
                        pres_profile / 100.,
                        color='r',
                        linewidth=0.5)
            plotProfile(dewp_profile - 273.15,
                        pres_profile / 100.,
                        color='g',
                        linewidth=0.5)

        mean_pres_profile = ens_mean['p'][wdt]
        mean_temp_profile = theta2Temperature(pt=ens_mean['pt'][wdt],
                                              p=ens_mean['p'][wdt])
        mean_dewp_profile = qv2Dewpoint(qv=ens_mean['qv'][wdt],
                                        p=ens_mean['p'][wdt])

        plotProfile(mean_temp_profile - 273.15,
                    mean_pres_profile / 100.,
                    color='k',
                    linewidth=1.5)
        plotProfile(mean_dewp_profile - 273.15,
                    mean_pres_profile / 100.,
                    color='k',
                    linewidth=1.5)

        pylab.suptitle("Ensemble Soundings at %s" % time_str)
        pylab.savefig("fcst_snd_1kmf-control_preinfl_%06d.png" % t_ens)
    return
Exemple #9
0
def main():
    base_time = datetime(2009, 6, 5, 18, 0, 0)
    epoch = datetime(1970, 1, 1, 0, 0, 0)
    times_seconds = range(14700, 18300, 300)
    times = [base_time + timedelta(seconds=t) for t in times_seconds]

    proj = setupMapProjection(goshen_1km_proj, goshen_1km_gs)
    map = Basemap(**proj)

    sounding_obs = loadObs(['soundings.pkl'],
                           times,
                           map,
                           sounding_obs=['soundings.pkl'])

    obs_x, obs_y = map(sounding_obs['longitude'], sounding_obs['latitude'])
    obs_z = sounding_obs['elevation']

    start_time = floor(sounding_obs['time'].min() / 300) * 300 - (
        base_time - epoch).total_seconds()
    sonde_ids = np.unique1d(sounding_obs['id'])

    sondes = {}
    for id in sonde_ids:
        sondes[id] = {'obs': [], 'ens': []}

    for time in times_seconds[times_seconds.index(start_time):]:
        time_epoch = time + (base_time - epoch).total_seconds()
        #       time_base = (epoch + timedelta(seconds=time) - base_time).total_seconds()
        files = glob.glob(
            "/caps1/tsupinie/1km-control-20120712/ena???.hdf%06d" % time)

        round_times = np.round(sounding_obs['time'] / 300) * 300
        time_idxs = np.where(round_times == time_epoch)

        ens_obs, ens_members, ens_times = loadAndInterpolateEnsemble(
            files, ['u', 'v', 'pt', 'p', 'qv'],
            getObsData,
            "/caps1/tsupinie/1km-control-20120712/ena001.hdfgrdbas", {
                'z': obs_z[time_idxs],
                'y': obs_y[time_idxs],
                'x': obs_x[time_idxs]
            },
            agl=False,
            wrap=True)

        ens_obs = np.transpose(ens_obs, axes=(2, 0, 1))

        for sonde in sonde_ids:
            sonde_idxs = np.where(sounding_obs['id'][time_idxs] == sonde)

            sondes[sonde]['obs'].extend(sounding_obs[time_idxs[0][sonde_idxs]])
            sondes[sonde]['ens'].extend([e[:, 0] for e in ens_obs[sonde_idxs]])

    for sonde in sonde_ids:
        ens_obs = np.array(sondes[sonde]['ens'],
                           dtype=sondes[sonde]['ens'][0].dtype)
        ens_temp = theta2Temperature(pt=ens_obs['pt'], p=ens_obs['p'])
        ens_dewp = qv2Dewpoint(qv=ens_obs['qv'], p=ens_obs['p'])

        data_obs = np.array(sondes[sonde]['obs'],
                            dtype=sondes[sonde]['obs'][0].dtype)
        order = np.argsort(data_obs['time'])

        time = data_obs['time'][order] - (base_time - epoch).total_seconds()
        obs_temp = data_obs['temp'][order] + 273.15
        obs_dewp = data_obs['dewp'][order] + 273.15

        #       pylab.figure(figsize=(8, 10), dpi=100)
        #       pylab.axes((0, 0, 1, 1))

        pylab.figure()

        for ens in xrange(ens_obs.shape[1]):
            #           plotSounding(None, t=ens_temp[:, ens][order], td=ens_dewp[:, ens][order], p=ens_obs['p'][:, ens][order] / 100., u=ens_obs['u'][:, ens][order], v=ens_obs['v'][:, ens][order])
            pylab.subplot(211)
            pylab.plot(time, ens_temp[:, ens][order], 'r-', linewidth=0.5)
            pylab.plot(time, ens_dewp[:, ens][order], 'g-', linewidth=0.5)

            pylab.subplot(212)
            pylab.plot(time,
                       ens_obs['p'][:, ens][order] / 100.,
                       'b-',
                       linewidth=0.5)


#       plotSounding(None, t=obs_temp, td=obs_dewp, p=data_obs['pres'][order], u=np.ones(order.shape), v=np.zeros(order.shape))
        pylab.subplot(211)
        pylab.plot(time, obs_temp, 'k-', linewidth=1.0)
        pylab.plot(time, obs_dewp, 'k-', linewidth=1.0)

        pylab.subplot(212)
        pylab.plot(time, data_obs['pres'][order], 'k-', linewidth=1.0)

        sonde_name = sonde.replace('/', '_')
        pylab.savefig("sonde_swath_%s.png" % sonde_name)

        pylab.close()
    return