SlideShare una empresa de Scribd logo
1 de 94
Descargar para leer sin conexión
PRACTICUM: EL MODELO
WRF-CAMX
INFORME FINAL
Jorge Moreno Palenzuela
Laboratorio de Medio Ambiente, ETSIInf UPM
Grado en Matemáticas e Informática
Escuela Técnica Superior de Ingenieros Informáticos (ETSIInf)
Universidad Politécnica de Madrid
Contenido
1. Introducción.......................................................................................................................... 2
1.1 Resumen.............................................................................................................................. 2
1.2 Datos del alumno ................................................................................................................ 2
1.3 Datos del Centro.................................................................................................................. 2
2. Descripción de las tareas....................................................................................................... 3
2.1 Tareas Propuestas............................................................................................................... 3
2.2 Instalación de las herramientas necesarias ........................................................................ 5
2.3 Preparación de los datos para la ejecución del WRF. Ejecución de WPS............................ 6
2.4 Ejecución del modelo WRF y visualización de los datos obtenidos .................................... 8
2.5 Visualización de la salida del WRF..................................................................................... 20
2.6 Compilación del modelo CAMx......................................................................................... 22
2.7 Obtención del input para CAMx e instalación de pre-procesadores ................................ 22
2.8 Obtención de las emisiones para el CAMx........................................................................ 24
2.9 Ejecución del CAMx........................................................................................................... 36
2.10 Visualización de los archivos del CAMx........................................................................... 42
2.11 Resultados obtenidos...................................................................................................... 43
3. Conclusión........................................................................................................................... 62
4. Diario de la actividad realizada ........................................................................................... 63
5. Referencias y enlaces de interés......................................................................................... 85
Anexo A: Código de calcula_emis.c............................................................................................. 86
1. Introducción
1.1 Resumen
En el presente documento se analiza el trabajo realizado como becario en el
Laboratorio de Medio Ambiente (LMA) de la Escuela Técnica Superior de Ingenieros
Informáticos (ETSIINF) de la Universidad Politécnica de Madrid, como parte de la
asignatura de Prácticum perteneciente al 7º semestre del Grado de Matemáticas e
Informática impartido en el mismo centro. A través de él, se describirán tareas
realizadas en esta entidad, y se tratará de hacer una evaluación de éstas. Para ello, se
valorará el uso de conocimientos adquiridos durante la carrera en la resolución de los
problemas planteados, así como las aportaciones que estas tareas hayan supuesto en
materia de aprendizaje.
El presente es un informe final de la asignatura. En él se plasma el trabajo
realizado en el centro especificado desde el 2 de septiembre de 2011, fecha de inicio
de las prácticas, hasta el 16 de diciembre, fecha de entrega de este informe, siguiendo
el esquema y las pautas dictadas en la página web de la asignatura, que se puede
encontrar al final del documento.
1.2 Datos del alumno
Nombre: Jorge Moreno Palenzuela
Matrícula: u12m008
Estudios: Grado en Matemáticas e Informática
Curso: 4º
Universidad: Universidad Politécnica de Madrid
Centro: ETSIInf
Tutor académico: Roberto San José
1.3 Datos del Centro
Unidad de acogida: Grupo de modelos y software para el medioambiente
Ubicación: Laboratorio Medio Ambiente, ETSIInf (UPM), Campus de Montegancedo
Tutor profesional: Juan Luis Pérez Camaño
2. Descripción de las tareas
2.1 Tareas Propuestas
El trabajo propuesto durante el periodo de Prácticum consiste en realizar simulaciones
tanto de las condiciones atmosféricas como de la calidad del aire en un determinado dominio.
El objetivo final es el de simular la evolución de estas condiciones (atmosféricas y de
contaminación) a lo largo de un periodo de un año entero (el año 2011) en un dominio que
abarcará la Península Ibérica y sus alrededores. Para ello, haremos uso de dos modelos
bastante importantes en la actualidad: el modelo climatológico WRF y el modelo de calidad del
aire CAMx.
El modelo WRF (Weather Research and Forecasting) es un sistema de predicción
numérica del clima, diseñado para servir tanto a la predicción operativa como al estudio de la
atmósfera en dominios que pueden ir desde pocos metros hasta miles de kilómetros de
tamaño. El esfuerzo para desarrollar esta herramienta empezó en la última década del siglo
XX, como fruto de una colaboración entre entidades como NCAR, NCEP, FSL, AFWA, FAA entre
otros. Tiene más de 25.000 usuarios registrados en 154 países diferentes y es, sin duda, el
modelo atmosférico en uso más popular hoy en día. Su código está escrito en Fortran 90 en su
totalidad y es completamente libre, sin restricciones en su modificación. Este modelo es el
sucesor del modelo MM5.
El otro modelo que usaremos, el CAMx (Comprehensive Air quality Model with
eXtensions), se encargará de medir la calidad de aire de nuestro dominio. Este modelo es un
modelo euleriano de dispersión fotoquímica que permite realizar evaluaciones de la
contaminación del aire troposférico (ozono, partículas, sustancias tóxicas del aire y mercurio)
en un determinado dominio que puede abarcar desde un barrio hasta un continente. A este
modelo se le puede suministrar como input datos meteorológicos obtenidos de distintos
modelos de predicción de clima (en nuestro caso obtenidos mediante el modelo WRF, aunque
también se le podrían pasar de modelos como el MM5 y el RAMS) y datos de emisiones
obtenidos desde distintos procesadores de emisiones (como SMOKE, CONCEPT, EPS y EMS,
aunque en nuestro caso las emisiones estarán obtenidas con el modelo EMIMO, diseñado por
esta universidad, y que ya habrá sido corrido previamente).
Así pues, la tarea a realizar será por lo tanto hacer primero una simulación de las
condiciones climatológicas con el modelo WRF para, más adelante, poder usarlas como
entrada cuando se ejecute el modelo de calidad del aire CAMx. Para llevar a cabo esta tarea, el
proceso que se deberá llevar a cabo será el siguiente:
1. Descargar y compilar las librerías necesarias para el funcionamiento de nuestros
modelos (librerías netcdf, …
2. Descargar y compilar tanto el modelo WRF como su sistema de pre-procesamiento
(WPS o WRF Pre-processing System).
3. Descargar y compilar el modelo CAMx de calidad del aire.
4. Descargar y compilar todos los programas de pre-procesamiento y post-
procesamiento que necesitamos para el desempeño de nuestras tareas. Esto
incluye programas como el WRFCAMx para convertir la salida del WRF en input
para el CAMx, programas para obtener la input restante necesaria para los
modelos, o post-procesadores que nos ayudarán a visualizar los datos obtenidos.
5. Configurar los modelos para que funcionen con nuestro dominio y en el periodo de
tiempo que deseemos.
6. Obtener los archivos de entrada necesarios para el WRF para poder ejecutarse en
el dominio deseado y en las fechas deseadas.
7. Ejecutar el modelo WRF, obteniendo como salida los archivos que contendrán los
datos atmosféricos del dominio en la fecha deseada.
8. Visualizar los datos obtenidos con una herramienta adecuada. Comparar estos
datos con los obtenidos por las distintas estaciones meteorológicas y, en el caso de
que no sean del todo correctos, modificar los parámetros del modelo y volver a
ejecutarlo hasta que los datos sean fiables.
9. Una vez obtenidas las condiciones atmosféricas correctas en nuestro dominio,
pasarlas por el WRFCAMx para convertirlas en archivos input para el CAMx.
10. Manipular los datos de emisiones de los que se dispone (del año 2011) para poder
pasárselos al CAMx con el formato correcto.
11. Obtener los distintos archivos de entrada que, junto a los datos meteorológicos
obtenidos con el WRF y a los datos de emisiones, se deben pasar al CAMx para su
funcionamiento.
12. Ejecutar el modelo CAMx para obtener los datos de concentración de especies
químicas en el dominio deseado durante el año 2011.
13. Visualizar los datos obtenidos con una herramienta adecuada. Comparar estos
datos con los obtenidos con los conocidos y, en el caso de que no sean correctos,
modificar los parámetros del modelo y volver a ejecutarlo hasta que los datos sean
fiables.
14. Sacar conclusiones de los datos obtenidos tanto por el WRF como por el CAMx.
Como se ha mencionado antes, el periodo de tiempo que deberán abarcar nuestras
simulaciones como objetivo es el del año 2011. Para este año deberemos realizar los cálculos
pertinentes en cada uno de nuestros dominios. Los dominios en los que debemos realizar la
simulación son 2, ambos centrados en Madrid: uno más grande, que abarca una superficie de
2.000 x 2.000 kilómetros con una resolución (tamaño de celdilla) de 25 x 25 kilómetros, y uno
más pequeño, contenido en el anterior, de un tamaño de 400 x 400 kilómetros, con una
resolución de 5 x 5 kilómetros. Una aproximación gráfica de nuestro dominio sería la que se
aprecia en la siguiente imagen:
A continuación, se detallan cada una de las tareas llevadas a cabo durante el periodo
de duración del Practicum.
2.2 Instalación de las herramientas necesarias
Como hemos mencionado, será necesario descargar y compilar no solo nuestros dos
modelos principales (WRF y CAMx), si no toda una serie de herramientas que nos serán
necesarias para su funcionamiento o para la realización de tareas adicionales. Así pues, a
continuación se muestran los pasos seguidos en cuanto a la instalación de estas herramientas
necesarias:
Instalación de librerías necesarias:
Para poder compilar y hacer funcionar nuestros programas estos requieren de
funciones que pertenecen a librerías externas, por lo que tendremos que compilar estas
librerías antes. Cabe destacar que para la compilación de estas librerías y, en general, para la
compilación de todas las herramientas, necesitaremos disponer de compiladores tanto de C
como de Fortran. En nuestro caso usaremos el compilador gcc para C y el compilador gfortran
(y en algunos casos ifort, de Intel) para Fortran. Estos compiladores ya se encuentran en
nuestra máquina, pero si no fuera así habría que instalarlos primero. Es muy importante para
el correcto funcionamiento de nuestras herramientas que los compiladores de C y Fortran que
se usen sean los mismos para las diferentes librerías y programas. La instalación de estas
librerías se basa en la creación de determinadas variables de entorno y la ejecución de sus
ficheros Makefile una vez seleccionada la configuración.
Así pues, las librerías que he instalado son las siguientes:
- NetCDF: Instalé una versión especial de esta librería que combinaba
directamente NetCDF para C y NetCDF para Fortran (normalmente vienen
separados y hay que ocuparse de instalar ambos). Esta librería es siempre
necesaria.
- zlib, libpng y JasPer: Estas librerías de compresión son necesarias si queremos
que el WPS (WRF Pre-Processing System) admita archivos del tipo GRIB2. En
nuestro caso sí haremos uso de estos archivos, con lo que se hace necesario la
instalación de estas librerías.
- MPICH: En un principio instalamos está librería, necesaria para correr el
modelo en paralelo, por si en un futuro queremos ejecutarlo así, aunque de
momento no es nuestro caso.
- IOAPI: Esta librería no es necesaria ni para correr los modelos WRF y CAMx ni
las demás herramientas. Se instaló porque permite la instalación de
herramientas que pueden servir para la visualización de los resultados del
CAMx y para compartir los ficheros obtenidos con los obtenidos por mi
compañero de prácticas, que usa archivos con distinto formato.
Compilación del WRF y del WPS
Una vez instaladas las librerías necesarias, estamos listos para compilar estas dos
herramientas. Primero compilaremos el WRF, que es el modelo propiamente dicho, para luego
compilar su sistema de pre-procesamiento, o WPS (necesario dado que vamos a ejecutar casos
reales, no idealizados). Para ello, lo primero será descargar y descomprimir ambas
herramientas (descargamos la última versión de ambas).
Para compilar el WRF, primero deberemos ejecutar el archivo configure, que nos
pedirá seleccionar los compiladores que queremos usar (nosotros usaremos gcc y gfortran) y el
tipo de nesting que queremos que haya en nuestra simulación (aquí seleccionamos que sea de
tipo básico). Una vez hecha esta selección, podemos ejecutar el archivo compile, pasándole
como parámetro el tipo de caso que queremos simular (en nuestro caso simulamos casos
reales así que le pasamos la opción em_real) para proceder a la compilación del WRF (un
proceso que puede llevar hasta 20-30 minutos). Con esto, se nos habrán creado los ficheros
ejecutables correspondientes.
La compilación del WPS es similar a la del WRF. Ejecutamos configure, haciendo la
selección de nuestros compiladores, que son los mismo que antes, y luego ejecutamos el
fichero compile para obtener los distintos ejecutables que componen el WPS (geogrid.exe,
ungrib.exe y metgrid.exe).
Tras estas instalaciones ya podemos empezar a preparar nuestra simulación
meteorológica.
2.3 Preparación de los datos para la ejecución del WRF. Ejecución de WPS.
Ya disponemos de todas las herramientas necesarias para poder realizar una de las
simulaciones que tenemos como objetivo, la simulación de las condiciones climatológicas en
nuestro dominio. Para realizar la simulación de calidad del aire será necesario la instalación de
alguna herramienta más, además de la del CAMx.
Así pues, para poder empezar con la simulación lo siguiente que hará falta es obtener
los datos de la realidad que el modelo necesita para poder ejecutarse. Estos datos serán de
dos tipos:
- Datos geográficos: Contienen la información física del terreno de todo el globo
terrestre, que será la misma para cualquier fecha en la que queramos realizar la
simulación. Descargaremos estos datos de la página oficial del WRF.
- Datos meteorológicos reales: Son los datos obtenidos a través de las estaciones
meteorológicas de todo el mundo. Contienen los datos de precipitaciones,
temperaturas, y demás variables climatológicas. Se producen 4 ficheros de este tipo al
día, con los datos obtenidos a las 0h, a las 6h, a las 12h y a las 18h. Las fechas de estos
ficheros deberán coincidir con la fecha en que se produce nuestra simulación, siendo
necesario disponer de todos los ficheros que coincidan con nuestra simulación, por lo
que nosotros descargaremos todos los correspondientes al año 2011. Por mi parte, los
archivos que he seleccionado son archivos de tipo GRIB2 de la NCEP FNL, que
almacena archivos de datos desde 1999 hasta día de hoy.
Una vez descargados estos datos será el WPS el encargado de trabajar con ellos para
obtener ficheros input que puedan ser suministrados al WRF para realizar la simulación.
Para ello, deberemos ejecutar el WPS sobre los datos obtenidos, lo que consistirá en la
ejecución secuencial de los 3 archivos que hemos visto que componen el WPS
(geogrid.exe, ungrib.exe y metgrid.exe). Lo primero será configurar el WPS para que
funcione de acuerdo a nuestro dominio. Para ello, será necesario modificar el fichero
dentro de la carpeta del WPS llamado namelist.wps, que contendrá todos los parámetros
que el WPS mira a la hora de ejecutarse. El contenido de este fichero para funcionar en
nuestra localización geográfica y temporal es el siguiente:
&share
wrf_core = 'ARW',
max_dom = 2,
start_date = '2011-01-01_00:00:00','2011-01-01_00:00:00',
end_date = '2011-12-31_00:00:00','2011-12-31_00:00:00',
interval_seconds = 21600
io_form_geogrid = 2,
/
&geogrid
parent_id = 1, 1,
parent_grid_ratio = 1, 5, //ratio de resolución entre ambos dominios
i_parent_start = 1, 33,
j_parent_start = 1, 33,
e_we = 81, 81,
e_sn = 81, 81,
geog_data_res = '10m','2m',
dx = 25000,
dy = 25000,
map_proj = 'lambert',
ref_lat = 40.50,
ref_lon = -03.93,
truelat1 = 50.0,
truelat2 = 20.0,
stand_lon = -03.93,
geog_data_path = '/home/mi2/Build_WRF/WPS_GEOG/'
/
&ungrib
out_format = 'WPS',
prefix = 'FILE',
/
&metgrid
fg_name = 'FILE'
io_form_metgrid = 2,
/
Esta información contiene tanto coordenadas reales de nuestro dominio (latitud y
longitud del centro entre otros) como la información de nuestras rejillas de celdas de la
simulación. Los valores anteriores significan que nuestro dominio grande consta de 81x81
celdillas de 25 km de tamaño (cada lado de nuestro dominio es de 2.000 km = 25
km/celdilla * 80 celdillas, pero para que funcione correctamente más adelante debemos
pasar 81 celdillas) y el dominio pequeño tiene una resolución 5 veces mayor (ratio
respecto al padre = 5) y está compuesto por 81x81 celdillas de 5km de resolución (400 km
= 5 km/celdilla * 80 celdillas, pero también aquí es necesario pasar 81), además de estar
situado en el centro del dominio grande, lo cual se consigue indicando que el dominio
pequeño empieza en la celdilla (33,33) del padre que hemos calculado (aquí se tuvo que
hacer una rectificación, ya que anteriormente, por problemas derivados de la forma en la
que se hace la selección de la casilla inicial en distintos modelos, se seleccionó como
celdilla inicial la celdilla (32,32), lo que hacía que nuestro dominio no estuviera del todo
centrado).
Una vez están configurados todos los parámetros, ejecutamos las distintas partes del
WPS:
- Primero ejecutamos el geogrid.exe, que se encargará de procesar los archivos
geográficos descargados anteriormente.
- Después ejecutamos ungrib.exe, que hará lo propio con los archivos meteorológicos.
- Una vez ejecutados los programas anteriores, ejecutamos metgrid.exe para que
interpole entre los ficheros resultantes de las ejecuciones de estos dos programas,
dando como resultado los ficheros finales que pasaremos al WRF.
2.4 Ejecución del modelo WRF y visualización de los datos obtenidos
Una vez se ha ejecutado el WPS y obtenido los ficheros de entrada del WRF, ya
estamos listos para ejecutar el modelo. Para ello, primero debemos configurar los parámetros
de nuestra simulación de igual manera que hemos hecho anteriormente para el WPS,
cambiando estos parámetros en un fichero que esta vez se llama namelist.input. La
configuración de estos parámetros es importante no solo porque haya que ajustarlos para que
el modelo sea capaz de ejecutarse correctamente sin producir ningún fallo, sino porque
dependiendo de las opciones que elijamos para los diferentes parámetros de física, dinámica o
demás aspectos, estaremos ejecutando el modelo de forma bastante distinta a como se
ejecutaría si eligiéramos otros parámetros diferentes, lo que hará que el resultado final de
nuestra simulación varíe bastante también según como configuremos estos parámetros. Es por
esto que dos personas que se dediquen a simular una misma zona durante el mismo periodo
de tempo no vayan a obtener seguramente el mismo resultado, a pesar de que utilicen la
misma herramienta de simulación en nuestro caso el WRF (no hablemos ya si utilizan
herramientas distintas).
Por todo esto la configuración de estos parámetros es tan importante, porque
dependiendo de ésta el resultado que obtendremos se ajustará más o menos a la realidad.
Esta es la parte principal de nuestro trabajo, que consiste en encontrar la configuración que
mejor resultados dé en nuestro caso particular. Para encontrar esta configuración idónea, el
procedimiento que debemos seguir no es otro que el de “prueba y error”, haciendo distintas
simulaciones de un mismo periodo cambiando un solo parámetro cada vez para poder
comparar y decidir poco a poco qué combinación de opciones es la que sale mejor parada.
Bastantes parámetros serán iguales para todas las simulaciones de “prueba y error”
que realizamos, como todos aquellos que se encarguen de ajustar la fecha y la localización de
nuestro dominio, así que los que intentaremos cambiar serán los demás. Los parámetros que
he ido modificando y ajustando para intentar obtener la mejor simulación posible se listan a
continuación, junto con los valores que pueden tomar y el significado de cada valor. Estos
datos están extraídos directamente de la guía de usuario del WRF, concretamente del capítulo
5, que se encuentra en la siguiente página:
http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap5.htm#Nml
En la página anterior podemos encontrar una tabla con todas las variables distintas
que se pueden modificar en este apartado. A continuación se muestran solamente las que
especificamos en nuestro fichero namelist.input, que serán aquellas que probemos a
modificar. Cabe destacar que, aunque hemos elegido al final los valores que estas variables
toman, no hemos elegido cuales de todas las variables que aparecen en la página anterior
especificamos para nuestra simulación, sino que hemos modificado las variables que aparecían
en nuestro fichero namelist.input por defecto.
La tabla de las variables que usamos es la siguiente. Se compone de 3 columnas, donde
la primera especifica el nombre de la variable, la segunda recoge los valores posibles de la
variable o el valor por defecto de ésta, según si la variable requiera una opción o un valor
numérico, y la tercera es una breve descripción del significado de cada valor para dicha
variable.
Variable Valor Descripción
mp_physics
(max_dom)
0 (default) no microphysics
1 Kessler scheme
2 Lin et al. scheme
3 WSM 3-class simple ice scheme
4 WSM 5-class scheme
5 Ferrier (new Eta) microphysics, operational High-Resolution
Window
6 WSM 6-class graupel scheme
7 Goddard GCE scheme (also
usesgsfcgce_hail and gsfcgce_2ice)
8 Thompson graupel scheme (2-moment scheme in V3.1)
9 Milbrandt-Yau 2-moment scheme
10 Morrison 2-moment scheme
11 CAM 5.1 5-class scheme
13 SBU_YLin, 5-class scheme
14 WRF double moment, 5-class scheme
16 WRF double moment, 6-class scheme
17 NSSL 2-moment 4-ice scheme (steady background CCN)
18 NSSL 2-moment 4-ice scheme with predicted CCN (better
for idealized than real cases); to set a global CCN value,
usenssl_cccn = 0.7e9 (CCN for NSSL scheme
18). Also sets same value to ccn_conc for mp_physics =
18.
19 NSSL 1-moment, 6-class scheme
21 NSSL-LFO 1-moment, 6-class; very similar to Gilmore et al.
2004; can set intercepts and particle densities in physics
namelist, e.g., nssl_cnor for NSSL 1-moment schemes,
intercept and particle densities can be set for snow,
graupel, hail, and rain. For the 1- and 2-moment schemes,
the shape parameters for graupel and hail can be
set. See/WRFV3/run/README.namelist file for
specifics
28 aerosol-aware Thompson scheme with water- and ice-
friendly aerosol climatology (new for V3.6); this option has 2
climatological aerosol input options: use_aero_icbs = .F.
(use constant values), and use_aero_icbc = .T. (use input
from WPS)
30 HUJI (Hebrew University of Jerusalem, Israel) spectral bin
microphysics, fast version
32 HUJI spectral bin microphysics, full version
95 Ferrier (old Eta), operational NAM (WRF NMM)
98 Thompson scheme in V3.0
ra_lw_physics
(max_dom)
0 (default) no longwave radiation
1 rrtm scheme
(Default values for GHG in V3.5: co2vmr=379.e-6,
n2ovmr=319.e-9, ch4vmr=1774.e-9; Values used in previous
versions: co2vmr=330.e-6, n2ovmr=0., ch4vmr=0.)
3 CAM scheme
*Note: restart must be at 6-hourly interval; also
requires levsiz, paerlev, cam_abs_dim1(2);
see below
4 rrtmg scheme
(Default values for GHG in V3.5: co2vmr=379.e-6,
n2ovmr=319.e-9, ch4vmr=1774.e-9)
24 fast rrtmg scheme for GPU and MIC
5 Goddard scheme
7 FLG (UCLA) scheme
31 Earth Held-Suarez forcing
99 GFDL (Eta) longwave (semi-supported); also must
use co2tf = 1 for ARW
ra_sw_physics
(max_dom)
0 (default) no shortwave radiation
1 Dudhia scheme (ptop > 50 mb)
2 (old) Goddard shortwave scheme
3 CAM scheme (restart must be at 6-hourly interval); must
set levsiz, paerlev, cam_abs_dim1/2
4 rrtmg scheme
24 fast rrtmg scheme for GPU and MIC
5 Goddard scheme
7 FLG (UCLA) scheme
99 GFDL (Eta) longwave (semi-supported); must use co2tf =
1 for ARW
radt (max_dom) 30 minutes between radiation physics calls. Recommended 1
minute per km of dx (e.g. 10 for 10 km grid); use the same
value for all nests
sf_sfclay_physics
(max_dom)
surface layer option
0 (default) no surface-layer
1 Revised MM5 Monin-Obukhov scheme (Jimenez, renamed
in v3.6)
2 Monin-Obukhov (Janjic Eta) scheme
3 NCEP GFS scheme (NMM only)
4 QNSE
5 MYNN
7 Pleim-Xiu (ARW only), only tested with Pleim-Xiu surface
and ACM2 PBL
10 TEMF (ARW only)
91 old MM5 surface layer scheme (previously option 1)
switch to control land thermal roughness length
0 (default) old, or non-vegetation dependent thermal
roughness length over land
1 veg dependent Chen-Zhang Czil
sf_surface_physics
(max_dom)
land-surface option (set this before runningreal.exe; also
make surenum_soil_layers is set correctly)
0 (default) no surface temp prediction
1 thermal diffusion scheme
2 unified Noah land-surface model
3 RUC land-surface model
4 Noah-MP land-surface model (additional options under
the &noah_mp section)
5 CLM4 (Community Land Model Version 4)
7 Pleim-Xiu scheme (ARW only)
8 SSiB land-surface model (ARW only). Works
with ra_lw_physics = 1, 3, or 4,
and ra_sw_physics = 1, 3, or 4
sf_urban_physics activate urban canopy model (in Noah LSM only)
0 (default) off
1 Single-layer, UCM
2 Multi-layer, Building Environment Parameterization (BEP)
scheme (works only with the MYJ and BouLac PBL)
3 Multi-layer, Building Environment Model (BEM) scheme
(works only with MYJ and BouLac PBL)
num_soil_layers number of soil layers in land surface model (set before
running real.exe)
5 (default) thermal diffusion scheme for temp only
4 Noah land-surface model
6 RUC land-surface model
10 CLM4 land-surface model
2 Pleim-Xu land-surface model
3 SSiB land-surface model
bl_pbl_physics
(max_dom)
boundary layer option
0 (default) no boundary-layer
1 YSU scheme; use sf_sfclay_physics =1
2 Mellor-Yamada-Janjic (Eta) TKE scheme;
use sf_sfclay_physics=2
3 NCEP GFS scheme (NMM only); use
sf_sfclay_physics=3
4 QNSE-EDMF; use sf_sfclay_physics=4
5 MYNN 2.5 level TKE; use sf_sfclay_physics=1,
2, or 5
6 MYNN 3rd level TKE; use sf_sfclay_physics=5
7 ACM2 (Pleim) scheme (ARW only); use
sf_sfclay_physics=1 or 7
8 Bougeault and Lacarrere (BouLac) TKE;
use sf_sfclay_physics=1 or 2
9 Bretherton-Park/UW TKE scheme; use
sf_sfclay_physics=1 or 2
10 TEMF scheme (ARW only);
use sf_sfclay_physics=10
11 Shin-Hong 'scale-aware' PBL scheme
12 GBM TKE-type scheme (ARW only);
use sf_sfclay_physics=1
99 MRF scheme (to be removed in the future)
cu_physics
(max_dom)
cumulus parameterization option
0 (default) no cumulus parameterization
1 Kain-Fritsch (new Eta) scheme
2 Betts-Miller-Janjic scheme
3 Grell-Freitas ensemble scheme
4 Old GFS Simplified Arakawa-Schubert (SAS)
5 New Grell scheme (G3)
6 Tiedtke scheme (ARW only)
7 Zhang-McFarlane from CESM (works with MYJ and UW PBL)
11 Multi-scale Kain-Fritsch scheme
14 New GFS SAS from YSU (ARW only)
16 A newer Tiedke scheme
84 New SAS (HWRF)
93 Grell-Devenyi ensemble scheme
99 previous Kain-Fritsch scheme
cudt 0 minutes between cumulus physics calls; should be set to 0
when using allcu_physics except Kain-Fritsch (0 = call
every time step)
isfflx heat and moisture fluxes from the surface for real-data
cases and when a PBL is used (only works
withsf_sfclay_physics=1, 5, 7, or 11)
1 = fluxes are on
0 = fluxes are off
It also controls surface fluxes when diff_opt = 2 and
km_opt = 3, and a PBL isn’t used
0 = constant fluxes defined
bytke_drag_coefficient andtke_heat_flux
1 = use model-computed u* and heat and moisture fluxes
2 = use model-computed u* and specified heat flux
by tke_heat_flux
ifsnow snow-cover effects (only works
forsf_surface_physics=1)
1 (default) with snow-cover effect
0 without snow-cover effect
icloud (default) cloud effect to the optical depth in radiation (only
works
withra_sw_physics=1,4 andra_lw_physics=1,4);
since V3.6 this also controls the cloud fraction options
1 (default) with cloud effect, and use cloud fraction option 1
(Xu-Randall mehod)
0 without cloud effect
2 with cloud effect, and use cloud fraction option 2, 0/1 based
on threshold
3 with cloud effect, and use cloud fraction option 3, a
Sundqvist method (Sundqvist et al. 1989)
surface_input_source where landuse and soil category data come from
1 (default) WPS/geogrid, but with dominant categories
recomputed in real
2 GRIB data from another model (only if arrays
VEGCAT/SOILCAT exist)
3 use dominant land and soil categories from WPS/geogrid
w_damping vertical velocity damping flag (for operational use)
0 (default) no damping
1 with damping
diff_opt (max_dom) turbulence and mixing option
0 no turbulence or explicit spatial numerical filters (km_opt is
ignored)
1 (default) evaluates 2nd order diffusion term on coordinate
surfaces, uses kvdif for vertical diffusion unless PBL option is
used, may be used withkm_opt = 1 (recommended for
real-data case) and 4
2 evaluates mixing terms in physical space (stress form)
(x,y,z); turbulence parameterization is chosen by
specifying km_opt
km_opt (max_dom) eddy coefficient option
1 (default) constant (use khdif and kvdif)
2 1.5 order TKE closure (3D) ** Not recommended for DX > 2
km
3 Smagorinsky first order closure (3D) **Not recommended
for DX > 2 km
4 horizontal Smagorinsky first order closure (recommended
for real-data case)
diff_6th_opt
(max_dom)
6th-order numerical diffusion
0 (default) no 6th-order diffusion
1 6th-order numerical diffusion
2 6th-order numerical diffusion, but prohibit up-gradient
diffusion
diff_6th_factor 0.12 6th-order numerical diffusion non-dimensional rate (max
value 1.0 corresponds to complete removal of 2dx wave in
one timestep)
damp_opt upper-level damping flag
0 (default) no damping
1 with diffusive damping; maybe used for real-data cases
(dampcoef nondimensional ~ 0.01 to 0.1)
2 with Rayleigh damping (dampcoef inverse time scale
[1/s], e.g. 0.003)
3 with Rayleigh damping (dampcoef inverse time scale [1/s],
e.g. 0.2; for real-data cases)
base_temp 290 base state temperature (K); real only
damp_opt upper-level damping flag
0 (default) no damping
1 with diffusive damping; maybe used for real-data cases
(dampcoef nondimensional ~ 0.01 to 0.1)
2 with Rayleigh damping (dampcoef inverse time scale
[1/s], e.g. 0.003)
3 with Rayleigh damping (dampcoef inverse time scale [1/s],
e.g. 0.2; for real-data cases)
zdamp (max_dom) 5000 damping depth (m) from model top
dampcoef
(max_dom)
0 damping coefficient (see damp_opt)
khdif (max_dom) 0 horizontal diffusion constant (m2
/s)
kvdif (max_dom) 0 vertical diffusion constant (m2
/s)
non-hydrostatic
(max_dom)
.true. (default) running the model in non-hydrostatic mode
moist_adv_opt
(max_dom)
advection options for moisture
0 simple
1 (default) positive-definite
2 monotonic
3 5th-order WENO (Weighted Essentially Non-Oscillatory)
4 5th-order WENO with positive definite
scalar_adv_opt
(max_dom)
advection options for scalars
0 simple
1 (default) positive-definite
2 monotonic
3 5th-order WENO
4 5th-order WENO with positive definite
Como hemos visto, todas estas variables aparecían en nuestro fichero namelist.input
inicialmente; no hemos incluido nuevos parámetros. Los valores que estas variables tenían por
defecto en nuestro fichero eran los siguientes:
&physics
mp_physics = 3, 3, 3,
ra_lw_physics = 1, 1, 1,
ra_sw_physics = 1, 1, 1,
radt = 30, 30, 30,
sf_sfclay_physics = 1, 1, 1,
sf_surface_physics = 2, 2, 2,
bl_pbl_physics = 1, 1, 1,
bldt = 0, 0, 0,
cu_physics = 1, 1, 0,
cudt = 5, 5, 5,
isfflx = 1,
ifsnow = 1,
icloud = 1,
surface_input_source = 1,
num_soil_layers = 4,
sf_urban_physics = 0, 0, 0,
&dynamics
w_damping = 0,
diff_opt = 1, 1, 1,
km_opt = 4, 4, 4,
diff_6th_opt = 0, 0, 0,
diff_6th_factor = 0.12, 0.12, 0.12,
base_temp = 290.
damp_opt = 0,
zdamp = 5000., 5000., 5000.,
dampcoef = 0.2, 0.2, 0.2
khdif = 0, 0, 0,
kvdif = 0, 0, 0,
non_hydrostatic = .true., .true., .true.,
moist_adv_opt = 1, 1, 1,
scalar_adv_opt = 1, 1, 1,
Para no modificar los valores de estas variables a ciegas, basándonos solamente en los
valores que podía coger cada una y haciendo “prueba y error” con cada uno de estos valores,
nos hemos guiado por las indicaciones que encontramos en el capítulo de la guía de usuario
del WRF del enlace anterior. En dicho capítulo se indica para cada variable cuáles son los
valores aconsejados según la naturaleza de la simulación, el tamaño de las celdillas o el tiempo
de simulación. Esto se complementa además con una muestra de configuraciones adecuadas
para varias simulaciones de ejemplo, las cuales también han sido de gran ayuda, dado que
había alguna cuyo dominio se asemejaba al nuestro.
Tras varias simulaciones de prueba, la configuración que elegí finalmente para simular
el año entero fue la siguiente:
&physics
mp_physics = 8, 8,
ra_lw_physics = 4, 4,
ra_sw_physics = 4, 4,
radt = 25, 25,
sf_sfclay_physics = 1, 1,
sf_surface_physics = 2, 2,
bl_pbl_physics = 1, 1,
bldt = 0, 0,
cu_physics = 3, 3,
cudt = 5, 5,
isfflx = 1,
ifsnow = 1,
icloud = 1,
surface_input_source = 1,
num_soil_layers = 4,
sf_urban_physics = 0, 0,
&dynamics
w_damping = 0,
diff_opt = 2, 2,
km_opt = 4, 4,
diff_6th_opt = 0, 0,
diff_6th_factor = 0.12, 0.12,
base_temp = 288.
damp_opt = 0,
zdamp = 5000., 5000.,
dampcoef = 0.2, 0.2,
khdif = 0, 0,
kvdif = 0, 0,
non_hydrostatic = .true., .true.,
moist_adv_opt = 1, 1,
scalar_adv_opt = 1, 1,
Una vez sabemos qué configuración vamos a usar para nuestra simulación, podemos
empezar a pensar en simular el año entero. Para ello tenemos que pensar la estrategia a seguir
primero: podemos simular el año entero de golpe o por periodos más cortos, como varios
meses o semanas. En mi caso he elegido simular periodos de un mes de largo, para poder
hacerlo de forma más organizada, y luego poder juntarlo todo. Así pues, cada vez que haga
una simulación se simulará un mes distinto, simulando algún día previo para intentar mejorar
las condiciones iniciales, aunque luego estos días previos se desecharán.
Varios factores a tener en cuenta para nuestra simulación tienen que ver con los
recursos de los que disponemos, tanto de espacio como de tiempo. Por un lado, nuestra
máquina dispone de un espacio de almacenamiento limitado, y tenemos que prestar atención
a que los datos de salida que obtenemos con el WRF, que suelen ocupar bastante, no superen
nuestras capacidades. Con respecto al tiempo, estas simulaciones llevan bastante en
completarse, por lo que hay que asegurarse de que se pueden completar antes de la fecha
límite, calculando el tiempo que necesitamos para simular el año entero.
Para estudiar el problema del almacenamiento de estos ficheros, observamos lo que
nos ocupa cada fichero de salida y, a partir de esto, intentamos calcular lo que nos ocuparía un
año de simulación:
- El tamaño del archivo de salida de 1 día de simulación en 1 dominio es de 414721872 B
= 405001,828125 KB = 395,5095977783203 MB
- Como los dos dominios tienen el mismo número de celdillas pesan lo mismo, luego el
tamaño total que ocupa 1 día de simulación es de 791,0191955566406 MB
- Calculando cuánto ocuparía 1 año de simulaciones nos sale: 791,0191955566406
MB/día * 365 días = 288722,0063781738 MB = 281,9550843536854 GB
Estos más de 280 GB contrastaban con los 150 GB de los que disponíamos en el
momento en el que se realizó en cálculo, por lo fue necesario buscar una solución. Finalmente
se optó por comprimir los ficheros de salida (utilizando el comando tar ), lo que reducía el
tamaño de estos archivos de forma significativa, hasta el punto de solventar nuestro problema.
Como nuestras simulaciones son de periodos de un mes de longitud, opté por reducir el
número de archivos comprimidos a uno por mes y por dominio, haciendo un total de 24
archivos comprimidos. Me hice scripts tanto para comprimir los archivos una vez finalizara la
simulación del mes como para que se extrajeran automáticamente en el momento en el que se
requirieran (para la visualización de estos o la conversión a formato del CAMx).
El tiempo que tardara en simularse un año entero era un factor a tener en cuenta no
solo por saber cuándo había que poner a simular el año para no pasarse de la fecha límite sino
también porque este factor se ve alterado en gran cantidad por diversos de los parámetros de
configuración que hemos visto anteriormente, por lo que había que hacer que esta
configuración se asemejara lo máximo posible a la realidad sin que la duración de la simulación
se fuera demasiado. Así pues, finalmente la decisión estuvo entre dos configuraciones
distintas, la primera más precisa pero también más larga que la segunda, necesitando un total
de 31 días para hacer la simulación de un año entero, frente a los 19 días que necesitaba la
otra configuración. Finalmente, opté por la más precisa, con fin de tener todos los datos finales
para la presentación oral a hacer en enero.
Así pues, una vez decididas todas las características de nuestra simulación, y tras haber
realizado bastantes simulaciones de prueba, podemos proceder a la simulación final, la que
nos dará los ficheros finales que presentaremos. Como hemos visto, hemos optado por simular
mes a mes, así que esta simulación en realidad se compondrá de 12 simulaciones distintas,
donde comenzaremos a simular una inmediatamente acabe la anterior, para no desperdiciar
tiempo de máquina.
El archivo namelist.input (que como hemos visto almacena todos los parámetros de la
simulación) deberá corresponder a la simulación del mes que queramos, y debemos cambiarlo
cada vez que queramos simular un nuevo mes. Un ejemplo de este archivo, adaptado para
simular el mes de septiembre, sería el siguiente:
&time_control
run_days = 32,
run_hours = 0,
run_minutes = 0,
run_seconds = 0,
start_year = 2011, 2011, 2011,
start_month = 08, 08, 05,
start_day = 31, 31, 31,
start_hour = 00, 00, 00,
start_minute = 00, 00, 00,
start_second = 00, 00, 00,
end_year = 2011, 2011, 2011,
end_month = 10, 10, 05,
end_day = 02, 02, 02,
end_hour = 00, 00, 00,
end_minute = 00, 00, 00,
end_second = 00, 00, 00,
interval_seconds = 21600
input_from_file = .true.,.true.,.true.,
history_interval = 60, 60, 60,
frames_per_outfile = 24, 24, 24,
restart = .false.,
restart_interval = 1440,
io_form_history = 2
io_form_restart = 2
io_form_input = 2
io_form_boundary = 2
debug_level = 0
/
&domains
time_step = 150,
time_step_fract_num = 0,
time_step_fract_den = 1,
max_dom = 2,
e_we = 81, 81, 25,
e_sn = 81, 81, 25,
e_vert = 30, 30, 30,
p_top_requested = 5000,
num_metgrid_levels = 27,
num_metgrid_soil_levels = 4,
dx = 25000, 5000, 1000,
dy = 25000, 5000, 1000,
grid_id = 1, 2, 3,
parent_id = 0, 1, 2,
i_parent_start = 1, 33, 46,
j_parent_start = 1, 33, 46,
parent_grid_ratio = 1, 5, 3,
parent_time_step_ratio = 1, 3, 3,
feedback = 1,
smooth_option = 0
/
&physics
mp_physics = 8, 8, 3,
ra_lw_physics = 4, 4, 1,
ra_sw_physics = 4, 4, 1,
radt = 25, 25, 25,
sf_sfclay_physics = 1, 1, 1,
sf_surface_physics = 2, 2, 2,
bl_pbl_physics = 1, 1, 1,
bldt = 0, 0, 0,
cu_physics = 3, 3, 0,
cudt = 5, 5, 5,
isfflx = 1,
ifsnow = 1,
icloud = 1,
surface_input_source = 1,
num_soil_layers = 4,
sf_urban_physics = 0, 0, 0,
/
&fdda
/
&dynamics
w_damping = 0,
diff_opt = 2, 2, 1,
km_opt = 4, 4, 4,
diff_6th_opt = 2, 2, 0,
diff_6th_factor = 0.12, 0.12, 0.12,
base_temp = 288.
damp_opt = 0,
zdamp = 5000., 5000., 5000.,
dampcoef = 0.2, 0.2, 0.2
khdif = 0, 0, 0,
kvdif = 0, 0, 0,
non_hydrostatic = .true., .true., .true.,
moist_adv_opt = 1, 1, 1,
scalar_adv_opt = 1, 1, 1,
/
&bdy_control
spec_bdy_width = 5,
spec_zone = 1,
relax_zone = 4,
specified = .true., .false.,.false.,
nested = .false., .true., .true.,
/
&grib2
/
&namelist_quilt
nio_tasks_per_group = 0,
nio_groups = 1,
/
Con el archivo namelist.input configurado de esta forma, podemos proceder a simular
un mes. Como vamos a simular casos reales, antes de ejecutar el WRF mediante el archivo
wrf.exe primero deberemos ejecutar el archivo real.exe para que éste lea todos los archivos
que hemos obtenido tras ejecutar el WPS y cree con ellos varios archivos con prefijo wrfinput
(uno por dominio), que serán los que el WRF reciba como input.
Así pues, ejecutamos dicho programa y obtenemos los ficheros necesarios, lo que nos
dejará listos para comenzar con nuestra simulación. Para hacer que empiece, ejecutamos el
fichero wrf.exe, con lo que se empezarán a calcular los valores de todas las variables
climatológicas del dominio. Como en nuestro caso hemos seleccionado que se produzca
nesting en dos direcciones (2-way nesting), la simulación se producirá en ambos dominios de
forma simultánea, de forma que los resultados del dominio grande se pueden emplear en la
simulación del dominio pequeño, permitiendo a éste conocer los factores climatológicos de las
zonas de alrededor suyo, y viceversa, lo que permite que los resultados del dominio pequeño,
que son más preciso, puedan mejorar los resultados del dominio grande.
Una vez terminada la simulación, el modelo nos devuelve unos ficheros con prefijo
wrfout en los que vendrán contenidos los valores de todas las variables climatológicas que el
WRF proporciona (nos devolverá un conjunto de variables por cada periodo de tiempo que
hemos establecido en el namelist.input). Estos ficheros serán por un lado los que podremos
visualizar para ver qué tal ha ido la simulación y el poder determinar el valor de cada variable
en cada instante de tiempo, y por otro lado serán los ficheros que le pasaremos al modelo
CAMx para que este pueda llevar a cabo su simulación.
2.5 Visualización de la salida del WRF
Si optamos por visualizar estos archivos, necesitamos usar para ello herramientas
específicas de visualización. En nuestro caso usaremos dos de ellas: Ncview e IDV, aunque
podemos elegir cualquiera de las opciones que tenemos a nuestra disposición.
Ncview es una herramienta de visualización de archivos con formato netCDF. Para abrir los
ficheros este programa,
simplemente los pasamos como
parámetros al ejecutar el comando
del programa. Una vez abiertos,
podemos seleccionar una variable
atmosférica de una gran lista de
variables, lo que imprime un mapa
de nuestro dominio con el valor de
esa variable en cada punto de éste.
Si hacemos click en un punto
podemos ver mediante una gráfica
la evolución de la variable en este
punto durante el periodo de
tiempo contenido en los archivos.
Este programa luce así:
IDV, por su parte, es una herramienta algo más complicada. Puede leer una gran
cantidad de archivos distintos, incluyendo los que necesitamos nosotros, y la visualización de
estos es bastante más completa que la que se obtiene del Ncview, a coste de tener un tiempo
de aprendizaje mayor al que se necesita para controlar Ncview. No obstante, dadas las
posibilidades de IDV, y dado que también nos servirá más adelante para visualizar la salida del
modelo CAMx, vamos a optar finalmente por usar este programa, que luce de la siguiente
manera:
Para que se viera el mapa político de España, lo que nos ayudaría a localizarnos
durante la visualización de nuestros diferentes dominios, descargamos de la página
http://www.diva-gis.org/gdata un shapefile con los diferentes niveles administrativos que
encontramos en España, de los que elegimos que se muestren la divisiones en Comunidades
Autónomas y las fronteras con otros países.
El IDV nos provee de otra ventana aparte de la anterior, llamada Dashboard. En el
podemos seleccionar los archivos de datos que abriremos, las variables que queremos
visualizar, y el método de visualización de estas variables (podemos elegir diferentes tipos de
visualización en el mapa, tanto en 2D como en 3D, así como visualización en gráficas, entre una
gran variedad de opciones). La vista de esta ventana sería algo así
Más tarde se verán algunos de los resultados de la visualización realizada sobre
nuestros datos, donde se verá la forma en la que el IDV nos los muestra. Con esta visualización
ya hemos finalizado una de nuestras dos simulaciones. Ahora toca empezar a trabajar con el
modelo CAMx. En el repaso de las tareas se instalaba antes de ejecutar el WRF, y de hecho, es
recomendable trabajar con ambas herramientas al mismo tiempo, ya que así mientras una
está trabajando en una simulación se puede trabajar con el otro modelo. Así es como lo hemos
realizado nosotros.
2.6 Compilación del modelo CAMx.
Así pues, una vez compilado y ejecutado el modelo WRF, toca hacer lo propio con el
CAMx para poder hacer la simulación de la calidad del aire en nuestro dominio, que es el
mismo que en el caso anterior.
El modelo se puede descargar desde su página oficial. Una vez descargado y
descomprimido, podemos proceder a compilarlo. Para ello se nos proporciona un fichero
Makefile en la carpeta del modelo. Para compilarlo solamente será necesario ejecutar el
Makefile eligiendo qué compilador usar y si usar paralelización con MPI. Aunque podemos,
vamos a compilar de momento sin paralelización para facilitar la tarea. El compilador que
vamos a elegir esta vez es el de Intel, es decir, ifort, con lo que el mandato para compilar
nuestro CAMx quedaría así:
make COMPILER=ifort
Si la compilación se ha realizado correctamente, habremos obtenido un ejecutable en
nuestra carpeta, que será el que llevará a cabo la simulación cuando lo ejecutemos. Sin
embargo, aquí sí que surgió alguna complicación, y no fue hasta que cambiamos varias flags en
el Makefile, entre ellas añadiendo el uso de la librería –lmpl, cuando por fin se pudo compilar
el modelo.
2.7 Obtención del input para CAMx e instalación de pre-procesadores
Con esto ya se puede ejecutar el caso de prueba y funciona. Sin embargo, para
ejecutarlo en nuestro dominio es necesario y conveniente pasarle la mayor cantidad de datos
sobre el periodo que estamos estudiando y sobre nuestro dominio, ya que de esta forma
ayudamos a mejorar la precisión de la simulación. Esta información se la pasaremos al modelo
a través de una serie de ficheros que el CAMx cogerá como input (muchos de los cuales son
opcionales, otros necesarios). Así pues, deberemos conseguir el máximo número posible de
estos ficheros para obtener la simulación que más se ajuste a la realidad.
Muchos de estos ficheros están al alcance de nuestra mano, otros no. Los ficheros que
pasaremos como input al CAMx en nuestra simulación son los siguientes:
- Datos meteorológicos: Son los datos que hemos obtenidos con el WRF, que contienen
todos los factores climatológicos en el periodo que estamos simulando. Para que el
CAMx pueda leer estos ficheros es necesario realizar una conversión de ellos con el
programa WRFCAMx. Este programa recibirá como entrada los datos obtenidos tras
ejecutar el WRF (los archivos wrfout) y generará los distintos archivos que necesita
CAMx (meteorología en la superficie y en el dominio 3D, difusividad vertical, nubes, y
superficie). Para ejecutar esta herramienta debemos configurarla con un fichero de
configuración parecido a los vistos anteriormente, con datos bastante parecidos.
- Datos de emisiones: Es aconsejable suministrar un archivo de emisiones por dominio,
dos en nuestro caso. Para preparar estos datos, recibimos los datos de emisiones
totales del año 2011 para ambos dominios, y debemos modificarlos nosotros de forma
que se las podamos pasar al CAMx correctamente en un fichero que contendrá las
emisiones diarias de cada especie química que contemplamos en nuestra simulación,
mostrados hora por hora. Más adelante se explicará el proceso completo.
- Initial and Boundary Conditions: En español son las condiciones iniciales y de frontera.
Son dos tipos de archivos diferentes, conteniendo ambos información de la calidad del
aire: las condiciones iniciales miden las concentraciones al inicio de la simulación,
pasándose solo el archivo correspondiente a la fecha inicial, y las de frontera miden las
concentraciones en las fronteras laterales (y opcionalmente por encima) de nuestro
dominio a lo largo de la simulación, siendo necesario que cada momento de la
simulación esté reflejado por un fichero de este tipo. Ambos archivos los podemos
obtener a través del programa ICBCPREP que nos proporciona CAMx en su página de
soporte. Pasándole a este programa los datos de nuestro dominio y las fechas de inicio
y final que deseamos nos devuelve estos archivos.
- Columna de ozono: Se necesita un fichero por día de simulación, aunque se pueden
aplicar las medias mensuales. Para obtener los ficheros con los datos de columna de
ozono necesitamos usar el programa O3MAP que de nuevo nos proporciona CAMx en
su página de soporte. Este programa necesita para funcionar, aparte de estar
configurado de acuerdo a nuestro dominio y fechas que queramos, datos de la
columna de ozono que debemos sacar de Internet; este programa solamente prepara
estos datos para pasárselos al CAMx. El propio programa nos recomienda sacar estos
datos de la página de la NASA o de su ftp, por el cual nos decantamos finalmente. De
momento he descargado los archivos con las medias mensuales de ozono (aparte de
las medidas diarias que he usado en las pruebas que he realizado), a la espera de ver si
cuando finalmente haga la simulación del año 2011 uso estos archivos o me bajo un
archivo por cada día del año.
- Ratios de fotólisis: Para obtener estos ficheros es necesario disponer primero de los
ficheros de columna de ozono vistos anteriormente, ya que son necesarios para el
cálculo de estos ratios. Para obtener los ficheros de los ratios de fotólisis debemos
usar un modelo de transferencia de radiación capaz de calcularlos. Otra vez en la
página de soporte del CAMx encontramos un programa que se encarga de esto,
llamado TUV. Para ejecutar este programa es necesario indicar tanto el número de
niveles de altitud de nuestro dominio y la altitud a la que estos se encuentran como el
esquema químico que vamos a usar tanto aquí como para el CAMx y para sus
emisiones, dándonos a elegir entre CB05 (Carbon Bond 2005), CB6 (Carbon Bond v6) y
SAPRC09. En nuestro caso usaremos aquí y en los demás casos siempre el esquema
químico CB05, aunque esto podría cambiar en el futuro.
Para los últimos 3 tipos de ficheros ha resultado de gran ayuda la creación de diversos
scripts de automatización, que permitieran obtener estos archivos para que todas las
fechas que necesitara con tan solo ejecutar un comando. Estos scripts han sido diseñados
en su mayoría en bash, el lenguaje de consola que más hemos estudiado en la universidad,
y lo cual ha servido también para coger soltura en el uso de este.
Por otro lado, el mayor de los problemas encontrados ha sido la de reconocer qué
archivos son necesarios pasar al CAMx y qué programas me los pueden suministrar. Por lo
demás, alguna dificultad también a la hora de compilar algún programa, ya que algunos
estaban diseñados para un compilador específico y necesité traducir sus flags a las flags del
procesador de Intel, ifort. Con esto he aprendido bastante del uso de los compiladores.
2.8 Obtención de las emisiones para el CAMx
Para poner en marcha nuestra simulación en el CAMx es necesario también pasarle
como input un fichero con las emisiones por periodo de tiempo de cada especie química que
contemplemos. En nuestro caso, pasaremos las emisiones a cada hora de las distintas especies
que componen el esquema químico que utilizamos, que será el CB05 (Carbon Bond 2005). Se
nos hace entrega de varios ficheros ASCII con las emisiones totales del año 2011 (en toneladas)
para cada contaminante (CO, NOX, NMVOC, NH3, SO2, PM10, PM2.5) y en cada una de las 10
categorías SNAP (S1-S10) que se detallan más adelante, suministrándonos un “pack” de datos
de emisiones por cada uno de nuestro dominio. Así pues, será necesario adaptar estos datos a
las exigencias del CAMx.
Lo primero a realizar una vez se nos son suministradas las emisiones en toneladas año
de nuestros dos dominios es comprobar que, efectivamente, estas emisiones son correctas, al
menos a simple vista. Como cada fichero es una simple lista de números reales del tamaño de
nuestro dominio (una lista de 80x80=6400 números), podemos visualizarlos mediante una
herramienta como Ferret a través de 3 simples mandatos.
Lógicamente, durante esta tarea revisamos la mayoría de archivos que recibimos,
tanto del dominio grande como del pequeño. Sin embargo, a continuación recopilamos tan
solo una muestra de cada uno de los dos dominios, con el fin de no extendernos más en este
asunto.
Así pues, una muestra del dominio grande, que enseña la emisión de CO por una
fuente determinada, sería la siguiente:
Una muestra del dominio pequeño sería la siguiente, que refleja las emisiones de NOX
por tráfico en una zona de Madrid y sus alrededores.
:
Una vez comprobado que estos ficheros son correctos, procedemos a realizar la
conversión antes mencionada. Para ello, deberemos primero calcular las toneladas que se
emiten de cada contaminante por hora, es decir, la distribución temporal de las emisiones.
Después deberemos de hallar la distribución en especies de estos contaminantes (cada uno
está formado por varias especies), lo que nos dará como resultado las emisiones a cada hora
de todas las especies que necesitamos (en toneladas). Finalmente, deberemos hacer una
conversión de unidades a las que acepta el CAMx (moles/hora para gases y g/hora para
partículas). Durante este proceso, además, deberemos juntar las emisiones de todas las
fuentes que tenemos.
Para facilitar la tarea, hemos diseñado un programa en C que se ocupe de esto. El
programa recibe como parámetro un día de 2011 (en formato MM DD) y realiza todos los
cálculos descritos anteriormente, obteniendo como resultado las emisiones/hora totales de
cada una de cada una de las especies de nuestro esquema, en las unidades correctas
mencionadas. Este programa se encuentra en el Anexo del documento y para funcionar tiene
que estar situado junto a las emisiones y factores que recibimos como datos. El siguiente
esquema resumiría el funcionamiento del programa para cada contaminante, por ejemplo
NOX:
Emisiones totales
NOX S1
Emisiones totales
NOX S2
Emisiones totales
NOX S9
Emisiones totales
NOX S10
Emisiones por
hora NOX S10
Emisiones por
hora NOX S9
Emisiones por
hora NO S1
Emisiones por
hora NO2 S1
Emisiones por
hora NO S2
Emisiones por
hora NO2 S2
Emisiones por
hora NOX S1
Emisiones por
hora NOX S2
Emisiones por
hora NO
Emisiones por
hora NO2
A continuación, se detallan las diferentes fases del proceso de obtención de emisiones.
Distribución temporal de las emisiones:
Lo primero que hacemos es calcular la emisión por hora de cada uno de nuestros
contaminantes, ya que disponemos de la información en toneladas/año. Esta tarea no consiste
en dividir el dato en toneladas/año de cada celdilla entre el número de horas del año, ya que
no a todas horas se emite el mismo número de emisiones. Esta cantidad varía según la hora, el
día de la semana e incluso el mes en el que estemos. Por suerte, tenemos a nuestra disposición
varios factores que nos proporcionan para cada contaminante y actividad la proporción de
emisión en cada hora/día/mes respecto a la emisión total.
Estos factores nos vienen dados como pesos de distribuciones, es decir, las
horas/días/meses en las que la emisión coincide con la media de emisión tienen un peso de 1
en la distribución, si la superan tienen un peso mayor que 1 y si se emite menos que la media
tienen un peso inferior a 1. Si este peso lo dividimos entre el número de elementos con pesos
(por ejemplo, si estamos estudiando los días de la semana dividimos entre 7), obtenemos el
porcentaje de emisiones que se generan respecto al total (si estudiamos las horas obtenemos
el porcentaje de emisiones en una hora respecto al día entero, si estudiamos los días de la
semana obtenemos el porcentaje de un día respecto a toda la semana, y si estudiamos los
meses obtenemos el porcentaje de un mes respecto al año completo).
Así pues, si necesitamos conocer las emisiones/hora de los distintos contaminantes,
como disponemos de sus emisiones/año, deberemos calcular con estas emisiones y los
distintos factores primero las emisiones en cada uno de los meses, las emisiones en cada una
de las semanas del mes (hay 30/7 semanas en un mes), las emisiones por día y, finalmente, las
emisiones por hora. Para hacer estos cálculos deberemos usar las siguientes ecuaciones:
𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑚𝑒𝑛𝑠𝑢𝑎𝑙 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑎𝑛𝑢𝑎𝑙 ∗ 𝐹𝑎𝑐𝑡𝑜𝑟 𝑚𝑒𝑠
𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑠𝑒𝑚𝑎𝑛𝑎𝑙 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑚𝑒𝑛𝑠𝑢𝑎𝑙 ∗
7
30
𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑑𝑖𝑎𝑟𝑖𝑎 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑠𝑒𝑚𝑎𝑛𝑎𝑙 ∗ 𝐹𝑎𝑐𝑡𝑜𝑟𝑑í𝑎
𝐸𝑚𝑖𝑠𝑖𝑜𝑛ℎ𝑜𝑟𝑎 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑑𝑖𝑎𝑟𝑖𝑎 ∗ 𝐹𝑎𝑐𝑡𝑜𝑟ℎ𝑜𝑟𝑎
Cabe recordar que los factores que nombramos (𝐹𝑎𝑐𝑡𝑜𝑟 𝑚𝑒𝑠 , 𝐹𝑎𝑐𝑡𝑜𝑟𝑑í𝑎, y 𝐹𝑎𝑐𝑡𝑜𝑟ℎ𝑜𝑟𝑎)
se refieren como hemos mencionado antes a los porcentajes de emisiones, es decir, son los
pesos divididos entre el número de elementos con peso. Nosotros recibimos los pesos de
distribución, así que tenemos que tener esto en cuenta antes de hacer los cálculos pertinentes.
Los pesos de distribución que recibimos son diferentes para cada fuente que tenemos
en cuenta. Como hemos visto antes, las fuentes que consideramos son las distintas categorías
SNAP. Estas categorías son las siguientes:
S1 - Combustiones en industrias de energía y transformación.
S2 - Combustiones en plantas no industriales
S3 – Combustiones en industrias de manufacturación
S4 – Procesos de producción
S5 - Extracción y distribución de combustibles fósiles y energía geotérmica
S6 – Uso de disolventes y otros productos
S7 – Transporte por carretera
S8 - Otras fuentes móviles y maquinaria
S9 – Tratamiento y eliminación de residuos
S10 - Agricultura
Los ficheros que contienen los pesos de distribución temporal que recibimos vienen
representados en los siguientes gráficos:
Pesos por mes:
Pesos por día de la semana:
Pesos por hora del día:
Esta distribución de pesos es la misma para todos los contaminantes.:
Como podemos observar, las gráficas de cada fuente de emisión varían, aunque son
similares en algunos ascpectos. Por ejemplo, en muchas coincide que por la noche se emite
bastante menos que por el día, o que los fines de semana apenas se consume respecto al resto
de semana laborable.
Distribución en especies de las emisiones.
Ya podemos disponer de las emisiones por hora de cada uno de los contaminantes con
los que estamos trabajando, es decir: CO, NH3, SO2, los NMVOC (compuestos orgánicos
volátiles) y NOX, y las PM2.5 (partículas de hasta 2.5 micrómetros) y PM10 (partículas de hasta
10 micrómetros). Sin embargo, nuestro fichero de emisiones debe contener la información de
cada una de las especies que componen el esquema químico que estamos usando, el CB05,
que vienen englobadas por los anteriores contaminantes. Así pues, el objetivo ahora consiste
en dividir cada uno de los contaminantes de los que disponemos en las especies que
necesitamos, hallando las emisiones correspondientes a cada una de ellas. A esto se le llama
especiación (speciation en inglés).
Lo primero que hay que conocer es qué especies queremos recoger en la simulación
(según el esquema químico que usemos) y, para cada especie, cuál es el contaminante donde
puede aparecer. En la siguiente tabla se recoge la información de cada especie de nuestra
simulación:
Símbolo Nombre Contaminante Masa molar
ALD2 Acetaldehyde (Acetaldehído) NMVOC 44,05256 g/mol
CO Carbon monoxide (Monóxido
de carbono)
CO 28,01 g/mol
ETH Ethene NMVOC 28,0 g/mol
FORM Formaldehyde
(Formaldehído)
NMVOC 30,031 g/mol
ISOP Isoprene (Isopreno) NMVOC 68,12 g/mol
NH3 Ammonia (Amoníaco) NH3 17,031 g/mol
NO Nitric oxide (Óxido de
nitrógeno)
NOX 30,01 g/mol
NO2 Nitrogen dioxide (Dióxido de
nitrógeno)
NOX 46,0055 g/mol
NR Non-reactive gasses NMVOC -
OLE Terminal olefin carbon bond NMVOC 42,1 g/mol
PAR Paraffin carbon bond NMVOC 72,1 g/mol
PEC Primary elemental carbon PM -
CPRM Coarse other primary PM (10) -
FPRM Fine other primary PM (2.5) -
PNO3 Particulate nitrate PM -
POA Primary organic aerosol PM -
PSO4 Particulate sulfate PM -
SO2 Sulfur dioxide SO2 64,0 g/mol
TOL Toluene NMVOC 92,1 g/mol
XYL Xylene NMVOC 106,2 g/mol
ALDX Propinaldehyde and higher
aldehydes
NMVOC 58,1 g/mol
CH4 Methane (Metano) NMVOC 16,0 g/mol
ETHA Ethane NMVOC 30,1 g/mol
ETOH Ethanol NMVOC 46,1 g/mol
IOLE Internal olefin carbon bond NMVOC 56,1 g/mol
MEOH Methanol NMVOC 32,0 g/mol
TERP Terpene NMVOC 136,2 g/mol
Evidentemente, cada contaminante no estará compuesto equitativamente por las
especies que lo forman. Por ejemplo, en el caso de los NOX, nos encontramos que
normalmente están compuestos en un 90% por NO y en un 10% por NO2. Así pues, para poder
separar los contaminantes en especies correctamente deberemos conocer los porcentajes de
las especies que los forman.
Conocer estos porcentajes no es algo trivial. Estos porcentajes se hallan mediante
mediciones y experimentación, y varían mucho según la fuente de la que provengan u otros
factores. Es por ello que hay que tener cuidado a la hora de elegir estos ratios, intentando
trabajar con los que más se adecúen a nuestra situación.
Para obtener estos porcentajes hacemos uso de SPECIATE, la base de datos de la EPA,
donde se almacena un gran número de conjuntos de porcentajes (llamados perfiles) para una
gran variedad de fuentes y especies. Cada perfil nos dará una distinta distribución en especies
para un contaminante.
De entre todos los perfiles en esta base de datos, de inicio hacemos uso de los más
generales, que suelen ser los que hacen una media entre los demás perfiles. Durante el
transcurso de esta tarea hemos ajustando los perfiles según los resultados que obteníamos
con cada uno, incluso se pensó en asignar un perfil diferente según la fuente de emisión de la
que provenga el contaminante, lo cual finalmente no se puedo llevar a cabo. Todos estos
perfiles se los pasaremos a nuestro programa mediante ficheros.
Así pues, los perfiles que usamos son los siguientes:
- En primer lugar, los contaminantes CO, SO2 y NH3 están compuestos solamente
por las especies de mismo nombre, por lo que no hay que hacer descomposición
alguna en ellos (el ratio de especiación de cada especie es 1).
- El perfil que usamos para el NOX lo hemos obtenido de la base de datos SPECIATE,
de la EPA. Es un perfil bastante común en cuanto a este contaminante se refiere,
siendo el siguiente:
- Para las partículas, hemos usado perfiles que también se encuentran es SPECIATE.
En este caso, los perfiles que hemos seleccionado son la media de todos los
perfiles para estos contaminantes que se encuentran en la base de datos. Son los
siguientes:
NOX Ratio
NO 90.6495360456817
NO2 9.35046395431835
PM 2.5 Ratio
PEC 4.406
PNO3 0.164
PS04 5.514
POA 8.768
FPRM 81.148
PM 10 Ratio
PEC 4.582
PNO3 0.134
PS04 5.03
POA 8.187
CPRM 82.067
- Finalmente, para el contaminante NMVOC he usado uno que aparecía como
ejemplo en un reporte de la empresa encargada del CAMX, ENVIRON, ya que se
adecúa bastante a las especies que yo necesitaba. El perfil que he seleccionado de
este reporte es el de la EPA, y es el siguiente:
Suma de las fuentes y conversión de unidades.
Una vez calculados los valores de emisiones (por especie y hora) asociados a cada
fuente, lo que necesitamos calcular ahora es la cantidad total que se ha emitido de cada
especie en cada hora que estudiamos. Para hallar esto, simplemente sumamos la emisión
obtenida por cada fuente, ya que una vez emitida cada especie da igual de donde provenga,
reaccionará igual.
Otra tarea a realizar es la conversión de unidades a las unidades que acepte el CAM.
Nosotros en este momento disponemos de emisiones en toneladas/hora, pero necesitamos
que estas emisiones se midan en moles/hora para los gases y gramos/hora si hablamos de
partículas. En este último caso es sencillo, simplemente debemos multiplicar nuestras
emisiones por 106
(hay 1.000.000 de gramos en una tonelada).
Sin embargo, para los gases no es tan trivial. Para obtener los moles de un gas a partir
de las toneladas de este, debemos conocer su masa molar. Por suerte no es difícil encontrarla
(en Internet o en la guía del CAMx aparecen todas). En la tabla de todas las especies se
detallan las distintas masas molares para cada uno de los gases. Una vez se sabe la masa molar
del gas, basta con dividir los gramos de los que disponemos (habrá que multiplicar por 106
las
toneladas aquí también) entre la masa molar del gas.
Una vez hecha la conversión, obtenemos finalmente las emisiones/hora de cada
especie en las unidades que necesita el CAMx, por lo que ya estamos listos para pasarle esta
información al CAMx, una vez la pongamos en el formato que necesario.
NMVOC Ratio
ALD2 0.0162
ALDX 0.0015
CH4 0.1736
ETH 0.1005
ETHA 0.027
ETOH 0.0381
FORM 0.0148
IOLE 0.0121
ISOP 0.001
MEOH 0.0054
OLE 0.0416
PAR 0.3208
TOL 0.1058
NR 0.0445
XYL 0.0971
Formateo del fichero.
De esto también se encarga nuestro programa. Para que el CAMx acepte nuestras
emisiones, tenemos que escribirlas en un fichero con el formato adecuado y, además,
convertir este fichero en binario (lo cual haremos con un programa que nos recomienda CAMx
en su guía). Cada fichero contendrá las emisiones de un día.
El formato del fichero de emisiones que debemos pasarle a CAMX es el siguiente:
- Para empezar, hay un encabezado en el que se detallan características de la
simulación (número de especies, tamaño del dominio, tamaño de las celdas,
coordenadas,…). Este encabezado será diferente para nuestros dos dominios
distintos.
- Continúa con un listado de todas las especies que aparecen en el fichero.
- Finalmente aparecen las emisiones. Estas se muestran como un bucle desde las 0h
hasta las 23h, y en cada una se detallan las emisiones todas las especies,
apareciendo en cada especie un valor por celdilla del dominio (para nuestro
dominio grande disponemos de 80x80=6400 valores por hora y especie, y para el
pequeño 72x72=5184, ya veremos más tarde por qué).
De momento nuestro programa está adaptado a nuestro modelo, con lo que si se
quiere usar para otros dominios haría falta modificar el código, pero se puede hacer
fácilmente que se adecúe distintas simulaciones a la hora de hacer el formateo del
fichero.
Una vez hemos ejecutado nuestro programa y obtenido el fichero de emisiones con el
formato que nos piden queda convertirlo en binario. Para ello, hacemos uso del programa
BIN2ASCII, que encontramos en la página de soporte de software del CAMx, y que funciona
tanto como para convertir archivos binarios en archivos ASCII como a la inversa, que es para lo
que lo usamos.
Este programa, escrito en Fortran, puede reconocer qué tipo de archivo es el que le
pasamos (en nuestro caso de emisiones), pero es bastante restrictivo; hay que pasarle el
archivo ASCII exactamente como lo pide, sin que falle ningún valor (o incluso por algún espacio
me ha llegado a dar error), y con cuidad de que los valores coincidan con los formatos
asignados a ellos (formatos de Fortran). Por ejemplo, el formato con el que aceptaba las fechas
(las cuales hay que pasar como Fechas Julianas, en YYDDD, donde DDD es la posición del día en
el año) no aceptaba fechas posteriores a 2010, ya que solamente admitía 4 cifras y las fechas
julianas a partir de 2010 tienen 5 (antes se podían escribir de la forma YDDD). Así pues, para
hacer funcionar este programa con mi archivo tuve que modificar su código Fortran,
cambiando donde asignaba el formato a la fecha por un formato i8 con el que ya podía agregar
fechas de 5 cifras.
Además, para pasarle un input al programa BIN2ASCII era necesario primero ejecutar
el programa y luego una vez éste está corriendo, indicarle por un el nombre del archivo a leer y
por otro el nombre del archivo de salida. Esta situación impedía que el programa pudiera ser
llamado automáticamente, ya que había que pasarle los datos de manera manual, con lo que
finalmente opté por volver a modificar el código del programa para hacer que, en vez de tomar
esta información de la entrada estándar, pudieran estos datos ser pasados como parámetros al
llamar al programa, quedando la llamada al programa como ./asc2bin FICHASCII FICHBIN.
Esto nos permitió la creación de un script con el que pudiéramos automatizar la
creación de emisiones uniendo la llamada a nuestro programa calcula_emis con una llamada
posterior al programa anterior. Con este script, y uno que se encargara de realizar un bucle
que abarcara el tiempo que deseáramos, pudimos calcular todas las emisiones de nuestros
dominios para nuestro periodo de un año en apenas unos pocos minutos. Tras obtener estos
ficheros, sumados a los que obtuvimos previamente, juntamos todos los archivos necesarios
para poder realizar una simulación con el CAMx.
2.9 Ejecución del CAMx
Una vez disponemos de todos los archivos de entrada necesarios para el CAMx solo
queda ejecutar el modelo. Para ello, deberemos crear un script en el cual se crea un fichero
CAMx.in que contendrá los parámetros de nuestra simulación. Estos parámetros, entre los que
se encuentran las características del dominio y las fechas en las que se realiza la simulación,
entre otros, será necesario por lo tanto dejarlos indicados en el script que se ejecutará. Este
script, además, indicará la situación de cada uno de los ficheros de entrada del CAMx, y se
encargará también de iniciar el ejecutable que realizará la simulación.
Los dos dominios sobre los que se tenía pensado realizar esta simulación originalmente
son los explicados en la introducción de este documento, que coinciden con los que veníamos
usando para realizar las simulaciones del modelo WRF. Esto significa que nuestra simulación se
realizaría sobre dos dominios distintos de 80x80 celdillas cada uno, situado uno en el centro
del otro. No obstante, debido a la forma en la que el CAMx realiza el nesting de dominios,
cometí determinados errores que hicieron que las características de nuestros dominios
tuvieran que verse afectadas. El modelo CAMx realiza este nesting de la forma que describe la
siguiente imagen, recogida de la guía de usuario del CAMx:
Leyendo la explicación del nesting entre dominios de la guía de usuario del CAMx, vi
que CAMx trabaja con unas celdillas situadas en el perímetro. El fallo vino en que se menciona
que estas casillas se agregan automáticamente por el CAMx, por lo que me olvidé de ellas al
obtener mis dominios. Sin embargo, sí que es necesario pasarle al CAMx la información de
estas casillas, lo que hace que pasaramos de trabajar con un dominio pequeño de 80x80
celdillas con la esquina SW situada en la coordenada (-200,-200) a trabajar con uno de 82x82
celdillas con la esquina SW en (-205,-205), lo que hacía que nuestros archivos meteorológicos y
de emisiones no valieran.
Ante la decisión de volver a obtener los archivos meteorológicos y de emisiones para
que tuvieran en cuenta las 2 filas y columnas que faltan o reducir el tamaño del dominio
pequeño pedí consejo a mi tutor, que me dijo finalmente que optara por reducir el dominio,
sobre todo por las emisiones. Así, tuve que acortar el dominio en 1 casilla del dominio grande
por cada lado, lo que equivale a 5 del dominio pequeño, por lo que nuestro dominio ahora en
vez de ser de 80x80 será de 70x70, con lo que los ficheros que usaremos serán 72x72, con la
esquina SW en la coordenada (-180,-180).
Por lo tanto, el dominio pequeño en el que podremos visualizar la calidad del aire se
reduce a 350x350km, no así el meteorológico. El centro de este dominio no varía.
Una vez resuelto este fallo, que conllevó a su vez la modificación de los ficheros
meteorológicos en el WRFCAMx y de los ficheros de emisiones en el programa calcula_emis, se
consiguió ejecutar el modelo correctamente, a través de un script que se encarga tanto de
ejecutar la simulación del modelo como de ajustar la configuración de esta, tarea similar a la
que vimos que realizaban los ficheros namelist en los apartados anteriores.
Finalmente, dicho script ha sido diseñado para que funcione entre dos días indicados,
pudiendo simular periodos de tiempo varios meses. A este script se le suministra el día y mes
inicial y el día y mes final, aparte de todos los parámetros asociados a una simulación de este
tipo, que se explican más adelante. Así, el script que usaríamos para hacer una simulación
desde el 1 de Febrero del 2011 hasta el 31 de Mayo del mismo año sería el siguiente:
#!/bin/bash
#
# CAMx 6.20
#
export NCPUS=1
export MPSTKZ=128M
export OMP_NUM_THREADS=8
ulimit -s unlimited
EXEC="../CAMx.v6.20.noMPI.ifort"
#
RUN="v6.20.spain.25.noMPI"
INPUT="../inputs"
MET="../inputs/met"
EMIS="../emiss/EMISIONES/binary"
PTSRCE="../ptsrce"
OUTPUT="../outputs"
#
# --- set the dates and times ----
# para fecha juliana puedo usar mejor date --date=FECHA +%j
#
YEAR=2011
BEGMONTH=2
ENDMONTH=5
BEGDAY=1
ENDDAY=31
mes=$BEGMONTH
today=$BEGDAY
MON=`printf %02d $mes`
CAL=`printf %02d $today`
CALSTRT=$CAL
month_days=(31 28 31 30 31 30 31 31 30 31 30 31)
if [ $(( $YEAR % 4 )) -eq 0 ] ; then
month_days[1]= $((${month_days[1]}+1))
fi
JULSTRT=`date --date=${YEAR}${MON}${CAL} +%j`
JUL=$JULSTRT ;
#
date > hora.txt
mkdir -p $OUTPUT
RESTART="NO"
YESTERDAY=0331
while [ $mes -le $ENDMONTH ];
do
MON=`printf %02d $mes`
if ! [ $mes -eq $BEGMONTH ] ; then
today=1
fi
while [ $today -le ${month_days[$((${mes}-1))]} ] && ! ([ $mes -eq $ENDMONTH
] && [ $today -gt $ENDDAY ]) ;
do
CAL=`printf %02d $today`
JUL=`date --date=${YEAR}${MON}${CAL} +%j`
#
if [ ${RESTART} = "NO" ]; then
RESTART="false"
else
RESTART="true"
fi
#
# --- Create the input file (always called CAMx.in)
#
cat << ieof > CAMx.in
&CAMx_Control
Run_Message = 'CAMx 6.20 Test Problem -- Mech2 CF CB05 $RUN',
!--- Model clock control ---
Time_Zone = 0, ! (0=UTC,5=EST,6=CST,7=MST,8=PST)
Restart = .${RESTART}.,
Start_Date_Hour = 2011,${MON},${CAL},0000, ! (YYYY,MM,DD,HHmm)
End_Date_Hour = 2011,${MON},${CAL},2400, ! (YYYY,MM,DD,HHmm)
Maximum_Timestep = 15., ! minutes
Met_Input_Frequency = 60., ! minutes
Ems_Input_Frequency = 60., ! minutes
Output_Frequency = 60., ! minutes
!--- Map projection parameters ---
Map_Projection = 'LAMBERT', ! (LAMBERT,POLAR,UTM,LATLON)
UTM_Zone = 0,
POLAR_Longitude_Pole = 0., ! deg (west<0,south<0)
POLAR_Latitude_Pole = 0., ! deg (west<0,south<0)
LAMBERT_Central_Meridian = -03.93, ! deg (west<0,south<0)
LAMBERT_Center_Longitude = -03.93, ! deg (west<0,south<0)
LAMBERT_Center_Latitude = 40.5, ! deg (west<0,south<0)
LAMBERT_True_Latitude1 = 50, ! deg (west<0,south<0)
LAMBERT_True_Latitude2 = 20., ! deg (west<0,south<0)
!--- Parameters for the master (first) grid ---
Number_of_Grids = 2,
Master_Origin_XCoord = -1000., ! km or deg, SW corner of cell(1,1)
Master_Origin_YCoord = -1000., ! km or deg, SW corner of cell (1,1)
Master_Cell_XSize = 25., ! km or deg
Master_Cell_YSize = 25., ! km or deg
Master_Grid_Columns = 80,
Master_Grid_Rows = 80,
Number_of_Layers = 12,
!--- Parameters for the second grid ---
Nest_Meshing_Factor(2) = 5, ! Cell size relative to master grid
Nest_Beg_I_Index(2) = 34, ! Relative to master grid
Nest_End_I_Index(2) = 47, ! Relative to master grid
Nest_Beg_J_Index(2) = 34, ! Relative to master grid
Nest_End_J_Index(2) = 47, ! Relative to master grid
!--- Model options ---
Diagnostic_Error_Check = .false., ! True = will stop after 1st timestep
Advection_Solver = 'PPM', ! (PPM,BOTT)
Chemistry_Solver = 'EBI', ! (EBI,IEH,LSODE)
PiG_Submodel = 'None', ! (None,GREASD,IRON)
Probing_Tool = 'None', !
(None,OSAT,GOAT,APCA,PSAT,DDM,PA,RTRAC)
Chemistry = .true.,
Drydep_Model = 'WESELY89', ! (None,WESELY89,ZHANG03)
Wet_Deposition = .true.,
ACM2_Diffusion = .false.,
Super_Stepping = .true.,
Gridded_Emissions = .true.,
Point_Emissions = .false.,
Ignore_Emission_Dates = .true.,
Flexi_Nest = .true.,
!--- Output specifications ---
Root_Output_Name = '$OUTPUT/CAMx.$RUN.2011${MON}${CAL}',
Average_Output_3D = .false.,
Output_Species_Names(1) = 'NO',
Output_Species_Names(2) = 'NO2',
Output_Species_Names(3) = 'O3',
Output_Species_Names(4) = 'SO2',
Output_Species_Names(5) = 'H2O2',
Output_Species_Names(6) = 'HNO3',
Output_Species_Names(7) = 'NH3',
Output_Species_Names(8) = 'PNO3',
Output_Species_Names(9) = 'PSO4',
Output_Species_Names(10) = 'PNH4',
Output_Species_Names(11) = 'POA',
Output_Species_Names(12) = 'PEC',
Output_Species_Names(13) = 'FPRM',
Output_Species_Names(14) = 'CPRM',
Output_Species_Names(15) = 'CCRS',
Output_Species_Names(16) = 'FCRS',
Output_Species_Names(17) = 'SOA1',
Output_Species_Names(18) = 'SOA2',
Output_Species_Names(19) = 'SOA3',
Output_Species_Names(20) = 'SOA4',
Output_Species_Names(21) = 'SOA5',
Output_Species_Names(21) = 'CO',
!--- Input files ---
Chemistry_Parameters = '$INPUT/CAMx6.2.chemparam.2_CF', ! 2_CF = CB6r2
con PM
Photolyis_Rates = '$INPUT/tuv/TUV/output/tuv.do_CB6.11${MON}01',
Ozone_Column =
'$INPUT/ozone/O3MAPPR/output2011/o3map.2011${MON}.80x80_25kmx25km.txt',
Initial_Conditions = '$INPUT/icbc/ic.cc.${JULSTRT}.const.bin',
Boundary_Conditions = '$INPUT/icbc/bc.cc.${JUL}.const.bin',
Point_Sources = ' ',
Master_Grid_Restart = '$OUTPUT/CAMx.$RUN.2011${YESTERDAY}.inst',
Nested_Grid_Restart = '$OUTPUT/CAMx.$RUN.2011${YESTERDAY}.finst',
PiG_Restart = ' ',
Surface_Grid(1) = '$INPUT/met/d01_mes${MON}/camx.lu.25km.bin',
Met2D_Grid(1) =
'$INPUT/met/d01_mes${MON}/camx.2d.25km.2011${MON}${CAL}.bin',
Met3D_Grid(1) =
'$INPUT/met/d01_mes${MON}/camx.3d.25km.2011${MON}${CAL}.bin',
Vdiff_Grid(1) =
'$INPUT/met/d01_mes${MON}/camx.kv.25km.2011${MON}${CAL}.bin.CMAQ',
Cloud_Grid(1) =
'$INPUT/met/d01_mes${MON}/camx.cr.25km.2011${MON}${CAL}.bin',
Emiss_Grid(1) = '$EMIS/emiss-d1-2011${MON}${CAL}.a1.bin',
Surface_Grid(2) = '$INPUT/met/d02_mes${MON}/camx.lu.5km.bin',
Met2D_Grid(2) =
'$INPUT/met/d02_mes${MON}/camx.2d.5km.2011${MON}${CAL}.bin',
Met3D_Grid(2) =
'$INPUT/met/d02_mes${MON}/camx.3d.5km.2011${MON}${CAL}.bin',
Vdiff_Grid(2) =
'$INPUT/met/d02_mes${MON}/camx.kv.5km.2011${MON}${CAL}.bin.CMAQ',
Cloud_Grid(2) =
'$INPUT/met/d02_mes${MON}/camx.cr.5km.2011${MON}${CAL}.bin',
Emiss_Grid(2) = '$EMIS/emiss-d2-2011${MON}${CAL}.a1.bin',
/
!----------------------------------------------------------------------------
---
ieof
#
# --- Execute the model ---
#
$EXEC
if [ $? -ne 0 ] ; then
exit
fi
RESTART="YES"
YESTERDAY=${MON}$CAL
today=$((${today}+1))
done
mes=$((${mes}+1))
done
date>>hora.txt
Básicamente lo que hacemos con este script es hacer pequeñas simulaciones de un día
de duración. Cada vez que se termina una simulación, el modelo CAMx genera un archivo por
cada dominio que refleja el último estado en el que ha quedado (este fichero tiene
terminación .inst para el dominio padre y .finst para el hijo). Con este fichero, el CAMx puede
saber a la hora de simular un día la situación en la que ha quedado el día anterior,
consiguiendo mantener una continuidad en la simulación. Eso es lo que lleva a cabo este
script, simulando cada día a partir de los ficheros de estado del día anterior (excepto para el
primer día).
Como hemos visto antes, aparte de llevar a cabo un control sobre las fechas entre las
que realizamos la simulación, este script se encarga de configurar todos los parámetros que el
CAMx recibe. Algunos de estos parámetros hacen referencia a los ficheros que hemos
obtenido previamente, teniendo que indicarle al CAMx su localización. Otros se utilizan para
controlar el tamaño y localización de los dominios, la frecuencia de cálculo y de salida, o las
configuraciones químicas que se desean emplear.
Antes de hacer una simulación completa, realizamos varias simulaciones de prueba,
como hicimos con el modelo WRF, que nos servirán tanto para ajustar los parámetros e
intentar obtener los mejores resultados posibles, como para estudiar el tiempo que nos llevará
la simulación de un periodo de un año. Así, lo primero que hice fue realizar una simulación de
un día (14/09/2011) tomando solamente el dominio de la Península Ibérica (el más grande).
Esto sirvió para poder configurarlo correctamente y poder hacer que todos los ficheros
encajen entre sí. Además, se ha podido estudiar el tiempo que tarda el modelo en simular
periodo de un día en este dominio, siendo un tiempo de unos 20 minutos, bastante menor que
el del WRF. Esto quiere decir que para simular un año, a tardaríamos unas 118.67 horas, es
decir casi 5 días. No obstante, este resultado sería si calculáramos solamente el dominio
grande. Tras varias simulaciones de prueba más, una vez ejecutamos el modelo con varios
dominios anidados, vemos que el tiempo de simulación se alarga hasta alcanzar casi los
mismos valores que el tiempo de simulación del WRF, siendo necesario disponer de un mes de
tiempo físico para poder realizar una simulación de un año, lo cual debemos tener en cuenta a
la hora de comenzar nuestras simulaciones finales.
Como en el caso del modelo WRF, dos simulaciones del CAMx pueden variar mucho
entre sí dependiendo de la configuración que se les aplique a cada una, siendo casi imposible
que coincidan al 100% ambas simulaciones, lo que hace necesario que tengamos que realizar
varias simulaciones para obtener la configuración final que usaremos. Una vez hemos elegido
esta configuración, podremos ejecutar ya definitivamente el modelo a través de nuestro script,
cuyo funcionamiento hemos visto anteriormente. Esta acción nos dará como frutos los
archivos de calidad de aire finales, que será los que visualicemos a continuación.
2.10 Visualización de los archivos del CAMx
Para visualizar los archivos del CAMx he probado diferentes caminos a lo largo de la
práctica. Primero intenté convertir los archivos con la herramienta IOAPI para, no solo poder
abrirlos con herramientas que conocía mi compañero de prácticas, si no poder comparar más
fácilmente con el los archivos de salida. Pronto comprendí que esta tarea no era la mejor
solución. Tras pasar algún tiempo instalando y probando otra herramienta, PseudoNetCDF,
que parecía que me podía ayudar a convertir los archivos de salida en archivos netCDF que
pudiera abrir con herramientas como ncview (lo cual finalmente conseguí), descubrí que era
viable, y mucho más fácil, abrir los archivos de salida originales con la misma herramienta que
usaba para abrir los archivos meteorológicos, la herramienta IDV.
El funcionamiento de esta herramienta es exactamente el mismo que para visualizar el
contenido de los ficheros de salida del modelo WRF; seleccionas los ficheros de los que quieres
obtener los datos, seleccionas las variables que quieres ver por pantalla, y la forma en la que
estas se muestran, y ya está, puedes visualizarlas en el mapa o en gráficas. Esta son una de las
imágenes que se puede obtener con esta herramienta:
2.11 Resultados obtenidos
A continuación vamos a ver los resultados obtenidos mediante las dos simulaciones
finales que hemos realizado, tanto con el WRF como con el CAMx. Todo el proceso que se ha
descrito durante este documento tenía como objetivo obtener una serie de archivos que poder
comparar con los datos recogidos por las estaciones de medición tanto de meteorología como
de calidad del aire, con el fin de determinar la exactitud de nuestras simulaciones y ver si se
consiguió elegir los parámetros adecuados para la simulación. Otro de los objetivos era
comparar los resultados obtenidos con los obtenidos por mi compañero de prácticas, que debía
simular el mismo dominio y las mimas fechas que yo, solo que con los modelos MM5 de
meteorología y CMAQ de calidad del aire. Esto tenía como fin demostrar que, aunque el dominio
y las fechas a simular eran las mismas, los resultados que íbamos a obtener iban a ser
irremediablemente distintos unos de otros, pudiendo apreciar las características de cada
modelo (igual uno obtenía siempre temperaturas más extremas que el otro, por ejemplo) y
pudiendo ver cuál se comportaba mejor con respecto a los datos de las estaciones
meteorológicas. Al final cada uno se ha tenido que centrar en su trabajo demasiado y no hemos
podido realizar esta comparación, pero tras hacer este informe, como seguiremos trabajando
parcialmente en el proyecto y como tendremos los datos de salida bien organizados, podamos
llevar a cabo esta comparación.
En estos momentos seguimos con las simulaciones en nuestra máquina, con lo que no
se va a poder representar el año entero en este informe en ninguna de las simulaciones. De
momento en el modelo WRF he simulado un total de 7 meses, desde el 1 de febrero hasta el 31
de Agosto, lo que aun así es un periodo bastante extenso en el que ya se pueden sacar
conclusiones. En cuanto a la simulación del CAMx, que tiene que ir admitiendo la salida de las
simulaciones del WRF, he simulado de momento 4 meses, de febrero a marzo. De momento
estoy algo estancado porque finalmente han aparecido problemas de espacio, y antes de tomar
medidas he preferido esperar a después de la entrega de este informe para verlo con más calma.
Además, aunque para la simulación de calidad del aire he realizado diversas
comparaciones con estaciones, y aunque llevo obtenidos 4 meses de simulación, el tiempo físico
del que dispongo no me da para hacer una comparación exhaustiva como la que realizo más
adelante para el WRF. Espero poder hacer algo parecido a este análisis en navidades, pero por
el momento no me es posible. Como consuelo, podemos ver que existe coherencia en estos
datos en imágenes como la siguiente, que representa los niveles de NO2 (producido en gran
medida por el tráfico) un día por la mañana (a las 6:00):
Sabiendo esto, procedamos a ver los resultados de la simulación meteorológica,
efectuada a través del modelo WRF.
Hay varias formas en las que podemos estudiar estos resultados. Por un lado, podríamos
abrir un fichero cualquiera y ver para cada variable algún tipo de mapa con sus valores, viendo
cómo evoluciona este mapa a lo largo del tiempo. Por ejemplo, si vemos un mapa de la
temperatura en la Península y sus alrededores, se puede observar como sube la temperatura
durante el día y baja por la noche, así como los valores extremos que ésta coge en África. En la
siguiente imagen tenemos un ejemplo de lo que veríamos:
Sin embargo, a nosotros nos interesa más contrastar la autenticidad de nuestros datos
comparándolos con los de las estaciones meteorológicas. Si bien en el ejemplo anterior
podríamos seleccionar diversos puntos a diferentes horas y compararlos con los datos
puntuales registrados por estaciones cercanas a esos puntos, nosotros hemos optado por una
opción diferente, aunque más tarde si es posible se realizará un estudio como este como
segundo método de comprobación.
Así pues, el procedimiento que voy a seguir va a ser el de realizar un estudio de las
diferencias entre los datos obtenidos por nuestra simulación y los datos obtenidos por una
sola estación a lo largo del año (o del periodo que tenemos en nuestro caso, que es el de 7
meses). De esta forma podemos realizar una comparación más exhaustiva, centrándonos en
distintas variables y en los valores que éstas toman a diario.
La estación que he elegido para hacer esta comparación es la de Colmenar Viejo,
porque está cerca del centro de nuestro dominio y era una estación que no había usado para
mis comparaciones en simulaciones previas, con los que los datos podrían reflejar más
fielmente la eficacia de mi configuración. Esta estación se encuentra en las coordenadas 40°
39′ 31.64″ N, 3° 45′ 58.76″ W.
Para realizar la comparación con la estación meteorológica es necesario obtener los
datos históricos del año 2011 para esta estación en concreto. Estos datos se pueden encontrar
en Internet. A lo largo de la asignatura, he usado principalmente dos páginas web diferentes
para obtener estos datos. Estas son por un lado http://www.datosclima.es/ y por otro
http://gestiona.madrid.org/azul_internet/html/web/InformAnalizadoresAccion.icm?ESTADO_
MENU=2_1_2 . Finalmente he acabado usando más el segundo enlace, ya que contiene tanto
variables meteorológicas como de contaminación, el contenido es bastante más accesible que
en el primer enlace, y permite descargar la información en formato de hoja de cálculo de Excel,
algo que a continuación veremos que ha sido fundamental para realizar la comparación con
nuestros datos. Además de todo esto, da como valor añadido la seguridad que conlleva el ser
una página oficial, en este caso de la Comunidad de Madrid. Así pues, lo que he hecho ha sido
descargar de esta página los datos de diferentes variables, que vienen dadas con una
frecuencia diaria, en formato de hoja de cálculo (en este documento muestro las variables
Temperatura, Presión, y Humedad Relativa).
Esto por el lado de los datos de la estación meteorológica. Por el lado de los datos
obtenidos por nuestra simulación, el proceso a realizar que he seguido es diferente. Como
vimos anteriormente, los archivos que obtenía con el WRF me era necesario comprimirlos por
cuestiones de almacenamiento. Así pues, para extraer de aquí los datos necesarios es
conveniente seguir un determinado orden; nosotros lo haremos mes a mes. De este modo,
para cada mes descomprimo los archivos del dominio pequeño (estaban comprimidos por
dominio y mes), ya que serán datos más precisos que los del dominio anterior, y , una vez
descomprimidos, los abro. El programa que estoy usando para abrir estos archivos es el IDV,
del cual he hablado anteriormente. En este programa, selecciono en el apartado "Data
Choosers" los archivos salida del WRF (todos a la vez) y los abro como "Aggregate WRF netcdf
grids by Time". Una vez abierto, selecciono las variables que quiera observar, y pido que
obtenga el gráfico de evolución de dichas variables en las coordenadas correspondientes a la
estación de Colmenar Viejo, que son en decimal (40.65879°, -3.766321°), lo cual el programa lo
ajusta a la celdilla correspondiente a las coordenadas (40.7º,-3.8º). Una vez se obtiene la
evolución de la variable que queremos estudiar en dichas coordenadas, podemos guardar el
gráfico con los valores de dicha variable a lo largo del periodo de tiempo, que tendría la
siguiente forma:
También podríamos guardar un archivo de texto con extensión ".csv" que almacene
todos los valores que coge la variable. Este fichero se podrá abrir más tarde con un visualizador
de hojas de cálculo, como Excel, con lo que es el fichero que nos interesa guardar para poder
realizar la comparación con los datos de la estación antes descargados.
Las variables entre las que vamos a realizar la comparación van a ser la temperatura, la
presión atmosférica y la humedad relativa. Para los datos de la estación meteorológica, como
hemos visto, es posible descargar estas tres variables sin dificultad alguna. Para los datos
obtenidos de la simulación, sin embargo, carecemos de la variable de humedad relativa,
mientras que las otras sí que nos aparecen tal cual. Para calcular la humedad relativa hay que
hacer uso de diferentes fórmulas, las cuales he sacado de internet. Por un lado, la definición de
humedad relativa es la siguiente:
𝑟ℎ =
𝑤
𝑤𝑠
∗ 100
Donde 𝑤 es el mixing ratio actual, y 𝑤𝑠 es el saturated mixing ratio. El valor del
primero nos es conocido, ya que el WRF sí que nos devuelve una variable que representa el
mixing ratio, la cual llama Q2. Sin embargo, seguimos careciendo del saturated mixing ratio.
Indagando algo más por Internet, vemos que la fórmula para calcular este valor es la siguiente:
𝑤𝑠 = 621.97 ∗
𝑒𝑠
𝑝𝑠𝑡𝑎 − 𝑒𝑠
Donde
𝑒𝑠 = 6.11 ∗ 10
7.5∗𝑇
237.7+𝑇
Como la presión y la temperatura nos son conocidas, podemos calcular a partir de ellas
los valores de 𝑒𝑠 y de 𝑤𝑠, pudiendo calcular, por tanto, el valor de la humedad relativa en el
momento en que deseemos. Si pasamos los valores que obtenemos del IDV a una hoja de
cálculo de Excel, podemos crear una tabla con una variable %HR (porcentaje de humedad
relativa) que se calcule automáticamente a partir de los valores de T2 (temperatura), PSFC
(presión superficial) y Q2 (mixing ratio). En mi caso he empleado las siguientes fórmulas para
calcular los valores de 𝑒𝑠 (primera fórmula) y los valores de 𝑤𝑠 (segunda fórmula):
=6.11*10^(7.5*[@T2]/(237.7+[@T2]))
=[@Q2]/(621.97*[@Es]/([@PSFC]-[@Es]))*100
Como se puede apreciar, no es más que la traducción a Excel de las fórmulas
anteriores.
Finalmente lo que he hecho con los datos de ambas fuentes ha sido crear un libro de
Excel en el que cada hoja contuviera los datos (reales o simulados) de un determinado mes. Un
problema que ha habido que solventar es el hecho de que los archivos correspondientes a la
estación presentan una frecuencia diaria, mientras que los archivos de nuestra simulación
mantienen una frecuencia horaria, lo que dificulta la comparación entre ambas. Este problema
ha sido resuelto con las tablas que se presentan a continuación, en las que se calculan otras
variables, además de las que tenemos, que almacenan la media diaria de cada una de nuestras
variables. Estas tablas han permitido también la realización de las gráficas de comparación que
veremos a continuación, así como la obtención tanto de valores medios para cada uno de los
meses, como de valores mínimos y máximos de cada variable.
Antes de ver las gráficas, vemos a continuación un ejemplo de cada tipo de tabla. La
primera es una tabla obtenida a partir de los datos de la estación meteorológica descargados
desde Internet (en este caso se corresponde al mes de marzo), que muestra, en este orden,
temperatura, presión atmosférica y humedad relativa:
Fecha Tmp - ºC Pre - mbar HR - %
01/03/2011 2.70 917.00 51.00
02/03/2011 2.70 915.00 58.00
03/03/2011 0.90 913.00 71.00
04/03/2011 -0.40 911.00 99.00
05/03/2011 3.60 914.00 81.00
06/03/2011 5.90 913.00 64.00
07/03/2011 8.50 914.00 52.00
08/03/2011 7.20 915.00 58.00
09/03/2011 7.60 916.00 71.00
10/03/2011 8.90 917.00 60.00
11/03/2011 6.20 910.00 71.00
12/03/2011 6.20 899.00 92.00
13/03/2011 6.40 899.00 89.00
14/03/2011 7.30 897.00 94.00
15/03/2011 6.70 899.00 79.00
16/03/2011 6.70 903.00 64.00
17/03/2011 9.50 914.00 57.00
18/03/2011 10.70 920.00 58.00
19/03/2011 12.00 921.00 45.00
20/03/2011 12.00 918.00 36.00
21/03/2011 8.30 919.00 66.00
22/03/2011 6.90 920.00 60.00
23/03/2011 5.30 920.00 83.00
24/03/2011 6.40 921.00 93.00
25/03/2011 8.50 918.00 88.00
26/03/2011 9.80 912.00 84.00
27/03/2011 6.90 911.00 85.00
28/03/2011 8.00 914.00 70.00
29/03/2011 9.80 915.00 69.00
30/03/2011 11.30 920.00 67.00
31/03/2011 13.20 923.00 61.00
Promedio 7.28 913.48 70.19
La tabla correspondiente a cada mes para los datos obtenidos mediante las
simulaciones es bastante más extensa, ya que se compone de una fila para cada hora. Para
mayor comodidad, he aplicado un filtro para que solamente muestre la última hora del día.
Además de las variables anteriores, se puede apreciar la inclusión de las variables T2_Día,
PSFC_Día y %HR_Día, cuyos valores se muestran una vez al día (coincidiendo con la última
hora de éste), y no son otra cosa que el valor medio de las variables para dicho día. Será este
valor, por tanto, el que se use para comparar los datos con los obtenidos por la estación
meteorológica.
Además de estas variables, se añaden las variables Es y Q2, usadas para calcular el
valor de la humedad relativa, tal y como se ha explicado anteriormente.
Así cada tabla quedaría de la siguiente forma:
Teniendo todos los datos localizados en el mismo fichero Excel, ya podemos visualizar
diferentes gráficas que nos muestren el comportamiento que ha tenido nuestra simulación,
tanto por días como por meses.
A continuación se muestran diferentes gráficos que muestran este comportamiento.
Primero se van a mostrar varias gráficas con los valores medios de estas variables para cada
mes, según una y otra fuente. Las gráficas corresponderían a una tabla como la siguiente, en la
que ya se pueden apreciar las diferencias entre la simulación y los datos recogidos por la
estación meteorológica:
Mes T2 T2 est PSFC PSFC est %HR %HR est
Febrero 6.35746049 6.860714286 915.1958761 915.6071429 63.35316975 60.71428571
Marzo 7.029607884 7.280645161 913.0106871 913.483871 71.39912073 70.19354839
Abril 13.3291005 14.1 912.3333333 911.7847898 57.8275367 58.16666667
Mayo 16.01199678 16.54193548 914.0754963 915.0322581 60.01048494 58.38709677
Junio 19.3777075 20.27333333 913.9807534 914.9333333 51.29940393 45.36666667
Julio 20.86387688 22.38387097 912.3019258 912.6129032 44.59880989 36.48387097
Agosto 23.00407657 23.51935484 912.9145291 913.8709677 41.61272259 38.61290323
Para mejorar la visualización de los resultados, vamos a mostrar una gráfica por cada
una de las variables.
Comenzamos por la gráfica de la temperatura. En ella vemos claramente que la
temperatura obtenida por nuestra simulación queda siempre algo más fría que la recogida por
la estación meteorológica:
6,35746049
7,029607884
13,3291005
16,01199678
19,3777075
20,86387688
23,00407657
6,860714286
7,280645161
14,1
16,54193548
20,27333333
22,38387097
23,51935484
FE BRE RO MARZO ABRIL MAY O JUNIO JULIO AGOST O
TEMPERATURA (MESES)
T2 T2 est
A continuación vemos una igual para la presión:
Podemos también observar como se deduce un comportamiento de cálculo a la baja
aquí también; si bien durante el mes de abril la situación es a la inversa, vemos como todos los
demás meses la presión atmosférica calculada por nuestro modelo es siempre más pequeña
que la de las estaciones meteorológicas.
Por último, vemos las diferencias en cuanto a humedad relativa:
Al igual que para la presión, salvo el mes de abril, encontramos el error siempre en la
misma dirección; en este caso obtenemos mayor humedad relativa que la que encontramos en
los datos de la estación meteorológica. El hecho de que el mes en el que cambia esta
tendencia sea el mismo que en el caso de la presión nos puede decir que ambas situaciones
están relacionadas.
915,1958761
913,0106871
912,3333333
914,0754963
913,9807534
912,3019258
912,9145291
915,6071429
913,483871
911,7847898
915,0322581
914,9333333
912,6129032
913,8709677
F E BRE RO MA RZO A BRIL MA Y O JUNIO JULIO A GOS T O
PRESIÓN (MESES)
PSFC PSFC est
63,35316975
71,39912073
57,8275367
60,01048494
51,29940393
44,59880989
41,61272259
60,71428571
70,19354839
58,16666667
58,38709677
45,36666667
36,48387097
38,61290323
F E BRE RO MA RZO A BRIL MA Y O JUNIO JULIO A GOS T O
%HUM REL (MESES)
%HR %HR est
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX
Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX

Más contenido relacionado

La actualidad más candente

ENJ-200: Presentación de Transversalidad de Género
ENJ-200: Presentación de Transversalidad de GéneroENJ-200: Presentación de Transversalidad de Género
ENJ-200: Presentación de Transversalidad de GéneroENJ
 
Kidneys& Its Function
Kidneys& Its FunctionKidneys& Its Function
Kidneys& Its Functionraj kumar
 
Ext. nº 30, ordenanza de transporte
Ext. nº 30, ordenanza de transporteExt. nº 30, ordenanza de transporte
Ext. nº 30, ordenanza de transporteMaría Linares
 
Ext. nº 36, ordenanza sobre gaceta municipal
Ext. nº 36, ordenanza sobre gaceta municipalExt. nº 36, ordenanza sobre gaceta municipal
Ext. nº 36, ordenanza sobre gaceta municipalMaría Linares
 
Algunas Notas sobre Derecho Civil Venezolano
Algunas Notas sobre Derecho Civil VenezolanoAlgunas Notas sobre Derecho Civil Venezolano
Algunas Notas sobre Derecho Civil Venezolanoyofera
 
02 02 17_slide minggu 3 - syi34102
02 02 17_slide minggu 3 - syi3410202 02 17_slide minggu 3 - syi34102
02 02 17_slide minggu 3 - syi34102abuhannan78
 
PresentacióN Unidad 3
PresentacióN Unidad 3PresentacióN Unidad 3
PresentacióN Unidad 3guest4f1db5
 

La actualidad más candente (12)

Desalojo inquilinario saia
Desalojo inquilinario saiaDesalojo inquilinario saia
Desalojo inquilinario saia
 
Csf
CsfCsf
Csf
 
ENJ-200: Presentación de Transversalidad de Género
ENJ-200: Presentación de Transversalidad de GéneroENJ-200: Presentación de Transversalidad de Género
ENJ-200: Presentación de Transversalidad de Género
 
URINE FORMATION
URINE FORMATION URINE FORMATION
URINE FORMATION
 
Kidneys& Its Function
Kidneys& Its FunctionKidneys& Its Function
Kidneys& Its Function
 
Ext. nº 30, ordenanza de transporte
Ext. nº 30, ordenanza de transporteExt. nº 30, ordenanza de transporte
Ext. nº 30, ordenanza de transporte
 
LEY ORGÁNICA DEL SISTEMA ECONÓMICO COMUNAL
LEY ORGÁNICA DEL SISTEMA ECONÓMICO COMUNALLEY ORGÁNICA DEL SISTEMA ECONÓMICO COMUNAL
LEY ORGÁNICA DEL SISTEMA ECONÓMICO COMUNAL
 
Ext. nº 36, ordenanza sobre gaceta municipal
Ext. nº 36, ordenanza sobre gaceta municipalExt. nº 36, ordenanza sobre gaceta municipal
Ext. nº 36, ordenanza sobre gaceta municipal
 
Algunas Notas sobre Derecho Civil Venezolano
Algunas Notas sobre Derecho Civil VenezolanoAlgunas Notas sobre Derecho Civil Venezolano
Algunas Notas sobre Derecho Civil Venezolano
 
02 02 17_slide minggu 3 - syi34102
02 02 17_slide minggu 3 - syi3410202 02 17_slide minggu 3 - syi34102
02 02 17_slide minggu 3 - syi34102
 
Blood
 Blood Blood
Blood
 
PresentacióN Unidad 3
PresentacióN Unidad 3PresentacióN Unidad 3
PresentacióN Unidad 3
 

Similar a Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX

Manual -prototipo-estacion-metereologica
Manual -prototipo-estacion-metereologicaManual -prototipo-estacion-metereologica
Manual -prototipo-estacion-metereologicargarroyo79
 
Ortocorrecion radiometrica en envi
Ortocorrecion radiometrica en enviOrtocorrecion radiometrica en envi
Ortocorrecion radiometrica en enviIsaac Turpo
 
Manual chac (español)
Manual chac (español)Manual chac (español)
Manual chac (español)DIEGOS MORALES
 
Wml2 interoperability experiment
Wml2 interoperability experimentWml2 interoperability experiment
Wml2 interoperability experimentInclamSoft
 
Lynx CFD-ASM v2.0
Lynx CFD-ASM v2.0Lynx CFD-ASM v2.0
Lynx CFD-ASM v2.0WALEBUBLÉ
 
Adquisicion de datos_arduino_matlab_comu
Adquisicion de datos_arduino_matlab_comuAdquisicion de datos_arduino_matlab_comu
Adquisicion de datos_arduino_matlab_comurafaeljaya
 
Criterios de evaluacion termodinamica calculo
Criterios de evaluacion termodinamica calculoCriterios de evaluacion termodinamica calculo
Criterios de evaluacion termodinamica calculoJorge Castro
 
Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...
Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...
Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...SANTIAGO PABLO ALBERTO
 
Seminario trabajo de grado
Seminario trabajo de grado Seminario trabajo de grado
Seminario trabajo de grado Karla Tamayo
 
PID11041
PID11041PID11041
PID11041ecoran
 

Similar a Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX (20)

Manual -prototipo-estacion-metereologica
Manual -prototipo-estacion-metereologicaManual -prototipo-estacion-metereologica
Manual -prototipo-estacion-metereologica
 
Ortocorrecion radiometrica en envi
Ortocorrecion radiometrica en enviOrtocorrecion radiometrica en envi
Ortocorrecion radiometrica en envi
 
Manual de aplicación web ross mac donald
Manual de aplicación web ross mac donaldManual de aplicación web ross mac donald
Manual de aplicación web ross mac donald
 
Manual chac (español)
Manual chac (español)Manual chac (español)
Manual chac (español)
 
Wml2 interoperability experiment
Wml2 interoperability experimentWml2 interoperability experiment
Wml2 interoperability experiment
 
20 problemas
20 problemas20 problemas
20 problemas
 
Manual radiomobil
Manual radiomobilManual radiomobil
Manual radiomobil
 
Uso de radio mobile
Uso de radio mobileUso de radio mobile
Uso de radio mobile
 
Anexo 16
Anexo 16Anexo 16
Anexo 16
 
manual radio mobile
manual radio mobilemanual radio mobile
manual radio mobile
 
Lynx CFD-ASM v2.0
Lynx CFD-ASM v2.0Lynx CFD-ASM v2.0
Lynx CFD-ASM v2.0
 
Modelo Cocomo
Modelo CocomoModelo Cocomo
Modelo Cocomo
 
Adquisicion de datos_arduino_matlab_comu
Adquisicion de datos_arduino_matlab_comuAdquisicion de datos_arduino_matlab_comu
Adquisicion de datos_arduino_matlab_comu
 
Laboratorio 4
Laboratorio 4Laboratorio 4
Laboratorio 4
 
Criterios de evaluacion termodinamica calculo
Criterios de evaluacion termodinamica calculoCriterios de evaluacion termodinamica calculo
Criterios de evaluacion termodinamica calculo
 
Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...
Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...
Microcontroladores: Microcontrolador-8051 4ta Edición I. Scott MacKenzie y Ra...
 
Noveno ciclo
Noveno cicloNoveno ciclo
Noveno ciclo
 
Eesi prac2
Eesi prac2Eesi prac2
Eesi prac2
 
Seminario trabajo de grado
Seminario trabajo de grado Seminario trabajo de grado
Seminario trabajo de grado
 
PID11041
PID11041PID11041
PID11041
 

Último

Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfAnaRosaMontenegro
 
Se realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios WindowsSe realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios WindowsCZSOTEC
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxcalzadillasluis134
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOELIAMARYTOVARFLOREZD
 
SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxRAMIROANTONIOGALINDO
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.CZSOTEC
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptxmaykolmagallanes012
 

Último (7)

Webinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdfWebinar Resolucion2335 de 2023 Kubapp.pdf
Webinar Resolucion2335 de 2023 Kubapp.pdf
 
Se realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios WindowsSe realiza instalacion y configuraacion servicios Windows
Se realiza instalacion y configuraacion servicios Windows
 
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptxMacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
MacOS SISTEMA OPERATIVO CARACTERISTICAS.pptx
 
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVOSISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
SISTEMA INTEGRADO DE ADMINISTRACION FINANCIERA - SIAF MODULO ADMINISTRATIVO
 
SQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptxSQL server Analysis Services & SQL Server Reporting Services.pptx
SQL server Analysis Services & SQL Server Reporting Services.pptx
 
Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.Instalacion de servicios windows, configuracion y aplicacion.
Instalacion de servicios windows, configuracion y aplicacion.
 
Delitos informáticos en Slideshare.pptx
Delitos informáticos en  Slideshare.pptxDelitos informáticos en  Slideshare.pptx
Delitos informáticos en Slideshare.pptx
 

Simulación de condiciones climáticas y calidad del aire en la Península Ibérica con WRF y CAMX

  • 1. PRACTICUM: EL MODELO WRF-CAMX INFORME FINAL Jorge Moreno Palenzuela Laboratorio de Medio Ambiente, ETSIInf UPM Grado en Matemáticas e Informática Escuela Técnica Superior de Ingenieros Informáticos (ETSIInf) Universidad Politécnica de Madrid
  • 2. Contenido 1. Introducción.......................................................................................................................... 2 1.1 Resumen.............................................................................................................................. 2 1.2 Datos del alumno ................................................................................................................ 2 1.3 Datos del Centro.................................................................................................................. 2 2. Descripción de las tareas....................................................................................................... 3 2.1 Tareas Propuestas............................................................................................................... 3 2.2 Instalación de las herramientas necesarias ........................................................................ 5 2.3 Preparación de los datos para la ejecución del WRF. Ejecución de WPS............................ 6 2.4 Ejecución del modelo WRF y visualización de los datos obtenidos .................................... 8 2.5 Visualización de la salida del WRF..................................................................................... 20 2.6 Compilación del modelo CAMx......................................................................................... 22 2.7 Obtención del input para CAMx e instalación de pre-procesadores ................................ 22 2.8 Obtención de las emisiones para el CAMx........................................................................ 24 2.9 Ejecución del CAMx........................................................................................................... 36 2.10 Visualización de los archivos del CAMx........................................................................... 42 2.11 Resultados obtenidos...................................................................................................... 43 3. Conclusión........................................................................................................................... 62 4. Diario de la actividad realizada ........................................................................................... 63 5. Referencias y enlaces de interés......................................................................................... 85 Anexo A: Código de calcula_emis.c............................................................................................. 86
  • 3. 1. Introducción 1.1 Resumen En el presente documento se analiza el trabajo realizado como becario en el Laboratorio de Medio Ambiente (LMA) de la Escuela Técnica Superior de Ingenieros Informáticos (ETSIINF) de la Universidad Politécnica de Madrid, como parte de la asignatura de Prácticum perteneciente al 7º semestre del Grado de Matemáticas e Informática impartido en el mismo centro. A través de él, se describirán tareas realizadas en esta entidad, y se tratará de hacer una evaluación de éstas. Para ello, se valorará el uso de conocimientos adquiridos durante la carrera en la resolución de los problemas planteados, así como las aportaciones que estas tareas hayan supuesto en materia de aprendizaje. El presente es un informe final de la asignatura. En él se plasma el trabajo realizado en el centro especificado desde el 2 de septiembre de 2011, fecha de inicio de las prácticas, hasta el 16 de diciembre, fecha de entrega de este informe, siguiendo el esquema y las pautas dictadas en la página web de la asignatura, que se puede encontrar al final del documento. 1.2 Datos del alumno Nombre: Jorge Moreno Palenzuela Matrícula: u12m008 Estudios: Grado en Matemáticas e Informática Curso: 4º Universidad: Universidad Politécnica de Madrid Centro: ETSIInf Tutor académico: Roberto San José 1.3 Datos del Centro Unidad de acogida: Grupo de modelos y software para el medioambiente Ubicación: Laboratorio Medio Ambiente, ETSIInf (UPM), Campus de Montegancedo Tutor profesional: Juan Luis Pérez Camaño
  • 4. 2. Descripción de las tareas 2.1 Tareas Propuestas El trabajo propuesto durante el periodo de Prácticum consiste en realizar simulaciones tanto de las condiciones atmosféricas como de la calidad del aire en un determinado dominio. El objetivo final es el de simular la evolución de estas condiciones (atmosféricas y de contaminación) a lo largo de un periodo de un año entero (el año 2011) en un dominio que abarcará la Península Ibérica y sus alrededores. Para ello, haremos uso de dos modelos bastante importantes en la actualidad: el modelo climatológico WRF y el modelo de calidad del aire CAMx. El modelo WRF (Weather Research and Forecasting) es un sistema de predicción numérica del clima, diseñado para servir tanto a la predicción operativa como al estudio de la atmósfera en dominios que pueden ir desde pocos metros hasta miles de kilómetros de tamaño. El esfuerzo para desarrollar esta herramienta empezó en la última década del siglo XX, como fruto de una colaboración entre entidades como NCAR, NCEP, FSL, AFWA, FAA entre otros. Tiene más de 25.000 usuarios registrados en 154 países diferentes y es, sin duda, el modelo atmosférico en uso más popular hoy en día. Su código está escrito en Fortran 90 en su totalidad y es completamente libre, sin restricciones en su modificación. Este modelo es el sucesor del modelo MM5. El otro modelo que usaremos, el CAMx (Comprehensive Air quality Model with eXtensions), se encargará de medir la calidad de aire de nuestro dominio. Este modelo es un modelo euleriano de dispersión fotoquímica que permite realizar evaluaciones de la contaminación del aire troposférico (ozono, partículas, sustancias tóxicas del aire y mercurio) en un determinado dominio que puede abarcar desde un barrio hasta un continente. A este modelo se le puede suministrar como input datos meteorológicos obtenidos de distintos modelos de predicción de clima (en nuestro caso obtenidos mediante el modelo WRF, aunque también se le podrían pasar de modelos como el MM5 y el RAMS) y datos de emisiones obtenidos desde distintos procesadores de emisiones (como SMOKE, CONCEPT, EPS y EMS, aunque en nuestro caso las emisiones estarán obtenidas con el modelo EMIMO, diseñado por esta universidad, y que ya habrá sido corrido previamente). Así pues, la tarea a realizar será por lo tanto hacer primero una simulación de las condiciones climatológicas con el modelo WRF para, más adelante, poder usarlas como entrada cuando se ejecute el modelo de calidad del aire CAMx. Para llevar a cabo esta tarea, el proceso que se deberá llevar a cabo será el siguiente: 1. Descargar y compilar las librerías necesarias para el funcionamiento de nuestros modelos (librerías netcdf, … 2. Descargar y compilar tanto el modelo WRF como su sistema de pre-procesamiento (WPS o WRF Pre-processing System). 3. Descargar y compilar el modelo CAMx de calidad del aire. 4. Descargar y compilar todos los programas de pre-procesamiento y post- procesamiento que necesitamos para el desempeño de nuestras tareas. Esto incluye programas como el WRFCAMx para convertir la salida del WRF en input para el CAMx, programas para obtener la input restante necesaria para los modelos, o post-procesadores que nos ayudarán a visualizar los datos obtenidos.
  • 5. 5. Configurar los modelos para que funcionen con nuestro dominio y en el periodo de tiempo que deseemos. 6. Obtener los archivos de entrada necesarios para el WRF para poder ejecutarse en el dominio deseado y en las fechas deseadas. 7. Ejecutar el modelo WRF, obteniendo como salida los archivos que contendrán los datos atmosféricos del dominio en la fecha deseada. 8. Visualizar los datos obtenidos con una herramienta adecuada. Comparar estos datos con los obtenidos por las distintas estaciones meteorológicas y, en el caso de que no sean del todo correctos, modificar los parámetros del modelo y volver a ejecutarlo hasta que los datos sean fiables. 9. Una vez obtenidas las condiciones atmosféricas correctas en nuestro dominio, pasarlas por el WRFCAMx para convertirlas en archivos input para el CAMx. 10. Manipular los datos de emisiones de los que se dispone (del año 2011) para poder pasárselos al CAMx con el formato correcto. 11. Obtener los distintos archivos de entrada que, junto a los datos meteorológicos obtenidos con el WRF y a los datos de emisiones, se deben pasar al CAMx para su funcionamiento. 12. Ejecutar el modelo CAMx para obtener los datos de concentración de especies químicas en el dominio deseado durante el año 2011. 13. Visualizar los datos obtenidos con una herramienta adecuada. Comparar estos datos con los obtenidos con los conocidos y, en el caso de que no sean correctos, modificar los parámetros del modelo y volver a ejecutarlo hasta que los datos sean fiables. 14. Sacar conclusiones de los datos obtenidos tanto por el WRF como por el CAMx. Como se ha mencionado antes, el periodo de tiempo que deberán abarcar nuestras simulaciones como objetivo es el del año 2011. Para este año deberemos realizar los cálculos pertinentes en cada uno de nuestros dominios. Los dominios en los que debemos realizar la simulación son 2, ambos centrados en Madrid: uno más grande, que abarca una superficie de 2.000 x 2.000 kilómetros con una resolución (tamaño de celdilla) de 25 x 25 kilómetros, y uno más pequeño, contenido en el anterior, de un tamaño de 400 x 400 kilómetros, con una resolución de 5 x 5 kilómetros. Una aproximación gráfica de nuestro dominio sería la que se aprecia en la siguiente imagen: A continuación, se detallan cada una de las tareas llevadas a cabo durante el periodo de duración del Practicum.
  • 6. 2.2 Instalación de las herramientas necesarias Como hemos mencionado, será necesario descargar y compilar no solo nuestros dos modelos principales (WRF y CAMx), si no toda una serie de herramientas que nos serán necesarias para su funcionamiento o para la realización de tareas adicionales. Así pues, a continuación se muestran los pasos seguidos en cuanto a la instalación de estas herramientas necesarias: Instalación de librerías necesarias: Para poder compilar y hacer funcionar nuestros programas estos requieren de funciones que pertenecen a librerías externas, por lo que tendremos que compilar estas librerías antes. Cabe destacar que para la compilación de estas librerías y, en general, para la compilación de todas las herramientas, necesitaremos disponer de compiladores tanto de C como de Fortran. En nuestro caso usaremos el compilador gcc para C y el compilador gfortran (y en algunos casos ifort, de Intel) para Fortran. Estos compiladores ya se encuentran en nuestra máquina, pero si no fuera así habría que instalarlos primero. Es muy importante para el correcto funcionamiento de nuestras herramientas que los compiladores de C y Fortran que se usen sean los mismos para las diferentes librerías y programas. La instalación de estas librerías se basa en la creación de determinadas variables de entorno y la ejecución de sus ficheros Makefile una vez seleccionada la configuración. Así pues, las librerías que he instalado son las siguientes: - NetCDF: Instalé una versión especial de esta librería que combinaba directamente NetCDF para C y NetCDF para Fortran (normalmente vienen separados y hay que ocuparse de instalar ambos). Esta librería es siempre necesaria. - zlib, libpng y JasPer: Estas librerías de compresión son necesarias si queremos que el WPS (WRF Pre-Processing System) admita archivos del tipo GRIB2. En nuestro caso sí haremos uso de estos archivos, con lo que se hace necesario la instalación de estas librerías. - MPICH: En un principio instalamos está librería, necesaria para correr el modelo en paralelo, por si en un futuro queremos ejecutarlo así, aunque de momento no es nuestro caso. - IOAPI: Esta librería no es necesaria ni para correr los modelos WRF y CAMx ni las demás herramientas. Se instaló porque permite la instalación de herramientas que pueden servir para la visualización de los resultados del CAMx y para compartir los ficheros obtenidos con los obtenidos por mi compañero de prácticas, que usa archivos con distinto formato.
  • 7. Compilación del WRF y del WPS Una vez instaladas las librerías necesarias, estamos listos para compilar estas dos herramientas. Primero compilaremos el WRF, que es el modelo propiamente dicho, para luego compilar su sistema de pre-procesamiento, o WPS (necesario dado que vamos a ejecutar casos reales, no idealizados). Para ello, lo primero será descargar y descomprimir ambas herramientas (descargamos la última versión de ambas). Para compilar el WRF, primero deberemos ejecutar el archivo configure, que nos pedirá seleccionar los compiladores que queremos usar (nosotros usaremos gcc y gfortran) y el tipo de nesting que queremos que haya en nuestra simulación (aquí seleccionamos que sea de tipo básico). Una vez hecha esta selección, podemos ejecutar el archivo compile, pasándole como parámetro el tipo de caso que queremos simular (en nuestro caso simulamos casos reales así que le pasamos la opción em_real) para proceder a la compilación del WRF (un proceso que puede llevar hasta 20-30 minutos). Con esto, se nos habrán creado los ficheros ejecutables correspondientes. La compilación del WPS es similar a la del WRF. Ejecutamos configure, haciendo la selección de nuestros compiladores, que son los mismo que antes, y luego ejecutamos el fichero compile para obtener los distintos ejecutables que componen el WPS (geogrid.exe, ungrib.exe y metgrid.exe). Tras estas instalaciones ya podemos empezar a preparar nuestra simulación meteorológica. 2.3 Preparación de los datos para la ejecución del WRF. Ejecución de WPS. Ya disponemos de todas las herramientas necesarias para poder realizar una de las simulaciones que tenemos como objetivo, la simulación de las condiciones climatológicas en nuestro dominio. Para realizar la simulación de calidad del aire será necesario la instalación de alguna herramienta más, además de la del CAMx. Así pues, para poder empezar con la simulación lo siguiente que hará falta es obtener los datos de la realidad que el modelo necesita para poder ejecutarse. Estos datos serán de dos tipos: - Datos geográficos: Contienen la información física del terreno de todo el globo terrestre, que será la misma para cualquier fecha en la que queramos realizar la simulación. Descargaremos estos datos de la página oficial del WRF. - Datos meteorológicos reales: Son los datos obtenidos a través de las estaciones meteorológicas de todo el mundo. Contienen los datos de precipitaciones, temperaturas, y demás variables climatológicas. Se producen 4 ficheros de este tipo al día, con los datos obtenidos a las 0h, a las 6h, a las 12h y a las 18h. Las fechas de estos ficheros deberán coincidir con la fecha en que se produce nuestra simulación, siendo necesario disponer de todos los ficheros que coincidan con nuestra simulación, por lo que nosotros descargaremos todos los correspondientes al año 2011. Por mi parte, los archivos que he seleccionado son archivos de tipo GRIB2 de la NCEP FNL, que almacena archivos de datos desde 1999 hasta día de hoy.
  • 8. Una vez descargados estos datos será el WPS el encargado de trabajar con ellos para obtener ficheros input que puedan ser suministrados al WRF para realizar la simulación. Para ello, deberemos ejecutar el WPS sobre los datos obtenidos, lo que consistirá en la ejecución secuencial de los 3 archivos que hemos visto que componen el WPS (geogrid.exe, ungrib.exe y metgrid.exe). Lo primero será configurar el WPS para que funcione de acuerdo a nuestro dominio. Para ello, será necesario modificar el fichero dentro de la carpeta del WPS llamado namelist.wps, que contendrá todos los parámetros que el WPS mira a la hora de ejecutarse. El contenido de este fichero para funcionar en nuestra localización geográfica y temporal es el siguiente: &share wrf_core = 'ARW', max_dom = 2, start_date = '2011-01-01_00:00:00','2011-01-01_00:00:00', end_date = '2011-12-31_00:00:00','2011-12-31_00:00:00', interval_seconds = 21600 io_form_geogrid = 2, / &geogrid parent_id = 1, 1, parent_grid_ratio = 1, 5, //ratio de resolución entre ambos dominios i_parent_start = 1, 33, j_parent_start = 1, 33, e_we = 81, 81, e_sn = 81, 81, geog_data_res = '10m','2m', dx = 25000, dy = 25000, map_proj = 'lambert', ref_lat = 40.50, ref_lon = -03.93, truelat1 = 50.0, truelat2 = 20.0, stand_lon = -03.93, geog_data_path = '/home/mi2/Build_WRF/WPS_GEOG/' / &ungrib out_format = 'WPS', prefix = 'FILE', / &metgrid fg_name = 'FILE' io_form_metgrid = 2, /
  • 9. Esta información contiene tanto coordenadas reales de nuestro dominio (latitud y longitud del centro entre otros) como la información de nuestras rejillas de celdas de la simulación. Los valores anteriores significan que nuestro dominio grande consta de 81x81 celdillas de 25 km de tamaño (cada lado de nuestro dominio es de 2.000 km = 25 km/celdilla * 80 celdillas, pero para que funcione correctamente más adelante debemos pasar 81 celdillas) y el dominio pequeño tiene una resolución 5 veces mayor (ratio respecto al padre = 5) y está compuesto por 81x81 celdillas de 5km de resolución (400 km = 5 km/celdilla * 80 celdillas, pero también aquí es necesario pasar 81), además de estar situado en el centro del dominio grande, lo cual se consigue indicando que el dominio pequeño empieza en la celdilla (33,33) del padre que hemos calculado (aquí se tuvo que hacer una rectificación, ya que anteriormente, por problemas derivados de la forma en la que se hace la selección de la casilla inicial en distintos modelos, se seleccionó como celdilla inicial la celdilla (32,32), lo que hacía que nuestro dominio no estuviera del todo centrado). Una vez están configurados todos los parámetros, ejecutamos las distintas partes del WPS: - Primero ejecutamos el geogrid.exe, que se encargará de procesar los archivos geográficos descargados anteriormente. - Después ejecutamos ungrib.exe, que hará lo propio con los archivos meteorológicos. - Una vez ejecutados los programas anteriores, ejecutamos metgrid.exe para que interpole entre los ficheros resultantes de las ejecuciones de estos dos programas, dando como resultado los ficheros finales que pasaremos al WRF. 2.4 Ejecución del modelo WRF y visualización de los datos obtenidos Una vez se ha ejecutado el WPS y obtenido los ficheros de entrada del WRF, ya estamos listos para ejecutar el modelo. Para ello, primero debemos configurar los parámetros de nuestra simulación de igual manera que hemos hecho anteriormente para el WPS, cambiando estos parámetros en un fichero que esta vez se llama namelist.input. La configuración de estos parámetros es importante no solo porque haya que ajustarlos para que el modelo sea capaz de ejecutarse correctamente sin producir ningún fallo, sino porque dependiendo de las opciones que elijamos para los diferentes parámetros de física, dinámica o demás aspectos, estaremos ejecutando el modelo de forma bastante distinta a como se ejecutaría si eligiéramos otros parámetros diferentes, lo que hará que el resultado final de nuestra simulación varíe bastante también según como configuremos estos parámetros. Es por esto que dos personas que se dediquen a simular una misma zona durante el mismo periodo de tempo no vayan a obtener seguramente el mismo resultado, a pesar de que utilicen la misma herramienta de simulación en nuestro caso el WRF (no hablemos ya si utilizan herramientas distintas). Por todo esto la configuración de estos parámetros es tan importante, porque dependiendo de ésta el resultado que obtendremos se ajustará más o menos a la realidad. Esta es la parte principal de nuestro trabajo, que consiste en encontrar la configuración que mejor resultados dé en nuestro caso particular. Para encontrar esta configuración idónea, el procedimiento que debemos seguir no es otro que el de “prueba y error”, haciendo distintas simulaciones de un mismo periodo cambiando un solo parámetro cada vez para poder comparar y decidir poco a poco qué combinación de opciones es la que sale mejor parada.
  • 10. Bastantes parámetros serán iguales para todas las simulaciones de “prueba y error” que realizamos, como todos aquellos que se encarguen de ajustar la fecha y la localización de nuestro dominio, así que los que intentaremos cambiar serán los demás. Los parámetros que he ido modificando y ajustando para intentar obtener la mejor simulación posible se listan a continuación, junto con los valores que pueden tomar y el significado de cada valor. Estos datos están extraídos directamente de la guía de usuario del WRF, concretamente del capítulo 5, que se encuentra en la siguiente página: http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap5.htm#Nml En la página anterior podemos encontrar una tabla con todas las variables distintas que se pueden modificar en este apartado. A continuación se muestran solamente las que especificamos en nuestro fichero namelist.input, que serán aquellas que probemos a modificar. Cabe destacar que, aunque hemos elegido al final los valores que estas variables toman, no hemos elegido cuales de todas las variables que aparecen en la página anterior especificamos para nuestra simulación, sino que hemos modificado las variables que aparecían en nuestro fichero namelist.input por defecto. La tabla de las variables que usamos es la siguiente. Se compone de 3 columnas, donde la primera especifica el nombre de la variable, la segunda recoge los valores posibles de la variable o el valor por defecto de ésta, según si la variable requiera una opción o un valor numérico, y la tercera es una breve descripción del significado de cada valor para dicha variable. Variable Valor Descripción mp_physics (max_dom) 0 (default) no microphysics 1 Kessler scheme 2 Lin et al. scheme 3 WSM 3-class simple ice scheme 4 WSM 5-class scheme 5 Ferrier (new Eta) microphysics, operational High-Resolution Window 6 WSM 6-class graupel scheme 7 Goddard GCE scheme (also usesgsfcgce_hail and gsfcgce_2ice) 8 Thompson graupel scheme (2-moment scheme in V3.1) 9 Milbrandt-Yau 2-moment scheme 10 Morrison 2-moment scheme 11 CAM 5.1 5-class scheme 13 SBU_YLin, 5-class scheme 14 WRF double moment, 5-class scheme 16 WRF double moment, 6-class scheme 17 NSSL 2-moment 4-ice scheme (steady background CCN) 18 NSSL 2-moment 4-ice scheme with predicted CCN (better for idealized than real cases); to set a global CCN value, usenssl_cccn = 0.7e9 (CCN for NSSL scheme 18). Also sets same value to ccn_conc for mp_physics = 18.
  • 11. 19 NSSL 1-moment, 6-class scheme 21 NSSL-LFO 1-moment, 6-class; very similar to Gilmore et al. 2004; can set intercepts and particle densities in physics namelist, e.g., nssl_cnor for NSSL 1-moment schemes, intercept and particle densities can be set for snow, graupel, hail, and rain. For the 1- and 2-moment schemes, the shape parameters for graupel and hail can be set. See/WRFV3/run/README.namelist file for specifics 28 aerosol-aware Thompson scheme with water- and ice- friendly aerosol climatology (new for V3.6); this option has 2 climatological aerosol input options: use_aero_icbs = .F. (use constant values), and use_aero_icbc = .T. (use input from WPS) 30 HUJI (Hebrew University of Jerusalem, Israel) spectral bin microphysics, fast version 32 HUJI spectral bin microphysics, full version 95 Ferrier (old Eta), operational NAM (WRF NMM) 98 Thompson scheme in V3.0 ra_lw_physics (max_dom) 0 (default) no longwave radiation 1 rrtm scheme (Default values for GHG in V3.5: co2vmr=379.e-6, n2ovmr=319.e-9, ch4vmr=1774.e-9; Values used in previous versions: co2vmr=330.e-6, n2ovmr=0., ch4vmr=0.) 3 CAM scheme *Note: restart must be at 6-hourly interval; also requires levsiz, paerlev, cam_abs_dim1(2); see below 4 rrtmg scheme (Default values for GHG in V3.5: co2vmr=379.e-6, n2ovmr=319.e-9, ch4vmr=1774.e-9) 24 fast rrtmg scheme for GPU and MIC 5 Goddard scheme 7 FLG (UCLA) scheme 31 Earth Held-Suarez forcing 99 GFDL (Eta) longwave (semi-supported); also must use co2tf = 1 for ARW ra_sw_physics (max_dom) 0 (default) no shortwave radiation 1 Dudhia scheme (ptop > 50 mb) 2 (old) Goddard shortwave scheme 3 CAM scheme (restart must be at 6-hourly interval); must set levsiz, paerlev, cam_abs_dim1/2 4 rrtmg scheme 24 fast rrtmg scheme for GPU and MIC 5 Goddard scheme 7 FLG (UCLA) scheme 99 GFDL (Eta) longwave (semi-supported); must use co2tf = 1 for ARW
  • 12. radt (max_dom) 30 minutes between radiation physics calls. Recommended 1 minute per km of dx (e.g. 10 for 10 km grid); use the same value for all nests sf_sfclay_physics (max_dom) surface layer option 0 (default) no surface-layer 1 Revised MM5 Monin-Obukhov scheme (Jimenez, renamed in v3.6) 2 Monin-Obukhov (Janjic Eta) scheme 3 NCEP GFS scheme (NMM only) 4 QNSE 5 MYNN 7 Pleim-Xiu (ARW only), only tested with Pleim-Xiu surface and ACM2 PBL 10 TEMF (ARW only) 91 old MM5 surface layer scheme (previously option 1) switch to control land thermal roughness length 0 (default) old, or non-vegetation dependent thermal roughness length over land 1 veg dependent Chen-Zhang Czil sf_surface_physics (max_dom) land-surface option (set this before runningreal.exe; also make surenum_soil_layers is set correctly) 0 (default) no surface temp prediction 1 thermal diffusion scheme 2 unified Noah land-surface model 3 RUC land-surface model 4 Noah-MP land-surface model (additional options under the &noah_mp section) 5 CLM4 (Community Land Model Version 4) 7 Pleim-Xiu scheme (ARW only) 8 SSiB land-surface model (ARW only). Works with ra_lw_physics = 1, 3, or 4, and ra_sw_physics = 1, 3, or 4 sf_urban_physics activate urban canopy model (in Noah LSM only) 0 (default) off 1 Single-layer, UCM 2 Multi-layer, Building Environment Parameterization (BEP) scheme (works only with the MYJ and BouLac PBL) 3 Multi-layer, Building Environment Model (BEM) scheme (works only with MYJ and BouLac PBL) num_soil_layers number of soil layers in land surface model (set before running real.exe) 5 (default) thermal diffusion scheme for temp only 4 Noah land-surface model 6 RUC land-surface model 10 CLM4 land-surface model 2 Pleim-Xu land-surface model 3 SSiB land-surface model bl_pbl_physics (max_dom) boundary layer option
  • 13. 0 (default) no boundary-layer 1 YSU scheme; use sf_sfclay_physics =1 2 Mellor-Yamada-Janjic (Eta) TKE scheme; use sf_sfclay_physics=2 3 NCEP GFS scheme (NMM only); use sf_sfclay_physics=3 4 QNSE-EDMF; use sf_sfclay_physics=4 5 MYNN 2.5 level TKE; use sf_sfclay_physics=1, 2, or 5 6 MYNN 3rd level TKE; use sf_sfclay_physics=5 7 ACM2 (Pleim) scheme (ARW only); use sf_sfclay_physics=1 or 7 8 Bougeault and Lacarrere (BouLac) TKE; use sf_sfclay_physics=1 or 2 9 Bretherton-Park/UW TKE scheme; use sf_sfclay_physics=1 or 2 10 TEMF scheme (ARW only); use sf_sfclay_physics=10 11 Shin-Hong 'scale-aware' PBL scheme 12 GBM TKE-type scheme (ARW only); use sf_sfclay_physics=1 99 MRF scheme (to be removed in the future) cu_physics (max_dom) cumulus parameterization option 0 (default) no cumulus parameterization 1 Kain-Fritsch (new Eta) scheme 2 Betts-Miller-Janjic scheme 3 Grell-Freitas ensemble scheme 4 Old GFS Simplified Arakawa-Schubert (SAS) 5 New Grell scheme (G3) 6 Tiedtke scheme (ARW only) 7 Zhang-McFarlane from CESM (works with MYJ and UW PBL) 11 Multi-scale Kain-Fritsch scheme 14 New GFS SAS from YSU (ARW only) 16 A newer Tiedke scheme 84 New SAS (HWRF) 93 Grell-Devenyi ensemble scheme 99 previous Kain-Fritsch scheme cudt 0 minutes between cumulus physics calls; should be set to 0 when using allcu_physics except Kain-Fritsch (0 = call every time step) isfflx heat and moisture fluxes from the surface for real-data cases and when a PBL is used (only works withsf_sfclay_physics=1, 5, 7, or 11) 1 = fluxes are on 0 = fluxes are off It also controls surface fluxes when diff_opt = 2 and km_opt = 3, and a PBL isn’t used 0 = constant fluxes defined bytke_drag_coefficient andtke_heat_flux
  • 14. 1 = use model-computed u* and heat and moisture fluxes 2 = use model-computed u* and specified heat flux by tke_heat_flux ifsnow snow-cover effects (only works forsf_surface_physics=1) 1 (default) with snow-cover effect 0 without snow-cover effect icloud (default) cloud effect to the optical depth in radiation (only works withra_sw_physics=1,4 andra_lw_physics=1,4); since V3.6 this also controls the cloud fraction options 1 (default) with cloud effect, and use cloud fraction option 1 (Xu-Randall mehod) 0 without cloud effect 2 with cloud effect, and use cloud fraction option 2, 0/1 based on threshold 3 with cloud effect, and use cloud fraction option 3, a Sundqvist method (Sundqvist et al. 1989) surface_input_source where landuse and soil category data come from 1 (default) WPS/geogrid, but with dominant categories recomputed in real 2 GRIB data from another model (only if arrays VEGCAT/SOILCAT exist) 3 use dominant land and soil categories from WPS/geogrid w_damping vertical velocity damping flag (for operational use) 0 (default) no damping 1 with damping diff_opt (max_dom) turbulence and mixing option 0 no turbulence or explicit spatial numerical filters (km_opt is ignored) 1 (default) evaluates 2nd order diffusion term on coordinate surfaces, uses kvdif for vertical diffusion unless PBL option is used, may be used withkm_opt = 1 (recommended for real-data case) and 4 2 evaluates mixing terms in physical space (stress form) (x,y,z); turbulence parameterization is chosen by specifying km_opt km_opt (max_dom) eddy coefficient option 1 (default) constant (use khdif and kvdif) 2 1.5 order TKE closure (3D) ** Not recommended for DX > 2 km 3 Smagorinsky first order closure (3D) **Not recommended for DX > 2 km 4 horizontal Smagorinsky first order closure (recommended for real-data case) diff_6th_opt (max_dom) 6th-order numerical diffusion 0 (default) no 6th-order diffusion 1 6th-order numerical diffusion
  • 15. 2 6th-order numerical diffusion, but prohibit up-gradient diffusion diff_6th_factor 0.12 6th-order numerical diffusion non-dimensional rate (max value 1.0 corresponds to complete removal of 2dx wave in one timestep) damp_opt upper-level damping flag 0 (default) no damping 1 with diffusive damping; maybe used for real-data cases (dampcoef nondimensional ~ 0.01 to 0.1) 2 with Rayleigh damping (dampcoef inverse time scale [1/s], e.g. 0.003) 3 with Rayleigh damping (dampcoef inverse time scale [1/s], e.g. 0.2; for real-data cases) base_temp 290 base state temperature (K); real only damp_opt upper-level damping flag 0 (default) no damping 1 with diffusive damping; maybe used for real-data cases (dampcoef nondimensional ~ 0.01 to 0.1) 2 with Rayleigh damping (dampcoef inverse time scale [1/s], e.g. 0.003) 3 with Rayleigh damping (dampcoef inverse time scale [1/s], e.g. 0.2; for real-data cases) zdamp (max_dom) 5000 damping depth (m) from model top dampcoef (max_dom) 0 damping coefficient (see damp_opt) khdif (max_dom) 0 horizontal diffusion constant (m2 /s) kvdif (max_dom) 0 vertical diffusion constant (m2 /s) non-hydrostatic (max_dom) .true. (default) running the model in non-hydrostatic mode moist_adv_opt (max_dom) advection options for moisture 0 simple 1 (default) positive-definite 2 monotonic 3 5th-order WENO (Weighted Essentially Non-Oscillatory) 4 5th-order WENO with positive definite scalar_adv_opt (max_dom) advection options for scalars 0 simple 1 (default) positive-definite 2 monotonic 3 5th-order WENO 4 5th-order WENO with positive definite
  • 16. Como hemos visto, todas estas variables aparecían en nuestro fichero namelist.input inicialmente; no hemos incluido nuevos parámetros. Los valores que estas variables tenían por defecto en nuestro fichero eran los siguientes: &physics mp_physics = 3, 3, 3, ra_lw_physics = 1, 1, 1, ra_sw_physics = 1, 1, 1, radt = 30, 30, 30, sf_sfclay_physics = 1, 1, 1, sf_surface_physics = 2, 2, 2, bl_pbl_physics = 1, 1, 1, bldt = 0, 0, 0, cu_physics = 1, 1, 0, cudt = 5, 5, 5, isfflx = 1, ifsnow = 1, icloud = 1, surface_input_source = 1, num_soil_layers = 4, sf_urban_physics = 0, 0, 0, &dynamics w_damping = 0, diff_opt = 1, 1, 1, km_opt = 4, 4, 4, diff_6th_opt = 0, 0, 0, diff_6th_factor = 0.12, 0.12, 0.12, base_temp = 290. damp_opt = 0, zdamp = 5000., 5000., 5000., dampcoef = 0.2, 0.2, 0.2 khdif = 0, 0, 0, kvdif = 0, 0, 0, non_hydrostatic = .true., .true., .true., moist_adv_opt = 1, 1, 1, scalar_adv_opt = 1, 1, 1, Para no modificar los valores de estas variables a ciegas, basándonos solamente en los valores que podía coger cada una y haciendo “prueba y error” con cada uno de estos valores, nos hemos guiado por las indicaciones que encontramos en el capítulo de la guía de usuario del WRF del enlace anterior. En dicho capítulo se indica para cada variable cuáles son los valores aconsejados según la naturaleza de la simulación, el tamaño de las celdillas o el tiempo de simulación. Esto se complementa además con una muestra de configuraciones adecuadas para varias simulaciones de ejemplo, las cuales también han sido de gran ayuda, dado que había alguna cuyo dominio se asemejaba al nuestro.
  • 17. Tras varias simulaciones de prueba, la configuración que elegí finalmente para simular el año entero fue la siguiente: &physics mp_physics = 8, 8, ra_lw_physics = 4, 4, ra_sw_physics = 4, 4, radt = 25, 25, sf_sfclay_physics = 1, 1, sf_surface_physics = 2, 2, bl_pbl_physics = 1, 1, bldt = 0, 0, cu_physics = 3, 3, cudt = 5, 5, isfflx = 1, ifsnow = 1, icloud = 1, surface_input_source = 1, num_soil_layers = 4, sf_urban_physics = 0, 0, &dynamics w_damping = 0, diff_opt = 2, 2, km_opt = 4, 4, diff_6th_opt = 0, 0, diff_6th_factor = 0.12, 0.12, base_temp = 288. damp_opt = 0, zdamp = 5000., 5000., dampcoef = 0.2, 0.2, khdif = 0, 0, kvdif = 0, 0, non_hydrostatic = .true., .true., moist_adv_opt = 1, 1, scalar_adv_opt = 1, 1, Una vez sabemos qué configuración vamos a usar para nuestra simulación, podemos empezar a pensar en simular el año entero. Para ello tenemos que pensar la estrategia a seguir primero: podemos simular el año entero de golpe o por periodos más cortos, como varios meses o semanas. En mi caso he elegido simular periodos de un mes de largo, para poder hacerlo de forma más organizada, y luego poder juntarlo todo. Así pues, cada vez que haga una simulación se simulará un mes distinto, simulando algún día previo para intentar mejorar las condiciones iniciales, aunque luego estos días previos se desecharán. Varios factores a tener en cuenta para nuestra simulación tienen que ver con los recursos de los que disponemos, tanto de espacio como de tiempo. Por un lado, nuestra máquina dispone de un espacio de almacenamiento limitado, y tenemos que prestar atención a que los datos de salida que obtenemos con el WRF, que suelen ocupar bastante, no superen nuestras capacidades. Con respecto al tiempo, estas simulaciones llevan bastante en completarse, por lo que hay que asegurarse de que se pueden completar antes de la fecha límite, calculando el tiempo que necesitamos para simular el año entero.
  • 18. Para estudiar el problema del almacenamiento de estos ficheros, observamos lo que nos ocupa cada fichero de salida y, a partir de esto, intentamos calcular lo que nos ocuparía un año de simulación: - El tamaño del archivo de salida de 1 día de simulación en 1 dominio es de 414721872 B = 405001,828125 KB = 395,5095977783203 MB - Como los dos dominios tienen el mismo número de celdillas pesan lo mismo, luego el tamaño total que ocupa 1 día de simulación es de 791,0191955566406 MB - Calculando cuánto ocuparía 1 año de simulaciones nos sale: 791,0191955566406 MB/día * 365 días = 288722,0063781738 MB = 281,9550843536854 GB Estos más de 280 GB contrastaban con los 150 GB de los que disponíamos en el momento en el que se realizó en cálculo, por lo fue necesario buscar una solución. Finalmente se optó por comprimir los ficheros de salida (utilizando el comando tar ), lo que reducía el tamaño de estos archivos de forma significativa, hasta el punto de solventar nuestro problema. Como nuestras simulaciones son de periodos de un mes de longitud, opté por reducir el número de archivos comprimidos a uno por mes y por dominio, haciendo un total de 24 archivos comprimidos. Me hice scripts tanto para comprimir los archivos una vez finalizara la simulación del mes como para que se extrajeran automáticamente en el momento en el que se requirieran (para la visualización de estos o la conversión a formato del CAMx). El tiempo que tardara en simularse un año entero era un factor a tener en cuenta no solo por saber cuándo había que poner a simular el año para no pasarse de la fecha límite sino también porque este factor se ve alterado en gran cantidad por diversos de los parámetros de configuración que hemos visto anteriormente, por lo que había que hacer que esta configuración se asemejara lo máximo posible a la realidad sin que la duración de la simulación se fuera demasiado. Así pues, finalmente la decisión estuvo entre dos configuraciones distintas, la primera más precisa pero también más larga que la segunda, necesitando un total de 31 días para hacer la simulación de un año entero, frente a los 19 días que necesitaba la otra configuración. Finalmente, opté por la más precisa, con fin de tener todos los datos finales para la presentación oral a hacer en enero. Así pues, una vez decididas todas las características de nuestra simulación, y tras haber realizado bastantes simulaciones de prueba, podemos proceder a la simulación final, la que nos dará los ficheros finales que presentaremos. Como hemos visto, hemos optado por simular mes a mes, así que esta simulación en realidad se compondrá de 12 simulaciones distintas, donde comenzaremos a simular una inmediatamente acabe la anterior, para no desperdiciar tiempo de máquina. El archivo namelist.input (que como hemos visto almacena todos los parámetros de la simulación) deberá corresponder a la simulación del mes que queramos, y debemos cambiarlo cada vez que queramos simular un nuevo mes. Un ejemplo de este archivo, adaptado para simular el mes de septiembre, sería el siguiente: &time_control run_days = 32, run_hours = 0, run_minutes = 0, run_seconds = 0, start_year = 2011, 2011, 2011, start_month = 08, 08, 05,
  • 19. start_day = 31, 31, 31, start_hour = 00, 00, 00, start_minute = 00, 00, 00, start_second = 00, 00, 00, end_year = 2011, 2011, 2011, end_month = 10, 10, 05, end_day = 02, 02, 02, end_hour = 00, 00, 00, end_minute = 00, 00, 00, end_second = 00, 00, 00, interval_seconds = 21600 input_from_file = .true.,.true.,.true., history_interval = 60, 60, 60, frames_per_outfile = 24, 24, 24, restart = .false., restart_interval = 1440, io_form_history = 2 io_form_restart = 2 io_form_input = 2 io_form_boundary = 2 debug_level = 0 / &domains time_step = 150, time_step_fract_num = 0, time_step_fract_den = 1, max_dom = 2, e_we = 81, 81, 25, e_sn = 81, 81, 25, e_vert = 30, 30, 30, p_top_requested = 5000, num_metgrid_levels = 27, num_metgrid_soil_levels = 4, dx = 25000, 5000, 1000, dy = 25000, 5000, 1000, grid_id = 1, 2, 3, parent_id = 0, 1, 2, i_parent_start = 1, 33, 46, j_parent_start = 1, 33, 46, parent_grid_ratio = 1, 5, 3, parent_time_step_ratio = 1, 3, 3, feedback = 1, smooth_option = 0 / &physics mp_physics = 8, 8, 3, ra_lw_physics = 4, 4, 1, ra_sw_physics = 4, 4, 1, radt = 25, 25, 25, sf_sfclay_physics = 1, 1, 1,
  • 20. sf_surface_physics = 2, 2, 2, bl_pbl_physics = 1, 1, 1, bldt = 0, 0, 0, cu_physics = 3, 3, 0, cudt = 5, 5, 5, isfflx = 1, ifsnow = 1, icloud = 1, surface_input_source = 1, num_soil_layers = 4, sf_urban_physics = 0, 0, 0, / &fdda / &dynamics w_damping = 0, diff_opt = 2, 2, 1, km_opt = 4, 4, 4, diff_6th_opt = 2, 2, 0, diff_6th_factor = 0.12, 0.12, 0.12, base_temp = 288. damp_opt = 0, zdamp = 5000., 5000., 5000., dampcoef = 0.2, 0.2, 0.2 khdif = 0, 0, 0, kvdif = 0, 0, 0, non_hydrostatic = .true., .true., .true., moist_adv_opt = 1, 1, 1, scalar_adv_opt = 1, 1, 1, / &bdy_control spec_bdy_width = 5, spec_zone = 1, relax_zone = 4, specified = .true., .false.,.false., nested = .false., .true., .true., / &grib2 / &namelist_quilt nio_tasks_per_group = 0, nio_groups = 1, /
  • 21. Con el archivo namelist.input configurado de esta forma, podemos proceder a simular un mes. Como vamos a simular casos reales, antes de ejecutar el WRF mediante el archivo wrf.exe primero deberemos ejecutar el archivo real.exe para que éste lea todos los archivos que hemos obtenido tras ejecutar el WPS y cree con ellos varios archivos con prefijo wrfinput (uno por dominio), que serán los que el WRF reciba como input. Así pues, ejecutamos dicho programa y obtenemos los ficheros necesarios, lo que nos dejará listos para comenzar con nuestra simulación. Para hacer que empiece, ejecutamos el fichero wrf.exe, con lo que se empezarán a calcular los valores de todas las variables climatológicas del dominio. Como en nuestro caso hemos seleccionado que se produzca nesting en dos direcciones (2-way nesting), la simulación se producirá en ambos dominios de forma simultánea, de forma que los resultados del dominio grande se pueden emplear en la simulación del dominio pequeño, permitiendo a éste conocer los factores climatológicos de las zonas de alrededor suyo, y viceversa, lo que permite que los resultados del dominio pequeño, que son más preciso, puedan mejorar los resultados del dominio grande. Una vez terminada la simulación, el modelo nos devuelve unos ficheros con prefijo wrfout en los que vendrán contenidos los valores de todas las variables climatológicas que el WRF proporciona (nos devolverá un conjunto de variables por cada periodo de tiempo que hemos establecido en el namelist.input). Estos ficheros serán por un lado los que podremos visualizar para ver qué tal ha ido la simulación y el poder determinar el valor de cada variable en cada instante de tiempo, y por otro lado serán los ficheros que le pasaremos al modelo CAMx para que este pueda llevar a cabo su simulación. 2.5 Visualización de la salida del WRF Si optamos por visualizar estos archivos, necesitamos usar para ello herramientas específicas de visualización. En nuestro caso usaremos dos de ellas: Ncview e IDV, aunque podemos elegir cualquiera de las opciones que tenemos a nuestra disposición. Ncview es una herramienta de visualización de archivos con formato netCDF. Para abrir los ficheros este programa, simplemente los pasamos como parámetros al ejecutar el comando del programa. Una vez abiertos, podemos seleccionar una variable atmosférica de una gran lista de variables, lo que imprime un mapa de nuestro dominio con el valor de esa variable en cada punto de éste. Si hacemos click en un punto podemos ver mediante una gráfica la evolución de la variable en este punto durante el periodo de tiempo contenido en los archivos. Este programa luce así:
  • 22. IDV, por su parte, es una herramienta algo más complicada. Puede leer una gran cantidad de archivos distintos, incluyendo los que necesitamos nosotros, y la visualización de estos es bastante más completa que la que se obtiene del Ncview, a coste de tener un tiempo de aprendizaje mayor al que se necesita para controlar Ncview. No obstante, dadas las posibilidades de IDV, y dado que también nos servirá más adelante para visualizar la salida del modelo CAMx, vamos a optar finalmente por usar este programa, que luce de la siguiente manera: Para que se viera el mapa político de España, lo que nos ayudaría a localizarnos durante la visualización de nuestros diferentes dominios, descargamos de la página http://www.diva-gis.org/gdata un shapefile con los diferentes niveles administrativos que encontramos en España, de los que elegimos que se muestren la divisiones en Comunidades Autónomas y las fronteras con otros países. El IDV nos provee de otra ventana aparte de la anterior, llamada Dashboard. En el podemos seleccionar los archivos de datos que abriremos, las variables que queremos visualizar, y el método de visualización de estas variables (podemos elegir diferentes tipos de visualización en el mapa, tanto en 2D como en 3D, así como visualización en gráficas, entre una gran variedad de opciones). La vista de esta ventana sería algo así
  • 23. Más tarde se verán algunos de los resultados de la visualización realizada sobre nuestros datos, donde se verá la forma en la que el IDV nos los muestra. Con esta visualización ya hemos finalizado una de nuestras dos simulaciones. Ahora toca empezar a trabajar con el modelo CAMx. En el repaso de las tareas se instalaba antes de ejecutar el WRF, y de hecho, es recomendable trabajar con ambas herramientas al mismo tiempo, ya que así mientras una está trabajando en una simulación se puede trabajar con el otro modelo. Así es como lo hemos realizado nosotros. 2.6 Compilación del modelo CAMx. Así pues, una vez compilado y ejecutado el modelo WRF, toca hacer lo propio con el CAMx para poder hacer la simulación de la calidad del aire en nuestro dominio, que es el mismo que en el caso anterior. El modelo se puede descargar desde su página oficial. Una vez descargado y descomprimido, podemos proceder a compilarlo. Para ello se nos proporciona un fichero Makefile en la carpeta del modelo. Para compilarlo solamente será necesario ejecutar el Makefile eligiendo qué compilador usar y si usar paralelización con MPI. Aunque podemos, vamos a compilar de momento sin paralelización para facilitar la tarea. El compilador que vamos a elegir esta vez es el de Intel, es decir, ifort, con lo que el mandato para compilar nuestro CAMx quedaría así: make COMPILER=ifort Si la compilación se ha realizado correctamente, habremos obtenido un ejecutable en nuestra carpeta, que será el que llevará a cabo la simulación cuando lo ejecutemos. Sin embargo, aquí sí que surgió alguna complicación, y no fue hasta que cambiamos varias flags en el Makefile, entre ellas añadiendo el uso de la librería –lmpl, cuando por fin se pudo compilar el modelo. 2.7 Obtención del input para CAMx e instalación de pre-procesadores Con esto ya se puede ejecutar el caso de prueba y funciona. Sin embargo, para ejecutarlo en nuestro dominio es necesario y conveniente pasarle la mayor cantidad de datos sobre el periodo que estamos estudiando y sobre nuestro dominio, ya que de esta forma ayudamos a mejorar la precisión de la simulación. Esta información se la pasaremos al modelo a través de una serie de ficheros que el CAMx cogerá como input (muchos de los cuales son opcionales, otros necesarios). Así pues, deberemos conseguir el máximo número posible de estos ficheros para obtener la simulación que más se ajuste a la realidad. Muchos de estos ficheros están al alcance de nuestra mano, otros no. Los ficheros que pasaremos como input al CAMx en nuestra simulación son los siguientes: - Datos meteorológicos: Son los datos que hemos obtenidos con el WRF, que contienen todos los factores climatológicos en el periodo que estamos simulando. Para que el CAMx pueda leer estos ficheros es necesario realizar una conversión de ellos con el programa WRFCAMx. Este programa recibirá como entrada los datos obtenidos tras ejecutar el WRF (los archivos wrfout) y generará los distintos archivos que necesita CAMx (meteorología en la superficie y en el dominio 3D, difusividad vertical, nubes, y superficie). Para ejecutar esta herramienta debemos configurarla con un fichero de configuración parecido a los vistos anteriormente, con datos bastante parecidos.
  • 24. - Datos de emisiones: Es aconsejable suministrar un archivo de emisiones por dominio, dos en nuestro caso. Para preparar estos datos, recibimos los datos de emisiones totales del año 2011 para ambos dominios, y debemos modificarlos nosotros de forma que se las podamos pasar al CAMx correctamente en un fichero que contendrá las emisiones diarias de cada especie química que contemplamos en nuestra simulación, mostrados hora por hora. Más adelante se explicará el proceso completo. - Initial and Boundary Conditions: En español son las condiciones iniciales y de frontera. Son dos tipos de archivos diferentes, conteniendo ambos información de la calidad del aire: las condiciones iniciales miden las concentraciones al inicio de la simulación, pasándose solo el archivo correspondiente a la fecha inicial, y las de frontera miden las concentraciones en las fronteras laterales (y opcionalmente por encima) de nuestro dominio a lo largo de la simulación, siendo necesario que cada momento de la simulación esté reflejado por un fichero de este tipo. Ambos archivos los podemos obtener a través del programa ICBCPREP que nos proporciona CAMx en su página de soporte. Pasándole a este programa los datos de nuestro dominio y las fechas de inicio y final que deseamos nos devuelve estos archivos. - Columna de ozono: Se necesita un fichero por día de simulación, aunque se pueden aplicar las medias mensuales. Para obtener los ficheros con los datos de columna de ozono necesitamos usar el programa O3MAP que de nuevo nos proporciona CAMx en su página de soporte. Este programa necesita para funcionar, aparte de estar configurado de acuerdo a nuestro dominio y fechas que queramos, datos de la columna de ozono que debemos sacar de Internet; este programa solamente prepara estos datos para pasárselos al CAMx. El propio programa nos recomienda sacar estos datos de la página de la NASA o de su ftp, por el cual nos decantamos finalmente. De momento he descargado los archivos con las medias mensuales de ozono (aparte de las medidas diarias que he usado en las pruebas que he realizado), a la espera de ver si cuando finalmente haga la simulación del año 2011 uso estos archivos o me bajo un archivo por cada día del año. - Ratios de fotólisis: Para obtener estos ficheros es necesario disponer primero de los ficheros de columna de ozono vistos anteriormente, ya que son necesarios para el cálculo de estos ratios. Para obtener los ficheros de los ratios de fotólisis debemos usar un modelo de transferencia de radiación capaz de calcularlos. Otra vez en la página de soporte del CAMx encontramos un programa que se encarga de esto, llamado TUV. Para ejecutar este programa es necesario indicar tanto el número de niveles de altitud de nuestro dominio y la altitud a la que estos se encuentran como el esquema químico que vamos a usar tanto aquí como para el CAMx y para sus emisiones, dándonos a elegir entre CB05 (Carbon Bond 2005), CB6 (Carbon Bond v6) y SAPRC09. En nuestro caso usaremos aquí y en los demás casos siempre el esquema químico CB05, aunque esto podría cambiar en el futuro. Para los últimos 3 tipos de ficheros ha resultado de gran ayuda la creación de diversos scripts de automatización, que permitieran obtener estos archivos para que todas las fechas que necesitara con tan solo ejecutar un comando. Estos scripts han sido diseñados en su mayoría en bash, el lenguaje de consola que más hemos estudiado en la universidad, y lo cual ha servido también para coger soltura en el uso de este.
  • 25. Por otro lado, el mayor de los problemas encontrados ha sido la de reconocer qué archivos son necesarios pasar al CAMx y qué programas me los pueden suministrar. Por lo demás, alguna dificultad también a la hora de compilar algún programa, ya que algunos estaban diseñados para un compilador específico y necesité traducir sus flags a las flags del procesador de Intel, ifort. Con esto he aprendido bastante del uso de los compiladores. 2.8 Obtención de las emisiones para el CAMx Para poner en marcha nuestra simulación en el CAMx es necesario también pasarle como input un fichero con las emisiones por periodo de tiempo de cada especie química que contemplemos. En nuestro caso, pasaremos las emisiones a cada hora de las distintas especies que componen el esquema químico que utilizamos, que será el CB05 (Carbon Bond 2005). Se nos hace entrega de varios ficheros ASCII con las emisiones totales del año 2011 (en toneladas) para cada contaminante (CO, NOX, NMVOC, NH3, SO2, PM10, PM2.5) y en cada una de las 10 categorías SNAP (S1-S10) que se detallan más adelante, suministrándonos un “pack” de datos de emisiones por cada uno de nuestro dominio. Así pues, será necesario adaptar estos datos a las exigencias del CAMx. Lo primero a realizar una vez se nos son suministradas las emisiones en toneladas año de nuestros dos dominios es comprobar que, efectivamente, estas emisiones son correctas, al menos a simple vista. Como cada fichero es una simple lista de números reales del tamaño de nuestro dominio (una lista de 80x80=6400 números), podemos visualizarlos mediante una herramienta como Ferret a través de 3 simples mandatos. Lógicamente, durante esta tarea revisamos la mayoría de archivos que recibimos, tanto del dominio grande como del pequeño. Sin embargo, a continuación recopilamos tan solo una muestra de cada uno de los dos dominios, con el fin de no extendernos más en este asunto. Así pues, una muestra del dominio grande, que enseña la emisión de CO por una fuente determinada, sería la siguiente:
  • 26. Una muestra del dominio pequeño sería la siguiente, que refleja las emisiones de NOX por tráfico en una zona de Madrid y sus alrededores. : Una vez comprobado que estos ficheros son correctos, procedemos a realizar la conversión antes mencionada. Para ello, deberemos primero calcular las toneladas que se emiten de cada contaminante por hora, es decir, la distribución temporal de las emisiones. Después deberemos de hallar la distribución en especies de estos contaminantes (cada uno está formado por varias especies), lo que nos dará como resultado las emisiones a cada hora de todas las especies que necesitamos (en toneladas). Finalmente, deberemos hacer una conversión de unidades a las que acepta el CAMx (moles/hora para gases y g/hora para partículas). Durante este proceso, además, deberemos juntar las emisiones de todas las fuentes que tenemos. Para facilitar la tarea, hemos diseñado un programa en C que se ocupe de esto. El programa recibe como parámetro un día de 2011 (en formato MM DD) y realiza todos los cálculos descritos anteriormente, obteniendo como resultado las emisiones/hora totales de cada una de cada una de las especies de nuestro esquema, en las unidades correctas mencionadas. Este programa se encuentra en el Anexo del documento y para funcionar tiene que estar situado junto a las emisiones y factores que recibimos como datos. El siguiente esquema resumiría el funcionamiento del programa para cada contaminante, por ejemplo NOX: Emisiones totales NOX S1 Emisiones totales NOX S2 Emisiones totales NOX S9 Emisiones totales NOX S10 Emisiones por hora NOX S10 Emisiones por hora NOX S9 Emisiones por hora NO S1 Emisiones por hora NO2 S1 Emisiones por hora NO S2 Emisiones por hora NO2 S2 Emisiones por hora NOX S1 Emisiones por hora NOX S2 Emisiones por hora NO Emisiones por hora NO2
  • 27. A continuación, se detallan las diferentes fases del proceso de obtención de emisiones. Distribución temporal de las emisiones: Lo primero que hacemos es calcular la emisión por hora de cada uno de nuestros contaminantes, ya que disponemos de la información en toneladas/año. Esta tarea no consiste en dividir el dato en toneladas/año de cada celdilla entre el número de horas del año, ya que no a todas horas se emite el mismo número de emisiones. Esta cantidad varía según la hora, el día de la semana e incluso el mes en el que estemos. Por suerte, tenemos a nuestra disposición varios factores que nos proporcionan para cada contaminante y actividad la proporción de emisión en cada hora/día/mes respecto a la emisión total. Estos factores nos vienen dados como pesos de distribuciones, es decir, las horas/días/meses en las que la emisión coincide con la media de emisión tienen un peso de 1 en la distribución, si la superan tienen un peso mayor que 1 y si se emite menos que la media tienen un peso inferior a 1. Si este peso lo dividimos entre el número de elementos con pesos (por ejemplo, si estamos estudiando los días de la semana dividimos entre 7), obtenemos el porcentaje de emisiones que se generan respecto al total (si estudiamos las horas obtenemos el porcentaje de emisiones en una hora respecto al día entero, si estudiamos los días de la semana obtenemos el porcentaje de un día respecto a toda la semana, y si estudiamos los meses obtenemos el porcentaje de un mes respecto al año completo). Así pues, si necesitamos conocer las emisiones/hora de los distintos contaminantes, como disponemos de sus emisiones/año, deberemos calcular con estas emisiones y los distintos factores primero las emisiones en cada uno de los meses, las emisiones en cada una de las semanas del mes (hay 30/7 semanas en un mes), las emisiones por día y, finalmente, las emisiones por hora. Para hacer estos cálculos deberemos usar las siguientes ecuaciones: 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑚𝑒𝑛𝑠𝑢𝑎𝑙 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑎𝑛𝑢𝑎𝑙 ∗ 𝐹𝑎𝑐𝑡𝑜𝑟 𝑚𝑒𝑠 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑠𝑒𝑚𝑎𝑛𝑎𝑙 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑚𝑒𝑛𝑠𝑢𝑎𝑙 ∗ 7 30 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑑𝑖𝑎𝑟𝑖𝑎 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑠𝑒𝑚𝑎𝑛𝑎𝑙 ∗ 𝐹𝑎𝑐𝑡𝑜𝑟𝑑í𝑎 𝐸𝑚𝑖𝑠𝑖𝑜𝑛ℎ𝑜𝑟𝑎 = 𝐸𝑚𝑖𝑠𝑖𝑜𝑛 𝑑𝑖𝑎𝑟𝑖𝑎 ∗ 𝐹𝑎𝑐𝑡𝑜𝑟ℎ𝑜𝑟𝑎 Cabe recordar que los factores que nombramos (𝐹𝑎𝑐𝑡𝑜𝑟 𝑚𝑒𝑠 , 𝐹𝑎𝑐𝑡𝑜𝑟𝑑í𝑎, y 𝐹𝑎𝑐𝑡𝑜𝑟ℎ𝑜𝑟𝑎) se refieren como hemos mencionado antes a los porcentajes de emisiones, es decir, son los pesos divididos entre el número de elementos con peso. Nosotros recibimos los pesos de distribución, así que tenemos que tener esto en cuenta antes de hacer los cálculos pertinentes.
  • 28. Los pesos de distribución que recibimos son diferentes para cada fuente que tenemos en cuenta. Como hemos visto antes, las fuentes que consideramos son las distintas categorías SNAP. Estas categorías son las siguientes: S1 - Combustiones en industrias de energía y transformación. S2 - Combustiones en plantas no industriales S3 – Combustiones en industrias de manufacturación S4 – Procesos de producción S5 - Extracción y distribución de combustibles fósiles y energía geotérmica S6 – Uso de disolventes y otros productos S7 – Transporte por carretera S8 - Otras fuentes móviles y maquinaria S9 – Tratamiento y eliminación de residuos S10 - Agricultura Los ficheros que contienen los pesos de distribución temporal que recibimos vienen representados en los siguientes gráficos: Pesos por mes:
  • 29.
  • 30. Pesos por día de la semana:
  • 31.
  • 32. Pesos por hora del día: Esta distribución de pesos es la misma para todos los contaminantes.: Como podemos observar, las gráficas de cada fuente de emisión varían, aunque son similares en algunos ascpectos. Por ejemplo, en muchas coincide que por la noche se emite bastante menos que por el día, o que los fines de semana apenas se consume respecto al resto de semana laborable.
  • 33. Distribución en especies de las emisiones. Ya podemos disponer de las emisiones por hora de cada uno de los contaminantes con los que estamos trabajando, es decir: CO, NH3, SO2, los NMVOC (compuestos orgánicos volátiles) y NOX, y las PM2.5 (partículas de hasta 2.5 micrómetros) y PM10 (partículas de hasta 10 micrómetros). Sin embargo, nuestro fichero de emisiones debe contener la información de cada una de las especies que componen el esquema químico que estamos usando, el CB05, que vienen englobadas por los anteriores contaminantes. Así pues, el objetivo ahora consiste en dividir cada uno de los contaminantes de los que disponemos en las especies que necesitamos, hallando las emisiones correspondientes a cada una de ellas. A esto se le llama especiación (speciation en inglés). Lo primero que hay que conocer es qué especies queremos recoger en la simulación (según el esquema químico que usemos) y, para cada especie, cuál es el contaminante donde puede aparecer. En la siguiente tabla se recoge la información de cada especie de nuestra simulación: Símbolo Nombre Contaminante Masa molar ALD2 Acetaldehyde (Acetaldehído) NMVOC 44,05256 g/mol CO Carbon monoxide (Monóxido de carbono) CO 28,01 g/mol ETH Ethene NMVOC 28,0 g/mol FORM Formaldehyde (Formaldehído) NMVOC 30,031 g/mol ISOP Isoprene (Isopreno) NMVOC 68,12 g/mol NH3 Ammonia (Amoníaco) NH3 17,031 g/mol NO Nitric oxide (Óxido de nitrógeno) NOX 30,01 g/mol NO2 Nitrogen dioxide (Dióxido de nitrógeno) NOX 46,0055 g/mol NR Non-reactive gasses NMVOC - OLE Terminal olefin carbon bond NMVOC 42,1 g/mol PAR Paraffin carbon bond NMVOC 72,1 g/mol PEC Primary elemental carbon PM - CPRM Coarse other primary PM (10) - FPRM Fine other primary PM (2.5) - PNO3 Particulate nitrate PM - POA Primary organic aerosol PM - PSO4 Particulate sulfate PM - SO2 Sulfur dioxide SO2 64,0 g/mol TOL Toluene NMVOC 92,1 g/mol XYL Xylene NMVOC 106,2 g/mol ALDX Propinaldehyde and higher aldehydes NMVOC 58,1 g/mol CH4 Methane (Metano) NMVOC 16,0 g/mol ETHA Ethane NMVOC 30,1 g/mol ETOH Ethanol NMVOC 46,1 g/mol IOLE Internal olefin carbon bond NMVOC 56,1 g/mol MEOH Methanol NMVOC 32,0 g/mol TERP Terpene NMVOC 136,2 g/mol
  • 34. Evidentemente, cada contaminante no estará compuesto equitativamente por las especies que lo forman. Por ejemplo, en el caso de los NOX, nos encontramos que normalmente están compuestos en un 90% por NO y en un 10% por NO2. Así pues, para poder separar los contaminantes en especies correctamente deberemos conocer los porcentajes de las especies que los forman. Conocer estos porcentajes no es algo trivial. Estos porcentajes se hallan mediante mediciones y experimentación, y varían mucho según la fuente de la que provengan u otros factores. Es por ello que hay que tener cuidado a la hora de elegir estos ratios, intentando trabajar con los que más se adecúen a nuestra situación. Para obtener estos porcentajes hacemos uso de SPECIATE, la base de datos de la EPA, donde se almacena un gran número de conjuntos de porcentajes (llamados perfiles) para una gran variedad de fuentes y especies. Cada perfil nos dará una distinta distribución en especies para un contaminante. De entre todos los perfiles en esta base de datos, de inicio hacemos uso de los más generales, que suelen ser los que hacen una media entre los demás perfiles. Durante el transcurso de esta tarea hemos ajustando los perfiles según los resultados que obteníamos con cada uno, incluso se pensó en asignar un perfil diferente según la fuente de emisión de la que provenga el contaminante, lo cual finalmente no se puedo llevar a cabo. Todos estos perfiles se los pasaremos a nuestro programa mediante ficheros. Así pues, los perfiles que usamos son los siguientes: - En primer lugar, los contaminantes CO, SO2 y NH3 están compuestos solamente por las especies de mismo nombre, por lo que no hay que hacer descomposición alguna en ellos (el ratio de especiación de cada especie es 1). - El perfil que usamos para el NOX lo hemos obtenido de la base de datos SPECIATE, de la EPA. Es un perfil bastante común en cuanto a este contaminante se refiere, siendo el siguiente: - Para las partículas, hemos usado perfiles que también se encuentran es SPECIATE. En este caso, los perfiles que hemos seleccionado son la media de todos los perfiles para estos contaminantes que se encuentran en la base de datos. Son los siguientes: NOX Ratio NO 90.6495360456817 NO2 9.35046395431835 PM 2.5 Ratio PEC 4.406 PNO3 0.164 PS04 5.514 POA 8.768 FPRM 81.148 PM 10 Ratio PEC 4.582 PNO3 0.134 PS04 5.03 POA 8.187 CPRM 82.067
  • 35. - Finalmente, para el contaminante NMVOC he usado uno que aparecía como ejemplo en un reporte de la empresa encargada del CAMX, ENVIRON, ya que se adecúa bastante a las especies que yo necesitaba. El perfil que he seleccionado de este reporte es el de la EPA, y es el siguiente: Suma de las fuentes y conversión de unidades. Una vez calculados los valores de emisiones (por especie y hora) asociados a cada fuente, lo que necesitamos calcular ahora es la cantidad total que se ha emitido de cada especie en cada hora que estudiamos. Para hallar esto, simplemente sumamos la emisión obtenida por cada fuente, ya que una vez emitida cada especie da igual de donde provenga, reaccionará igual. Otra tarea a realizar es la conversión de unidades a las unidades que acepte el CAM. Nosotros en este momento disponemos de emisiones en toneladas/hora, pero necesitamos que estas emisiones se midan en moles/hora para los gases y gramos/hora si hablamos de partículas. En este último caso es sencillo, simplemente debemos multiplicar nuestras emisiones por 106 (hay 1.000.000 de gramos en una tonelada). Sin embargo, para los gases no es tan trivial. Para obtener los moles de un gas a partir de las toneladas de este, debemos conocer su masa molar. Por suerte no es difícil encontrarla (en Internet o en la guía del CAMx aparecen todas). En la tabla de todas las especies se detallan las distintas masas molares para cada uno de los gases. Una vez se sabe la masa molar del gas, basta con dividir los gramos de los que disponemos (habrá que multiplicar por 106 las toneladas aquí también) entre la masa molar del gas. Una vez hecha la conversión, obtenemos finalmente las emisiones/hora de cada especie en las unidades que necesita el CAMx, por lo que ya estamos listos para pasarle esta información al CAMx, una vez la pongamos en el formato que necesario. NMVOC Ratio ALD2 0.0162 ALDX 0.0015 CH4 0.1736 ETH 0.1005 ETHA 0.027 ETOH 0.0381 FORM 0.0148 IOLE 0.0121 ISOP 0.001 MEOH 0.0054 OLE 0.0416 PAR 0.3208 TOL 0.1058 NR 0.0445 XYL 0.0971
  • 36. Formateo del fichero. De esto también se encarga nuestro programa. Para que el CAMx acepte nuestras emisiones, tenemos que escribirlas en un fichero con el formato adecuado y, además, convertir este fichero en binario (lo cual haremos con un programa que nos recomienda CAMx en su guía). Cada fichero contendrá las emisiones de un día. El formato del fichero de emisiones que debemos pasarle a CAMX es el siguiente: - Para empezar, hay un encabezado en el que se detallan características de la simulación (número de especies, tamaño del dominio, tamaño de las celdas, coordenadas,…). Este encabezado será diferente para nuestros dos dominios distintos. - Continúa con un listado de todas las especies que aparecen en el fichero. - Finalmente aparecen las emisiones. Estas se muestran como un bucle desde las 0h hasta las 23h, y en cada una se detallan las emisiones todas las especies, apareciendo en cada especie un valor por celdilla del dominio (para nuestro dominio grande disponemos de 80x80=6400 valores por hora y especie, y para el pequeño 72x72=5184, ya veremos más tarde por qué). De momento nuestro programa está adaptado a nuestro modelo, con lo que si se quiere usar para otros dominios haría falta modificar el código, pero se puede hacer fácilmente que se adecúe distintas simulaciones a la hora de hacer el formateo del fichero. Una vez hemos ejecutado nuestro programa y obtenido el fichero de emisiones con el formato que nos piden queda convertirlo en binario. Para ello, hacemos uso del programa BIN2ASCII, que encontramos en la página de soporte de software del CAMx, y que funciona tanto como para convertir archivos binarios en archivos ASCII como a la inversa, que es para lo que lo usamos. Este programa, escrito en Fortran, puede reconocer qué tipo de archivo es el que le pasamos (en nuestro caso de emisiones), pero es bastante restrictivo; hay que pasarle el archivo ASCII exactamente como lo pide, sin que falle ningún valor (o incluso por algún espacio me ha llegado a dar error), y con cuidad de que los valores coincidan con los formatos asignados a ellos (formatos de Fortran). Por ejemplo, el formato con el que aceptaba las fechas (las cuales hay que pasar como Fechas Julianas, en YYDDD, donde DDD es la posición del día en el año) no aceptaba fechas posteriores a 2010, ya que solamente admitía 4 cifras y las fechas julianas a partir de 2010 tienen 5 (antes se podían escribir de la forma YDDD). Así pues, para hacer funcionar este programa con mi archivo tuve que modificar su código Fortran, cambiando donde asignaba el formato a la fecha por un formato i8 con el que ya podía agregar fechas de 5 cifras. Además, para pasarle un input al programa BIN2ASCII era necesario primero ejecutar el programa y luego una vez éste está corriendo, indicarle por un el nombre del archivo a leer y por otro el nombre del archivo de salida. Esta situación impedía que el programa pudiera ser llamado automáticamente, ya que había que pasarle los datos de manera manual, con lo que finalmente opté por volver a modificar el código del programa para hacer que, en vez de tomar esta información de la entrada estándar, pudieran estos datos ser pasados como parámetros al llamar al programa, quedando la llamada al programa como ./asc2bin FICHASCII FICHBIN.
  • 37. Esto nos permitió la creación de un script con el que pudiéramos automatizar la creación de emisiones uniendo la llamada a nuestro programa calcula_emis con una llamada posterior al programa anterior. Con este script, y uno que se encargara de realizar un bucle que abarcara el tiempo que deseáramos, pudimos calcular todas las emisiones de nuestros dominios para nuestro periodo de un año en apenas unos pocos minutos. Tras obtener estos ficheros, sumados a los que obtuvimos previamente, juntamos todos los archivos necesarios para poder realizar una simulación con el CAMx. 2.9 Ejecución del CAMx Una vez disponemos de todos los archivos de entrada necesarios para el CAMx solo queda ejecutar el modelo. Para ello, deberemos crear un script en el cual se crea un fichero CAMx.in que contendrá los parámetros de nuestra simulación. Estos parámetros, entre los que se encuentran las características del dominio y las fechas en las que se realiza la simulación, entre otros, será necesario por lo tanto dejarlos indicados en el script que se ejecutará. Este script, además, indicará la situación de cada uno de los ficheros de entrada del CAMx, y se encargará también de iniciar el ejecutable que realizará la simulación. Los dos dominios sobre los que se tenía pensado realizar esta simulación originalmente son los explicados en la introducción de este documento, que coinciden con los que veníamos usando para realizar las simulaciones del modelo WRF. Esto significa que nuestra simulación se realizaría sobre dos dominios distintos de 80x80 celdillas cada uno, situado uno en el centro del otro. No obstante, debido a la forma en la que el CAMx realiza el nesting de dominios, cometí determinados errores que hicieron que las características de nuestros dominios tuvieran que verse afectadas. El modelo CAMx realiza este nesting de la forma que describe la siguiente imagen, recogida de la guía de usuario del CAMx:
  • 38. Leyendo la explicación del nesting entre dominios de la guía de usuario del CAMx, vi que CAMx trabaja con unas celdillas situadas en el perímetro. El fallo vino en que se menciona que estas casillas se agregan automáticamente por el CAMx, por lo que me olvidé de ellas al obtener mis dominios. Sin embargo, sí que es necesario pasarle al CAMx la información de estas casillas, lo que hace que pasaramos de trabajar con un dominio pequeño de 80x80 celdillas con la esquina SW situada en la coordenada (-200,-200) a trabajar con uno de 82x82 celdillas con la esquina SW en (-205,-205), lo que hacía que nuestros archivos meteorológicos y de emisiones no valieran. Ante la decisión de volver a obtener los archivos meteorológicos y de emisiones para que tuvieran en cuenta las 2 filas y columnas que faltan o reducir el tamaño del dominio pequeño pedí consejo a mi tutor, que me dijo finalmente que optara por reducir el dominio, sobre todo por las emisiones. Así, tuve que acortar el dominio en 1 casilla del dominio grande por cada lado, lo que equivale a 5 del dominio pequeño, por lo que nuestro dominio ahora en vez de ser de 80x80 será de 70x70, con lo que los ficheros que usaremos serán 72x72, con la esquina SW en la coordenada (-180,-180). Por lo tanto, el dominio pequeño en el que podremos visualizar la calidad del aire se reduce a 350x350km, no así el meteorológico. El centro de este dominio no varía. Una vez resuelto este fallo, que conllevó a su vez la modificación de los ficheros meteorológicos en el WRFCAMx y de los ficheros de emisiones en el programa calcula_emis, se consiguió ejecutar el modelo correctamente, a través de un script que se encarga tanto de ejecutar la simulación del modelo como de ajustar la configuración de esta, tarea similar a la que vimos que realizaban los ficheros namelist en los apartados anteriores. Finalmente, dicho script ha sido diseñado para que funcione entre dos días indicados, pudiendo simular periodos de tiempo varios meses. A este script se le suministra el día y mes inicial y el día y mes final, aparte de todos los parámetros asociados a una simulación de este tipo, que se explican más adelante. Así, el script que usaríamos para hacer una simulación desde el 1 de Febrero del 2011 hasta el 31 de Mayo del mismo año sería el siguiente: #!/bin/bash # # CAMx 6.20 # export NCPUS=1 export MPSTKZ=128M export OMP_NUM_THREADS=8 ulimit -s unlimited EXEC="../CAMx.v6.20.noMPI.ifort" # RUN="v6.20.spain.25.noMPI" INPUT="../inputs" MET="../inputs/met" EMIS="../emiss/EMISIONES/binary" PTSRCE="../ptsrce" OUTPUT="../outputs" # # --- set the dates and times ---- # para fecha juliana puedo usar mejor date --date=FECHA +%j #
  • 39. YEAR=2011 BEGMONTH=2 ENDMONTH=5 BEGDAY=1 ENDDAY=31 mes=$BEGMONTH today=$BEGDAY MON=`printf %02d $mes` CAL=`printf %02d $today` CALSTRT=$CAL month_days=(31 28 31 30 31 30 31 31 30 31 30 31) if [ $(( $YEAR % 4 )) -eq 0 ] ; then month_days[1]= $((${month_days[1]}+1)) fi JULSTRT=`date --date=${YEAR}${MON}${CAL} +%j` JUL=$JULSTRT ; # date > hora.txt mkdir -p $OUTPUT RESTART="NO" YESTERDAY=0331 while [ $mes -le $ENDMONTH ]; do MON=`printf %02d $mes` if ! [ $mes -eq $BEGMONTH ] ; then today=1 fi while [ $today -le ${month_days[$((${mes}-1))]} ] && ! ([ $mes -eq $ENDMONTH ] && [ $today -gt $ENDDAY ]) ; do CAL=`printf %02d $today` JUL=`date --date=${YEAR}${MON}${CAL} +%j` # if [ ${RESTART} = "NO" ]; then RESTART="false" else RESTART="true" fi # # --- Create the input file (always called CAMx.in) # cat << ieof > CAMx.in &CAMx_Control Run_Message = 'CAMx 6.20 Test Problem -- Mech2 CF CB05 $RUN', !--- Model clock control --- Time_Zone = 0, ! (0=UTC,5=EST,6=CST,7=MST,8=PST) Restart = .${RESTART}.,
  • 40. Start_Date_Hour = 2011,${MON},${CAL},0000, ! (YYYY,MM,DD,HHmm) End_Date_Hour = 2011,${MON},${CAL},2400, ! (YYYY,MM,DD,HHmm) Maximum_Timestep = 15., ! minutes Met_Input_Frequency = 60., ! minutes Ems_Input_Frequency = 60., ! minutes Output_Frequency = 60., ! minutes !--- Map projection parameters --- Map_Projection = 'LAMBERT', ! (LAMBERT,POLAR,UTM,LATLON) UTM_Zone = 0, POLAR_Longitude_Pole = 0., ! deg (west<0,south<0) POLAR_Latitude_Pole = 0., ! deg (west<0,south<0) LAMBERT_Central_Meridian = -03.93, ! deg (west<0,south<0) LAMBERT_Center_Longitude = -03.93, ! deg (west<0,south<0) LAMBERT_Center_Latitude = 40.5, ! deg (west<0,south<0) LAMBERT_True_Latitude1 = 50, ! deg (west<0,south<0) LAMBERT_True_Latitude2 = 20., ! deg (west<0,south<0) !--- Parameters for the master (first) grid --- Number_of_Grids = 2, Master_Origin_XCoord = -1000., ! km or deg, SW corner of cell(1,1) Master_Origin_YCoord = -1000., ! km or deg, SW corner of cell (1,1) Master_Cell_XSize = 25., ! km or deg Master_Cell_YSize = 25., ! km or deg Master_Grid_Columns = 80, Master_Grid_Rows = 80, Number_of_Layers = 12, !--- Parameters for the second grid --- Nest_Meshing_Factor(2) = 5, ! Cell size relative to master grid Nest_Beg_I_Index(2) = 34, ! Relative to master grid Nest_End_I_Index(2) = 47, ! Relative to master grid Nest_Beg_J_Index(2) = 34, ! Relative to master grid Nest_End_J_Index(2) = 47, ! Relative to master grid !--- Model options --- Diagnostic_Error_Check = .false., ! True = will stop after 1st timestep Advection_Solver = 'PPM', ! (PPM,BOTT) Chemistry_Solver = 'EBI', ! (EBI,IEH,LSODE) PiG_Submodel = 'None', ! (None,GREASD,IRON) Probing_Tool = 'None', ! (None,OSAT,GOAT,APCA,PSAT,DDM,PA,RTRAC) Chemistry = .true., Drydep_Model = 'WESELY89', ! (None,WESELY89,ZHANG03) Wet_Deposition = .true., ACM2_Diffusion = .false., Super_Stepping = .true., Gridded_Emissions = .true., Point_Emissions = .false., Ignore_Emission_Dates = .true., Flexi_Nest = .true., !--- Output specifications ---
  • 41. Root_Output_Name = '$OUTPUT/CAMx.$RUN.2011${MON}${CAL}', Average_Output_3D = .false., Output_Species_Names(1) = 'NO', Output_Species_Names(2) = 'NO2', Output_Species_Names(3) = 'O3', Output_Species_Names(4) = 'SO2', Output_Species_Names(5) = 'H2O2', Output_Species_Names(6) = 'HNO3', Output_Species_Names(7) = 'NH3', Output_Species_Names(8) = 'PNO3', Output_Species_Names(9) = 'PSO4', Output_Species_Names(10) = 'PNH4', Output_Species_Names(11) = 'POA', Output_Species_Names(12) = 'PEC', Output_Species_Names(13) = 'FPRM', Output_Species_Names(14) = 'CPRM', Output_Species_Names(15) = 'CCRS', Output_Species_Names(16) = 'FCRS', Output_Species_Names(17) = 'SOA1', Output_Species_Names(18) = 'SOA2', Output_Species_Names(19) = 'SOA3', Output_Species_Names(20) = 'SOA4', Output_Species_Names(21) = 'SOA5', Output_Species_Names(21) = 'CO', !--- Input files --- Chemistry_Parameters = '$INPUT/CAMx6.2.chemparam.2_CF', ! 2_CF = CB6r2 con PM Photolyis_Rates = '$INPUT/tuv/TUV/output/tuv.do_CB6.11${MON}01', Ozone_Column = '$INPUT/ozone/O3MAPPR/output2011/o3map.2011${MON}.80x80_25kmx25km.txt', Initial_Conditions = '$INPUT/icbc/ic.cc.${JULSTRT}.const.bin', Boundary_Conditions = '$INPUT/icbc/bc.cc.${JUL}.const.bin', Point_Sources = ' ', Master_Grid_Restart = '$OUTPUT/CAMx.$RUN.2011${YESTERDAY}.inst', Nested_Grid_Restart = '$OUTPUT/CAMx.$RUN.2011${YESTERDAY}.finst', PiG_Restart = ' ', Surface_Grid(1) = '$INPUT/met/d01_mes${MON}/camx.lu.25km.bin', Met2D_Grid(1) = '$INPUT/met/d01_mes${MON}/camx.2d.25km.2011${MON}${CAL}.bin', Met3D_Grid(1) = '$INPUT/met/d01_mes${MON}/camx.3d.25km.2011${MON}${CAL}.bin', Vdiff_Grid(1) = '$INPUT/met/d01_mes${MON}/camx.kv.25km.2011${MON}${CAL}.bin.CMAQ', Cloud_Grid(1) = '$INPUT/met/d01_mes${MON}/camx.cr.25km.2011${MON}${CAL}.bin', Emiss_Grid(1) = '$EMIS/emiss-d1-2011${MON}${CAL}.a1.bin', Surface_Grid(2) = '$INPUT/met/d02_mes${MON}/camx.lu.5km.bin', Met2D_Grid(2) = '$INPUT/met/d02_mes${MON}/camx.2d.5km.2011${MON}${CAL}.bin', Met3D_Grid(2) = '$INPUT/met/d02_mes${MON}/camx.3d.5km.2011${MON}${CAL}.bin', Vdiff_Grid(2) = '$INPUT/met/d02_mes${MON}/camx.kv.5km.2011${MON}${CAL}.bin.CMAQ', Cloud_Grid(2) = '$INPUT/met/d02_mes${MON}/camx.cr.5km.2011${MON}${CAL}.bin',
  • 42. Emiss_Grid(2) = '$EMIS/emiss-d2-2011${MON}${CAL}.a1.bin', / !---------------------------------------------------------------------------- --- ieof # # --- Execute the model --- # $EXEC if [ $? -ne 0 ] ; then exit fi RESTART="YES" YESTERDAY=${MON}$CAL today=$((${today}+1)) done mes=$((${mes}+1)) done date>>hora.txt Básicamente lo que hacemos con este script es hacer pequeñas simulaciones de un día de duración. Cada vez que se termina una simulación, el modelo CAMx genera un archivo por cada dominio que refleja el último estado en el que ha quedado (este fichero tiene terminación .inst para el dominio padre y .finst para el hijo). Con este fichero, el CAMx puede saber a la hora de simular un día la situación en la que ha quedado el día anterior, consiguiendo mantener una continuidad en la simulación. Eso es lo que lleva a cabo este script, simulando cada día a partir de los ficheros de estado del día anterior (excepto para el primer día). Como hemos visto antes, aparte de llevar a cabo un control sobre las fechas entre las que realizamos la simulación, este script se encarga de configurar todos los parámetros que el CAMx recibe. Algunos de estos parámetros hacen referencia a los ficheros que hemos obtenido previamente, teniendo que indicarle al CAMx su localización. Otros se utilizan para controlar el tamaño y localización de los dominios, la frecuencia de cálculo y de salida, o las configuraciones químicas que se desean emplear. Antes de hacer una simulación completa, realizamos varias simulaciones de prueba, como hicimos con el modelo WRF, que nos servirán tanto para ajustar los parámetros e intentar obtener los mejores resultados posibles, como para estudiar el tiempo que nos llevará la simulación de un periodo de un año. Así, lo primero que hice fue realizar una simulación de un día (14/09/2011) tomando solamente el dominio de la Península Ibérica (el más grande). Esto sirvió para poder configurarlo correctamente y poder hacer que todos los ficheros encajen entre sí. Además, se ha podido estudiar el tiempo que tarda el modelo en simular periodo de un día en este dominio, siendo un tiempo de unos 20 minutos, bastante menor que el del WRF. Esto quiere decir que para simular un año, a tardaríamos unas 118.67 horas, es
  • 43. decir casi 5 días. No obstante, este resultado sería si calculáramos solamente el dominio grande. Tras varias simulaciones de prueba más, una vez ejecutamos el modelo con varios dominios anidados, vemos que el tiempo de simulación se alarga hasta alcanzar casi los mismos valores que el tiempo de simulación del WRF, siendo necesario disponer de un mes de tiempo físico para poder realizar una simulación de un año, lo cual debemos tener en cuenta a la hora de comenzar nuestras simulaciones finales. Como en el caso del modelo WRF, dos simulaciones del CAMx pueden variar mucho entre sí dependiendo de la configuración que se les aplique a cada una, siendo casi imposible que coincidan al 100% ambas simulaciones, lo que hace necesario que tengamos que realizar varias simulaciones para obtener la configuración final que usaremos. Una vez hemos elegido esta configuración, podremos ejecutar ya definitivamente el modelo a través de nuestro script, cuyo funcionamiento hemos visto anteriormente. Esta acción nos dará como frutos los archivos de calidad de aire finales, que será los que visualicemos a continuación. 2.10 Visualización de los archivos del CAMx Para visualizar los archivos del CAMx he probado diferentes caminos a lo largo de la práctica. Primero intenté convertir los archivos con la herramienta IOAPI para, no solo poder abrirlos con herramientas que conocía mi compañero de prácticas, si no poder comparar más fácilmente con el los archivos de salida. Pronto comprendí que esta tarea no era la mejor solución. Tras pasar algún tiempo instalando y probando otra herramienta, PseudoNetCDF, que parecía que me podía ayudar a convertir los archivos de salida en archivos netCDF que pudiera abrir con herramientas como ncview (lo cual finalmente conseguí), descubrí que era viable, y mucho más fácil, abrir los archivos de salida originales con la misma herramienta que usaba para abrir los archivos meteorológicos, la herramienta IDV. El funcionamiento de esta herramienta es exactamente el mismo que para visualizar el contenido de los ficheros de salida del modelo WRF; seleccionas los ficheros de los que quieres obtener los datos, seleccionas las variables que quieres ver por pantalla, y la forma en la que estas se muestran, y ya está, puedes visualizarlas en el mapa o en gráficas. Esta son una de las imágenes que se puede obtener con esta herramienta:
  • 44. 2.11 Resultados obtenidos A continuación vamos a ver los resultados obtenidos mediante las dos simulaciones finales que hemos realizado, tanto con el WRF como con el CAMx. Todo el proceso que se ha descrito durante este documento tenía como objetivo obtener una serie de archivos que poder comparar con los datos recogidos por las estaciones de medición tanto de meteorología como de calidad del aire, con el fin de determinar la exactitud de nuestras simulaciones y ver si se consiguió elegir los parámetros adecuados para la simulación. Otro de los objetivos era comparar los resultados obtenidos con los obtenidos por mi compañero de prácticas, que debía simular el mismo dominio y las mimas fechas que yo, solo que con los modelos MM5 de meteorología y CMAQ de calidad del aire. Esto tenía como fin demostrar que, aunque el dominio y las fechas a simular eran las mismas, los resultados que íbamos a obtener iban a ser irremediablemente distintos unos de otros, pudiendo apreciar las características de cada modelo (igual uno obtenía siempre temperaturas más extremas que el otro, por ejemplo) y pudiendo ver cuál se comportaba mejor con respecto a los datos de las estaciones meteorológicas. Al final cada uno se ha tenido que centrar en su trabajo demasiado y no hemos podido realizar esta comparación, pero tras hacer este informe, como seguiremos trabajando parcialmente en el proyecto y como tendremos los datos de salida bien organizados, podamos llevar a cabo esta comparación. En estos momentos seguimos con las simulaciones en nuestra máquina, con lo que no se va a poder representar el año entero en este informe en ninguna de las simulaciones. De momento en el modelo WRF he simulado un total de 7 meses, desde el 1 de febrero hasta el 31 de Agosto, lo que aun así es un periodo bastante extenso en el que ya se pueden sacar conclusiones. En cuanto a la simulación del CAMx, que tiene que ir admitiendo la salida de las simulaciones del WRF, he simulado de momento 4 meses, de febrero a marzo. De momento estoy algo estancado porque finalmente han aparecido problemas de espacio, y antes de tomar medidas he preferido esperar a después de la entrega de este informe para verlo con más calma. Además, aunque para la simulación de calidad del aire he realizado diversas comparaciones con estaciones, y aunque llevo obtenidos 4 meses de simulación, el tiempo físico del que dispongo no me da para hacer una comparación exhaustiva como la que realizo más adelante para el WRF. Espero poder hacer algo parecido a este análisis en navidades, pero por el momento no me es posible. Como consuelo, podemos ver que existe coherencia en estos datos en imágenes como la siguiente, que representa los niveles de NO2 (producido en gran medida por el tráfico) un día por la mañana (a las 6:00):
  • 45. Sabiendo esto, procedamos a ver los resultados de la simulación meteorológica, efectuada a través del modelo WRF. Hay varias formas en las que podemos estudiar estos resultados. Por un lado, podríamos abrir un fichero cualquiera y ver para cada variable algún tipo de mapa con sus valores, viendo cómo evoluciona este mapa a lo largo del tiempo. Por ejemplo, si vemos un mapa de la temperatura en la Península y sus alrededores, se puede observar como sube la temperatura durante el día y baja por la noche, así como los valores extremos que ésta coge en África. En la siguiente imagen tenemos un ejemplo de lo que veríamos: Sin embargo, a nosotros nos interesa más contrastar la autenticidad de nuestros datos comparándolos con los de las estaciones meteorológicas. Si bien en el ejemplo anterior podríamos seleccionar diversos puntos a diferentes horas y compararlos con los datos puntuales registrados por estaciones cercanas a esos puntos, nosotros hemos optado por una opción diferente, aunque más tarde si es posible se realizará un estudio como este como segundo método de comprobación. Así pues, el procedimiento que voy a seguir va a ser el de realizar un estudio de las diferencias entre los datos obtenidos por nuestra simulación y los datos obtenidos por una sola estación a lo largo del año (o del periodo que tenemos en nuestro caso, que es el de 7 meses). De esta forma podemos realizar una comparación más exhaustiva, centrándonos en distintas variables y en los valores que éstas toman a diario. La estación que he elegido para hacer esta comparación es la de Colmenar Viejo, porque está cerca del centro de nuestro dominio y era una estación que no había usado para mis comparaciones en simulaciones previas, con los que los datos podrían reflejar más fielmente la eficacia de mi configuración. Esta estación se encuentra en las coordenadas 40° 39′ 31.64″ N, 3° 45′ 58.76″ W.
  • 46. Para realizar la comparación con la estación meteorológica es necesario obtener los datos históricos del año 2011 para esta estación en concreto. Estos datos se pueden encontrar en Internet. A lo largo de la asignatura, he usado principalmente dos páginas web diferentes para obtener estos datos. Estas son por un lado http://www.datosclima.es/ y por otro http://gestiona.madrid.org/azul_internet/html/web/InformAnalizadoresAccion.icm?ESTADO_ MENU=2_1_2 . Finalmente he acabado usando más el segundo enlace, ya que contiene tanto variables meteorológicas como de contaminación, el contenido es bastante más accesible que en el primer enlace, y permite descargar la información en formato de hoja de cálculo de Excel, algo que a continuación veremos que ha sido fundamental para realizar la comparación con nuestros datos. Además de todo esto, da como valor añadido la seguridad que conlleva el ser una página oficial, en este caso de la Comunidad de Madrid. Así pues, lo que he hecho ha sido descargar de esta página los datos de diferentes variables, que vienen dadas con una frecuencia diaria, en formato de hoja de cálculo (en este documento muestro las variables Temperatura, Presión, y Humedad Relativa). Esto por el lado de los datos de la estación meteorológica. Por el lado de los datos obtenidos por nuestra simulación, el proceso a realizar que he seguido es diferente. Como vimos anteriormente, los archivos que obtenía con el WRF me era necesario comprimirlos por cuestiones de almacenamiento. Así pues, para extraer de aquí los datos necesarios es conveniente seguir un determinado orden; nosotros lo haremos mes a mes. De este modo, para cada mes descomprimo los archivos del dominio pequeño (estaban comprimidos por dominio y mes), ya que serán datos más precisos que los del dominio anterior, y , una vez descomprimidos, los abro. El programa que estoy usando para abrir estos archivos es el IDV, del cual he hablado anteriormente. En este programa, selecciono en el apartado "Data Choosers" los archivos salida del WRF (todos a la vez) y los abro como "Aggregate WRF netcdf grids by Time". Una vez abierto, selecciono las variables que quiera observar, y pido que obtenga el gráfico de evolución de dichas variables en las coordenadas correspondientes a la estación de Colmenar Viejo, que son en decimal (40.65879°, -3.766321°), lo cual el programa lo ajusta a la celdilla correspondiente a las coordenadas (40.7º,-3.8º). Una vez se obtiene la evolución de la variable que queremos estudiar en dichas coordenadas, podemos guardar el gráfico con los valores de dicha variable a lo largo del periodo de tiempo, que tendría la siguiente forma: También podríamos guardar un archivo de texto con extensión ".csv" que almacene todos los valores que coge la variable. Este fichero se podrá abrir más tarde con un visualizador de hojas de cálculo, como Excel, con lo que es el fichero que nos interesa guardar para poder realizar la comparación con los datos de la estación antes descargados.
  • 47. Las variables entre las que vamos a realizar la comparación van a ser la temperatura, la presión atmosférica y la humedad relativa. Para los datos de la estación meteorológica, como hemos visto, es posible descargar estas tres variables sin dificultad alguna. Para los datos obtenidos de la simulación, sin embargo, carecemos de la variable de humedad relativa, mientras que las otras sí que nos aparecen tal cual. Para calcular la humedad relativa hay que hacer uso de diferentes fórmulas, las cuales he sacado de internet. Por un lado, la definición de humedad relativa es la siguiente: 𝑟ℎ = 𝑤 𝑤𝑠 ∗ 100 Donde 𝑤 es el mixing ratio actual, y 𝑤𝑠 es el saturated mixing ratio. El valor del primero nos es conocido, ya que el WRF sí que nos devuelve una variable que representa el mixing ratio, la cual llama Q2. Sin embargo, seguimos careciendo del saturated mixing ratio. Indagando algo más por Internet, vemos que la fórmula para calcular este valor es la siguiente: 𝑤𝑠 = 621.97 ∗ 𝑒𝑠 𝑝𝑠𝑡𝑎 − 𝑒𝑠 Donde 𝑒𝑠 = 6.11 ∗ 10 7.5∗𝑇 237.7+𝑇 Como la presión y la temperatura nos son conocidas, podemos calcular a partir de ellas los valores de 𝑒𝑠 y de 𝑤𝑠, pudiendo calcular, por tanto, el valor de la humedad relativa en el momento en que deseemos. Si pasamos los valores que obtenemos del IDV a una hoja de cálculo de Excel, podemos crear una tabla con una variable %HR (porcentaje de humedad relativa) que se calcule automáticamente a partir de los valores de T2 (temperatura), PSFC (presión superficial) y Q2 (mixing ratio). En mi caso he empleado las siguientes fórmulas para calcular los valores de 𝑒𝑠 (primera fórmula) y los valores de 𝑤𝑠 (segunda fórmula): =6.11*10^(7.5*[@T2]/(237.7+[@T2])) =[@Q2]/(621.97*[@Es]/([@PSFC]-[@Es]))*100 Como se puede apreciar, no es más que la traducción a Excel de las fórmulas anteriores. Finalmente lo que he hecho con los datos de ambas fuentes ha sido crear un libro de Excel en el que cada hoja contuviera los datos (reales o simulados) de un determinado mes. Un problema que ha habido que solventar es el hecho de que los archivos correspondientes a la estación presentan una frecuencia diaria, mientras que los archivos de nuestra simulación mantienen una frecuencia horaria, lo que dificulta la comparación entre ambas. Este problema ha sido resuelto con las tablas que se presentan a continuación, en las que se calculan otras variables, además de las que tenemos, que almacenan la media diaria de cada una de nuestras variables. Estas tablas han permitido también la realización de las gráficas de comparación que veremos a continuación, así como la obtención tanto de valores medios para cada uno de los meses, como de valores mínimos y máximos de cada variable.
  • 48. Antes de ver las gráficas, vemos a continuación un ejemplo de cada tipo de tabla. La primera es una tabla obtenida a partir de los datos de la estación meteorológica descargados desde Internet (en este caso se corresponde al mes de marzo), que muestra, en este orden, temperatura, presión atmosférica y humedad relativa: Fecha Tmp - ºC Pre - mbar HR - % 01/03/2011 2.70 917.00 51.00 02/03/2011 2.70 915.00 58.00 03/03/2011 0.90 913.00 71.00 04/03/2011 -0.40 911.00 99.00 05/03/2011 3.60 914.00 81.00 06/03/2011 5.90 913.00 64.00 07/03/2011 8.50 914.00 52.00 08/03/2011 7.20 915.00 58.00 09/03/2011 7.60 916.00 71.00 10/03/2011 8.90 917.00 60.00 11/03/2011 6.20 910.00 71.00 12/03/2011 6.20 899.00 92.00 13/03/2011 6.40 899.00 89.00 14/03/2011 7.30 897.00 94.00 15/03/2011 6.70 899.00 79.00 16/03/2011 6.70 903.00 64.00 17/03/2011 9.50 914.00 57.00 18/03/2011 10.70 920.00 58.00 19/03/2011 12.00 921.00 45.00 20/03/2011 12.00 918.00 36.00 21/03/2011 8.30 919.00 66.00 22/03/2011 6.90 920.00 60.00 23/03/2011 5.30 920.00 83.00 24/03/2011 6.40 921.00 93.00 25/03/2011 8.50 918.00 88.00 26/03/2011 9.80 912.00 84.00 27/03/2011 6.90 911.00 85.00 28/03/2011 8.00 914.00 70.00 29/03/2011 9.80 915.00 69.00 30/03/2011 11.30 920.00 67.00 31/03/2011 13.20 923.00 61.00 Promedio 7.28 913.48 70.19
  • 49. La tabla correspondiente a cada mes para los datos obtenidos mediante las simulaciones es bastante más extensa, ya que se compone de una fila para cada hora. Para mayor comodidad, he aplicado un filtro para que solamente muestre la última hora del día. Además de las variables anteriores, se puede apreciar la inclusión de las variables T2_Día, PSFC_Día y %HR_Día, cuyos valores se muestran una vez al día (coincidiendo con la última hora de éste), y no son otra cosa que el valor medio de las variables para dicho día. Será este valor, por tanto, el que se use para comparar los datos con los obtenidos por la estación meteorológica. Además de estas variables, se añaden las variables Es y Q2, usadas para calcular el valor de la humedad relativa, tal y como se ha explicado anteriormente. Así cada tabla quedaría de la siguiente forma:
  • 50. Teniendo todos los datos localizados en el mismo fichero Excel, ya podemos visualizar diferentes gráficas que nos muestren el comportamiento que ha tenido nuestra simulación, tanto por días como por meses. A continuación se muestran diferentes gráficos que muestran este comportamiento. Primero se van a mostrar varias gráficas con los valores medios de estas variables para cada mes, según una y otra fuente. Las gráficas corresponderían a una tabla como la siguiente, en la que ya se pueden apreciar las diferencias entre la simulación y los datos recogidos por la estación meteorológica: Mes T2 T2 est PSFC PSFC est %HR %HR est Febrero 6.35746049 6.860714286 915.1958761 915.6071429 63.35316975 60.71428571 Marzo 7.029607884 7.280645161 913.0106871 913.483871 71.39912073 70.19354839 Abril 13.3291005 14.1 912.3333333 911.7847898 57.8275367 58.16666667 Mayo 16.01199678 16.54193548 914.0754963 915.0322581 60.01048494 58.38709677 Junio 19.3777075 20.27333333 913.9807534 914.9333333 51.29940393 45.36666667 Julio 20.86387688 22.38387097 912.3019258 912.6129032 44.59880989 36.48387097 Agosto 23.00407657 23.51935484 912.9145291 913.8709677 41.61272259 38.61290323 Para mejorar la visualización de los resultados, vamos a mostrar una gráfica por cada una de las variables. Comenzamos por la gráfica de la temperatura. En ella vemos claramente que la temperatura obtenida por nuestra simulación queda siempre algo más fría que la recogida por la estación meteorológica: 6,35746049 7,029607884 13,3291005 16,01199678 19,3777075 20,86387688 23,00407657 6,860714286 7,280645161 14,1 16,54193548 20,27333333 22,38387097 23,51935484 FE BRE RO MARZO ABRIL MAY O JUNIO JULIO AGOST O TEMPERATURA (MESES) T2 T2 est
  • 51. A continuación vemos una igual para la presión: Podemos también observar como se deduce un comportamiento de cálculo a la baja aquí también; si bien durante el mes de abril la situación es a la inversa, vemos como todos los demás meses la presión atmosférica calculada por nuestro modelo es siempre más pequeña que la de las estaciones meteorológicas. Por último, vemos las diferencias en cuanto a humedad relativa: Al igual que para la presión, salvo el mes de abril, encontramos el error siempre en la misma dirección; en este caso obtenemos mayor humedad relativa que la que encontramos en los datos de la estación meteorológica. El hecho de que el mes en el que cambia esta tendencia sea el mismo que en el caso de la presión nos puede decir que ambas situaciones están relacionadas. 915,1958761 913,0106871 912,3333333 914,0754963 913,9807534 912,3019258 912,9145291 915,6071429 913,483871 911,7847898 915,0322581 914,9333333 912,6129032 913,8709677 F E BRE RO MA RZO A BRIL MA Y O JUNIO JULIO A GOS T O PRESIÓN (MESES) PSFC PSFC est 63,35316975 71,39912073 57,8275367 60,01048494 51,29940393 44,59880989 41,61272259 60,71428571 70,19354839 58,16666667 58,38709677 45,36666667 36,48387097 38,61290323 F E BRE RO MA RZO A BRIL MA Y O JUNIO JULIO A GOS T O %HUM REL (MESES) %HR %HR est