diff --git a/docs/examples/calibrated_constrained_ensemble.rst b/docs/examples/calibrated_constrained_ensemble.rst index ccd7a374..1031e7cc 100644 --- a/docs/examples/calibrated_constrained_ensemble.rst +++ b/docs/examples/calibrated_constrained_ensemble.rst @@ -14,7 +14,7 @@ IPCC Sixth Assessement Report. **Note**: if you are reading this tutorial online and want to reproduce the results, you will need one additional file. Grab this from -https://github.com/OMS-NetZero/FAIR/blob/master/examples/data/species_configs_properties_calibration1.1.0.csv. +https://github.com/OMS-NetZero/FAIR/blob/master/examples/data/species_configs_properties_calibration1.2.0.csv. In Step 5 below, this is read in from the ``data/`` directory relative to here. This does not apply if you are running this notebook from Binder or have cloned it from GitHub - it should run out of the box. @@ -33,15 +33,15 @@ DOI link below. A two-step constraining process is produced. The first step ensures that historical simulations match observed climate change to a -root-mean-square error of less than 0.16°C. The second step +root-mean-square error of less than 0.17°C. The second step simultaneously distribution-fits to the following assessed ranges: - equilibrium climate sensitivity (ECS), very likely range 2-5°C, best estimate 3°C - transient climate response (TCR), very likely range 1.2-2.4°C, best estimate 1.8°C -- global mean surface temperature change 1850-1900 to 1995-2014, very - likely range 0.67-0.98°C, best estimate 0.85°C +- global mean surface temperature change 1850-1900 to 2003-2022, very + likely range 0.87-1.13°C, best estimate 1.03°C - effective radiative forcing from aerosol-radiation interactions 1750 to 2005-2014, very likely range -0.6 to 0 W/m², best estimate -0.3 W/m² @@ -50,13 +50,10 @@ simultaneously distribution-fits to the following assessed ranges: W/m² - effective radiative forcing from aerosols 1750 to 2005-2014, very likely range -2.0 to -0.6 W/m², best estimate -1.3 W/m² -- ocean heat content change 1971 to 2018, likely range 329-463 ZJ, best - estimate 396 ZJ -- CO2 concentrations in 2014, very likely range 396.95-398.15 ppm, best - estimate 397.55 ppm -- future warming in SSP245 1995-2014 to 2081-2100, 1.24-2.59°C, best - estimate 1.81°C. Note the IPCC constraint was concentration driven, - in fair-calibrate v1.1.0 an emissions-driven constraint was used. +- earth energy uptake change 1971 to 2020, very likely range 358-573 + ZJ, best estimate 465 ZJ +- CO2 concentrations in 2014, very likely range 416.2-417.8 ppm, best + estimate 417.0 ppm 1001 posterior ensemble members are produced from an initial prior of 1.5 million. @@ -163,14 +160,14 @@ constraining code. .. code:: ipython3 - fair_params_1_1_0_obj = pooch.retrieve( - url = 'https://zenodo.org/record/7694879/files/calibrated_constrained_parameters.csv', - known_hash = 'md5:9f236c43dd18a36b7b63b94e05f3caab', + fair_params_1_2_0_obj = pooch.retrieve( + url = 'https://zenodo.org/record/8399112/files/calibrated_constrained_parameters.csv', + known_hash = 'md5:de3b83432b9d071efdd1427ad31e9076', ) .. code:: ipython3 - df_configs = pd.read_csv(fair_params_1_1_0_obj, index_col=0) + df_configs = pd.read_csv(fair_params_1_2_0_obj, index_col=0) configs = df_configs.index # this is used as a label for the "config" axis f.define_configs(configs) @@ -205,7 +202,7 @@ are. .. code:: ipython3 - species, properties = read_properties(filename='data/species_configs_properties_calibration1.1.0.csv') + species, properties = read_properties(filename='data/species_configs_properties_calibration1.2.0.csv') f.define_species(species, properties) 6. Modify run options @@ -326,8 +323,8 @@ https://github.com/OMS-NetZero/FAIR/issues/126). .. code:: ipython3 volcanic_obj = pooch.retrieve( - url = 'https://raw.githubusercontent.com/chrisroadmap/fair-add-hfc/main/data/volcanic_ERF_monthly_174901-201912.csv', - known_hash = 'md5:d3ac469ee7d2c2c75fbb656c2c67c4aa', + url = 'https://raw.githubusercontent.com/chrisroadmap/fair-calibrate/main/data/forcing/volcanic_ERF_1750-2101_timebounds.csv', + known_hash = 'md5:c0801f80f70195eb9567dbd70359219d', ) .. code:: ipython3 @@ -350,13 +347,7 @@ little bit of ninja skill with indexing is needed. solar_forcing = np.zeros(551) volcanic_forcing = np.zeros(551) - for i, year in enumerate(np.arange(1750, 2021)): - volcanic_forcing[i] = np.mean( - df_volcanic.loc[ - ((year - 1) <= df_volcanic["year"]) & (df_volcanic["year"] < year) - ].erf - ) - volcanic_forcing[271:281] = np.linspace(1, 0, 10) * volcanic_forcing[270] + volcanic_forcing[:352] = df_volcanic.erf.values solar_forcing = df_solar["erf"].loc[1750:2300].values trend_shape = np.ones(551) @@ -369,13 +360,13 @@ the volcanic forcing time series, and the solar amplitude and trend: fill( f.forcing, - volcanic_forcing[:, None, None] * df_configs["scale Volcanic"].values.squeeze(), + volcanic_forcing[:, None, None] * df_configs["fscale_Volcanic"].values.squeeze(), specie="Volcanic", ) fill( f.forcing, - solar_forcing[:, None, None] * df_configs["solar_amplitude"].values.squeeze() - + trend_shape[:, None, None] * df_configs["solar_trend"].values.squeeze(), + solar_forcing[:, None, None] * df_configs["fscale_solar_amplitude"].values.squeeze() + + trend_shape[:, None, None] * df_configs["fscale_solar_trend"].values.squeeze(), specie="Solar", ) @@ -391,19 +382,19 @@ dataset. .. code:: ipython3 - fill(f.climate_configs["ocean_heat_capacity"], df_configs.loc[:, "c1":"c3"].values) + fill(f.climate_configs["ocean_heat_capacity"], df_configs.loc[:, "clim_c1":"clim_c3"].values) fill( f.climate_configs["ocean_heat_transfer"], - df_configs.loc[:, "kappa1":"kappa3"].values, + df_configs.loc[:, "clim_kappa1":"clim_kappa3"].values, ) - fill(f.climate_configs["deep_ocean_efficacy"], df_configs["epsilon"].values.squeeze()) - fill(f.climate_configs["gamma_autocorrelation"], df_configs["gamma"].values.squeeze()) - fill(f.climate_configs["sigma_eta"], df_configs["sigma_eta"].values.squeeze()) - fill(f.climate_configs["sigma_xi"], df_configs["sigma_xi"].values.squeeze()) + fill(f.climate_configs["deep_ocean_efficacy"], df_configs["clim_epsilon"].values.squeeze()) + fill(f.climate_configs["gamma_autocorrelation"], df_configs["clim_gamma"].values.squeeze()) + fill(f.climate_configs["sigma_eta"], df_configs["clim_sigma_eta"].values.squeeze()) + fill(f.climate_configs["sigma_xi"], df_configs["clim_sigma_xi"].values.squeeze()) fill(f.climate_configs["seed"], df_configs["seed"]) fill(f.climate_configs["stochastic_run"], True) fill(f.climate_configs["use_seed"], True) - fill(f.climate_configs["forcing_4co2"], df_configs["F_4xCO2"]) + fill(f.climate_configs["forcing_4co2"], df_configs["clim_F_4xCO2"]) 8c. Fill in species_configs ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -413,7 +404,7 @@ species/properties/configs file .. code:: ipython3 - f.fill_species_configs(filename='data/species_configs_properties_calibration1.1.0.csv') + f.fill_species_configs(filename='data/species_configs_properties_calibration1.2.0.csv') Then, we overwrite the ``species_configs`` that are varies as part of the probablistic sampling. This makes heavy use of the ``fill()`` @@ -422,16 +413,16 @@ convenience function. .. code:: ipython3 # carbon cycle - fill(f.species_configs["iirf_0"], df_configs["r0"].values.squeeze(), specie="CO2") - fill(f.species_configs["iirf_airborne"], df_configs["rA"].values.squeeze(), specie="CO2") - fill(f.species_configs["iirf_uptake"], df_configs["rU"].values.squeeze(), specie="CO2") - fill(f.species_configs["iirf_temperature"], df_configs["rT"].values.squeeze(), specie="CO2") + fill(f.species_configs["iirf_0"], df_configs["cc_r0"].values.squeeze(), specie="CO2") + fill(f.species_configs["iirf_airborne"], df_configs["cc_rA"].values.squeeze(), specie="CO2") + fill(f.species_configs["iirf_uptake"], df_configs["cc_rU"].values.squeeze(), specie="CO2") + fill(f.species_configs["iirf_temperature"], df_configs["cc_rT"].values.squeeze(), specie="CO2") # aerosol indirect - fill(f.species_configs["aci_scale"], df_configs["beta"].values.squeeze()) - fill(f.species_configs["aci_shape"], df_configs["shape Sulfur"].values.squeeze(), specie="Sulfur") - fill(f.species_configs["aci_shape"], df_configs["shape BC"].values.squeeze(), specie="BC") - fill(f.species_configs["aci_shape"], df_configs["shape OC"].values.squeeze(), specie="OC") + fill(f.species_configs["aci_scale"], df_configs["aci_beta"].values.squeeze()) + fill(f.species_configs["aci_shape"], df_configs["aci_shape_so2"].values.squeeze(), specie="Sulfur") + fill(f.species_configs["aci_shape"], df_configs["aci_shape_bc"].values.squeeze(), specie="BC") + fill(f.species_configs["aci_shape"], df_configs["aci_shape_oc"].values.squeeze(), specie="OC") # aerosol direct for specie in [ @@ -445,7 +436,7 @@ convenience function. "VOC", "Equivalent effective stratospheric chlorine" ]: - fill(f.species_configs["erfari_radiative_efficiency"], df_configs[f"ari {specie}"], specie=specie) + fill(f.species_configs["erfari_radiative_efficiency"], df_configs[f"ari_{specie}"], specie=specie) # forcing scaling for specie in [ @@ -457,7 +448,7 @@ convenience function. "Light absorbing particles on snow and ice", "Land use" ]: - fill(f.species_configs["forcing_scale"], df_configs[f"scale {specie}"].values.squeeze(), specie=specie) + fill(f.species_configs["forcing_scale"], df_configs[f"fscale_{specie}"].values.squeeze(), specie=specie) # the halogenated gases all take the same scale factor for specie in [ "CFC-11", @@ -501,16 +492,16 @@ convenience function. "HFC-365mfc", "HFC-4310mee", ]: - fill(f.species_configs["forcing_scale"], df_configs["scale minorGHG"].values.squeeze(), specie=specie) + fill(f.species_configs["forcing_scale"], df_configs["fscale_minorGHG"].values.squeeze(), specie=specie) # ozone for specie in ["CH4", "N2O", "Equivalent effective stratospheric chlorine", "CO", "VOC", "NOx"]: - fill(f.species_configs["ozone_radiative_efficiency"], df_configs[f"o3 {specie}"], specie=specie) + fill(f.species_configs["ozone_radiative_efficiency"], df_configs[f"o3_{specie}"], specie=specie) # initial value of CO2 concentration (but not baseline for forcing calculations) fill( f.species_configs["baseline_concentration"], - df_configs["co2_concentration_1750"].values.squeeze(), + df_configs["cc_co2_concentration_1750"].values.squeeze(), specie="CO2" ) diff --git a/examples/calibrated_constrained_ensemble.ipynb b/examples/calibrated_constrained_ensemble.ipynb index 41a472db..3c81e3e3 100644 --- a/examples/calibrated_constrained_ensemble.ipynb +++ b/examples/calibrated_constrained_ensemble.ipynb @@ -11,27 +11,26 @@ "\n", "We are [developing a set of parameter calibrations](https://github.com/chrisroadmap/fair-calibrate) that reproduce both observed climate change since pre-industrial and assessed climate metrics such as the equilibrium climate sensitivity from the IPCC Sixth Assessement Report.\n", "\n", - "**Note**: if you are reading this tutorial online and want to reproduce the results, you will need one additional file. Grab this from https://github.com/OMS-NetZero/FAIR/blob/master/examples/data/species_configs_properties_calibration1.1.0.csv. In Step 5 below, this is read in from the `data/` directory relative to here. This does not apply if you are running this notebook from Binder or have cloned it from GitHub - it should run out of the box.\n", + "**Note**: if you are reading this tutorial online and want to reproduce the results, you will need one additional file. Grab this from https://github.com/OMS-NetZero/FAIR/blob/master/examples/data/species_configs_properties_calibration1.2.0.csv. In Step 5 below, this is read in from the `data/` directory relative to here. This does not apply if you are running this notebook from Binder or have cloned it from GitHub - it should run out of the box.\n", "\n", "The calibrations will be continually updated, as new data for surface temperature, ocean heat content, external forcing and emissions become available. For now, we have an IPCC AR6 WG1 version (where observational constraints are generally up to somewhere in the 2014 to 2020 period), and assessments of emergent climate metrics are from the IPCC AR6 WG1 Chapter 7. We use emissions data (historical + SSP) from the Reduced Complexity Model Intercomparison Project which was compiled for IPCC AR6 WG3 Chapter 3. We also have calibration versions for replacing historical CO2 emissions by Global Carbon Project estimates. This is v1.1.0 of the `fair-calibrate` package, and can be obtained from the DOI link below.\n", "\n", - "A two-step constraining process is produced. The first step ensures that historical simulations match observed climate change to a root-mean-square error of less than 0.16°C. The second step simultaneously distribution-fits to the following assessed ranges:\n", + "A two-step constraining process is produced. The first step ensures that historical simulations match observed climate change to a root-mean-square error of less than 0.17°C. The second step simultaneously distribution-fits to the following assessed ranges:\n", "\n", "- equilibrium climate sensitivity (ECS), very likely range 2-5°C, best estimate 3°C\n", "- transient climate response (TCR), very likely range 1.2-2.4°C, best estimate 1.8°C\n", - "- global mean surface temperature change 1850-1900 to 1995-2014, very likely range 0.67-0.98°C, best estimate 0.85°C\n", + "- global mean surface temperature change 1850-1900 to 2003-2022, very likely range 0.87-1.13°C, best estimate 1.03°C\n", "- effective radiative forcing from aerosol-radiation interactions 1750 to 2005-2014, very likely range -0.6 to 0 W/m², best estimate -0.3 W/m²\n", "- effective radiative forcing from aerosol-cloud interactions 1750 to 2005-2014, very likely range -1.7 to -0.3 W/m², best estimate -1.0 W/m²\n", "- effective radiative forcing from aerosols 1750 to 2005-2014, very likely range -2.0 to -0.6 W/m², best estimate -1.3 W/m²\n", - "- ocean heat content change 1971 to 2018, likely range 329-463 ZJ, best estimate 396 ZJ\n", - "- CO2 concentrations in 2014, very likely range 396.95-398.15 ppm, best estimate 397.55 ppm\n", - "- future warming in SSP245 1995-2014 to 2081-2100, 1.24-2.59°C, best estimate 1.81°C. Note the IPCC constraint was concentration driven, in fair-calibrate v1.1.0 an emissions-driven constraint was used.\n", + "- earth energy uptake change 1971 to 2020, very likely range 358-573 ZJ, best estimate 465 ZJ\n", + "- CO2 concentrations in 2014, very likely range 416.2-417.8 ppm, best estimate 417.0 ppm\n", "\n", "1001 posterior ensemble members are produced from an initial prior of 1.5 million.\n", "\n", "There are many, many, many different calibration and constraining possibilities, and it depends on your purposes as to what is appropriate. If you care about the carbon cycle, you might want to constrain on TCRE and ZEC in addition, or instead of, some of the other constraints above. Not all constraints are necessarily internally consistent, and there will be some tradeoff; it is impossible to hit the above ranges perfectly. As more constraints are added, this gets harder, or will require larger prior sample sizes.\n", "\n", - "" + "" ] }, { @@ -152,9 +151,9 @@ "metadata": {}, "outputs": [], "source": [ - "fair_params_1_1_0_obj = pooch.retrieve(\n", - " url = 'https://zenodo.org/record/7694879/files/calibrated_constrained_parameters.csv',\n", - " known_hash = 'md5:9f236c43dd18a36b7b63b94e05f3caab',\n", + "fair_params_1_2_0_obj = pooch.retrieve(\n", + " url = 'https://zenodo.org/record/8399112/files/calibrated_constrained_parameters.csv',\n", + " known_hash = 'md5:de3b83432b9d071efdd1427ad31e9076',\n", ")" ] }, @@ -165,7 +164,7 @@ "metadata": {}, "outputs": [], "source": [ - "df_configs = pd.read_csv(fair_params_1_1_0_obj, index_col=0)\n", + "df_configs = pd.read_csv(fair_params_1_2_0_obj, index_col=0)\n", "configs = df_configs.index # this is used as a label for the \"config\" axis\n", "f.define_configs(configs)" ] @@ -211,7 +210,7 @@ "metadata": {}, "outputs": [], "source": [ - "species, properties = read_properties(filename='data/species_configs_properties_calibration1.1.0.csv')\n", + "species, properties = read_properties(filename='data/species_configs_properties_calibration1.2.0.csv')\n", "f.define_species(species, properties)" ] }, @@ -372,8 +371,8 @@ "outputs": [], "source": [ "volcanic_obj = pooch.retrieve(\n", - " url = 'https://raw.githubusercontent.com/chrisroadmap/fair-add-hfc/main/data/volcanic_ERF_monthly_174901-201912.csv',\n", - " known_hash = 'md5:d3ac469ee7d2c2c75fbb656c2c67c4aa',\n", + " url = 'https://raw.githubusercontent.com/chrisroadmap/fair-calibrate/main/data/forcing/volcanic_ERF_1750-2101_timebounds.csv',\n", + " known_hash = 'md5:c0801f80f70195eb9567dbd70359219d',\n", ")" ] }, @@ -409,13 +408,7 @@ "source": [ "solar_forcing = np.zeros(551)\n", "volcanic_forcing = np.zeros(551)\n", - "for i, year in enumerate(np.arange(1750, 2021)):\n", - " volcanic_forcing[i] = np.mean(\n", - " df_volcanic.loc[\n", - " ((year - 1) <= df_volcanic[\"year\"]) & (df_volcanic[\"year\"] < year)\n", - " ].erf\n", - " )\n", - "volcanic_forcing[271:281] = np.linspace(1, 0, 10) * volcanic_forcing[270]\n", + "volcanic_forcing[:352] = df_volcanic.erf.values\n", "solar_forcing = df_solar[\"erf\"].loc[1750:2300].values\n", "\n", "trend_shape = np.ones(551)\n", @@ -439,13 +432,13 @@ "source": [ "fill(\n", " f.forcing,\n", - " volcanic_forcing[:, None, None] * df_configs[\"scale Volcanic\"].values.squeeze(),\n", + " volcanic_forcing[:, None, None] * df_configs[\"fscale_Volcanic\"].values.squeeze(),\n", " specie=\"Volcanic\",\n", ")\n", "fill(\n", " f.forcing,\n", - " solar_forcing[:, None, None] * df_configs[\"solar_amplitude\"].values.squeeze()\n", - " + trend_shape[:, None, None] * df_configs[\"solar_trend\"].values.squeeze(),\n", + " solar_forcing[:, None, None] * df_configs[\"fscale_solar_amplitude\"].values.squeeze()\n", + " + trend_shape[:, None, None] * df_configs[\"fscale_solar_trend\"].values.squeeze(),\n", " specie=\"Solar\",\n", ")" ] @@ -477,19 +470,19 @@ "metadata": {}, "outputs": [], "source": [ - "fill(f.climate_configs[\"ocean_heat_capacity\"], df_configs.loc[:, \"c1\":\"c3\"].values)\n", + "fill(f.climate_configs[\"ocean_heat_capacity\"], df_configs.loc[:, \"clim_c1\":\"clim_c3\"].values)\n", "fill(\n", " f.climate_configs[\"ocean_heat_transfer\"],\n", - " df_configs.loc[:, \"kappa1\":\"kappa3\"].values,\n", + " df_configs.loc[:, \"clim_kappa1\":\"clim_kappa3\"].values,\n", ")\n", - "fill(f.climate_configs[\"deep_ocean_efficacy\"], df_configs[\"epsilon\"].values.squeeze())\n", - "fill(f.climate_configs[\"gamma_autocorrelation\"], df_configs[\"gamma\"].values.squeeze())\n", - "fill(f.climate_configs[\"sigma_eta\"], df_configs[\"sigma_eta\"].values.squeeze())\n", - "fill(f.climate_configs[\"sigma_xi\"], df_configs[\"sigma_xi\"].values.squeeze())\n", + "fill(f.climate_configs[\"deep_ocean_efficacy\"], df_configs[\"clim_epsilon\"].values.squeeze())\n", + "fill(f.climate_configs[\"gamma_autocorrelation\"], df_configs[\"clim_gamma\"].values.squeeze())\n", + "fill(f.climate_configs[\"sigma_eta\"], df_configs[\"clim_sigma_eta\"].values.squeeze())\n", + "fill(f.climate_configs[\"sigma_xi\"], df_configs[\"clim_sigma_xi\"].values.squeeze())\n", "fill(f.climate_configs[\"seed\"], df_configs[\"seed\"])\n", "fill(f.climate_configs[\"stochastic_run\"], True)\n", "fill(f.climate_configs[\"use_seed\"], True)\n", - "fill(f.climate_configs[\"forcing_4co2\"], df_configs[\"F_4xCO2\"])" + "fill(f.climate_configs[\"forcing_4co2\"], df_configs[\"clim_F_4xCO2\"])" ] }, { @@ -509,7 +502,7 @@ "metadata": {}, "outputs": [], "source": [ - "f.fill_species_configs(filename='data/species_configs_properties_calibration1.1.0.csv')" + "f.fill_species_configs(filename='data/species_configs_properties_calibration1.2.0.csv')" ] }, { @@ -528,16 +521,16 @@ "outputs": [], "source": [ "# carbon cycle\n", - "fill(f.species_configs[\"iirf_0\"], df_configs[\"r0\"].values.squeeze(), specie=\"CO2\")\n", - "fill(f.species_configs[\"iirf_airborne\"], df_configs[\"rA\"].values.squeeze(), specie=\"CO2\")\n", - "fill(f.species_configs[\"iirf_uptake\"], df_configs[\"rU\"].values.squeeze(), specie=\"CO2\")\n", - "fill(f.species_configs[\"iirf_temperature\"], df_configs[\"rT\"].values.squeeze(), specie=\"CO2\")\n", + "fill(f.species_configs[\"iirf_0\"], df_configs[\"cc_r0\"].values.squeeze(), specie=\"CO2\")\n", + "fill(f.species_configs[\"iirf_airborne\"], df_configs[\"cc_rA\"].values.squeeze(), specie=\"CO2\")\n", + "fill(f.species_configs[\"iirf_uptake\"], df_configs[\"cc_rU\"].values.squeeze(), specie=\"CO2\")\n", + "fill(f.species_configs[\"iirf_temperature\"], df_configs[\"cc_rT\"].values.squeeze(), specie=\"CO2\")\n", "\n", "# aerosol indirect\n", - "fill(f.species_configs[\"aci_scale\"], df_configs[\"beta\"].values.squeeze())\n", - "fill(f.species_configs[\"aci_shape\"], df_configs[\"shape Sulfur\"].values.squeeze(), specie=\"Sulfur\")\n", - "fill(f.species_configs[\"aci_shape\"], df_configs[\"shape BC\"].values.squeeze(), specie=\"BC\")\n", - "fill(f.species_configs[\"aci_shape\"], df_configs[\"shape OC\"].values.squeeze(), specie=\"OC\")\n", + "fill(f.species_configs[\"aci_scale\"], df_configs[\"aci_beta\"].values.squeeze())\n", + "fill(f.species_configs[\"aci_shape\"], df_configs[\"aci_shape_so2\"].values.squeeze(), specie=\"Sulfur\")\n", + "fill(f.species_configs[\"aci_shape\"], df_configs[\"aci_shape_bc\"].values.squeeze(), specie=\"BC\")\n", + "fill(f.species_configs[\"aci_shape\"], df_configs[\"aci_shape_oc\"].values.squeeze(), specie=\"OC\")\n", "\n", "# aerosol direct\n", "for specie in [\n", @@ -551,7 +544,7 @@ " \"VOC\",\n", " \"Equivalent effective stratospheric chlorine\"\n", "]:\n", - " fill(f.species_configs[\"erfari_radiative_efficiency\"], df_configs[f\"ari {specie}\"], specie=specie)\n", + " fill(f.species_configs[\"erfari_radiative_efficiency\"], df_configs[f\"ari_{specie}\"], specie=specie)\n", "\n", "# forcing scaling\n", "for specie in [\n", @@ -563,7 +556,7 @@ " \"Light absorbing particles on snow and ice\", \n", " \"Land use\"\n", "]:\n", - " fill(f.species_configs[\"forcing_scale\"], df_configs[f\"scale {specie}\"].values.squeeze(), specie=specie)\n", + " fill(f.species_configs[\"forcing_scale\"], df_configs[f\"fscale_{specie}\"].values.squeeze(), specie=specie)\n", "# the halogenated gases all take the same scale factor\n", "for specie in [\n", " \"CFC-11\",\n", @@ -607,16 +600,16 @@ " \"HFC-365mfc\",\n", " \"HFC-4310mee\",\n", "]:\n", - " fill(f.species_configs[\"forcing_scale\"], df_configs[\"scale minorGHG\"].values.squeeze(), specie=specie)\n", + " fill(f.species_configs[\"forcing_scale\"], df_configs[\"fscale_minorGHG\"].values.squeeze(), specie=specie)\n", "\n", "# ozone\n", "for specie in [\"CH4\", \"N2O\", \"Equivalent effective stratospheric chlorine\", \"CO\", \"VOC\", \"NOx\"]:\n", - " fill(f.species_configs[\"ozone_radiative_efficiency\"], df_configs[f\"o3 {specie}\"], specie=specie)\n", + " fill(f.species_configs[\"ozone_radiative_efficiency\"], df_configs[f\"o3_{specie}\"], specie=specie)\n", "\n", "# initial value of CO2 concentration (but not baseline for forcing calculations)\n", "fill(\n", " f.species_configs[\"baseline_concentration\"], \n", - " df_configs[\"co2_concentration_1750\"].values.squeeze(), \n", + " df_configs[\"cc_co2_concentration_1750\"].values.squeeze(), \n", " specie=\"CO2\"\n", ")" ] diff --git a/examples/data/species_configs_properties_calibration1.1.0.csv b/examples/data/species_configs_properties_calibration1.2.0.csv similarity index 98% rename from examples/data/species_configs_properties_calibration1.1.0.csv rename to examples/data/species_configs_properties_calibration1.2.0.csv index 17d90dcd..62f05e32 100644 --- a/examples/data/species_configs_properties_calibration1.1.0.csv +++ b/examples/data/species_configs_properties_calibration1.2.0.csv @@ -2,14 +2,14 @@ name,type,input_mode,greenhouse_gas,aerosol_chemistry_from_emissions,aerosol_che CO2 FFI,co2 ffi,emissions,0,0,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,nan,nan,nan,0,nan,nan,nan,nan,0,nan,nan,nan,nan,nan,nan,nan,0,nan,nan,nan,nan,nan,0,0,nan CO2 AFOLU,co2 afolu,emissions,0,0,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,nan,nan,nan,0,nan,nan,nan,nan,0,nan,nan,nan,nan,nan,nan,nan,-0.00028729,nan,nan,nan,nan,nan,0,0,nan CO2,co2,calculated,1,0,0,0.2173,0.224,0.2824,0.2763,1000000000,394.4,36.54,4.304,0.05,1,0,1,44.009,278.3,277.15,0,29,0.000819,0.00846,4,0,11.41262243,0.010178288,1.33E-05,0,0,0,0,nan,0,0,0,0,nan,0,0,nan -CH4,ch4,emissions,1,0,1,1,0,0,0,9.99789416859927,9.99789416859927,9.99789416859927,9.99789416859927,-0.14,1,0,1,16.043,729.2,731.41,0,8.249955097,0.00032,0,-0.3,19.0197831178096,8.249410814,0.36785517,0.000388644,0,-2.27E-06,0.091914639,0,0,0.000175,0,0,0,nan,0,0.000254099313466,-0.0408 -N2O,n2o,emissions,1,0,1,1,0,0,0,109,109,109,109,0.07,1,0,1,44.013,270.1,273.87,0,65.44969575,-0.0065,0,0,0.08602230754,25.49528818,0.076755588,0.003195507,0,-3.64E-05,0,0,0,0.00071,0,0,0,nan,0,-0.000722664594951,nan +CH4,ch4,emissions,1,0,1,1,0,0,0,10.0069820981251,10.0069820981251,10.0069820981251,10.0069820981251,-0.14,1,0,1,16.043,729.2,731.41,0,8.249955097,0.00032,0,-0.3,19.0197831178096,8.249410814,0.36785517,0.000388644,0,-2.27E-06,0.091914639,0,0,0.000175,0,0,0,nan,0,0.000254099313466,-0.0408 +N2O,n2o,emissions,1,0,1,1,0,0,0,109,109,109,109,0.07,1,0,1,44.013,270.1,273.87,0,65.44969575,-0.0065,0,0,0.08602230754,25.49528818,0.076755588,0.003195507,0,-3.64E-05,0,0,0,0.00071,0,0,0,nan,0,-0.000722664594975,nan Sulfur,sulfur,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,64.069,nan,nan,2.440048435,nan,nan,nan,nan,2.440048435,nan,nan,nan,0,-0.00286,0,0,0,0,nan,nan,nan,nan,0.0169,0,nan BC,black carbon,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,12.011,nan,nan,2.097770755,nan,nan,nan,nan,2.097770755,nan,nan,nan,0,0.021,0,0.011585926,0,0,nan,nan,nan,nan,1.04E-15,0,nan OC,organic carbon,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,12.011,nan,nan,15.44766815,nan,nan,nan,nan,15.44766815,nan,nan,nan,0,-0.00396,0,0,0,0,nan,nan,nan,nan,0.0309,0,nan NH3,other slcf,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,17.031,nan,nan,6.927690091,nan,nan,nan,nan,6.927690091,nan,nan,nan,0,-0.000565,0,0,0,0,nan,nan,nan,nan,0,0,nan -NOx,other slcf,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,46.006,nan,nan,12.73521194,nan,nan,nan,nan,19.4235267302062,nan,nan,nan,0,-6.7E-05,0,0,0,0.0018,nan,nan,nan,nan,0,-0.002511067439846,nan -VOC,other slcf,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,59.746,nan,nan,60.02182622,nan,nan,nan,nan,60.02182622,nan,nan,nan,0,-1.6E-05,0,0,0,0.000329,nan,nan,nan,nan,0,0.001619263533682,nan +NOx,other slcf,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,46.006,nan,nan,12.73521194,nan,nan,nan,nan,19.4235267302062,nan,nan,nan,0,-6.7E-05,0,0,0,0.0018,nan,nan,nan,nan,0,-0.002518132989842,nan +VOC,other slcf,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,59.746,nan,nan,60.02182622,nan,nan,nan,nan,60.02182622,nan,nan,nan,0,-1.6E-05,0,0,0,0.000329,nan,nan,nan,nan,0,0.001619263533787,nan CO,other slcf,emissions,0,1,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,28.01,nan,nan,348.5273588,nan,nan,nan,nan,348.5273588,nan,nan,nan,0,0,0,0,0,0.000155,nan,nan,nan,nan,0,0,nan CFC-11,cfc-11,emissions,1,0,0,1,0,0,0,52,52,52,52,0.13,1,0,1,137.36,0,0,0,44.39985903,0,0,0,0,29.78420333,0.225210813,0.25941,0,0,0,0,0,0,3,0,0.47,nan,0,0,nan CFC-12,other halogen,emissions,1,0,0,1,0,0,0,102,102,102,102,0.12,1,0,1,120.91,0,0,0,63.73327742,0,0,0,0,26.21688273,0.087948721,0.31998,0,0,0,0,0,0,2,0,0.23,nan,0,0,nan @@ -62,4 +62,4 @@ Contrails,contrails,calculated,0,0,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,nan Light absorbing particles on snow and ice,lapsi,calculated,0,0,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,0,0,nan Stratospheric water vapour,h2o stratospheric,calculated,0,0,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,0,0,nan Land use,land use,calculated,0,0,0,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,0,0,nan -Equivalent effective stratospheric chlorine,eesc,calculated,0,0,1,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,35.45,344.3627591056,0,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,-7.17E-06,nan,nan,nan,-0.000125,nan,nan,nan,nan,0,-5.3273763975757E-06,nan +Equivalent effective stratospheric chlorine,eesc,calculated,0,0,1,nan,nan,nan,nan,nan,nan,nan,nan,0,1,0,1,35.45,344.3627591056,0,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,-7.17E-06,nan,nan,nan,-0.000125,nan,nan,nan,nan,0,-5.32737639676416E-06,nan