practicum jorge moreno: wrf-camx

94
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

Upload: jorge-moreno-palenzuela

Post on 22-Jan-2018

443 views

Category:

Software


4 download

TRANSCRIPT

Page 1: Practicum Jorge Moreno: WRF-CAMX

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

Page 2: Practicum Jorge Moreno: WRF-CAMX

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

Page 3: Practicum Jorge Moreno: WRF-CAMX

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

Page 4: Practicum Jorge Moreno: WRF-CAMX

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.

Page 5: Practicum Jorge Moreno: WRF-CAMX

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.

Page 6: Practicum Jorge Moreno: WRF-CAMX

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.

Page 7: Practicum Jorge Moreno: WRF-CAMX

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.

Page 8: Practicum Jorge Moreno: WRF-CAMX

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,

/

Page 9: Practicum Jorge Moreno: WRF-CAMX

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.

Page 10: Practicum Jorge Moreno: WRF-CAMX

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.

Page 11: Practicum Jorge Moreno: WRF-CAMX

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

Page 12: Practicum Jorge Moreno: WRF-CAMX

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

Page 13: Practicum Jorge Moreno: WRF-CAMX

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

Page 14: Practicum Jorge Moreno: WRF-CAMX

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

Page 15: Practicum Jorge Moreno: WRF-CAMX

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

Page 16: Practicum Jorge Moreno: WRF-CAMX

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.

Page 17: Practicum Jorge Moreno: WRF-CAMX

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.

Page 18: Practicum Jorge Moreno: WRF-CAMX

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,

Page 19: Practicum Jorge Moreno: WRF-CAMX

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,

Page 20: Practicum Jorge Moreno: WRF-CAMX

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, /

Page 21: Practicum Jorge Moreno: WRF-CAMX

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í:

Page 22: Practicum Jorge Moreno: WRF-CAMX

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í

Page 23: Practicum Jorge Moreno: WRF-CAMX

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.

Page 24: Practicum Jorge Moreno: WRF-CAMX

- 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.

Page 25: Practicum Jorge Moreno: WRF-CAMX

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:

Page 26: Practicum Jorge Moreno: WRF-CAMX

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

Page 27: Practicum Jorge Moreno: WRF-CAMX

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.

Page 28: Practicum Jorge Moreno: WRF-CAMX

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:

Page 29: Practicum Jorge Moreno: WRF-CAMX
Page 30: Practicum Jorge Moreno: WRF-CAMX

Pesos por día de la semana:

Page 31: Practicum Jorge Moreno: WRF-CAMX
Page 32: Practicum Jorge Moreno: WRF-CAMX

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.

Page 33: Practicum Jorge Moreno: WRF-CAMX

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

Page 34: Practicum Jorge Moreno: WRF-CAMX

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

Page 35: Practicum Jorge Moreno: WRF-CAMX

- 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

Page 36: Practicum Jorge Moreno: WRF-CAMX

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.

Page 37: Practicum Jorge Moreno: WRF-CAMX

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:

Page 38: Practicum Jorge Moreno: WRF-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 #

Page 39: Practicum Jorge Moreno: WRF-CAMX

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}.,

Page 40: Practicum Jorge Moreno: WRF-CAMX

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 ---

Page 41: Practicum Jorge Moreno: WRF-CAMX

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',

Page 42: Practicum Jorge Moreno: WRF-CAMX

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

Page 43: Practicum Jorge Moreno: WRF-CAMX

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:

Page 44: Practicum Jorge Moreno: WRF-CAMX

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):

Page 45: Practicum Jorge Moreno: WRF-CAMX

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.

Page 46: Practicum Jorge Moreno: WRF-CAMX

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.

Page 47: Practicum Jorge Moreno: WRF-CAMX

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 ∗ 107.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.

Page 48: Practicum Jorge Moreno: WRF-CAMX

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

Page 49: Practicum Jorge Moreno: WRF-CAMX

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:

Page 50: Practicum Jorge Moreno: WRF-CAMX

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,3

57

46

04

9

7,0

29

60

78

84

13

,32

91

00

5

16

,01

19

96

78

19

,37

77

07

5

20

,86

38

76

88

23

,00

40

76

57

6,8

60

71

42

86

7,2

80

64

51

61 14

,1

16

,54

19

35

48

20

,27

33

33

33

22

,38

38

70

97

23

,51

93

54

84

F E B R E R O M A R Z O A B R I L M A Y O J U N I O J U L I O A G O S T O

TEMPERATURA (MESES)

T2 T2 est

Page 51: Practicum Jorge Moreno: WRF-CAMX

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.

91

5,1

95

87

61

91

3,0

10

68

71

91

2,3

33

33

33 91

4,0

75

49

63

91

3,9

80

75

34

91

2,3

01

92

58

91

2,9

14

52

91

91

5,6

07

14

29

91

3,4

83

87

1

91

1,7

84

78

98

91

5,0

32

25

81

91

4,9

33

33

33

91

2,6

12

90

32

91

3,8

70

96

77

F E B R E R O M A R Z O A B R I L M A Y O J U N I O J U L I O A G O S T O

PRESIÓN (MESES)

PSFC PSFC est

63

,35

31

69

75

71

,39

91

20

73

57

,82

75

36

7

60

,01

04

84

94

51

,29

94

03

93

44

,59

88

09

89

41

,61

27

22

5960

,71

42

85

71

70

,19

35

48

39

58

,16

66

66

67

58

,38

70

96

77

45

,36

66

66

67

36

,48

38

70

97

38

,61

29

03

23

F E B R E R O M A R Z O A B R I L M A Y O J U N I O J U L I O A G O S T O

%HUM REL (MESES)

%HR %HR est

Page 52: Practicum Jorge Moreno: WRF-CAMX

Hemos visto la evolución de estas variables a lo largo de los meses, lo que nos da una

idea aproximada sobre el comportamiento de nuestra simulación. No obstante, nos queda

saber si nuestras simulaciones se comportan de forma correcta en el día a día o si, por el

contrario, encontramos muchos picos donde la diferencia entre unos valores y otros sea

bastante grande.

Para ello, y ya que tenemos de forma bastante accesible en nuestro libro de Excel las

tablas de cada mes, vamos a obtener una batería de gráficas que representen esta evolución

diaria para estas variables, mostrando una gráfica de comparación por variable y por mes.

Estos son los resultados obtenidos:

Temperatura:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

T2 estación 1, 4, 6, 7, 10 10 10 8, 6, 7, 7, 6, 4, 2, 2, 1, 3, 4, 4, 5, 7, 10 10 11 12 12 6, 3,

T2 simulación 3 5 5 6 9 9 8 7 6 6 7 7 4 3 6 3 2 3 5 6 6 9 9 10 12 11 4 2

0,00

2,00

4,00

6,00

8,00

10,00

12,00

14,00

TEM

PER

ATU

RA

(C

º)

TEMPERATURA FEBRERO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

T2 estación 2, 2, 0, -0 3, 5, 8, 7, 7, 8, 6, 6, 6, 7, 6, 6, 9, 10 12 12 8, 6, 5, 6, 8, 9, 6, 8, 9, 11 13

T2 simulación 2 3 2 1 3 5 7 8 7 8 6 7 6 8 7 7 8 9 10 9 8 7 5 7 10 10 7 7 9 11 14

-2,00

0,00

2,00

4,00

6,00

8,00

10,00

12,00

14,00

16,00

TEM

PER

ATU

RA

(C

º)

TEMPERATURA MARZO

Page 53: Practicum Jorge Moreno: WRF-CAMX

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

T2 estación 15 14 11 13 16 18 18 19 19 16 14 14 17 18 13 12 12 13 13 12 10 7, 9, 11 12 12 15 15 12 10

T2 simulación 14 13 12 12 14 16 16 18 20 17 13 14 14 16 13 12 12 13 12 11 12 9 8 11 13 13 14 14 13 11

0,00

5,00

10,00

15,00

20,00

25,00

TEM

PER

ATU

RA

(C

º)TEMPERATURA ABRIL

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

T2 estación 11 13 15 14 15 15 11 12 17 18 18 18 18 15 12 15 16 16 12 16 18 18 20 22 22 21 16 18 19 15 15

T2 simulación 11 14 14 14 14 15 13 13 17 18 17 19 19 16 12 14 17 16 15 16 17 18 19 20 20 18 16 18 17 16 13

0,00

5,00

10,00

15,00

20,00

25,00

TEM

PER

ATU

RA

(C

º)

TEMPERATURA MAYO

Page 54: Practicum Jorge Moreno: WRF-CAMX

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

T2 estación 11 13 14 15 16 13 12 14 15 15 17 21 21 22 23 22 21 20 22 24 25 24 22 22 26 27 27 26 23 22

T2 simulación 11 12 15 15 17 17 13 13 16 16 18 20 21 21 23 21 20 18 20 24 25 23 20 20 23 25 26 25 21 21

0,00

5,00

10,00

15,00

20,00

25,00

30,00

TEM

PER

ATU

RA

(C

º)TEMPERATURA JUNIO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

T2 estación 24 26 23 21 24 23 20 20 22 23 24 22 16 18 22 25 21 19 19 20 23 20 21 19 21 24 21 23 25 25 25

T2 simulación 23 26 22 21 24 22 19 19 22 23 23 21 16 18 21 23 20 18 17 18 21 18 18 18 20 21 20 22 25 24 23

0,00

5,00

10,00

15,00

20,00

25,00

30,00

TEM

PER

ATU

RA

(C

º)

TEMPERATURA JULIO

Page 55: Practicum Jorge Moreno: WRF-CAMX

Presión atmosférica:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

T2 estación 24 19 22 25 24 23 23 22 22 24 26 25 22 25 26 26 26 26 26 28 26 20 22 22 22 18 18 21 23 22 18

T2 simulación 23 19 23 25 25 23 22 21 21 22 25 25 25 26 26 26 26 25 26 29 27 20 21 22 22 18 18 20 23 21 19

0,00

5,00

10,00

15,00

20,00

25,00

30,00

TEM

PER

ATU

RA

(C

º)TEMPERATURA AGOSTO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Estación 919922925929928925921917917918916916907906898893895911911913916915919922922920919917

Simulación 918921924927927924919916916917915914908907898893895911911912916916919922922920919917

870,00

880,00

890,00

900,00

910,00

920,00

930,00

940,00

PR

ESIÓ

N (

MB

AR

)

PRESIÓN FEBRERO

Page 56: Practicum Jorge Moreno: WRF-CAMX

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 91 91 91 91 91 91 91 91 91 91 91 89 89 89 89 90 91 92 92 91 91 92 92 92 91 91 91 91 91 92 92

Simulación 91 91 91 91 91 91 91 91 91 91 90 89 89 89 89 90 91 92 92 91 91 91 91 91 91 91 91 91 91 91 92

880,00

885,00

890,00

895,00

900,00

905,00

910,00

915,00

920,00

925,00

PR

ESIO

N (

MB

AR

)PRESIÓN MARZO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Estación 91 91 91 91 92 92 92 92 91 91 92 92 91 90 90 91 91 91 90 90 90 90 90 90 91 91 91 90 90 89

Simulación 91 91 91 91 92 92 92 92 91 91 91 92 91 91 90 91 91 91 90 90 90 89 90 90 91 91 91 90 90 89

885,00

890,00

895,00

900,00

905,00

910,00

915,00

920,00

925,00

PR

ESIO

N (

MB

AR

)

PRESIÓN ABRIL

Page 57: Practicum Jorge Moreno: WRF-CAMX

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 89 89 90 91 91 91 91 91 91 92 91 91 91 91 92 92 91 91 91 91 91 91 92 92 92 91 91 91 91 91 91

Simulación 89 89 90 91 91 91 91 91 91 92 91 91 91 91 92 92 91 91 91 91 91 91 91 92 91 91 91 91 91 91 91

885,00

890,00

895,00

900,00

905,00

910,00

915,00

920,00

925,00P

RES

ION

(M

BA

R)

PRESIÓN MAYO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Estación 92 91 91 91 90 90 90 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 92 91 91 91 91 91

Simulación 92 91 91 91 90 90 90 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 92 91 91 91 91 91

890,00

895,00

900,00

905,00

910,00

915,00

920,00

925,00

PR

ESIO

N (

MB

AR

)

PRESIÓN JUNIO

Page 58: Practicum Jorge Moreno: WRF-CAMX

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 91 91 90 91 91 91 90 91 91 91 91 90 91 91 91 91 90 90 91 91 91 91 91 91 91 91 91 91 91 91 91

Simulación 91 91 90 91 91 91 90 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91

900,00

902,00

904,00

906,00

908,00

910,00

912,00

914,00

916,00

918,00P

RES

ION

(M

BA

R)

PRESIÓN JULIO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 90 91 91 91 91 91 91 91 92 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 90

Simulación 90 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 91 90

902,00

904,00

906,00

908,00

910,00

912,00

914,00

916,00

918,00

920,00

922,00

PR

ESIO

N (

MB

AR

)

PRESIÓN AGOSTO

Page 59: Practicum Jorge Moreno: WRF-CAMX

Humedad relativa:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

Estación 58 41 50 51 38 39 37 43 60 56 62 65 89 69 94 97 77 75 10 84 64 62 57 54 41 40 47 50

Simulación 50 43 53 57 40 30 36 50 62 66 60 53 81 79 81 92 76 77 97 78 76 78 68 64 46 51 64 69

0,00

20,00

40,00

60,00

80,00

100,00

120,00

HU

M R

EL (

%)

%HUM. REL. FEBRERO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 51 58 71 99 81 64 52 58 71 60 71 92 89 94 79 64 57 58 45 36 66 60 83 93 88 84 85 70 69 67 61

Simulación 62 63 61 88 83 68 61 58 82 63 73 94 91 90 79 65 73 59 45 44 56 58 84 90 82 84 80 73 70 73 61

0,00

20,00

40,00

60,00

80,00

100,00

120,00

HU

M R

EL (

%)

%HUM. REL. MARZO

Page 60: Practicum Jorge Moreno: WRF-CAMX

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Estación 53 55 78 74 55 41 33 35 38 52 51 47 40 31 40 59 57 46 63 89 91 95 81 65 63 59 46 44 70 94

Simulación 54 57 67 57 62 44 28 29 31 50 55 49 37 37 43 56 52 44 62 90 86 90 94 79 62 59 45 54 75 86

0,00

10,00

20,00

30,00

40,00

50,00

60,00

70,00

80,00

90,00

100,00

HU

M R

EL (

%)

%HUM. REL. ABRIL

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 76 72 54 48 49 70 84 67 50 50 52 49 52 73 58 48 55 59 72 51 48 51 46 37 36 45 81 68 61 82 66

Simulación 78 66 68 62 54 71 77 55 43 53 48 44 48 72 41 52 50 55 53 52 53 58 58 55 56 67 81 68 77 80 65

0,00

10,00

20,00

30,00

40,00

50,00

60,00

70,00

80,00

90,00

HU

M R

EL (

%)

%HUM. REL. MAYO

Page 61: Practicum Jorge Moreno: WRF-CAMX

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Estación 52 53 53 57 60 89 93 62 51 52 46 38 38 35 35 39 41 39 30 38 33 30 31 43 33 34 34 32 45 45

Simulación 55 63 62 65 65 72 78 62 54 60 61 51 45 52 43 50 53 46 44 41 36 39 52 49 44 36 34 34 50 45

0,00

10,00

20,00

30,00

40,00

50,00

60,00

70,00

80,00

90,00

100,00

HU

M R

EL (

%)

%HUM. REL. JUNIO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 35 30 30 41 32 36 31 35 41 29 23 35 53 44 37 30 39 38 42 34 32 47 34 40 44 39 38 42 34 34 32

Simulación 46 32 34 35 37 43 41 38 44 36 40 41 53 42 47 42 46 47 52 48 40 54 44 48 57 58 49 50 41 46 50

0,00

10,00

20,00

30,00

40,00

50,00

60,00

70,00

HU

M R

EL (

%)

%HUM. REL. JULIO

Page 62: Practicum Jorge Moreno: WRF-CAMX

Observamos como nuestro modelo se comporta bastante bien en términos generales.

En los apartados de temperatura y presión vemos como la gráfica que representa los datos de

simulación se aproxima bastante a la gráfica de los datos de la estación meteorológicas,

muchas veces coincidiendo con ella. Otras veces podemos observar como esta gráfica imita

exactamente el mismo comportamiento que la gráfica de la estación solo que en una posición

más baja o elevada, es decir, se mueve paralelamente a la gráfica de la estación

meteorológica. Esto es una buena señal ya que quiere decir que, aunque la temperatura o

presión de referencia es distinta en una o en otra (igual por la situación geográfica ligeramente

distinta), la evolución de ésta la estamos simulando bastante bien, señal de que nuestro

modelo funciona correctamente.

Donde encontramos más diferencias es en el apartado de humedad relativa, que, si

bien muchas veces se acerca la gráfica de la simulación al comportamiento de la de la estación,

en algunos casos solamente consigue intuir dicha evolución o, en el caso del mes de mayo, por

ejemplo, no logra acercarse demasiado en determinados puntos.

A pesar de esto, las sensaciones generales son bastante positivas. Cabe destacar que

esto es solamente un test, pero mientras configuraba el modelo iba comparando los

resultados con otras estaciones meteorológicas y los resultados con esta configuración seguían

siendo bastante buenos. En definitiva, parece que ha sido correcto usar esta configuración

para simular el año entero, y espero poder terminar este año de simulación lo antes posible.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

Estación 38 64 46 35 36 38 44 33 27 37 42 40 54 39 33 32 29 33 38 33 38 62 46 41 35 41 28 37 21 21 56

Simulación 49 70 43 36 39 46 53 41 41 42 40 40 47 31 40 42 33 34 40 30 32 60 46 36 41 43 32 47 31 26 61

0,00

10,00

20,00

30,00

40,00

50,00

60,00

70,00

80,00

HU

M R

EL (

%)

%HUM. REL. AGOSTO

Page 63: Practicum Jorge Moreno: WRF-CAMX

3. Conclusión. Valoración de las tareas desarrolladas con los conocimientos y competencias

adquiridos en relación con los estudios universitarios. Identificación de las

aportaciones que, en materia de aprendizaje, han supuesto las prácticas. Evaluación

de las prácticas y sugerencias de mejora. Análisis de las condiciones de trabajo

vividas en el centro. Reflexión sobre las características del entorno laboral y de la

organización en la que han tenido lugar las prácticas. Valoración personal de la

experiencia.

Las tareas que he tenido que llevar a cabo están enfocadas a la rama de la Informática

conocida como Computer Science (Computación científica). A pesar de que en España (a

diferencia de otros países) este campo de la informática comparte con la Ingeniería del

Software el Grado de Informática que se imparte en nuestro centro (y por ende también el de

Matemáticas e Informática que yo estudio), tras casi 4 años que llevo en la carrera he podido

ver como quedaba totalmente en un segundo plano, centrándose ambos grados en la

Ingeniería del Software casi en exclusiva. Es por ello que quizá llegado el momento de empezar

a trabajar en las tareas a realizar tuviera una mala percepción de los pasos a seguir, obcecado

con intentar resolver los problemas como si de una Ingeniería se tratase, olvidándome del

componente científico que debería haber tenido en cuenta desde el principio. Sin duda un

mayor acercamiento durante la carrera a esta rama de Computación científica hubiera

ayudado en gran medida a mi adaptación a las tareas.

Por otro lado, durante la realización de dichas tareas he podido poner en práctica

bastantes conocimientos adquiridos a lo largo del Grado en curso. Los conocimientos que más

me han ayudado y más he necesitado son el uso de Linux/Unix y el trabajo con la consola,

librerías, compiladores, flags y demás, ya que me he tenido que meter bastante profundo en

este campo debido a los distintos errores que es frecuente que salgan con las herramientas

que estamos usando, para los que muchas veces tenía que investigar durante mucho tiempo

hasta poder dar con una solución. Sin embargo, cada uno de estos errores me enseñaba algo

que desconocía acerca del comportamiento interno de estos sistemas, cosas que estoy seguro

que de no haberlos visto aquí me hubiera resultado difícil aprenderlas o incluso nunca lo

habría hecho. Además, creo sinceramente que el haber estado trabajando tanto con la consola

de comandos de Linux ha hecho que adquiera un manejo de ésta bastante mejor al que tenía

cuando empecé a trabajar aquí.

Por último, en cuanto a lenguajes de programación, para hacer el programa en C

apliqué los conocimientos adquiridos en Sistemas Operativos y PPS, aunque también llegué a

mejorarlos con nuevo conocimiento que no tenía, a base de buscar en Internet. También he

visto algo de Fortran de los programas que estoy usando, lenguaje que no he estudiado en el

Grado, pero no creo que sea suficiente como para decir que he aprendido algo (un poco los

formatos y poco más).

Respecto al entorno laboral decir que ha sido fantástico. Es un placer trabajar con

grandes especialistas en el sector, que no solo tienen un gran conocimiento sobre esta área

sino que, al ser profesores, se ve que intentan transmitirlo. En un entorno así he podido

conocer también en parte un negocio con bastante potencial como es este, pudiendo ver un

poco también cómo funciona y lo importante que pueden llegar a ser ciertos detalles. En

cuanto a las condiciones de trabajo, la verdad es que ninguna queja, más bien al contrario. No

solo nuestro horario era bastante flexible, sino que, aunque fuera necesario ir al laboratorio

Page 64: Practicum Jorge Moreno: WRF-CAMX

rutinariamente para que los tutores pudieran ver el progreso, existía la posibilidad de poder

trabajar aparte desde casa, permitiendo esto que pudiéramos realizar distintas acciones o

modificaciones sin tener que esperar a ir al laboratorio. Además, como el laboratorio está

dentro del recinto de la UPM, se podían combinar perfectamente las horas de laboratorio con

las demás clases, lo cual era prácticamente un lujo.

En general creo que la realización de estas tareas ha sido un muy buen ejercicio no

solamente para poner a prueba los conocimientos adquiridos a lo largo de la carrera, sino para

complementarlos con más conocimientos que seguro me servirán en el futuro. Estos

conocimientos abarcan ya no solo los pequeños (y no tan pequeños) detalles mencionados

anteriormente, sino el aprendizaje y conocimiento de dos grandes modelos como son el WRF y

el CAMx, que tienen una importancia mayúscula en su campo y los cuales puede ser muy útil

conocer y saber trabajar con ellos.

4. Diario de la actividad realizada

Durante la explicación de las tareas, se ha intentado reflejar el orden llevado a

cabo para la resolución de estas, intentando transmitir el procedimiento seguido lo

más fielmente posible, como si se tratara de un diario o registro en sí mismo.

No obstante, durante la realización del Practicum se nos encomendó realizar

informes semanales con el progreso realizado entre cada informe, lo cual puede

seguramente recoger mejor estos progresos. Mucha de la información contenida en

estos informes ya ha sido mostrada en los apartados de arriba, pero ya que se pide un

registro de tareas esto es lo más parecido de lo que dispongo.

Estos informes son básicamente e-mails que enviábamos cada semana a

nuestros tutores. He mantenido su estructura y no los he modificado en absoluto. En

total son 15 informes diferentes:

Informe Semana 1:

Durante esta semana primero me he familiarizado con el modelo CAMx, usando sobretodo la documentación de la página. He visto lo que hace, qué debe recibir de input y demás. Así, he visto que de momento, aparte del CAMx, que ya lo he compilado y obtenido el ejecutable (con ifort y MPICH3), debo compilar tambien el programa WRFCAMx que servirá para convertir el output del WRF en input para el CAMx (de momento aquí es donde estoy teniendo problemas).

Paralelamente, he configurado y compilado de nuevo el WPS para activar la opción de GRIB2, ya

que los archivos de 2011 están en este formato (antes elegimos la opción NO_GRIB porque nos

daba problemas), y he puesto a descargar todos los archivos grib2 de 2011 para cuando tenga que

runearlo.

Page 65: Practicum Jorge Moreno: WRF-CAMX

Informe Semana 2:

En esta semana:

-Por una parte, he terminado de compilar el WRFCAMx, lo cual me ha costado algo, debido a los

numerosos errores que han ido apareciendo durante la instalación. Los principales han sido que no

podía encontrar la libreria libm (ld cannot find -lm), el cual he solucionado compilando sin la flag -

static (en vez de eso he utilizado -static-intel), algunos warning de ipo (ya no uso -ipo) y muchos

errores del tipo "undefined reference to nf_..." y parecidos, los cuales los solucioné haciendo que

utilice como librería -lnetcdff además de las que ya usa.

-Mientras, ya que la semana pasada había descargado toda la INPUT que necesita el WRF para el

año 2011, aproveché y configuré tanto el WRF como el WPS para que se adecuaran a los dominios

que se nos encargó, y una vez hecho esto, corrí el modelo WRF durante 1 día en estos dominios.

-Tras compilar WRFCAMx y haber obtenido los wrfout resultantes de haber corrido el modelo WRF,

configuré el WRFCAMx para que, a través de un script ejecutable recibiera los datos necesarios

para actuar sobre nuestro dominio (y que cuadren con los datos del wrfout). Así, gracias a los

resultandos del wrfout pudimos obtener varios archivos que podrán servir de input al CAMx.

Los objetivos para la próxima semana son conseguir la input que falta para correr el modelo CAMx

durante 1 día y, por fin, poder correrlo.

Informe Semana 3:

Durante esta semana me he centrado en conseguir preprocesar los archivos que tomará como input el modelo CAMx. Para ello, he descargado, compilado y probado varias herramientas, entre las que se encuentra el O3MAP para obtener la columna de ozono para mi dominio, el TUV para los ratios de photolysis y el ICBCPREP para los archivos con las Condiciones iniciales y las condiciones de contorno (Initial and Boundary conditions). Además, he conseguido correr correctamente el modelo CAMx con los datos de prueba que se proporciona. Lo siguiente por hacer es ver y estudiar los datos de emisiones por año que nos ha facilitado Juan Luis para poder trabajar con ellos y obtener la input que necesitamos para nuestros modelos.

Informe Semana 4:

En esta semana he trabajado sobretodo con los datos de emisiones que nos ha pasado Juan Luis. Primero los he visualizado un poco con el programa ferret, lo que me ha permitido ver que efectivamente cuadraba el dominio y los datos tenían sentido. Hecho esto, me he centrado en mi tarea que era, a partir de estos datos de emisiones anuales por compuesto y tipo de fuente, sacar los datos de emisiones por hora totales para cada celidilla. Lo primero que he hecho ha sido ver el formato en el que estaban las emisiones que CAMx te ofrece como ejemplo. Como son ficheros binarios, los he convertido con el programa BIN2ASCII, que será el que más adelante use también para convertir mis ficheros ASCII en binario (ya que funciona en ambos sentidos). Una vez visto el formato en el que tienen que ir mis datos, he creado, con la ayuda de Fernando (ya que los archivos que use como input para CAMx se pueden procesar para su modelo) un pequeño programa en C que, a partir de los factores por día/mes/hora... de cada uno de los compuestos nos dé como resultado el archivo que necesitamos. Terminado este programa, he conseguido el archivo que necesito para 1 día de ejemplo, y ahora me dispongo a convertirlo en binario y probar si funciona o tengo que cambiar algo. Saludos.

Page 66: Practicum Jorge Moreno: WRF-CAMX

Informe Semana 5:

Durante esta semana lo primero que he hecho ha sido intentar convertir el fichero de emisiones que

tenemos en formato ASCII a un fichero binario, con el programa BIN2ASCII. Al principio daba

bastantes fallos, ya que el programa en sí era muy poco flexible y el formato tenía que ser uno

espcífico tanto en orden de números como en los espacios y tabulados. Arreglé el programa que

creé la semana pasada para que te sacara el fichero exactamente como te pedía, pero me encontré

conque el programa BIN2ASCII daba un error de nuevo al leer la fecha (en formato de fecha juliana),

ya que solamente aceptaba números de 4 cifras (YDDD), y yo necesitaba pasarle una fecha de 5

(YYDDD) ya que el año en el que trabajamos es el 2011. Modifiqué el código fuente asc2bin.f,

escrito en Fortran, de manera que, después de familiarizarme un poco con los formatos de fortran,

solucioné el error cambiando donde aceptaba un número con formato i6 por un formato i8.

Solucionado esto, obtuve mi fichero binario, que será el que pase como input al CAMx.

Después, he estado intentando correr el modelo CAMx con los inputs que he obtenido estas dos

semanas. He obtenido varios errores y, aunque he conseguido arreglar algunos de ellos, sigo

encontrando fallos que me impiden continuar (ahora estoy uno que me dice que se había

encontrado una profundidad negativa en uno de los ficheros). La semana que viene intentaré

corregirlos todos y ver si puedo correr ya el modelo en mi dominio.

Paralelamente, he visualizado los datos metereológicos obtenidos con el wrfcamx para verificar que

son correctos. Para ello, los he comparado con los obtenido por la estación metereológica de

Madrid, datos que he sacado de esta página: http://datosclima.es/ (hay varias estaciones

metereológicas en Madrid, los datos son de la que pone "Madrid" a secas). De nuestro output

deducimos que no ha llovido en Madrid, cosa que coincide con los datos de la estación. También se

puede ver que la temperatura es casi exactamente la misma que recogen los datos de la estación (la

gráfica que aparece es la evolución de la temperatura en un punto de Madrid). Sin embargo, los

datos de presión si que vemos que varían bastante de los obtenidos por nuestro modelo, pasando

de los ~940 de uno a los datos obtenidos con el modelo, donde el mínimo es de 1300. Habrá que

seguir estudiando el porqué de esto, lo cual haré la próxima semana. También miraré cómo

visualizar los datos de salida del CAMx para poder visualizar al menos los datos obtenidos con el

ejemplo de EEUU.

Aquí están las imágenes con las pruebas:

- Temperatura en nuestro dominio el 14/09/2011 a las 00:00

Page 67: Practicum Jorge Moreno: WRF-CAMX

-Gráfica de temparturas en un punto de Madrid el 14/09/2011:

-Datos de temperaturas de estación metereológica de Madrid:

-Gráfica presión Madrid 14/09/2011:

Page 68: Practicum Jorge Moreno: WRF-CAMX

-Datos de presiones estación metereológica Madrid:

Saludos, Jorge

Informe Semana 6:

La semana pasada creía que había preparado bien el fichero de emisiones pero no era así. Le pasé directamente al CAMx los datos de emisiones de los VOCs y de algunos conjuntos de compuestos más, pero no era esto lo que tenía que pasarle, sino datos de las especies que estos engloban. Así pues, recibiendo los datos de los VOC (Volatile organic compound), y de los NOX (NO2 y NO3), así como de NH3, CO, SO2 y de las partículas de tamaño 10 y 2.5 angstroms (PM10 y PM25), tengo que calcular las emisiones/hora de las siguientes especies que componen el esquema químico CB05, así como otros tipos de partículas. En total, las especies que tengo que obtener son las siguientes: ALD2 CO ETH FORM ISOP NH3 NO NO2 NR OLE PAR PEC CPRM FPRM PNO3 POA PSO4 SO2 SULF TOL XYL TOLA XYLA ALDX CG4 CG5 CG6 CH4 ETHA ETOH

Page 69: Practicum Jorge Moreno: WRF-CAMX

IOLE ISP MEOH SQT TERP TRP Los datos de emisiones de estas especies tengo que obtenerlas a partir de los datos de los que dispongo y de los ratios de cada especie respecto a la clase que lo engloba. Estos ratios los debo sacar de Internet, tarea en la que me encuentro ahora. A pesar de mi error con los datos de emisiones, pude ejecutar el modelo CAMx sin que esto me lo impidiera. Aunque la salida de esta ejecución no será la correcta, por lo menos el realizar esta ejecución me ha servido para configurar correctamente el CAMx para que funcionara en mi dominio y para advertir los fallos que existían en alguno de los otros ficheros de input y subsanarlos. El error más destacable con el que me encontré fue uno que me avisaba de que la profundidad entre capas (layers) del fichero de metereología (met3d) era negativa. Este error se debía a un problema en la distribucion de capas que efectúa el WRFCAMx (donde a cada capa del fichero input para el CAmx le asigna unas determinadas capas del output del WRF, las cuales tienes que asignar en el fichero de configuración). Por alguna razón, había un "1" en el fichero de configuración del WRFCAMx que no se leía bien, y el programa intentaba asignar a la capa 1 del fichero input del CAMx las capas 1 a 0 del WRF, en ese orden, de manera que se produciá un fallo en el orden de las capas. Arreglado esto, no me volvió a saltar el error. Cuando tenga las emisiones correctas volveré a ejecutar el modelo. Por otro lado, he puesto a funcionar el WRF para que durante este fin de semana haga las simulaciones en nuestros dominios para el periodo de una semana, con el fin de obtener datos más verídicos. Saludos.

Informe Semana 7:

Esta semana la he pasado documentándome sobre los distintos contaminantes y la distribución de

estos en las especies que necesito, dadas por el esquema químico CB05, con el fin de poder

proceder a su especiación correctamente. Para ello, necesitaba seleccionar para cada uno un perfil

de especiación adecuado.

Finalmente he elegido los siguientes perfiles:

NOX:

He usado el siguiente perfil obtenido del SPECIATE

(EPA): http://cfpub.epa.gov/si/speciate/ehpa_speciate_browse_details.cfm?ptype=O&pnumber=6199

Los ratios son:

NO2: 9.35046395431835

NO: 90.6495360456817

PM2.5:

He usado el perfil general que se encuentra en el SPECIATE (EPA):

http://cfpub.epa.gov/si/speciate/ehpa_speciate_browse_details.cfm?ptype=P&pnumber=000002.5

PEC: 4.406

PNO3: 0.164

Page 70: Practicum Jorge Moreno: WRF-CAMX

PSO4: 5.514

POA: 8.768

FPRM: 81.148

PM10:

He usado el perfil general que se encuentra en el SPECIATE (EPA):

http://cfpub.epa.gov/si/speciate/ehpa_speciate_browse_details.cfm?ptype=P&pnumber=00000C

PEC: 4.582

PNO3: 0.134

PSO4: 5.03

POA: 8.187

CPRM: 82.067

NMVOC:

He usado un perfil que aparece en el pdf que me envió Juan Luis, ya que las especies son las que

necesito:

http://www.crcao.org/reports/recentstudies2015/A-85/CRC%20A-

85%20Final%20Report_May2015.pdf

El perfil que he seleccionado es el de la EPA:

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

UNR: 0.0445

XYL: 0.0971

Para realizar la especiación voy a almacenar todos los factores en una matriz tridimensional de

tamaño NxMxS, siendo

N = Numero de contaminantes = 6

Page 71: Practicum Jorge Moreno: WRF-CAMX

M = Numero de especies = 36

S = Numero de fuentes = 10

De esta manera, aunque para todos los trabajos los factores serán los mismos, queda preparado

para, en el futuro, poder usar distintos factores para cada fuente.

Además, las casillas de la matriz en las que la columna sea una especie que no se encuentra en el

contaminante de la fila se rellenarán con 0 (es decir, como el CO no se encuentra en los NOX su

ratio con ellos es 0).

Lo siguiente que haré será buscar la forma de acoplar esto al programa en C que ya tengo hecho y

que se encarga solamente de la distribución temporal de momento.

Por otro lado, continuo realizando el informe intermedio, para lo que, como dije ayer, he estado

obteniendo algunas imágenes y gráficos. Entre otras cosas, he obtenido gráficos en Excel del peso

de cada mes/día/hora en la emisión de los distintos contaminantes. Al final del informe les adjunto

los gráficos.

También he visualizado el output de la simulación de una semana que puse en el WRF el otro día.

He sacado de esta visualización algunas imágenes para adjuntar al informe, y de nuevo voy a

comparar estos datos con los obtenidos por las estaciones metereológicas.

Para esto, he obtenido los registros de la casilla central, que en mi caso es la (39,39), y las gráficas

a lo largo de la semana de distintas variables como la temperatura o el viento (en las direcciones U y

V, por lo que para compararlo con los datos de la estación metereológicaa tengo que usar el módulo

de la suma, es decir, sqrt(U^2 + V^2)).

Para comparar voy a intentar encontrar más fuentes de datos climáticos aparte de la que usé la otra

vez (www.datosclima.es). Les adjuntaré los resultados de las comparaciones una vez los haya

hecho.

Saludos cordiales,

Jorge Moreno

//A continuación adjunto las gráficas correspondientes a los diferentes pesos de olas emisiones

(enseñadas en apartados anteriores)

Informe Semana 8:

Durante esta semana, una vez obtenidos los perfiles de especiación que voy a usar en mi primera simulación, he continuado haciendo que estos perfiles se reflejen en nuestros datos. Para esto, Fer y yo hemos adaptado el programa que hicimos anteriormente y que ya contenía la distribución temporal para que se encargue también de la distribución en especies. Para eso hemos hecho que saque la información de los perfiles de cada contaminante unos ficheros externos. También está preparado el programa para funcionar cuando usemos distintos perfiles según la procedencia del contaminante. Además, hemos adaptado este programa para que realice también una conversión de unidades apropiada. Para ello, nos hemos informado sobre qué unidades debe recibir el CAMx, que creemos que son moles/hora para gases y gramos/hora para partículas. Así pues, el programa ahora espera un fichero con el peso molecular de cada gas, para hacer la conversión a moles/hora y distingue las partículas para cambiar de kg/hora a g/hora. Esta semana he estado bastante ocupado con otras asignaturas, ya que se me han acumulado muchos trabajos de otras asignaturas, por lo que no he podido hacer mucho más (bueno, una de las cosas que tuve que hacer fue una exposición con Diego en inglés sobre el WRF, así que no lo dejé aparcado del todo). Para compensar, voy a pasarme el fin de semana buscando los pesos

Page 72: Practicum Jorge Moreno: WRF-CAMX

moleculares de todas las especies que necesito para la semana que viene poder tenerlo ya todo listo para hacer la simulación. Por último, realicé la simulación del WRF durante una semana de nuevo para ver cuál es el ratio que tenemos entre los días simulados y el tiempo que tarda el WRF ejecutándose. Para este periodo de 7 días el WRF estuve corriendo durante más o menos 10h (estoy intentando acceder a las fechas exactas pero no me deja entrar al servidor ahora mismo), por lo que el ratio de simulación de nuestro dominio está entre 1h-2h por día simulado. Esto es todo. Saludos cordiales, Jorge Moreno

Informe Semana 9:

Hola, durante esta semana he trabajado bastante en el informe intermedio del practicum, trabajando varias partes de este con vistas al informe final. Aparte de esto, terminé el programa en C que se encarga de convertir las emisiones que tenemos a las emisiones que acepta el CAMx, resolviendo definitivamente los problemas de distribución en especies y conversión de unidades (gramos/hora para las partículas y moles/hora para gases, para lo que usé las masas molares de estos gases, disponibles tanto en internet como en la guía del CAMx). Una vez hecho esto, pude convertir las emisiones para un día de simulación del CAMx e iniciar esta simulación. Para un día la simulación duró 20 minutos. Paralelamente, intenté averiguar como visualizar el output que CAMx genera. Probé con varios post-procesadores que por una razón u otra no conseguí que funcionaran. Finalmente, pude instalar la herramienta PseudoNetCDF, que permite convertir los archivos de salida del CAMx en archivos netCDF, que se pueden abrir con las herramientas que uso normalmente como ncview. También he instalado el programa IDV (creo recordar que Juan Luis me dijo que estaba instalado, aunque no estoy segur. Aun así no lo he encontrado), con el que también he podido visualizar la salida. Así pues, ahora que puedo visualizarla queda determinar si esta salida es correcta. Este será mi próximo paso. Eso es todo por ahora. Saludos cordiales, Jorge Moreno

Informe Semana 10:

Durante esta semana e intentado dejar completamente listos ambos modelos WRF y CAMx para

poder ser ejecutados durante periodos largos de tiempo.

El WRF ya lo había ejecutado para una semana, pero esta vez he cambiado su configuración en

cuanto a parámetros físicos, cálculos de radiación y cosas parecidas, con el objetivo de obtener

resultados más precisos (más allá del hecho de que me equivocará al hacer la comparación de la

presión que me daba el WRF con la de las estaciones meteorológicas, que no la estaba haciendo

bien, deseaba también obtener los mejores resultados posibles para mi dominio).

Estos parámetros los he cambiado según las distintas recomendaciones de la guía del WRF, en

concreto de este

apartado: http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap5.htm#Nml

Adjunto les envío el archivo de configuración del WRF con los parámetros que he usado finalmente.

Los resultados obtenidos son muy similares a los obtenidos por estaciones meteorológicas como la

de Getafe (sobretodo), que aparecen en la página http://datosclima.es/

La parte negativa de esta configuración es que en correr 1 semana ha tardado 14h 45min, es decir,

casi 5h más que con la configuración anterior (tardaba 9h por semana). Esto hace que para correr 1

año entero necesitemos dejar la máquina corriendo durante 31 días, mientras que antes con 19 días

nos valía. Aún así, seguramente use esta configuración a la hora de hacer la simulación (los

Page 73: Practicum Jorge Moreno: WRF-CAMX

resultados son buenos y tendría casi todos obtenidos a la hora de hacer el informe final, y bastante

tiempo después también), pero voy a pensarlo un par de días más.

También me he fijado en el tamaño de los archivos obtenidos, para saber si se podría hacer ya la

simulación correctamente:

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

Viendo la capacidad de disco de la que disponemos, hay menos de 150 GB libres, así que en este

momento no podría ejecutar la simulación. Mi compañero Fernando me dijo que si necesitábamos

espacio le preguntáramos, así que si puede solucionarse de esta manera perfecto. Si no supongo

que podría compilar el WRF en el ordenador de mi casa (tiene un buen procesador), aunque habría

que ver también el tiempo que necesita para simular. Otra opción sería hacer una simulación de

algunos meses pero sin llegar al año.

Esta decisión os la dejo a vosotros, comunicádmelo cuando podáis, por favor.

En cuanto al CAMx, he preparado los pre-procesadores para que cada tipo de archivo que hay que

pasarle como input (emisiones, columna de ozono,...) se pueda obtener de forma automática para

los días que queramos.

Por ejemplo, para las emisiones, que antes tenia que obtener una a una en código ASCII y luego

pasárselas al pasarlas por el programa BIN2ASCII una a una para convertirlas en binario, he hecho

lo siguiente:

Primero he hecho un script para que ejecute mi programa de emisiones desde una fecha a otra.

Luego, he cambiado el código Fortran del programa asc2bin.f, haciendo que los ficheros (uno de

entrada ASCII y otro de salida binario), que anteriormente había que pasarlos al programa una vez

este había empezado, ahora se pasan como parámetros en la llamada al programa (./asc2bin

FICHASCII FICHBIN).

De esta manera, ahora es posible crear otro script que ejecute este programa automáticamente para

cada uno de los días que deseamos, sin tener que pasarlos a mano (cosa que antes no podía

hacer).

Con esto, una vez tenga las emisiones del dominio 2, que se calculan igual que las del 1, estaré en

disposición de calcular todas las emisiones para nuestro año de una forma bastante rápida.

Cuando puedas pasarme estas emisiones (las del dominio pequeño) te lo agradecería Juan Luis.

Estos son los datos de los dominios (pongo los del grande por si los necesitas, pero necesito los del

pequeño):

Latitud: 40.5

Longitud: -3.93

True_Latitude1: 50.

True_Latitude2: 20

Dominio 1 (Grande):

Tamaño celda: 25. km

Filas y columnas: 80x80

Coord South-West: -1000, -1000

Page 74: Practicum Jorge Moreno: WRF-CAMX

Dominio 2 (Pequeño):

Nest factor = 5

Tamaño celda: 5. km

Filas y columnas: 80x80

Coordenadas respecto a padre : i=32 j=32 (esquina superior izquierda)

Para los demás archivos he creado scripts similares, de manera que ahora elija las fechas que elija

obtener los archivos necesarios es trivial.

Así mismo, he modificado el archivo .job con el que ejecuto el CAMx para que, al igual que hacen

los casos de ejemplo, se puedan ejecutar simulaciones de varios días a través de un bucle. He

probado a hacer una simulación de 6 días y ha funcionado correctamente, tardando casi 4 horas,

con lo que esta simulación no creo que dé problemas de tiempo. Además, los archivos que más

pesan pesan menos de 50 MB, pesando el tamaño total de archivos de cada dominio unos 100 MB

por día, con lo que para almacenar los datos de todo un año necesitaríamos además unos 36.5 GB

adicionales, además de los datos de la input que necesitamos obtener que serán de unos pocos GB

más (la input del WRF la omito porque ya la tengo lista).

Esto es todo. Adjunto les envío el archivo de configuración del WRF (el significado de cada valor de

las variables que he tocado viene en la página que he pasado antes) .Tenía la intención de adjuntar

imágenes de los resultados pero ahora mismo no me es posible debido a problemas con el internet

de mi casa, pero en cuanto sea posible les enseño comparativas con la página que he indicado

antes.

Saludos cordiales,

Jorge Moreno

Informe Semana 11:

Hola, en estos momentos estoy intentando dejar todo listo para empezar con las simulaciones de cada modelo. Tras haber elegido la semana pasada la configuración que usaremos para el WRF la semana pasada, ya lo tenemos listo para simular. Teniendo en cuenta lo que tarda, y que se acaba el tiempo hasta la entrega del informe final, lo mejor sería empezar la simulación cuanto antes. Lo que voy a hacer es hacer 12 simulaciones en las que simularé 1 mes (en cada simulación cogeré un par de días de meses anteriores y posteriores para mejorar los resultados). Esto lo hago para poder hacer que, cuando acabe la simulación, automáticamente se compriman los archivos wrfout. De esta manera se podrá solventar en problema de espacio que comenté en el informe pasado. Para ello he preparado el WRF y el wrf2camx para que lleven esta tarea automáticamente, de forma que el WRF cuando finalice realice esta compresión y el wrf2camx descomprima el archivo antes de ejecutarse (creando archivos temporales que borrará). Mi intención es por tanto empezar a simular cuanto antes, si no hoy mañana. Por otro lado, también he preparado un script para el CAMx de forma que, al igual que hice con los pre-procesadores, funcione para cualquier periodo de tiempo que le pasemos. De esta manera, ahora se puede elegir los días y meses de inicio y finalización de la simulación y esta se realizará entre estos días, lo cuál no se podía con los scripts de ejemplo, ya que había que escribir los días uno a uno y solo se podía hacer de 1 mes la simulación. También estoy haciendo pruebas con el dominio pequeño. Había un pequeño error en las coordenadas de este dominio respecto al padre (en el WRF), pero ya está arreglado. He simulado en el WRF 1 día con los nuevos ajustes para probar si la salida funciona bien con el wrfcamx y así

Page 75: Practicum Jorge Moreno: WRF-CAMX

es, ha funcionado correctamente. Más tarde probaré a, ahora que tengo esto bien y una vez tenga las emisiones del dominio pequeño, correr el modelo CAMx con el nesting entre los dos dominios. Eso es todo de momento, ya les contaré que tal en el próximo informe. Saludos, Jorge Moreno

Informe Semana 12:

Buenos días, A principio de esta semana recibimos las emisiones correspondientes al dominio pequeño, de 5km de resolución. Así pues, lo primero que hicimos fue comprobar que estos ficheros correspondían en efecto a nuestro dominio, para lo cuál utilizamos la herramienta de visualización Ferret. Estas son algunas de las imágenes que visualizamos: NOX por S7 (tráfico):

Párticulas finas (<2.5) por S7:

Page 76: Practicum Jorge Moreno: WRF-CAMX

NH3 por S8 (Otras fuentes móviles y maquinaria):

CO por S2 (Combustiones en plantas no industriales):

Se puede apreciar en estas imágenes la situación de Madrid, ya que es el principal foco de

contaminación. Aparece ligeramente a la derecha, ya que el centro de nuestro dominio está situado

en Las Matas, un pueblo al noroeste de Madrid (porque es el que usamos Diego y yo como centro

para el WRF el año pasado, básicamente). Los ficheros parecen por lo tanto correctos, así que los

podremos usar ya para nuestras simulaciones

Durante esta semana he empezado con las simulaciones meteorológicas ya finales, usando

finalmente los parámetros que mejor resultado final me dieron la otra vez. De momento he simulado

el mes de febrero. He hecho que la simulación empiece un día antes y finalice un día después para

que no haya problemas con los extremos de nuestros ficheros. Puse en marcha esta simulación el

lunes, aunque el apagón del martes hizo que no se completara, con lo que la tuve que volver a

poner en marcha, finalizando esta mañana la simulación.

Page 77: Practicum Jorge Moreno: WRF-CAMX

Tras terminar la simulación, estos ficheros se comprimieron automáticamente en dos archivos, cada

uno de los cuales abarca un dominio. Así, al final llegaremos a tener un total de 24 archivos

comprimidos, 2 por cada mes. Cada uno de estos archivos pesa alrededor de 5gb cada uno, con lo

que la simulación de los 12 meses totales ocuparía unos 120gb más o menos, con lo que no

tendríamos problemas de disco. Al final estoy comprimiendo los archivos como .tar.gz, ya que tras

comprimirlos con nccopy seleccionando el grado de compresión recibía errores del programa

WRFCAMx, mientras que haciendo la prueba con los archivos descomprimidos de un fichero .tar.gz

todo iba bien.

Así, pues, almacenaré estos archivos comprimidos de manera que cuando el WRFCAMx los

necesite los descomprima automáticamente en una carpeta temporal, mantenga los ficheros

descomprimidos mientras los necesite y los borre al finalizar su ejecución. Para que el WRFCAMx

realice esta tarea la he dejado indicada en su script de ejecución, el cuál a su vez he modificado

para que funcione de la siguiente forma: cuando se llame al script del wrfcamx se le indicará como

parámetro el dominio y el mes a convertir. El wrfcamx descomprimirá los archivos del mes a simular,

así como los días frontera de meses contiguos. Como hay que pasarle los ficheros wrfout

específicos que se usarán, el programa calcula los nombres de los ficheros correspondientes al

periodo de tiempo qe se usarán y los guarda en un archivo de texto para pasarlo como parámetro

cuando se llame el programa. En el output solamente se guardarán los archivos del propio mes, no

así los frontera, que se volverán a calcular en la conversión de sus respectivos meses. Probando

este script ya parece que funciona, pero estaba esperando a que terminara un mes completo para

poder probar más. Ahora que ya tengo el mes de febrero lo probaré a ver qué tal.

Otra de las cosas que he hecho ha sido trabajar en mi programa para calcular emisiones. En su

momento comprobé que funcionaba correctamente pero tras hacer unos cambios dejó de ser así, lo

que hizo que las simulaciones realizadas con el CAMx fueran mal. Tras hacer un poco de debug

encontré el falló, volví a compilar el programa y lo ejecuté calculando las emisiones para un mes.

Para asegurarme de que estaban bien, calculé los resultados que debieran salir de varias celdillas a

mano, viendo como efectivamente daban los mismos resultados que al calcularlos con el programa.

Además de esto, también hice que el programa se adecuara para trabajar con el modelo más

pequeño, para lo cual lo único que había que hacer era cambiar de cabecera el fichero final. Esta

cabecera, a su vez, la corregimos entre fer y yo, ya que faltaban algunas cosas por cambiar.

Con las emisiones correctas en mano, pude ejecutar otra simulación de prueba más para el CAMx,

durante el periodo de solamente 1 día esta vez. Los resultados obtenidos en ella son más realistas

que los anteriores, mostrando más contaminación en las metrópolis y sus áreas cercanas.

Visualicé los resultados de algunas especies con IDV. Para localizar las emisiones mejor, descargué

de la página http://www.diva-gis.org/gdata

un mapa shapefile administrativo de España, indicando al IDV que mostrara los niveles

administrativos correspondientes a la frontera de los países y las Comunidades autónomas.

Page 78: Practicum Jorge Moreno: WRF-CAMX

Estas son algunas de las capturas que saqué al IDV:

Mapa administrativo de España:

NO2 (Color-Filled) el día 15-09-2011 a las 6:00:

Page 79: Practicum Jorge Moreno: WRF-CAMX

NH3 (Shaded) a la misma hora:

Gráfica de la evolución de NO2 a lo largo del día 15-09-2011 en un punto de Majadahonda

(escogido para comparar con la estación de Majadahonda):

Estos datos hay que compararlos con los datos de las bases de datos de las estaciones de control

de calidad del aire españolas. Estos datos, para la Comunidad de Madrid, aparecen recogidos en la

página de la misma, concretamente el el siguiente enlace:

http://gestiona.madrid.org/azul_internet/html/web/InformAnalizadoresAccion.icm?ESTADO_MENU=2

_1_2

Page 80: Practicum Jorge Moreno: WRF-CAMX

En él se puede seleccionar la fecha y las especies de las que se quieren observar los datos para ver

una representación gráfica y numérica de ellos. Un ejemplo de esta visualización es la siguiente

gráfica de las medidas de distintos contaminantes recogidas por la estación de Majadahonda:

Se puede ver que, para el NO2, por ejemplo, usa diferentes medidas que las que se usan en los

resultados que obtenenmos con el CAMx (donde en principio usamos ppm y micromoles/m3 para

gases -dependiendo del fichero que visualicemos- y microgramos/m3 para particulas). Para

compararlos será pues necesario realizar una conversión. Para realizarla busqué por Internet, y

encontré resultados que indicaban que bastan multiplicar por 1000 (es decir, 1 ppm = 1 mg/m3) y

otros que instaban a usar la siguiente fórmula:

mg/m3 = ppm * (masa_molecular/Volumen_molar). Seguiré buscando cuál es la mejor a utilizar,

pero el caso es que con ambas he obtenido diferencias entre los datos obtenidos con el CAMx y los

datos obtenidos por las estaciones. Esperaré a simular un periodo más largo de tiempo antes de

sacar más conclusiones.

La página anterior sirve solo para las estaciones de la Comunidad de Madrid. Para el resto de

España se podrían usar los enlaces localizados en la siguiente página:

http://www.magrama.gob.es/es/calidad-y-evaluacion-ambiental/temas/atmosfera-y-calidad-del-

aire/calidad-del-aire/mediciones/

Eso es todo por esta semana, lo siguiente que haré, una vez he puesto a simular el mes de marzo,

será covertir el mes de febrero entero al formato del CAMx, sacar todos los otros archivos input del

CAMx que necesito para este periodo de tiempo con sus respectivos programas (lo cual ya dejé

preparado), y realizar una simulación más o menos larga del CAMx, con el fin de comparar los datos

obtenidos con los de las estaciones e intentar con ello ajustar el modelo en la medida de los posible.

Saludos cordiales,

Jorge Moreno

Page 81: Practicum Jorge Moreno: WRF-CAMX

Informe Semana 13:

Estos días tengo la máquina trabajando constantemente en las simulaciones meteorológicas con el WRF. Estoy realizando estas simulaciones mes a mes, tardando cada mes unos 3 días en simularse. De momento ya están obtenidos los datos meteorológicos de febrero, marzo y abril de 2011, y en estos momentos se están simulando el mes de mayo, que acabará mañana. He comparado estos datos con estaciones meteorológicas de la zona, y los datos parece que cuadran. Además, estas comparaciones son necesarias para el informe final. A continuación les dejo un ejemplo de los resultados de temperatura y presión. Temperatura del dominio grande a 2 metros sobre el suelo el 11-02-2011 (Estación de Madrid): Datos reales:

Simulación:

Page 82: Practicum Jorge Moreno: WRF-CAMX

Presión superficial del dominio pequeño el 28-02-2011 (Estación de Madrid) Datos reales:

Datos simulacion:

Como he mencionado, sé que es importante insertar en el informe final una gran muestra de comparaciones, así que así lo haré. Por otro lado, he probado a simular un periodo de 10 días con el script que me hice para ejecutar el CAMx entre los días que quiera y en los dos dominios simultáneamente, pasando los archivos que estoy obteniendo con las últimas simulaciones del WRF. Aquí encontré un gran fallo al cuadrar los dominios pequeños meteorológicos y de emisiones con el dominio que el CAMx admite. 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, tal y como se puede apreciar en la siguiente imagen:

Page 83: Practicum Jorge Moreno: WRF-CAMX

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 Roberto, que me dijo finalmente que optara por reducir el dominio, sobretodo 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. Decidido esto, ejecuté las simulaciones de prueba de calidad del aire, las cuales cacaban de finalizar y en estos momentos visualizaré. Si los resultados son buenos, empezaré a simular periodos más largos, y si no, aplicaré algunos cambios a la configuración de la simulación. Esto es todo por ahora. Saludos, Jorge Moreno

Informe Semana 14:

Buenos días, Estos días estoy trabajando en la memoria final del Practicum, completando la memoria intermedia que ya hice. Voy a completarla con las tareas que he hecho desde entonces y datos que muestren resultados de las simulaciones, comparando con la realidad. Quiero ver como puedo hallar valores medios de distintos valores y plasmarlos en gráficas como las que me enseñó Roberto en uno de los documentos que presentan empresas a concursos. Además, sigo con las simulaciones tanto meteorológicas como de calidad del aire, ejecutando tanto el WRF como el CAMx durante todo el tiempo posible. Respecto al clima ya he simulado los meses de febrero a junio y estoy simulando julio. Una vez se acaba de simular un mes lo comprimo y lo

Page 84: Practicum Jorge Moreno: WRF-CAMX

convierto al formato del CAMx con el wrfcamx. En el CAMx estoy simulando de momento de febrero a mayo, para poder continuar después según vaya obteniendo la salida climatológica. Eso es todo de momento. Saludos cordiales, Jorge Moreno

Informe Semana 15:

Esta semana, mientras se siguen ejecutando las simulaciones del WRF y del CAMx (el primero está

finalizando agosto y el segundo mayo), he aprovechado para visualizar los datos obtenidos con el

modelo WRF y compararlos con los datos históricos de determinadas estaciones.

Finalmente, lo que haré será un estudio de las diferencias entre los datos obtenidos y los datos

reales a lo largo del año en una sola estación (he elegido Colmenar Viejo, que no la había usado

antes), y más tarde, por otro lado, realizaré comparaciones con distintas estaciones en periodos

concretos de tiempo elegidos arbitrariamente.

Los datos de las estaciones los estoy obteniendo desde la página de la Comunidad de Madrid,

concretamente de la

página http://gestiona.madrid.org/azul_internet/html/web/InformAnalizadoresAccion.icm?ESTADO_M

ENU=2_1_2

Esta es la página que usaba para comparar la calidad del aire, ya que llegue a ella buscando estos

datos, pero también contiene estos datos atmosféricos (temperatura, presión barométrica, humedad

relativa, velocidad del viento,...), y de manera más accesible que la página que usaba anteriormente

(http://www.datosclima.es/) , permitiendo además descargar los datos de la estación como hoja de

cálculo de Excel, lo que facilita la comparación con los datos obtenidos en la simulación. Este fichero

contiene una tabla como esta:

Page 85: Practicum Jorge Moreno: WRF-CAMX

sobre la que se puede trabajar con mayor comodidad, pudiendo sacar el promedio, entre otras cosas. Para los datos obtenidos con la simulación el proceso que estoy siguiendo es el siguiente: Descomprimo y abro los datos meteorológicos del mes que quiero visualizar (estan comprimidos por mes y dominio, así que descomprimo los datos del dominio pequeño, con máyor precisión). El programa que estoy usando para abrir estos archivos es el IDV. En este programa, seleciono 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 (40° 39′ 31.64″ N, 3° 45′ 58.76″ W) , 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 tanto guardar el gráfico con los valores de dicha variable a lo largo del periodo de tiempo, como 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 el fin de ayudar en la comparación con . Ahora mismo estoy haciendo ambas tareas para cada mes de los que dispongo (he podido hacerlo desde febrero hasta julio). Los datos obtenidos por el momento y las comparaciones con los datos de las estaciones meteorológicas se encuentran en el siguiente documento Excel. De momento solo almacena los valores de Temperatura y presión, pero también he descargado los valores de velocidad del viento y humedad relativa para compararlos. La velocidad del viento en los datos de la simulación, aunque no aparece implícitamente, se obtiene a partir de una de las funciones derivadas de las que dispone el IDV. Por su parte, para calcular la humedad relativa es necesario aplicar una fórmula aparte. La definición de humedad relativa es la siguiente:

𝑟ℎ =𝑤

𝑤𝑠∗ 100

Donde w es el "mixing ratio" actual, y ws es el "saturation mixing ratio". Disponemos del primer valor

como variable de salida del WRF, denominada Q2, pero el segundo nos es desconocido,

dependiendo de la temperatura y la presión. Mirando por Internet de momento he encontrado tablas

y calculadoras de este valor. Finalmente, he encontrado una f´romula que puedo usar en la hoja de

excel para obtener este valor (y la humedad relativa) para todas las horas. La fórmula es la

siguiente:

𝑤𝑠 =𝑒𝑠

𝑃𝑠𝑡𝑎 − 𝑒𝑠∗ 621.97

donde

𝑒𝑠 = 621.97 ∗ 107.5∗𝑇

237.7+𝑇

En el informe final podré incluir estas comparaciones para el los meses de febrero a septiembre, con un gráfico de barras que muestre el promedio de cada valor mes a mes en un lado y en otro. Los 4 meses que me faltarán por simular los incluiré en la exposición de enero. Para la calidad del airepodré hacer la comparación de 4 meses estimo, y aplicaré el mismo proceso que el que estoy usando para la meteorología. Para finalizar, les adjunto el documento Excel antes mencionado, así como una muestra de las imágenes que estoy metiendo en el informe final para hacer la comparación de gráficas. Saludos, Jorge Moreno

Page 86: Practicum Jorge Moreno: WRF-CAMX

5. Referencias y enlaces de interés

Página oficial del modelo WRF:

http://www.wrf-model.org/index.php

Página oficial del modelo CAMx:

http://www.camx.com/

Guía de la NCAR para compilar el modelo WRF:

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php

WRF-ARW Online Tutorial:

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/

Unidata netcdf:

http://www.unidata.ucar.edu/software/netcdf/

CAMx User’s Guide:

http://www.camx.com/files/camxusersguide_v6-20.pdf

Página de soporte de software de CAMx (pre-procesadores y post-procesadores CAMx):

http://www.camx.com/download/support-software.aspx

SPECIATE (EPA):

http://cfpub.epa.gov/si/speciate/

Perfil NMVOC:

http://www.crcao.org/reports/recentstudies2015/A-85/CRC%20A-

85%20Final%20Report_May2015.pdf

Perfil NOX:

http://cfpub.epa.gov/si/speciate/ehpa_speciate_browse_details.cfm?ptype=O&pnum

ber=6199

Perfil PM 2.5:

http://cfpub.epa.gov/si/speciate/ehpa_speciate_browse_details.cfm?ptype=P&pnum

ber=000002.5

Perfil PM 10:

http://cfpub.epa.gov/si/speciate/ehpa_speciate_browse_details.cfm?ptype=P&pnumb

er=00000C

Datos geográficos para el WRF:

http://www2.mmm.ucar.edu/wrf/users/download/get_sources_wps_geog.html

Datos meteorológicos para el WRF:

http://rda.ucar.edu/datasets/ds083.2/#!description

Datos de Ozono para el CAMx:

http://ozoneaq.gsfc.nasa.gov/data/ozone or ftp://toms.gsfc.nasa.gov/pub/omi/data/

Guía de Usuario del WRF, Capítulo 5:

http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap5.htm

#Nml

Mapa administrativo de España:

http://www.diva-gis.org/gdata

Datos estaciones meteorológicas España:

http://datosclima.es/

Datos estaciones meteorológicas y de calidad del aire de la Comunidad de Madrid:

http://gestiona.madrid.org/azul_internet/html/web/InformAnalizadoresAccion.icm?ES

TADO_MENU=2_1_2

Page 87: Practicum Jorge Moreno: WRF-CAMX

Anexo A: Código de calcula_emis.c

Este programa sirve para adaptar las emisiones a las necesidades del CAMx. Es la

versión arreglada, que, a partir de emisiones de 80x80 se las apaña para tomar el dominio

interior de estas y obtener unas emisiones de 72x72 celdillas, necesario por el fallo en la

elección del dominio del CAMx.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sysexits.h>

#include <sys/stat.h>

#include <sys/types.h>

#include "auxiliar.h"

#include <errno.h>

#include <fcntl.h>

#include <unistd.h>

#include <stdbool.h>

int crea_emisiones_dia(char * dia, char * mes, char * dom);

char* concat(char *s1, char *s2);

int dayofweek(int d, int m, int y);

bool startsWith(const char *pre, const char *str);

float coge_peso(char* archivo, char* comienzo,int pos,int fuente);

int julian_date(int year, int month, int day);

int buscaEspec(char * espec);

#define numContaminantes 7

#define numFuentes 10

#define numCeldillas 6400

#define ladosEmis 80

#define numEspecies 28

static char * contaminantes[numContaminantes] =

{"CO","NH3","NMVOC","NOX","PM10","PM25","SO2"};

static char * especies[numEspecies] =

{"ALD2","CO","ETH","FORM","ISOP","NH3","NO","NO2","NR","OLE","PAR",

"PEC","CPRM","FPRM","PNO3","POA","PSO4","SO2","SULF","TOL","XYL","A

LDX","CH4","ETHA","ETOH","IOLE","MEOH","TERP"};

static float conversiones[numEspecies];

static char * dias_semana[7] =

{"Lunes","Martes","Miercoles","Viernes","Sabado","Domingo"};

float emision_anual[numFuentes][numContaminantes][numCeldillas];

FILE * pf;

int main(int argc, char * argv[])

{

char cadena[32];

Page 88: Practicum Jorge Moreno: WRF-CAMX

if(argc!=4 || strcmp(argv[1], "--help")==0 || strcmp(argv[1],

"-h")==0 )

{

printf("calcula_emis: Uso: calcula_emis_mes MM DD dN

\ncalcula_emis: Calcula las emisiones/hora por especie del dominio

N a fecha DD-MM-2011\n");

return(EX_OK);

}

/*COGER EMISIONES ANUALES*/

int i;

for(i=0; i<numFuentes;i++)

{

int j;

for(j=0; j<numContaminantes;j++)

{

char str[15];

sprintf(str, "%d", i+1);

char * fich_emi_anu =

concat(concat("emiss_",argv[3]),concat(concat(concat(concat("/emis.

",contaminantes[j]),".S"),str),".dat"));

if ( (pf = fopen(fich_emi_anu, "r")) == NULL ){

if (errno == ENOENT) {

fprintf(stderr,"calcula_emis:

Error(EX_NOINPUT), Uso incorrecto del mandato.\n");

fprintf(stderr,"calcula_emis+ El

fichero \"%s\" no existe.\n",fich_emi_anu);

return(EX_NOINPUT);

}

else {

fprintf(stderr,"calcula_emis:

Error(EX_NOINPUT), uso incorrecto del mandato.\n");

fprintf(stderr,"calcula_emis+ El

fichero \"%s\" no puede ser leido.\n",fich_emi_anu);

return(EX_NOINPUT);

}

}else{

int k=0;

while(fgets(cadena,32,pf)!=NULL &&

k<numCeldillas){

emision_anual[i][j][k] = atof(cadena);

k++;

}

fclose(pf);

}

}

}

//Leemos las masas molares

// y guardamos la conversión toneladas a moles (gases) o

toneladas a gramos (particulas)

for(i=0;i<numEspecies;i++)

conversiones[i] = 1000000.;

Page 89: Practicum Jorge Moreno: WRF-CAMX

pf = fopen("speciation/molar_mass.dat","r");

while(fgets(cadena,32,pf)!=NULL){

float masa_molar = 1.0;

char *token = strtok(cadena, " ");

i=0;

char * espec;

while(token && i<2) {

if (i==1)

masa_molar = atof(token);

else if (i==0)

espec = token;

token = strtok(NULL, " ");

i++;

}

int pos = buscaEspec(espec);

conversiones[pos]=conversiones[pos]/masa_molar;

printf("Especie: %s, Masa molar= %f,

Conversion=%f\n",espec,masa_molar,conversiones[pos]);

}

fclose(pf);

//Calculamos las emisiones de nuestro día

int err = crea_emisiones_dia(argv[2],argv[1],argv[3]);

if (err==0) printf("Process completed: Success\n");

else printf("Process stopped: Bad termination\n");

return(err);

}

int crea_emisiones_dia(char* dia, char* mes, char* dom){

FILE * pf3;

float

emision_diaria[numFuentes][numContaminantes][numCeldillas];

char cadena[32];

int i,j,k,c,e,ladosDom=0;

int nMes = atoi(mes);

int nDia = atoi(dia);

int diaSemana = dayofweek(nDia,nMes,2011);

int jDate = julian_date(2011,nMes,nDia);

printf("DD-MM-YY: %s-%s-2011\nJulian

date:%d\n",dia,mes,jDate);

for(i=0; i<numContaminantes; i++) /*Para cada emisión*/

{

Page 90: Practicum Jorge Moreno: WRF-CAMX

for (k=0;k<numFuentes;k++)

{

float factor_mes =

coge_peso(concat(concat("factores/MonthlyFac_",contaminantes[i]),".

dat"),"22",nMes+1,k)/12.0;

float factor_dia =

coge_peso(concat(concat("factores/DailyFac_",contaminantes[i]),".da

t"),"22",diaSemana+1,k)/7.0;

if (factor_dia<0 || factor_mes<0)

return(EX_NOINPUT);

else {

printf("Factor de %s por S%d en el mes %s-

2011: %f\n",contaminantes[i],k+1,mes,factor_mes);

printf("Factor de %s por S%d en dia %s-%s-

2011 (%s):

%f\n",contaminantes[i],k+1,dia,mes,dias_semana[diaSemana-

1],factor_dia);

}

for(j=0;j<numCeldillas;j++)

{

emision_diaria[k][i][j] =

(emision_anual[k][i][j]*factor_mes) * (7.0 / 30.0) * factor_dia;

if (j==numCeldillas-1 && i==3)

printf("Emision diaria S%d de NOX:%f,

Emision

anual:%f\n",k+1,emision_diaria[k][i][j],emision_anual[k][i][j]);

}

}

}

printf("Generating document...\n");

mkdir("output",0744);

char * destino =

concat(concat(concat(concat(concat("output/emiss-",dom),"-

2011"),mes),dia),".dat");

pf = fopen(destino,"w");

/*TODO: Hacer que coja la metadata de un fichero config*/

//Aqui se pone la cabecera segun el dominio que tengamos

if (strcmp("d1",dom)==0){

fprintf(pf,"EMISSIONS CAMx Modeling Espanya 25km,

2011%02d%02d \n",nMes,nDia);

fprintf(pf," 0 %02d %d 0. %d

24.\n",numEspecies,jDate,jDate);

fprintf(pf," -3.93000 40.50000 0 -

1000000.00000 -1000000.00000 25000.00000 25000.00000

80 80 12 2 1 50. 20. 0.\n");

fprintf(pf," 1 1 80 80\n");

ladosDom=80;

Page 91: Practicum Jorge Moreno: WRF-CAMX

}else{

fprintf(pf,"EMISSIONS CAMx Modeling Espanya 5km,

2011%02d%02d \n",nMes,nDia);

fprintf(pf," 0 %02d %d 0. %d

24.\n",numEspecies,jDate,jDate);

fprintf(pf," -3.93000 40.50000 0 -

180000.00000 -180000.00000 5000.00000 5000.00000

72 72 12 2 1 50. 20. 0.\n");

fprintf(pf," 1 1 72 72\n");

ladosDom=72;

}

/*Escribimos los nombres de las especies*/

for (k=0;k<numEspecies;k++)

fprintf(pf,"%s\n",especies[k]);

/*Rellenamos el documento por horas*/

for (i=0;i<24;i++)

{

fprintf(pf," %d %d.00 %d

%d.00\n",jDate,i,jDate,i+1);

fprintf(stdout,"Calculating emissions of hour

%d:00\n",i);

float emision_hora_esp[numEspecies][numCeldillas];

for(e=0; e<numEspecies; e++)

for(c=0;c<numCeldillas;c++)

emision_hora_esp[e][c] = 0.0;

for (k=0;k<numContaminantes;k++)

{

float emision_hora[numCeldillas] = {0.0};

float factor_hora[numFuentes] = {0.0};

for (j=0;j<numFuentes;j++)

{

char str[15];

sprintf(str, "%d", j+1);

factor_hora[j] =

coge_peso("factores/HourlyFac.dat", str, i+1,0)/24.0;

if (factor_hora[j]<0)

return(EX_NOINPUT);

else if (k==0)

fprintf(stdout,"\t S%d factor =

%f\n",j+1,factor_hora[j]);

for (c=0;c<numCeldillas;c++)

emision_hora[c]+=

(emision_diaria[j][k][c] * factor_hora[j]);

Page 92: Practicum Jorge Moreno: WRF-CAMX

}

char * destino2 =

concat(concat("speciation/s",contaminantes[k]),".dat");

pf3 = fopen(destino2,"r");

while(fgets(cadena,32,pf3)!=NULL){

float ratio = 0.0;

char *token = strtok(cadena, " ");

int i=0;

char * espec;

while(token && i<2) {

if (i==1)

ratio = atof(token);

else if (i==0)

espec = token;

token = strtok(NULL, " ");

i++;

}

int pos = buscaEspec(espec);

for (c=0;c<numCeldillas;c++)

emision_hora_esp[pos][c] +=

emision_hora[c]*ratio*conversiones[pos]/100.;

}

fclose(pf3);

}

for(e=0; e<numEspecies; e++){

fprintf(pf," 1%s\n",especies[e]);

int escritos = 0;

for(c=0;c<numCeldillas;c++){

//Este if es para quitar las casillas de

alrededor (Por los problemas de mi modelo, que tengo que coger

72x72)

if (ladosDom == ladosEmis || (c>=4*ladosEmis

&& c<ladosEmis*ladosEmis-4*ladosEmis && c%ladosEmis>=4 &&

c%ladosEmis<ladosEmis-4)){

fprintf(pf,"

%.7E",emision_hora_esp[e][c]);

escritos++;

if (escritos%5==0 ||

escritos==ladosDom*ladosDom) fprintf(pf,"\n");

}

}

}

}

Page 93: Practicum Jorge Moreno: WRF-CAMX

fclose(pf);

return(EX_OK);

}

char* concat(char *s1, char *s2)

{

char *result = malloc(strlen(s1)+strlen(s2)+1);//+1 for the

zero-terminator

//in real code you would check for errors in malloc here

strcpy(result, s1);

strcat(result, s2);

return result;

}

int dayofweek(int d, int m, int y)

{

static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };

y -= m < 3;

int dow = ( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;

if(dow==0) return(7);

else return dow;

}

bool startsWith(const char *pre, const char *str)

{

size_t lenpre = strlen(pre),

lenstr = strlen(str);

return lenstr < lenpre ? false : strncmp(pre, str, lenpre) ==

0;

}

float coge_peso(char* archivo, char* comienzo,int pos,int fuente){

float peso = 0.0;

int i;

char cadena[256];

FILE * pf2;

if ( (pf2 = fopen(archivo, "r")) == NULL )

{

if (errno == ENOENT)

{

fprintf(stderr,"calcula_emis: Error(EX_NOINPUT),

Uso incorrecto del mandato.\n");

fprintf(stderr,"calcula_emis+ El fichero %s no

existe", archivo);

return(-1.0);

}

else

{

fprintf(stderr,"calcula_emis: Error(EX_NOINPUT),

uso incorrecto del mandato.\n");

fprintf(stderr,"calcula_emis+ El fichero %s no

puede ser leido",archivo);

return(-1.0);

}

}

else

{

Page 94: Practicum Jorge Moreno: WRF-CAMX

int j=0;

while(j<=fuente && fgets(cadena,256,pf2)!=NULL)

{

if (startsWith(comienzo,cadena))

{

if (j==fuente)

{

char input[sizeof cadena];

strcpy(input,cadena);

char *token = strtok(input, " ");

i=0;

while(token && i<=pos) {

if (i==pos)

peso = atof(token);

token = strtok(NULL, " ");

i++;

}

}

j++;

}

}

fclose(pf2);

return peso;

}

}

int julian_date(int year, int month, int day)

{

int days=0, i=0;

int month_days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

if (year%4==0) month_days[1]++; //Bisiesto

for (i=0; i<month-1;i++) days+= month_days[i];

days+=day;

return (year%100)*1000+days;

}

int buscaEspec(char * espec)

{

int pos = -1, i=0;

while(i<numEspecies && pos==-1){

if (strcmp(especies[i],espec)==0)

pos = i;

i++;

}

return pos;

}