Capítulo I · ¿Qué es CAMS?
El modelo
atmosférico
de Copernicus .
CAMS opera en el ECMWF desde 2015.
Combina observaciones satelitales, sondeos y estaciones
en un mismo modelo numérico para describir la composición
de la atmósfera en todo el planeta.
{/* Stats pills */}
{[
{ v: '~40 km', l: 'resolución global' },
{ v: '120 h', l: 'horizonte' },
{ v: '2×/día', l: 'corridas' },
].map((s, i) => (
))}
{/* Right diagram */}
{/* Connecting lines */}
{/* Inputs → CAMS */}
{[0, 1, 2].map(i => {
const n = nodes[i];
const cam = nodes[3];
const apT = clamp((flowT - i * 0.08) * 1.6, 0, 1);
const len = Math.hypot(cam.x - n.x, cam.y - n.y);
const dashOff = (1 - apT) * len;
return (
);
})}
{/* CAMS → output */}
{(() => {
const cam = nodes[3], out = nodes[4];
const apT = clamp((flowT - 0.5) * 1.6, 0, 1);
const len = Math.hypot(out.x - cam.x, out.y - cam.y);
return (
);
})()}
{/* Travelling data pulses */}
{[0, 1, 2].map(i => {
const n = nodes[i];
const cam = nodes[3];
const ph = (time * 0.7 + i * 0.4) % 1;
const px = n.x + (cam.x - n.x) * ph;
const py = n.y + (cam.y - n.y) * ph;
const apT = clamp((flowT - i * 0.08) * 1.6, 0, 1);
return (
);
})}
{/* Nodes */}
{nodes.map((n, i) => {
const ap = Easing.easeOutBack(clamp((localTime - 1.8 - (n.delay || 0)) / 0.5, 0, 1));
const isCenter = n.id === 'cams';
const pulse = isCenter ? (1 + Math.sin(time * 1.8) * 0.04) : 1;
return (
{/* Label */}
{!isCenter && (
)}
{isCenter && (
{n.sub}
)}
);
})}