@hestia-earth/guide 0.0.18 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/dist/content/guide/aggregation-engine/content.json +1 -1
- package/dist/content/guide/data-explorer/what-is-it.json +1 -1
- package/dist/content/guide/data-validation/cycle.json +1 -1
- package/dist/content/guide/data-validation/impact-assessment.json +1 -1
- package/dist/content/guide/data-validation/organisation.json +1 -1
- package/dist/content/guide/data-validation/site.json +1 -1
- package/dist/content/guide/file-upload/examples/example-1.json +1 -1
- package/dist/content/guide/file-upload/examples/example-2.json +1 -1
- package/dist/content/guide/file-upload/examples/example-3.json +1 -1
- package/dist/content/guide/file-upload/examples/example-4.json +1 -1
- package/dist/content/guide/file-upload/getting-started.json +1 -1
- package/dist/content/guide/hestia-api/data-api.json +1 -1
- package/dist/content/guide/utils/content.json +1 -0
- package/dist/content/index.json +1 -1
- package/dist/content/models/applying-models/content.json +1 -0
- package/dist/content/models/applying-models/faq.json +1 -0
- package/dist/content/models/applying-models/introduction.json +1 -0
- package/dist/content/models/cycleEmissions/fuel/n2OToAirFuelCombustionIndirect/ipcc2019.json +1 -1
- package/dist/content/models/cycleEmissions/inputs/cycle-inputs-background-emissions/freeflow.json +1 -1
- package/dist/content/models/cycleEmissions/inputs/cycle-inputs-background-emissions/worldsteel.json +1 -0
- package/dist/content/models/cycleEmissions/landUseChange/co2ToAirAboveGroundBiomassStockChange/content.json +1 -1
- package/dist/content/models/cycleEmissions/landUseChange/co2ToAirAboveGroundBiomassStockChange/ipcc2019.json +1 -1
- package/dist/content/models/cycleEmissions/landUseChange/co2ToAirBelowGroundBiomassStockChange/content.json +1 -1
- package/dist/content/models/cycleEmissions/landUseChange/co2ToAirBelowGroundBiomassStockChange/ipcc2019.json +1 -1
- package/dist/content/models/cycleEmissions/organicSoil/ch4ToAirOrganicSoilCultivation/content.json +1 -1
- package/dist/content/models/cycleEmissions/organicSoil/ch4ToAirOrganicSoilCultivation/ipcc2019.json +1 -1
- package/dist/content/models/cycleEmissions/organicSoil/co2ToAirOrganicSoilCultivation/content.json +1 -1
- package/dist/content/models/cycleEmissions/organicSoil/co2ToAirOrganicSoilCultivation/ipcc2019.json +1 -1
- package/dist/content/models/cycleEmissions/other/co2ToAirLimeNeutralisation/ipcc2019.json +1 -0
- package/dist/content/models/cycleEmissions/other/nErosionSoilFlux/schererPfister2015.json +1 -1
- package/dist/content/models/cycleEmissions/other/pErosionSoilFlux/schererPfister2015.json +1 -1
- package/dist/content/models/cycleEmissions/soil/co2ToAirBiocharStockChange/content.json +1 -1
- package/dist/content/models/cycleEmissions/soil/co2ToAirBiocharStockChange/ipcc2019.json +1 -1
- package/dist/content/models/cycleEmissions/soil/co2ToAirSoilOrganicCarbonStockChange/content.json +1 -1
- package/dist/content/models/cycleEmissions/soil/co2ToAirSoilOrganicCarbonStockChange/ipcc2019.json +1 -1
- package/dist/content/models/cycleEmissions/soil/n2OToAirDiminishingSoilCarbonStocksDirect/content.json +1 -0
- package/dist/content/models/cycleEmissions/soil/n2OToAirDiminishingSoilCarbonStocksDirect/ipcc2019.json +1 -0
- package/dist/content/models/cycleGeneral/cycle-cycleDuration/content.json +1 -1
- package/dist/content/models/cycleGeneral/cycle-cycleDuration/cycle.json +1 -1
- package/dist/content/models/cycleGeneral/cycle-siteDuration/content.json +1 -1
- package/dist/content/models/cycleGeneral/cycle-siteDuration/cycle.json +1 -1
- package/dist/content/models/cycleGeneral/cycle-startDate/content.json +1 -1
- package/dist/content/models/cycleGeneral/cycle-startDate/cycle.json +1 -1
- package/dist/content/models/cycleInputs/hestia-materialAndSubstrate/hestia.json +1 -1
- package/dist/content/models/impactAssessmentResourceUse/inputs/impact-inputs-background-resource-use/content.json +1 -1
- package/dist/content/models/impactAssessmentResourceUse/inputs/impact-inputs-background-resource-use/worldsteel.json +1 -0
- package/dist/content/models/impactAssessmentResourceUse/inputs/impact-inputs-background-resourceUse/content.json +1 -1
- package/dist/content/models/impactAssessmentResourceUse/inputs/impact-inputs-background-resourceUse/freeflow.json +1 -1
- package/dist/content/models/siteInfrastructure/content.json +1 -0
- package/dist/content/models/siteInfrastructure/site-infrastructure/content.json +1 -0
- package/dist/content/models/siteInfrastructure/site-infrastructure/kanetal2020.json +1 -0
- package/dist/content/models/siteMeasurements/landUseChange/aboveGroundBiomass/content.json +1 -1
- package/dist/content/models/siteMeasurements/landUseChange/aboveGroundBiomass/ipcc2019.json +1 -1
- package/dist/content/models/siteMeasurements/landUseChange/belowGroundBiomass/content.json +1 -1
- package/dist/content/models/siteMeasurements/landUseChange/belowGroundBiomass/ipcc2019.json +1 -1
- package/dist/content/models/siteMeasurements/soil/clayContent/content.json +1 -1
- package/dist/content/models/siteMeasurements/soil/clayContent/geospatialDatabase.json +1 -1
- package/dist/content/models/siteMeasurements/soil/organicCarbonPerHa/content.json +1 -1
- package/dist/content/models/siteMeasurements/soil/organicCarbonPerHa/ipcc2019Tier1.json +1 -1
- package/dist/content/models/siteMeasurements/soil/organicCarbonPerHa/ipcc2019Tier2.json +1 -1
- package/dist/content/models/siteMeasurements/soil/sandContent/content.json +1 -1
- package/dist/content/models/siteMeasurements/soil/sandContent/geospatialDatabase.json +1 -1
- package/dist/content/models/siteMeasurements/soil/siltContent/content.json +1 -1
- package/dist/content/models/siteMeasurements/soil/siltContent/geospatialDatabase.json +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +25 -7
- package/json_models/cycle/siteDuration.py.json +25 -1
- package/json_models/cycle/startDate.py.json +4 -2
- package/json_models/hestia/default_emissions.py.json +1 -1
- package/json_models/hestia/default_resourceUse.py.json +1 -1
- package/json_models/hestia/materialAndSubstrate.py.json +6 -7
- package/json_models/ipcc2019/n2OToAirDiminishingSoilCarbonStocksDirect.py.json +69 -0
- package/json_models/ipcc2019/n2OToAirFuelCombustionIndirect.py.json +25 -3
- package/json_models/kanEtAl2020/infrastructure.py.json +35 -0
- package/json_models/schererPfister2015/nErosionSoilFlux.py.json +8 -8
- package/json_models/schererPfister2015/pErosionSoilFlux.py.json +8 -8
- package/json_models/worldSteel/cycle.py.json +36 -0
- package/json_models/worldSteel/impact_assessment.py.json +38 -0
- package/package.json +1 -1
- package/dist/content/guide/applying-models/content.json +0 -1
- package/dist/content/guide/applying-models/faq.json +0 -1
- package/dist/content/guide/applying-models/file-validation.json +0 -1
- package/dist/content/guide/applying-models/introduction.json +0 -1
- package/dist/content/guide/applying-models/utils.json +0 -1
- package/dist/content/models/cycleEmissions/other/co2ToAirLimeHydrolysis/ipcc2019.json +0 -1
- /package/dist/content/{guide → models}/applying-models/contributing.json +0 -0
- /package/dist/content/{guide → models}/applying-models/logs.json +0 -0
- /package/dist/content/{guide → models}/applying-models/monte-carlo.json +0 -0
- /package/dist/content/models/cycleEmissions/other/{co2ToAirLimeHydrolysis → co2ToAirLimeNeutralisation}/content.json +0 -0
- /package/json_models/ipcc2019/{co2ToAirLimeHydrolysis.py.json → co2ToAirLimeNeutralisation.py.json} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"tags":{},"content":"# How to use\n\nLearn how to implement and run various data models for advanced analysis."}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"tags":{},"content":"# FAQs\n\n<div class=\"collapsibles is-medium\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Why does HESTIA have multiple models for each emissions and resource use?</span>\n </div>\n <div class=\"collapsible-content\">\n <p>Different models have different data requirements. In general, more accurate models require more data such as Site Measurements or data on the Practices used. We have generally coded up multiple models at different tiers for the same emission or resource use (see the definitions of tiers in the <a href=\"/schema/Emission#methodTier\">schema</a>). We try to run the highest tier model first, and if that fails, try a lower tier model next. This approach means we run an accurate model if possible, but if not, run a less accurate model to calculate as many emissions and resource uses as possible.</p>\n <p>For example, if a model fails for a Tier 2 emission, we might still be able to calculate the emission using a lesser tier, like Tier 1.</p>\n </div>\n </div>\n\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>My Impact Assessment finished recalculating, but there are no emissions or resource use visible. Why?</span>\n </div>\n <div class=\"collapsible-content\">\n <p>If the product of the Impact Assessment has no economic value share, or no value, and HESTIA was not able to gap-fill it, the emissions or resource use will not be calculated.</p>\n <p>In this case, please look at the Recalculation logs of the products in \"Cycle: Inputs & Products\" section to determine why HESTIA was not able to gap-fill the product fields.</p>\n </div>\n </div>\n\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>One of the emission on my Cycle failed to calculate. Why? How can I resolve this?</span>\n </div>\n <div class=\"collapsible-content\">\n <p>Each model has a different set of requirements, which can be viewed in the <a href=\"/guide/models\">models documentation</a> for each model. If a requirement is not met, then the model will fail. Sometimes, when some data is missing, we are not able to get a specific lookup used by the model, which means the model will fail.</p>\n <p>Some steps you can take to understand or fix it:</p>\n <ul>\n <li>Make sure all requirements of the model are met in your data. Some of these requirements can be gap-filled, so you can look at those requirements first. We often have models to gap fill these, such as geospatial models to gap fill Site Measurements, so check the results of these gap-fills first.</li>\n <li>Check the lookups used by the model. Some of these lookups can be missing for the data you are using, in which case they would need to be added to <a href=\"https://gitlab.com/hestia-earth/hestia-glossary/-/issues\">our glossary</a> first.</li>\n <li>Check the logs of the model, by clicking on the model name in the \"Recalculation logs\" tab. If you see any line that says \"None\" or \"False\", it could indicate something is missing or incorrect.</li>\n <li>If you are still unable to determine the source of the problem, please log an issue <a href=\"https://gitlab.com/hestia-earth/hestia-engine-models/-/issues\">here</a> for us to rewiew.</li>\n </ul>\n </div>\n </div>\n\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>I have uploaded several cycles on the platform, covering different countries and crops. How do I see which cycle has possible failing emission models?</span>\n </div>\n <div class=\"collapsible-content\">\n <p>Unfortunately at the moment, we do not have any report on failed models at the Cycle or File level, so you will need to review the Cycles one by one to find potential issues.</p>\n </div>\n </div>\n</div>"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"tags":{},"content":"# Introduction\n\nHESTIA provides a set of models for running calculations or retrieving data using external datasets and internal lookups. These models can:\n- Gap fill climate and soil data (e.g., using satellite data).\n- Gap fill farm activity data (e.g., the quantity of crop residue produced).\n- Quantify land use change, on-farm resource use, and on-farm emissions.\n- Quantify the life cycle impacts of products from input production to the farm or processor gate.\n- Quantify indicators like greenhouse gas emissions, eutrophication, and biodiversity impact.\n\n## How to use the models\n\nHESTIA will automatically run all relevant models available, for every data uploaded on the HESTIA platform.\n\nIf you would like to find other ways to run the models, outside of the platform, please [click here](/calculation/lca-models) to find out more.\n\n## Orchestration\n\nThe models in HESTIA are run using what we call the \"orchestrator\". It is responsible for:\n- Defining the order in which the models are run: to run some emissions, we need to make sure some products are present. Some models, that would gap-fill those products, would need to run before the emission model.\n- Defining the criteria for running the model: some emission and resource use models will not run if the user has added data at a higher tier to the model we have (e.g., measured data, tier 3 modelled data).\n- Defining the criteria for updating the data, based on the result of the model: in some cases, a model can run, but the result will not be used, because an existing value is already present. The orchestrator will therefore \"skip\" the result of the model.\n- Defining the order in which we run the different nodes: the calculations happen in multiple stages, accross the Site, Cycle and ImpactAssessment that are linked together. The order is as follows:\n 1. Run the Site models set for stage 1 calculations;\n 2. Run the Cycle models set for stage 1 calculations;\n 3. Run the Site models set for stage 2 calculations;\n 4. Run the Cycle models set for stage 2 calculations;\n 5. Run the Impact Assessment models set for stage 1 calculations;\n\nThe complete configuration of the models, and how to run them, is defined in the files [here](https://gitlab.com/hestia-earth/hestia-engine-models/-/tree/develop/config)."}
|
package/dist/content/models/cycleEmissions/fuel/n2OToAirFuelCombustionIndirect/ipcc2019.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"tags":{"author":["Joseph Poore","Guillaume Royer"],"group":["Cycle: Emissions"],"subgroup":["Fuel"],"tab":["IPCC (2019)"],"modelId":["n2OToAirFuelCombustionIndirect"],"modelRequires":["electricityFuel","nh3ToAirFuelCombustion","noxToAirFuelCombustion","ecoClimateZone"]},"content":"## N2O, to air, fuel combustion, indirect\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/n2OToAirFuelCombustionIndirect\">n2OToAirFuelCombustionIndirect</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/ipcc2019\">ipcc2019</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a> with <code>tier 1</code></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>Data completeness assessment for electricityFuel: <a href=\"https://hestia.earth/schema/Completeness#electricityFuel\">completeness.electricityFuel</a> must be <code>True</code></li>\n<li>a list of <a href=\"https://hestia.earth/schema/Cycle#emissions\">emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a> and <a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/nh3ToAirFuelCombustion\">nh3ToAirFuelCombustion</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a> and <a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/noxToAirFuelCombustion\">noxToAirFuelCombustion</a></li>\n</ul>\n</li>\n<li>optional:<ul>\n<li>a <a href=\"https://hestia.earth/schema/Cycle#site\">site</a> with:<ul>\n<li>a list of <a href=\"https://hestia.earth/schema/Site#measurements\">measurements</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Measurement#value\">value</a> and <a href=\"https://hestia.earth/schema/Measurement#term\">term</a> with <a href=\"https://hestia.earth/term/ecoClimateZone\">ecoClimateZone</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>This model works on the following Node type with identical requirements:</p>\n <ul>\n<li><a href=\"https://hestia.earth/schema/Cycle\">Cycle</a></li>\n<li><a href=\"https://hestia.earth/schema/Transformation\">Transformation</a></li>\n<li><a href=\"https://hestia.earth/schema/Transport\">Transport</a></li>\n</ul></div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>typesAllowed</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|
|
1
|
+
{"tags":{"author":["Joseph Poore","Guillaume Royer"],"group":["Cycle: Emissions"],"subgroup":["Fuel"],"tab":["IPCC (2019)"],"modelId":["n2OToAirFuelCombustionIndirect"],"modelRequires":["electricityFuel","nh3ToAirFuelCombustion","noxToAirFuelCombustion","ecoClimateZone"]},"content":"## N2O, to air, fuel combustion, indirect\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/n2OToAirFuelCombustionIndirect\">n2OToAirFuelCombustionIndirect</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/ipcc2019\">ipcc2019</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a> with <code>tier 1</code></li>\n<li><a href=\"https://hestia.earth/schema/Emission#inputs\">inputs</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#operation\">operation</a></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>Data completeness assessment for electricityFuel: <a href=\"https://hestia.earth/schema/Completeness#electricityFuel\">completeness.electricityFuel</a> must be <code>True</code></li>\n<li>a list of <a href=\"https://hestia.earth/schema/Cycle#emissions\">emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a> and <a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/nh3ToAirFuelCombustion\">nh3ToAirFuelCombustion</a> and a list of <a href=\"https://hestia.earth/schema/Emission#inputs\">inputs</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Input#value\">value</a> and <a href=\"https://hestia.earth/schema/Input#term\">term</a> of <a href=\"https://hestia.earth/schema/Term#termType\">termType</a> = <a href=\"https://hestia.earth/glossary?termType=fuel\">fuel</a> and optional:<ul>\n<li><a href=\"https://hestia.earth/schema/Input#operation\">operation</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a> and <a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/noxToAirFuelCombustion\">noxToAirFuelCombustion</a> and a list of <a href=\"https://hestia.earth/schema/Emission#inputs\">inputs</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Input#value\">value</a> and <a href=\"https://hestia.earth/schema/Input#term\">term</a> of <a href=\"https://hestia.earth/schema/Term#termType\">termType</a> = <a href=\"https://hestia.earth/glossary?termType=fuel\">fuel</a> and optional:<ul>\n<li><a href=\"https://hestia.earth/schema/Input#operation\">operation</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n<li>optional:<ul>\n<li>a <a href=\"https://hestia.earth/schema/Cycle#site\">site</a> with:<ul>\n<li>a list of <a href=\"https://hestia.earth/schema/Site#measurements\">measurements</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Measurement#value\">value</a> and <a href=\"https://hestia.earth/schema/Measurement#term\">term</a> with <a href=\"https://hestia.earth/term/ecoClimateZone\">ecoClimateZone</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n<p>This model works on the following Node type with identical requirements:</p>\n <ul>\n<li><a href=\"https://hestia.earth/schema/Cycle\">Cycle</a></li>\n<li><a href=\"https://hestia.earth/schema/Transformation\">Transformation</a></li>\n<li><a href=\"https://hestia.earth/schema/Transport\">Transport</a></li>\n</ul></div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>typesAllowed</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|
package/dist/content/models/cycleEmissions/inputs/cycle-inputs-background-emissions/freeflow.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"tags":{"author":["Joseph Poore","Guillaume Royer"],"group":["Cycle: Emissions"],"subgroup":["Inputs"],"modelId":["cycle-inputs-background-emissions","default_emissions"],"tab":["Free flow"]},"content":"# Background Emissions\n\
|
|
1
|
+
{"tags":{"author":["Joseph Poore","Guillaume Royer"],"group":["Cycle: Emissions"],"subgroup":["Inputs"],"modelId":["cycle-inputs-background-emissions","default_emissions"],"tab":["Free flow"]},"content":"# Background Emissions\n\nThis model will add emissions with `0` value on Inputs where:\n- The input is manure and some other organic fertilisers, because they are considered free flows in LCA.\n- The input value is `0`.\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/hestia\">hestia</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#inputs\">inputs</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a> with <code>background</code></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>a list of <a href=\"https://hestia.earth/schema/Cycle#inputs\">inputs</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Input#value\">value</a> <code>>= 0</code> and none of:<ul>\n<li>a <a href=\"https://hestia.earth/schema/Input#impactAssessment\">impactAssessment</a></li>\n<li><a href=\"https://hestia.earth/schema/Input#fromCycle\">fromCycle</a> with <code>True</code></li>\n<li><a href=\"https://hestia.earth/schema/Input#producedInCycle\">producedInCycle</a> with <code>True</code></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>inHestiaDefaultSystemBoundary</code></li>\n<li><a href=\"https://hestia.earth/glossary/lookups/organicFertiliser.csv\">organicFertiliser.csv</a> -> <code>backgroundEmissionsResourceUseDefaultValue</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|
package/dist/content/models/cycleEmissions/inputs/cycle-inputs-background-emissions/worldsteel.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"tags":{"author":["Lloyd Ashby"],"contributor":["Guillaume Royer"],"group":["Cycle: Emissions"],"subgroup":["Inputs"],"modelId":["cycle-inputs-background-emissions","cycle"],"tab":["World steel"]},"content":"# Background Emissions\n\nThis model calculates background environmental impact data related to the production of steel products from the [World steel 2022 database](https://nexus.openlca.org/database/worldsteel)\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/worldSteel\">worldSteel</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#term\">term</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a> with <code>background</code></li>\n<li><a href=\"https://hestia.earth/schema/Emission#inputs\">inputs</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#operation\">operation</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#animals\">animals</a></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>a list of <a href=\"https://hestia.earth/schema/Cycle#inputs\">inputs</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Input#value\">value</a> <code>> 0</code> and none of:<ul>\n<li><a href=\"https://hestia.earth/schema/Input#fromCycle\">fromCycle</a> with <code>True</code></li>\n<li><a href=\"https://hestia.earth/schema/Input#producedInCycle\">producedInCycle</a> with <code>True</code> and <a href=\"https://hestia.earth/schema/Input#term\">term</a> of <a href=\"https://hestia.earth/schema/Term#termType\">termType</a> = <a href=\"https://hestia.earth/glossary?termType=material\">material</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/worldSteel-emission.csv\">worldSteel-emission.csv</a> -> <code>emission-</code></li>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>inputProductionGroupId</code></li>\n<li><a href=\"https://hestia.earth/glossary/lookups/material.csv\">material.csv</a> -> <code>worldsteelMapping</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Above ground biomass modelling on HESTIA."]},"content":"# CO2, to air, above ground biomass stock change\n\nCarbon dioxide emissions to air, from above ground biomass stock change. Above ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from above ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirAboveGroundBiomassStockChangeLandUseChange`](/term/co2ToAirAboveGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirAboveGroundBiomassStockChangeManagementChange`](/term/co2ToAirAboveGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of above ground biomass measurements\n\nAn annual inventory of `aboveGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the above ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Above ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `aboveGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.aboveGroundBiomass`](./aboveGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to above ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping cycles\n\n[Measurements](/schema/Measurement), such as `aboveGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirAboveGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirAboveGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the above ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without above-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no above-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n"}
|
|
1
|
+
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Above ground biomass modelling on HESTIA."]},"content":"# CO2, to air, above ground biomass stock change\n\nCarbon dioxide emissions to air, from above ground biomass stock change. Above ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from above ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirAboveGroundBiomassStockChangeLandUseChange`](/term/co2ToAirAboveGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirAboveGroundBiomassStockChangeManagementChange`](/term/co2ToAirAboveGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/models-applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of above ground biomass measurements\n\nAn annual inventory of `aboveGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the above ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Above ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `aboveGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.aboveGroundBiomass`](./aboveGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to above ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping cycles\n\n[Measurements](/schema/Measurement), such as `aboveGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirAboveGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirAboveGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the above ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without above-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no above-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Above ground biomass modelling on HESTIA."],"modelId":["co2ToAirAboveGroundBiomassStockChangeLandUseChange","co2ToAirAboveGroundBiomassStockChangeManagementChange"],"modelRequires":["aboveGroundBiomass"]},"content":"# CO2, to air, above ground biomass stock change\n\nCarbon dioxide emissions to air, from above ground biomass stock change. Above ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from above ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirAboveGroundBiomassStockChangeLandUseChange`](/term/co2ToAirAboveGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirAboveGroundBiomassStockChangeManagementChange`](/term/co2ToAirAboveGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of above ground biomass measurements\n\nAn annual inventory of `aboveGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the above ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Above ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `aboveGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.aboveGroundBiomass`](./aboveGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to above ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping cycles\n\n[Measurements](/schema/Measurement), such as `aboveGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirAboveGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirAboveGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the above ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without above-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no above-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/co2ToAirAboveGroundBiomassStockChangeLandUseChange\">co2ToAirAboveGroundBiomassStockChangeLandUseChange</a> <strong>or</strong> <a href=\"https://hestia.earth/term/co2ToAirAboveGroundBiomassStockChangeManagementChange\">co2ToAirAboveGroundBiomassStockChangeManagementChange</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/ipcc2019\">ipcc2019</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#sd\">sd</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#min\">min</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#max\">max</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#statsDefinition\">statsDefinition</a> with <code>simulated</code></li>\n<li><a href=\"https://hestia.earth/schema/Emission#observations\">observations</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>a <a href=\"https://hestia.earth/schema/Cycle#site\">site</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Site#siteType\">siteType</a> with <code>forest</code> <strong>or</strong> <code>other natural vegetation</code> <strong>or</strong> <code>cropland</code> <strong>or</strong> <code>glass or high accessible cover</code> <strong>or</strong> <code>permanent pasture</code> and a list of <a href=\"https://hestia.earth/schema/Site#measurements\">measurements</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Measurement#value\">value</a> and <a href=\"https://hestia.earth/schema/Measurement#dates\">dates</a> and <a href=\"https://hestia.earth/schema/Measurement#depthUpper\">depthUpper</a> with <code>0</code> and <a href=\"https://hestia.earth/schema/Measurement#depthLower\">depthLower</a> with <code>30</code> and <a href=\"https://hestia.earth/schema/Measurement#term\">term</a> with <a href=\"https://hestia.earth/term/aboveGroundBiomass\">aboveGroundBiomass</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"https://hestia.earth/schema/Cycle#functionalUnit\">functionalUnit</a> with <code>1 ha</code></li>\n<li><a href=\"https://hestia.earth/schema/Cycle#endDate\">endDate</a></li>\n<li>optional:<ul>\n<li><a href=\"https://hestia.earth/schema/Cycle#startDate\">startDate</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>siteTypesAllowed</code>; <code>typesAllowed</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|
|
1
|
+
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Above ground biomass modelling on HESTIA."],"modelId":["co2ToAirAboveGroundBiomassStockChangeLandUseChange","co2ToAirAboveGroundBiomassStockChangeManagementChange"],"modelRequires":["aboveGroundBiomass"]},"content":"# CO2, to air, above ground biomass stock change\n\nCarbon dioxide emissions to air, from above ground biomass stock change. Above ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from above ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirAboveGroundBiomassStockChangeLandUseChange`](/term/co2ToAirAboveGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirAboveGroundBiomassStockChangeManagementChange`](/term/co2ToAirAboveGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/models-applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of above ground biomass measurements\n\nAn annual inventory of `aboveGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the above ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Above ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `aboveGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.aboveGroundBiomass`](./aboveGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to above ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping cycles\n\n[Measurements](/schema/Measurement), such as `aboveGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirAboveGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirAboveGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the above ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"aboveGroundBiomass\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirAboveGroundBiomassStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without above-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no above-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirAboveGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirAboveGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/co2ToAirAboveGroundBiomassStockChangeLandUseChange\">co2ToAirAboveGroundBiomassStockChangeLandUseChange</a> <strong>or</strong> <a href=\"https://hestia.earth/term/co2ToAirAboveGroundBiomassStockChangeManagementChange\">co2ToAirAboveGroundBiomassStockChangeManagementChange</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/ipcc2019\">ipcc2019</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#sd\">sd</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#min\">min</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#max\">max</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#statsDefinition\">statsDefinition</a> with <code>simulated</code></li>\n<li><a href=\"https://hestia.earth/schema/Emission#observations\">observations</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>a <a href=\"https://hestia.earth/schema/Cycle#site\">site</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Site#siteType\">siteType</a> with <code>forest</code> <strong>or</strong> <code>other natural vegetation</code> <strong>or</strong> <code>cropland</code> <strong>or</strong> <code>glass or high accessible cover</code> <strong>or</strong> <code>permanent pasture</code> and a list of <a href=\"https://hestia.earth/schema/Site#measurements\">measurements</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Measurement#value\">value</a> and <a href=\"https://hestia.earth/schema/Measurement#dates\">dates</a> and <a href=\"https://hestia.earth/schema/Measurement#depthUpper\">depthUpper</a> with <code>0</code> and <a href=\"https://hestia.earth/schema/Measurement#depthLower\">depthLower</a> with <code>30</code> and <a href=\"https://hestia.earth/schema/Measurement#term\">term</a> with <a href=\"https://hestia.earth/term/aboveGroundBiomass\">aboveGroundBiomass</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"https://hestia.earth/schema/Cycle#functionalUnit\">functionalUnit</a> with <code>1 ha</code></li>\n<li><a href=\"https://hestia.earth/schema/Cycle#endDate\">endDate</a></li>\n<li>optional:<ul>\n<li><a href=\"https://hestia.earth/schema/Cycle#startDate\">startDate</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>siteTypesAllowed</code>; <code>typesAllowed</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Below ground biomass modelling on HESTIA."]},"content":"# CO2, to air, below ground biomass stock change\n\nCarbon dioxide emissions to air, from below ground biomass stock change. Below ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from below ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirBelowGroundBiomassStockChangeLandUseChange`](/term/co2ToAirBelowGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirBelowGroundBiomassStockChangeManagementChange`](/term/co2ToAirBelowGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of below ground biomass measurements\n\nAn annual inventory of `belowGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the below ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately, and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Below ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `belowGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.belowGroundBiomass`](./belowGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to below ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping Cycles\n\n[Measurements](/schema/Measurement), such as `belowGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirBelowGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirBelowGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the below ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without below-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no below-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n"}
|
|
1
|
+
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Below ground biomass modelling on HESTIA."]},"content":"# CO2, to air, below ground biomass stock change\n\nCarbon dioxide emissions to air, from below ground biomass stock change. Below ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from below ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirBelowGroundBiomassStockChangeLandUseChange`](/term/co2ToAirBelowGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirBelowGroundBiomassStockChangeManagementChange`](/term/co2ToAirBelowGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/models-applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of below ground biomass measurements\n\nAn annual inventory of `belowGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the below ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately, and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Below ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `belowGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.belowGroundBiomass`](./belowGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to below ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping Cycles\n\n[Measurements](/schema/Measurement), such as `belowGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirBelowGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirBelowGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the below ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without below-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no below-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Below ground biomass modelling on HESTIA."],"modelId":["co2ToAirBelowGroundBiomassStockChangeLandUseChange","co2ToAirBelowGroundBiomassStockChangeManagementChange"],"modelRequires":["belowGroundBiomass"]},"content":"# CO2, to air, below ground biomass stock change\n\nCarbon dioxide emissions to air, from below ground biomass stock change. Below ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from below ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirBelowGroundBiomassStockChangeLandUseChange`](/term/co2ToAirBelowGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirBelowGroundBiomassStockChangeManagementChange`](/term/co2ToAirBelowGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of below ground biomass measurements\n\nAn annual inventory of `belowGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the below ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately, and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Below ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `belowGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.belowGroundBiomass`](./belowGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to below ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping Cycles\n\n[Measurements](/schema/Measurement), such as `belowGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirBelowGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirBelowGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the below ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without below-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no below-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/co2ToAirBelowGroundBiomassStockChangeLandUseChange\">co2ToAirBelowGroundBiomassStockChangeLandUseChange</a> <strong>or</strong> <a href=\"https://hestia.earth/term/co2ToAirBelowGroundBiomassStockChangeManagementChange\">co2ToAirBelowGroundBiomassStockChangeManagementChange</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/ipcc2019\">ipcc2019</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#sd\">sd</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#min\">min</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#max\">max</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#statsDefinition\">statsDefinition</a> with <code>simulated</code></li>\n<li><a href=\"https://hestia.earth/schema/Emission#observations\">observations</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#depth\">depth</a> with <code>30</code></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>a <a href=\"https://hestia.earth/schema/Cycle#site\">site</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Site#siteType\">siteType</a> with <code>forest</code> <strong>or</strong> <code>other natural vegetation</code> <strong>or</strong> <code>cropland</code> <strong>or</strong> <code>glass or high accessible cover</code> <strong>or</strong> <code>permanent pasture</code> and a list of <a href=\"https://hestia.earth/schema/Site#measurements\">measurements</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Measurement#value\">value</a> and <a href=\"https://hestia.earth/schema/Measurement#dates\">dates</a> and <a href=\"https://hestia.earth/schema/Measurement#depthUpper\">depthUpper</a> with <code>0</code> and <a href=\"https://hestia.earth/schema/Measurement#depthLower\">depthLower</a> with <code>30</code> and <a href=\"https://hestia.earth/schema/Measurement#term\">term</a> with <a href=\"https://hestia.earth/term/belowGroundBiomass\">belowGroundBiomass</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"https://hestia.earth/schema/Cycle#functionalUnit\">functionalUnit</a> with <code>1 ha</code></li>\n<li><a href=\"https://hestia.earth/schema/Cycle#endDate\">endDate</a></li>\n<li>optional:<ul>\n<li><a href=\"https://hestia.earth/schema/Cycle#startDate\">startDate</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>siteTypesAllowed</code>; <code>typesAllowed</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|
|
1
|
+
{"tags":{"author":["Florian Payen"],"group":["Cycle: Emissions"],"subgroup":["Land Use Change"],"tab":["IPCC (2019)"],"citation":["Payen, F. (2025) Below ground biomass modelling on HESTIA."],"modelId":["co2ToAirBelowGroundBiomassStockChangeLandUseChange","co2ToAirBelowGroundBiomassStockChangeManagementChange"],"modelRequires":["belowGroundBiomass"]},"content":"# CO2, to air, below ground biomass stock change\n\nCarbon dioxide emissions to air, from below ground biomass stock change. Below ground biomass is defined as terrestrial living woody or herbaceous vegetation 2 mm in size or greater.\n\n## Overview\n\nThis model calculates the annual emissions from below ground biomass stock changes and assigns them to [Cycles](/schema/Cycle) that take place during those years. It can allocate these emissions to two HESTIA terms:\n\n1. [`co2ToAirBelowGroundBiomassStockChangeLandUseChange`](/term/co2ToAirBelowGroundBiomassStockChangeLandUseChange) - stock change emissions that occur in the 20 years after a land-use change event\n2. [`co2ToAirBelowGroundBiomassStockChangeManagementChange`](/term/co2ToAirBelowGroundBiomassStockChangeManagementChange) - stock change emissions that occur more than 20 years after a land-use change event\n\nThe model is run as a Monte Carlo simulation with 10,000 iterations. Model result values are the row-wise `mean` of simulation results. See our guide on [Monte Carlo simulation](/guide/models-applying-models-monte-carlo) for more information.\n\n## How the model works\n\n### Step 1. Build an annual inventory of below ground biomass measurements\n\nAn annual inventory of `belowGroundBiomass` [Measurement](/schema/Measurement) values is created. These values represent the amount of organic carbon stored in the below ground biomass at the **end of each inventory year**.\n\n[Measurements](/schema/Measurement) are grouped by `methodClassification`. It is critical that different methods are **never mixed** when calculating changes in carbon stock, as this could lead to large and misleading differences. Instead, the model processes each `methodClassification` separately, and includes only the emissions calculated using the **strongest available method** in the final output.\n\nOnly [Measurements](/schema/Measurement) with specific `methodClassification` values are included. All others are ignored. The valid classifications, listed from strongest to weakest, are:\n\n- `on-site physical measurement`\n- `modelled using other measurements`\n- `tier 3 model`\n- `tier 2 model`\n- `tier 1 model`\n\nEach carbon stock value must correspond to the timestamp `YYYY-12-31T23:59:59` — the end of the inventory year. If no [Measurement](/schema/Measurement) exists for this exact time, the value is estimated using linear interpolation between the closest available measurements before and after the target date.\n\n| Year | `on-site physical measurement`<sup>\\*</sup> | `tier 1 model`<sup>\\*</sup> |\n| ---- | ------------------------------------------- | --------------------------- |\n| 2002 | 48000 | - |\n| 2003 | 47000 | - |\n| 2004 | 45000 | 52350 |\n| 2005 | 44500 | 51125 |\n| 2006 | 44000 | 49900 |\n| 2007 | 43500 | - |\n\n<sup>\\*</sup>Below ground biomass stock (kg C ha<sup>-1</sup>)\n\nIn this scenario, the values of the `on-site physical measurement` column will be retained because it is the stronger `methodClassification`. The values of the `tier 1 model` will be discarded.\n\n### Step 2. Resample stock values for Monte Carlo simulation\n\nTo run the model as a Monte Carlo simulation, we need to generate an array of random samples for the `belowGroundBiomass` stock in each inventory year. These samples are drawn from a normal distribution defined by the `value` (mean) and `sd` of each year.\n\nIdeally, we would re-use the full set of iteration results from the [`ipcc2019.belowGroundBiomass`](./belowGroundBiomass) model's Monto Carlo simulation. However, HESTIA nodes can only store row-wise summaries of Monte Carlo simulation results. This means the full iteration-level data is not available for use in downstream models, so we lose the correlation between years in each simulation run.\n\nTo maintain realistic, coherent simulation behaviour:\n\n- Within each simulation run (column): Values across years (rows) should be correlated. If year 0 is a high value, we expect subsequent years to also be relatively high\n- Across simulation runs (columns): Values should be independent from one another\n\nFor this, we need to generate our new random samples with correlation by treating the inventory as a time series, where:\n\n- Rows = time steps (years)\n- Columns = independent Monte Carlo runs\n\nTo model the correlation between years, we assume that similarity in stock values decreases with time. Closer years are more correlated than years further apart. This is modelled using exponential decay, with a half-life of 20 years (based on the IPCC's default transition period for carbon stock equilibrium).\n\nUsing this correlation structure, we generate samples from a multivariate normal distribution, ensuring temporal correlation within runs and independence between runs.\n\nSee the Scipy Cookbook on [Correlated Random Samples](https://scipy-cookbook.readthedocs.io/items/CorrelatedRandomSamples.html) for more information.\n\nCarbon stock values without a corresponding `sd` are given a nominal error of 75% ($2*{sd}$ as a percentage of the mean).\n\n### Step 3. Calculate the annual CO<sub>2</sub> emission (or removal) due to below ground biomass stock change\n\nNext, the carbon stock change and the associated CO<sub>2</sub> change can be calculated for each inventory year:\n\n$\\Delta CO_2 = -1 * (C_y - C\\_{y-1}) * \\frac{44.01}{12.012}$\n\nWhere:\n\n- $\\Delta CO_2$ = the CO<sub>2</sub> emission due to carbon stock change for year $y$, kg CO<sub>2</sub> ha<sup>-1</sup>.\n- $C_y$ = the carbon stock in year $y$, kg C ha<sup>-1</sup>.\n- $C_{y-1}$ = the carbon stock in year $y-1$x, kg C ha<sup>-1</sup>.\n- $\\frac{44.01}{12.012}$ = the ratio of the atomic mass of CO<sub>$2$</sub> to C.\n\n_n.b._, the value is multiplied by $-1$ as a reduction in carbon stock is associated with an emission of CO<sub>2</sub> and vice versa.\n\n| Year | C stock (kg C ha<sup>-1</sup>) | C stock change (kg C ha<sup>-1</sup>) | CO<sub>2</sub> emission (kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---- | ------------------------------ | ------------------------------------- | ----------------------------------------------------------- |\n| 2002 | 48000 | n/a | n/a |\n| 2003 | 47000 | -1000 | 3664 |\n| 2004 | 45000 | -2000 | 7328 |\n| 2005 | 44500 | -500 | 1832 |\n| 2006 | 44000 | -500 | 1832 |\n| 2007 | 43500 | -500 | 1832 |\n\n### Step 4. Allocate the CO<sub>2</sub> emission to overlapping Cycles\n\n[Measurements](/schema/Measurement), such as `belowGroundBiomass`, are attached to [Site](/schema/Site) nodes. In the HESTIA schema, a single [Site](/schema/Site) can be linked to multiple [Cycle](/schema/Cycle) nodes. However, emission models are run **per [Cycle](/schema/Cycle)**.\n\nTo ensure emissions are correctly allocated, the `ipcc2019.co2ToAirBelowGroundBiomassStockChange` model gathers data from all [Cycles](/schema/Cycle) associated with the same [Site](/schema/Site).\n\nEmissions from changes in carbon stock should only be assigned to a [Cycle](/schema/Cycle) if that Cycle meaningfully overlaps with the inventory year in which the stock change occurred.\n\nIf multiple [Cycles](/schema/Cycle) overlap the same inventory year, the emission for that year is **shared proportionally** based on the number of overlapping days. For example:\n\n- `cycle-y` overlaps by 200 days\n- `cycle-z` overlaps by 100 days\n\nThen:\n\n- `cycle-y` receives **66.6%** of the emission\n- `cycle-z` receives **33.3%**\n\n_n.b._, The total share of emissions across all overlapping [Cycles](/schema/Cycle) **must always sum to 100%** to avoid under- or over-reporting.\n\n#### Emissions across multiple years\n\nIf a [Cycle](/schema/Cycle) overlaps with **multiple inventory years**, it should be assigned the **sum of its proportional shares** from each of those years.\n\n<div class=\"table-container is-responsive\">\n <table class=\"table is-fullwidth is-hoverable is-striped\">\n <tr>\n <th>Year</th>\n <th>\n Total emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n <th>Cycle ID</th>\n <th>Share of emission (%)</th>\n <th>\n Cycle emission(kg CO<sub>2</sub> ha<sup>-1</sup>)\n </th>\n </tr>\n <tr>\n <td>2003</td>\n <td>3664</td>\n <td>\n cycle-a0\n </td>\n <td>100</td>\n <td>3664</td>\n </tr>\n <tr>\n <td rowspan=\"2\">2004</td>\n <td rowspan=\"2\">7328</td>\n <td>\n cycle-a1\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>\n cycle-a2\n </td>\n <td>50</td>\n <td>3664</td>\n </tr>\n <tr>\n <td>2005</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2006</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n <tr>\n <td>2007</td>\n <td>1832</td>\n <td>\n cycle-a3\n </td>\n <td>100</td>\n <td>1832</td>\n </tr>\n </table>\n</div>\n\n| Cycle ID | `co2ToAirBelowGroundBiomassStockChangeManagementChange`(kg CO<sub>2</sub> ha<sup>-1</sup>) |\n| ---------- | ------------------------------------------------------------------------------------------ |\n| `cycle-a0` | 3664 |\n| `cycle-a1` | 3664 |\n| `cycle-a2` | 3664 |\n| `cycle-a3` | 5496 |\n\n### Step 5. Assign an emission tier\n\nThe `methodTier` assigned to the emission node on each [Cycle](/schema/Cycle) reflects the **weakest** measurement method used in its calculation.\n\nFor example, if a [Cycle](/schema/Cycle)'s final emission is calculated by summing together the emissions of two inventory years, where:\n\n- One year uses [Measurements](/schema/Measurement) with `methodClassification = tier 1 model`\n- The other year uses `methodClassification = tier 2 model`\n\nThe resulting `methodTier` will be `tier 1`, since it is the **weakest** method involved.\n\nThe mapping between Measurement `methodClassification` and Emission `methodTier` is:\n\n| Measurement `methodClassification` | Emission `methodTier` |\n| ----------------------------------- | --------------------- |\n| `on-site physical measurement` | `measured` |\n| `modelled using other measurements` | `measured` |\n| `tier 3 model` | `tier 3` |\n| `tier 2 model` | `tier 2` |\n| `tier 1 model` | `tier 1` |\n\n### Step 6. Allocate the CO<sub>2</sub> emission to land-use change or management change\n\nIn line with reporting requirements, CO<sub>2</sub> emissions from stock changes must be classified as either:\n\n- due to land-use change (LUC), or\n- due to management change.\n\nIn HESTIA, the presence or absence of a blank node matters: returning no node is not the same as returning a node with 0 emissions. To ensure consistency, the model should always return two blank nodes (one for each category) if enough data is available.\n\n**Allocation rules**\n\nIf it is known whether the emission is due to LUC or management:\n\n- Return two blank nodes:\n 1. One node with the emission and the correct term.@id\n 2. One node with 0 emissions and the other term.@id\n\nIf it is unknown:\n\n- Return one blank node, allocating the full emission to management change\n\n**Decision criteria**\n\nAllocation is based on two factors:\n\n1. **Completeness of land-use data:**\n\n - No land-use data\n - Fewer than 20 years of data\n - At least 20 years of data\n\n2. **Presence of a land-use change event:**\n - No land-use change (LUC) event detected\n - LUC event detected\n\n| | No land use data (1) | < 20 years' land use data (2) | >= 20 years' land use data (3) |\n| ----------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |\n| **No LUC event detected (a)** | allocate all emissions to management change (a1) | allocate all emissions to management change (a2) | allocate all emissions to management change **AND** add a land use change emission with value 0 (a3) |\n| **LUC event detected (b)** | n/a (b1) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b2) | allocate all emissions to land use change **AND** add a management change emission with value 0 (b3) |\n\n## Example\n\nIn this example, we follow the below ground biomass stock of an olive orchard, which has not changed in land use for over 50 years. Therefore, all emissions should be allocated to management changes and a corresponding `0` emission should be allocated to land-use change.\n\nFor simplicity, the uncertainty of model inputs and outputs have been excluded.\n\n### Input\n\n#### Site\n\n```json\n{\n \"@id\": \"site-a\",\n \"@type\": \"Site\",\n \"siteType\": \"cropland\",\n \"management\": [\n {\n \"@type\": \"Management\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"oliveTree\"\n },\n \"value\": [100],\n \"startDate\": \"1960\",\n \"endDate\": \"2006\"\n }\n ],\n \"measurements\": [\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [43000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2003-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [44333.333],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2004-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [45666.666],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2005-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n },\n {\n \"@type\": \"Measurement\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"organicCarbonPerHa\"\n },\n \"value\": [47000],\n \"method\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depthUpper\": 0,\n \"depthLower\": 30,\n \"dates\": [\"2006-12-31\"],\n \"methodClassification\": \"tier 1 model\"\n }\n ]\n}\n```\n\n#### Cycle\n\n```json\n{\n \"@id\": \"cycle-a-04-06\",\n \"@type\": \"Cycle\",\n \"startDate\": \"2004\",\n \"endDate\": \"2006\",\n \"site\": {\n \"@id\": \"site-a\",\n \"@type\": \"Site\"\n },\n \"functionalUnit\": \"1 ha\"\n}\n```\n\n### Output\n\n```json\n[\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeLandUseChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [0],\n \"methodTier\": \"tier 1\"\n },\n {\n \"@type\": \"Emission\",\n \"term\": {\n \"@type\": \"Term\",\n \"@id\": \"co2ToAirSoilCarbonStockChangeManagementChange\"\n },\n \"methodModel\": {\n \"@type\": \"Term\",\n \"@id\": \"ipcc2019\"\n },\n \"depth\": 30,\n \"value\": [-14655.344655],\n \"methodTier\": \"tier 1\"\n }\n]\n```\n\n## Cases in which the model can run without below-ground biomass Measurements\n\nBecause emissions are allocated to either land-use change or management change (depending on whether a land-use change has been detected in the Site's `landCover` history), in some cases it is possible for this model to return partial results when there are no below-ground biomass Measurements.\n\nIf a land-use change is detected during the 20 years prior to a Cycle, all emissions should be allocated to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`). Therefore, we can allocate `0` emissions to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`) even whem we can't calculate a value for the land-use change emission. To be certain that a land-use change has occurred, we require up to 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nThe inverse is also true for when a land-use change is **not** detected in the 20 years prior to a Cycle. In this case, all emissions should be allocated to the management change emission term (`co2ToAirBelowGroundBiomassStockChangeManagementChange`). Therefore, we can allocate `0` emissions to the land-use change emission term (`co2ToAirBelowGroundBiomassStockChangeLandUseChange`) even when we can't calculate a value for the management change emission. To be certain that a land-use change has **not** occurred, we require a minimum of 20 year's `landCover` data prior to the Cycle's `startDate`.\n\nIf there is insufficient `landCover` data to determine whether a land-use change has occurred, the model will be unable to return partial results.\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"collapsibles\">\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Returns</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A list of <a href=\"https://hestia.earth/schema/Emission\">Emissions</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Emission#term\">term</a> with <a href=\"https://hestia.earth/term/co2ToAirBelowGroundBiomassStockChangeLandUseChange\">co2ToAirBelowGroundBiomassStockChangeLandUseChange</a> <strong>or</strong> <a href=\"https://hestia.earth/term/co2ToAirBelowGroundBiomassStockChangeManagementChange\">co2ToAirBelowGroundBiomassStockChangeManagementChange</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodModel\">methodModel</a> with <a href=\"https://hestia.earth/term/ipcc2019\">ipcc2019</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#value\">value</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#sd\">sd</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#min\">min</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#max\">max</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#statsDefinition\">statsDefinition</a> with <code>simulated</code></li>\n<li><a href=\"https://hestia.earth/schema/Emission#observations\">observations</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#methodTier\">methodTier</a></li>\n<li><a href=\"https://hestia.earth/schema/Emission#depth\">depth</a> with <code>30</code></li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Requirements</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li>A <a href=\"https://hestia.earth/schema/Cycle\">Cycle</a> with:<ul>\n<li>a <a href=\"https://hestia.earth/schema/Cycle#site\">site</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Site#siteType\">siteType</a> with <code>forest</code> <strong>or</strong> <code>other natural vegetation</code> <strong>or</strong> <code>cropland</code> <strong>or</strong> <code>glass or high accessible cover</code> <strong>or</strong> <code>permanent pasture</code> and a list of <a href=\"https://hestia.earth/schema/Site#measurements\">measurements</a> with:<ul>\n<li><a href=\"https://hestia.earth/schema/Measurement#value\">value</a> and <a href=\"https://hestia.earth/schema/Measurement#dates\">dates</a> and <a href=\"https://hestia.earth/schema/Measurement#depthUpper\">depthUpper</a> with <code>0</code> and <a href=\"https://hestia.earth/schema/Measurement#depthLower\">depthLower</a> with <code>30</code> and <a href=\"https://hestia.earth/schema/Measurement#term\">term</a> with <a href=\"https://hestia.earth/term/belowGroundBiomass\">belowGroundBiomass</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"https://hestia.earth/schema/Cycle#functionalUnit\">functionalUnit</a> with <code>1 ha</code></li>\n<li><a href=\"https://hestia.earth/schema/Cycle#endDate\">endDate</a></li>\n<li>optional:<ul>\n<li><a href=\"https://hestia.earth/schema/Cycle#startDate\">startDate</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n </div>\n <div class=\"collapsible-group\">\n <div class=\"collapsible-header\">\n <span>Lookups used</span>\n </div>\n <div class=\"collapsible-content\"><ul>\n<li><a href=\"https://hestia.earth/glossary/lookups/emission.csv\">emission.csv</a> -> <code>siteTypesAllowed</code>; <code>typesAllowed</code></li>\n</ul>\n</div>\n </div>\n \n</div>"}
|