Ambiente de Trabajo Versión 2.
1, 04 Enero 2023
Tutorial 01 CROCO:
Creando el ambiente de trabajo
1. Propósito
En este tutorial revisaremos las instrucciones básicas para ingresar al servidor de cálculo que usaremos en este
curso, y para configurar y lanzar una simulación simple del dominio de Benguela, además de algunas instrucciones
básicas del cluster NLHPC.
2. Ingresando al NLPHC
2.1. Desde una máquina Linux
Para conectarse al NLHCP debe escribir, desde un terminal la siguiente instrucción
1 ssh -XC student88@[Link]
Reemplace student88 por el número de cuenta que le corresponde. La clave de la cuenta será enviada por Zoom.
Al ingresar verá en su terminal algo parecido a esto
2 Laboratorio Nacional de Computacion de Alto Rendimiento (NLHPC)
3 Centro de Modelamiento Matematico (CMM)
4 Universidad de Chile
5
6 IMPORTANTE: NO EJECUTAR PROCESOS EN ESTE NODO POR T > 30 min
7 PARA ESO DEBEN DE USARSE LAS COLAS DE EJECUCION
8 .................................................................
9
10 ********************************************************************************
11 EN CASO DE TENER DUDAS CON SU SCRIPT, LO INVITAMOS A USAR NUESTRO GENERADOR
12 AUTOMÁTICO EN EL SIGUIENTE LINK: [Link]
13 ********************************************************************************
14
15 ********************************************************************************
16 ESTIMADO USUARIO, A CONTINUACIÓN SE LISTAN LOS NODOS LIBRES PARA SER UTILIZADOS:
17 ********************************************************************************
18
19 PARTICION NODO ESTADO
20 slims* 41 idle
21 debug 4 idle
22 general 10 idle
23 largemem 1 idle
3. Copiando el código de CROCO
Primero vamos a crear una copia del código de CROCO, que ya está en cada una de las cuentas, en un directorio
con nuestro nombre. Para copiar el código que usaremos hay que utilizar la instrucción
1 mkdir andres
2 cp -r ./croco ./andres
1
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
4. Copiando el código de CROCO TOOLS
Para copiar el código de CROCO TOOLS que usaremos hay que utilizar la instrucción
1 cp -r ./croco_tools ./andres
5. Creando el directorio de trabajo BENGUELA LR
El ejemplo más sencillo de CROCO es la configuración llamada BENGUELA LR que corresponde a un dominio
de la zona de surgencia de Benguela de baja resolución (de ahı́ el LR : Low Resolution). Esta configuración es la
que viene por defecto en el código de CROCO y lo que haremos es similar a lo descrito en Penven et al. (2001).
El primer paso es editar el archivo create [Link] con las instrucciones
1 cd andres/croco
2 nano create_config.bash
Ahora tiene que modificar esta sección para colocar el nombre de su caso de estudio
1 #
2 MY_CONFIG_NAME=Run
3 #
Salga del editor nano (Ctrl-O,Enter,Ctrl-X) y después ejecute la instrucción
1 ./create_config.bash
lo que le dará
1 oce-dev is defined. all-in architecture and no external codes considered
2
3 Your choices :
4 - CROCO_DIR :
/home/courses/student88/andres/croco
5 - TOOLS_DIR :
/home/courses/student88/andres/croco/../croco_tools
6 - CONFIG_HOME_DIR :
/home/courses/student88/andres/croco/
7 - CONFIG_WORK_DIR :
/home/courses/student88/andres/croco/
8 - CONFIG_NAME Run :
9 - OPTIONS :
oce-dev xios test_cases agrif inter forc pisces sediment mustang
10 oanalysis prepro
11 Do you want to proceed ? [Y/n]
y al apretar la tecla Y aparece
1 Creating configuration ...
2
3 Copy CROCO useful scripts and input files
4 -----------------------------------------
Ese script crea un directorio con el nombre que Ud. definió en CONFIG NAME con todos los códigos necesarios
para realizar su simulación, este será nuestro directorio de trabajo. El contenido de esta carpeta debe ser parecido
al siguiente:
2
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
1 ls Run/
2 AGRIF_FixedGrids.in crocotools_param.m namelist_pisces_ref
3 cppdefs_dev.h DATA namelist_pisces_ref.1
4 cppdefs.h download_glorys_data.sh oct_start.m
5 create_config.[Link] example_job_run_croco_inter.pbs param.h
6 CROCO_FILES example_job_run_croco.pbs process_xios_xml.sh
7 croco_forecast.in example_job_run_croco.sh run_croco.bash
8 croco_hindcast.in example_job_run_croco.slurm run_croco_forecast.bash
9 [Link] jobcomp run_croco_inter.bash
10 [Link].1 MUSTANG_NAMELIST [Link]
11 croco_inter.in NAMELIST_OANALYSIS start.m
12 croco_inter.in.1 namelist_pisces_cfg TEST_CASES
13 croco_stations.in namelist_pisces_cfg.1 [Link]
6. Compilando CROCO
Primero vamos a compilar el ejecutable de CROCO usamos las siguientes instrucciones
Modificamos el cppdefs.h para activar la opcion de paralelización MPI
1 cd Run
2 nano cppdefs.h
donde cambiamos
1 # undef MPI
1 # define MPI
Salga del editor nano (Ctrl-O, Enter,Ctrl-X). Ahora compilamos el código
1 ml purge
2 ml intel
3 ml croco/1.3
4 ./jobcomp
y la compilación del código comienza con los siguientes mensajes en pantalla
3
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
1 ./jobcomp
2 OPERATING SYSTEM IS: Linux
3 cp: omitting directory ‘/home/courses/student88/andres/croco/OCEAN/../PISCES/SED’
4 file namelist_pisces exists in Run directory
5 Checking COMPILEAGRIF...
6 Checking COMPILEMPI...
7 Checking COMPILEXIOS...
8 Checking COMPILEOASIS...
9 Checking COMPILEOMP...
10 cpp -traditional -DLinux -DIfort -P -I/home/lmod/software/MPI/intel/
11 2018.5.274-GCC-8.2.0-2.31.1/impi/2018.4.274/netCDF-Fortran/4.4.4/
12 include -ICROCOFILES/AGRIF_INC mpc.F > mpc_.f
13 mpiifort -O3 -72 -fno-alias -i4 -r8 -fp-model precise
14 -mcmodel=medium -axCORE-AVX512,AVX,SSE4.2 -o mpc mpc_.f
15
Ahora hay que esperar un par de minutos a que el compilador mpiifort genere el archivo ejecutable. Cuando
la compilación termina exitosamente, verá las siguientes lı́neas en su pantalla
1 re/MPI/intel/2018.5.274-GCC-8.2.0-2.31.1/impi/2018.4.274/imkl/2018.4
2 .274/lib -L/home/lmod/software/MPI/intel/2018.5.274-GCC-8.2.0-2.31.1
3 /impi/2018.4.274/imkl/2018.4.274/mkl/lib/intel64
4 -L/home/lmod/software/MPI/intel/2018.5.274-GCC-8.2.0-2.31.1/impi/
5 2018.4.274/imkl/2018.4.274/lib
6 -L/home/lmod/software/MPI/intel/2018.5.274-GCC-8.2.0-2.31.1/impi/
7 2018.4.274/netCDF/4.6.2/lib64 -lnetcdf -lnetcdf -liomp5 -lpthread
8 mv [Link] croco
En la última lı́nea se ve cómo el archivo compilado, cuyo nombre por defecto es [Link] es renombrado como
croco. Ese es el ejecutable que usaremos.
7. Creando los archivos de entrada
Para crear los archivos de entrada que leerá el ejecutable croco usaremos una serie de funciones llamadas en su
conjunto CROCO TOOLS. Estas funciones fueron escritas en Matlab (Penven et al., 2008) y han sido adaptadas
para funcionar en Octave, usando el paquete OCTCDF.
7.1. Usando Matlab
Para crear los archivos de entrada usando Matlab, las instrucciones a usar, desde el directorio de trabajo
Run Andres son
Para crear los archivos de entrada usando Matlab, primero tenemos que cargar el programa usando
1 ml purge
2 ml Matlab/2017
3
4 LD_PRELOAD=/home/lmod/software/Core/ifort/2019.2.187-GCC-8.2.0-2.31.1/
5 compilers_and_libraries_2019.6.324/linux/compiler/lib/intel64/[Link]
6
7 matlab -nodesktop -nosplash
Dentro de Matlab las instrucciones a usar, desde el directorio de trabajo BENGUELA LR son:
Primero definir los caminos de búsqueda (path) de las herramientas que usa CROCO TOOLS
4
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
1 start
lo que entrega
1 >> start
2 Add the paths of the different toolboxes
3 Arch : x86_64 - Matlab version : 2017a
4 Use of mexnc and loaddap in 64 bits.
Luego escribimos la instrucción para generar la grilla del modelo, la que queda descrita en el archivo cro-
co [Link] que se generará en el directorio CROCO FILES
1 >> make_grid
2 mkdir: cannot create directory ‘/home/courses/student88/andres/croco/Run/CROCO_FILES/’:
3 File exists
4
5 Making the grid: /home/courses/student88/andres/croco/Run/CROCO_FILES/croco_grd.nc
6
7 Title: Benguela Model
8
9 Resolution: 1/3 deg
10
11 Do you want to use interactive grid maker ?
12 (e.g., for grid rotation or parameter adjustments) : y,[n]
apretamos n y luego aparece
1 Create the grid file...
2 LLm = 41
3 MMm = 42
4
5 Fill the grid file...
6
7 Compute the metrics...
8
9 Min dx=29.1913 km - Max dx=33.3244 km
10 Min dy=29.2434 km - Max dy=33.1967 km
11
12 Fill the grid file...
13
14 Add topography...
15 CROCO resolution : 31.3 km
16 Topography data resolution : 3.42 km
17 Topography resolution halved 4 times
18 New topography resolution : 54.6 km
19 Processing coastline_l.mat ...
20
21 Do you want to use editmask ? y,[n]
22
acá veremos la Fig. 1, y nuevamente escogemos la opción n
5
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
Figura 1: Mapa aproximado del dominio Benguela
finalmente vemos los siguientes mensajes
1 Filter topography ...
2 Apply a filter on the Deep Ocean to reduce isolated seamounts :
3 4 pass of a selective filter.
4 Apply a selective filter on log(h) to reduce grad(h)/h :
5 20 iterations - r_max = 0.27931
6 29 iterations - r_max = 0.24975
7 Smooth the topography a last time to prevent 2DX noise:
8 2 pass of a hanning smoother.
9
10 Write it down...
La siguiente instrucción es make forcing que genera el archivo croco [Link] con la información del forzante
atmosférico.
6
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
1 >> make_forcing
2 mkdir: cannot create directory ‘/home/courses/student88/andres/croco/Run/CROCO_FILES/’:
3 File exists
4
5 Benguela Model
6
7 Read in the grid...
8
9 Create the forcing file...
10 Getting taux for time index 1
11 Getting tauy for time index 1
12 Getting taux for time index 2
13 Getting tauy for time index 2
14 Getting taux for time index 3
15 Getting tauy for time index 3
16 Getting taux for time index 4
17 ....
18 Getting shortrad for time index 7
19 Getting shortrad for time index 8
20 Getting shortrad for time index 9
21 Getting shortrad for time index 10
22 Getting shortrad for time index 11
23 Getting shortrad for time index 12
24 >>
Y finalmente la instrucción make bry que crea el archivo croco [Link] con la condición de borde oceánica
1 make_bry
2 mkdir: cannot create directory ‘/home/courses/student88/croco/Run/CROCO_FILES/’: File exists
3
4 temp_month_data =
5
6 '/home/dbs/croco/DataSets/WOA2009/temp_month.cdf'
7
9 temp_ann_data =
10
11 '/home/dbs/croco/DataSets/WOA2009/temp_ann.cdf'
12
13
14 salt_month_data =
15
16 '/home/dbs/croco/DataSets/WOA2009/salt_month.cdf'
17 ...
18 ...
19 No values outside the Equator to extrapole
20 time index: 11 of total: 12
21 OBCNDX=4
22 No values outside the Equator to extrapole
23 time index: 12 of total: 12
24 OBCNDX=4
25 No values outside the Equator to extrapole
26
27 Remove averaged SSH ...
28
7
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
Ahora procedemos a la creación del archivo de condiciones iniciales croco [Link], el cual puede ser creado
usando la instrucción make ini
1 make_ini
2 Warning: Closing open netCDF file handles.
3 > In make_ini (line 26)
4 mkdir: cannot create directory ‘/home/courses/student88/andres/croco/Run/CROCO_FILES/’: File exists
5
6 Making initial file: /home/courses/student88/andres/croco/Run/CROCO_FILES/croco_ini.nc
7
8 Title: Run
9
10 Creating the file : /home/courses/student88/andres/croco/Run/CROCO_FILES/croco_ini.nc
11 VTRANSFORM = 2
12 ...
13 ...
14 Salinity...
15
16 Ext tracers: ro = 0 km - default value = NaN
17 ext_tracers_ini: time index: 1 of total: 12
18 ext_tracers_ini: horizontal interpolation of seasonal data
19 ext_tracers_ini: vertical interpolation
20
21 Compute potential temperature from in-situ...
22 getpot: Time index: 1 of total: 1
Estas instrucciones crearan los archivos de entrada, en formato NetCDF. Estos archivos quedarán dentro del
directorio CROCO FILES y son
1 croco_bry.nc
2 croco_frc.nc
3 croco_grd.nc
4 croco_ini.nc
Los archivos que obtenga deben ser iguales a los que se encuentran en
1 [Link]
si tuvo problemas con esta etapa, copie esos archivos en el directorio CROCO FILES para avanzar a la siguiente
sección usando las instrucciones
1 cd CROCO_FILES
2 wget [Link]
3 wget [Link]
4 wget [Link]
5 wget [Link]
8. Lanzando la simulación
Para lanzar la simulación copie el archivo run [Link] que puede encontrar en el siguiente enlace
1 wget [Link]
Lance la simulación con la instrucción
8
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
1 sbatch run_nlhpc.bash
Ahı́ aparece el número del proceso de cálculo asignado a esta simulación. Podemos ver el estado de avance de
esta simulación con la instrucción
1 squeue
También nos llegará al correo que definimos anteriormente, indicando el inicio y el fin, exitoso o no, de la
simulación.
8.1. Terminando anticipadamente una simulación
Si es necesario terminar una simulación anticipadamente, hay que usar la instrucción
1 scancel 21125780
donde debe reemplazar 21125780 con el número que le fue asignado a su proceso.
9. Archivos de salida
Una vez que la simulación termine exitosamente, encontraremos en el directorio CROCO FILES los siguientes
archivos de salida
1 croco_avg.nc
2 croco_his.nc
3 croco_rst.nc
Los archivos que obtenga deben ser iguales a los que se encuentran en
1 [Link]
si tuvo problemas con esta etapa, copie esos archivos en el directorio CROCO FILES para avanzar a la siguiente
sección usando las instrucciones
1 cd CROCO_FILES
2 wget [Link]
3 wget [Link]
4 wget [Link]
10. Visualización de resultados
10.1. ncdump
El programa ncdump es muy útil para mirar el contenido de un archivo NetCDF. Recuerden que tanto los
archivos de entrada como los archivos de salida de CROCO están en el formato NetCDF.
La instrucción
1 ml purge
2 ml netCDF-Fortran/4.4.4
3 ncdump -h CROCO_FILES/croco_avg.nc | less
nos mostrará información del contenido del archivo croco [Link]
9
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
1 netcdf croco_avg {
2 dimensions:
3 xi_rho = 43 ;
4 xi_u = 42 ;
5 eta_rho = 44 ;
6 eta_v = 43 ;
7 s_rho = 32 ;
8 s_w = 33 ;
9 time = UNLIMITED ; // (10 currently)
10 auxil = 4 ;
11 variables:
12 char spherical ;
13 spherical:long_name = "grid type logical switch" ;
14 spherical:option_T = "spherical" ;
15 spherical:option_F = "cartesian" ;
16 float xl ;
17 xl:long_name = "domain length in the XI-direction" ;
18 xl:units = "meter" ;
De esta forma podemos ver detalles como las dimensiones del dominio y el número de pasos de tiempo ahı́
grabados. Esto lo podemos comparar con nuestras estimaciones del número de pasos de tiempo que deberı́a grabar,
por ejemplo. Para salir de ncdump hay que apretar la tecla q.
10.2. ncview
El programa ncview es muy útil para hacer una visualización preeliminar de los archivos, en formato NetCDF,
que obtuvimos en nuestra simulación para esto hacemos
1 ml purge
2 ml icc/2019.2.187-GCC-8.2.0-2.31.1 impi/2019.2.185 ncview/2.1.7
3 ncview CROCO_FILES/croco_avg.nc
esto nos muestra la siguiente interfaz
10
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
Figura 2: Interfaz gráfica de ncview
al apretar en la variable temp obtenemos
11
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
Figura 3: Temperatura del mar
Esta figura nos muestra la temperatura del mar en la campa sigma del modelo mas profunda. Si queremos ver
los valores de la temperatura superficial del mar apretamos el botón derecho del ratón sobre la caja que tiene el
valor -0.984375 que corresponde al nivel vertical s rho que queremos analizar. Al hacer esto el valor de esa caja
cambia a -0.015625. Además conviene apretar en el botón que dice Bi-lin, para que ncview no interpole los valores
que fueron calculados en cada celda. Una vez hecho esto obtenemos la siguiente figura
Figura 4: Temperatura superficial
12
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
Si hacemos ahora click con el ratón en algún punto del mar, ncview nos muestra la serie de tiempo, en superficie,
de esa variable.
Figura 5: Serie de tiempo
En resumen, ncview es una herramienta muy rápida y sencilla que nos permite tener una visualización inmediata
de los archivos obtenidos. Es muy útil usarla para observar si los resultados son, a primera vista, razonables.
10.3. CROCO TOOLS
La herramienta CROCO TOOLS contiene varias funciones que son útiles para visualizar los resultados de
nuestra simulación. Estas funciones nos permiten hacer varios tipos de gráficos como secciones verticales, mapas
superficiales, perfiles en profundidad, series de tiempo y otros. El detalle de su uso está descrito en otro tutorial.
11. Detalles avanzados
Hay aspectos importantes para realizar una simulación usando CROCO que dependen de cómo configuremos
los archivos
1 crocotools_param.m
2 cppdefs.h
3 param.h
4 [Link]
En este caso, todo funcionó por que estos archivos están preconfigurados para el caso de ejemplo BENGUE-
LA LR. En el siguiente tutorial discutiremos qué modificar de esos archivos para estudiar la zona que sea de su
interés.
12. Conclusión
En este tutorial aprendió a ingresar al centro de cómputo NLHPC, a copiar los archivos para compilar el
modelo croco y preparar los archivos de entrada con el código croco tools. Además logró lanzar la simulación
básica para la zona de Benguela usando instrucciones tı́picas de un cluster y visualizó los resultados usando ncview.
Para más información:
Andrés Sepúlveda (asepulveda@[Link])
Contribuciones de:
Nicolás Aubone
13
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
Laura Braby
Marcela Contreras
Mauro Santiago
14
Ambiente de Trabajo Versión 2.1, 04 Enero 2023
13. Referencias
Penven, P., Roy, C., Brundrit, G. B., De Verdière, A. C., Fréon, P.,
Johnson, A. S., Lutjeharms J. R. E. & Shillington, F. A. (2001). A
regional hydrodynamic model of upwelling in the Southern Benguela.
South African Journal of Science, 97(11-12), 472-475.
Penven, P., Marchesiello, P., Debreu, L., & Lefèvre, J. (2008).
Software tools for pre-and post-processing of oceanic regional
simulations. Environmental Modelling & Software, 23(5), 660-662.
14. Enlaces útiles
14.1. El modelo CROCO
[Link]
14.2. El foro de usuarios de CROCO
[Link]
14.3. El paquete OctCDF
[Link]
15