Skip to main content

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

PropertyDescription
Runs onActivityNode types including FoodProcessingActivityNode, ModeledActivityNode, SupplySheetActivityNode
DependenciesMatrixCalculationGapFillingWorker (must complete first)
Key InputEnvironmental flows (biosphere exchanges) from matrix calculation
OutputImpact assessment values (CO2 equivalents), scarce water consumption
TriggerRuns on activity nodes after environmental flows are computed

When It Runs

The module triggers when:

  1. The node is an ActivityNode (not an ElementaryResourceEmissionNode)
  2. The MatrixCalculationGapFillingWorker has completed and populated environmental_flows
  3. For root nodes, only runs on FoodProcessingActivityNode, ModeledActivityNode, or SupplySheetActivityNode

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:

  1. Collecting environmental flows from the matrix calculation (emissions to air, water, soil, and resource consumption)
  2. Applying characterization factors to convert each flow to a common unit (such as kg CO2-eq)
  3. 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):

SubstanceGWP100 (kg CO2-eq/kg)Notes
Carbon dioxide (CO2)1Reference substance
Methane (CH4)28Without climate-carbon feedback
Methane (CH4)34With 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 CategoryMethodUnitDescription
Climate ChangeIPCC 2013 GWP100akg CO2-eqGlobal warming potential over 100 years
Water ScarcityAWARELScarce 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 factors
  • biosphere_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:

  1. Water consumption is identified by a specific biosphere UID (SCARCE_WATER_CONSUMPTION_XID)
  2. Extracted from the environmental flows before general impact calculation
  3. Stored as a dedicated ScarceWaterProp on activity and flow nodes
  4. 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 TypeExamplesDirection
Emissions to airCO2, CH4, N2O, CO, NOxOutput (positive)
Emissions to waterNitrogen, PhosphorusOutput (positive)
Emissions to soilHeavy metals, PesticidesOutput (positive)
Resource consumptionCrude oil, Natural gas, WaterInput (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 FlowUUIDAmount (kg)
Carbon dioxide, fossil099b36ab-...0.85
Methane, fossilb53d3744-...0.012
Nitrous oxide20185046-...0.0003

Step 2: Apply Characterization Factors

Using IPCC 2013 GWP100a factors:

FlowAmountCFImpact
CO20.85 kg1.00.85 kg CO2-eq
CH40.012 kg28.00.336 kg CO2-eq
N2O0.0003 kg265.00.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:

  1. Builds the technosphere matrix: Representing all process interconnections
  2. Builds the biosphere matrix: Capturing all environmental exchanges
  3. Solves the system: Using matrix inversion to calculate cumulative flows
  4. 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

  1. 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.

  2. Heijungs, R. & Suh, S. (2002). The Computational Structure of Life Cycle Assessment. Springer Netherlands.

  3. Ecoinvent Centre. Database Overview for Ecoinvent v3.8. ecoinvent.org

  4. PRe Sustainability. SimaPro Implementation Notes on IPCC AR5 Methods.

  5. Brightway LCA. brightway.dev - Open source LCA framework used for matrix calculations.