Impact Assessment GFM
The Impact Assessment Gap Filling Module performs Life Cycle Impact Assessment (LCIA) by converting environmental flows (emissions and resource consumption) into standardized impact scores. Using IPCC characterization factors, it calculates CO2 equivalents and other environmental indicators for food products throughout their lifecycle.
Quick Reference
| Property | Description |
|---|---|
| Runs on | ActivityNode types including FoodProcessingActivityNode, ModeledActivityNode, SupplySheetActivityNode |
| Dependencies | MatrixCalculationGapFillingWorker (must complete first) |
| Key Input | Environmental flows (biosphere exchanges) from matrix calculation |
| Output | Impact assessment values (CO2 equivalents), scarce water consumption |
| Trigger | Runs on activity nodes after environmental flows are computed |
When It Runs
The module triggers when:
- The node is an
ActivityNode(not anElementaryResourceEmissionNode) - The
MatrixCalculationGapFillingWorkerhas completed and populatedenvironmental_flows - For root nodes, only runs on
FoodProcessingActivityNode,ModeledActivityNode, orSupplySheetActivityNode
Key Output
The module adds impact assessment properties to both activity nodes and their parent flow nodes:
- Impact Assessment: CO2 equivalent values using requested characterization methods
- Scarce Water Consumption: Water scarcity footprint in liters
Scientific Methodology
Life Cycle Impact Assessment Overview
Life Cycle Impact Assessment (LCIA) is the phase of LCA where the inventory of environmental flows is translated into potential environmental impacts. The Impact Assessment GFM implements this by:
- Collecting environmental flows from the matrix calculation (emissions to air, water, soil, and resource consumption)
- Applying characterization factors to convert each flow to a common unit (such as kg CO2-eq)
- Aggregating results across all flows to produce total impact scores
IPCC Characterization Method
The module uses the IPCC 2013 GWP100a (Global Warming Potential, 100-year time horizon) method as its primary characterization approach:
Impact [kg CO2-eq] = Sum of (Environmental Flow [kg] x Characterization Factor [kg CO2-eq/kg])
Global Warming Potential Factors
Key characterization factors from IPCC Fifth Assessment Report (AR5):
| Substance | GWP100 (kg CO2-eq/kg) | Notes |
|---|---|---|
| Carbon dioxide (CO2) | 1 | Reference substance |
| Methane (CH4) | 28 | Without climate-carbon feedback |
| Methane (CH4) | 34 | With climate-carbon feedback |
| Nitrous oxide (N2O) | 265 | |
| Carbon monoxide (fossil) | 4.06 |
The system uses GWP values without climate-carbon feedback (CCFB) following recommendations from PRe Sustainability and UNEP/SETAC consensus. This choice provides more conservative estimates while maintaining consistency with established LCA databases.
Characterization Factor Sources
Characterization factors are sourced from:
- IPCC Fifth Assessment Report (AR5): Primary source for GWP values
- Ecoinvent database: Mapped to Ecoinvent elementary flow identifiers
- Brightway LCA software: 211 characterized substances for climate change impact
Impact Categories Supported
The module can calculate multiple impact categories based on the request:
| Impact Category | Method | Unit | Description |
|---|---|---|---|
| Climate Change | IPCC 2013 GWP100a | kg CO2-eq | Global warming potential over 100 years |
| Water Scarcity | AWARE | L | Scarce water consumption |
Additional impact assessment methods can be loaded via the --import_all_impact_assessments flag during data import.
Implementation Details
Calculation Formula
The core calculation applies characterization factors to all environmental flows:
impact_assessments = {
char_method: sum([
flow_quantity * characterization_factor.get(biosphere_uid, 0.0)
for biosphere_uid, flow_quantity in environmental_flows.items()
])
for char_method in requested_impact_assessments
}
Where:
flow_quantity: Amount of each environmental flow (from matrix calculation)characterization_factor: Mapping of biosphere flow IDs to impact factorsbiosphere_uid: Unique identifier for each elementary flow (emissions, resources)
Flow Allocation to Parent Nodes
Impact results are allocated to parent flow nodes proportionally:
# For each parent flow node
value = impact_quantity * flow_amount / production_amount
This ensures that when a recipe uses multiple activity nodes, each ingredient's contribution is properly attributed.
Scarce Water Handling
Scarce water consumption is tracked separately from other environmental flows:
- Water consumption is identified by a specific biosphere UID (
SCARCE_WATER_CONSUMPTION_XID) - Extracted from the environmental flows before general impact calculation
- Stored as a dedicated
ScarceWaterPropon activity and flow nodes - Unit: liters (L)
Node Processing Order
The module implements a scheduling system to ensure proper execution order:
def can_run_now(self) -> GapFillingWorkerStatusEnum:
# Wait for matrix calculation to complete
if MatrixCalculationGapFillingWorker is scheduled:
return GapFillingWorkerStatusEnum.reschedule
# Check if environmental flows exist
if node.environmental_flows is None:
return GapFillingWorkerStatusEnum.cancel
return GapFillingWorkerStatusEnum.ready
Data Flow
Input: Environmental Flows
Environmental flows are provided by the MatrixCalculationGapFillingWorker and include:
| Flow Type | Examples | Direction |
|---|---|---|
| Emissions to air | CO2, CH4, N2O, CO, NOx | Output (positive) |
| Emissions to water | Nitrogen, Phosphorus | Output (positive) |
| Emissions to soil | Heavy metals, Pesticides | Output (positive) |
| Resource consumption | Crude oil, Natural gas, Water | Input (negative) |
Output: Impact Assessment Properties
The module creates ImpactAssessmentProp objects with:
ImpactAssessmentProp(
quantities={
impact_term_uid: ReferencelessQuantityProp(
value=calculated_impact,
unit_term_uid=unit_term_uid # e.g., "kg CO2-Eq"
)
},
for_reference=ReferenceAmountEnum.amount_for_activity_production_amount
)
Cache Structure
Characterization factors are loaded at initialization and cached for performance:
cache_characterization_factors_data = {
"ipcc-2013-gwp100a": {
"biosphere_flow_uid_1": {"amount": 1.0}, # CO2
"biosphere_flow_uid_2": {"amount": 28.0}, # CH4
# ... 211 total characterized substances
}
}
cache_characterization_factors_unit = {
"ipcc-2013-gwp100a": "kg_co2-eq_term_uid"
}
Calculation Example
Scenario: Calculate climate impact for 1 kg of tomatoes
Step 1: Environmental Flows from Matrix Calculation
After matrix calculation, the tomato activity node has these environmental flows:
| Biosphere Flow | UUID | Amount (kg) |
|---|---|---|
| Carbon dioxide, fossil | 099b36ab-... | 0.85 |
| Methane, fossil | b53d3744-... | 0.012 |
| Nitrous oxide | 20185046-... | 0.0003 |
Step 2: Apply Characterization Factors
Using IPCC 2013 GWP100a factors:
| Flow | Amount | CF | Impact |
|---|---|---|---|
| CO2 | 0.85 kg | 1.0 | 0.85 kg CO2-eq |
| CH4 | 0.012 kg | 28.0 | 0.336 kg CO2-eq |
| N2O | 0.0003 kg | 265.0 | 0.0795 kg CO2-eq |
Step 3: Aggregate Impact
Total Impact = 0.85 + 0.336 + 0.0795 = 1.2655 kg CO2-eq per kg tomatoes
Step 4: Allocate to Parent Flow
If this tomato activity provides 0.5 kg to a recipe:
Recipe contribution = 1.2655 * (0.5 / 1.0) = 0.633 kg CO2-eq
Configuration
Requesting Impact Assessment Methods
Impact assessment methods are specified in the calculation request:
requested_impact_assessments = calc_graph.get_requested_impact_assessments()
# Returns: ["IPCC 2013 GWP100a", ...]
Default Impact Assessment
If no specific impact assessment terms are configured:
DEFAULT_IMPACT_ASSESSMENT_METHOD = "IPCC 2013 GWP100a"
DEFAULT_IMPACT_ASSESSMENT_METHOD_XID = "ipcc-2013-gwp100a"
Loading Additional Methods
Additional impact assessment methods can be imported using:
python bw_import_controller.py --import_all_impact_assessments
This loads characterization factors for methods beyond climate change, enabling multi-indicator assessments.
Integration with Matrix Calculation
The Impact Assessment GFM depends on the Matrix Calculation GFM, which:
- Builds the technosphere matrix: Representing all process interconnections
- Builds the biosphere matrix: Capturing all environmental exchanges
- Solves the system: Using matrix inversion to calculate cumulative flows
- Populates environmental_flows: The input for impact assessment
Matrix Structure
The technosphere and biosphere matrices follow standard LCA conventions:
Technosphere Matrix (A):
- Diagonal: Production amounts (typically 1.0 for normalized processes)
- Off-diagonal: Inter-process flows (negative for consumption)
Biosphere Matrix (B):
- Rows: Elementary flows (emissions, resources)
- Columns: Processes
- Values: Amount of each flow per unit of process output
Calculation:
s = A^(-1) * f (supply vector)
g = B * s (total environmental flows)
h = C * g (characterized impacts)
Where C is the characterization factor matrix applied by this GFM.
Known Limitations
Substance Coverage
- 211 characterized substances for IPCC GWP100a method
- Some emissions (black carbon, aerosols) not fully characterized
- NOx, SO2, and other aerosol-related emissions may not include indirect climate effects
Methodological Considerations
- Climate-carbon feedbacks not included (conservative approach)
- No regionalized characterization factors
- Static characterization factors (do not account for emission timing)
Data Quality Notes
- Characterization factors from IPCC AR5 (2013) - updates to AR6 not yet implemented
- Some unit mappings assume "kg CO2-Eq" for IPCC methods when unit data is missing
References
-
IPCC (2013). Climate Change 2013: The Physical Science Basis. Contribution of Working Group I to the Fifth Assessment Report. Chapter 8: Anthropogenic and Natural Radiative Forcing, Table 8.A.1.
-
Heijungs, R. & Suh, S. (2002). The Computational Structure of Life Cycle Assessment. Springer Netherlands.
-
Ecoinvent Centre. Database Overview for Ecoinvent v3.8. ecoinvent.org
-
PRe Sustainability. SimaPro Implementation Notes on IPCC AR5 Methods.
-
Brightway LCA. brightway.dev - Open source LCA framework used for matrix calculations.