def climate_model(fossil_gtc_carbon): data = scenarios['RCP26']['WORLD'] copy_row = data.loc[[2007]] for index, row in data.iterrows(): if index > 2007: data = data.drop(index) for i in range(2008, 2101): temp = copy.deepcopy(copy_row) for index, row in temp.iterrows(): data.loc[i] = row.tolist() break # All future years have this amount of CO2 for i in range(2019, 2101): data.at[i, "FossilCO2"] = float(fossil_gtc_carbon) # Funnel into model and parse results results = pymagicc.run(data) results_df = results['SURFACE_TEMP']['GLOBAL'] ret_json = {} ret_json['start_year'] = str(results_df.index[0]) ret_json['global_temps'] = list(results_df.values) results_df = results['SURFACE_TEMP']['NH-LAND'] # Specific data used by the sea model ret_json['NH_temps'] = list(results_df.values) return ret_json
def diagnose_tcr_tcre(direction, **kwargs): postcrtest = { 'file_co2_conc': '1PCTCO2_CO2_CONC.IN', 'testscen': '1pctCO2' } negtcrtest = {'file_co2_conc': onepctcdr, 'testscen': '1pctCO2-cdr'} if 'pos' in direction: selectedtst = postcrtest elif 'neg' in direction: selectedtst = negtcrtest print('Calculating TCR & TCRE from {}.'.format(selectedtst['testscen'])) timeseries = pymagicc.run(scenario=None, only=[ 'Atmospheric Concentrations|CO2', 'INVERSEEMIS', 'Radiative Forcing', 'Surface Temperature', ], **kwargs, file_co2_conc=selectedtst['file_co2_conc']) # drop all the irrelevant inverse emissions timeseries = timeseries.filter(variable='Inverse Emissions*', level=1, keep=False) timeseries['scenario'] = selectedtst['testscen'] tcr, tcre = get_tcr_tcre_from_diagnosis_results(timeseries) return {'tcr': tcr, 'tcre': tcre, 'timeseries': timeseries}
def diagnose_ecs(direction, **kwargs): posecstest = { 'file_co2_conc': 'ABRUPT2XCO2_CO2_CONC.IN', 'testscen': 'abrupt-2xCO2' } negecstest = {'file_co2_conc': abrupt0p5, 'testscen': 'abrupt-0p5xCO2'} if 'pos' in direction: selectedtst = posecstest elif 'neg' in direction: selectedtst = negecstest print('Calculating ECS from {}.'.format(selectedtst['testscen'])) timeseries = pymagicc.run(scenario=None, only=[ 'Atmospheric Concentrations|CO2', 'INVERSEEMIS', 'Radiative Forcing', 'Surface Temperature', ], **kwargs, file_co2_conc=selectedtst['file_co2_conc']) # drop all the irrelevant inverse emissions timeseries = timeseries.filter(variable='Inverse Emissions*', level=1, keep=False) timeseries['scenario'] = selectedtst['testscen'] ecs = get_ecs_from_diagnosis_results(timeseries) return {'ecs': ecs, 'timeseries': timeseries}
def test_set_years(): results, conf = run(rcp26, return_config=True, startyear=1900, endyear=2000) assert conf["years"]["startyear"] == 1900 assert conf["years"]["endyear"] == 2000 assert results["SURFACE_TEMP"].GLOBAL.index[0] == 1900 assert results["SURFACE_TEMP"].GLOBAL.index[-1] == 2000
def test_run_rcp85(package): if package.version == 7: pytest.skip(magicc7_not_included_msg) results = run(rcp85, magicc_version=package.version) result_temp = (results.filter(variable="Surface Temperature", year=2100, region="World").timeseries().squeeze()) np.testing.assert_allclose(result_temp, 4.676012, rtol=1e-5) do_basic_run_checks(results)
def test_run_rcp60(package): if package.version == 7: pytest.skip(MAGICC7_NOT_INCLUDED_MSG) results = run(rcp60, magicc_version=package.version) result_temp = (results.filter(variable="Surface Temperature", year=2100, region="World").timeseries().squeeze()) np.testing.assert_allclose(result_temp, 3.102484, rtol=1e-5) do_basic_run_checks(results)
def test_run_rcp85(): results = run(rcp85) surface_temp = pd.read_csv(os.path.join( os.path.dirname(os.path.abspath(__file__)), "./original_data/RCP85/DAT_SURFACE_TEMP.OUT"), delim_whitespace=True, skiprows=19, index_col=0) assert surface_temp.GLOBAL.equals(results["SURFACE_TEMP"].GLOBAL)
def test_parameters(package): results = run( rcp26, magicc_version=package.version, out_parameters=True, core_climatesensitivity=1.5, ) assert results.metadata["parameters"]["allcfgs"][ "core_climatesensitivity"] == 1.5 # Test removal of newlines in PARAMETERS.out assert "H\nFC134a" not in results.metadata["parameters"]["allcfgs"][ "fgas_names"]
def test_set_years(package): results = run( rcp26, magicc_version=package.version, out_parameters=True, startyear=1900, endyear=2000, ) assert results.metadata["parameters"]["years"]["startyear"] == 1900 assert results.metadata["parameters"]["years"]["endyear"] == 2000 assert results["time"].min().year == 1900 assert results["time"].max().year == 2000
def test_default_config(): _, conf = run(rcp26, return_config=True) assert conf["allcfgs"]["core_climatesensitivity"] == 3 assert conf["years"]["startyear"] == 1765
def test_parameters(): _, params = run(rcp26, return_config=True, core_climatesensitivity=1.5) assert params['allcfgs']["core_climatesensitivity"] == 1.5 # Test removal of newlines in PARAMETERS.out assert 'H\nFC134a' not in params['allcfgs']["fgas_names"]
def test_out_carboncycle(): out = run(rcp26, out_carboncycle=1) assert "CARBONCYCLE" in out.keys()
import os import matplotlib.pyplot as plt import pymagicc from pymagicc import scenarios plt.style.use("ggplot") plt.rcParams["figure.figsize"] = 10, 5 plt.rcParams["font.family"] = "serif" plt.rcParams["font.size"] = 12 path = os.path.join(os.path.dirname(__file__), './example-plot.png') for name, scen in sorted(scenarios.items(), reverse=True): results, params = pymagicc.run(scen, return_config=True) temp = (results["SURFACE_TEMP"].GLOBAL.loc[1850:] - results["SURFACE_TEMP"].GLOBAL.loc[1850:1900].mean()) temp.plot(label=name) plt.legend() plt.title("Global Mean Temperature Projection") plt.ylabel(u"°C over pre-industrial (1850-1900 mean)") plt.legend(loc="best") plt.savefig(path, dpi=96)
def test_set_years(): results = run(rcp26, out_parameters=True, startyear=1900, endyear=2000) assert results.metadata["parameters"]["years"]["startyear"] == 1900 assert results.metadata["parameters"]["years"]["endyear"] == 2000 assert results["time"].min().year == 1900 assert results["time"].max().year == 2000
plt.style.use("ggplot") plt.rcParams["figure.figsize"] = 10, 5 plt.rcParams["font.family"] = "serif" plt.rcParams["font.size"] = 12 output_path = os.path.join( os.path.dirname(__file__), './example-plot.png' ) results = [] for scen in rcps.groupby("scenario"): results_scen = pymagicc.run(scen) results.append(results_scen) results = scmdata.run_append(results) temperature_rel_to_1850_1900 = ( results .filter(variable="Surface Temperature", region="World") .relative_to_ref_period_mean(year=range(1850, 1900 + 1)) ) temperature_rel_to_1850_1900.lineplot() plt.title("Global Mean Temperature Projection") plt.ylabel("°C over pre-industrial (1850-1900 mean)") plt.savefig(output_path, dpi=96)
import os import matplotlib.pyplot as plt import pymagicc from pymagicc import scenarios plt.style.use("ggplot") plt.rcParams["figure.figsize"] = 10, 5 plt.rcParams["font.family"] = "serif" plt.rcParams["font.size"] = 12 output_path = os.path.join(os.path.dirname(__file__), './example-plot.png') for name, scen in scenarios.items(): results = pymagicc.run(scen) results_df = results.df results_df.set_index("time", inplace=True) global_temp_time_rows = ((results_df.variable == "Surface Temperature") & (results_df.region == "World")) temp = (results_df.value[global_temp_time_rows].loc[1850:] - results_df.value[global_temp_time_rows].loc[1850:1900].mean()) temp.plot(label=name) plt.legend() plt.title("Global Mean Temperature Projection") plt.ylabel("°C over pre-industrial (1850-1900 mean)") plt.legend(loc="best") plt.savefig(output_path, dpi=96)
def test_default_config(): results = run(rcp26, out_parameters=True) assert results.metadata["parameters"]["allcfgs"][ "core_climatesensitivity"] == 3 assert results.metadata["parameters"]["years"]["startyear"] == 1765
import pymagicc from pathlib import Path root = Path(__file__).parents[1] _, conf = pymagicc.run(pymagicc.rcp45, return_config=True) conf["allcfgs"]["rundate"] = "No date specified." conf.write(str(root / "pymagicc/default_config.nml"), force=True)