lat = file_ctl.variables["lat"] lon = file_ctl.variables["lon"] # read data and calculate mean/min/max for iv in range(0, varnms_toa.size): dtctl_toa=file_ctl_fssd.variables[varnms_toa[iv]][:,:,:] - \ file_ctl.variables[varnms_sub_toa[iv]][:,:,:] dtexp_toa=file_exp_fssd.variables[varnms_toa[iv]][:,:,:] - \ file_exp.variables[varnms_sub_toa[iv]][:,:,:] dtctl_sfc=file_ctl.variables[varnms_sfc[iv]][:,:,:] - \ file_ctl.variables[varnms_sub_sfc[iv]][:,:,:] dtexp_sfc=file_exp.variables[varnms_sfc[iv]][:,:,:] - \ file_exp.variables[varnms_sub_sfc[iv]][:,:,:] means_yby_ctl_toa[iy, iv] = get_area_mean_min_max(dtctl_toa[0, :, :], lat[:])[0] means_yby_exp_toa[iy, iv] = get_area_mean_min_max(dtexp_toa[0, :, :], lat[:])[0] means_yby_ctl_sfc[iy, iv] = get_area_mean_min_max(dtctl_sfc[0, :, :], lat[:])[0] means_yby_exp_sfc[iy, iv] = get_area_mean_min_max(dtexp_sfc[0, :, :], lat[:])[0] # compute multi-year mean at TOA --> means_ctl_toa = np.mean(means_yby_ctl_toa, axis=0) means_exp_toa = np.mean(means_yby_exp_toa, axis=0) # stadard deviation at TOA -->
file_ctl=netcdf_dataset(fctl,"r") file_exp=netcdf_dataset(fexp,"r") # read lat and lon lat=file_ctl.variables["lat"] lon=file_ctl.variables["lon"] means_yby_exp_fice[iy,:]=means_yby_exp_fice[iy,:]+np.mean(file_exp.variables["ICEFRAC"][0,:,:],axis=1) # read data and calculate mean/min/max vn="TMQ" dtctl_wv=file_ctl.variables[vn][0,:,:] dtexp_wv=file_exp.variables[vn][0,:,:] means_yby_ctl_wv[iy,:]= means_yby_ctl_wv[iy,:] + np.mean(dtctl_wv[:,:],axis=1) means_yby_exp_wv[iy,:]= means_yby_exp_wv[iy,:] + np.mean(dtexp_wv[:,:],axis=1) gm_yby_ctl_wv[iy]=gm_yby_ctl_wv[iy]+get_area_mean_min_max(dtctl_wv[:,:],lat[:])[0] gm_yby_exp_wv[iy]=gm_yby_exp_wv[iy]+get_area_mean_min_max(dtexp_wv[:,:],lat[:])[0] vn="TGCLDCWP" dtctl_lwp=file_ctl.variables[vn][0,:,:]*1000. dtexp_lwp=file_exp.variables[vn][0,:,:]*1000. means_yby_ctl_lwp[iy,:]= means_yby_ctl_lwp[iy,:] + np.mean(dtctl_lwp[:,:],axis=1) means_yby_exp_lwp[iy,:]= means_yby_exp_lwp[iy,:] + np.mean(dtexp_lwp[:,:],axis=1) gm_yby_ctl_lwp[iy]=gm_yby_ctl_lwp[iy]+get_area_mean_min_max(dtctl_lwp[:,:],lat[:])[0] gm_yby_exp_lwp[iy]=gm_yby_exp_lwp[iy]+get_area_mean_min_max(dtexp_lwp[:,:],lat[:])[0] vn="TS" dtctl_ts=file_ctl.variables[vn][0,:,:] dtexp_ts=file_exp.variables[vn][0,:,:] means_yby_ctl_ts[iy,:]= means_yby_ctl_ts[iy,:] + np.mean(dtctl_ts[:,:],axis=1) means_yby_exp_ts[iy,:]= means_yby_exp_ts[iy,:] + np.mean(dtexp_ts[:,:],axis=1)
figure_name = 'fig_Arctic_VIS_albedo_CESM2' latbound1 = np.min(np.where(lat[:] > 55)) latbound2 = nlat projection = ccrs.NorthPolarStereo(central_longitude=0) elif pole is 'S': figure_name = 'fig_Antarctic_VIS_albedo_CESM2' latbound1 = 0 latbound2 = np.max(np.where(lat[:] < -55)) + 1 projection = ccrs.SouthPolarStereo(central_longitude=0) #print(latbound2) #exit() #-- calculate area mean -- tmp = np.zeros((nlat, nlon)) tmp[:, :] = dtctl[0, :, :-1] stats_ctl = get_area_mean_min_max(tmp[latbound1:latbound2, :], lat[latbound1:latbound2]) tmp[:, :] = dtexp[0, :, :-1] stats_exp = get_area_mean_min_max(tmp[latbound1:latbound2, :], lat[latbound1:latbound2]) tmp[:, :] = dtdif[0, :, :-1] stats_dif = get_area_mean_min_max(tmp[latbound1:latbound2, :], lat[latbound1:latbound2]) print(stats_dif) #parameters=get_parameters(varnm,season) #projection = ccrs.PlateCarree(central_longitude=0) #fig = plt.figure(figsize=[7.0,11.0],dpi=150.) fig = plt.figure(figsize=(5, 5)) plotTitle = {'fontsize': 13.}
# read lat and lon lat = file_ctl.variables["lat"] lon = file_ctl.variables["lon"] dtctl_fice = file_ctl.variables["ICEFRAC"][0, :, :] means_yby_ctl_fice[:] = np.mean(dtctl_fice[:, :], axis=1) # read data and calculate mean/min/max for vn in varnms_vis_dn: dtctl_dn = file_ctl.variables[vn][0, :, :] dtexp_dn = file_exp.variables[vn][0, :, :] means_yby_ctl_dn[0, :] = means_yby_ctl_dn[0, :] + np.mean(dtctl_dn[:, :], axis=1) means_yby_exp_dn[0, :] = means_yby_exp_dn[0, :] + np.mean(dtexp_dn[:, :], axis=1) gm_yby_ctl_dn[0] = gm_yby_ctl_dn[0] + get_area_mean_min_max( dtctl_dn[:, :], lat[:])[0] gm_yby_exp_dn[0] = gm_yby_exp_dn[0] + get_area_mean_min_max( dtexp_dn[:, :], lat[:])[0] for vn in varnms_nir_dn: dtctl_dn = file_ctl.variables[vn][0, :, :] dtexp_dn = file_exp.variables[vn][0, :, :] means_yby_ctl_dn[1, :] = means_yby_ctl_dn[1, :] + np.mean(dtctl_dn[:, :], axis=1) #[0,:] means_yby_exp_dn[1, :] = means_yby_exp_dn[1, :] + np.mean(dtexp_dn[:, :], axis=1) #[0,:] gm_yby_ctl_dn[1] = gm_yby_ctl_dn[1] + get_area_mean_min_max( dtctl_dn[:, :], lat[:])[0] gm_yby_exp_dn[1] = gm_yby_exp_dn[1] + get_area_mean_min_max( dtexp_dn[:, :], lat[:])[0]
file_ctl_diag=netcdf_dataset(fctl_diag,"r") file_exp_diag=netcdf_dataset(fexp_diag,"r") # read lat and lon lat=file_ctl.variables["lat"] lon=file_ctl.variables["lon"] means_yby_exp_fice[iy,:]=means_yby_exp_fice[iy,:]+np.mean(file_exp.variables["ICEFRAC"][0,:,:],axis=1) # read data and calculate mean/min/max for vn in varnms_vis_dn: dtctl_dn=file_ctl.variables[vn][0,:,:] dtexp_dn=file_exp.variables[vn][0,:,:] means_yby_ctl_dn[iy,0,:]= means_yby_ctl_dn[iy,0,:] + np.mean(dtctl_dn[:,:],axis=1) means_yby_exp_dn[iy,0,:]= means_yby_exp_dn[iy,0,:] + np.mean(dtexp_dn[:,:],axis=1) gm_yby_ctl_dn[0,iy]=gm_yby_ctl_dn[0,iy]+get_area_mean_min_max(dtctl_dn[:,:],lat[:])[0] gm_yby_exp_dn[0,iy]=gm_yby_exp_dn[0,iy]+get_area_mean_min_max(dtexp_dn[:,:],lat[:])[0] dtctl_dn_diag=file_ctl_diag.variables[vn][0,:,:] dtexp_dn_diag=file_exp_diag.variables[vn][0,:,:] means_yby_ctl_dn_diag[iy,0,:]= means_yby_ctl_dn_diag[iy,0,:] + \ np.mean(dtctl_dn_diag[:,:],axis=1) means_yby_exp_dn_diag[iy,0,:]= means_yby_exp_dn_diag[iy,0,:] + \ np.mean(dtexp_dn_diag[:,:],axis=1) gm_yby_ctl_dn_diag[0,iy]=gm_yby_ctl_dn_diag[0,iy] + \ get_area_mean_min_max(dtctl_dn_diag[:,:],lat[:])[0] gm_yby_exp_dn_diag[0,iy]=gm_yby_exp_dn_diag[0,iy] + \ get_area_mean_min_max(dtexp_dn_diag[:,:],lat[:])[0] for vn in varnms_nir_dn: dtctl_dn=file_ctl.variables[vn][0,:,:]
else: icef_snw = icef_snw_tmp + icef_snw icef_bare = icef_bare_tmp + icef_bare ocnf_open = ocnf_open_tmp + ocnf_open icef_snw = icef_snw / 3. icef_bare = icef_bare / 3. ocnf_open = ocnf_open / 3. #icef_snw = np.where(lndf_ctl < 0.01, icef_snw, np.nan) #icef_bare = np.where(lndf_ctl < 0.01, icef_bare, np.nan) #ocnf_open = np.where(lndf_ctl < 0.01, ocnf_open, np.nan) # compute Arctic and Antarctic averages # 1. Arctic latbound1 = np.min(np.where(lat[:] > 55)) latbound2 = lat.size means_NH[iss,0]=get_area_mean_min_max( \ ocnf_open[0,latbound1:latbound2,:],lat[latbound1:latbound2])[0] means_NH[iss,1]=get_area_mean_min_max( \ icef_snw[0,latbound1:latbound2,:],lat[latbound1:latbound2])[0] means_NH[iss,2]=get_area_mean_min_max( \ icef_bare[0,latbound1:latbound2,:],lat[latbound1:latbound2])[0] means_NH[iss, :] = means_NH[iss, :] / np.sum(means_NH[iss, :]) # 2. Antarctic latbound1 = 0 latbound2 = np.max(np.where(lat[:] < -55)) + 1 means_SH[iss,0]=get_area_mean_min_max( \ ocnf_open[0,latbound1:latbound2,:],lat[latbound1:latbound2])[0] means_SH[iss,1]=get_area_mean_min_max( \ icef_snw[0,latbound1:latbound2,:],lat[latbound1:latbound2])[0] means_SH[iss,2]=get_area_mean_min_max( \ icef_bare[0,latbound1:latbound2,:],lat[latbound1:latbound2])[0]
lat = file_ctl.variables["lat"] lon = file_ctl.variables["lon"] means_yby_exp_fice[iy, :] = means_yby_exp_fice[iy, :] + np.mean( file_exp.variables["ICEFRAC"][0, :, :], axis=1) # read data and calculate mean/min/max vn = "CLDHGH" dtctl_cldhgh = file_ctl.variables[vn][0, :, :] * 100. dtexp_cldhgh = file_exp.variables[vn][0, :, :] * 100. means_yby_ctl_cldhgh[iy, :] = means_yby_ctl_cldhgh[iy, :] + np.mean( dtctl_cldhgh[:, :], axis=1) means_yby_exp_cldhgh[iy, :] = means_yby_exp_cldhgh[iy, :] + np.mean( dtexp_cldhgh[:, :], axis=1) gm_yby_ctl_cldhgh[iy]=gm_yby_ctl_cldhgh[iy] + \ get_area_mean_min_max(dtctl_cldhgh[:,:],lat[:])[0] gm_yby_exp_cldhgh[iy]=gm_yby_exp_cldhgh[iy] + \ get_area_mean_min_max(dtexp_cldhgh[:,:],lat[:])[0] vn = "CLDMED" dtctl_cldmed = file_ctl.variables[vn][0, :, :] * 100. dtexp_cldmed = file_exp.variables[vn][0, :, :] * 100. means_yby_ctl_cldmed[iy, :] = means_yby_ctl_cldmed[iy, :] + np.mean( dtctl_cldmed[:, :], axis=1) means_yby_exp_cldmed[iy, :] = means_yby_exp_cldmed[iy, :] + np.mean( dtexp_cldmed[:, :], axis=1) gm_yby_ctl_cldmed[iy]=gm_yby_ctl_cldmed[iy] + \ get_area_mean_min_max(dtctl_cldmed[:,:],lat[:])[0] gm_yby_exp_cldmed[iy]=gm_yby_exp_cldmed[iy] + \ get_area_mean_min_max(dtexp_cldmed[:,:],lat[:])[0]
# data path ctl_name = "CTL" #"CTL" #os.environ["ctl_name"] ctl_pref = "solar_" + ctl_name + "_cesm211_ETEST-f19_g17-ens_mean_2010-2019" fpath_ctl = "/raid00/xianwen/cesm211_solar/" + ctl_pref + "/climo/" f1 = fpath_ctl + ctl_pref + "_climo_ANN.nc" print(f1) varlst=["SOLIN","FSNTOA","FSNTOAC","FLUT","FLUTC", \ "FSDS","FSDSC","FSNS","FSNSC","FLDS","FLNS","FLNSC","LHFLX","SHFLX"] # open data file file_ctl = netcdf_dataset(f1, "r") # read lat and lon lat = file_ctl.variables["lat"] lon = file_ctl.variables["lon"] lat_N = np.min(np.where(lat[:] > 60.)) lat_S = np.max(np.where(lat[:] < -60.)) + 1 pole = "N" for var in varlst: dtctl = file_ctl.variables[var][0, :, :] #[time,lat,lon] if pole == "S": stat = get_area_mean_min_max(dtctl[0:lat_S, :], lat[0:lat_S]) elif pole == "N": stat = get_area_mean_min_max(dtctl[lat_N:, :], lat[lat_N:]) print(var, round(stat[0], 1))