Mapas del modelo GFS hechos a medida

 

 

Alex Sancho
sinner@catmeteo.com

Palabras clave. Modelos, GFS, mapas a medida, predicción.


Introducción

La mayoría de nosotros, estamos acostumbrados a navegar por Internet buscando recursos para nuestra afición, ya sean modelos, imágenes de satélite, mapas, etc. Pero no es tan normal poder generar salidas gráficas propias de los modelos según nuestras necesidades y requerimientos.

Cada modelo se puede plotear (dibujar, representar) de muchas maneras, por ejemplo, el GFS en el portal wetterzentrale. Pues bien, generar las salidas de un modelo en casa no es difícil, y aunque no tengan la vistosidad de los que podemos encontrar en Internet, hacerlo uno mismo ofrece muchas ventajas. Veamos pues, como se pueden generar y dibujar salidas del GFS en casa.

Los requerimientos

Para generar los mapas, necesitaremos básicamente un PC con Linux (cualquier distribución vale, en mi caso Kubuntu 5.1) y una buena conexión a Internet, ya que hay archivos que ocupan cerca de 200 Mb. Y algo de paciencia, pues montar todo el sistema no es complicado, pero si algo tedioso cuando no se domina mucho el tema consola. Pero con estas indicaciones, y algo de esfuerzo, se pueden generar modelos en 15 minutos, aproximadamente, una vez montado todo el software.

Indicaciones

El software que utilizo es el Grads (http://www.iges.org/grads/ The Grid Analysis and Display System) que tiene soporte para archivos Grib, Netcdf, DODS, etc.

En este caso, vamos a utilizar los archivos Grib. Algunos lectores se preguntarán, ¿Qué es un Grib?

Grib (Grided Binary) es un formato de datos regulado y estandarizado por la Comisión de Sistemas básicos de la OMM. En este formato, están codificadas todas las variables que se utilizan en los modelos. En pocas palabras, es una salida codificada de un modelo numérico. El Grib es el formato más utilizado y, por lo tanto, encontramos muchos recursos en Internet que lo aprovechan.

Pero, por supuesto, la mayoría de estos recursos son de pago. No así el GFS, que ofrece todas sus salidas cada 6 horas (00, 06, 12 y 18 . En este ejemplo se utilizará el GFS de baja resolución (ENS), ya que sólo ocupa unos 4 Mb cada salida. Luego una vez se tenga todo montado, se pueden utilizar los de alta resolución, que ocupan unos 180 Mb por cada 3 horas de simulación

¡Nota importante! las rutas indicadas en todos los pasos no son absolutas, es decir, son las rutas según el sistema de directorios personal. Así, donde pone alex se deberá cambiar por el nombre de vuestro usuario.

Los pasos a seguir son estos:

1. Descargarse el software necesario Grads:

ftp://grads.iges.org/grads/1.8/grads-1.8sl11-linux.tar.gz , nos bajamos los binarios ya compilados, así no hay que compilarlo todo y es más rápido. Una vez descargado, lo descomprimimos con la siguiente orden:

alex@ubuntu:~/Desktop/$ gunzip grads-1.8sl11-linux.tar.gz

alex@ubuntu:~/Desktop/$ tar xvf grads-1.8sl11-linux.tar

Con esto, ya tendremos en el escritorio el Grads descomprimido en el escritorio. Si se quiere descomprimir en otro lugar, basta con pasar el archivo comprimido a otro directorio y descomprimirlo allí, pero siempre manteniendo el nombre de carpeta, es muy importante para evitar errores más tarde.

Grib2ctl:

Es un script en perl que nos creará el archivo ctl, para introducir correctamente el grib en el Grads
(Necesitamos el perl en nuestro sistema, para comprobarlo [/usr/local/bin/perl -w]

ftp://ftp.cpc.ncep.noaa.gov/wd51we/wgrib.scripts/grib2ctl.pl

Y lo metemos en la carpeta grads/bin, lo abrimos con un editor de texto, y modificamos las siguientes líneas.

Cambiamos esta (comilla simple incluida)

$wgrib=’wgrib’

Por la ruta donde tenemos descomprido el grads/bin

$wgrib=’/home/alex/Desktop/grads/bin’;

Mapas y data para Grads

El Grads no lleva los mapas por defecto, así que hay que instalarlos

ftp://grads.iges.org/grads/data.tar.Z

Y los descomprimimos en /usr/local/bin/grads

Ya está preparado, ahora toca descargarse los modelos

Desde el servidor 5 del Nomad, se pueden descargar multitud de modelos, el problema, es que muchos están limitados a la zona de EEUU. Solo el GFS tiene una buena cobertura mundial.

Nos bajamos, por ejemplo, la salida del ENS (GFS a resolución simple del 26 de Abril del 2006, salida de las 00z

http://nomad5.ncep.noaa.gov/pub/ens/archive/

Nos vamos al día 23

http://nomad5.ncep.noaa.gov/pub/ens/archive/ens20060426

Y seleccionamos el ens4n.t00.pgbrf00 (esto significa que es el de la salida 00z válida para las 00 horas)

http://nomad5.ncep.noaa.gov/pub/ens/archive/ens20060426/ensn4.t00z.pgrbf00

Y el INV también

http://nomad5.ncep.noaa.gov/pub/ens/archive/ens20060426/ensn4.t00z.pgrbf00.inv

Con esto, quedan descargados el modelo y el índice de variables.

Ahora hay 2 caminos a seguir. Crearse el ctl (archivo para el Grads) uno mismo o bajarlo directamente.

Bajarse el ctl sin necesidad de generarlo:

El ctl para la salida correspondiente

http://nomad5.ncep.noaa.gov/pub/ens/archive/ens20060426/ensn4_00z.ctl

Y el idx para la salida correspondiente

http://nomad5.ncep.noaa.gov/pub/ens/archive/ens20060426/ensn4_00z.idx

Para hacerlo manualmente:

La sintaxis es la siguiente

alex@ubuntu:~/Desktop/grads-1.8sl11/bin$ /usr/bin/perl /home/alex/Desktop/grads-1.8sl11/bin/grib2ctl.pl /home/alex/Desktop/ens4n.t06z.pgrbf00 > /home/alex/Desktop/ens4n.t06z.pgrbf00.ctl

Esto nos crea el ctl correspondiente para el grads en el escritorio, así no vamos perdidos buscando archivos.

Ahora, codificaremos el Grib con la utilidad gribmap, que viene dentro del directorio grads/bin

alex@ubuntu:~/Desktop/grads-1.8sl11/bin$ ./gribmap -i /home/alex/Desktop/ens4n.t06z.pgrbf00.ctl

Y nos saldrán unas líneas detallando el proceso

gribmap: Scanning binary GRIB file(s):
gribmap: Opening GRIB file /home/alex/Desktop/gfs.t00z.pgrbf00
gribmap: Reached EOF
gribmap: Writing the map…

Ya tenemos el ctl listo para trabajar.

Y empezamos ya a trabajar con el grads

Consta de 2 ventanas; la consola y la ventana donde nos saldrá la variable dibujada

alex@ubuntu:~/Desktop/grads-1.8sl11/bin$ ./gradsc

Grid Analysis and Display System (GrADS) Version 1.8SL11
Copyright (c) 1988-2001 by Brian Doty
Center for Ocean-Land-Atmosphere Studies
Institute for Global Environment and Society
All Rights Reserved

Config: v1.8SL11 32-bit little-endian readline printim

Issue ‘q config’ command for more information.

Landscape mode? (no for portrait)

Presionamos intro

GX Package Initialization: Size = 11 8.5
ga->

Ya tenemos el Grads en marcha. Nos queda cargar el ctl y plotear la salida. Para esto, definimos donde está el archivo y lo abrimos

ga-> open /home/alex/Desktop/ens4n.t06.ctl
Scanning description file: /home/alex/Desktop/ens4n.t06.ctl
Data file /home/alex/Desktop/ensn4.t06z.pgrbf06 is open as file 1
LON set to 0 360
LAT set to -90 90
LEV set to 1000 1000
Time values set: 2006:4:23:6 2006:4:23:6

Ya tenemos el grib correctamente cargado. Para ver los campos que podemos representar, basta con ejecutar la orden "query file"

ga-> query file
File 1 : /home/alex/Desktop/ensn4.t06z.pgrbf06
Descriptor: /home/alex/Desktop/ens4n.t06.ctl
Binary: /home/alex/Desktop/ensn4.t06z.pgrbf06
Type = Gridded
Xsize = 144 Ysize = 73 Zsize = 26 Tsize = 1
Number of Variables = 134
no4lftxsfc 0 132 ** surface Best (4-layer) lifted index [K]
no5wavaprs 0 230 ** 5-wave geopot. height anomaly [gpm]
no5wavhprs 0 222 ** 5-wave geopotential height [gpm]
absvprs 26 41 ** Absolute vorticity [/s]
acpcpsfc 0 63 ** surface Convective precipitation [kg/m^2]
albdosfc 0 84 ** surface Albedo [%]
apcpsfc 0 61 ** surface Total precipitation [kg/m^2]
capesfc 0 157 ** surface Convective Avail. Pot. Energy [J/kg]
cape180_0mb 0 157 ** 180-0 mb above gnd Convective Avail. Pot. Energy [J/kg]
cfrzrsfc 0 141 ** surface Categorical freezing rain [yes=1;no=0]
cicepsfc 0 142 ** surface Categorical ice pellets [yes=1;no=0]
cinsfc 0 156 ** surface Convective inhibition [J/kg]
cin180_0mb 0 156 ** 180-0 mb above gnd Convective inhibition [J/kg]
clwmrprs 21 153 ** Cloud water [kg/kg]
cpratsfc 0 214 ** surface Convective precip. rate [kg/m^2/s]
crainsfc 0 140 ** surface Categorical rain [yes=1;no=0]
csnowsfc 0 143 ** surface Categorical snow [yes=1;no=0]
cwatclm 0 76 ** atmos column Cloud water [kg/m^2]
cworkclm 0 146 ** atmos column Cloud work function [J/kg]
dlwrfsfc 0 205 ** surface Downward long wave flux [W/m^2]
dswrfsfc 0 204 ** surface Downward short wave flux [W/m^2]
gfluxsfc 0 155 ** surface Ground heat flux [W/m^2]
gpaprs 2 27 ** Geopotential height anomaly [gpm]
hgtsfc 0 7 ** surface Geopotential height [gpm]
hgtprs 26 7 ** Geopotential height [gpm]
hgtpv2 0 7 ** pot vorticity = 2000 units level Geopotential height [gpm]
hgtpvneg2 0 7 ** pot vorticity = -2000 units level Geopotential height [gpm]
hgthtfl 0 7 ** highest trop freezing level Geopotential height [gpm]
hgt0deg 0 7 ** 0C isotherm level Geopotential height [gpm]
hgtmwl 0 7 ** max wind level Geopotential height [gpm]
hgttrp 0 7 ** tropopause Geopotential height [gpm]
hpblsfc 0 221 ** surface Planetary boundary layer height [m]
icecsfc 0 91 ** surface Ice concentration (ice=1;no ice=0) [fraction]
landsfc 0 81 ** surface Land cover (land=1;sea=0) [fraction]
lftxsfc 0 131 ** surface Surface lifted index [K]
lhtflsfc 0 121 ** surface Latent heat flux [W/m^2]
o3mrprs 6 154 ** Ozone mixing ratio [kg/kg]
pevprsfc 0 145 ** surface Potential evaporation rate [W/m^2]
potsig995 0 13 ** sig=.995 Potential temp. [K]
pratesfc 0 59 ** surface Precipitation rate [kg/m^2/s]
pressfc 0 1 ** surface Pressure [Pa]
prespv2 0 1 ** pot vorticity = 2000 units level Pressure [Pa]
prespvneg2 0 1 ** pot vorticity = -2000 units level Pressure [Pa]
preslcb 0 1 ** low cloud base Pressure [Pa]
preslct 0 1 ** low cloud top Pressure [Pa]
presmcb 0 1 ** mid-cloud base Pressure [Pa]
presmct 0 1 ** mid-cloud top Pressure [Pa]
preshcb 0 1 ** high cloud base Pressure [Pa]
preshct 0 1 ** high cloud top Pressure [Pa]
prescvb 0 1 ** convective cld base Pressure [Pa]
prescvt 0 1 ** convective cld top Pressure [Pa]
presmwl 0 1 ** max wind level Pressure [Pa]
prestrp 0 1 ** tropopause Pressure [Pa]
prmslmsl 0 2 ** Pressure reduced to MSL [Pa]
pwatclm 0 54 ** atmos column Precipitable water [kg/m^2]
rhprs 21 52 ** Relative humidity [%]
rh2m 0 52 ** 2 m Relative humidity [%]
rhsig995 0 52 ** sig=.995 Relative humidity [%]
rhsg44_100 0 52 ** sigma=0.44-1.00 layer Relative humidity [%]
rhsg72_94 0 52 ** sigma=0.72-0.94 layer Relative humidity [%]
rhsg44_72 0 52 ** sigma=0.44-0.72 layer Relative humidity [%]
rhsg33_100 0 52 ** sigma=0.33-1.00 layer Relative humidity [%]
rh30_0mb 0 52 ** 30-0 mb above gnd Relative humidity [%]
rhclm 0 52 ** atmos column Relative humidity [%]
rhhtfl 0 52 ** highest trop freezing level Relative humidity [%]
rh0deg 0 52 ** 0C isotherm level Relative humidity [%]
shtflsfc 0 122 ** surface Sensible heat flux [W/m^2]
soilwsoilt 0 144 ** 0-10 cm undergnd Volumetric soil moisture [fraction]
soilwdlr 3 144 ** Volumetric soil moisture [fraction]
spfh2m 0 51 ** 2 m Specific humidity [kg/kg]
spfh30_0mb 0 51 ** 30-0 mb above gnd Specific humidity [kg/kg]
tcdcclm 0 71 ** atmos column Total cloud cover [%]
tcdcbcl 0 71 ** boundary cld layer Total cloud cover [%]
tcdclcl 0 71 ** low cloud level Total cloud cover [%]
tcdcmcl 0 71 ** mid-cloud level Total cloud cover [%]
tcdchcl 0 71 ** high cloud level Total cloud cover [%]
tcdccvl 0 71 ** convective cld layer Total cloud cover [%]
tmax2m 0 15 ** 2 m Max. temp. [K]
tmin2m 0 16 ** 2 m Min. temp. [K]
tmpsfc 0 11 ** surface Temp. [K]
tmpprs 26 11 ** Temp. [K]
tmp1829m 0 11 ** 1829 m Temp. [K]
tmp2743m 0 11 ** 2743 m Temp. [K]
tmp3658m 0 11 ** 3658 m Temp. [K]
tmp2m 0 11 ** 2 m Temp. [K]
tmpsig995 0 11 ** sig=.995 Temp. [K]
tmpsoilt 0 11 ** 0-10 cm undergnd Temp. [K]
tmpdlr 3 11 ** Temp. [K]
tmp30_0mb 0 11 ** 30-0 mb above gnd Temp. [K]
tmppv2 0 11 ** pot vorticity = 2000 units level Temp. [K]
tmppvneg2 0 11 ** pot vorticity = -2000 units level Temp. [K]
tmplct 0 11 ** low cloud top Temp. [K]
tmpmct 0 11 ** mid-cloud top Temp. [K]
tmphct 0 11 ** high cloud top Temp. [K]
tmpmwl 0 11 ** max wind level Temp. [K]
tmptrp 0 11 ** tropopause Temp. [K]
tozneclm 0 10 ** atmos column Total ozone [Dobson]
ugwdsfc 0 147 ** surface Zonal gravity wave stress [N/m^2]
uflxsfc 0 124 ** surface Zonal momentum flux [N/m^2]
ugrdprs 26 33 ** u wind [m/s]
ugrd1829m 0 33 ** 1829 m u wind [m/s]
ugrd2743m 0 33 ** 2743 m u wind [m/s]
ugrd3658m 0 33 ** 3658 m u wind [m/s]
ugrd10m 0 33 ** 10 m u wind [m/s]
ugrdsig995 0 33 ** sig=.995 u wind [m/s]
ugrd30_0mb 0 33 ** 30-0 mb above gnd u wind [m/s]
ugrdpv2 0 33 ** pot vorticity = 2000 units level u wind [m/s]
ugrdpvneg2 0 33 ** pot vorticity = -2000 units level u wind [m/s]
ugrdmwl 0 33 ** max wind level u wind [m/s]
ugrdtrp 0 33 ** tropopause u wind [m/s]
ulwrfsfc 0 212 ** surface Upward long wave flux [W/m^2]
ulwrftoa 0 212 ** top of atmos Upward long wave flux [W/m^2]
uswrfsfc 0 211 ** surface Upward short wave flux [W/m^2]
uswrftoa 0 211 ** top of atmos Upward short wave flux [W/m^2]
vgwdsfc 0 148 ** surface Meridional gravity wave stress [N/m^2]
vflxsfc 0 125 ** surface Meridional momentum flux [N/m^2]
vgrdprs 26 34 ** v wind [m/s]
vgrd1829m 0 34 ** 1829 m v wind [m/s]
vgrd2743m 0 34 ** 2743 m v wind [m/s]
vgrd3658m 0 34 ** 3658 m v wind [m/s]
vgrd10m 0 34 ** 10 m v wind [m/s]
vgrdsig995 0 34 ** sig=.995 v wind [m/s]
vgrd30_0mb 0 34 ** 30-0 mb above gnd v wind [m/s]
vgrdpv2 0 34 ** pot vorticity = 2000 units level v wind [m/s]
vgrdpvneg2 0 34 ** pot vorticity = -2000 units level v wind [m/s]
vgrdmwl 0 34 ** max wind level v wind [m/s]
vgrdtrp 0 34 ** tropopause v wind [m/s]
vvelprs 21 39 ** Pressure vertical velocity [Pa/s]
vvelsig995 0 39 ** sig=.995 Pressure vertical velocity [Pa/s]
vwshpv2 0 136 ** pot vorticity = 2000 units level Vertical speed shear [1/s]
vwshpvneg2 0 136 ** pot vorticity = -2000 units level Vertical speed shear [1/s]
vwshtrp 0 136 ** tropopause Vertical speed shear [1/s]
watrsfc 0 90 ** surface Water runoff [kg/m^2]
weasdsfc 0 65 ** surface Accum. snow [kg/m^2]

Todos estos son los campos que podemos representar. Para hacer una prueba, vamos a plotear la presión en superficie.

Primero, definimos las coordenadas (Coordenadas de la península ibérica en este caso).

ga-> set lon -10 4
LON set to -10 4
ga-> set lat 36 44
LAT set to 36 44

Y ploteamos la presión regulada en superficie (SFC) . Para ellos, buscamos como se llama en el listado del query file.

pressfc 0 1 ** surface Pressure [Pa]

Ejecutamos la orden Display ( d ) con el nombre de la variable.

ga-> d pressfc

Mapa de la presión regulada en superficie para las 00z del día 26-04-2006. Se puede observar, como, al ser el modelo en baja resolución, las isobaras son muy toscas.

Y ya hemos ploteado nuestro propia salida del GFS.
Cuando se quiera volver a plotear una variable, conviene ejecutar el comando.

ga-> clear

Para borrar el mapa. De esta forma, se puede volver a plotear sobre un entorno limpio.

Manejo básico del programa

Vamos a ver como utilizar el Grads de forma muy básica.

Si no tenemos introducidas las coordenadas, las introducimos ahora. Para la península Ibérica:

ga-> set lon -10 4
LON set to -10 4
ga-> set lat 36 44
LAT set to 36 44

Vamos plotear los niveles de humedad en superficie. Asignamos el valor de 1000 hPa.

ga-> set lev 1000
LEV set to 1000 1000

Buscamos en el query file como se denomina la variable de la humedad.

rhprs 21 52 ** Relative humidity [%]

ga-> d rhprs
Contouring: 45 to 100 interval 5

Nos dibuja desde el 45% hasta el 100% en intervalos de 5.

Mapa con la humedad relativa (Rojo 100%, azul 45%) a las 00z del día 26-04-2006, representado con isopletas.

Ahora, vamos a mejorar el aspecto del mapa. Basta con introducir esta línea de código.

ga-> set gxout shaded

La orden gxout indica al grads como quiere que genere la salida. En este caso, shaded, es decir, rellena de color o sombreado.

Vamos a ver el resultado.

ga-> clear

ga-> d rhprs

Mismo mapa que el anterior, esta vez representado con colores de relleno. Este tipo de mapa demuestra ser mucho más grafico y de una visión más simple que el anterior

Mucho mejor ahora, pero claro, los valores numéricos se han perdido, no hay problema. Basta con volver a dibujar la variable encima.

ga-> set gxout contour
ga-> d rhprs

Mapa con la humedad relativa de las 00z del día 26-04-06, esta vez representado de las 2 formas, por isolíneas y colores de relleno


Al no borrar con clear la salida anterior, se marcan ahora los valores numéricos.

¿Como guardar los mapas?

El Grads nos ayuda también en esto. Una vez generado el mapa, introducimos la siguiente expresión:

ga-> printim /home/alex/Desktop/xxxx.jpg

Donde xxxx es el nombre que queráis generar en la imagen. Pero no todo acaba aquí, vamos a ver un ejemplo de la potencia del Grads. Introducimos los siguientes comandos

ga-> clear
ga-> d tmpprs
Contouring: 285 to 293 interval 1

Temperatura al nivel de 1000 hPa en la escala Kelvin.

Nos da la temperatura en grados Kelvin del nivel antes indicado (1000 hPa).

Para pasar la temperatura a grados Celcius, basta con restar 273,16 grados.

ga-> clear
ga-> d tmpprs – 273.16
Contouring: 12 to 20 interval 1

Temperatura al nivel de 1000 hPa en la escala Celsius o Centígrada.

Con esto, podemos generar todas las variables y cálculos sobre las variables que queramos.

En el próximo trabajo, se tratarán temas como plotear salidas para diferentes alturas, como utilizar Grib’s no solo como análisis, sino como previsión (Salidas hasta 384 horas), cortes verticales, etc.

Un saludo, para cualquier duda,

sinner@catmeteo.com

http://meteoviladecans.ar.nu

Bibliografia:

Página oficial del proyecto Grads
http://www.iges.org/grads

Servidor del modelo numérico del NOAA (GFS-AVN)
NOMADS: NCEP server 5


Utilidad del NOAA Grib2tcl

http://www.cpc.ncep.noaa.gov/products/wesley/grib2ctl.html

5 pensamientos en “Mapas del modelo GFS hechos a medida

  1. Amides

    Al pasar de los anios vuelvo a esta pagina sin recordar siquiera que habia estado por aca hace mucho tiempo, mi respuesta nunca vino pero ahora se que si se puede usar este programa para muchas cosas, les dejo mi web con salidas de grads: http://www.eswrf.tk saludos!

  2. Alcides

    Hola, debido al interés sobre el tema de dasarrollo de este modelo quisiera realizar la siguiente pregunta:para generar sobre una región especifica o específicamente sobre Sudamérica que grados se debe considerar o parámetro para emitir la información en una pagina especifica y como hago para enlazar con dicha pagina, agradecería su repuestas, Gracias

  3. cay

    Hola, ahora que se han publicado el modelo numérico de hirlam con aemet, nos podrías enseñar como usarlos con grads. El problema que la gente como yo nos encontramos es que tiene un grid1 y que este tiene dos valores “nxny 246768 50158″. En gradsusr.org nos encontramos este mensaje:
    http://gradsusr.org/pipermail/gradsusr/2010-December/012008.html

    que nos dice que tenemos que pasar de grid1 a grid2. Buscando por ahí he encontrado el cnvgrid pero no me permite pasar a grid2 desde el de hirlam y si desde cualquier otro grid1.

    ¿Has conseguido modelizar el hirlam con grads?
    Gracias y un saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>