from netCDF4 import Dataset matplotlib.rcParams['font.family'] = 'sans-serif' matplotlib.rcParams['font.sans-serif'] = 'Helvetica' gdp_year = _env.year sgdp_year = str(gdp_year) p_scen = 'No-Sulfate' #aerosol removal scenario ds = 'ERA-Interim' if_temp = _env.odir_root + '/summary_' + ds + '/country_specific_statistics_Temp_' + ds + '_' + p_scen + '.csv' if_gdp = _env.odir_root + '/summary_' + ds + '/country_specific_statistics_GDP_' + ds + '_' + p_scen + '_Burke.xls' odir_plot = _env.odir_root + '/plot/' _env.mkdirs(odir_plot) of_plot = odir_plot + 'SOM_F1.Scatter_Changes_in_Temp_and_GDP_Sulfate.png' itbl_temp = pd.read_csv(if_temp, index_col=0) itbl_gdp = pd.read_excel(if_gdp, 'country-lag0') mtbl_tg = itbl_temp[[ 'Temp_mean_climatological', 'Temp_mean_noaero', 'Temp_Changes' ]].copy() for gc in [ 'iso', sgdp_year + '_gdp', sgdp_year + '_pop', 'GDP_median_benefit_ratio' ]: mtbl_tg[gc] = itbl_gdp[gc].copy()
gdp_year = year sgdp_year = str(gdp_year) par = 'TREFHT' ds = 'ERA-Interim' rean_ttag = '2001-2018' if_base = _env.idir_root + '/reanalysis/ERA-Interim_Surface_Temp_' + rean_ttag + '_Regridded.nc' if_sim = _env.odir_root + '/sim_temperature/Simulated_Global_Gridded_' + par + '.nc' if_boot_par = _env.idir_root + 'Burke2018_Replication/data/output/bootstrap.csv' if_pop = _env.idir_root + '/pop/GPW_POP_25x19deg_2000.nc' odir_gdp = _env.odir_root + '/gdp_' + ds + '/' _env.mkdirs(odir_gdp) scenarios = ['With-Aerosol', 'No-Aerosol'] #read gridded temperature ##base temperature from reanalysis data (ERA-Interim) i_base = xr.open_dataset(if_base) i_base = i_base.expand_dims({'ensembles': 8}) i_base.transpose('ensembles', 'lat', 'lon') T_grid_base = i_base['t2m_mean'] - 273.15 #K to C i_sim = xr.open_dataset(if_sim) T_grid_wa = i_sim[par + '_' + scenarios[0] + '_ensemble'] #With-Aerosol T_grid_na = i_sim[par + '_' + scenarios[1] + '_ensemble'] #No-Aerosol
ax.set_yticks(np.arange(-90,91,45)) ax.set_yticklabels('') parallels = np.arange(-90.,91,45.) m.drawparallels(parallels,labels=[True,False,False,False],dashes=[3,3],xoffset=5,linewidth = 0) meridians = np.arange(-160,161,40.) m.drawmeridians(meridians,labels=[True,False,False,True],dashes=[3,3],yoffset=5,linewidth = 0) matplotlib.rcParams['font.family'] = 'sans-serif' matplotlib.rcParams['font.sans-serif'] = 'Helvetica' odir_plot = _env.odir_root + '/plot/' _env.mkdirs(odir_plot) of_plot = odir_plot + 'ED_F4.Map_Climatic_Economic_Impacts_Sulfate.png' p_scen = 'No-Sulfate' #aerosol removal scenario ds = 'ERA-Interim' fig = plt.figure(figsize=(21,20)) ##=========================MAP: changes in AOD=====================# if_aod = _env.odir_root + '/sim_aodvis/Simulated_Global_Gridded_AODVIS.nc' arr_aod = -Dataset(if_aod)['AODVIS_d_' + p_scen + '_With-Aerosol'][:] ax = fig.add_subplot(411)
matplotlib.rcParams['font.sans-serif'] = 'Helvetica' ###main ds = 'ERA-Interim' p_scen = 'No-Sulfate' b_m = 'country-lag0' gdp_year = _env.year sgdp_year = str(gdp_year) idir_temp = _env.odir_root + '/sim_temperature/' idir_gdp = _env.odir_root + '/gdp_'+ds+'/' odir_summary = _env.odir_root + '/summary_'+ds+'/' odir_plot = _env.odir_root + '/plot/' _env.mkdirs(odir_summary) of_plot = odir_plot + 'ED_F10.Box_Changes_in_Inequality_Sulfate.png' itbl_gdp_baseline = pd.read_csv(_env.odir_root + 'basic_stats' + '/Country_Basic_Stats.csv') itbl_gdp_baseline.sort_values([sgdp_year + '_gdpcap'],inplace=True) tot_pop = itbl_gdp_baseline[sgdp_year + '_pop'].sum() itbl_gdp_baseline[sgdp_year + '_gdpsum'] = 0 itbl_gdp_baseline[sgdp_year + '_popsum'] = 0 for irow, row in enumerate(itbl_gdp_baseline.index): if irow == 0: itbl_gdp_baseline.loc[row,sgdp_year + '_gdpsum'] = itbl_gdp_baseline.loc[row,sgdp_year + '_gdp'] itbl_gdp_baseline.loc[row, sgdp_year + '_popsum'] = itbl_gdp_baseline.loc[row,sgdp_year + '_pop'] else:
itbl_ctry_gdpcap.set_index(['Country Code'], inplace=True) itbl_ctry_pop.set_index(['Country Code'], inplace=True) itbl_ctry_info = itbl_ctry.copy() itbl_ctry_info.set_index(['iso'], inplace=True) for year in range(gdp_year, gdp_year + 1): itbl_ctry_info[str(year) + '_gdpcap'] = itbl_ctry_gdpcap[str(year)] itbl_ctry_info[str(year) + '_pop'] = itbl_ctry_pop[str(year)] itbl_ctry_info[str(year) + '_gdp'] = itbl_ctry_info[ str(year) + '_gdpcap'] * itbl_ctry_info[str(year) + '_pop'] itbl_ctry_info.drop(['meantemp', 'gdp', 'growth', 'gdpcap', 'pop'], axis=1, inplace=True) _env.mkdirs(_env.odir_root + '/basic_stats/') itbl_ctry_info.to_csv(_env.odir_root + '/basic_stats/' + 'Country_Basic_Stats.csv') omtrxs_gdp_all = {} #calculate changes in gdp and gdp growth rate from aerosol-induced cooling for ds in datasets: omtrxs_gdp_all[ds] = {} itbl_clim_temp = pd.read_csv(if_clim_temp, index_col=0)[['iso', ds]] odir_gdp = _env.odir_root + '/gdp_' + ds + '/' _env.mkdirs(odir_gdp) scenarios = _env.scenarios[0:2] #['With-Aerosol', 'No-Aerosol']
'Percent changes in 80:20 ratio', 'Probability of reduced inequality' ] models = ['Burke et al.', 'Dell et al.', 'Pretis et al.', 'DICE'] apply2s = ['GDP growth', 'GDP growth', 'GDP growth', 'GDP levels'] speciations = { 'Burke et al.': ['country-lag0', 'country-lag1', 'country-lag5', 'year', 'year-blocks'], 'Dell et al.': ['Dell'], 'Pretis et al.': ['M1', 'M2', 'M3'], 'DICE': ['DICE-2013R', 'DICE-2016R'] } odir_tbl = _env.odir_root + '/table/' _env.mkdirs(odir_tbl) of_tbl = odir_tbl + 'SOM_Table1.xls' writer = pd.ExcelWriter(of_tbl) #===================applied functions==================== def text_fmt(median, p5, p95, digits=2): #formating text for output table cells tp_min = np.min([p5, p95]) tp_max = np.max([p5, p95]) return str(np.around(median, digits)) + ' (' + str( np.around(tp_min, digits)) + ', ' + str(np.around(tp_max, digits)) + ')'
ttag = '1950-2019' for ens in np.arange(1, nens + 1): if_nc = idir_cesm + par + '_' + scen + '-' + str( ens) + '_' + ttag + '.nc' print(if_nc) inc = Dataset(if_nc) par_val = (inc[par][:].data + parameters_info[par]['delta'] ) * parameters_info[par]['scale'] inc.close() i_pars[ens] = np.append(i_pars[ens], par_val, axis=0) ####output concatenated gridded parameter _env.mkdirs(_env.odir_root + '/' + parameters_info[par]['dir'] + '/') of_nc = _env.odir_root + '/' + parameters_info[par][ 'dir'] + '/' + par + '_' + scen + '_1850-2019_ensemble' + '.nc' _env.rmfile(of_nc) onc = Dataset(of_nc, 'w', format='NETCDF4') d_yr = onc.createDimension('years', (2020 - 1850)) d_lat = onc.createDimension('lat', len(lat)) d_lon = onc.createDimension('lon', len(lon)) v_d_yr = onc.createVariable('years', 'f4', ('years')) v_d_yr[:] = np.arange(1850, 2020) v_d_lat = onc.createVariable('lat', 'f4', ('lat')) v_d_lat[:] = lat.data
sgdp_year = str(gdp_year) par = 'TREFHT' ds = 'ERA-Interim' p_scen = 'No-Aerosol' if_temp = _env.odir_root + '/sim_temperature/Simulated_Global_and_Country_' + par + '_20yravg.nc' if_ctry_list = _env.idir_root + '/regioncode/Country_List.xls' if_ctry_pr = _env.idir_root + '/historical_stat/Ctry_Poor_Rich_from_Burke.csv' #adopt country list from Burke et al. 2018 if_ctry_gdpcap = _env.idir_root + '/historical_stat/' + '/API_NY.GDP.PCAP.KD_DS2_en_csv_v2.csv' if_ctry_pop = _env.idir_root + '/historical_stat/' + '/API_SP.POP.TOTL_DS2_en_csv_v2.csv' odir_gdp = _env.odir_root + '/gdp_' + ds + '/' _env.mkdirs(odir_gdp) #climatological temperature from three datasets if_clim_temp = _env.odir_root + 'sim_temperature/Climatological_Temp_Ctry_3ds.csv' itbl_clim_temp = pd.read_csv(if_clim_temp, index_col=0)[['iso', ds]] #country list itbl_ctry_info = pd.read_csv(_env.odir_root + '/basic_stats/' + 'Country_Basic_Stats.csv') #read global and country-level temperature T_glob = Dataset(if_temp)['TREFHT_Global'][:, [0, 1]] T_ctry_full = Dataset(if_temp)['TREFHT_Country'][:, :, [0, 1]] #extract temperature for analyzed countries T_ctry = T_ctry_full[((
for ctry in i_ctry_grid: ind_ctry[int(ctry)] = _env.grid_ind_2d(i_ctry_grid[ctry]) o_ctry_pars = {} for par in parameters: o_ctry_pars[par] = np.zeros([len(itbl_ctry.index), nens, nscen]) for iscen, scen in enumerate(scenarios): i_par = i_pars[par][scen].copy() for ctry in itbl_ctry.index: ipar_ctry = i_par[:, ind_ctry[ctry][0, :], ind_ctry[ctry][1, :]] pop_ctry = pop[ind_ctry[ctry][0, :], ind_ctry[ctry][1, :]] o_ctry_pars[par][ctry, :, iscen] = _env.cal_cty_mean( ipar_ctry, pop_ctry, ctry) #output global and country-level results# _env.mkdirs(_env.odir_root + '/' + parameters_info[par]['dir'] + '/') of_nc = _env.odir_root + '/' + parameters_info[par][ 'dir'] + '/Simulated_Global_and_Country_' + par + '_20yravg.nc' _env.rmfile(of_nc) onc = Dataset(of_nc, 'w', format='NETCDF4') d_ctry = onc.createDimension('countries', len(itbl_ctry.index)) d_year = onc.createDimension('ensembles', nens) d_ens = onc.createDimension('scenarios', nscen) v_par_global = onc.createVariable(par + '_Global', 'f4', ('ensembles', 'scenarios')) v_par_global_pw = onc.createVariable(par + '_Global_PW', 'f4', ('ensembles', 'scenarios')) v_par_ctry = onc.createVariable(par + '_Country', 'f4',