CMAQ
(→Preparación de inventarios y Ejecución) |
(→Hermes) |
||
(No se muestran 96 ediciones intermedias realizadas por un usuario) | |||
Línea 780: | Línea 780: | ||
Todos los pasos se explican con más detalle [[CMAQ/pruebaAMBA]] |
Todos los pasos se explican con más detalle [[CMAQ/pruebaAMBA]] |
||
− | |||
− | = Hermes = |
||
− | |||
− | 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 [[https://earth.bsc.es/gitlab/es/hermesv3_gr/-/wikis/home]]. 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 [[https://git.cima.fcen.uba.ar/solange.luque/hermes/-/tree/main/Instalacion]]. |
||
− | |||
− | <pre style="shell"> |
||
− | |||
− | virtualenv hermes |
||
− | |||
− | source hermes/bin/activate |
||
− | |||
− | pip install -r paquetes.txt |
||
− | </pre> |
||
− | |||
− | === 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á [[https://earth.bsc.es/gitlab/es/hermesv3_gr/-/wikis/user_guide_how_to_install]] |
||
− | |||
− | ACÁ DEBERÍA PONER COMO INSTALÉ ESOS, EN ESPECIAL EMF QUE HUBO QUE COMPILARLO. |
||
− | |||
− | |||
− | === Instalación y corrección de errores de Hermes === |
||
− | |||
− | <pre style="shell"> |
||
− | git clone https://earth.bsc.es/gitlab/es/hermesv3_gr.git |
||
− | cd hermesv3_gr |
||
− | python3 setup.py install |
||
− | </pre> |
||
− | |||
− | 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: |
||
− | |||
− | <pre style="shell"> |
||
− | /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 |
||
− | </pre> |
||
− | |||
− | Además, hay que definir bien el path al make file de ESMF. Modificamos el fichero: |
||
− | |||
− | <pre style="shell"> |
||
− | /home/sol/hermes/lib/python3.8/site-packages/esmpy/interface/loadESMF.py |
||
− | </pre> |
||
− | |||
− | Hay que cambiar |
||
− | |||
− | <pre style="shell"> |
||
− | esmfmk = os.environ["ESMFMKFILE"] |
||
− | </pre> |
||
− | |||
− | Por el path del makefile. En mi caso: |
||
− | |||
− | <pre style="shell"> |
||
− | esmfmk = "/home/sol/hermesv3_gr/Libraries/esmf/esmf-8.4.1/lib/libO/Linux.gfortran.64.mpich.default/esmf.mk" |
||
− | </pre> |
||
− | |||
− | == Preparación de inventarios y Ejecución == |
||
− | |||
− | Lo siguiente que hay que hacer es copiar las entradas de muestra: |
||
− | |||
− | <pre style="shell"> |
||
− | hermesv3_gr_copy_config_files '/home/sol/HERMES/HERMES_IN' |
||
− | </pre> |
||
− | |||
− | 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: |
||
− | |||
− | <pre style="shell"> |
||
− | hermesv3_gr_copy_preproc_files '/home/sol/HERMES/preproc' |
||
− | </pre> |
||
− | |||
− | === VOCs === |
||
− | |||
− | Vamos a empezar con el de EDGAR. Lo primero que tenemos que hacer es descargar los inventarios. Esto se hace con el script <code>download_voc_edgar.py</code> que está en GIT [[https://git.cima.fcen.uba.ar/solange.luque/hermes/-/tree/main/Edgar]]. Este script guarda todo en el disco externo en una carpeta <code>edgardv432_voc/original_files</code> porque es pesado. El script está hecho para descargar los datos anuales para el 2012, pero se puede cambiar el año. |
||
− | |||
− | <pre style = "shell"> |
||
− | python3 download_voc_edgar.py |
||
− | </pre> |
||
− | |||
− | Una vez los inventarios descargados, usamos <code>/home/sol/HERMES/preproc/edgarv432_voc_preproc.py</code> para procesar los inventarios y tengan el formato necesario para Hermes. Tenemos que cambiar los paths: |
||
− | |||
− | <pre style="shell"> |
||
− | 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' |
||
− | </pre> |
||
− | |||
− | Además, hay un error de tipeo en la línea 189. Hay que cambiar |
||
− | |||
− | <pre style="shell"> |
||
− | nc_var.coordinates = data_atts['coordiantes'] |
||
− | </pre> |
||
− | |||
− | por |
||
− | |||
− | <pre style="shell"> |
||
− | nc_var.coordinates = data_atts['coordinates'] |
||
− | </pre> |
||
− | |||
− | Ahora sí. Se corre |
||
− | |||
− | <pre style="shell"> |
||
− | python3 edgarv432_voc_preproc.py |
||
− | </pre> |
||
− | |||
− | Esto tarda en correr, pero genera en el disco externo la carpeta <code>edgarv432_voc/yearly_mean</code> 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 <code>download_ap_edgar.py</code> que está en GIT [[https://git.cima.fcen.uba.ar/solange.luque/hermes/-/tree/main/Edgar]]. Nuevamente, esto descarga todo en el disco externo en la carpeta <code>edgardv61_ap/original_files</code>. Está hecho para el año 2012, pero se puede cambiar. |
||
− | |||
− | <pre style="shell"> |
||
− | python3 download_ap_edgar.py |
||
− | </pre> |
||
− | |||
− | 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. |
||
− | |||
− | <pre style="shell"> |
||
− | cp edgarv432_ap_preproc.py edgarv61_ap_preproc.py |
||
− | </pre> |
||
− | |||
− | 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 <code>do_monthly_transformation</code> también (La parte donde pone in_pollutant = None si no es alguno de los PM2.5) |
||
− | |||
− | <pre style = "shell"> |
||
− | 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)) |
||
− | </pre> |
||
− | |||
− | |||
− | 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. |
||
− | === Configuración=== |
||
− | |||
− | Hay varios ficheros de configuración que tenemos que ir modificando. |
||
− | |||
− | ==== Fichero configuración de WRF ==== |
||
− | |||
− | Primero tenemos que modificar el fichero con los datos del dominio y la configuración de WRF: <code>HERMES/HERMES_IN/data/global_attributes.csv</code> |
||
− | |||
− | <pre style="shell"> |
||
− | cp global_attributes.csv global_attributes.csv.old |
||
− | </pre> |
||
− | |||
− | 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: |
||
− | |||
− | <pre style ="shell"> |
||
− | 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,20 |
||
− | ISWATER,17 |
||
− | ISLAKE,-1 |
||
− | ISICE,15 |
||
− | ISURBAN,13 |
||
− | ISOILWATER,14 |
||
− | CEN_LAT,-34.46497 |
||
− | CEN_LON,-58.56366 |
||
− | </pre> |
||
− | |||
− | |||
− | ==== 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 <code>vertical_layers_conf.py</code> que está en GIT [[https://git.cima.fcen.uba.ar/solange.luque/hermes/-/tree/main/Edgar]]. Para correr este script necesitamos algún fichero de salida de WRF o el output <code>METCRO3D.nc</code> que es salida de MCIP. OJO, NO DAN EXACTAMENTE IGUAL. |
||
− | |||
− | <pre style = "shell"> |
||
− | python3 vertical_layers_conf.py wrf_out_file WRF |
||
− | </pre> |
||
− | |||
− | o |
||
− | |||
− | <pre style = "shell"> |
||
− | python3 vertical_layers_conf.py METCROD3D_file CMAQ |
||
− | </pre> |
||
− | |||
− | |||
− | Esto va a generar un csv de la pinta <code>CMAQ_*numero de layers*layers_vertical_description.csv</code> |
||
− | |||
− | Lo copiamos en la carpeta que corresponde. |
||
− | |||
− | <pre style = "shell"> |
||
− | cp CMAQ_79layers_vertical_description.csv /home/sol/HERMES/HERMES_IN/data/profiles/vertical/CMAQ_79layers_vertical_description.csv |
||
− | </pre> |
||
− | |||
− | ==== 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 |
||
− | |||
− | <pre style = "shell"> |
||
− | /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 |
||
− | </pre> |
||
− | |||
− | El último es un fichero con todos los husos horarios del mundo. |
||
− | |||
− | ==== Fichero de configuración de inventarios ==== |
||
− | |||
− | Nos copiamos el original |
||
− | |||
− | <pre style = "shell"> |
||
− | cd /home/sol/HERMES/HERMES_IN/conf/ |
||
− | cp /home/sol/HERMES/HERMES_IN/conf/EI_configuration.csv EI_configuration.csv.old |
||
− | </pre> |
||
− | |||
− | La idea de este fichero es que esté que inventario vamos a usar, que sectores y que especies vamos a mirar y cuales son sus paths. |
||
− | |||
− | Borré los inventarios que no me importan para no meter ruido y me quedé solo con el de EDGARv432_VOC y EDGARv61_AP. Cuidado que EDGARv61_AP no estaba por default por lo que puede haber algunos problemas, pero los sectores son los mismos que los de la versión anterior. |
||
− | |||
− | === 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. |
||
− | |||
− | === Shapefile con bordes de países === |
||
− | |||
− | Se necesita descargar de [[https://gadm.org/old_versions.html]] el shapefile de la Version 3.6 (Las nuevas no lo tienen en shapefile y no sé si Hermes va a entender otro formato). |
||
− | |||
− | <pre style = "shell"> |
||
− | cd /home/sol/HERMES/HERMES_IN/data/ |
||
− | mkdir gadm_country_mask |
||
− | cd gadm_country_mask |
||
− | cp /home/sol/Downloads/gadm36_shp/gadm36.shp . |
||
− | </pre> |
||
− | |||
− | === 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á: |
||
− | |||
− | <pre style = "shell"> |
||
− | /home/sol/HERMES/HERMES_IN/data/profiles/speciation/MolecularWeights.csv |
||
− | </pre> |
||
− | |||
− | === Ejecución === |
||
− | Para correr Hermes, hay que modificar el fichero de configuración <code>HERMES/HERMES_IN/conf/hermes.conf</code> |
||
− | |||
− | <pre style="shell"> |
||
− | cp hermes.conf hermes.conf.old |
||
− | </pre> |
||
− | |||
− | Modificamos. Tener en cuenta que <code>data_path</code> 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. |
Última revisión de 13:30 18 oct 2023
Instalando y usando CMAQ en hydra
Para inventarios y condiciones de borde e iniciales CMAQInvCbCi
Contenido |
[editar] Instalando librerías
Instalación en /home/solange.luque/MODELOS/CMAQ/[comp]
.
Existe un foro: https://forum.cmascenter.org/t/ioapi-installtion-unable/805
[editar] ioapi
Agarrar librerías ioapi
Instalándolas en /home/solange.luque/libraries/
Instalación y uso de ioapi desde python con PseudoNetCDF /pyIOAPI
[editar] intel
mkdir -p ioapi/v3.2-20200828/intel cd ioapi/v3.2-20200828/intel tar xvfz ~/ioapi-3.2-20200828.tar.gz mv ioapi-3.2-20200828/* ./ rmdir ioapi-3.2-20200828 export BIN=Linux2_x86_64ifort mkdir Linux2_x86_64ifort ln -s /opt/netcdf/netcdf-4/intel/2021.4.0/lib/*.so Linux2_x86_64ifort/ ln -s /opt/netcdf/netcdf-4/intel/2021.4.0/lib/libnetcdf.a Linux2_x86_64ifort/ ln -s /opt/netcdf/netcdf-4/intel/2021.4.0/lib/libnetcdff.a Linux2_x86_64ifort/ ln -s /opt/hdf5/hdf5-1.10.5/intel/2021.4.0/lib/libhdf5*a Linux2_x86_64ifort/ ln -s /opt/hdf5/hdf5-1.10.5/intel/2021.4.0/lib/libhdf5*so Linux2_x86_64ifort/ ln -s /opt/curl/curl-4.1.2/intel/2021.4.0/lib/libcurl.* ./ cp ioapi/Makefile.nocpl ioapi/Makefile cp m3tools/Makefile.nocpl m3tools/Makefile cp Makefile.template Makefile
Seguimos (https://forum.cmascenter.org/t/ioapi-error-in-m3too/2341)[CMAS forum `Ioapi error in m3too;`]
Editamos los Makefiles (Makefile
y ioapi/Makeinclude.Linux2_x86_64ifort
)
diff Makefile Makefile.template 138,145c138,145 < BIN = Linux2_x86_64ifort < BASEDIR = ${PWD} < INSTALL = /home/solange.luque/MODELOS/CMAQ/intel/LIBRARIES/ioapi < LIBINST = $(INSTALL)/$(BIN) < BININST = $(INSTALL)/$(BIN) < CPLMODE = nocpl < IOAPIDEFS = < PVMINCL = --- > # BIN = Linux2_x86_64 > # BASEDIR = ${PWD} > # INSTALL = ${HOME} > # LIBINST = $(INSTALL)/$(BIN) > # BININST = $(INSTALL)/$(BIN) > # CPLMODE = nocpl > # IOAPIDEFS = > # PVMINCL =
Instalamos librerías
/opt/load-libs.sh 1 make configure >& run_configure.log make all >& run_make.log
Si todo fue bien:
ls -l Linux2_x86_64ifort/ | grep rwx | grep -v lrwxrwxrwx | awk '{print $9}' | tr '\n' ' ' airs2m3 bcwndw camxtom3 datshift dayagg factor findwndw greg2jul gregdate gridprobe insertgrid jul2greg juldate juldiff julshift kfxtract latlon m3agmask m3agmax m3combo m3cple m3diff m3edhdr m3fake m3hdr m3interp m3mask m3merge m3pair m3probe m3stat m3totxt m3tproc m3tshift m3wndw m3xtract mpasdiff mpasstat mpastom3 mtxblend mtxbuild mtxcalc mtxcple presterp presz projtool randomstat selmrg2d timediff timeshift vertimeproc vertintegral vertot wndwdesc wrfgriddesc wrftom3
Instalando:
mkdir -p ~/MODELOS/CMAQ/intel/LIBRARIES/ioapi make install >& run_install.log ls ~/MODELOS/CMAQ/intel/LIBRARIES/ioapi/Linux2_x86_64ifort/ airs2m3 greg2jul julshift m3cple m3merge m3utilio.mod modpdata.mod mtxcalc timediff wrftom3 bcwndw gregdate kfxtract m3diff m3pair m3wndw modwrfio.mod mtxcple timeshift camxtom3 gridprobe latlon m3edhdr m3probe m3xtract mpasdiff presterp vertimeproc datshift insertgrid libioapi.a m3fake m3stat modatts3.mod mpasstat presz vertintegral dayagg jul2greg m3agmask m3hdr m3totxt modgctp.mod mpastom3 projtool vertot factor juldate m3agmax m3interp m3tproc modmpasfio.mod mtxblend randomstat wndwdesc findwndw juldiff m3combo m3mask m3tshift modncfio.mod mtxbuild selmrg2d wrfgriddesc cp ioapi/fixed_src/* Linux2_x86_64ifort/ cp ioapi/fixed_src/* ~/MODELOS/CMAQ/intel/LIBRARIES/ioapi/Linux2_x86_64ifort/
[editar] gnu
NOTA: Antes de empezar, quitar del .bashrc
la carga por defecto del entorno intel
##Para compiladores INTEL #source /opt/intel/oneapi/setvars.sh > /dev/null #export PATH=/opt/mpich/mpich-3.4.2/intel/2021.4.0/bin:$PATH #export LD_LIBRARY_PATH=/opt/jasper/jasper-version-2.0.33/intel/2021.4.0/lib: /opt/netcdf/netcdf-4/intel/2021.4.0/lib:$LD_LIBRARY_PATH /opt/load-libs.sh 3 source /opt/env_scripts/load_gnu-10.2.1_mpich-3.4.2.sh
mkdir -p ioapi/v3.2-20200828/gnu cd ioapi/v3.2-20200828/gnu tar xvfz ~/ioapi-3.2-20200828.tar.gz mv ioapi-3.2-20200828/* ./ rmdir ioapi-3.2-20200828 export BIN=Linux2_x86_64 mkdir Linux2_x86_64 ln -s /opt/netcdf/netcdf-4/gnu/10.2.1/lib/*.so Linux2_x86_64/ ln -s /opt/netcdf/netcdf-4/gnu/10.2.1/lib/libnetcdf.a Linux2_x86_64/ ln -s /opt/netcdf/netcdf-4/gnu/10.2.1/lib/libnetcdff.a Linux2_x86_64/ ln -s /opt/hdf5/hdf5-1.10.5/gnu/10.2.1/lib/libhdf5*a Linux2_x86_64/ ln -s /opt/hdf5/hdf5-1.10.5/gnu/10.2.1/lib/libhdf5*so Linux2_x86_64/ ln -s /usr/lib/x86_64-linux-gnu/*curl*a Linux2_x86_64/ ln -s /usr/lib/x86_64-linux-gnu/*curl*so Linux2_x86_64/ cp ioapi/Makefile.nocpl ioapi/Makefile cp m3tools/Makefile.nocpl m3tools/Makefile cp Makefile.template Makefile
Editamos los Makefiles (Makefile
y ioapi/Makeinclude.Linux2_x86_64
)
diff Makefile Makefile.template 138,145c138,145 < BIN = Linux2_x86_64 < BASEDIR = ${PWD} < INSTALL = /home/solange.luque/MODELOS/CMAQ/gnu/LIBRARIES/ioapi < LIBINST = $(INSTALL)/$(BIN) < BININST = $(INSTALL)/$(BIN) < CPLMODE = nocpl < IOAPIDEFS = < PVMINCL = --- > # BIN = Linux2_x86_64 > # BASEDIR = ${PWD} > # INSTALL = ${HOME} > # LIBINST = $(INSTALL)/$(BIN) > # BININST = $(INSTALL)/$(BIN) > # CPLMODE = nocpl > # IOAPIDEFS = > # PVMINCL =
Instalamos librerías
make configure >& run_configure.log make all >& run_make.log
Si no hay problemas
$ ls -l Linux2_x86_64/ | grep rwx | grep -v lrwxrwxrwx | awk '{print $9}' | tr '\n' ' ' airs2m3 bcwndw camxtom3 datshift dayagg factor findwndw greg2jul gregdate gridprobe insertgrid jul2greg juldate juldiff julshift kfxtract latlon m3agmask m3agmax m3combo m3cple m3diff m3edhdr m3fake m3hdr m3interp m3mask m3merge m3pair m3probe m3stat m3totxt m3tproc m3tshift m3wndw m3xtract mpasdiff mpasstat mpastom3 mtxblend mtxbuild mtxcalc mtxcple presterp presz projtool randomstat selmrg2d timediff timeshift vertimeproc vertintegral vertot wndwdesc wrfgriddesc wrftom3
Instalando:
mkdir ~/MODELOS/CMAQ/gnu/LIBRARIES/ioapi make install >& run_install.log ls ~/MODELOS/CMAQ/gnu/LIBRARIES/ioapi/Linux2_x86_64/ airs2m3 greg2jul julshift m3cple m3merge m3utilio.mod modpdata.mod mtxcalc timediff wrftom3 bcwndw gregdate kfxtract m3diff m3pair m3wndw modwrfio.mod mtxcple timeshift camxtom3 gridprobe latlon m3edhdr m3probe m3xtract mpasdiff presterp vertimeproc datshift insertgrid libioapi.a m3fake m3stat modatts3.mod mpasstat presz vertintegral dayagg jul2greg m3agmask m3hdr m3totxt modgctp.mod mpastom3 projtool vertot factor juldate m3agmax m3interp m3tproc modmpasfio.mod mtxblend randomstat wndwdesc findwndw juldiff m3combo m3mask m3tshift modncfio.mod mtxbuild selmrg2d wrfgriddesc cp ioapi/fixed_src/* Linux2_x86_64/ cp ioapi/fixed_src/* /home/solange.luque/MODELOS/CMAQ/gnu/LIBRARIES/ioapi/Linux2_x86_64/
[editar] gnu - debug
NOTA: Antes de empezar, quitar del .bashrc
la carga por defecto del entorno intel
##Para compiladores INTEL #source /opt/intel/oneapi/setvars.sh > /dev/null #export PATH=/opt/mpich/mpich-3.4.2/intel/2021.4.0/bin:$PATH #export LD_LIBRARY_PATH=/opt/jasper/jasper-version-2.0.33/intel/2021.4.0/lib: /opt/netcdf/netcdf-4/intel/2021.4.0/lib:$LD_LIBRARY_PATH
mkdir -p ioapi/v3.2-20200828/gnu-dbg cd ioapi/v3.2-20200828/gnu-dbg tar xvfz /home/solange.luque/libraries/ioapi-3.2-20200828.tar.gz mv ioapi-3.2-20200828/* ./ rmdir ioapi-3.2-20200828 export BIN=Linux2_x86_64dbg mkdir Linux2_x86_64dbg ln -s /opt/netcdf/netcdf-4/gnu/10.2.1/lib/*.so Linux2_x86_64dbg/ ln -s /opt/netcdf/netcdf-4/gnu/10.2.1/lib/libnetcdf.a Linux2_x86_64dbg/ ln -s /opt/netcdf/netcdf-4/gnu/10.2.1/lib/libnetcdff.a Linux2_x86_64dbg/ ln -s /opt/hdf5/hdf5-1.10.5/gnu/10.2.1/lib/libhdf5*a Linux2_x86_64dbg/ ln -s /opt/hdf5/hdf5-1.10.5/gnu/10.2.1/lib/libhdf5*so Linux2_x86_64dbg/ ln -s /usr/lib/x86_64-linux-gnu/*curl*a Linux2_x86_64dbg/ ln -s /usr/lib/x86_64-linux-gnu/*curl*so Linux2_x86_64dbg/ cp ioapi/Makefile.nocpl ioapi/Makefile cp m3tools/Makefile.nocpl m3tools/Makefile cp Makefile.template Makefile cp ioapi/Makeinclude.Linux2_x86_64dbg ioapi/Makeinclude.Linux2_x86_64dbg.old
Editamos los Makefiles (Makefile
y ioapi/Makeinclude.Linux2_x86_64
)
diff Makefile Makefile.template 138,145c138,145 < BIN = Linux2_x86_64dbg < BASEDIR = ${PWD} < INSTALL = /home/solange.luque/libs/ioapi/v3.2-20200828/gnu-dbg < LIBINST = $(INSTALL)/$(BIN) < BININST = $(INSTALL)/$(BIN) < CPLMODE = nocpl < IOAPIDEFS = < PVMINCL = --- > # BIN = Linux2_x86_64 > # BASEDIR = ${PWD} > # INSTALL = ${HOME} > # LIBINST = $(INSTALL)/$(BIN) > # BININST = $(INSTALL)/$(BIN) > # CPLMODE = nocpl > # IOAPIDEFS = > # PVMINCL = diff ioapi/Makeinclude.Linux2_x86_64dbg ioapi/Makeinclude.Linux2_x86_64dbg.old 26,28c26 < DBGFLAGS = -g -Wall -Wextra -Warray-temporaries -Wconversion -fimplicit-none -fbacktrace -ffree-line-length-none -fcheck=all -ffpe-trap=zero,overflow,underflow -finit-real=nan < DBGFLAGS = < MFLAGS = -Wsurprising -fbounds-check -finit-real=snan -m64 ${DBGFLAGS} -Wno-tabs --- > MFLAGS = -Wsurprising -fbounds-check -finit-real=snan -m64
Instalamos librerías
make configure >& run_configure.log make all >& run_make.log
Si no hay problemas
$ ls -l Linux2_x86_64/ | grep rwx | grep -v lrwxrwxrwx | awk '{print $9}' | tr '\n' ' ' airs2m3 bcwndw camxtom3 datshift dayagg factor findwndw greg2jul gregdate gridprobe insertgrid jul2greg juldate juldiff julshift kfxtract latlon m3agmask m3agmax m3combo m3cple m3diff m3edhdr m3fake m3hdr m3interp m3mask m3merge m3pair m3probe m3stat m3totxt m3tproc m3tshift m3wndw m3xtract mpasdiff mpasstat mpastom3 mtxblend mtxbuild mtxcalc mtxcple presterp presz projtool randomstat selmrg2d timediff timeshift vertimeproc vertintegral vertot wndwdesc wrfgriddesc wrftom3
Instalando:
mkdir ~/MODELOS/CMAQ/gnu/LIBRARIES/ioapi make install >& run_install.log ls ~/MODELOS/CMAQ/gnu/LIBRARIES/ioapi/Linux2_x86_64/ airs2m3 greg2jul julshift m3cple m3merge m3utilio.mod modpdata.mod mtxcalc timediff wrftom3 bcwndw gregdate kfxtract m3diff m3pair m3wndw modwrfio.mod mtxcple timeshift camxtom3 gridprobe latlon m3edhdr m3probe m3xtract mpasdiff presterp vertimeproc datshift insertgrid libioapi.a m3fake m3stat modatts3.mod mpasstat presz vertintegral dayagg jul2greg m3agmask m3hdr m3totxt modgctp.mod mpastom3 projtool vertot factor juldate m3agmax m3interp m3tproc modmpasfio.mod mtxblend randomstat wndwdesc findwndw juldiff m3combo m3mask m3tshift modncfio.mod mtxbuild selmrg2d wrfgriddesc cp ioapi/fixed_src/* Linux2_x86_64/ cp ioapi/fixed_src/* /home/solange.luque/MODELOS/CMAQ/gnu/LIBRARIES/ioapi/Linux2_x86_64/
[editar] CMAQ
NOTA: Asegurarse que no hay ningún entorno de compiladores activado automáticamente en el .bashrc
[editar] intel
Yendo al directorio de trabajo
cd /home/solange.luque/MODELOS/CMAQ/intel mkdir src cd src git clone https://github.com/USEPA/CMAQ.git CMAQ-master head -n 1 CMAQ-master/README.md CMAQv5.4 cd CMAQ-master/ ls bldit_project.csh CCTM config_cmaq.csh DOCS license.md POST PREP PYTOOLS README.md UTIL
Preparando configuración de la compilación
cp bldit_project.csh bldit_project.csh.old diff bldit_project.csh bldit_project.csh.old 19,20c19 < #set CMAQ_HOME = ${PWD}/CMAQ_Project < set CMAQ_HOME = /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project --- > set CMAQ_HOME = /home/username/path
Compilamos!
./bldit_project.csh >& run_bldit.log tail run_bldit.log mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/hr2day' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/hr2day/scripts' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/sitecmp' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/sitecmp/scripts' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/sitecmp_dailyo3' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/sitecmp_dailyo3/scripts' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/writesite' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/POST/writesite/scripts' Configuration and Run Scripts have been Extracted and placed in: /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project You may now edit these scripts to conform to your system and run options.
Vamos al directorio
cd CMAQ_Project/ cp config_cmaq.csh config_cmaq.csh.old diff config_cmaq.csh config_cmaq.csh.old 88,95c88,95 < setenv IOAPI_INCL_DIR /home/solange.luque/libraries/ioapi/v3.2-20200828/intel/Linux2_x86_64ifort #> I/O API include header files < setenv IOAPI_LIB_DIR /home/solange.luque/libraries/ioapi/v3.2-20200828/intel/Linux2_x86_64ifort #> I/O API libraries < setenv NETCDF_LIB_DIR /opt/netcdf/netcdf-4/intel/2021.4.0/lib #> netCDF C directory path < setenv NETCDF_INCL_DIR /opt/netcdf/netcdf-4/intel/2021.4.0/include #> netCDF C directory path < setenv NETCDFF_LIB_DIR /opt/netcdf/netcdf-4/intel/2021.4.0/lib #> netCDF Fortran directory path < setenv NETCDFF_INCL_DIR /opt/netcdf/netcdf-4/intel/2021.4.0/include #> netCDF Fortran directory path < setenv MPI_INCL_DIR /opt/intel/oneapi/mpi/2021.4.0/include #> MPI Include directory path < setenv MPI_LIB_DIR /opt/intel/oneapi/mpi/2021.4.0/lib #> MPI Lib directory path --- > setenv IOAPI_INCL_DIR ioapi_inc_intel #> I/O API include header files > setenv IOAPI_LIB_DIR ioapi_lib_intel #> I/O API libraries > setenv NETCDF_LIB_DIR netcdf_lib_intel #> netCDF C directory path > setenv NETCDF_INCL_DIR netcdf_inc_intel #> netCDF C directory path > setenv NETCDFF_LIB_DIR netcdff_lib_intel #> netCDF Fortran directory path > setenv NETCDFF_INCL_DIR netcdff_inc_intel #> netCDF Fortran directory path > setenv MPI_INCL_DIR mpi_incl_intel #> MPI Include directory path > setenv MPI_LIB_DIR mpi_lib_intel #> MPI Lib directory path 99c99 < setenv myFC /opt/intel/oneapi/mpi/2021.4.0/bin/mpiifort --- > setenv myFC mpiifort 103c103 < setenv myLINK_FLAG "-qopenmp" --- > setenv myLINK_FLAG #"-qopenmp-simd" openMP not supported w/ CMAQ ./config_cmaq.csh intel >& run_config-cmaq.log cat run_config-cmaq.log Compiler is set to intel
Compilamos!
cd CCTM/scripts/ mkdir BLD_CCTM_v54_intel cp -R /opt/intel/oneapi/mpi/2021.4.0/include/* BLD_CCTM_v54_intel/ ./bldit_cctm.csh intel >& run_bldit_cctm.log ls BLD_CCTM_v54_intel/*exe BLD_CCTM_v54_intel/CCTM_v54.exe
NOTA: Si se está intentando una recompilación, antes vaciar el directorio
rm -rf BLD_CCTM_v54_intel/*
[editar] gnu
Yendo al directorio de trabajo
/home/solange.luque/MODELOS/CMAQ/gnu/ mkdir src cd src git clone https://github.com/USEPA/CMAQ.git CMAQ-master head -n 1 ../../../README.md CMAQv5.4 cd CMAQ-master/ ls bldit_project.csh CCTM config_cmaq.csh DOCS license.md POST PREP PYTOOLS README.md UTIL
Preparando configuración de la compilación
cp bldit_project.csh bldit_project.csh.old diff bldit_project.csh bldit_project.csh.old 19,20c19 < #set CMAQ_HOME = ${PWD}/CMAQ_Project < set CMAQ_HOME = /home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project --- > set CMAQ_HOME = /home/username/path
Compilamos!
./bldit_project.csh >& run_bldit.log tail run_bldit.log mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/hr2day' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/hr2day/scripts' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/sitecmp' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/sitecmp/scripts' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/sitecmp_dailyo3' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/sitecmp_dailyo3/scripts' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/writesite' mkdir: created directory '/home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project/POST/writesite/scripts' Configuration and Run Scripts have been Extracted and placed in: /home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/CMAQ_Project You may now edit these scripts to conform to your system and run options.
Vamos al directorio
cd CMAQ_Project/ cp config_cmaq.csh config_cmaq.csh.old diff config_cmaq.csh config_cmaq.csh.old 151,158c151,158 < setenv IOAPI_INCL_DIR /home/solange.luque/libraries/ioapi/v3.2-20200828/gnu/Linux2_x86_64 #> I/O API include header files < setenv IOAPI_LIB_DIR /home/solange.luque/libraries/ioapi/v3.2-20200828/gnu/Linux2_x86_64 #> I/O API libraries < setenv NETCDF_LIB_DIR /opt/netcdf/netcdf-4/gnu/10.2.1/lib #> netCDF C directory path < setenv NETCDF_INCL_DIR /opt/netcdf/netcdf-4/gnu/10.2.1/include #> netCDF C directory path < setenv NETCDFF_LIB_DIR /opt/netcdf/netcdf_c-4.8.1_fortran-4.5.3/gnu/10.2.1/lib #> netCDF Fortran directory path < setenv NETCDFF_INCL_DIR /opt/netcdf/netcdf_c-4.8.1_fortran-4.5.3/gnu/10.2.1/include #> netCDF Fortran directory path < setenv MPI_INCL_DIR /opt/openmpi/openmpi-4.1.2/gnu/10.2.1/include #> MPI Include directory path < setenv MPI_LIB_DIR /opt/openmpi/openmpi-4.1.2/gnu/10.2.1/lib #> MPI Lib directory path --- > setenv IOAPI_INCL_DIR iopai_inc_gcc #> I/O API include header files > setenv IOAPI_LIB_DIR ioapi_lib_gcc #> I/O API libraries > setenv NETCDF_LIB_DIR netcdf_lib_gcc #> netCDF C directory path > setenv NETCDF_INCL_DIR netcdf_inc_gcc #> netCDF C directory path > setenv NETCDFF_LIB_DIR netcdff_lib_gcc #> netCDF Fortran directory path > setenv NETCDFF_INCL_DIR netcdff_inc_gcc #> netCDF Fortran directory path > setenv MPI_INCL_DIR mpi_incl_gcc #> MPI Include directory path > setenv MPI_LIB_DIR mpi_lib_gcc #> MPI Lib directory path 162c162 < setenv myFC /opt/openmpi/openmpi-4.1.2/gnu/10.2.1/bin/mpifort --- > setenv myFC mpifort 166,167c166,167 < setenv myFFLAGS "-ffixed-form -ffixed-line-length-132 -funroll-loops -finit-character=32 -fallow-argument-mismatch" < setenv myFRFLAGS "-ffree-form -ffree-line-length-none -funroll-loops -finit-character=32 -frecursive -fallow-argument-mismatch" --- > setenv myFFLAGS "-ffixed-form -ffixed-line-length-132 -funroll-loops -finit-character=32" > setenv myFRFLAGS "-ffree-form -ffree-line-length-none -funroll-loops -finit-character=32" 169c169 < setenv myLINK_FLAG "-fopenmp" # openMP not supported w/ CMAQ --- > setenv myLINK_FLAG # "-fopenmp" openMP not supported w/ CMAQ ./config_cmaq.csh gcc >& run_config-cmaq.log cat run_config-cmaq.log Compiler is set to gcc
NOTA: en caso que aparezca en el run_config-cmaq.log 0: Event not found.
, editar el config_cmaq.csh
e imprimir por pantalla la variable $CMAQ_LIB
. Ahí se creean unos directorios que si ha habido algún problema, no se llenan bien. Es recomendable borrarlos y volver a lanzar.
rm -rf /home/solange.luque/MODELOS/CMAQ/gnu/src/CMAQ-master/lib/x86_64/gcc/ioapi
Compilar el Chemistry Transport Model (CCTM)
cd CCTM/scripts/ mkdir BLD_CCTM_v54_gcc cp -R /opt/openmpi/openmpi-4.1.2/gnu/10.2.1/include/* BLD_CCTM_v54_gcc/ ./bldit_cctm.csh gcc >& run_bldit_cctm.log ls BLD_CCTM_v54_gcc/*exe BLD_CCTM_v54_gcc/CCTM_v54.exe
NOTA: Si se está intentando una recompilación, antes vaciar el directorio
rm BLD_CCTM_v54_gcc/*
[editar] Usando
Ejemplos de uso de CMAQ (útiles ya compilados e instalados en hydra)
* Editor emisiones: SMOKE * Editor condiciones atmosféricas iniciales / entorno: MCIP * Editor condiciones iniciales químicas: icon * Editor condiciones borde químicas: bcon
[editar] Compilación MCIP
Preparado de las condiciones con MCIP usando la script: /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/PREP/mcip/scripts/run_mcip.csh
export CMAQ_HOME=/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/ cd /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/PREP/mcip/scripts cp run_mcip.csh run_mcip.csh.old diff run_mcip.csh run_mcip.csh.old 125,129c125 < # config_cmaq.csh modifies $CMAQ_HOME < set val = $CMAQ_HOME < source $CMAQ_HOME/config_cmaq.csh intel < set CMAQ_HOME = $val < echo $0": Solange 2 CMAQ_HOME: "$CMAQ_HOME --- > source $CMAQ_HOME/config_cmaq.csh 133c129 < set GridName = AMBA # 16-character maximum --- > set GridName = 2016_12SE1 # 16-character maximum 135,136c131,132 < set DataPath = /home/solange.luque/estudios/CMAQ-ideal/DATA < set InMetDir = $DataPath/wrf --- > set DataPath = $CMAQ_DATA > set InMetDir = $DataPath/wrf 142,143d137 < < echo $0": Solange: "$ProgDir 163,164c157,159 < set InMetFiles = ( $InMetDir/wrfout_d03_2012-11-15_00:00:00 \ < $InMetDir/wrfout_d03_2012-11-15_12:00:00 ) --- > set InMetFiles = ( $InMetDir/subset_wrfout_d01_2016-07-01_00:00:00 \ > $InMetDir/subset_wrfout_d01_2016-07-02_00:00:00 \ > $InMetDir/subset_wrfout_d01_2016-07-03_00:00:00 ) 166,167c161,162 < set IfGeo = "T" < set InGeoFile = $InGeoDir/geo_em.d03.nc --- > set IfGeo = "F" > set InGeoFile = $InGeoDir/geo_em_d01.nc 194,195c189,190 < set MCIP_START = 2012-11-15-00:10:00.0000 # [UTC] < set MCIP_END = 2012-11-15-50:00:00.0000 # [UTC] --- > set MCIP_START = 2016-07-02-00:00:00.0000 # [UTC] > set MCIP_END = 2016-07-03-00:00:00.0000 # [UTC] 197c192 < set INTVL = 10 # [min] --- > set INTVL = 60 # [min] 221c216 < set BTRIM = 5 --- > set BTRIM = 0
Compilando mcip
cd /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/PREP/mcip/src vim /opt/load-libs.sh source /opt/env_scripts/load_intel-2021.4.0_mpich-3.4.2.sh diff Makefile Makefile.old 50,52c50,52 < FC = /opt/intel/oneapi/compiler/2021.4.0/linux/bin/intel64/ifort < NETCDF = /opt/netcdf/netcdf-4/intel/2021.4.0 < IOAPI_ROOT = /home/solange.luque/MODELOS/CMAQ/intel/LIBRARIES/ioapi --- > FC = ifort > NETCDF = /usr/local/apps/netcdf-4.7.3/intel-19.0 > IOAPI_ROOT = /usr/local/apps/ioapi-3.2_20181011/intel-19.0 56,59c56,57 < #LIBS = -L$(IOAPI_ROOT)/lib -lioapi \ < # -L$(NETCDF)/lib -lnetcdff -lnetcdf < LIBS = -L$(IOAPI_ROOT)/Linux2_x86_64ifort -lioapi \ < -L$(NETCDF)/lib -lnetcdff -lnetcdf -qopenmp --- > LIBS = -L$(IOAPI_ROOT)/lib -lioapi \ > -L$(NETCDF)/lib -lnetcdff -lnetcdf make all >& run_make.log ls *exe mcip.exe
Se copia la script en donde se generaron los datos para asegurar su reproducibilidad
cp run_mcip.csh /home/solange.luque/estudios/CMAQ-ideal/DATA
[editar] Compilación icon
Empezando en
/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/PREP/icon/scripts ./bldit_icon.csh intel >& run_bldit_icon.log ls BLD_ICON_v54_intel/ avprofile_cb6r3m_ae7_kmtbr_hemi2016_v53beta2_m3dry_col051_row068.csv avprofile_racm_ae6_aq_derived_from_cb6r3m_ae7_kmtbr_hemi2016_v53beta2_m3dry_col051_row068.csv avprofile_saprc07tc_ae6_aq_derived_from_cb6r3m_ae7_kmtbr_hemi2016_v53beta2_m3dry_col051_row068.csv avprofile_saprc07tic_ae7i_aq_derived_from_cb6r3m_ae7_kmtbr_hemi2016_v53beta2_m3dry_col051_row068.csv findex.F HGRD_DEFN.F icon.F ICON_v54.cfg IC_PARMS.F lat_lon.F legacy_PM_toxics_profile.csv lr_interp.F m3_ck_ctmmet.F m3_ck_ctms.F m3_ck_icmet.F m3_driver.F m3_icout.F m3_vinterp.F Makefile Makefile.intel opn_ic_file.F prof_driver.F prof_icout.F prof_vinterp.F VGRD_DEFN.F
Compilando:
cd BLD_ICON_v54_intel /opt/load-libs.sh 1 source /opt/env_scripts/load_intel-2021.4.0_mpich-3.4.2.sh make >& run_make.log ls *exe ICON_v54.exe
[editar] Compilación bcon
Empezando desde /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/PREP/bcon/scripts
./bldit_bcon.csh intel >& run_bldit_bcon.log cd BLD_BCON_v54_intel/ ls BLD_BCON_v54_intel/*exe BLD_BCON_v54_intel/BCON_v54.exe
[editar] Benchmark
Descargando los datos del test-case de acá
Datos en hydra $CMAQ_DATA=/home/solange.luque/MODELOS/CMAQ/DATA/benchmark
tar xvfz CMAQv5.4_2018_12NE3_Benchmark_2Day_Input.tar.gz du -hsc ./CMAQv5.4_2018_12NE3_Benchmark_2Day_Input 56G ./CMAQv5.4_2018_12NE3_Benchmark_2Day_Input
Home CMAQ en hydra $CMAQ_HOME=/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project
Enlazando los datos
cd /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project mkdir -p data cd data ln -s /home/solange.luque/MODELOS/CMAQ/DATA/benchmark/CMAQv5.4_2018_12NE3_Benchmark_2Day_Input/2018_12NE3 ./
Corriendo benchmark
source /opt/env_scripts/load_intel-2021.4.0_mpich-3.4.2.sh cd $CMAQ_HOME/CCTM/scripts cp run_cctm_Bench_2018_12NE3.csh run_cctm_Bench_2018_12NE3.csh.old diff run_cctm_Bench_2018_12NE3.csh run_cctm_Bench_2018_12NE3.csh.old 716,717c716 < #( time -p mpirun -np $NPROCS $BLD/$EXEC ) |& tee buff_${EXECUTION_ID}.txt < (mpirun -np $NPROCS $BLD/$EXEC ) |& tee buff_${EXECUTION_ID}.txt --- > ( /usr/bin/time -p mpirun -np $NPROCS $BLD/$EXEC ) |& tee buff_${EXECUTION_ID}.txt 721c720 < #rm -rf buff_${EXECUTION_ID}.txt --- > rm -rf buff_${EXECUTION_ID}.txt 732d730 < echo "Have a look into buff_${EXECUTION_ID}.txt" 735d732 < rm -rf buff_${EXECUTION_ID}.txt qsub launch_cctm_intel.pb #./run_cctm_Bench_2018_12NE3.csh >& run_Bench_2018-12NE3.log tail -n 30 run_Bench_2018-12NE3.log ============================================== |>--- PROGRAM COMPLETED SUCCESSFULLY ---<| ============================================== Date and time 0:00:00 July 2, 2018 (2018183:000000) The elapsed time for this simulation was 2206.0 seconds. CMAQ Processing of Day 20180701 Finished at Wed 16 Nov 2022 04:11:26 PM -03 \\\\\=====\\\\\=====\\\\\=====\\\\\=====/////=====/////=====/////=====///// ================================== ***** CMAQ TIMING REPORT ***** ================================== Start Day: 2018-07-01 End Day: 2018-07-01 Number of Simulation Days: 1 Domain Name: 2018_12NE3 Number of Grid Cells: 367500 (ROW x COL x LAY) Number of Layers: 35 Number of Processes: 32 All times are in seconds. Num Day Wall Time 01 2018-07-01 2206.0 Total Time = 2206.00 Avg. Time = 2206.00
[editar] caso ideal
Partimos de una simulación de WRF y creamos los forzantes atmosféricos
Directorio de trabajo: /home/solange.luque/estudios/CMAQ-ideal
[editar] Meteorología
Para generar las condiciones meteorológicas ideales vamos a usar de base condiciones reales de una corridade WRF (wrfout_d03: dominio sobre AMBA a 1 km resolución, wrfour_d01: dominio centro SA a 50 km):
ls /home/solange.luque/estudios/CMAQ-ideal/DATA/wrf geo_em.d03.nc wrfout_d01_2012-08-03_00:00:00 wrfout_d03_2012-11-15_00:00:00 wrfout_d03_2012-11-15_12:00:00
A partir de estos ficheros creamos los ficheros meteorológicos ideales con velocidad constante usando el script getpoint_everywhere
. Por ejemplo, para una simulación con solo velocidad de viento en la dirección horizontal y velocidad de 3m/s
python3 getpoint_everywhere.py -i 60 -j 60 -x west_east -y south_north -f 'wrfout_d03_2012-11-15_00:00:00' -v 'U@alloverct@3.:V@alloverct@0.' -s 'Time@0@-9@6' python3 getpoint_everywhere.py -i 60 -j 60 -x west_east -y south_north -f 'wrfout_d03_2012-11-15_12:00:00' -v 'U@alloverct@3.:V@alloverct@0.' -s 'Time@0@-9@6'
Esto genera dos ficheros que renombramos:
wrfout_d03_2012-11-15_00:00:00_3 wrfout_d03_2012-11-15_12:00:00_3
Ahora vamos a correr mcip con estas condiciones. Partiendo del run_mcip.csh</pre> que creamos para el AMBA (caso prueba):
export CMAQ_HOME=/home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/ cd /home/solange.luque/MODELOS/CMAQ/intel/src/CMAQ-master/CMAQ_Project/PREP/mcip/scripts/ cp run_mcip.csh run_mcip_ideal.csh diff run_mcip.csh run_mcip_ideal.csh 131c131 < set APPL = AMBA --- > set APPL = AMBAidealArea 135c135 < set DataPath = /home/solange.luque/estudios/CMAQ-AMBA/prueba/DATA --- > set DataPath = /home/solange.luque/estudios/CMAQ-ideal/DATA 163,165c163,164 < set InMetFiles = ( $InMetDir/wrfout_d03_2012-11-14_12:00:00 \ < $InMetDir/wrfout_d03_2012-11-15_00:00:00 \ < $InMetDir/wrfout_d03_2012-11-15_12:00:00 ) --- > set InMetFiles = ( $InMetDir/wrfout_d03_2012-11-15_00:00:00_3 \ > $InMetDir/wrfout_d03_2012-11-15_12:00:00_3)
Ahora sí, corremos mcip:
./run_mcip_ideal.csh >& run_mcip_ideal.log
[editar] caso prueba AMBA
WORKDIR = /home/solange.luque/estudios/CMAQ-AMBA/prueba
Qué se necesita:
- Tener una salida de WRF y perararla para CMAQ
- Inventarios de emisiones y prepararlos para CMAQ
- Condiciones de contorno e iniciales para la química atmosférica
- Configurar CMAQ
- Simular CMAQ
Todos los pasos se explican con más detalle CMAQ/pruebaAMBA