AtChem2 con Singularity

De NLHPC

Introducción

El siguiente procedimiento muestra los pasos necesarios para utilizar AtChem2 utilizando un contenedor mediante SingularityCE.

Considere que los pasos que se muestran a continuación son una guía básica para que pueda ejecutar sus aplicaciones, por lo que modificaciones y configuraciones personalizadas deben ser realizadas por el lector.

Descarga de AtChem2

Descarga de código fuente

Descargaremos bajo nuestro usuario el código de AtChem2 utilizando:

git clone https://github.com/AtChem/AtChem2.git

Esto creará en nuestro directorio una carpeta llamada AtChem2, la que utilizaremos para nuestro ejemplo.

Descarga de contenedor

Para descargar el contenedor de AtChem2 deberemos ejecutar lo siguiente:

ml purge
ml intel/2022.00
ml singularityCE
singularity pull docker://ghcr.io/wacl-york/atchem2:1.2.2

Veremos el progreso similar a:

INFO:    Converting OCI blobs to SIF format
INFO:    Starting build...
Getting image source signatures
Copying blob 9f247ea85df4 done  
Copying blob 24578b8a05d2 done  
Copying blob 9088cdb84e39 done  
Copying config 7fbde900a5 done  
Writing manifest to image destination
Storing signatures
2024/11/29 10:12:17  info unpack layer: sha256:9088cdb84e397c480d4c5f1675d1aa6928c3e8b5b30c57b68a756d5d1fda4d80
2024/11/29 10:12:18  info unpack layer: sha256:24578b8a05d294f5a4174d182bbf2cf628f3617b73c3ab72e9f597b14b5a214f
2024/11/29 10:12:19  info unpack layer: sha256:9f247ea85df42ee348a150e723b02ed14d0d205589ccccbf6bb5caa2a5d489ed
INFO:    Creating SIF file...


Esto dejará en nuestro directorio el archivo contenedor atchem2_1.2.2.sif disponible para su uso.

Qué tenemos hasta el momento

Si hemos estado trabajando en nuestra carpeta principal, actualmente tendremos:

AtChem2
atchem2_1.2.2.sif

Ejecución de prueba de AtChem2

Para realizar una prueba de ejecución de AtChem2 mediante Singularity ejecutaremos:

cd AtChem2
singularity run --bind model:/data_transfer ~/atchem2_1.2.2.sif model/mechanism.fac

Si todo funciona de manera adecuada veremos (se ha eliminado texto, y solo se muestra una parte inicial y final):

INFO:    Converting SIF file to temporary sandbox...

* facsimile mechanism file: model/mechanism.fac
* fortran mechanism directory [ default = ./model/configuration/ ]:
* mcm data files directory [ default = ./mcm/ ]:

...

make sharedlib
gfortran -c model/configuration/customRateFuncs.f90 -ffree-line-length-none -ffree-form -fimplicit-none -Wall -Wpedantic -Wno-unused-dummy-argument -fcheck=all -fPIC -shared -o model/configuration/customRateFuncs.o -Jobj
gfortran -c model/configuration/mechanism.f90 -ffree-line-length-none -ffree-form -fimplicit-none -Wall -Wpedantic -Wno-unused-dummy-argument -fcheck=all -fPIC -shared -o model/configuration/mechanism.o -Jobj
gfortran -shared -o model/configuration/mechanism.so model/configuration/mechanism.o model/configuration/customRateFuncs.o
=> shared library directory: ./model/configuration/

make atchem2 executable
gfortran -o atchem2 -Jobj -Iobj src/dataStructures.f90 src/argparse.f90 src/interpolationFunctions.f90 src/configFunctions.f90 src/inputFunctions.f90 src/outputFunctions.f90 src/atmosphereFunctions.f90 src/solarFunctions.f90 src/constraintFunctions.f90 src/solverFunctions.f90 src/parameterModules.f90 src/atchem2.f90 -ffree-form -fimplicit-none -Wall -Wpedantic -fcheck=all -fPIC -O2 -L/atchem-lib/cvode/lib -L/atchem-lib/openlibm-0.8.1 -Wl,-R,/usr/lib/:/atchem-lib/cvode/lib:/atchem-lib/openlibm-0.8.1 -lopenlibm -lsundials_fcvode -lsundials_cvode -lsundials_fnvecserial -lsundials_nvecserial -ldl
src/inputFunctions.f90:1081:0:

...

-------------
 Directories
-------------
 Model directory is: model
 Output directory is: model/output
 Reaction Rates directory is: model/output/reactionRates
 Configuration directory is: model/configuration
 Constraints directory is: model/constraints
 Environment Constraints directory is: model/constraints/environment
 Photolysis Constraints directory is: model/constraints/photolysis
 Species Constraints directory is: model/constraints/species
 MCM directory is: mcm
 Shared library is: model/configuration/mechanism.so

...

------------------
 Final statistics
------------------
 No. steps = 603   No. f-s = 699   No. J-s = 1003   No. LU-s = 100
 No. nonlinear iterations = 696
 No. nonlinear convergence failures = 0
 No. error test failures = 28

 Runtime = 0
 Deallocating memory.
INFO:    Cleaning up image...

Esto nos muestra que se ha logrado ejecutar el contenedor con el archivo de entrada model/mechanism.fac.

Ejecución como tarea Slurm

Si lo anterior lo deseamos ejecutar en un nodo de cómputo, podemos utilizar un script similar a:

#!/bin/bash
#---------------Script SBATCH - NLHPC ----------------
#SBATCH -J AtChem_JOB
#SBATCH -p general
#SBATCH -n 1
#SBATCH -c 1
#SBATCH --mem-per-cpu=1000
#SBATCH --mail-user=lcastilloelmes@gmail.com
#SBATCH --mail-type=ALL
#SBATCH -o AtChem_JOB_%j.out

ml purge
ml singularityCE

cd AtChem2
singularity run --bind model:/data_transfer ~/atchem2_1.2.2.sif model/mechanism.fac

Es importante destacar qué la carpeta AtChem2/model debe contener:

  • los archivos *.fac,
  • el directorio configuration
  • el directorio constraints

De esta manera podrá editar configuraciones y restricciones para sus simulaciones.

En el caso de requerir más recursos, recuerde que puede utilizar nuestro Generador Scripts para la edición de scripts.