Greenhouse GFM
El Gap Filling Module de Invernadero calcula las emisiones de gases de efecto invernadero del cultivo de verduras en invernaderos con calefacción. La producción en invernadero puede aumentar el impacto climático hasta 10 veces en comparación con equivalentes cultivados en campo, haciendo este módulo crítico para evaluaciones ambientales precisas de productos frescos.
Referencia Rápida
| Propiedad | Descripción |
|---|---|
| Se ejecuta en | ModeledActivityNode con padre FoodProductFlowNode conteniendo términos de verduras coincidentes |
| Dependencias | OriginGapFillingWorker, AttachFoodTagsGapFillingWorker, ConservationGapFillingWorker |
| Entrada clave | Fecha de producción, país de origen, tipo de verdura coincidente |
| Salida | Emisiones de calefacción, emisiones de infraestructura, emisiones de electricidad |
| Activador | Producto coincidente con una de las 7 verduras de invernadero |
Cuándo se Ejecuta
El módulo se activa cuando:
- Un producto coincide con un término de verdura cubierto
- El producto tiene un país de origen válido con datos climáticos de Meteonorm
- El producto NO tiene una etiqueta de exclusión (congelado, enlatado, seco)
- Se requiere calefacción (basándose en cálculos climáticos)
Salida Clave
El módulo añade tres tipos de emisiones al grafo de cálculo:
- Calefacción: Basada en el clima del país, requisitos de la verdura y fecha de producción
- Infraestructura: Materiales de invernadero de vidrio y plástico
- Electricidad: Consumo de energía específico de la verdura
Metodología Científica
El modelo de invernadero calcula emisiones usando la fórmula:
Emisiones Totales = Calefacción + Infraestructura + Electricidad
Cada componente se calcula por kilogramo de verdura producida.
Modelo de Demanda de Calefacción
El modelo de demanda de calefacción está basado en Stössel et al. (2012) y utiliza un enfoque de balance térmico:
Q_calefacción = (Q_trans + Q_aire) * (T_in - T_out) - Q_solar * G
Donde:
- Q_trans: Transmisión de calor a través de la envolvente del invernadero
- Q_aire: Pérdida de calor por intercambio de aire
- T_in: Temperatura interior requerida para la verdura (Kelvin)
- T_out: Temperatura exterior media mensual (de Meteonorm)
- Q_solar: Factor de ganancia de calor solar
- G: Radiación solar media mensual (de Meteonorm)
Factor de Transmisión de Calor (Q_trans)
U_VALUE = 3.4 # W/m2/K - valor de aislamiento térmico
CLADDING_AREA = 54_978.2 # m2 - área de la envolvente del invernadero
Q_TRANS_FACTOR = U_VALUE * CLADDING_AREA # = 186,925.88 W/K
El valor U de 3,4 W/m2/K representa una media ponderada para invernaderos convencionales según Scharfy et al. (2017).
Factor de Intercambio de Aire (Q_aire)
AIR_EXCHANGE_NUMBER = 0.24 # cambios de aire por hora
BUILDING_VOLUME = 259_506.0 # m3
SPEC_VOLUMETRIC_ENERGY_CONSTANT_FOR_AIR = 0.32 # Wh/m3/K
Q_AIR_FACTOR = AIR_EXCHANGE_NUMBER * BUILDING_VOLUME * SPEC_VOLUMETRIC_ENERGY_CONSTANT_FOR_AIR
# = 19,924.46 W/K
Factor de Ganancia de Calor Solar (Q_solar)
Q_SOLAR_FACTOR = 0.609 * 46_800.0 * 0.99 * 0.9 * 0.7
# = 17,849.82 W/(W/m2)
Componentes:
- 0,609: Transmitancia solar de la cubierta del invernadero
- 46.800 m2: Área de suelo expuesta al sol
- 0,99: Fracción de radiación solar que llega a las plantas
- 0,9: Factor de utilización
- 0,7: Eficiencia de conversión
Cálculo de Emisiones de Calefacción
Calefacción [kg CO2eq/kg] = Demanda de calefacción [MJ/kg] * Mezcla de calefacción [kg CO2eq/MJ]
La mezcla de calefacción depende del país y representa la mezcla media de gas natural, gasóleo de calefacción y renovables utilizados en la calefacción de invernaderos.
Cálculo de Infraestructura
Las emisiones de infraestructura representan los materiales de construcción del invernadero durante su vida útil de 30 años:
FRACTION_OF_GLASS_IN_BUILDING_MATERIAL = 0.604 # 60,4%
FRACTION_OF_PLASTIC_IN_BUILDING_MATERIAL = 0.396 # 39,6%
AREA_OF_THE_WINDOWS_EXPOSED_TO_THE_SUN = 46_800 # m2
La mezcla de infraestructura (60,4% vidrio, 39,6% túnel de plástico) está basada en estadísticas suizas de invernaderos de Scharfy et al. (2017).
Cálculo:
# m2*año de invernadero necesario por kg de verdura
building_material_per_kg = greenhouse_area / total_yield_per_year * production_amount
# Dividir entre vidrio y plástico
glass_material = building_material_per_kg * 0.604
plastic_material = building_material_per_kg * 0.396
Cálculo de Electricidad
El consumo de electricidad es específico de cada verdura y se multiplica por la mezcla eléctrica del país:
Electricidad [kg CO2eq/kg] = Entrada de energía [kWh/kg] * Mezcla eléctrica [kg CO2eq/kWh]
La mezcla eléctrica utiliza el "market for electricity, low voltage" de ecoinvent para cada país.
Detalles de Implementación
Productos Cubiertos
El módulo se ejecuta cuando un producto coincide con uno de estos términos FoodEx2:
| Código FoodEx2 | Verdura | Tipo de Modelo | Descripción |
|---|---|---|---|
B1458 | berenjena | berenjena | Berenjena |
A00JD | berenjena | berenjena | Berenjenas |
A00JM | pepino | pepino | Pepinos |
A00JR | pepino | pepino | Calabacines |
A00KY | lechuga | lechuga | Lechuga de cabeza |
A00MJ | lechuga | lechuga | Espinacas |
B4946 | lechuga | lechuga | Lechuga batavia |
A00KX | lechuga | lechuga | Lechugas genéricas |
A1563 | lechuga | lechuga | Lechuga iceberg |
A0DLB | lechuga | lechuga | Lechugas y similares |
A1612 | lechuga | lechuga | Lechuga hoja de roble |
A00LB | lechuga | lechuga | Lollo rosso |
A00JA | pimiento | pimiento | Pimientos dulces |
A00QV | rábano | rábano | Rábanos |
A00LM | rábano | rábano | Rúcula romana y similares |
B2474 | rábano | rábano | Rúcula |
A0DMX | tomate | tomate | Tomates |
A00HY | tomate en rama | tomate en rama | Tomates cherry |
Parámetros de Verduras
Cada tipo de verdura tiene parámetros de cultivo específicos:
| Verdura | Días de Crecimiento | Temp. Interior (K) | Rendimiento (kg/m2/mes) | Electricidad (kWh/kg) |
|---|---|---|---|---|
| berenjena | 50 | 291,15 (18C) | 3,15 | 0,5492 |
| pepino | 32 | 291,15 (18C) | 4,36 | 0,1982 |
| lechuga | 60 | 281,15 (8C) | 1,74 | 0,4636 |
| pimiento | 41 | 293,15 (20C) | 1,97 | 0,5746 |
| rábano | 51 | 279,15 (6C) | 1,36 | 0,33798 |
| tomate | 127 | 291,15 (18C) | 4,66 | 0,2207 |
| tomate en rama | 127 | 291,15 (18C) | 4,72 | 0,2099 |
Fuentes de datos: ProfiCost-Tool (Chollet et al., 2012), manual técnico de la Asociación Suiza de Productores de Verduras.
Países Cubiertos
El módulo tiene datos climáticos de Meteonorm para 28 países europeos:
| Código | País | Código | País |
|---|---|---|---|
| AT | Austria | IT | Italia |
| BE | Bélgica | LT | Lituania |
| BG | Bulgaria | LU | Luxemburgo |
| CH | Suiza | LV | Letonia |
| CZ | República Checa | NL | Países Bajos |
| DE | Alemania | PL | Polonia |
| DK | Dinamarca | PT | Portugal |
| EE | Estonia | RO | Rumanía |
| ES | España | SE | Suecia |
| FI | Finlandia | SI | Eslovenia |
| FR | Francia | SK | Eslovaquia |
| GB | Gran Bretaña | TR | Turquía |
| GR | Grecia | HR | Croacia |
| HU | Hungría | IE | Irlanda |
Países de la UE que faltan: Chipre, Malta
Reglas de Exclusión
El modelo de invernadero NO se ejecuta si el producto tiene alguna de estas etiquetas de conservación:
| Term XID | Descripción |
|---|---|
J0001 | Conservado Genérico |
J0136 | Congelado |
J0111 | Enlatado |
J0116 | Seco |
Estos productos se excluyen porque los productos conservados no requieren producción en invernadero en el momento del consumo - probablemente fueron producidos durante la temporada de cultivo regular.
Nota: J0003 (No Conservado) y J0131 (Refrigerado) NO excluyen productos del modelo de invernadero.
Manejo de Fecha de Producción
La fecha de producción determina qué datos climáticos mensuales se utilizan para los cálculos de calefacción:
- Si se especifica
activity_dateen el producto o cualquier nodo padre, se utiliza - La fecha de cosecha se calcula como
fecha_producción - 3 días - Los días de crecimiento se retroceden desde la fecha de cosecha basándose en el tipo de verdura
- Los requisitos de calefacción mensual se calculan para cada mes del período de crecimiento
Ejemplo: Tomates con fecha de producción 15 de marzo:
- Fecha de cosecha: 12 de marzo
- Período de crecimiento: 127 días (6 de octubre a 12 de marzo)
- Meses con días de crecimiento: octubre (parcial), noviembre, diciembre, enero, febrero, marzo (parcial)
Referencia de Código Completa
Cálculo de Calefacción
El método compute_required_heating calcula la demanda de calefacción en MJ por kg de verdura:
def compute_required_heating(
self,
flow_country_code: str,
flow_processing_date: datetime,
vegetable_name: str,
) -> float:
"""Calcular la cantidad necesaria de calefacción."""
days_between_harvest_and_production_date = 3
harvest_date = flow_processing_date - timedelta(days=days_between_harvest_and_production_date)
# Obtener días de crecimiento por mes basándose en fecha de cosecha y duración de crecimiento de la verdura
monthly_growing_days = np.array(days_in_each_month(NUMBER_OF_GROWING_DAYS[vegetable_name], harvest_date))
# Cargar datos climáticos específicos del país
monthly_avg_outside_temp = np.array(
self.gfm_factory.aggregated_meteonorm_data[flow_country_code]["average_temperature"]
)
monthly_avg_solar_radiation = np.array(
self.gfm_factory.aggregated_meteonorm_data[flow_country_code]["average_solar_radiation"]
)
# Calcular balance térmico
monthly_temp_difference = REQUIRED_INSIDE_TEMPERATURE[vegetable_name] - monthly_avg_outside_temp
monthly_required_heating_power_watts = (
Q_TRANS_FACTOR + Q_AIR_FACTOR
) * monthly_temp_difference - Q_SOLAR_FACTOR * monthly_avg_solar_radiation
# Sin calefacción negativa (refrigeración no modelada)
monthly_required_heating_power_watts = np.array(
[val if val >= 0.0 else 0.0 for val in monthly_required_heating_power_watts]
)
# Convertir potencia a energía
monthly_required_heating_energy_wh = monthly_required_heating_power_watts * monthly_growing_days * 24
monthly_required_heating_energy_kwh = monthly_required_heating_energy_wh / 1000
# Calcular rendimiento durante período de crecimiento
average_yield_kg_per_day = (
AVG_YIELD_PER_M2_PER_MONTH[vegetable_name] * AREA_OF_THE_WINDOWS_EXPOSED_TO_THE_SUN * 12 / 365
)
yield_in_growing_days_kg = average_yield_kg_per_day * sum(monthly_growing_days)
# Convertir a MJ por kg
mj_in_kwh = 3.6
monthly_required_heating_energy_mj = monthly_required_heating_energy_kwh * mj_in_kwh
required_heating_energy_mj_for_kg_of_vegetable = (
np.sum(monthly_required_heating_energy_mj) / yield_in_growing_days_kg
)
return required_heating_energy_mj_for_kg_of_vegetable
Contabilización de Infraestructura
async def account_for_infrastructure(
self, calc_graph: CalcGraph, greenhouse_activity: FoodProcessingActivityNode, vegetable_name: str
) -> None:
"""Contabilizar infraestructura del invernadero."""
size_of_greenhouse_in_m2 = AREA_OF_THE_WINDOWS_EXPOSED_TO_THE_SUN
average_yield_in_kg_per_m2_and_month = AVG_YIELD_PER_M2_PER_MONTH[vegetable_name]
total_yield_per_year = average_yield_in_kg_per_m2_and_month * 12 * size_of_greenhouse_in_m2
# Calcular m2*año de material de construcción por kg de cultivo
area_and_time_of_greenhouse_building_material = (
size_of_greenhouse_in_m2 / total_yield_per_year * self.node.production_amount.value
)
# Dividir entre vidrio (60,4%) y plástico (39,6%)
glass_building_material = (
area_and_time_of_greenhouse_building_material * FRACTION_OF_GLASS_IN_BUILDING_MATERIAL
)
plastic_building_material = (
area_and_time_of_greenhouse_building_material * FRACTION_OF_PLASTIC_IN_BUILDING_MATERIAL
)
# Añadir nodos de flujo de vidrio y plástico al grafo
# Conectados a procesos de ecoinvent para infraestructura de invernadero
Contabilización de Energía Eléctrica
async def account_for_electrical_energy(
self,
calc_graph: CalcGraph,
greenhouse_activity: FoodProcessingActivityNode,
country_code: str,
vegetable_name: str,
) -> None:
"""Contabilizar consumo de energía eléctrica del invernadero."""
energy_needed_per_kg = REQUIRED_ELECTRICITY_KWH_PER_KG[vegetable_name]
# Crear flujo de consumo de electricidad
electricity_consumption_flow = FlowNode(
uid=UuidStr(uuid4()),
amount=QuantityProp(
value=energy_needed_per_kg * self.node.production_amount.value,
unit_term_uid=self.gfm_factory.kWh_term.uid,
),
)
# Conectar al mercado eléctrico específico del país desde caché
electrical_energy_node = self.gfm_factory.electricity_markets_cache.get(country_code)
Fuentes de Datos
Datos Climáticos de Meteonorm
Los datos climáticos provienen del software Meteonorm (datos de 2016):
- Temperatura: Temperatura exterior media mensual en Kelvin
- Radiación solar: Irradiación solar global media mensual en W/m2
Los datos se almacenan en la caché del GFM y se cargan al inicio del servicio:
meteonorm_average_temperature_{country_code}: Array de 12 valores mensualesmeteonorm_average_solar_radiation_{country_code}: Array de 12 valores mensuales
Mezclas de Calefacción
Mezclas de calefacción específicas por país para calefacción de invernaderos:
| País | Brightway XID | Composición |
|---|---|---|
| CH (Suiza) | EDB_4220cbaabca343c09b19415d5ab4079f_copy1 | 41,3% gas natural, 35,2% gasóleo, 23,5% renovables |
| DE (Alemania) | EDB_4220cbaabca343c09b19415d5ab4079f_copy2 | 28% carbón, 21% gas natural, 15% fueloil, 20% renovables, 16% otros |
| NL (Países Bajos) | EDB_4220cbaabca343c09b19415d5ab4079f | 86,2% gas natural, 0,1% gasóleo, 13,7% renovables |
| UE otros | EDB_4220cbaabca343c09b19415d5ab4079f_copy3 | 54% gas natural, 46% gasóleo |
Materiales de Infraestructura
Procesos de ecoinvent para materiales de construcción de invernaderos:
| Material | ID de ecoinvent | Unidad |
|---|---|---|
| Invernadero de vidrio | ecoinvent 3.6 cutoff_0ce659c3cfd443a38761058ee62e3f10 | m2*año |
| Túnel de plástico | ecoinvent 3.6 cutoff_fddfe51c6959f41ac044089c3a892af7 | m2*año |
Ejemplo de Cálculo
Escenario: 1 kg de tomates, producidos en Suecia el 15 de marzo
Paso 1: Determinar Período de Crecimiento
- Fecha de producción: 15 de marzo
- Fecha de cosecha: 12 de marzo (3 días antes de producción)
- Duración de crecimiento: 127 días
- Fecha de inicio: 5 de noviembre (año anterior)
Paso 2: Calcular Días de Crecimiento Mensual
| Mes | Días |
|---|---|
| Noviembre | 25 |
| Diciembre | 31 |
| Enero | 31 |
| Febrero | 28 |
| Marzo | 12 |
| Total | 127 |
Paso 3: Calcular Demanda de Calefacción
Usando datos climáticos suecos y requisitos del tomate (18C temperatura interior):
- Diferencias de temperatura mensual calculadas
- Compensación por radiación solar aplicada
- Valores negativos fijados a cero
Resultado: ~32,3 MJ/kg de demanda de calefacción
Paso 4: Calcular Infraestructura
Rendimiento total/año = 4,66 kg/m2/mes * 12 * 46.800 m2 = 2.616.576 kg/año
Material de construcción por kg = 46.800 / 2.616.576 = 0,0179 m2*año/kg
Vidrio: 0,0179 * 0,604 = 0,0108 m2*año
Plástico: 0,0179 * 0,396 = 0,0071 m2*año
Paso 5: Calcular Electricidad
Electricidad = 0,2207 kWh/kg * emisiones de mezcla eléctrica sueca
Salida Final
El módulo añade tres nodos de flujo al grafo de cálculo:
- Flujo de calefacción (32,3 MJ) conectado a proceso de mezcla de calefacción sueco
- Flujo de infraestructura de vidrio (0,0108 m2*año) conectado a proceso de vidrio de ecoinvent
- Flujo de infraestructura de plástico (0,0071 m2*año) conectado a proceso de plástico de ecoinvent
- Flujo de electricidad (0,2207 kWh) conectado a mercado eléctrico sueco
Limitaciones Conocidas
Cobertura Geográfica
- Solo 28 países europeos tienen datos de Meteonorm
- Sin cobertura para Estados Unidos, Canadá u otras regiones productoras importantes
- Sin diferenciación regional subnacional (importante para países grandes)
Cobertura de Cultivos
- Solo 7 tipos de verduras están modelados (tomate, pepino, lechuga, pimiento, berenjena, rábano, tomate en rama)
- Hierbas, chiles, fresas y otros cultivos de invernadero no están cubiertos
- Algunos cultivos como la canóniga tienen datos disponibles pero no están implementados
Suposiciones del Modelo
- Sin calefacción requerida = sin invernadero asumido (puede subestimar emisiones para invernaderos sin calefacción)
- Misma mezcla de infraestructura usada para todos los países (basada en datos suizos)
- Producción orgánica no diferenciada (diferencia de impacto mínima encontrada)
- Sin temporadas de cultivo en invernadero específicas por país
Antigüedad de Datos
- Datos climáticos de Meteonorm son de 2016
- Las mezclas de calefacción pueden no reflejar las transiciones energéticas actuales
Referencias
-
Stössel, F., Juraske, R., Pfister, S., & Hellweg, S. (2012). Life cycle inventory and carbon and water footprint of fruits and vegetables: application to a Swiss retailer. The International Journal of Life Cycle Assessment, 17(9), 1191-1202.
-
Eymann, L., et al. (2014). Gewächshausmodell v1.0. Informe ZHAW para Eaternity.
-
Scharfy, D., et al. (2017). OFP Report - New Data ZHAW v1.3. Informe del proyecto Organic Food Print.
-
Chollet, D., et al. (2012). ProfiCost-Tool. Asociación Suiza de Productores de Verduras.
-
Software Meteonorm. https://meteonorm.com/