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
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
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
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
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