GFM Rareté de l'eau
Le Gap Filling Module Rareté de l'eau calcule l'empreinte de rareté de l'eau des produits alimentaires en combinant les données de consommation d'eau spécifiques aux produits avec les indices de stress hydrique régionaux. Cette approche tient compte du fait que la consommation d'eau dans les régions en pénurie d'eau a une incidence environnementale plus importante que la même consommation dans les régions où l'eau est abondante.
Référence rapide
| Propriété | Description |
|---|---|
| S'exécute sur | ModeledActivityNode avec FoodProductFlowNode parent contenant un nom de produit |
| Dépendances | OriginGapFillingWorker |
| Entrée clé | Type de produit (terme FoodEx2), pays d'origine |
| Sortie | Flux de consommation d'eau rare en mètres cubes |
| Déclencheur | Produit correspondant à un identifiant d'empreinte de rareté de l'eau |
Conditions d'exécution
Le module se déclenche lorsque :
- Un
ModeledActivityNodea unFoodProductFlowNodeparent avec un nom de produit - Le produit est associé à un identifiant d'empreinte de rareté de l'eau dans le glossaire
- Le module est planifié sur le noeud Brightway de base (à l'origine)
Sortie clé
Le module ajoute un flux de consommation d'eau rare au graphe de calcul :
- Consommation d'eau rare : Mesurée en mètres cubes (m3) par kilogramme de produit
- Connecté à un
ElementaryResourceEmissionNodepour le calcul de l'incidence
Méthodologie scientifique
Le modèle de rareté de l'eau utilise les facteurs d'indice de stress hydrique (WSI) fournis par Scherer et Pfister (2016). Cette méthodologie inclut explicitement le stress hydrique régional comme facteur de pondération pour la consommation d'eau douce, fournissant une mesure plus significative sur le plan environnemental que le volume d'eau brut seul.
Approche de l'indice de stress hydrique
L'empreinte de rareté de l'eau est calculée en utilisant la formule :
Eau rare [L/kg] = Consommation d'eau bleue [L/kg] * Indice de stress hydrique [sans dimension]
Où :
- Consommation d'eau bleue : La quantité d'eau de surface et souterraine consommée pendant la production
- Indice de stress hydrique : Un facteur régional représentant la rareté de l'eau (échelle de 0 à 1)
Stress hydrique régional
Le stress hydrique dépend de :
- La quantité d'eau consommée dans une région par rapport à l'eau naturellement disponible provenant des précipitations
- Des corrections pour l'eau qui est retournée au bassin versant (par exemple, après refroidissement dans la production d'électricité)
La base de données inclut des facteurs de rareté de l'eau différenciés pour 162 pays, permettant des évaluations régionales précises.
Flux de calcul
Quantité de produit [g] -> Conversion en [kg] -> Facteur WSI [L eau rare/kg] -> Eau rare [L]
Le calcul est effectué au niveau le plus bas du graphe et agrégé jusqu'au produit principal.
Détails d'implémentation
Source de données
Les facteurs de rareté de l'eau sont stockés dans EDB_water_expected_wsi_per_kg_country_excel_corrected.xlsx, qui contient :
- Identifiants de produit (WS_ID)
- Facteurs WSI spécifiques par pays pour 162 pays
- Valeurs médianes pour les calculs de repli
Logique de correspondance
Les produits sont associés aux données de rareté de l'eau via :
- Termes FoodEx2 du nom du produit
- Liens de glossaire qui associent les combinaisons de termes aux identifiants de rareté de l'eau
water_scarcity_term_uid = self.gfm_factory.linked_water_scarcity_terms.get(
frozenset([term.uid for term in parent_flow_product_name_terms])
)
Gestion des codes pays
Le module gère les codes pays comme suit :
- Récupère la propriété
flow_locationdu produit ou des noeuds parents - Convertit les codes ISO à 3 lettres en codes à 2 lettres en utilisant
iso_3166_map_3_to_2_letter - Recherche le facteur WSI spécifique au pays
Comportement de repli
| Scénario | Comportement |
|---|---|
| Pas d'origine trouvée | Utilise la médiane de tous les pays disponibles |
| Plusieurs origines trouvées | Utilise la médiane de tous les pays disponibles |
| Origine absente de la table WSI | Utilise la médiane pour ce produit dans tous les pays |
| Produit absent de la table WSI | Rareté de l'eau définie à zéro |
| Produit sans ID WSI | Rareté de l'eau définie à zéro |
Exclusion du transport
Le module ignore les flux liés au transport pour éviter le double comptage :
if product_name_term.sub_class_of == self.gfm_factory.root_transport_term.uid:
transport_term = True
if transport_term:
continue
Gestion des produits séchés
Pour les ingrédients subdivisés en versions fraîches et séchées (via le GFM Perte d'eau) :
- La rareté de l'eau est calculée pour la quantité d'ingrédient frais
- La rareté de l'eau est également calculée pour la quantité d'ingrédient frais correspondant à la version séchée
- Cela tient correctement compte de la plus grande quantité de produit frais nécessaire pour produire des versions séchées
Modifications du graphe
Le module effectue les modifications de graphe suivantes :
Étape 1 : Supprimer l'arête originale
remove_edge_mutation = RemoveEdgeMutation(
from_node_uid=parent_flow.uid,
to_node_uid=self.node.uid,
)
Étape 2 : Créer l'activité de consommation d'eau
water_consumption_activity = FoodProcessingActivityNode.model_construct(
uid=UuidStr(uuid4()),
production_amount=self.node.production_amount.duplicate(),
)
Étape 3 : Rétablir les connexions de flux
Le module crée un nouveau noeud de flux alimentaire entre l'activité de consommation d'eau et le noeud Brightway original.
Étape 4 : Ajouter le flux d'eau rare
scarce_water_consumption_flow = FlowNode.model_construct(
uid=UuidStr(uuid4()),
product_name=NamesProp.unvalidated_construct(
terms=[
GlossaryTermProp.unvalidated_construct(
term_uid=self.gfm_factory.scarce_water_consumption_term.uid
)
]
),
amount_in_original_source_unit=QuantityProp.unvalidated_construct(
# Le signe négatif indique la consommation
value=-production_amount_in_kg * scarce_water_consumption_m3_per_kg,
unit_term_uid=self.gfm_factory.cubic_meter_term.uid,
for_reference=ReferenceAmountEnum.amount_for_activity_production_amount,
),
)
Étape 5 : Connecter au noeud de ressource élémentaire
Le flux d'eau rare est connecté à un ElementaryResourceEmissionNode partagé pour l'évaluation de l'incidence.
Référence complète du code
Logique de planification du worker
def should_be_scheduled(self) -> bool:
"""Indique s'il faut planifier le worker de comblement de la rareté de l'eau."""
if (
isinstance(self.node, ModeledActivityNode)
and self.node.get_parent_nodes()
and any(
isinstance(parent_node, FoodProductFlowNode) and parent_node.product_name
for parent_node in self.node.get_parent_nodes()
)
):
return True
return False
Vérification de disponibilité d'exécution
def can_run_now(self) -> GapFillingWorkerStatusEnum:
"""Indique si le worker de comblement de la rareté de l'eau peut s'exécuter."""
global_gfm_state = self.get_global_gfm_state()
# Attendre la détermination de l'origine
if global_gfm_state.get(OriginGapFillingWorker.__name__, 0) == NodeGfmStateEnum.scheduled.value:
return GapFillingWorkerStatusEnum.reschedule
# Ne s'exécuter que sur le noeud Brightway de base
if any(isinstance(sub_node, FoodProductFlowNode) for sub_node in self.node.get_sub_nodes()):
return GapFillingWorkerStatusEnum.cancel
return GapFillingWorkerStatusEnum.ready
Calcul de la rareté de l'eau
# Convertir la quantité de production en kilogrammes
production_amount_unit: Term = self.node.production_amount.get_unit_term()
production_amount_in_kg = UnitWeightConverter.convert_between_same_unit_types(
self.node.production_amount.value,
production_amount_unit,
self.gfm_factory.kilogram_term,
"mass-in-g",
)
# Rechercher le facteur spécifique au pays
if flow_country_code in water_scarcity_term.data:
scarce_water_consumption_m3_per_kg = water_scarcity_term.data[flow_country_code]
else:
# Repli vers la médiane
scarce_water_consumption_m3_per_kg = water_scarcity_term.data["median"]
# Calculer la consommation d'eau rare
scarce_water_value = -production_amount_in_kg * scarce_water_consumption_m3_per_kg
Initialisation de l'usine
Le WaterScarcityGapFillingFactory initialise les données mises en cache suivantes :
Termes d'unité
self.cubic_meter_term = self.service_provider.glossary_service.get_term_by_xid_ag_uid(
("EOS_cubic-meter", root_unit_term.access_group_uid)
)
self.liter_term = self.service_provider.glossary_service.get_term_by_xid_ag_uid(
("EOS_liter", root_unit_term.access_group_uid)
)
self.kilogram_term = self.service_provider.glossary_service.get_term_by_xid_ag_uid(
("EOS_kilogram", root_unit_term.access_group_uid)
)
Cache des liens de glossaire
water_scarcity_glossary_links = await self.service_provider.glossary_link_service.get_glossary_links_by_gfm(
gap_filling_module="WaterScarcity"
)
for water_scarcity_glossary_link in water_scarcity_glossary_links:
self.linked_water_scarcity_terms[
frozenset(water_scarcity_glossary_link.term_uids)
] = water_scarcity_glossary_link.linked_term_uid
Exemple de calcul
Scénario : 500 g de tomates d'Espagne
Étape 1 : Conversion en kilogrammes
500 g = 0,5 kg
Étape 2 : Rechercher le facteur WSI
Depuis la base de données de rareté de l'eau pour les tomates en Espagne :
Facteur WSI = 142,3 L eau rare/kg
Étape 3 : Calculer l'eau rare
Eau rare = 0,5 kg * 142,3 L/kg = 71,15 L eau rare
Étape 4 : Conversion en mètres cubes
71,15 L = 0,07115 m3 eau rare
Comparaison par origine
Les mêmes tomates de différentes origines auraient des incidences différentes :
| Origine | Facteur WSI (L/kg) | Eau rare (L) pour 500 g |
|---|---|---|
| Espagne | 142,3 | 71,15 |
| Pays-Bas | 12,8 | 6,40 |
| Maroc | 285,6 | 142,80 |
| Italie | 98,4 | 49,20 |
Cela démontre pourquoi les facteurs de stress hydrique spécifiques à l'origine sont essentiels pour une évaluation environnementale précise.
Limitations connues
Couverture des données
- 162 pays couverts : La plupart des principaux pays producteurs alimentaires sont inclus
- Pays manquants : Certains pays peuvent ne pas avoir de données WSI ; des valeurs médianes sont utilisées en repli
- Couverture des produits : Tous les produits alimentaires n'ont pas d'ID de rareté de l'eau attribués
Limitations de l'héritage
L'implémentation actuelle ne prend pas en charge l'héritage des ID de rareté de l'eau entre produits apparentés :
- Dans le système hérité, les produits pouvaient hériter des ID WSI de produits liés
- Dans l'implémentation actuelle, les produits sans ID WSI direct reçoivent une rareté de l'eau nulle
- Cela peut entraîner une sous-estimation pour certains produits (par exemple, des farines de spécialité qui pourraient hériter de la farine générale)
Résolution des données
- Résolution au niveau du pays uniquement (pas de différenciation infranationale)
- Ne tient pas compte des variations saisonnières du stress hydrique
- Utilise des valeurs attendues (moyennes) plutôt que des données spécifiques à l'année en cours
Repli vers la médiane
Lorsque des valeurs médianes sont utilisées (origine inconnue, données pays manquantes), aucun avertissement n'est affiché dans la sortie. C'est un comportement connu documenté dans les revues scientifiques.
Sources de données
Source principale
Scherer, L., & Pfister, S. (2016). Global water footprint assessment of hydropower. Renewable Energy, 99, 711-720.
Les données de rareté de l'eau combinent :
- Consommation d'eau bleue provenant des bases de données d'analyse du cycle de vie
- Valeurs d'indice de stress hydrique basées sur la disponibilité de l'eau au niveau des bassins versants
Structure de la base de données
Les facteurs de rareté de l'eau sont stockés dans la base de données Eaternity (EDB) avec :
water-scarcity-footprint-id: Lie les produits aux entrées de données WSI- Valeurs spécifiques par pays : Stockées pour chaque combinaison produit-pays
- Valeurs médianes : Pré-calculées pour les scénarios de repli
Références
-
Scherer, L., & Pfister, S. (2016). Global water footprint assessment of hydropower. Renewable Energy, 99, 711-720.
-
Pfister, S., Koehler, A., & Hellweg, S. (2009). Assessing the environmental impacts of freshwater consumption in LCA. Environmental Science and Technology, 43(11), 4098-4104.
-
Base de données Eaternity (EDB). Données d'empreinte de rareté de l'eau. Documentation interne.