Cada fila es una clave del YAML, con el valor y una glosa solo cuando un script o el propio namelist la explican. esc_04 no tiene archivo .nc.
escenarios = FileAttachment("../datos/series/gotm_escenarios.csv").csv({typed: true})
yaml = FileAttachment("../datos/series/gotm_yaml.csv").csv({typed: true})
catalogo = FileAttachment("../datos/series/gotm_catalogo_params.csv").csv({typed: true})
viewof esc = Inputs.select(escenarios.map(d => d.escenario), {
label: "Escenario",
value: "villarrica_45y_diario"
})
viewof filtro = Inputs.text({label: "Clave", placeholder: "albedo, nlev, meteo"})
{
const f = escenarios.find(d => d.escenario === esc);
return html`<p>${f.escenario}: ${f.inicio} a ${f.fin}, dt ${f.dt_s} s, ${f.nlev} niveles, profundidad ${f.depth_m} m, turb_method ${f.turb_method}. NetCDF: ${f.nc}. Meteo: ${f.meteo || "sin archivo"}.</p>`;
}
{
const q = (filtro || "").toLowerCase();
const filas = yaml.filter(d => d.escenario === esc && (!q || String(d.clave).toLowerCase().includes(q) || String(d.significado).toLowerCase().includes(q)));
const corte = filas.slice(0, 120);
return html`<p>${filas.length} claves${filas.length > 120 ? "; se muestran 120" : ""}.</p>
<table class="table table-sm">
<thead><tr><th>Clave</th><th>Valor</th><th>Qué significa</th></tr></thead>
<tbody>${corte.map(d => html`<tr><td><code>${d.clave}</code></td><td>${d.valor}</td><td>${d.significado || ""}</td></tr>`)}</tbody>
</table>
<p class="portal-origen">Origen: <code>06. GOTM/Datos/Configuraciones/${esc}.yaml</code>. Glosa: script 03, script 09, o el comentario del namelist.</p>`;
}
Los 14 parámetros del LHS200, con el rango que usó el script 09.
import { htmlTabla } from "../_js/portal.js"
htmlTabla(
["Parametro", "Min", "Max", "Default", "Unidad", "Fuente"].map((c) => ({ key: c, label: c, num: false })),
catalogo,
"gotm_catalogo_params.csv"
)
Origen del catálogo: 09. XLSX/10. GOTM/Sensibilidad_LHS200/00_catalogo_parametros.xlsx, hoja Catalogo.