diff --git a/.gitignore b/.gitignore index e69de29bb..5ceb3864c 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1 @@ +venv diff --git a/activity/aerchemmip.json b/activity/aerchemmip.json index 4bc746b1c..1d35b74ed 100644 --- a/activity/aerchemmip.json +++ b/activity/aerchemmip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "aerchemmip", - "name": "AerChemMIP", - "cmip_acronym": "AerChemMIP", - "long_name": "Aerosols and Chemistry Model Intercomparison Project", - "url": null, + "type": "activity", + "description": "Aerosols and chemistry model intercomparison project: exploration of aerosol chemistry.", "drs_name": "AerChemMIP" -} \ No newline at end of file +} diff --git a/activity/c4mip.json b/activity/c4mip.json index a6205b852..c937e04b7 100644 --- a/activity/c4mip.json +++ b/activity/c4mip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "c4mip", - "name": "C4MIP", - "cmip_acronym": "C4MIP", - "long_name": "Coupled Climate Carbon Cycle Model Intercomparison Project", - "url": null, + "type": "activity", + "description": "Coupled climate carbon cycle model intercomparison project: exploration of the response of the coupled carbon-climate system.", "drs_name": "C4MIP" -} \ No newline at end of file +} diff --git a/activity/cfmip.json b/activity/cfmip.json index bf2925e95..a4d787523 100644 --- a/activity/cfmip.json +++ b/activity/cfmip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "cfmip", - "name": "CFMIP", - "cmip_acronym": "CFMIP", - "long_name": "Cloud Feedback Model Intercomparison Project", - "url": null, + "type": "activity", + "description": "Cloud feedback model intercomparison project. Focussed primarily on cloud feedbacks with a secondary focus on understanding of response to forcing, model biases, circulation, regional-scale precipitation, and non-linear changes.", "drs_name": "CFMIP" -} \ No newline at end of file +} diff --git a/activity/cmip.json b/activity/cmip.json index 7ffff8bec..8d11ed85f 100644 --- a/activity/cmip.json +++ b/activity/cmip.json @@ -2,13 +2,6 @@ "@context": "000_context.jsonld", "id": "cmip", "type": "activity", - "description": "CMIP core common experiments i.e. the DECK (Diagnostic, Evaluation and Characterization of Klima)", - "drs_name": "CMIP", - "experiments": [ - "esm-hist", - "esm-picontrol", - "historical", - "picontrol" - ], - "urls": ["https://doi.org/10.5194/gmd-18-6671-2025"] + "description": "CMIP core common experiments i.e. the DECK (Diagnostic, Evaluation and Characterization of Klima).", + "drs_name": "CMIP" } diff --git a/activity/damip.json b/activity/damip.json index 197a155b8..e40ba8527 100644 --- a/activity/damip.json +++ b/activity/damip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "damip", - "name": "DAMIP", - "cmip_acronym": "DAMIP", - "long_name": "Detection and Attribution Model Intercomparison Project", - "url": null, + "type": "activity", + "description": "Detection and attribution model intercomparison project: exploration of the role of individual forcings (both anthropogenic and natural) in past and future climate change.", "drs_name": "DAMIP" -} \ No newline at end of file +} diff --git a/activity/geomip.json b/activity/geomip.json index f1ba1d48e..68f6f9c13 100644 --- a/activity/geomip.json +++ b/activity/geomip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "geomip", - "name": "GeoMIP", - "cmip_acronym": "GeoMIP", - "long_name": "Geoengineering Model Intercomparison Project", - "url": null, + "type": "activity", + "description": "Geoengineering model intercomparison project: exploration of the climate response to solar radiation manipulation.", "drs_name": "GeoMIP" -} \ No newline at end of file +} diff --git a/activity/lmip.json b/activity/lmip.json index 520aacc0c..7e04d76d5 100644 --- a/activity/lmip.json +++ b/activity/lmip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "lmip", - "name": "LMIP", - "cmip_acronym": "LMIP", - "long_name": "Land-offline Model Intercomparison Project", - "url": null, + "type": "activity", + "description": "Land surface, snow and soil moisture model intercomparison project: assessment of land surface, snow and soil moisture feedbacks on climate variability and climate change, and diagnosis of systematic biases in the land modules of Earth system models (ESMs).", "drs_name": "LMIP" -} \ No newline at end of file +} diff --git a/activity/pmip.json b/activity/pmip.json index 7ba25667d..3b91f3f40 100644 --- a/activity/pmip.json +++ b/activity/pmip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "pmip", - "name": "PMIP", - "cmip_acronym": "PMIP", - "long_name": "Palaeoclimate Modelling Intercomparison Project", - "url": null, + "type": "activity", + "description": "Palaeoclimate modelling intercomparison project: assessment of paleoclimate i.e. climate thousands of years or more in the past.", "drs_name": "PMIP" -} \ No newline at end of file +} diff --git a/activity/rfmip.json b/activity/rfmip.json index 02268d0c3..ea72dd16f 100644 --- a/activity/rfmip.json +++ b/activity/rfmip.json @@ -1,10 +1,7 @@ { "@context": "000_context.jsonld", - "type": "activity", "id": "rfmip", - "name": "RFMIP", - "cmip_acronym": "RFMIP", - "long_name": "Radiative Forcing Model Intercomparison Project", - "url": null, + "type": "activity", + "description": " Radiative Forcing Model Intercomparison Project: characterisation of radiative forcing within models.", "drs_name": "RFMIP" -} \ No newline at end of file +} diff --git a/activity/scenariomip.json b/activity/scenariomip.json index 0c3eabfc9..3bfd2653f 100644 --- a/activity/scenariomip.json +++ b/activity/scenariomip.json @@ -2,6 +2,6 @@ "@context": "000_context.jsonld", "id": "scenariomip", "type": "activity", - "description": "Future scenario experiments. Exploration of the future climate under a (selected) range of possible boundary conditions", + "description": "Future scenario experiments. Exploration of the future climate under a (selected) range of possible boundary conditions.", "drs_name": "ScenarioMIP" } diff --git a/experiment/1pctco2-bgc.json b/experiment/1pctco2-bgc.json index 0ab6ab3c5..b162eb084 100644 --- a/experiment/1pctco2-bgc.json +++ b/experiment/1pctco2-bgc.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "1pctco2-bgc", "type": "experiment", - "experiment_id": "1pctCO2-bgc", - "activity_id": [ - "c4mip" - ], + "description": "Biogeochemically coupled simulation (i.e. the carbon cycle only 'sees' the increase in atmospheric carbon dioxide, not any change in temperature) of a 1% per year increase in atmospheric carbon dioxide levels. All other conditions are kept the same as piControl.", + "drs_name": "1pctCO2-bgc", + "start_timestamp": null, + "end_timestamp": null, + "activity": "c4mip", "additional_allowed_model_components": [ "aer", "chem" ], - "description": "Biogeochemically-coupled specified concentration simulation in which CO2 increases at a rate of 1% per year until quadrupling", - "end_year": null, - "experiment": "biogeochemically-coupled version of 1 percent per year increasing CO2 experiment", - "min_number_yrs_per_sim": "150", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm", "bgc" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "1pctCO2-bgc" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/1pctco2-rad.json b/experiment/1pctco2-rad.json index dc236d0ca..05a5cff74 100644 --- a/experiment/1pctco2-rad.json +++ b/experiment/1pctco2-rad.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "1pctco2-rad", "type": "experiment", - "experiment_id": "1pctCO2-rad", - "activity_id": [ - "c4mip" - ], + "description": "Radiatively coupled simulation (i.e. the carbon cycle only 'sees' the increase in temperature, not any change in atmospheric carbon dioxide) of a 1% per year increase in atmospheric carbon dioxide levels. All other conditions are kept the same as piControl.", + "drs_name": "1pctCO2-rad", + "start_timestamp": null, + "end_timestamp": null, + "activity": "c4mip", "additional_allowed_model_components": [ "aer", "chem" ], - "description": "Radiatively-coupled specified concentration simulation in which CO2 increases at a rate of 1% per year until quadrupling", - "end_year": null, - "experiment": "radiatively-coupled version of 1 percent per year increasing CO2 experiment", - "min_number_yrs_per_sim": "150", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm", "bgc" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "2", - "drs_name": "1pctCO2-rad" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/1pctco2.json b/experiment/1pctco2.json index a9650b1d5..4c05366a1 100644 --- a/experiment/1pctco2.json +++ b/experiment/1pctco2.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "1pctco2", "type": "experiment", - "experiment_id": "1pctCO2", - "activity_id": [ - "cmip" - ], + "description": "1% per year increase in atmospheric carbon dioxide levels. All other conditions are kept the same as piControl.", + "drs_name": "1pctCO2", + "start_timestamp": null, + "end_timestamp": null, + "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "DECK: 1pctCO2", - "end_year": null, - "experiment": "1 percent per year increase in CO2", - "min_number_yrs_per_sim": 150, - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": 1, - "drs_name": "1pctCO2" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/abrupt-0p5xco2.json b/experiment/abrupt-0p5xco2.json index 60a55cf71..e5004b764 100644 --- a/experiment/abrupt-0p5xco2.json +++ b/experiment/abrupt-0p5xco2.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "abrupt-0p5xco2", "type": "experiment", - "experiment_id": "abrupt-0p5xCO2", - "activity_id": [ - "cfmip" - ], + "description": "Abrupt halving of atmospheric carbon dioxide levels. All other conditions are kept the same as piControl.", + "drs_name": "abrupt-0p5xCO2", + "start_timestamp": null, + "end_timestamp": null, + "activity": "cfmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "Identical to the DECK abrupt-4xCO2, but at 0.5xCO2", - "end_year": null, - "experiment": "abrupt halving of CO2", - "min_number_yrs_per_sim": "150", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "2", - "drs_name": "abrupt-0p5xCO2" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/abrupt-127k.json b/experiment/abrupt-127k.json index d80a8a988..0134b7a32 100644 --- a/experiment/abrupt-127k.json +++ b/experiment/abrupt-127k.json @@ -2,33 +2,23 @@ "@context": "000_context.jsonld", "id": "abrupt-127k", "type": "experiment", - "experiment_id": "abrupt-127k", - "activity_id": [ - "pmip" - ], + "description": "Simulation to examine the response to orbital and greenhouse gas concentration changes associated with the last interglacial (127 000 years before present).", + "drs_name": "abrupt-127k", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 100.0, + "activity": "pmip", "additional_allowed_model_components": [ - "aogcm", "aer", - "bgc", - "chem" - ], - "description": "Conceptually similar to abrupt-4xCO2 DECK experiment, except that orbital forcing (eccentricity, obliquity, length of perihelion) and greenhouse gas concentrations as per PMIP4 lig127k (Otto-Bliesner et al., 2017; also refer to Sime et al. in prep.) are abruptly changed from those of piControl, that also serves as an initial state, to their configuration of 127,000 years ago, with high boreal spring to autumn insolation leading to low sea-ice in the Arctic. AOGCM initialized from a spun-up piControl with constant-in-time forcing of orbital parameters and greenhouse gas concentrations indicative of 127,000 years before present; use of components AER, CHEM, BGC is allowed, yet it must be ensured that relevant greenhouse gas concentrations in the atmosphere stay constant at the specified values throughout the simulation; relevant references: Otto-Bliesner et al. (2017), https://gmd.copernicus.org/articles/10/3979/2017/; Guarino et al (2020), https://www.nature.com/articles/s41558-020-0865-2; Sime et al. (2023), https://cp.copernicus.org/articles/19/883/2023/", - "end_year": null, - "experiment": "abrupt imposure of the orbit and greenhouse gases of 127 ka before present", - "min_number_yrs_per_sim": "100", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" + "chem", + "bgc" ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "abrupt-127k" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/abrupt-2xco2.json b/experiment/abrupt-2xco2.json index 2ad5438ef..e186261ca 100644 --- a/experiment/abrupt-2xco2.json +++ b/experiment/abrupt-2xco2.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "abrupt-2xco2", "type": "experiment", - "experiment_id": "abrupt-2xCO2", - "activity_id": [ - "cfmip" - ], + "description": "Abrupt doubling of atmospheric carbon dioxide levels. All other conditions are kept the same as piControl.", + "drs_name": "abrupt-2xCO2", + "start_timestamp": null, + "end_timestamp": null, + "activity": "cfmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "Identical to the DECK abrupt-4xCO2, but at 2xCO2", - "end_year": null, - "experiment": "abrupt doubling of CO2", - "min_number_yrs_per_sim": "150", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "2", - "drs_name": "abrupt-2xCO2" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/abrupt-4xco2.json b/experiment/abrupt-4xco2.json index d5df09e78..8c4c698f3 100644 --- a/experiment/abrupt-4xco2.json +++ b/experiment/abrupt-4xco2.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "abrupt-4xco2", "type": "experiment", - "experiment_id": "abrupt-4xCO2", - "activity_id": [ - "cmip" - ], + "description": "Abrupt quadrupling of atmospheric carbon dioxide levels. All other conditions are kept the same as piControl.", + "drs_name": "abrupt-4xCO2", + "start_timestamp": null, + "end_timestamp": null, + "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "DECK: abrupt-4xCO2", - "end_year": null, - "experiment": "abrupt quadrupling of CO2", - "min_number_yrs_per_sim": 150, - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": 1, - "drs_name": "abrupt-4xCO2" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/amip-p4k.json b/experiment/amip-p4k.json index 1b77657d0..7b0b07666 100644 --- a/experiment/amip-p4k.json +++ b/experiment/amip-p4k.json @@ -2,31 +2,23 @@ "@context": "000_context.jsonld", "id": "amip-p4k", "type": "experiment", - "experiment_id": "amip-p4K", - "activity_id": [ - "cfmip" - ], + "description": "Same as `amip` simulation, except sea surface temperatures are increased by 4K in ice-free regions.", + "drs_name": "amip-p4k", + "start_timestamp": null, + "end_timestamp": null, + "activity": "cfmip", "additional_allowed_model_components": [ "aer", - "chem" - ], - "description": "As CMIP5/CFMIP-2 amip4K experiment. AMIP experiment where SSTs are subject to a uniform warming of 4K", - "end_year": 2014, - "experiment": "AMIP with uniform 4K SST increase", - "min_number_yrs_per_sim": "36", - "parent_activity_id": [ - "no parent" - ], - "parent_experiment_id": [ - "no parent" + "chem", + "bgc" ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm" ], - "start_year": 1979, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "amip-p4K" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/amip-piforcing.json b/experiment/amip-piforcing.json index 17dfd6ca2..20117e66f 100644 --- a/experiment/amip-piforcing.json +++ b/experiment/amip-piforcing.json @@ -2,31 +2,23 @@ "@context": "000_context.jsonld", "id": "amip-piforcing", "type": "experiment", - "experiment_id": "amip-piForcing", - "activity_id": [ - "cfmip" - ], + "description": "Same as `amip` simulation, except it starts in 1870 and all forcings are set to pre-industrial levels rather than time-varying forcings.", + "drs_name": "amip-piForcing", + "start_timestamp": null, + "end_timestamp": null, + "activity": "cfmip", "additional_allowed_model_components": [ "aer", - "chem" - ], - "description": "Identical to standard AMIP experiment but from 1870-present with constant pre-industrial forcing levels (anthropogenic and natural)", - "end_year": 2014, - "experiment": "AMIP SSTs with pre-industrial anthropogenic and natural forcing", - "min_number_yrs_per_sim": "145", - "parent_activity_id": [ - "no parent" - ], - "parent_experiment_id": [ - "no parent" + "chem", + "bgc" ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm" ], - "start_year": 1870, - "sub_experiment_id": [ - "none" - ], - "tier": "2", - "drs_name": "amip-piForcing" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/amip.json b/experiment/amip.json index f85f94a20..cf28b4c60 100644 --- a/experiment/amip.json +++ b/experiment/amip.json @@ -2,32 +2,23 @@ "@context": "000_context.jsonld", "id": "amip", "type": "experiment", - "experiment_id": "amip", - "activity_id": [ - "cmip" - ], + "description": "Simulation of the climate of the recent past with prescribed sea surface temperatures and sea ice concentrations.", + "drs_name": "amip", + "start_timestamp": null, + "end_timestamp": null, + "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "DECK: AMIP", - "end_year": 2022, - "experiment": "AMIP", - "min_number_yrs_per_sim": 43, - "parent_activity_id": [ - "no parent" - ], - "parent_experiment_id": [ - "no parent" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm" ], - "start_year": 1979, - "sub_experiment_id": [ - "none" - ], - "tier": 1, - "drs_name": "amip" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/esm-flat10-cdr.json b/experiment/esm-flat10-cdr.json index 36d9c3394..62715d734 100644 --- a/experiment/esm-flat10-cdr.json +++ b/experiment/esm-flat10-cdr.json @@ -2,35 +2,23 @@ "@context": "000_context.jsonld", "id": "esm-flat10-cdr", "type": "experiment", - "experiment_id": "esm-flat10-cdr", - "activity_id": [ - "c4mip" - ], + "description": "Extension of `esm-flat10` where emissions decline linearly to -10 PgC / yr then stay constant until cumulative emissions (including the emissions in `esm-flat10`) reach zero. An extra 20 years is included at the end to allow for calculating averages over different time windows.", + "drs_name": "esm-flat10-cdr", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 220.0, + "activity": "c4mip", "additional_allowed_model_components": [ - "agcm", - "bgc", "aer", - "chem", - "ism" - ], - "description": "esm-flat10-cdr is newly introduced for CMIP7 as an emissions-driven idealised experiment to quantify sensitivity of the earth system to CO2 removal / negative emissions. It requires fully-coupled AOGCM and BGC models with carbon cycle “emissions-driven” The esm-flat10-cdr experiment branches from year 100 of the esm-flat10 simulation, but with CO2 emissions set to decline linearly to zero after 50 years, decrease further (becoming negative) over the next 50 years (reaching -10 PgC/yr) and then remain constant at -10 PgC/yr for a final 100 years. It serves as an emissions-driven experiment to diagnose the reversibility of the Earth system due to carbon dioxide removal. By the end of the simulation the cumulative emissions over 300 years will be exactly zero – the same amount of CO2 has been removed as was added. Used with the partner experiments esm-flat10 and esm-flat10-zec it forms a vital part of assessment of TCRE, ZEC and reversibility. In particular these experiments make assessment of ZEC easier than CMIP6 because: the experiment is emissions-driven from the outset and does not require a change in configuration at the branch point and the branch point is common across all models. more details and analysis can be found here: https://egusphere.copernicus.org/preprints/2023/egusphere-2023-2127/ https://egusphere.copernicus.org/preprints/2024/egusphere-2024-3356/ this experiment is an evolution of the CDRMIP simulations from CMIP6: https://gmd.copernicus.org/articles/11/1133/2018/", - "end_year": null, - "experiment": "10 PgC/yr constant CO2 removal / negative emissions experiment", - "min_number_yrs_per_sim": "200", - "parent_activity_id": [ - "c4mip" - ], - "parent_experiment_id": [ - "esm-flat10" + "chem" ], + "branch_information": "Branch from `esm-flat10` at the end of year 100.", + "min_ensemble_size": 1, + "parent_activity": "c4mip", + "parent_experiment": "esm-flat10", "required_model_components": [ - "agcm", + "aogcm", "bgc" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "esm-flat10-cdr" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/esm-flat10-zec.json b/experiment/esm-flat10-zec.json index 2e3fe62f1..1401f3c24 100644 --- a/experiment/esm-flat10-zec.json +++ b/experiment/esm-flat10-zec.json @@ -2,35 +2,23 @@ "@context": "000_context.jsonld", "id": "esm-flat10-zec", "type": "experiment", - "experiment_id": "esm-flat10-zec", - "activity_id": [ - "c4mip" - ], + "description": "Extension of `esm-flat10` with zero emissions.", + "drs_name": "esm-flat10-zec", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 100.0, + "activity": "c4mip", "additional_allowed_model_components": [ - "aogcm", - "bgc", "aer", - "chem", - "ism" - ], - "description": "esm-flat10-zec is newly introduced for CMIP7 as an emissions-driven idealised experiment to quantify sensitivity of the earth system to CO2 emissions. It requires fully-coupled AOGCM and BGC models with carbon cycle “emissions-driven” The esm-flat10-zec experiment branches from year 100 of the esm-flat10 simulation, but with CO2 emissions set to zero for initial (minimum) period of 200 years. Longer runs are useful. It serves as an emissions-driven experiment to diagnose the Zero Emissions Commitment (ZEC), which is the continued warming (or cooling) following a sudden cessation of CO2 emissions. Used with the partner experiments esm-flat10 and esm-flat10-cdr it forms a vital part of assessment of TCRE, ZEC and reversibility. In particular these experiments make assessment of ZEC easier than CMIP6 because: the experiment is emissions-driven from the outset and does not require a change in configuration at the branch point and the branch point is common across all models. more details and analysis can be found here: https://egusphere.copernicus.org/preprints/2023/egusphere-2023-2127/ https://egusphere.copernicus.org/preprints/2024/egusphere-2024-3356/ this experiment is an evolution of the ZECMIP simulations from CMIP6: https://gmd.copernicus.org/articles/12/4375/2019/ , https://bg.copernicus.org/articles/17/2987/2020/", - "end_year": null, - "experiment": "zero-emissions commitment CO2 experiment", - "min_number_yrs_per_sim": "200", - "parent_activity_id": [ - "c4mip" - ], - "parent_experiment_id": [ - "esm-flat10" + "chem" ], + "branch_information": "Branch from `esm-flat10` at the end of year 100.", + "min_ensemble_size": 1, + "parent_activity": "c4mip", + "parent_experiment": "esm-flat10", "required_model_components": [ "aogcm", "bgc" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "esm-flat10-zec" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/esm-flat10.json b/experiment/esm-flat10.json index 3f928cb95..c0f2fdc23 100644 --- a/experiment/esm-flat10.json +++ b/experiment/esm-flat10.json @@ -2,35 +2,23 @@ "@context": "000_context.jsonld", "id": "esm-flat10", "type": "experiment", - "experiment_id": "esm-flat10", - "activity_id": [ - "c4mip" - ], + "description": "10 PgC / yr constant carbon dioxide emissions.", + "drs_name": "esm-flat10", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 100.0, + "activity": "c4mip", "additional_allowed_model_components": [ - "aogcm", - "bgc", "aer", - "chem", - "ism" - ], - "description": "esm-flat10 is newly introduced for CMIP7 as an emissions-driven idealised experiment to quantify sensitivity of the earth system to CO2 emissions. It requires fully-coupled AOGCM and BGC models with carbon cycle “emissions-driven” The esm-flat10 experiment branches from a stable esm-piControl simulation, with a constant annual prescribed anthropogenic flux of carbon of 10PgC/year into the atmosphere, with globally homogenous emissions for initial (minimum) period, 0-150 years. Longer runs - 300 years – are recommended. It serves as an emissions-driven experiment to diagnose the Transient Climate Response to cumulative Emissions (TCRE), which is the warming from pre-industrial levels observed after the emission of 1000PgC in a transient scenario. Used with the partner experiments esm-flat10-zec and esm-flat10-cdr it forms a vital part of assessment of TCRE, ZEC and reversibility. In particular these experiments make assessment of ZEC easier than CMIP6 because: the experiment is emissions-driven from the outset and does not require a change in configuration at the branch point and the branch point is common across all models. more details and analysis can be found here: https://egusphere.copernicus.org/preprints/2023/egusphere-2023-2127/ https://egusphere.copernicus.org/preprints/2024/egusphere-2024-3356/", - "end_year": null, - "experiment": "10 PgC/yr constant CO2 emissions experiment", - "min_number_yrs_per_sim": "150", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "esm-picontrol" + "chem" ], + "branch_information": "Branch from `esm-piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-picontrol", "required_model_components": [ "aogcm", "bgc" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "esm-flat10" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/esm-hist.json b/experiment/esm-hist.json index b719407c5..9627688a2 100644 --- a/experiment/esm-hist.json +++ b/experiment/esm-hist.json @@ -2,8 +2,9 @@ "@context": "000_context.jsonld", "id": "esm-hist", "type": "experiment", - "description": "Simulation of the climate of the recent past (typically meaning 1850 to present-day) with prescribed CO2 emissions (for prescribed CO2 concentration runs, see `historical`)", + "description": "Simulation of the climate of the recent past (typically meaning 1850 to present-day) with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `historical`).", "drs_name": "esm-hist", + "start_timestamp": "1850-01-01", "activity": "cmip", "additional_allowed_model_components": [ "aer", @@ -17,6 +18,5 @@ "aogcm", "bgc" ], - "start_timestamp": "1850-01-01", "tier": 1 } diff --git a/experiment/esm-picontrol-spinup.json b/experiment/esm-picontrol-spinup.json index f9641bde2..7dcf36eba 100644 --- a/experiment/esm-picontrol-spinup.json +++ b/experiment/esm-picontrol-spinup.json @@ -2,17 +2,17 @@ "@context": "000_context.jsonld", "id": "esm-picontrol-spinup", "type": "experiment", - "description": "Pre-industrial control spin-up simulation with prescribed CO2 emissions (for spin-up with prescribed CO2 concentrations, see `piControl-spinup`). Used to get the model into a state of approximate radiative equilibrium before starting the piControl simulation.", + "description": "Spin-up simulation. Used to get the model into a state of approximate radiative equilibrium before starting the `esm-piControl` simulation.", "drs_name": "esm-piControl-spinup", + "start_timestamp": null, + "end_timestamp": null, "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem" ], "branch_information": null, - "end_timestamp": null, "min_ensemble_size": 1, - "min_number_yrs_per_sim": null, "parent_activity": null, "parent_experiment": null, "parent_mip_era": null, @@ -20,6 +20,5 @@ "aogcm", "bgc" ], - "start_timestamp": null, "tier": 1 } diff --git a/experiment/esm-picontrol.json b/experiment/esm-picontrol.json index 48119856a..4ee3425e3 100644 --- a/experiment/esm-picontrol.json +++ b/experiment/esm-picontrol.json @@ -2,24 +2,22 @@ "@context": "000_context.jsonld", "id": "esm-picontrol", "type": "experiment", - "description": "Pre-industrial control simulation with prescribed CO2 emissions (for pre-industrial control with prescribed CO2 concentrations, see `piControl`). Used to characterise natural variability and unforced behaviour.", + "description": "Pre-industrial control simulation with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `piControl`). Used to characterise natural variability and unforced behaviour.", "drs_name": "esm-piControl", + "start_timestamp": null, + "end_timestamp": null, "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem" ], - "branch_information": "Branch from esm-piControl-spinup at a time of your choosing", - "end_timestamp": null, + "branch_information": "Branch from `esm-piControl-spinup` at a time of your choosing", "min_ensemble_size": 1, - "min_number_yrs_per_sim": 500, "parent_activity": "cmip", "parent_experiment": "esm-picontrol-spinup", - "parent_mip_era": null, "required_model_components": [ "aogcm", "bgc" ], - "start_timestamp": null, "tier": 1 } diff --git a/experiment/esm-scen7-h-aer.json b/experiment/esm-scen7-h-aer.json index 73eb0c7a7..cf60d0edd 100644 --- a/experiment/esm-scen7-h-aer.json +++ b/experiment/esm-scen7-h-aer.json @@ -2,33 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-h-aer", "type": "experiment", - "experiment_id": "esm-scen7-h-Aer", - "activity_id": [ - "aerchemmip" - ], + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP high emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models without interactive chemistry. Models with interactive chemistry should run `esm-scen7-h-Aq` instead.", + "drs_name": "esm-scen7-h-Aer", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", "additional_allowed_model_components": [ - "aer", - "aogcm", + "bgc", "chem" ], - "description": "1. Detailed experiment configuration Future scenario esm-scen7-h with higher aerosol emissions 2. Required model settings We encourage modelling centres to include as much atmospheric composition capability as possible. As a minimum, models should have prescribed or interactive aerosols. And the experimental setup should be consistent with other scenario experiments. 3. Experiment conditions 4. Links to relevant references Fiedler et al. (in prep.) AerChemMIP2 - Unraveling the role of reactive gases, aerosols, and land use for air quality and climate change in CMIP7 5. Similarities to CMIP6 experiments None 6. Forcing differences from parent experiment Increased aerosol emissions compared to parent.", - "end_year": null, - "experiment": "Future scenario esm-scen7-h with high aerosol emissions", - "min_number_yrs_per_sim": "104", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "esm-hist" - ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aer", - "aogcm" - ], - "start_year": null, - "sub_experiment_id": [ - "none" + "aogcm", + "aer" ], - "tier": "1", - "drs_name": "esm-scen7-h-Aer" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/esm-scen7-h-aq.json b/experiment/esm-scen7-h-aq.json index 7abd4410b..6a969e6a7 100644 --- a/experiment/esm-scen7-h-aq.json +++ b/experiment/esm-scen7-h-aq.json @@ -2,34 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-h-aq", "type": "experiment", - "experiment_id": "esm-scen7-h-AQ", - "activity_id": [ - "aerchemmip" - ], + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP high emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models with interactive chemistry. Models without interactive chemistry should run `esm-scen7-h-Aer` instead.", + "drs_name": "esm-scen7-h-AQ", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", "additional_allowed_model_components": [ - "aer", - "aogcm", - "chem" - ], - "description": "1. Detailed experiment configuration Future scenario esm-scen7-h with higher aerosol and tropospheric non-methane ozone precursor emissions 2. Required model settings We encourage modelling centres to include as much atmospheric composition capability as possible. But, as a minimum, models should have tropospheric chemistry and interactive aerosols. And the experimental setup should be consistent with other scenario experiments. 3. Experiment conditions 4. Links to relevant references Fiedler et al. (in prep.) AerChemMIP2 - Unraveling the role of reactive gases, aerosols, and land use for air quality and climate change in CMIP7 5. Similarities to CMIP6 experiments None 6. Forcing differences from parent experiment Increased aerosol and tropospheric non-methane ozone precursor emissions compared to parent.", - "end_year": null, - "experiment": "Future scenario esm-scen7-h with high aerosol and tropospheric non-methane ozone precursor emissions", - "min_number_yrs_per_sim": "104", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "esm-hist" + "bgc" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aer", "aogcm", + "aer", "chem" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "esm-scen7-h-AQ" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/esm-scen7-h-ext.json b/experiment/esm-scen7-h-ext.json index fc04c8760..fe5056f38 100644 --- a/experiment/esm-scen7-h-ext.json +++ b/experiment/esm-scen7-h-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-h-ext", "type": "experiment", + "description": "Extension of `esm-scen7-h` beyond 2100.", "drs_name": "esm-scen7-h-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-scen7-h` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "esm-scen7-h", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-h.json b/experiment/esm-scen7-h.json index 0a4887111..a76b651f7 100644 --- a/experiment/esm-scen7-h.json +++ b/experiment/esm-scen7-h.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-h", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP high emissions future. Run with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `scen7-h`).", "drs_name": "esm-scen7-h", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-hl-ext.json b/experiment/esm-scen7-hl-ext.json index 70ddfd3fb..03470ca2d 100644 --- a/experiment/esm-scen7-hl-ext.json +++ b/experiment/esm-scen7-hl-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-hl-ext", "type": "experiment", + "description": "Extension of `esm-scen7-hl` beyond 2100.", "drs_name": "esm-scen7-hl-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-scen7-hl` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "esm-scen7-hl", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-hl.json b/experiment/esm-scen7-hl.json index 23109aece..a72c76216 100644 --- a/experiment/esm-scen7-hl.json +++ b/experiment/esm-scen7-hl.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-hl", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP High followed by low (from 2060) emissions future. Run with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `scen7-hl`).", "drs_name": "esm-scen7-hl", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-l-ext.json b/experiment/esm-scen7-l-ext.json index 5f9d93aec..0f9d0b133 100644 --- a/experiment/esm-scen7-l-ext.json +++ b/experiment/esm-scen7-l-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-l-ext", "type": "experiment", + "description": "Extension of `esm-scen7-l` beyond 2100.", "drs_name": "esm-scen7-l-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-scen7-l` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "esm-scen7-l", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-l.json b/experiment/esm-scen7-l.json index 8936dd46e..27bb44d36 100644 --- a/experiment/esm-scen7-l.json +++ b/experiment/esm-scen7-l.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-l", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP low emissions future. Run with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `scen7-l`).", "drs_name": "esm-scen7-l", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-ln-ext.json b/experiment/esm-scen7-ln-ext.json index e0324c318..47d195378 100644 --- a/experiment/esm-scen7-ln-ext.json +++ b/experiment/esm-scen7-ln-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-ln-ext", "type": "experiment", + "description": "Extension of `esm-scen7-ln` beyond 2100.", "drs_name": "esm-scen7-ln-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-scen7-ln` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "esm-scen7-ln", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-ln.json b/experiment/esm-scen7-ln.json index aeb7c40dd..504e1ed52 100644 --- a/experiment/esm-scen7-ln.json +++ b/experiment/esm-scen7-ln.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-ln", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP low followed by negative (steep reductions begin in 2040, negative from TBD) emissions future. Run with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `scen7-ln`).", "drs_name": "esm-scen7-ln", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-m-ext.json b/experiment/esm-scen7-m-ext.json index 357a470d7..84d40c722 100644 --- a/experiment/esm-scen7-m-ext.json +++ b/experiment/esm-scen7-m-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-m-ext", "type": "experiment", + "description": "Extension of `esm-scen7-m` beyond 2100.", "drs_name": "esm-scen7-m-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-scen7-m` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "esm-scen7-m", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-m.json b/experiment/esm-scen7-m.json index f397f601b..bb610cc36 100644 --- a/experiment/esm-scen7-m.json +++ b/experiment/esm-scen7-m.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-m", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP medium emissions future. Run with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `scen7-m`).", "drs_name": "esm-scen7-m", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-ml-ext.json b/experiment/esm-scen7-ml-ext.json index 4b52aecc5..87d9033fa 100644 --- a/experiment/esm-scen7-ml-ext.json +++ b/experiment/esm-scen7-ml-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-ml-ext", "type": "experiment", + "description": "Extension of `esm-scen7-ml` beyond 2100.", "drs_name": "esm-scen7-ml-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-scen7-ml` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "esm-scen7-ml", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-ml.json b/experiment/esm-scen7-ml.json index 7d0c694ea..ac7dd3196 100644 --- a/experiment/esm-scen7-ml.json +++ b/experiment/esm-scen7-ml.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-ml", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP medium followed by low (from 2040) emissions future. Run with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `scen7-ml`).", "drs_name": "esm-scen7-ml", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-vl-aer.json b/experiment/esm-scen7-vl-aer.json new file mode 100644 index 000000000..a1526e9ed --- /dev/null +++ b/experiment/esm-scen7-vl-aer.json @@ -0,0 +1,25 @@ +{ + "@context": "000_context.jsonld", + "id": "esm-scen7-vl-aer", + "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP very low emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models without interactive chemistry. Models with interactive chemistry should run `esm-scen7-vl-Aq` instead.", + "drs_name": "esm-scen7-vl-Aer", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", + "additional_allowed_model_components": [ + "bgc", + "chem" + ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", + "required_model_components": [ + "aogcm", + "aer" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-vl-aq.json b/experiment/esm-scen7-vl-aq.json new file mode 100644 index 000000000..9cc25a577 --- /dev/null +++ b/experiment/esm-scen7-vl-aq.json @@ -0,0 +1,25 @@ +{ + "@context": "000_context.jsonld", + "id": "esm-scen7-vl-aq", + "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP very low emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models with interactive chemistry. Models without interactive chemistry should run `esm-scen7-vl-Aer` instead.", + "drs_name": "esm-scen7-vl-AQ", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", + "additional_allowed_model_components": [ + "bgc" + ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", + "required_model_components": [ + "aogcm", + "aer", + "chem" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-vl-ext.json b/experiment/esm-scen7-vl-ext.json index 6efd687b4..2c8c26d37 100644 --- a/experiment/esm-scen7-vl-ext.json +++ b/experiment/esm-scen7-vl-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-vl-ext", "type": "experiment", + "description": "Extension of `esm-scen7-vl` beyond 2100.", "drs_name": "esm-scen7-vl-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-scen7-vl` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "esm-scen7-vl", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/esm-scen7-vl.json b/experiment/esm-scen7-vl.json index da0ec3f22..b8dbba514 100644 --- a/experiment/esm-scen7-vl.json +++ b/experiment/esm-scen7-vl.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "esm-scen7-vl", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP very low emissions future. Run with prescribed carbon dioxide emissions (for prescribed carbon dioxide concentrations, see `scen7-vl`).", "drs_name": "esm-scen7-vl", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", - "chem", - "bgc" + "chem" ], + "branch_information": "Branch from `esm-hist` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "esm-hist", + "parent_mip_era": "cmip7", "required_model_components": [ - "aogcm" - ] -} \ No newline at end of file + "aogcm", + "bgc" + ], + "tier": 1 +} diff --git a/experiment/g7-1p5k-sai.json b/experiment/g7-1p5k-sai.json index 07c3f3b33..0f533d050 100644 --- a/experiment/g7-1p5k-sai.json +++ b/experiment/g7-1p5k-sai.json @@ -2,26 +2,17 @@ "@context": "000_context.jsonld", "id": "g7-1p5k-sai", "type": "experiment", - "experiment_id": "G7-1p5K-SAI", - "activity_id": [ - "geomip" + "description": "Stablisation of global-mean temperature at 1.5C by holding stratospheric sulfur forcing constant (at whatever level is required to achieve stable temperatures). The simulation generally branches from a scenario simulation at some point in the future.", + "drs_name": "G7-1p5K-SAI", + "activity": "geomip", + "additional_allowed_model_components": [ + "aer", + "chem", + "bgc" ], - "additional_allowed_model_components": [], - "description": "Stratospheric aerosol injection to reduce warming to 1.5K \n Stratospheric aerosol injection to reduce warming to 1.5K above pre-industrial levels", - "end_year": null, - "experiment": "G7-1.5K-SAI", - "min_number_yrs_per_sim": null, - "parent_activity_id": [ - "no parent" + "min_ensemble_size": 1, + "required_model_components": [ + "aogcm" ], - "parent_experiment_id": [ - "no parent" - ], - "required_model_components": [], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": 0, - "drs_name": "G7-1p5K-SAI" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/hist-aer.json b/experiment/hist-aer.json index 9b0588a25..bfa696f25 100644 --- a/experiment/hist-aer.json +++ b/experiment/hist-aer.json @@ -2,32 +2,21 @@ "@context": "000_context.jsonld", "id": "hist-aer", "type": "experiment", - "experiment_id": "hist-aer", - "activity_id": [ - "lesfmip" - ], + "description": "Response to historical aerosol forcing (often with extension using forcings from a scenario simulation specific to the CMIP phase). All other conditions are kept the same as piControl.", + "drs_name": "hist-aer", + "start_timestamp": "1850-01-01", + "activity": "damip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "Anthropogenic-aerosol-only historical simulations", - "end_year": 2020, - "experiment": "historical anthropogenic aerosols-only run", - "min_number_yrs_per_sim": null, - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": 1850, - "sub_experiment_id": [ - "f2023" - ], - "tier": 1, - "drs_name": "hist-aer" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/hist-ghg.json b/experiment/hist-ghg.json index ea7fa770a..f8893336d 100644 --- a/experiment/hist-ghg.json +++ b/experiment/hist-ghg.json @@ -2,32 +2,21 @@ "@context": "000_context.jsonld", "id": "hist-ghg", "type": "experiment", - "experiment_id": "hist-GHG", - "activity_id": [ - "lesfmip" - ], + "description": "Response to historical aerosol forcing (often with extension using forcings from a scenario simulation specific to the CMIP phase). All other conditions are kept the same as piControl.", + "drs_name": "hist-GHG", + "start_timestamp": "1850-01-01", + "activity": "damip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "Well-mixed greenhouse-gas-only historical simulations", - "end_year": 2020, - "experiment": "historical well-mixed GHG-only run", - "min_number_yrs_per_sim": null, - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": 1850, - "sub_experiment_id": [ - "f2023" - ], - "tier": 1, - "drs_name": "hist-GHG" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/hist-nat.json b/experiment/hist-nat.json index 1664afa47..1afbcb9f5 100644 --- a/experiment/hist-nat.json +++ b/experiment/hist-nat.json @@ -2,32 +2,21 @@ "@context": "000_context.jsonld", "id": "hist-nat", "type": "experiment", - "experiment_id": "hist-nat", - "activity_id": [ - "lesfmip" - ], + "description": "Response to historical aerosol forcing (often with extension using forcings from a scenario simulation specific to the CMIP phase). All other conditions are kept the same as piControl.", + "drs_name": "hist-nat", + "start_timestamp": "1850-01-01", + "activity": "damip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "Natural forcings (solar + volcanic)", - "end_year": 2020, - "experiment": "historical natural-only run", - "min_number_yrs_per_sim": null, - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": "Branch from `piControl` at a time of your choosing", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_year": 1850, - "sub_experiment_id": [ - "f2023" - ], - "tier": 3, - "drs_name": "hist-nat" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/historical.json b/experiment/historical.json index 5f14e1635..9b1b29c4a 100644 --- a/experiment/historical.json +++ b/experiment/historical.json @@ -2,21 +2,21 @@ "@context": "000_context.jsonld", "id": "historical", "type": "experiment", - "description": "Simulation of the climate of the recent past (typically meaning 1850 to present-day)", + "description": "Simulation of the climate of the recent past (typically meaning 1850 to present-day) with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-hist`).", "drs_name": "historical", + "start_timestamp": "1850-01-01", "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "branch_information": "Branch from piControl at a time of your choosing", + "branch_information": "Branch from `piControl` at a time of your choosing", "min_ensemble_size": 1, "parent_activity": "cmip", "parent_experiment": "picontrol", "required_model_components": [ "aogcm" ], - "start_timestamp": "1850-01-01", "tier": 1 } diff --git a/experiment/land-hist.json b/experiment/land-hist.json index 58311321e..19d7ed3bc 100644 --- a/experiment/land-hist.json +++ b/experiment/land-hist.json @@ -2,31 +2,17 @@ "@context": "000_context.jsonld", "id": "land-hist", "type": "experiment", - "experiment_id": "land-hist", - "activity_id": [ - "ls3mip", - "lumip" - ], - "additional_allowed_model_components": [ - "bgc" - ], - "description": "Land only simulations", - "end_year": 2014, - "experiment": "historical land-only", - "min_number_yrs_per_sim": "165", - "parent_activity_id": [ - "no parent" - ], - "parent_experiment_id": [ - "no parent" - ], + "description": "Land-only version of `historical`.", + "drs_name": "land-hist", + "activity": "lmip", + "additional_allowed_model_components": [], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "land" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "land-hist" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-4xco2.json b/experiment/piclim-4xco2.json index 2c2c0f0cc..72c9c48a2 100644 --- a/experiment/piclim-4xco2.json +++ b/experiment/piclim-4xco2.json @@ -2,31 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-4xco2", "type": "experiment", - "experiment_id": "piClim-4xCO2", - "activity_id": [ - "rfmip" - ], + "description": "In combination with `piClim-control`, quantifies a quadrupling of atmospheric carbon dioxide's (4xCO2's) effective radiative forcing (ERF). Same as `piClim-control`, except atmospheric carbon dioxide concentrations are set to four times `piControl` levels.", + "drs_name": "piClim-4xCO2", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "cmip", "additional_allowed_model_components": [ "aer", - "chem" - ], - "description": "As in piClim-control but with 4xCO2", - "end_year": null, - "experiment": "effective radiative forcing by 4xCO2", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" + "chem", + "bgc" ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "piClim-4xCO2" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-aer.json b/experiment/piclim-aer.json index 701519b3c..774ec28c6 100644 --- a/experiment/piclim-aer.json +++ b/experiment/piclim-aer.json @@ -2,33 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-aer", "type": "experiment", - "experiment_id": "piClim-aer", - "activity_id": [ - "rfmip", - "aerchemmip" - ], + "description": "In combination with `piClim-control`, quantifies present-day aerosol effective radiative forcing (ERF). Same as `piClim-control`, except anthropogenic aerosol emissions use present-day values (typically the last year of the `historical` simulation within the same CMIP era e.g. 2014 values for CMIP6, 2021 values for CMIP7).", + "drs_name": "piClim-aer", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "rfmip", "additional_allowed_model_components": [ - "aer", "chem", "bgc" ], - "description": "As in piClim-control but with with present-day aerosols. Note that this experiment is considered to be tier 1 by RFMIP but tier 2 by AerChemMIP", - "end_year": null, - "experiment": "effective radiative forcing by present-day aerosols", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ - "agcm" - ], - "start_year": null, - "sub_experiment_id": [ - "none" + "agcm", + "aer" ], - "tier": "1", - "drs_name": "piClim-aer" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-anthro.json b/experiment/piclim-anthro.json index dc3ff17a2..3541c1ae2 100644 --- a/experiment/piclim-anthro.json +++ b/experiment/piclim-anthro.json @@ -2,31 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-anthro", "type": "experiment", - "experiment_id": "piClim-anthro", - "activity_id": [ - "rfmip" - ], + "description": "In combination with `piClim-control`, quantifies present-day total anthropogenic effective radiative forcing (ERF). Same as `piClim-control`, except all anthropogenic forcings use present-day values (typically the last year of the `historical` simulation within the same CMIP era e.g. 2014 values for CMIP6, 2021 values for CMIP7).", + "drs_name": "piClim-anthro", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "cmip", "additional_allowed_model_components": [ "aer", - "chem" - ], - "description": "As in piClim-control but with present-day anthropogenic forcing (greenhouse gases, ozone, aerosols and land-use)", - "end_year": null, - "experiment": "effective radiative forcing by present day anthropogenic agents", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" + "chem", + "bgc" ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "piClim-anthro" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-ch4.json b/experiment/piclim-ch4.json index b4c1bf5d1..ab292bfd9 100644 --- a/experiment/piclim-ch4.json +++ b/experiment/piclim-ch4.json @@ -2,32 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-ch4", "type": "experiment", - "experiment_id": "piClim-CH4", - "activity_id": [ - "aerchemmip" - ], + "description": "In combination with `piClim-control`, quantifies present-day methane effective radiative forcing (ERF). Same as `piClim-control`, except methane atmospheric forcing use present-day values (typically the last year of the `historical` simulation within the same CMIP era e.g. 2014 values for CMIP6, 2021 values for CMIP7).", + "drs_name": "piClim-CH4", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "aerchemmip", "additional_allowed_model_components": [ + "aer", "bgc" ], - "description": "Perturbation from 1850 control using 2014 CH4 concentrations", - "end_year": null, - "experiment": "pre-industrial climatological SSTs and forcing, but with 2014 methane concentrations (including chemistry)", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm", - "aer", "chem" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "piClim-CH4" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-control.json b/experiment/piclim-control.json index 611ae9844..0ab5f29cf 100644 --- a/experiment/piclim-control.json +++ b/experiment/piclim-control.json @@ -2,33 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-control", "type": "experiment", - "experiment_id": "piClim-control", - "activity_id": [ - "rfmip", - "aerchemmip" - ], + "description": "Baseline for effective radiative forcing (ERF) calculations. `piControl` with prescribed sea-surface temperatures and sea-ice concentrations.", + "drs_name": "piClim-control", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "description": "30-year atmosphere only integration using preindustrial sea-surface temperature and sea-ice climatology. Interactive vegetation", - "end_year": null, - "experiment": "Control simulation providing baseline for evaluating effective radiative forcing (ERF)", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "piClim-control" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-histaer.json b/experiment/piclim-histaer.json index ba3d5488e..f991cbd2e 100644 --- a/experiment/piclim-histaer.json +++ b/experiment/piclim-histaer.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "piclim-histaer", "type": "experiment", - "experiment_id": "piClim-histaer", - "activity_id": [ - "rfmip" - ], + "description": "Simulation of the historical period with prescribed sea-surface temperatures and sea-ice concentrations. Aerosol emissions follow the `historical` experiment while all other forcings follow `piControl` to allow for a (approximate) diagnosis of transient historical aerosol effective radiative forcing (ERF) (can be compared with `piClim-aer` which provides a more precise quantification of present-day aerosol ERF).", + "drs_name": "piClim-histaer", + "start_timestamp": "1850-01-01", + "activity": "rfmip", "additional_allowed_model_components": [ - "aer", "chem", "bgc" ], - "description": "Time-varying forcing by aerosols. SST and sea ice fixed at preindustrial control. Interactive vegetation", - "end_year": 2100, - "experiment": "transient effective radiative forcing by aerosols", - "min_number_yrs_per_sim": "251", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ - "agcm" - ], - "start_year": 1850, - "sub_experiment_id": [ - "none" + "aogcm", + "aer" ], - "tier": "2", - "drs_name": "piClim-histaer" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-histall.json b/experiment/piclim-histall.json index 74ec8150f..9eca23f73 100644 --- a/experiment/piclim-histall.json +++ b/experiment/piclim-histall.json @@ -2,32 +2,22 @@ "@context": "000_context.jsonld", "id": "piclim-histall", "type": "experiment", - "experiment_id": "piClim-histall", - "activity_id": [ - "rfmip" - ], + "description": "Simulation of the historical period with prescribed sea-surface temperatures and sea-ice concentrations. All forcings follow the `historical` experiment to allow for a (approximate) diagnosis of transient historical effective radiative forcing (ERF).(can be compared with the `piClim-*` experiments which provide a more precise quantification of present-day ERF from various forcers).", + "drs_name": "piClim-histall", + "start_timestamp": "1850-01-01", + "activity": "rfmip", "additional_allowed_model_components": [ - "aer", "chem", "bgc" ], - "description": "Time-varying forcing. SST and sea ice fixed at preindustrial control. Interactive vegetation", - "end_year": 2100, - "experiment": "transient effective radiative forcing", - "min_number_yrs_per_sim": "251", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ - "agcm" - ], - "start_year": 1850, - "sub_experiment_id": [ - "none" + "aogcm", + "aer" ], - "tier": "2", - "drs_name": "piClim-histall" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-n2o.json b/experiment/piclim-n2o.json index dba5afbcc..263a73915 100644 --- a/experiment/piclim-n2o.json +++ b/experiment/piclim-n2o.json @@ -2,32 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-n2o", "type": "experiment", - "experiment_id": "piClim-N2O", - "activity_id": [ - "aerchemmip" - ], + "description": "In combination with `piClim-control`, quantifies present-day nitrous oxide effective radiative forcing (ERF). Same as `piClim-control`, except nitrous oxide atmospheric forcing use present-day values (typically the last year of the `historical` simulation within the same CMIP era e.g. 2014 values for CMIP6, 2021 values for CMIP7).", + "drs_name": "piClim-N2O", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "aerchemmip", "additional_allowed_model_components": [ + "aer", "bgc" ], - "description": "Perturbation from 1850 control using 2014 N2O concentrations", - "end_year": null, - "experiment": "pre-industrial climatological SSTs and forcing, but with 2014 N2O concentrations (including chemistry)", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm", - "aer", "chem" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "2", - "drs_name": "piClim-N2O" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-nox.json b/experiment/piclim-nox.json index 3012ab2ce..92797ff2d 100644 --- a/experiment/piclim-nox.json +++ b/experiment/piclim-nox.json @@ -2,32 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-nox", "type": "experiment", - "experiment_id": "piClim-NOx", - "activity_id": [ - "aerchemmip" - ], + "description": "In combination with `piClim-control`, quantifies present-day nitrous oxide (NOx) effective radiative forcing (ERF). Same as `piClim-control`, except nitrous oxide (NOx) emissions use present-day values (typically the last year of the `historical` simulation within the same CMIP era e.g. 2014 values for CMIP6, 2021 values for CMIP7).", + "drs_name": "piClim-NOx", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "aerchemmip", "additional_allowed_model_components": [ + "aer", "bgc" ], - "description": "Perturbation from 1850 control using 2014 NOx emissions", - "end_year": null, - "experiment": "pre-industrial climatological SSTs and forcing, but with 2014 NOx emissions", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm", - "aer", "chem" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "3", - "drs_name": "piClim-NOx" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-ods.json b/experiment/piclim-ods.json index d90fec89b..bb6fd66a7 100644 --- a/experiment/piclim-ods.json +++ b/experiment/piclim-ods.json @@ -2,33 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-ods", "type": "experiment", - "experiment_id": "piClim-ODS", - "activity_id": [ - "aerchemmip" - ], + "description": "In combination with `piClim-control`, quantifies present-day ozone-depleting substances' effective radiative forcing (ERF). Same as `piClim-control`, except ozone-depleting substance atmospheric forcing use present-day values (typically the last year of the `historical` simulation within the same CMIP era e.g. 2014 values for CMIP6, 2021 values for CMIP7).", + "drs_name": "piClim-ODS", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "aerchemmip", "additional_allowed_model_components": [ - "agcm", - "chem" - ], - "description": "1. Detailed experiment configuration An atmosphere only configuration following piClim-control but using present-day (2021) ozone depleting substances (ODSs) 2. Required model settings We encourage modelling centres to include as much atmospheric composition capability as possible. But, as a minimum, models should have stratospheric chemistry. And the experimental setup should be consistent with other AerChemMIP2 experiments, particularly piClim-control. 3. Experiment conditions 4. Links to relevant references Fiedler et al. (in prep.) AerChemMIP2 - Unraveling the role of reactive gases, aerosols, and land use for air quality and climate change in CMIP7 5. Similarities to CMIP6 experiments piClim-HC 6. Forcing differences from parent experiment Present-day (2021) ozone depleting substances", - "end_year": null, - "experiment": "Pre-industrial climatology with present-day ozone depleting substances", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "rfmip", - "aerchemmip" - ], - "parent_experiment_id": [ - "piclim-control" + "aer", + "bgc" ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm", "chem" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "1", - "drs_name": "piClim-ODS" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/piclim-so2.json b/experiment/piclim-so2.json index 5bf395f7c..cc1f315d8 100644 --- a/experiment/piclim-so2.json +++ b/experiment/piclim-so2.json @@ -2,32 +2,24 @@ "@context": "000_context.jsonld", "id": "piclim-so2", "type": "experiment", - "experiment_id": "piClim-SO2", - "activity_id": [ - "aerchemmip" - ], + "description": "In combination with `piClim-control`, quantifies present-day sulfur (dioxide) effective radiative forcing (ERF). Same as `piClim-control`, except sulfur emissions use present-day values (typically the last year of the `historical` simulation within the same CMIP era e.g. 2014 values for CMIP6, 2021 values for CMIP7).", + "drs_name": "piClim-SO2", + "start_timestamp": null, + "end_timestamp": null, + "min_number_yrs_per_sim": 30.0, + "activity": "aerchemmip", "additional_allowed_model_components": [ "chem", "bgc" ], - "description": "Perturbation from 1850 control using 2014 SO2 emissions", - "end_year": null, - "experiment": "pre-industrial climatological SSTs and forcing, but with 2014 SO2 emissions", - "min_number_yrs_per_sim": "30", - "parent_activity_id": [ - "cmip" - ], - "parent_experiment_id": [ - "picontrol" - ], + "branch_information": null, + "min_ensemble_size": 1, + "parent_activity": null, + "parent_experiment": null, + "parent_mip_era": null, "required_model_components": [ "agcm", "aer" ], - "start_year": null, - "sub_experiment_id": [ - "none" - ], - "tier": "3", - "drs_name": "piClim-SO2" -} \ No newline at end of file + "tier": 1 +} diff --git a/experiment/picontrol-spinup.json b/experiment/picontrol-spinup.json index 9751aa604..a7ee843c4 100644 --- a/experiment/picontrol-spinup.json +++ b/experiment/picontrol-spinup.json @@ -2,8 +2,10 @@ "@context": "000_context.jsonld", "id": "picontrol-spinup", "type": "experiment", - "description": "Pre-industrial control spin-up simulation. Used to get the model into a state of approximate radiative equilibrium before starting the piControl simulation.", + "description": "Spin-up simulation. Used to get the model into a state of approximate radiative equilibrium before starting the `piControl` simulation.", "drs_name": "piControl-spinup", + "start_timestamp": null, + "end_timestamp": null, "activity": "cmip", "additional_allowed_model_components": [ "aer", @@ -11,15 +13,12 @@ "bgc" ], "branch_information": null, - "end_timestamp": null, "min_ensemble_size": 1, - "min_number_yrs_per_sim": null, "parent_activity": null, "parent_experiment": null, "parent_mip_era": null, "required_model_components": [ "aogcm" ], - "start_timestamp": null, "tier": 1 } diff --git a/experiment/picontrol.json b/experiment/picontrol.json index 2a2bbed0f..73f72a9a1 100644 --- a/experiment/picontrol.json +++ b/experiment/picontrol.json @@ -2,23 +2,22 @@ "@context": "000_context.jsonld", "id": "picontrol", "type": "experiment", - "description": "Pre-industrial control simulation. Used to characterise natural variability and unforced behaviour.", + "description": "Pre-industrial control simulation with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-piControl`). Used to characterise natural variability and unforced behaviour.", "drs_name": "piControl", + "start_timestamp": null, + "end_timestamp": null, "activity": "cmip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], - "branch_information": "Branch from piControl-spinup at a time of your choosing", - "end_timestamp": null, + "branch_information": "Branch from `piControl-spinup` at a time of your choosing", "min_ensemble_size": 1, - "min_number_yrs_per_sim": 500, "parent_activity": "cmip", "parent_experiment": "picontrol-spinup", "required_model_components": [ "aogcm" ], - "start_timestamp": null, "tier": 1 } diff --git a/experiment/scen7-h-aer.json b/experiment/scen7-h-aer.json new file mode 100644 index 000000000..8df811901 --- /dev/null +++ b/experiment/scen7-h-aer.json @@ -0,0 +1,25 @@ +{ + "@context": "000_context.jsonld", + "id": "scen7-h-aer", + "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP high emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models without interactive chemistry. Models with interactive chemistry should run `scen7-h-Aq` instead.", + "drs_name": "scen7-h-Aer", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", + "additional_allowed_model_components": [ + "bgc", + "chem" + ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", + "required_model_components": [ + "aogcm", + "aer" + ], + "tier": 1 +} diff --git a/experiment/scen7-h-aq.json b/experiment/scen7-h-aq.json new file mode 100644 index 000000000..4dccc5ede --- /dev/null +++ b/experiment/scen7-h-aq.json @@ -0,0 +1,25 @@ +{ + "@context": "000_context.jsonld", + "id": "scen7-h-aq", + "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP high emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models with interactive chemistry. Models without interactive chemistry should run `scen7-h-Aer` instead.", + "drs_name": "scen7-h-AQ", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", + "additional_allowed_model_components": [ + "bgc" + ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", + "required_model_components": [ + "aogcm", + "aer", + "chem" + ], + "tier": 1 +} diff --git a/experiment/scen7-h-ext.json b/experiment/scen7-h-ext.json index 16358b8a6..1fe5ed46b 100644 --- a/experiment/scen7-h-ext.json +++ b/experiment/scen7-h-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-h-ext", "type": "experiment", + "description": "Extension of `scen7-h` beyond 2100.", "drs_name": "scen7-h-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `scen7-h` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "scen7-h", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-h.json b/experiment/scen7-h.json index 59cd5a0c6..f8511e34e 100644 --- a/experiment/scen7-h.json +++ b/experiment/scen7-h.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-h", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP high emissions future. Run with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-scen7-h`).", "drs_name": "scen7-h", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-hl-ext.json b/experiment/scen7-hl-ext.json index 9a2b1ec44..8432c0a21 100644 --- a/experiment/scen7-hl-ext.json +++ b/experiment/scen7-hl-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-hl-ext", "type": "experiment", + "description": "Extension of `scen7-hl` beyond 2100.", "drs_name": "scen7-hl-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `scen7-hl` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "scen7-hl", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-hl.json b/experiment/scen7-hl.json index 38e083d10..8fd326446 100644 --- a/experiment/scen7-hl.json +++ b/experiment/scen7-hl.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-hl", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP High followed by low (from 2060) emissions future. Run with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-scen7-hl`).", "drs_name": "scen7-hl", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-l-ext.json b/experiment/scen7-l-ext.json index 987842c60..c3c69a433 100644 --- a/experiment/scen7-l-ext.json +++ b/experiment/scen7-l-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-l-ext", "type": "experiment", + "description": "Extension of `scen7-l` beyond 2100.", "drs_name": "scen7-l-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `scen7-l` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "scen7-l", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-l.json b/experiment/scen7-l.json index f3a5569a5..e463076e5 100644 --- a/experiment/scen7-l.json +++ b/experiment/scen7-l.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-l", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP low emissions future. Run with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-scen7-l`).", "drs_name": "scen7-l", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-ln-ext.json b/experiment/scen7-ln-ext.json index 6d1e10f6d..6dc720567 100644 --- a/experiment/scen7-ln-ext.json +++ b/experiment/scen7-ln-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-ln-ext", "type": "experiment", + "description": "Extension of `scen7-ln` beyond 2100.", "drs_name": "scen7-ln-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `scen7-ln` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "scen7-ln", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-ln.json b/experiment/scen7-ln.json index 9b9c34bd0..2f2c7bbb4 100644 --- a/experiment/scen7-ln.json +++ b/experiment/scen7-ln.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-ln", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP low followed by negative (steep reductions begin in 2040, negative from TBD) emissions future. Run with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-scen7-ln`).", "drs_name": "scen7-ln", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-m-ext.json b/experiment/scen7-m-ext.json index fc6d1c1a4..a9359446b 100644 --- a/experiment/scen7-m-ext.json +++ b/experiment/scen7-m-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-m-ext", "type": "experiment", + "description": "Extension of `scen7-m` beyond 2100.", "drs_name": "scen7-m-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `scen7-m` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "scen7-m", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-m.json b/experiment/scen7-m.json index e71e6b4d7..5e30e4866 100644 --- a/experiment/scen7-m.json +++ b/experiment/scen7-m.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-m", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP medium emissions future. Run with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-scen7-m`).", "drs_name": "scen7-m", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-ml-ext.json b/experiment/scen7-ml-ext.json index 3f59363a8..d85c01831 100644 --- a/experiment/scen7-ml-ext.json +++ b/experiment/scen7-ml-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-ml-ext", "type": "experiment", + "description": "Extension of `scen7-ml` beyond 2100.", "drs_name": "scen7-ml-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `scen7-ml` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "scen7-ml", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-ml.json b/experiment/scen7-ml.json index e38be60f1..22923f261 100644 --- a/experiment/scen7-ml.json +++ b/experiment/scen7-ml.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-ml", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP medium followed by low (from 2040) emissions future. Run with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-scen7-ml`).", "drs_name": "scen7-ml", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-vl-aer.json b/experiment/scen7-vl-aer.json new file mode 100644 index 000000000..db4a2c90d --- /dev/null +++ b/experiment/scen7-vl-aer.json @@ -0,0 +1,25 @@ +{ + "@context": "000_context.jsonld", + "id": "scen7-vl-aer", + "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP very low emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models without interactive chemistry. Models with interactive chemistry should run `scen7-vl-Aq` instead.", + "drs_name": "scen7-vl-Aer", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", + "additional_allowed_model_components": [ + "bgc", + "chem" + ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", + "required_model_components": [ + "aogcm", + "aer" + ], + "tier": 1 +} diff --git a/experiment/scen7-vl-aq.json b/experiment/scen7-vl-aq.json new file mode 100644 index 000000000..f14ae3961 --- /dev/null +++ b/experiment/scen7-vl-aq.json @@ -0,0 +1,25 @@ +{ + "@context": "000_context.jsonld", + "id": "scen7-vl-aq", + "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP very low emissions future. Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. This is for models with interactive chemistry. Models without interactive chemistry should run `scen7-vl-Aer` instead.", + "drs_name": "scen7-vl-AQ", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, + "activity": "aerchemmip", + "additional_allowed_model_components": [ + "bgc" + ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 3, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", + "required_model_components": [ + "aogcm", + "aer", + "chem" + ], + "tier": 1 +} diff --git a/experiment/scen7-vl-ext.json b/experiment/scen7-vl-ext.json index 32846e928..e553e2d86 100644 --- a/experiment/scen7-vl-ext.json +++ b/experiment/scen7-vl-ext.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-vl-ext", "type": "experiment", + "description": "Extension of `scen7-vl` beyond 2100.", "drs_name": "scen7-vl-ext", + "start_timestamp": "2101-01-01", + "end_timestamp": "2500-12-31", + "min_number_yrs_per_sim": 50.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `scen7-vl` at 2100-12-31", + "min_ensemble_size": 1, + "parent_activity": "scenariomip", + "parent_experiment": "scen7-vl", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/experiment/scen7-vl.json b/experiment/scen7-vl.json index a00161864..0e1a55637 100644 --- a/experiment/scen7-vl.json +++ b/experiment/scen7-vl.json @@ -2,14 +2,24 @@ "@context": "000_context.jsonld", "id": "scen7-vl", "type": "experiment", + "description": "PLACEHOLDER TBC. CMIP7 ScenarioMIP very low emissions future. Run with prescribed carbon dioxide concentrations (for prescribed carbon dioxide emissions, see `esm-scen7-vl`).", "drs_name": "scen7-vl", + "start_timestamp": "2022-01-01", + "end_timestamp": "2100-12-31", + "min_number_yrs_per_sim": 79.0, "activity": "scenariomip", "additional_allowed_model_components": [ "aer", "chem", "bgc" ], + "branch_information": "Branch from `historical` at 2022-01-01.", + "min_ensemble_size": 1, + "parent_activity": "cmip", + "parent_experiment": "historical", + "parent_mip_era": "cmip7", "required_model_components": [ "aogcm" - ] -} \ No newline at end of file + ], + "tier": 1 +} diff --git a/model_component/agcm.json b/model_component/agcm.json new file mode 100644 index 000000000..3264870e4 --- /dev/null +++ b/model_component/agcm.json @@ -0,0 +1,7 @@ +{ + "@context": "000_context.jsonld", + "id": "agcm", + "type": "model_component", + "description": "Atmosphere general circulation model.", + "drs_name": "AGCM" +} diff --git a/model_component/aogcm.json b/model_component/aogcm.json index 804d1c9f0..47bd9c3af 100644 --- a/model_component/aogcm.json +++ b/model_component/aogcm.json @@ -5,4 +5,3 @@ "description": "Coupled atmosphere-ocean global climate model, including explicit representation of at least the land and sea ice.", "drs_name": "AOGCM" } - diff --git a/realm/aerosolproperties.json b/realm/aerosolproperties.json deleted file mode 100644 index 4b157e00f..000000000 --- a/realm/aerosolproperties.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "aerosolproperties", - "type": "realm", - "drs_name": "aerosolProperties", - "name": "aerosolProperties", - "description": "" -} \ No newline at end of file diff --git a/realm/atmosphericstate.json b/realm/atmosphericstate.json deleted file mode 100644 index c0989763c..000000000 --- a/realm/atmosphericstate.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "atmosphericstate", - "type": "realm", - "drs_name": "atmosphericState", - "name": "atmosphericState", - "description": "" -} \ No newline at end of file diff --git a/realm/emissions.json b/realm/emissions.json deleted file mode 100644 index 95b412378..000000000 --- a/realm/emissions.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "emissions", - "type": "realm", - "drs_name": "emissions", - "name": "emissions", - "description": "" -} \ No newline at end of file diff --git a/realm/ghgconcentrations.json b/realm/ghgconcentrations.json deleted file mode 100644 index c0e180766..000000000 --- a/realm/ghgconcentrations.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "ghgconcentrations", - "type": "realm", - "drs_name": "GHGConcentrations", - "name": "GHGConcentrations", - "description": "" -} \ No newline at end of file diff --git a/realm/landstate.json b/realm/landstate.json deleted file mode 100644 index e1044cea2..000000000 --- a/realm/landstate.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "landstate", - "type": "realm", - "drs_name": "landState", - "name": "landState", - "description": "" -} \ No newline at end of file diff --git a/realm/ozone.json b/realm/ozone.json deleted file mode 100644 index 23bdc40f8..000000000 --- a/realm/ozone.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "ozone", - "type": "realm", - "drs_name": "ozone", - "name": "ozone", - "description": "" -} \ No newline at end of file diff --git a/realm/radiation.json b/realm/radiation.json deleted file mode 100644 index 94d2c3991..000000000 --- a/realm/radiation.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "radiation", - "type": "realm", - "drs_name": "radiation", - "name": "radiation", - "description": "" -} \ No newline at end of file diff --git a/realm/solar.json b/realm/solar.json deleted file mode 100644 index aa63e8365..000000000 --- a/realm/solar.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "solar", - "type": "realm", - "drs_name": "solar", - "name": "solar", - "description": "" -} \ No newline at end of file diff --git a/realm/sstsandseaice.json b/realm/sstsandseaice.json deleted file mode 100644 index 314e03185..000000000 --- a/realm/sstsandseaice.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "sstsandseaice", - "type": "realm", - "drs_name": "SSTsAndSeaIce", - "name": "SSTsAndSeaIce", - "description": "" -} \ No newline at end of file diff --git a/realm/surfaceair.json b/realm/surfaceair.json deleted file mode 100644 index 16436cce5..000000000 --- a/realm/surfaceair.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "surfaceair", - "type": "realm", - "drs_name": "surfaceAir", - "name": "surfaceAir", - "description": "" -} \ No newline at end of file diff --git a/realm/surfacefluxes.json b/realm/surfacefluxes.json deleted file mode 100644 index 102c6dfb6..000000000 --- a/realm/surfacefluxes.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "surfacefluxes", - "type": "realm", - "drs_name": "surfaceFluxes", - "name": "surfaceFluxes", - "description": "" -} \ No newline at end of file diff --git a/region/antarctica.json b/region/antarctica.json index 016cbc2a6..e9343920b 100644 --- a/region/antarctica.json +++ b/region/antarctica.json @@ -2,7 +2,7 @@ "@context": "000_context.jsonld", "id": "antarctica", "type": "region", - "description": "Antarcica.", + "description": "Antarctica.", "drs_name": "ata", "cf_standard_region": "antarctica", "iso_region": "ata" diff --git a/region/ata.json b/region/ata.json deleted file mode 100644 index 5dac397d1..000000000 --- a/region/ata.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "@context": "000_context.jsonld", - "id": "ata", - "type": "region", - "description": "Antarcica", - "drs_name": "ata", - "cf_standard_region": "antarctica", - "iso_region": "ata" -} diff --git a/scripts/generate-experiments.py b/scripts/generate-experiments.py new file mode 100644 index 000000000..f32d68eef --- /dev/null +++ b/scripts/generate-experiments.py @@ -0,0 +1,1486 @@ +""" +Generate experiment entries + +Not actually all experiments, +rather just those listed in +[Dunne et al., 2025](https://doi.org/10.5194/gmd-18-6671-2025) +for the CMIP7 fast-track. +""" + +import json +from datetime import datetime +from pathlib import Path +from typing import Any + +from pydantic import BaseModel, ConfigDict + + +class ExperimentUniverse(BaseModel): + model_config = ConfigDict( + validate_assignment=True, + validate_default=True, + extra="forbid", + strict=True, + ) + + drs_name: str + description: str + activity: str + additional_allowed_model_components: list[str] + branch_information: str | None = "dont_write" + end_timestamp: datetime | None | str + min_ensemble_size: int + min_number_yrs_per_sim: float | None | str = "dont_write" + parent_activity: str | None = "dont_write" + parent_experiment: str | None = "dont_write" + parent_mip_era: str | None = "dont_write" + required_model_components: list[str] + start_timestamp: datetime | None | str + tier: int | str = "dont_write" + + def write_file(self, universe_root: Path) -> None: + id = self.drs_name.lower() + content = { + "@context": "000_context.jsonld", + "id": id, + "type": "experiment", + "drs_name": self.drs_name, + "description": self.description, + "activity": self.activity, + "additional_allowed_model_components": self.additional_allowed_model_components, + "min_ensemble_size": self.min_ensemble_size, + "required_model_components": self.required_model_components, + } + + for attr in ( + "branch_information", + "min_number_yrs_per_sim", + "parent_activity", + "parent_experiment", + "parent_mip_era", + "tier", + "start_timestamp", + "end_timestamp", + ): + val = getattr(self, attr) + if val != "dont_write": + content[attr] = val + + out_file = str(universe_root / "experiment" / f"{id}.json") + write_file(out_file, content) + + +class ExperimentProject(BaseModel): + model_config = ConfigDict( + validate_assignment=True, + validate_default=True, + extra="forbid", + strict=True, + ) + + id: str + activity: str + description: str = "dont_write" + branch_information: str | None = "dont_write" + start_timestamp: datetime | None | str = "dont_write" + end_timestamp: datetime | None | str = "dont_write" + min_number_yrs_per_sim: float | None | str = "dont_write" + min_ensemble_size: int | str = "dont_write" + parent_activity: str | None = "dont_write" + parent_experiment: str | None = "dont_write" + parent_mip_era: str | None = "dont_write" + tier: int + + def write_file(self, project_root: Path) -> None: + content = { + "@context": "000_context.jsonld", + "id": self.id, + "type": "experiment", + "tier": self.tier, + } + + for attr in ( + "branch_information", + "description", + "start_timestamp", + "end_timestamp", + "min_number_yrs_per_sim", + "min_ensemble_size", + "parent_activity", + "parent_experiment", + "parent_mip_era", + ): + val = getattr(self, attr) + if val != "dont_write": + content[attr] = val + + out_file = str(project_root / "experiment" / f"{self.id}.json") + write_file(out_file, content) + + +class ActivityProject(BaseModel): + model_config = ConfigDict( + validate_assignment=True, + validate_default=True, + extra="forbid", + strict=True, + ) + + id: str + experiments: list[str] + urls: list[str] + + def write_file(self, project_root: Path) -> None: + content = { + "@context": "000_context.jsonld", + "id": self.id, + "type": "activity", + "experiments": sorted(self.experiments), + "urls": sorted(self.urls), + } + + out_file = str(project_root / "activity" / f"{self.id}.json") + write_file(out_file, content) + + +class Holder(BaseModel): + """ + God class :) + """ + + model_config = ConfigDict( + validate_assignment=True, + validate_default=True, + extra="forbid", + strict=True, + ) + + experiments_project: list[ExperimentProject] + experiments_universe: list[ExperimentUniverse] + activities: list[ActivityProject] + + def initialise_activities(self) -> "Holder": + self.activities = [ + ActivityProject( + id="aerchemmip", + experiments=[], + urls=[ + "https://doi.org/10.5194/gmd-10-585-2017", + ], + ), + ActivityProject( + id="c4mip", + experiments=[], + urls=[ + "https://doi.org/10.5194/gmd-17-8141-2024", + "https://doi.org/10.5194/egusphere-2024-3356", + "https://doi.org/10.5194/gmd-9-2853-2016", + ], + ), + ActivityProject( + id="cfmip", + experiments=[], + urls=["https://doi.org/10.5194/gmd-10-359-2017"], + ), + ActivityProject( + id="cmip", + experiments=[], + urls=["https://doi.org/10.5194/gmd-18-6671-2025"], + ), + ActivityProject( + id="damip", + experiments=[], + urls=["https://doi.org/10.5194/gmd-18-4399-2025"], + ), + ActivityProject( + id="geomip", + experiments=[], + urls=["https://doi.org/10.5194/gmd-17-2583-2024"], + ), + ActivityProject( + id="lmip", + experiments=[], + urls=["https://doi.org/10.5194/gmd-9-2809-2016"], + ), + ActivityProject( + id="pmip", + experiments=[], + urls=[ + "https://doi.org/10.5194/gmd-10-3979-2017", + "https://doi.org/10.5194/cp-19-883-2023", + ], + ), + ActivityProject( + id="rfmip", + experiments=[], + urls=[ + "https://doi.org/10.5194/gmd-9-3447-2016", + "https://doi.org/10.5194/acp-20-9591-2020", + ], + ), + ActivityProject( + id="scenariomip", + experiments=[], + urls=["https://doi.org/10.5194/egusphere-2024-3765"], + ), + ] + + def add_experiment_to_activity(self, experiment: ExperimentProject) -> "Holder": + for activity_idx, activity in enumerate(self.activities): + if activity.id == experiment.activity: + break + + else: + msg = f"No activity {experiment.activity} found. {self.activities=}" + raise AssertionError(msg) + + if experiment.id not in self.activities[activity_idx]: + self.activities[activity_idx].experiments.append(experiment.id) + + return self + + def add_1pctco2_entries(self) -> "Holder": + for ( + drs_name, + description_start, + activity, + required_model_components, + additional_allowed_model_components, + ) in ( + ( + "1pctCO2", + "", + "cmip", + ["aogcm"], + ["aer", "chem", "bgc"], + ), + ( + "1pctCO2-bgc", + ( + "Biogeochemically coupled simulation " + "(i.e. the carbon cycle only 'sees' the increase in atmospheric carbon dioxide, " + "not any change in temperature) of a " + ), + "c4mip", + ["aogcm", "bgc"], + ["aer", "chem"], + ), + ( + "1pctCO2-rad", + ( + "Radiatively coupled simulation " + "(i.e. the carbon cycle only 'sees' the increase in temperature, " + "not any change in atmospheric carbon dioxide) of a " + ), + "c4mip", + ["aogcm", "bgc"], + ["aer", "chem"], + ), + ): + univ = ExperimentUniverse( + drs_name=drs_name, + description=( + f"{description_start}" + "1% per year increase in atmospheric carbon dioxide levels. " + "All other conditions are kept the same as piControl." + ), + activity=activity, + additional_allowed_model_components=additional_allowed_model_components, + branch_information="Branch from `piControl` at a time of your choosing", + end_timestamp=None, + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity="cmip", + parent_experiment="picontrol", + # Defined in project + parent_mip_era="dont_write", + required_model_components=required_model_components, + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + min_number_yrs_per_sim=150, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_abruptco2_entries(self) -> "Holder": + for drs_name, description_start, activity in ( + ( + "abrupt-4xCO2", + "Abrupt quadrupling of atmospheric carbon dioxide levels.", + "cmip", + ), + ( + "abrupt-2xCO2", + "Abrupt doubling of atmospheric carbon dioxide levels.", + "cfmip", + ), + ( + "abrupt-0p5xCO2", + "Abrupt halving of atmospheric carbon dioxide levels.", + "cfmip", + ), + ): + univ = ExperimentUniverse( + drs_name=drs_name, + description=( + f"{description_start} All other conditions are kept the same as piControl." + ), + activity=activity, + additional_allowed_model_components=["aer", "chem", "bgc"], + branch_information="Branch from `piControl` at a time of your choosing", + end_timestamp=None, + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity="cmip", + parent_experiment="picontrol", + # Defined in project + parent_mip_era="dont_write", + required_model_components=["aogcm"], + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + min_number_yrs_per_sim=300, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_amip_entries(self) -> "Holder": + for ( + drs_name, + description, + activity, + start_timestamp, + end_timestamp, + min_number_yrs_per_sim, + ) in ( + ( + "amip", + "Simulation of the climate of the recent past with prescribed sea surface temperatures and sea ice concentrations.", + "cmip", + "1979-01-01", + "2021-12-31", + 43, + ), + ( + "amip-p4k", + "Same as `amip` simulation, except sea surface temperatures are increased by 4K in ice-free regions.", + "cfmip", + "1979-01-01", + "2021-12-31", + 43, + ), + ( + "amip-piForcing", + ( + "Same as `amip` simulation, except it starts in 1870 " + "and all forcings are set to pre-industrial levels " + "rather than time-varying forcings." + ), + "cfmip", + "1870-01-01", + "2021-12-31", + 152, + ), + ): + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity=activity, + additional_allowed_model_components=["aer", "chem", "bgc"], + branch_information=None, + end_timestamp=None, + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity=None, + parent_experiment=None, + parent_mip_era=None, + required_model_components=["agcm"], + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + start_timestamp=start_timestamp, + end_timestamp=end_timestamp, + min_number_yrs_per_sim=min_number_yrs_per_sim, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_picontrol_entries(self) -> "Holder": + for ( + drs_name, + description, + min_number_yrs_per_sim, + tier, + parent_experiment, + branch_information, + ) in ( + ( + "piControl", + ( + "Pre-industrial control simulation " + "with prescribed carbon dioxide concentrations " + "(for prescribed carbon dioxide emissions, see `esm-piControl`). " + "Used to characterise natural variability and unforced behaviour." + ), + 400, + 1, + "picontrol-spinup", + "Branch from `piControl-spinup` at a time of your choosing", + ), + ( + "piControl-spinup", + ( + "Spin-up simulation. " + "Used to get the model into a state of approximate radiative equilibrium " + "before starting the `piControl` simulation." + ), + None, + 3, + None, + None, + ), + ( + "esm-piControl", + ( + "Pre-industrial control simulation " + "with prescribed carbon dioxide emissions " + "(for prescribed carbon dioxide concentrations, see `piControl`). " + "Used to characterise natural variability and unforced behaviour." + ), + 400, + 1, + "esm-picontrol-spinup", + "Branch from `esm-piControl-spinup` at a time of your choosing", + ), + ( + "esm-piControl-spinup", + ( + "Spin-up simulation. " + "Used to get the model into a state of approximate radiative equilibrium " + "before starting the `esm-piControl` simulation." + ), + None, + 3, + None, + None, + ), + ): + if drs_name.startswith("esm-"): + additional_allowed_model_components = ["aer", "chem"] + required_model_components = ["aogcm", "bgc"] + + else: + additional_allowed_model_components = ["aer", "chem", "bgc"] + required_model_components = ["aogcm"] + + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity="cmip", + additional_allowed_model_components=additional_allowed_model_components, + branch_information=branch_information, + end_timestamp=None, + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity=None if parent_experiment is None else "cmip", + parent_experiment=parent_experiment, + # Defined in project + parent_mip_era=None if parent_experiment is None else "dont_write", + required_model_components=required_model_components, + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + min_number_yrs_per_sim=min_number_yrs_per_sim, + parent_mip_era="cmip7" if parent_experiment is not None else None, + tier=tier, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_historical_entries(self) -> "Holder": + for ( + drs_name, + description, + parent_experiment, + branch_information, + ) in ( + ( + "historical", + ( + "Simulation of the climate of the recent past " + "(typically meaning 1850 to present-day) " + "with prescribed carbon dioxide concentrations " + "(for prescribed carbon dioxide emissions, see `esm-hist`)." + ), + "picontrol", + "Branch from `piControl` at a time of your choosing", + ), + ( + "esm-hist", + ( + "Simulation of the climate of the recent past " + "(typically meaning 1850 to present-day) " + "with prescribed carbon dioxide emissions " + "(for prescribed carbon dioxide concentrations, see `historical`)." + ), + "esm-picontrol", + "Branch from esm-piControl at a time of your choosing", + ), + ): + if drs_name.startswith("esm-"): + additional_allowed_model_components = ["aer", "chem"] + required_model_components = ["aogcm", "bgc"] + + else: + additional_allowed_model_components = ["aer", "chem", "bgc"] + required_model_components = ["aogcm"] + + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity="cmip", + additional_allowed_model_components=additional_allowed_model_components, + branch_information=branch_information, + # Defined in project + end_timestamp="dont_write", + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity="cmip", + parent_experiment=parent_experiment, + # Defined in project + parent_mip_era="dont_write", + required_model_components=required_model_components, + start_timestamp="1850-01-01", + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + start_timestamp="1850-01-01", + end_timestamp="2021-12-31", + min_number_yrs_per_sim=172, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + @staticmethod + def get_scenario_tier(drs_name: str) -> int: + # TODO: update + return 1 + + @staticmethod + def get_scenario_project( + scenario_universe: ExperimentUniverse, + ) -> ExperimentProject: + res = ExperimentProject( + id=scenario_universe.drs_name.lower(), + activity=scenario_universe.activity, + start_timestamp=scenario_universe.start_timestamp, + end_timestamp=scenario_universe.end_timestamp, + min_number_yrs_per_sim=scenario_universe.min_number_yrs_per_sim, + parent_mip_era="cmip7", + tier=scenario_universe.tier, + ) + + return res + + def get_scenario_extension( + self, + scenario: ExperimentUniverse, + ) -> ExperimentUniverse: + res = scenario.model_copy() + + scenario_end_timestamp_dt = datetime.strptime( + scenario.end_timestamp, "%Y-%m-%d" + ) + + extension_start_timestamp = f"{scenario_end_timestamp_dt.year + 1}-01-01" + # TODO: check + extension_end_timestamp = "2500-12-31" + + res.description = f"Extension of `{scenario.drs_name}` beyond {scenario_end_timestamp_dt.year}." + # Unclear to me how this is meant to work. + # scenario ends at 2100-12-31, extensions starts at 2101-01-01. + # Is it an implied join rather than a true overlap + # (like we have for piControl to historical)? + res.branch_information = f"Branch from `{scenario.drs_name}` at {scenario_end_timestamp_dt.strftime('%Y-%m-%d')}" + + res.start_timestamp = extension_start_timestamp + res.end_timestamp = extension_end_timestamp + + res.min_number_yrs_per_sim = 50.0 + res.parent_activity = scenario.activity + res.parent_experiment = scenario.drs_name.lower() + res.drs_name = f"{scenario.drs_name}-ext" + res.tier = self.get_scenario_tier(res.drs_name) + + return res + + @staticmethod + def get_scenario_drs_name(scenario_acronym: str) -> str: + return f"scen7-{scenario_acronym}" + + @staticmethod + def get_scenario_esm_drs_name(scenario_drs_name: str) -> str: + return f"esm-{scenario_drs_name}" + + def get_scenario_esm( + self, + scenario: ExperimentUniverse, + ) -> ExperimentUniverse: + res = scenario.model_copy() + + res.drs_name = self.get_scenario_esm_drs_name(scenario.drs_name) + res.description = ( + scenario.description.replace( + "carbon dioxide concentrations", "carbon dioxide emissions" + ) + .replace("carbon dioxide emissions,", "carbon dioxide concentrations,") + .replace(res.drs_name, scenario.drs_name) + ) + res.required_model_components = ["aogcm", "bgc"] + res.additional_allowed_model_components = ["aer", "chem"] + + if scenario.parent_experiment != "historical": + raise AssertionError + + res.parent_experiment = "esm-hist" + res.branch_information = scenario.branch_information.replace( + scenario.parent_experiment, res.parent_experiment + ) + + res.tier = self.get_scenario_tier(res.drs_name) + + return res + + def add_scenario_entries(self) -> "Holder": + acronym_descriptions = [ + ("vl", "PLACEHOLDER TBC. CMIP7 ScenarioMIP very low emissions future."), + ( + "ln", + "PLACEHOLDER TBC. CMIP7 ScenarioMIP low followed by negative (steep reductions begin in 2040, negative from TBD) emissions future.", + ), + ("l", "PLACEHOLDER TBC. CMIP7 ScenarioMIP low emissions future."), + ( + "ml", + "PLACEHOLDER TBC. CMIP7 ScenarioMIP medium followed by low (from 2040) emissions future.", + ), + ("m", "PLACEHOLDER TBC. CMIP7 ScenarioMIP medium emissions future."), + ( + "hl", + "PLACEHOLDER TBC. CMIP7 ScenarioMIP High followed by low (from 2060) emissions future.", + ), + ("h", "PLACEHOLDER TBC. CMIP7 ScenarioMIP high emissions future."), + ] + + for acronym, description_base in acronym_descriptions: + drs_name = self.get_scenario_drs_name(acronym) + drs_name_esm_scenario = self.get_scenario_esm_drs_name(drs_name) + if "CMIP7 ScenarioMIP" not in description_base: + raise AssertionError(description_base) + + description = ( + f"{description_base} Run with prescribed carbon dioxide concentrations " + f"(for prescribed carbon dioxide emissions, see `{drs_name_esm_scenario}`)." + ) + + univ_base = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity="scenariomip", + additional_allowed_model_components=["aer", "chem", "bgc"], + branch_information="Branch from `historical` at 2022-01-01.", + # TODO: check if 2100-21-31 or 2100-01-01 + end_timestamp="2100-12-31", + min_ensemble_size=1, + min_number_yrs_per_sim=79.0, + parent_activity="cmip", + parent_experiment="historical", + parent_mip_era="cmip7", + required_model_components=["aogcm"], + start_timestamp="2022-01-01", + tier=self.get_scenario_tier(drs_name), + ) + + proj_base = self.get_scenario_project(univ_base) + + self.experiments_universe.append(univ_base) + self.experiments_project.append(proj_base) + self.add_experiment_to_activity(proj_base) + + univ_ext = self.get_scenario_extension(univ_base) + proj_ext = self.get_scenario_project(univ_ext) + self.experiments_universe.append(univ_ext) + self.experiments_project.append(proj_ext) + self.add_experiment_to_activity(proj_ext) + + univ_esm = self.get_scenario_esm(univ_base) + proj_esm = self.get_scenario_project(univ_esm) + self.experiments_universe.append(univ_esm) + self.experiments_project.append(proj_esm) + self.add_experiment_to_activity(proj_esm) + + univ_esm_ext = self.get_scenario_extension(univ_esm) + proj_esm_ext = self.get_scenario_project(univ_esm_ext) + self.experiments_universe.append(univ_esm_ext) + self.experiments_project.append(proj_esm_ext) + self.add_experiment_to_activity(proj_esm_ext) + + return self + + def add_scenario_aerchemmip_entries(self) -> "Holder": + for base in ["vl", "h"]: + conc_driven_drs_name = self.get_scenario_drs_name(base) + for base_drs_name in [ + conc_driven_drs_name, + self.get_scenario_esm_drs_name(conc_driven_drs_name), + ]: + base_experiment_universe_l = [ + v for v in self.experiments_universe if v.drs_name == base_drs_name + ] + if len(base_experiment_universe_l) != 1: + raise AssertionError(base_drs_name) + base_experiment_universe = base_experiment_universe_l[0] + + for ( + suffix, + required_model_components, + additional_allowed_model_components, + desc_suffix, + ) in ( + ( + "-AQ", + ["aogcm", "aer", "chem"], + ["bgc"], + ( + "This is for models with interactive chemistry. " + "Models without interactive chemistry should run " + f"`{base_experiment_universe.drs_name}-Aer` instead." + ), + ), + ( + "-Aer", + ["aogcm", "aer"], + ["bgc", "chem"], + ( + "This is for models without interactive chemistry. " + "Models with interactive chemistry should run " + f"`{base_experiment_universe.drs_name}-Aq` instead." + ), + ), + ): + aerchemmip_experiment_universe = ( + base_experiment_universe.model_copy() + ) + aerchemmip_experiment_universe.drs_name = ( + f"{aerchemmip_experiment_universe.drs_name}{suffix}" + ) + aerchemmip_experiment_universe.activity = "aerchemmip" + + desc_base = aerchemmip_experiment_universe.description.split( + " Run with prescribed" + )[0] + aerchemmip_experiment_universe.description = ( + f"{desc_base} " + "Altered to use high aerosol and tropospheric non-methane ozone precursor emissions. " + f"{desc_suffix}" + ) + + aerchemmip_experiment_universe.min_ensemble_size = 3 + aerchemmip_experiment_universe.required_model_components = ( + required_model_components + ) + aerchemmip_experiment_universe.additional_allowed_model_components = additional_allowed_model_components + + aerchemmip_experiment_project = self.get_scenario_project( + aerchemmip_experiment_universe + ) + self.experiments_universe.append(aerchemmip_experiment_universe) + self.experiments_project.append(aerchemmip_experiment_project) + self.add_experiment_to_activity(aerchemmip_experiment_project) + + # TODO: ask someone to translate/write hist-piAQ for me. + # Not sure what hist-piAQ is or how it is defined. + + return self + + def add_piclim_entries(self) -> "Holder": + def get_purturbation_description( + quantifies: str, forcing_diff_from_picontrol: str + ) -> str: + description_full = ( + "In combination with `piClim-control`, " + f"quantifies present-day {quantifies} effective radiative forcing (ERF). " + f"Same as `piClim-control`, except {forcing_diff_from_picontrol} use present-day values " + "(typically the last year of the `historical` simulation within the same CMIP era " + "e.g. 2014 values for CMIP6, 2021 values for CMIP7)." + ) + + return description_full + + for ( + drs_name, + description, + activity, + # No parent for these? + # parent_experiment, + required_model_components, + additional_allowed_model_components, + # No parent for these? + # branch_information, + tier, + ) in ( + ( + "piClim-control", + ( + "Baseline for effective radiative forcing (ERF) calculations. " + "`piControl` with prescribed sea-surface temperatures " + "and sea-ice concentrations." + ), + "cmip", + ["agcm"], + ["aer", "chem", "bgc"], + 1, + ), + ( + "piClim-anthro", + get_purturbation_description( + "total anthropogenic", + "all anthropogenic forcings", + ), + "cmip", + ["agcm"], + ["aer", "chem", "bgc"], + 1, + ), + ( + "piClim-4xCO2", + ( + "In combination with `piClim-control`, " + "quantifies a quadrupling of atmospheric carbon dioxide's " + "(4xCO2's) effective radiative forcing (ERF). " + "Same as `piClim-control`, " + "except atmospheric carbon dioxide concentrations " + "are set to four times `piControl` levels." + ), + "cmip", + ["agcm"], + ["aer", "chem", "bgc"], + 1, + ), + # TODO: check whether there is one missing here + ( + "piClim-CH4", + get_purturbation_description( + "methane", + # TODO: check whether concentrations or emissions + "methane atmospheric forcing", + ), + "aerchemmip", + ["agcm", "chem"], + ["aer", "bgc"], + 1, + ), + ( + "piClim-N2O", + get_purturbation_description( + "nitrous oxide", + # TODO: check whether concentrations or emissions + "nitrous oxide atmospheric forcing", + ), + "aerchemmip", + ["agcm", "chem"], + ["aer", "bgc"], + 1, + ), + ( + "piClim-NOx", + get_purturbation_description( + "nitrous oxide (NOx)", + # TODO: confirm tha this is emissions + "nitrous oxide (NOx) emissions", + ), + "aerchemmip", + ["agcm", "chem"], + ["aer", "bgc"], + 1, + ), + ( + "piClim-ODS", + get_purturbation_description( + "ozone-depleting substances'", + # TODO: check whether concentrations or emissions + "ozone-depleting substance atmospheric forcing", + ), + "aerchemmip", + ["agcm", "chem"], + ["aer", "bgc"], + 1, + ), + ( + "piClim-SO2", + get_purturbation_description( + "sulfur (dioxide)", + "sulfur emissions", + ), + "aerchemmip", + ["agcm", "aer"], + ["chem", "bgc"], + 1, + ), + ( + "piClim-aer", + get_purturbation_description( + "aerosol", + "anthropogenic aerosol emissions", + ), + "rfmip", + ["agcm", "aer"], + ["chem", "bgc"], + 1, + ), + ): + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity=activity, + additional_allowed_model_components=additional_allowed_model_components, + branch_information=None, + end_timestamp=None, + min_ensemble_size=1, + min_number_yrs_per_sim=30, + parent_activity=None, + parent_experiment=None, + parent_mip_era=None, + required_model_components=required_model_components, + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + parent_mip_era="dont_write", + tier=tier, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + for ( + drs_name, + description, + required_model_components, + additional_allowed_model_components, + ) in ( + ( + "piClim-histaer", + ( + "Simulation of the historical period with prescribed sea-surface temperatures " + "and sea-ice concentrations. " + "Aerosol emissions follow the `historical` experiment " + "while all other forcings follow `piControl` " + "to allow for a (approximate) diagnosis of " + "transient historical aerosol effective radiative forcing (ERF) " + "(can be compared with `piClim-aer` which provides a more precise " + "quantification of present-day aerosol ERF)." + ), + ["aogcm", "aer"], + ["chem", "bgc"], + ), + ( + "piClim-histall", + ( + "Simulation of the historical period with prescribed sea-surface temperatures " + "and sea-ice concentrations. " + "All forcings follow the `historical` experiment " + "to allow for a (approximate) diagnosis of " + "transient historical effective radiative forcing (ERF)." + "(can be compared with the `piClim-*` experiments which provide a more precise " + "quantification of present-day ERF from various forcers)." + ), + ["aogcm", "aer"], + ["chem", "bgc"], + ), + ): + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity="rfmip", + additional_allowed_model_components=additional_allowed_model_components, + branch_information=None, + # Defined in project + end_timestamp="dont_write", + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity=None, + parent_experiment=None, + parent_mip_era=None, + required_model_components=required_model_components, + start_timestamp="1850-01-01", + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + start_timestamp="1850-01-01", + # TODO: check why these are called `*hist*` + # when they are meant to extend to 2100. + end_timestamp="2100-12-31", + min_number_yrs_per_sim=251, + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_flat10_entries(self) -> "Holder": + univ_flat10 = ExperimentUniverse( + drs_name="esm-flat10", + description="10 PgC / yr constant carbon dioxide emissions.", + activity="c4mip", + additional_allowed_model_components=["aer", "chem"], + branch_information="Branch from `esm-piControl` at a time of your choosing", + end_timestamp=None, + min_ensemble_size=1, + min_number_yrs_per_sim=100.0, + parent_activity="cmip", + parent_experiment="esm-picontrol", + # Defined in project + parent_mip_era="dont_write", + required_model_components=["aogcm", "bgc"], + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ_flat10) + + proj_flat10 = ExperimentProject( + id=univ_flat10.drs_name.lower(), + activity=univ_flat10.activity, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj_flat10) + self.add_experiment_to_activity(proj_flat10) + + for ( + drs_name, + description, + branch_information, + min_number_yrs_per_sim, + ) in ( + ( + "esm-flat10-cdr", + ( + "Extension of `esm-flat10` where emissions decline linearly to -10 PgC / yr " + "then stay constant until cumulative emissions " + "(including the emissions in `esm-flat10`) reach zero. " + "An extra 20 years is included at the end to allow for calculating averages over different time windows." + ), + "Branch from `esm-flat10` at the end of year 100.", + 220.0, + ), + ( + "esm-flat10-zec", + "Extension of `esm-flat10` with zero emissions.", + "Branch from `esm-flat10` at the end of year 100.", + 100.0, + ), + ): + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity=univ_flat10.activity, + additional_allowed_model_components=univ_flat10.additional_allowed_model_components, + branch_information=branch_information, + end_timestamp=None, + min_ensemble_size=1, + min_number_yrs_per_sim=min_number_yrs_per_sim, + parent_activity=univ_flat10.activity, + parent_experiment=proj_flat10.id, + # Defined in project + parent_mip_era="dont_write", + required_model_components=univ_flat10.required_model_components, + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_damip_entries(self) -> "Holder": + for drs_name, forcing in ( + ("hist-aer", "aerosol"), + ("hist-GHG", "aerosol"), + ("hist-nat", "aerosol"), + ): + univ = ExperimentUniverse( + drs_name=drs_name, + description=( + f"Response to historical {forcing} forcing " + "(often with extension using forcings from a scenario simulation specific to the CMIP phase). " + "All other conditions are kept the same as piControl." + ), + activity="damip", + additional_allowed_model_components=["aer", "chem", "bgc"], + branch_information="Branch from `piControl` at a time of your choosing", + # Defined in project + end_timestamp="dont_write", + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity="cmip", + parent_experiment="picontrol", + # Defined in project + parent_mip_era="dont_write", + required_model_components=["aogcm"], + # Defined in project + start_timestamp="1850-01-01", + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + description=( + f"Response to historical {forcing} forcing " + "(with extension using forcings from the `m` scenario simulation). " + "All other conditions are kept the same as piControl." + ), + activity=univ.activity, + start_timestamp="1850-01-01", + end_timestamp="2035-12-31", + min_number_yrs_per_sim=186, + min_ensemble_size=3, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_geomip_entries(self) -> "Holder": + for ( + drs_name, + description_univ, + description_proj_to_format, + base_scenario, + start_year, + ) in ( + ( + # TODO: check if this is the desired drs_name + "G7-1p5K-SAI", + ( + "Stablisation of global-mean temperature at 1.5C " + "by holding stratospheric sulfur forcing constant " + # TODO: check - constant forcing may not lead to stable temperatures?! + "(at whatever level is required to achieve stable temperatures). " + "The simulation generally branches from a scenario simulation at some point in the future." + ), + ( + "After following the `{scenario}` scenario until 2035, " + "stablisation of global-mean temperature at 1.5C " + "by holding stratospheric sulfur forcing constant " + # TODO: check - constant forcing may not lead to stable temperatures?! + "(at whatever level is required to achieve stable temperatures)." + ), + "scen7-m", + 2035, + ), + ): + description_proj = description_proj_to_format.format(scenario=base_scenario) + start_timestamp = f"{start_year}-01-01" + for exp_proj in self.experiments_project: + if exp_proj.id == base_scenario: + parent = exp_proj + break + else: + raise AssertionError(base_scenario) + + univ = ExperimentUniverse( + drs_name=drs_name, + description=description_univ, + activity="geomip", + additional_allowed_model_components=["aer", "chem", "bgc"], + # Defined in project + branch_information="dont_write", + end_timestamp="dont_write", + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity="dont_write", + parent_experiment="dont_write", + parent_mip_era="dont_write", + required_model_components=["aogcm"], + # Defined in project + start_timestamp="dont_write", + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + description=description_proj, + branch_information=f"Branch from the `{base_scenario}` simulation at the start of {start_year}.", + activity=univ.activity, + start_timestamp=start_timestamp, + end_timestamp=None, + # TODO: why only 50?! + min_number_yrs_per_sim=50, + min_ensemble_size=1, + parent_activity=parent.activity, + parent_experiment=parent.id, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_lmip_entries(self) -> "Holder": + drs_name = "land-hist" + description = "Land-only version of `historical`." + + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + # TODO: check if this should be LS3MIP + activity="lmip", + additional_allowed_model_components=[], + branch_information=None, + # Defined in project + end_timestamp="dont_write", + min_ensemble_size=1, + # Defined in project + min_number_yrs_per_sim="dont_write", + parent_activity=None, + parent_experiment=None, + parent_mip_era=None, + required_model_components=["land"], + # Defined in project + start_timestamp="dont_write", + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + start_timestamp="1850-01-01", + end_timestamp="2021-12-31", + min_number_yrs_per_sim=172, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def add_pmip_entries(self) -> "Holder": + drs_name = "abrupt-127k" + description = ( + "Simulation to examine the response to orbital and greenhouse gas concentration changes " + "associated with the last interglacial (127 000 years before present)." + ) + + univ = ExperimentUniverse( + drs_name=drs_name, + description=description, + activity="pmip", + additional_allowed_model_components=["aer", "chem", "bgc"], + branch_information="Branch from `piControl` at a time of your choosing", + end_timestamp=None, + min_ensemble_size=1, + min_number_yrs_per_sim=100.0, + parent_activity="cmip", + parent_experiment="picontrol", + parent_mip_era="dont_write", + required_model_components=["aogcm"], + start_timestamp=None, + tier=1, + ) + + self.experiments_universe.append(univ) + + proj = ExperimentProject( + id=univ.drs_name.lower(), + activity=univ.activity, + min_number_yrs_per_sim=100.0, + parent_mip_era="cmip7", + tier=1, + ) + self.experiments_project.append(proj) + + self.add_experiment_to_activity(proj) + + return self + + def write_files(self, project_root: Path, universe_root: Path) -> None: + for experiment_project in self.experiments_project: + experiment_project.write_file(project_root) + + for experiment_universe in self.experiments_universe: + experiment_universe.write_file(universe_root) + + for activity in self.activities: + activity.write_file(project_root) + + +def sort_keys( + content: dict[str, Any], + header_keys: tuple[str, ...] = ( + "@context", + "id", + "type", + "description", + "drs_name", + "start_timestamp", + "end_timestamp", + "min_number_yrs_per_sim", + ), +) -> dict[str, Any]: + res = {} + for k in header_keys: + if k in content: + res[k] = content[k] + + for k in sorted(content): + if k in header_keys: + continue + + res[k] = content[k] + + return res + + +def write_file(out_file: str, content: dict[str, Any]) -> None: + content_sorted = sort_keys(content) + with open(out_file, "w") as fh: + json.dump(content_sorted, fh, indent=4) + fh.write("\n") + + print(f"Wrote {out_file}") + + +def get_tier(experiment: str) -> int: + # TODO: confirm this + return 0 + + +def main(): + REPO_ROOT = Path(__file__).parents[1] + project_root = REPO_ROOT / ".." / "CMIP7-CVs" + universe_root = REPO_ROOT + + holder = Holder(experiments_project=[], experiments_universe=[], activities=[]) + + holder.initialise_activities() + + holder.add_1pctco2_entries() + holder.add_abruptco2_entries() + holder.add_amip_entries() + holder.add_picontrol_entries() + holder.add_historical_entries() + holder.add_scenario_entries() + holder.add_scenario_aerchemmip_entries() + holder.add_piclim_entries() + holder.add_flat10_entries() + holder.add_damip_entries() + + # TODO: DCPP + # I couldn't figure out why ssp245 was mentioned + + holder.add_geomip_entries() + holder.add_lmip_entries() + holder.add_pmip_entries() + + holder.write_files(project_root=project_root, universe_root=universe_root) + + +if __name__ == "__main__": + main() diff --git a/scripts/generate-region.py b/scripts/generate-region.py index ec73cd29b..d982e3649 100644 --- a/scripts/generate-region.py +++ b/scripts/generate-region.py @@ -8,7 +8,7 @@ def main(): for id, drs_name, description, cf_standard_region, iso_region in ( ("global", "glb", "The entire globe i.e. earth.", "global", None), - ("antarctica", "ata", "Antarcica.", "antarctica", "ata"), + ("antarctica", "ata", "Antarctica.", "antarctica", "ata"), ("greenland", "grl", "Greenland.", "greenland", "grl"), ( "30s-90s", diff --git a/scripts/generate-scenariomip-experiments.py b/scripts/generate-scenariomip-experiments.py deleted file mode 100644 index f5ae28e52..000000000 --- a/scripts/generate-scenariomip-experiments.py +++ /dev/null @@ -1,65 +0,0 @@ -""" -Generate ScenarioMIP experiment names -""" - -import json - - -def get_tier(experiment: str) -> int: - # TODO: confirm this - return 0 - - -def main(): - bases = ["vl", "ln", "l", "ml", "m", "hl", "h"] - - experiment_list = [] - for base in bases: - for prefix in [ - "scen7-", - "esm-scen7-", - ]: - for suffix in [ - "", - "-ext", - ]: - experiment_name = f"{prefix}{base}{suffix}" - - id = experiment_name.lower() - - content = { - "@context": "000_context.jsonld", - "id": id, - "type": "experiment", - "drs_name": experiment_name, - "activity": "scenariomip", - "additional_allowed_model_components": ["aer", "chem", "bgc"], - "required_model_components": ["aogcm"], - } - - out_file = f"experiment/{id}.json" - with open(out_file, "w") as fh: - json.dump(content, fh, indent=4) - - print(f"Wrote {out_file}") - experiment_list.append(id) - - experiment_list = sorted(experiment_list) - out_file = "activity/scenariomip.json" - content = { - "@context": "000_context.jsonld", - "id": "scenariomip", - "type": "activity", - "description": "Future scenario experiments. Exploration of the future climate under a (selected) range of possible boundary conditions", - "drs_name": "ScenarioMIP", - "experiments": experiment_list, - "urls": ["https://doi.org/10.5194/egusphere-2024-3765"], - } - with open(out_file, "w") as fh: - json.dump(content, fh, indent=4) - - print(f"Wrote {out_file}") - - -if __name__ == "__main__": - main()