CMAQInvCbCi
Inventarios, condiciones de border e iniciales para CMAQ
Contenido |
Inventarios
Propios
Archivos out
Estos archivos están regrillados en formato ASCII y tienen una fila por punto de malla con, los índices i,j y seguido de la serie temporal de datos (ciclo diario) de las emisiones a ese punto de grilla
[j] [i] [emis_t1] ... [emis_tN]
Se tienen las lat,lon de un par de puntos de malla para poder georeferenciar. Se asume que la grilla de datos está en una proyección lat/lon regular (o que la regilla es suficientemente pequeña como para que no se note la curvatura terrestre)
Creamos un python para transformar los ficheros a netCDF
Archivo:out to nc.odt (NOTA: descargar y cambiarle la extensión a .py
)
out_to_nc.py
Sólo requiere las liberías netcdf4-python3
. Se usa:
python3 out_to_nc.py -f [archivoout] -v [nombreVariable] -s [nombreStandardVariable] -l [nombreLargoVariable ('!' para espacios)] -u [unidadesVariable] -p [iref1],[jref1],[lonref1],[latref2]:[iref2],[jref2],[lonref2],[latref2]
Tenemos dos archivos:
* NOxAMBAtot.out * VOCAMBAtot.out
Se tienen que preparar como nopoint
emisiones del sistema SMOKE. Esto se hace desde el script the python nc_to_nopoint.odt
nc_to_nopoint.py
Script the python para transformar unos datos en netCDF al formato ASCII de nopoint
para SMOKE
Hermes (Emisiones globales)
Si uno no tiene un inventario para el dominio de interés (Por ejemplo, en caso de querer usar condiciones de borde dinámicas y necesitar correr un dominio más grande), una opción es usar Hermes [[1]]. Todo lo que sigue es para Hermesv3 2.1.3.
Instalación
Paquetes de Python
Hermes necesita muchos paquetes de python para correr por lo que conviene instalarlo de forma local en vez de en el servidor. Mas aún, conviene crear un environment para no tener problema con las distintas versiones de las librerías. Una forma práctica de hacerlo es tener un txt con todos los paquetes necesarios así se instalan todos juntos. El txt está en el git [[2]].
virtualenv hermes source hermes/bin/activate pip install -r paquetes.txt
NOTA1: Cuidado con instalar un pandas con versión igual a mayor a 2.0 porque el "append" para un dataframe no se usa más a partir de esa versión y sí se usa en los scripts. Si se instalara una versión superior habría que cambiar los scripts. La recomendación sería instalar una versión inferior y listo.
NOTA2: Si se instala un esmpy posterior a 8.4.0 (Abajo se describe como) hay que renombrar algunas funciones y como se importa el paquete. Abajo se describe. Se puede instalar 7.1.0r que es lo mínimo que pide Hermes y no hay que cambiar nada de los scripts, PERO es una versión vieja que se instala de otra forma y tiene otras complicaciones.
NOTA3: Aparentemente no cualquier versión de netCDF4 funciona bien. En particular la 1.6.4 tira segmentation faults (No al importarlo solo uno a mano, pero sí al funcionar con el resto de las librerías). Netcdf4 1.5.6 con ESMF 8.5.0 funciona bien. Otras combinaciones a chequear.
Otros programas
Además de los paquetes de python, hay otros programas que son necesarios para la utilización de hermes. Están descriptos acá [[3]]
ESMF
Este hay que buildearlo. De este programa depende esmpy. Es decir antes de instalar esmpy hay que instalar esto. Es muy importante que se buildee con NETCDF y PIO sino algunas funciones de esmpy que necesitamos no van a funcionar.
Hay que descargarlo de acá [[4]].
Lo vamos a guardar en /home/sol/hermesv3_gr/Libraries/esmf
.
cd /home/sol/hermesv3_gr/Libraries/esmf/ cd esmf-8.5.0
Hay que declarar varios paths que están descriptos acá [[5]].
export ESMF_DIR=/home/sol/hermesv3_gr/Libraries/esmf/esmf-8.5.0 export ESMF_NETCDF=nc-config export ESMF_COMM=mpich make all make install make installcheck
NOTA: Si la versión que uno tiene de cmake es inferior a 3.20 hay una función que llama esto que es TestBigEndian.csh
. Esta función a mi no me funcionaba y me tiraba error con cualquier compilador (Solo corría con mpiuni que no permite usar PIO). Si eso sucede, no encontré otra solución más que upgradear cmake.
NOTA2: Antes de instalar esmpy no está mal chequear que todo este bien.
make run_examples
y
make run_unit_tests
Si esto está bien, ahora hay que instalar esmpy.
cd src cd addon cd esmpy python3 -m pip install .
Listo.
Instalación y corrección de errores de Hermes
git clone https://earth.bsc.es/gitlab/es/hermesv3_gr.git cd hermesv3_gr python3 setup.py install
Si alguna dependencia está mal con las librerías anteriores, en este proceso se va a quejar.
A partir de la versión 8.4.0 de esmpy se deja de importar como "import ESMF" y se pasa a importar como "import esmpy". Hay que cambiar esto en los códigos si se usa una versión posterior. Además hay que cambiar el nombre de las funciones.
/home/sol/hermes/lib/python3.8/site-packages/hermesv3_gr-2.1.3-py3.8.egg/hermesv3_gr/modules/regrid/regrid_conservative.py /home/sol/hermes/lib/python3.8/site-packages/hermesv3_gr-2.1.3-py3.8.egg/hermesv3_gr/modules/grids/grid.py
Cada vez que aparezca algo como ESMF.Field
o ESMF.Regrid
o ESMF.StaggerLoc
hay que cambiar el ESMF
por esmpy
.
También hay que definir bien el path al make file de ESMF. Modificamos el fichero:
/home/sol/hermes/lib/python3.8/site-packages/esmpy/interface/loadESMF.py
Hay que cambiar
esmfmk = os.environ["ESMFMKFILE"]
Por el path del makefile. En mi caso:
esmfmk = "/home/sol/hermesv3_gr/Libraries/esmf/esmf-8.5.0/lib/libO/Linux.gfortran.64.mpich.default/esmf.mk"
También hay que cambiar un par de cosas numpy. A partir de la versión 1.20 no se usa más "np.float" sino directamente "float", salvo que se use np.float32 o np.float64 (idem con int) (Ver la tabla de acá [[6]]). Se podría instalar una versión anterior, pero parece que es vieja y no se puede instalar bien. Lo más directo parece ser cambiar este tipo de cosas en el siguiente script, que es el único con problemas:
/home/sol/hermes/lib/python3.8/site-packages/hermesv3_gr-2.1.3-py3.8.egg/hermesv3_gr/modules/writing/writer_cmaq.py
Preparación de inventarios
Lo siguiente que hay que hacer es copiar las entradas de muestra:
hermesv3_gr_copy_config_files '/home/sol/HERMES/HERMES_IN'
Acá van a estar todos los ficheros para hacer las especiaciones y para pasar los inventarios anuales a mensuales, diarios y horarios.
Los inventarios (por ejemplo, el de EDGAR) tienen que ser adaptados para funcionar con Hermes. Para eso se necesitan unos scripts que se consiguen con:
hermesv3_gr_copy_preproc_files '/home/sol/HERMES/preproc'
Hay varias opciones de inventarios con sus scripts correspondientes para ser adaptados. Los inventarios disponibles están acá [[7]].
EDGARv432_AP y EDGARv432_VOC
Estos inventarios los podemos usar y acá abajo se describe como descargarlos y prepararlos. El problema es que en los ficheros de muestra de Hermes no están sus especiaciones con los sectores de estos inventarios. Si uno quisiera, se podría hacer la especiación pero requiere saber como es para cada sector y especie.
VOCs
Vamos a empezar con el de EDGAR. Lo primero que tenemos que hacer es descargar los inventarios. Esto se hace con el script download_voc_edgar.py
que está en GIT [[8]]. Este script guarda todo en el disco externo en una carpeta edgardv432_voc/original_files
porque es pesado. El script está hecho para descargar los datos anuales para el 2012, pero se puede cambiar el año.
python3 download_voc_edgar.py
Una vez los inventarios descargados, usamos /home/sol/HERMES/preproc/edgarv432_voc_preproc.py
para procesar los inventarios y tengan el formato necesario para Hermes. Tenemos que cambiar los paths:
INPUT_PATH = '/media/sol/External/edgarv432_voc/original_files/' OUTPUT_PATH = '/media/sol/External/Inventarios_Edgar/edgarv432_voc/' LIST_POLLUTANTS = ['voc1', 'voc2', 'voc3', 'voc4', 'voc5', 'voc6', 'voc7', 'voc8', 'voc9', 'voc10', 'voc11', 'voc12', 'voc13', 'voc14', 'voc15', 'voc16', 'voc17', 'voc18', 'voc19', 'voc20', 'voc21', 'voc22', 'voc23', 'voc24', 'voc25'] # list_years = [1970, 1971, 1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, # 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, # 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012] LIST_YEARS = [2012] # To do yearly emissions PROCESS_YEARLY = True YEARLY_INPUT_NAME = 'yearly/v432_VOC_spec_<pollutant>_<year>_<ipcc>.0.1x0.1.nc' # To process monthly emissions, 2010 directly from monthly_input_name and other years calculated using monthly gridded factors derived from the 2010 monthly data PROCESS_MONTHLY = False MONTHLY_INPUT_NAME = 'monthly/v432_VOC_spec_<pollutant>_2010_<month>_<ipcc>.0.1x0.1.nc' MONTHLY_PATTERN_FILE = 'temporal_profiles/v432_FM_<sector>.0.1x0.1.nc'
Además, hay un error de tipeo en la línea 189. Hay que cambiar
nc_var.coordinates = data_atts['coordiantes']
por
nc_var.coordinates = data_atts['coordinates']
Ahora sí. Se corre
python3 edgarv432_voc_preproc.py
Esto tarda en correr, pero genera en el disco externo la carpeta edgarv432_voc/yearly_mean
con todos los ficheros en el formato adecuado para Hermes.
Gases y Aerosoles
Ahora vamos a hacer los mismo, pero para descargar y preparar el inventario de gases y aerosoles que tienen ["BC","CO","NH3","NMVOC","NOx","OC","PM10","PM2.5","SO2"]. Para eso, vamos a usar el script download_ap_edgar.py
que está en GIT [[9]]. Nuevamente, esto descarga todo en el disco externo en la carpeta edgardv61_ap/original_files
. Está hecho para el año 2012, pero se puede cambiar.
python3 download_ap_edgar.py
Ahora vamos a tener que procesar los inventarios. Como el inventario de Edgar que está ahora en la página es v6.1 en vez de v432 vamos a tener que hacer otro script, en particular porque son otros los sectores que hay en estas versión. Nos copiamos el de la versión anterior y lo modificamos.
cp edgarv432_ap_preproc.py edgarv61_ap_preproc.py
Aparte de cambiarle los paths hay que cambiar algunas cosas más. En la versión 432 de Edgar el nombre de los ficheros tenía el código del sector en vez del nombre como ahora, así que hay que cambiar eso para que los pueda leer bien. Esto funciona ahora para los inventarios anuales (Para 2012 no hay mensuales). Si quisiéramos hacer mensuales, habría que arreglar la función do_monthly_transformation
también (La parte donde pone in_pollutant = None si no es alguno de los PM2.5)
diff edgarv61_ap_preproc.py edgarv432_ap_preproc.py 37,39c37 < LIST_POLLUTANTS = ['BC', 'CO', 'NH3', 'NOx', 'OC', 'PM10', 'PM2.5', 'SO2', 'NMVOC'] < < #LIST_POLLUTANTS = ['PM2.5_bio', 'PM2.5_fossil'] --- > LIST_POLLUTANTS = ['PM2.5_bio', 'PM2.5_fossil'] 43c41 < LIST_YEARS = [2012] --- > LIST_YEARS = [2010] 46,47c44,45 < PROCESS_YEARLY = True < YEARLY_INPUT_NAME = 'yearly/EDGARv6.1_<pollutant>_<year>_<ipcc>.0.1x0.1.nc' --- > PROCESS_YEARLY = False > YEARLY_INPUT_NAME = 'yearly/v432_<pollutant>_<year>_<ipcc>.0.1x0.1.nc' 50c48 < PROCESS_MONTHLY = False --- > PROCESS_MONTHLY = True 73,75c71 < "IPCC_1A3a_SPS": "TNR_Aviation_SPS", < "IPCC_1A3b_noRES": "TRO_noRES", < "IPCC_1A3b_RES": "TRO_RES", --- > "IPCC_1A3b": "TRO", 83a80 > "IPCC_2D": "FOO_PAP", 86d82 < "IPCC_2D": "FOO_PAP", 87a84 > "IPCC_4C_4D1_4D2_4D4": "AGS", 89d85 < "IPCC_4C_4D": "AGS", 91d86 < "IPCC_6C": "SWD_INC", 92a88 > "IPCC_6C": "SWD_INC", 94d89 < 219c214 < nc_output.setncattr('title', 'EDGARv6.1_AP inventory for the sector {0} and pollutant {1}'.format( --- > nc_output.setncattr('title', 'EDGARv4.3.2_AP inventory for the sector {0} and pollutant {1}'.format( 223c218 < nc_output.setncattr('source', 'EDGARv6.1_AP', ) --- > nc_output.setncattr('source', 'EDGARv4.3.2_AP', ) 241c236 < for ipcc in zip(list(ipcc_to_sector_dict().keys()),list(ipcc_to_sector_dict().values())): --- > for ipcc in list(ipcc_to_sector_dict().keys()): 245c240 < ipcc[1])) --- > ipcc)) 252,256c247,251 < #if pollutant in ['PM2.5_bio', 'PM2.5_fossil']: < #in_pollutant = pollutant < #pollutant = 'PM2.5' < #else: < #in_pollutant = None --- > if pollutant in ['PM2.5_bio', 'PM2.5_fossil']: > in_pollutant = pollutant > pollutant = 'PM2.5' > else: > in_pollutant = None 267c262 < sector = ipcc_to_sector_dict()[ipcc[0]] --- > sector = ipcc_to_sector_dict()[ipcc] 269c264 < pollutant = pollutant.replace('.', '') --- > pollutant = in_pollutant.replace('.', '') 286c281 < pollutant, ipcc[1], file_path)) --- > pollutant, ipcc, file_path))
Esto tarda en correr, pero genera en el disco externo la carpeta edgarv61_ap/yearly_mean con todos los ficheros en el formato adecuado para Hermes.
NOTA: Está para descargar ficheros anuales porque para el 2012 no hay mensuales. Para el 2010 sí hay.
HTAPv2
La ventaja de este inventario es que su especiación está en el fichero de muestra que viene con Hermes. En la v2 hay datos 2008-2010. En la v3 hay 2000-2018 por lo que quizás convendría usar ese para el 2012, pero el problema es que tiene otros sectores para los cuáles no tenemos la especiación. Conviene seguir con la v2.
La desventaja es que se necesita un fichero con los ratios para especiar los VOCS que estaba en una WIKI que ya no existe más. Se necesitan dos tipos de archivos que amablemente me proporcionaron y están acá [[10]] y acá [[11]].
Además de estos archivos, me compartieron un link con todos los archivos relacionados que estaban en en la WIKI acá [[12]]. Está en el GIT también por las dudas de que el link desaparezca [[13]]
Para descargar el inventario hay un script en git [[14]].
python3 download_HTAP_edgar.py
Esto descarga todo en el disco externo porque es pesado. Está todo en la carpeta Inventarios_Edgar/HTAPv2/original_files
.
Una vez descargado, los descomprimo:
cd /media/sol/External/Inventarios_Edgar/HTAPv2/original_files unzip '*.zip'
Ahora vamos a usar el script /home/sol/HERMES/preproc/htapv2_preproc.py
para procesarlo.
/home/sol/HERMES/preproc/
Hay que cambiar la parte de los paths.
# ============== CONFIGURATION PARAMETERS ====================== INPUT_PATH = '/media/sol/External/Inventarios_Edgar/HTAPv2/original_files' OUTPUT_PATH = '/media/sol/External/Inventarios_Edgar/HTAPv2/htapv2' INPUT_NAME = 'edgar_HTAP_<pollutant>_emi_<sector>_<year>_<month>.0.1x0.1.nc' INPUT_NAME_AIR = 'edgar_HTAP_emi_<pollutant>_<sector>_<year>.0.1x0.1.nc' INPUT_NAME_SHIPS = 'edgar_HTAP_<pollutant>_emi_SHIPS_<year>.0.1x0.1.nc' # HTAP auxiliary NMVOC emission data for the industry sub-sectors # (http://iek8wikis.iek.fz-juelich.de/HTAPWiki/WP1.1?highlight=%28%28WP1.1%29%29) INPUT_NAME_NMVOC_INDUSTRY = '/media/sol/External/Inventarios_Edgar/HTAPv2/original_files/HTAPv2_NMVOC_INDUSTRY/HTAPv2_NMVOC_<sector>_<year>_<month>.0.1x0.1.nc' # list_years = [2008, 2010] LIST_YEARS = [2010] # RETRO ratios applied to HTAPv2 NMVOC emissions # (http://iek8wikis.iek.fz-juelich.de/HTAPWiki/WP1.1?highlight=%28%28WP1.1%29%29) VOC_RATIO_PATH = '/media/sol/External/Inventarios_Edgar/HTAPv2/original_files/retro_nmvoc_ratio_2000_01x01' VOC_RATIO_NAME = 'retro_nmvoc_ratio_<voc>_2000_0.1deg.nc' VOC_RATIO_AIR_NAME = 'VOC_split_AIR.csv' VOC_RATIO_SHIPS_NAME = 'VOC_split_SHIP.csv'
Notar que VOC_RATIO_PATH y INPUT_NAME_NMVOC_INDUSTRY son los paths de los ficheros que hay que tener aparte. También hay que correr los ficheros "VOC_SPLIT_AIR.csv" y "VOC_SPLIT_SHIP.csv" a la carpeta de los ratios.
Y ahora lo corremos.
NOTA: Si hay poco espacio en el disco, va a haber que liberar algo. Por más que guarde la salida en el disco externo, mientras procesa va ocupando tamaño del disco y si no le alcanza se va a parar. Necesita por lo menos 20 gb.
python3 htapv2_preproc.py
Esto tarda en correr, pero finalmente genera los archivos htapv2/monthly_mean
y htapv2/yearly_mean
con todos los ficheros procesados.
Configuración
Fichero configuración de WRF
Primero tenemos que modificar el fichero con los datos del dominio y la configuración de WRF: HERMES/HERMES_IN/data/global_attributes.csv
cp global_attributes.csv global_attributes.csv.old
Los datos que piden los sacamos de algún fichero de salida de WRF del dominio correspondiente. Por ejemplo, para el dominio intermedio de mi simulación (de 3km) de la configuración p8u1 quedaría:
attribute,value BOTTOM-TOP_GRID_DIMENSION,80 GRIDTYPE,C DIFF_OPT,1 KM_OPT,4 DAMP_OPT,3 DAMPCOEF,0.2 KHDIF,0 KVDIF,0 MP_PHYSICS,8 RA_LW_PHYSICS,4 RA_SW_PHYSICS,4 SF_SFCLAY_PHYSICS,1 SF_SURFACE_PHYSICS,2 BL_PBL_PHYSICS,8 CU_PHYSICS,0 SF_LAKE_PHYSICS,0 SURFACE_INPUT_SOURCE,3 SST_UPDATE,0 GRID_FDDA,0 GFDDA_INTERVAL_M,0 GFDDA_END_H,0 GRID_SFDDA,0 SGFDDA_INTERVAL_M,0 SGFDDA_END_H,0 BOTTOM-TOP_PATCH_START_UNSTAG,1 BOTTOM-TOP_PATCH_END_UNSTAG,79 BOTTOM-TOP_PATCH_START_STAG,1 BOTTOM-TOP_PATCH_END_STAG,80 GRID_ID,2 PARENT_ID,1 I_PARENT_START,43 J_PARENT_START,42 PARENT_GRID_RATIO,5 DT,12 MMINLU,MODIFIED_IGBP_MODIS_NOAH NUM_LAND_CAT,21 ISWATER,17 ISLAKE,21 ISICE,15 ISURBAN,13 ISOILWATER,14 CEN_LAT,-34.46497 CEN_LON,-58.56366
Fichero de niveles verticales
Tenemos que darle un fichero que diga hasta que altura va cada nivel vertical. Para eso vamos a usar el script vertical_layers_conf.py
que está en GIT [[15]]. Para correr este script necesitamos algún fichero de salida de WRF o el output METCRO3D.nc
que es salida de MCIP. OJO, NO DAN EXACTAMENTE IGUAL. Con el de CMAQ corre sin quejarse. No probé el de WRF así que recomiendo usar la versión de CMAQ
python3 vertical_layers_conf.py wrf_out_file WRF
o
python3 vertical_layers_conf.py METCROD3D_file CMAQ
Esto va a generar un csv de la pinta CMAQ_*numero de layers*layers_vertical_description.csv
Lo copiamos en la carpeta que corresponde.
cp CMAQ_79layers_vertical_description.csv /home/sol/HERMES/HERMES_IN/data/profiles/vertical/CMAQ_79layers_vertical_description.csv
Ficheros de perfiles mensuales, semanales, diarios y horarios
Para esto vamos a usar los que ya están por default. Ojo que quizás hay que cambiar el ID de las emisiones.
Están en
/home/sol/HERMES/HERMES_IN/data/profiles/temporal/TemporalProfile_Daily.csv /home/sol/HERMES/HERMES_IN/data/profiles/temporal/TemporalProfile_Hourly.csv /home/sol/HERMES/HERMES_IN/data/profiles/temporal/TemporalProfile_Monthly.csv /home/sol/HERMES/HERMES_IN/data/profiles/temporal/TemporalProfile_Weekly.csv /home/sol/HERMES/HERMES_IN/data/profiles/temporal/tz_world_country_iso3166.csv
El último es un fichero con todos los husos horarios del mundo.
Fichero de configuración de inventarios
Nos copiamos el original
cd /home/sol/HERMES/HERMES_IN/conf/ cp /home/sol/HERMES/HERMES_IN/conf/EI_configuration.csv EI_configuration.csv.old
La idea de este fichero es decirle que inventarios vamos a usar y para cada especie que perfil de especiación (Para hacer la especiación mensual, la semanal, la diaria, la horaria y la de especies en sí). Cada perfil está asociado a un código que debe coincidir con los códigos de los ficheros de especiaciones. Las columnas están separadas por ";".
Borré los inventarios que no me importan para no meter ruido y me quedé solo con el de HTAPv2.
En la columna "ref_year" va el año del cuál son los inventarios. En la columna "active" va a un 1 si se está usando ese inventario con ese sector y 0 sino. Si la frecuencia es anual, si o si hay que tener perfiles para p_month, p_week y p_hour.
Como el inventario HTAPv2 ya tiene los perfiles asignados no toco nada. Pero si no lo tuviera, hay que elegirlos.
También hay que cambiar los paths donde están los inventarios.
El fichero modificado está en el git [[16]].
Fichero de especiación
Acá tenemos que crear el fichero de especiación para cb6 aero7 que es el mecanismo que vamos a usar. El fichero que viene por default para Hermes son los de cb5 aero5 y cb5 aero6.
Acá está la tabla con todas las especies [[17]]
Nos copiamos alguno de los que ya están y lo vamos a modificar.
cd /home/sol/HERMES/HERMES_IN/data/profiles/speciation cp Speciation_profile_cb05_aero6_CMAQ.csv Speciation_profile_cb06_aero7_CMAQ.csv
Los códigos de especiación para HAPTV2 son E002-E009. Esa especiación ya está hecha. Solo queda cambiar los nombres de las especies de CMAQ del mecanismo viejo al nuevo.
El fichero modificado está acá [[18]]
Shapefile con bordes de países
Se necesita descargar de [[19]] el shapefile de la Version 3.6 (Las nuevas no lo tienen en shapefile y no sé si Hermes va a entender otro formato).
cd /home/sol/HERMES/HERMES_IN/data/ mkdir gadm_country_mask cd gadm_country_mask cp /home/sol/Downloads/gadm36_shp/gadm36.shp .
Fichero pesos moleculares
Usamos el que ya está. Si hay que usar una especie que no esté en la lista hay que agregarla. Está acá:
/home/sol/HERMES/HERMES_IN/data/profiles/speciation/MolecularWeights.csv
Ejecución
Para correr Hermes, hay que modificar el fichero de configuración HERMES/HERMES_IN/conf/hermes.conf
cp hermes.conf hermes.conf.old
Modificamos todos los paths.
input_dir = /home/sol/HERMES/HERMES_IN data_path = /media/sol/External/Inventarios_Edgar output_dir = /home/sol/HERMES/HERMES_OUT vertical_description = <input_dir>/data/profiles/vertical/CMAQ_79layers_vertical_description.csv cross_table = <input_dir>/conf/EI_configuration.csv p_vertical = <input_dir>/data/profiles/vertical/Vertical_profile.csv p_month = <input_dir>/data/profiles/temporal/TemporalProfile_Monthly.csv p_week = <input_dir>/data/profiles/temporal/TemporalProfile_Weekly.csv p_day = <input_dir>/data/profiles/temporal/TemporalProfile_Daily.csv p_hour = <input_dir>/data/profiles/temporal/TemporalProfile_Hourly.csv p_speciation = <input_dir>/data/profiles/speciation/Speciation_profile_cb06_aero7_CMAQ.csv molecular_weights = <input_dir>/data/profiles/speciation/MolecularWeights.csv world_info = <input_dir>/data/profiles/temporal/tz_world_country_iso3166.csv countries_shapefile = <input_dir>/data/gadm_country_mask/gadm36.shp
Tener en cuenta que data_path
es el path donde están todos los inventarios descargados y preparados. El path por sector se le da recién en el archivo de configuración de emisiones.
Hay que poner datos sobre el dominio que corresponden a los datos del GRIDDESC generado por MCIP. Conviene entonces correr primero MCIP para el dominio de interés y después leer los datos desde ese fichero.
Para una proyección lcc, los datos que piden son estos:
if domain_type == lcc: lat_1 = lat_2 = lon_0 = lat_0 = nx = ny = inc_x = inc_y = x_0 = y_0 =
La correspondencia con los datos de GRIDDESC es:
if domain_type == lcc: lat_1 = P_ALP lat_2 = P_BET lon_0 = P_GAM lat_0 = Y_CENT nx = NCOLS ny = NROWS inc_x = XCELL inc_y = YCELL x_0 = XORIG y_0 = YORIG
Que en el griddesc están ordenados así:
GRIDDESC ' ' COORDNAME COORDTYPE P_ALP P_BET P_GAM XCENT YCENT ' ' GRIDNAME COORDNAME XORIG YORIG XCELL YCELL NCOLS NROWS NTHICK ' '
Antes de correr tenemos que modificar unas cositas en el script "/home/sol/hermes/lib/python3.8/site-packages/hermesv3_gr-2.1.3-py3.8.egg/hermesv3_gr/modules/emision_inventories/emission_inventory.py"
. En la línea 92 tenemos que poner que reference_year es un int.
self.reference_year = int(reference_year)
Y ahora sí. Finalmente ejecutamos.
mpirun -np 8 hermesv3_gr --my-config '/home/sol/HERMES/HERMES_IN/conf/hermes.conf'
Esto tarda en correr, pero debiera ir creando los ficheros de las emisiones en el path de salida que elegimos. No hay que hacerles nada, funcionan así directamente con CMAQ.
Megan (Emisiones biogénicas)
Megan [[20]] es un modelo que genera ficheros de emisiones biogénicas para los dominios de interés. Todo lo que sigue es válido para la versión de Megan 2.1.
Instalación
Antes de instalar Megan hay que instalar netcdf 3.6.0 [[21]] (o mayor) y ioapi 3.1 [[22]].
Aunque uno los tenga instalados ya quizás convenga re instalarlos. Megan viene con sus scripts para ser compilado y buildeado con el compilador pgf90 y necesita que las librerías estén compiladas con el mismo. En mi caso, las tenía compiladas con intel por lo que toca re compilarlas. Otra opción sería instalar Megan con intel, pero requiere reemplazar todas las flags de compilación lo cuál no es tarea sencilla.
Descargamos entonces el código de Megan y lo guardamos en el home. Extraemos y:
cd MEGANv2.10_beta mkdir Libraries cd Libraries
Instalación netcdf
Megan 2.1 necesita netcdf 3.6.0 o mayor. Al momento de escribir esta WIKI la versión que está para descargar de netcdf-c es 4.9.2 y de netcdf-fortran es 4.6.1. Descargamos ambas. En la carpeta "Libraries"
mkdir netcdf-c_4_9_2 cd netcdf-c_4_9_2
Ahí extraemos el fichero.
cd netcdf-c-4.9.2 export FC=pgf90 export CFLAGS=-I/usr/include ./configure --prefix=/usr/local/netcdf-4.9.2 --disable-libxml2 --disable-hdf5 make sudo make install
Una vez terminado, para que nos tome esta versión de netcdf y no la que ya teníamos instalada,
export PATH=/usr/local/netcdf-4.9.2/bin:$PATH
Podemos chequear que sea la versión correcta
nc-config --version
En este caso netCDF 4.9.2.
NOTA: Si salimos de esta terminal, vamos a tener la versión de netcdf anterior. Siempre que la querramos usar que volver a exportar el path.
Ahora vamos con netcdf-fortran.
cd ../.. mkdir netcdf-fortran_4_6_1 cd netcdf-fortran_4_6_1
Acá extraemos el fichero.
cd netcdf-fortran-4.6.1 export CPPFLAGS=-I/usr/local/netcdf-4.9.2/include export LDFLAGS=-L/usr/local/netcdf-4.9.2/lib export LD_LIBRARY_PATH=/usr/local/netcdf-4.9.2/lib ./configure --prefix=/usr/local/netcdf-4.9.2 make make install
Instalación ioapi
En la carpeta Libraries nos hacemos una carpeta para ioapi y ahí extraemos. Ahí:
export BIN=Linux2_x86pg mkdir Linux2_x86pg ln -s /usr/local/netcdf-4.9.2/lib/*.so Linux2_x86pg/ ln -s /usr/local/netcdf-4.9.2/lib/libnetcdf.a Linux2_x86pg/ ln -s /usr/local/netcdf-4.9.2/lib/libnetcdff.a Linux2_x86pg/ ln -s /usr/local/netcdf-4.9.2/lib/libhdf5*a Linux2_x86pg/ ln -s /usr/local/netcdf-4.9.2/lib/libhdf5*so Linux2_x86pg/