Evaluation of LES against satellite and ground-based observations

Evaluation of LES against satellite and ground-based observations#

  • The below notebook compares selected simulations against observational targets that were collected from satellite and ground-based retrievals.

  • In case of questions or concerns, please notify Ann Fridlind (ann.fridlind@nasa.gov), Timothy Juliano (tjuliano@ucar.edu), and Florian Tornow (ft2544@columbia.edu).

%run functions_plotting.py 
 
## select simulations to plot
sim_keyword = 'dx100_FixN_noice'  
## load ERA5 fields
era5_1d, era5_2d = load_era5(PATH='../../data_files/')

## load radiosondes
rs_dat = load_rs(t_filter = 7.)

## load DOE ARM site statistics
kazrkollias_dat = load_kazrkollias(t_filter = 6.,aux_dat=rs_dat) ## here using radiosonde profiles to estimate CTT
kazrclough_dat = load_kazrclough(t_filter = 6.) 
aeri_dat = load_aeri(t_filter = 0.5)
radflux_dat = load_radflux(t_filter = 6.)
srfflux_dat = load_flux(t_filter = 6.)

## load CARRA surface fluxes
carra_dat = load_carraflux()

## load MAC-LWP
maclwp_dat = load_maclwp(t_filter = 0.) 
gongiwp_dat = load_iwpgong(t_filter = 0.)

## load MODIS, VIIRS, and SENTINEL retrievals
modis_dat    = load_modis(t_filter = 0.,sza_filter = 65.)
viirs_dat    = load_viirs(t_filter = 0.,sza_filter = 65.)
sentinel_dat = load_sentinel(t_filter = 0.,sza_filter = 65.)

## load CERES retrievals
ceres_dat = load_ceres(t_filter = 0.)

## load CALIPSO retrievals (note the increased time window)
calipso_dat = load_calipso(t_filter = 3.)
../../data_files/theta_temp_rh_sh_uvw_sst_along_trajectory_era5ml_28h_end_2020-03-13-18.nc
../../data_files/anxsondewnpnM1.b1.20200313.052700.cdf
../../data_files/anxsondewnpnM1.b1.20200313.112600.cdf
../../data_files/anxsondewnpnM1.b1.20200313.172600.cdf
../../data_files/anxsondewnpnM1.b1.20200313.232200.cdf
KAZR (Kollias): here using auxiliary field to estimate cloud-top temperature
## load all simulations located in subfolders of the given directory
var_vec_1d = ['hfss','hfls','ts'] # variables with ERA5 (longer time axis)
var_vec_2d = ['theta','qv','ua','va']
df_col_1d,df_col_2d = load_sims('../../output_les/',var_vec_1d,var_vec_2d,t_shift=-2,keyword=sim_keyword)
Loading variables: f(time)
../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
../../output_les/uclales-salsa/sandbox/UCLALES-SALSA_Lx25_dx100_FixN_noice.nc
../../output_les/wrf/sandbox/WRF_Lx25_dx100_FixN_noice.nc
../../output_les/dharma/sandbox/DHARMA_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_DM_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_SM_Lx25_dx100_FixN_noice.nc
../../output_les/sam-pnnl/sandbox/SAM_Lx25_dx100_FixN_noice.nc
../../output_les/icon/sandbox/ICON_Lx25_dx100_FixN_noice.nc
Loading variables: f(time,height)
../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
../../output_les/uclales-salsa/sandbox/UCLALES-SALSA_Lx25_dx100_FixN_noice.nc
../../output_les/wrf/sandbox/WRF_Lx25_dx100_FixN_noice.nc
../../output_les/dharma/sandbox/DHARMA_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_DM_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_SM_Lx25_dx100_FixN_noice.nc
../../output_les/sam-pnnl/sandbox/SAM_Lx25_dx100_FixN_noice.nc
../../output_les/icon/sandbox/ICON_Lx25_dx100_FixN_noice.nc
## plot variables that have only time dependence
plot_1d(pd.concat([df_col_1d,era5_1d,carra_dat,srfflux_dat]),var_vec_1d)
/opt/conda/lib/python3.10/site-packages/matplotlib/axes/_axes.py:1185: RuntimeWarning: All-NaN axis encountered
  miny = np.nanmin(masked_verts[..., 1])
/opt/conda/lib/python3.10/site-packages/matplotlib/axes/_axes.py:1186: RuntimeWarning: All-NaN axis encountered
  maxy = np.nanmax(masked_verts[..., 1])
../../_images/8bf94af8d05a3ac4b333600c9de53202dd25dae8850973b636b6da9bbe1c0496.png
## load all simulations located in subfolders of the given directory
var_vec_1d = ['lwpr','lwpc','iwp','od'] # variables without ERA5 (shorter time axis)
var_vec_2d = ['theta','qv','qlc','qlr','ta'] #,'qic','qis','qig','ua','va','ta']
df_col_1d,df_col_2d = load_sims('../../output_les/',var_vec_1d,var_vec_2d,t_shift=-2,keyword=sim_keyword,diag_zi_ctt=True)
Loading variables: f(time)
../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
lwpr not found in ../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
iwp not found in ../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
od not found in ../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
../../output_les/uclales-salsa/sandbox/UCLALES-SALSA_Lx25_dx100_FixN_noice.nc
../../output_les/wrf/sandbox/WRF_Lx25_dx100_FixN_noice.nc
../../output_les/dharma/sandbox/DHARMA_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_DM_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_SM_Lx25_dx100_FixN_noice.nc
../../output_les/sam-pnnl/sandbox/SAM_Lx25_dx100_FixN_noice.nc
../../output_les/icon/sandbox/ICON_Lx25_dx100_FixN_noice.nc
Loading variables: f(time,height)
../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
qlr not found in ../../output_les/DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
../../output_les/uclales-salsa/sandbox/UCLALES-SALSA_Lx25_dx100_FixN_noice.nc
../../output_les/wrf/sandbox/WRF_Lx25_dx100_FixN_noice.nc
../../output_les/dharma/sandbox/DHARMA_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_DM_Lx25_dx100_FixN_noice.nc
../../output_les/msu-rcc-les/sandbox/MSU_RCC_LES_SM_Lx25_dx100_FixN_noice.nc
../../output_les/sam-pnnl/sandbox/SAM_Lx25_dx100_FixN_noice.nc
../../output_les/icon/sandbox/ICON_Lx25_dx100_FixN_noice.nc
computing inversion height, cloud-top height, and cloud-top temperature
DALES/sandbox/DALES_Lx25_dx100_FixN_noice.nc
dharma/sandbox/DHARMA_Lx25_dx100_FixN_noice.nc
icon/sandbox/ICON_Lx25_dx100_FixN_noice.nc
msu-rcc-les/sandbox/MSU_RCC_LES_DM_Lx25_dx100_FixN_noice.nc
msu-rcc-les/sandbox/MSU_RCC_LES_SM_Lx25_dx100_FixN_noice.nc
sam-pnnl/sandbox/SAM_Lx25_dx100_FixN_noice.nc
uclales-salsa/sandbox/UCLALES-SALSA_Lx25_dx100_FixN_noice.nc
wrf/sandbox/WRF_Lx25_dx100_FixN_noice.nc
## plot variables that have only time dependence
#plot_1d(pd.concat([df_col_1d,maclwp_dat,modis_dat,viirs_dat,sentinel_dat,kazrkollias_dat,kazrclough_dat,calipso_dat,radflux_dat]),['zi','od','lwp','iwp','ctt'])
plot_1d(pd.concat([df_col_1d,maclwp_dat,kazrkollias_dat,kazrclough_dat,calipso_dat,radflux_dat]),['cth','od','lwp','iwp','ctt'])

## plot variables that have only time dependence (for now excluding imager retrievals that are mostly SZA > 70)
#plot_1d(pd.concat([df_col_1d,maclwp_dat,kazrkollias_dat,kazrclough_dat,calipso_dat,gongiwp_dat,radflux_dat]),['od','lwp','iwp']) #'zi','od','lwp','iwp
/opt/conda/lib/python3.10/site-packages/matplotlib/axes/_axes.py:1185: RuntimeWarning: All-NaN axis encountered
  miny = np.nanmin(masked_verts[..., 1])
/opt/conda/lib/python3.10/site-packages/matplotlib/axes/_axes.py:1186: RuntimeWarning: All-NaN axis encountered
  maxy = np.nanmax(masked_verts[..., 1])
../../_images/88613e0697bdd1798716863301d1d8277b037b281baf622e8fd996afd634a313.png
## plot all variables that have time and height dependence
#plot_2d(df_col_2d,var_vec_2d,[0,3,6,9,12,15,18],z_max=6000)

## example where ERA5 and radiosonde are included
plot_2d(pd.concat([df_col_2d,era5_2d,rs_dat,aeri_dat]),var_vec = ['ta','theta','qv','ws','wd'],times=[-1.5,0,4,8,18],z_max=6000)
Computing wind speed
Computing wind direction
../../_images/f17874ce51c5db181e5ba8c327540360668de1ef140dc85d1e33565536186490.png
<Figure size 1000x600 with 0 Axes>