Saltar al contenido principal

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

PropiedadDescripción
Se ejecuta enModeledActivityNode con padre FoodProductFlowNode conteniendo términos de verduras coincidentes
DependenciasOriginGapFillingWorker, AttachFoodTagsGapFillingWorker, ConservationGapFillingWorker
Entrada claveFecha de producción, país de origen, tipo de verdura coincidente
SalidaEmisiones de calefacción, emisiones de infraestructura, emisiones de electricidad
ActivadorProducto coincidente con una de las 7 verduras de invernadero

Cuándo se Ejecuta

El módulo se activa cuando:

  1. Un producto coincide con un término de verdura cubierto
  2. El producto tiene un país de origen válido con datos climáticos de Meteonorm
  3. El producto NO tiene una etiqueta de exclusión (congelado, enlatado, seco)
  4. 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 FoodEx2VerduraTipo de ModeloDescripción
B1458berenjenaberenjenaBerenjena
A00JDberenjenaberenjenaBerenjenas
A00JMpepinopepinoPepinos
A00JRpepinopepinoCalabacines
A00KYlechugalechugaLechuga de cabeza
A00MJlechugalechugaEspinacas
B4946lechugalechugaLechuga batavia
A00KXlechugalechugaLechugas genéricas
A1563lechugalechugaLechuga iceberg
A0DLBlechugalechugaLechugas y similares
A1612lechugalechugaLechuga hoja de roble
A00LBlechugalechugaLollo rosso
A00JApimientopimientoPimientos dulces
A00QVrábanorábanoRábanos
A00LMrábanorábanoRúcula romana y similares
B2474rábanorábanoRúcula
A0DMXtomatetomateTomates
A00HYtomate en ramatomate en ramaTomates cherry

Parámetros de Verduras

Cada tipo de verdura tiene parámetros de cultivo específicos:

VerduraDías de CrecimientoTemp. Interior (K)Rendimiento (kg/m2/mes)Electricidad (kWh/kg)
berenjena50291,15 (18C)3,150,5492
pepino32291,15 (18C)4,360,1982
lechuga60281,15 (8C)1,740,4636
pimiento41293,15 (20C)1,970,5746
rábano51279,15 (6C)1,360,33798
tomate127291,15 (18C)4,660,2207
tomate en rama127291,15 (18C)4,720,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ódigoPaísCódigoPaís
ATAustriaITItalia
BEBélgicaLTLituania
BGBulgariaLULuxemburgo
CHSuizaLVLetonia
CZRepública ChecaNLPaíses Bajos
DEAlemaniaPLPolonia
DKDinamarcaPTPortugal
EEEstoniaRORumanía
ESEspañaSESuecia
FIFinlandiaSIEslovenia
FRFranciaSKEslovaquia
GBGran BretañaTRTurquía
GRGreciaHRCroacia
HUHungríaIEIrlanda

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 XIDDescripción
J0001Conservado Genérico
J0136Congelado
J0111Enlatado
J0116Seco

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:

  1. Si se especifica activity_date en el producto o cualquier nodo padre, se utiliza
  2. La fecha de cosecha se calcula como fecha_producción - 3 días
  3. Los días de crecimiento se retroceden desde la fecha de cosecha basándose en el tipo de verdura
  4. 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 mensuales
  • meteonorm_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ísBrightway XIDComposición
CH (Suiza)EDB_4220cbaabca343c09b19415d5ab4079f_copy141,3% gas natural, 35,2% gasóleo, 23,5% renovables
DE (Alemania)EDB_4220cbaabca343c09b19415d5ab4079f_copy228% carbón, 21% gas natural, 15% fueloil, 20% renovables, 16% otros
NL (Países Bajos)EDB_4220cbaabca343c09b19415d5ab4079f86,2% gas natural, 0,1% gasóleo, 13,7% renovables
UE otrosEDB_4220cbaabca343c09b19415d5ab4079f_copy354% gas natural, 46% gasóleo

Materiales de Infraestructura

Procesos de ecoinvent para materiales de construcción de invernaderos:

MaterialID de ecoinventUnidad
Invernadero de vidrioecoinvent 3.6 cutoff_0ce659c3cfd443a38761058ee62e3f10m2*año
Túnel de plásticoecoinvent 3.6 cutoff_fddfe51c6959f41ac044089c3a892af7m2*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

MesDías
Noviembre25
Diciembre31
Enero31
Febrero28
Marzo12
Total127

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:

  1. Flujo de calefacción (32,3 MJ) conectado a proceso de mezcla de calefacción sueco
  2. Flujo de infraestructura de vidrio (0,0108 m2*año) conectado a proceso de vidrio de ecoinvent
  3. Flujo de infraestructura de plástico (0,0071 m2*año) conectado a proceso de plástico de ecoinvent
  4. 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

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

  2. Eymann, L., et al. (2014). Gewächshausmodell v1.0. Informe ZHAW para Eaternity.

  3. Scharfy, D., et al. (2017). OFP Report - New Data ZHAW v1.3. Informe del proyecto Organic Food Print.

  4. Chollet, D., et al. (2012). ProfiCost-Tool. Asociación Suiza de Productores de Verduras.

  5. Software Meteonorm. https://meteonorm.com/