3.1.d Escenarios: crecientes en un clima cambiante
Proyecciones de lluvia del ensamble CMIP6, intensificación del ciclo hidrológico y alerta temprana
El Amazonas en Leticia integra la lluvia de una cuenca de más de 700 000 km² que incluye los Andes de Perú y Ecuador. Por eso, el cambio en las crecientes no depende de la lluvia sobre la ciudad, sino del ciclo hidrológico de toda la cuenca alta. Esta página combina tres miradas: lo que ya está pasando (registros largos), lo que proyectan los modelos CMIP6 para la lluvia extrema y lo que se puede anticipar con el pronóstico de GloFAS.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from IPython.display import Markdown, display
from leticia import fuentes, hidro, viz
from leticia.config import aoi_cfg1. Lo observado: más amplitud entre crecientes y vaciantes¶
El registro de Manaos (1903–presente) muestra que la amplitud anual entre crecientes y vaciantes extremas creció unos 150 cm en los últimos 30 años, y que las grandes crecientes pasaron de una cada ~20 años a una cada ~4 años desde 2000 Marengo et al., 2021Costa et al., 2024. La serie de Leticia es más corta, pero permite mirar la misma señal: la diferencia entre el máximo y el mínimo de cada año.
nivel = hidro.limpiar_nivel(fuentes.nivel_rio())
mx, mn = hidro.extremos_anuales(nivel, "max"), hidro.extremos_anuales(nivel, "min")
amp = (mx["valor"] - mn["valor"]).dropna() / 100
mk = hidro.mann_kendall(amp)
fig, ax = plt.subplots(figsize=(10, 3.4))
ax.bar(amp.index, amp, color=viz.AZUL_RIO)
ax.set_ylabel("máximo − mínimo (m)")
ax.set_title("Amplitud anual del nivel en Leticia")
ax.set_ylim(amp.min() - 1, amp.max() + 0.5)
fig.tight_layout()
display(Markdown(f"Años completos: {mk['n']}. Pendiente de Sen: **{mk['sen']*10:.2f} m por década** (p = {mk['p']:.2f})."))
2. Lo proyectado: lluvia media y extrema (CMIP6, Banco Mundial)¶
VARS = {"pr": "lluvia anual (mm)", "rx1day": "lluvia máxima en 1 día (mm)", "rx5day": "lluvia máxima en 5 días (mm)"}
tabla = fuentes.cckp_tabla(list(VARS))
base = fuentes.cckp_historico(list(VARS))
piv = tabla.pivot_table(index=["variable", "escenario"], columns=["periodo", "percentil"], values="valor")
piv.index = piv.index.set_levels([[VARS[v] for v in piv.index.levels[0]], [viz.NOMBRE_ESC[e] for e in piv.index.levels[1]]])
display(Markdown("**Cambio respecto a 1995–2014** (mediana del ensamble y rango p10–p90 de 25 modelos):"))
display(piv.round(1))
display(base.rename(index=VARS).round(1).to_frame("climatología 1995–2014"))Lectura. Para la celda de Leticia el ensamble proyecta poco cambio en la lluvia anual pero aumentos en la lluvia extrema de 1 y 5 días, mayores con más emisiones. Para las crecientes del Amazonas importa además lo que ocurra en los Andes y la cuenca alta; los estudios regionales proyectan más lluvia en el occidente y noroccidente amazónico en la temporada húmeda y una estación seca más larga en el sur Marengo et al., 2021Castellanos et al., 2022. La señal coincide con lo observado: extremos en ambos sentidos.
3. Escenarios de sensibilidad para Leticia¶
from leticia import espacial, exposicion
from leticia.config import parametros
edif = exposicion.edificaciones_urbanas()
pts = edif.representative_point().to_crs(4326)
dem = fuentes.raster_estatico("cop-dem-glo-30", "data")
occ = fuentes.raster_estatico("jrc-gsw", "occurrence")
hand = espacial.altura_sobre_agua(dem, occ >= 90)
h_edif = np.nan_to_num(hand.interp(x=("p", pts.x.values), y=("p", pts.y.values), method="nearest").values, nan=99)
# Calibración: altura sobre el río que deja por debajo tantas edificaciones como expone el mapa de 100 años del JRC
d100 = fuentes.inundacion_jrc(100)
prof = np.nan_to_num(d100.interp(x=("p", pts.x.values), y=("p", pts.y.values), method="nearest").values)
n_jrc = int((prof >= parametros()["inundacion"]["profundidad_minima_m"]).sum())
alturas = np.sort(h_edif)
h_ref = float(alturas[min(n_jrc, len(alturas) - 1)])
ret = hidro.niveles_retorno_ic(mx["valor"].values, [100])
filas = []
for nombre, delta in (("Creciente de 100 años actual", 0.0), ("+0,5 m (intensificación moderada)", 0.5),
("+1,0 m (intensificación alta)", 1.0), ("+2,0 m (extremo)", 2.0)):
bajo = h_edif <= h_ref + delta
filas.append({"escenario": nombre, "nivel en la regla (m)": ret.loc[100, "nivel"] / 100 + delta,
"edificaciones": int(bajo.sum()), "personas": edif.loc[bajo, "poblacion"].sum()})
tabla = pd.DataFrame(filas).set_index("escenario")
tabla["aumento de personas (%)"] = 100 * (tabla["personas"] / tabla["personas"].iloc[0] - 1)
display(tabla.round(1))
display(Markdown(f"Altura de calibración: **{h_ref:.1f} m** sobre el agua permanente (deja por debajo las {n_jrc:,} edificaciones que "
"expone el mapa de 100 años del JRC).".replace(",", ".")))Los escenarios suman 0,5, 1 y 2 m a la creciente de 100 años; el aumento de amplitud observado en Manaos en 30 años es del orden de 1,5 m Costa et al., 2024. Para traducirlos en exposición se usa la altura de cada edificación sobre el río, calibrada para que el escenario actual reproduzca el conteo del mapa del JRC. El resultado es una sensibilidad: cuánto crece la exposición por cada medio metro de creciente adicional. No reemplaza un modelo hidráulico local, que es la primera recomendación de este flujo.
4. Anticipar: pronóstico de caudal de GloFAS¶
pron = intentar(fuentes.pronostico_glofas, mensaje="El pronóstico de GloFAS no respondió")
if pron is not None:
q = fuentes.caudal_glofas()
coef, r2, _ = hidro.relacion_nivel_caudal(nivel, q)
clim = q.groupby(q.index.dayofyear).quantile([0.1, 0.5, 0.9]).unstack()
fig, ax = plt.subplots(figsize=(10, 3.8))
d = np.minimum(np.asarray(pron.index.dayofyear), 365)
ax.fill_between(pron.index, clim.loc[d, 0.1].values / 1000, clim.loc[d, 0.9].values / 1000, color="0.85", label="p10–p90 histórico")
ax.plot(pron.index, clim.loc[d, 0.5].values / 1000, color="0.5", lw=1, label="mediana histórica")
ax.fill_between(pron.index, pron["river_discharge_p25"] / 1000, pron["river_discharge_p75"] / 1000, color=viz.AZUL_RIO, alpha=0.3,
label="pronóstico p25–p75")
ax.plot(pron.index, pron["river_discharge_median"] / 1000, color=viz.AZUL_RIO, lw=1.6, label="pronóstico (mediana)")
ax.axvline(pd.Timestamp.today(), color="k", lw=0.8, ls=":")
ax.set_ylabel("caudal (miles de m³/s)")
ax.set_title(f"Pronóstico de GloFAS para el Amazonas en Leticia (emitido {pd.Timestamp.today():%Y-%m-%d})")
ax.legend(ncol=2, fontsize=7.5)
fig.tight_layout()
fin = pron["river_discharge_median"].dropna()
display(Markdown(f"Nivel equivalente en la regla de Leticia al final del pronóstico ({fin.index[-1]:%Y-%m-%d}): "
f"**≈ {np.polyval(coef, fin.iloc[-1]) / 100:.1f} m** (relación nivel–caudal, R² = {r2:.2f})."))
- Marengo, J. A., Espinoza, J. C., Fu, R., Muñoz, J. C. J., Alves, L. M., Rocha, H. R., & Schöngart, J. (2021). Chapter 22: Long-term variability, extremes and changes in temperature and hydro meteorology in the Amazon region [Amazon Assessment Report 2021]. Science Panel for the Amazon. 10.55161/ZGJG8060
- Costa, F. R. C., Marengo, J. A., Albernaz, A. L. M., Cunha, A. P., Cuvi, N., Espinoza, J. C., Ferreira, J., Fleischmann, A. S., Jimenez-Muñoz, J. C., Páez, M. B., Querido, L. C. A., & Schöngart, J. (2024). Droughts in the Amazon [Policy Brief]. Science Panel for the Amazon. 10.55161/LVYB6857
- Castellanos, E., Lemos, M. F., Astigarraga, L., Chacón, N., Cuvi, N., Huggel, C., Miranda, L., Moncassim Vale, M., Ometto, J. P., Peri, P. L., Postigo, J. C., Ramajo, L., Roldán, L., & Rusticucci, M. (2022). Central and South America. In Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of Working Group II to the Sixth Assessment Report of the IPCC (pp. 1689–1816). Cambridge University Press. 10.1017/9781009325844.014