Recursos: LibEFP

Contenido

  1. ¿Qué es LibEFP?
  2. Página web de LibEFP
  3. ¿Cómo compilar LibEFP 1.5.0?
    1. En Ubuntu 18.04 LTS
      1. Preparación del sistema operativo
      2. Instalación de las bibliotecas y programas básicos requeridas
      3. Limpieza de bibliotecas en desuso
      4. Clonar el repositorio de GitHub
      5. Contenido del archivo config.inc
      6. Compilación
      7. Creación de rutas del sistema para LibEFP
    2. En los Clústeres del Centro Rosen para Cómputo Avanzado de la Universidad Purdue
      1. Clonar el repositorio de GitHub
      2. Contenido del archivo config.inc
      3. Cargar los módulos requeridos (Versión de Desarrolladores en Carter del RCAC)
      4. Compilación
  4. ¿Cómo ejecutar LibEFP?
    1. Ejemplo de archivo de entrada de LibEFP/EFPMD
    2. Ejemplo de archivo PBS para ejecutar LibEFP/EFPMD en los Clústeres de la Universidad Purdue

¿Qué es LibEFP?

LibEFP es una implementación completa del método de potencial de fragmento efectivo (EFP) (EFP puede ser visto como un campo de fuerza avanzado, basado en primeros principios, ver Kaliman et al., JCC, 2013). LibEFP facilita la extensión de métodos de estructura electrónica diseñados para simulaciones precisas en la fase gaseosa a fases condensadas, a través QM/EFP. LibEFP está diseñado para dar a los desarrolladores de programas de química cuántica una forma fácil de añadir EFP a su paquete favorito.

Página web de LibEFP

Para encontrar información más detallada acerca de LibEFP, vaya a: libefp - The Effective Fragment Potential

¿Cómo compilar LibEFP 1.5.0?

En Ubuntu 16.04 LTS

Este es un método eficaz para compilar LibEFP en Ubuntu Desktop 18.04 LTS. Estas instrucciones asumen que se empieza con una instalación limpia de Ubuntu Desktop 18.04 LTS. En consecuencia, algunos de los pasos descritos aquí, como la instalación de bibliotecas, puede que no sean un requisito para su sistema. Este procedimiento fue probado por última vez el 1 de junio de 2018:

Preparación del sistema operativo

Asegúrese de que su sistema está al día.

sudo apt update
sudo apt upgrade
sudo apt dist-upgrade

Instalación de las bibliotecas y programas básicos requeridas

Instale los compiladores.

sudo apt install build-essential
sudo apt install gfortran

Instale las bibliotecas de matemáticas

sudo apt install libatlas-base-dev
sudo apt install libblas-dev
sudo apt install liblapack-dev

Instale MPI.

sudo apt install mpich
sudo apt install mpich-doc

Instale Git.

sudo apt install git

Limpieza de bibliotecas en desuso

Limpie el sistema.

sudo apt autoremove
sudo apt autoclean
sudo apt clean

Clonar el repositorio de GitHub

En primer lugar, vaya al directorio donde desear descargar el código fuente de LibEFP. Por ejemplo:

cd ~/Gits/

Para compilar LibEFP 1.5.0, hay que obtener los archivos de instalación. Esto se puede hacer usando Git.

git clone git://github.com/libefp/libefp.git

Esto creará un directorio llamado libefp en el directorio de trabajo actual. Es posible que desee cambiar el nombre del nuevo directorio para incluir la versión y otros detalles de la compilación que está a punto de ejecutar:

mv libefp libefp-1.5.0-2018.06.01

Para explorar el contenido del código, vaya al directorio que acaba de renombrar.

cd ~/Gits/libefp-1.5.0-2018.06.01/

Contenido del archivo config.inc

También se necesita un archivo de configuración. Este archivo config.inc contiene un conjunto de instrucciones para que el sistema reconozca los compiladores, directorio de instalación, y otras opciones.

Varios ejemplos de este archivo se encuentran almacenados en el directorio config/.

A continuación se da un ejemplo de dicho archivo, basado en el ejemplo gcc-netlib-openmpi.inc:

# C compiler
CC= mpicc

# Fortran compiler
FC= gfortran

# install prefix
PREFIX= /home/carlosborca/libefp

# fragment library path
FRAGLIB= $(PREFIX)/fraglib-installed

# additional link libraries
MYLIBS= -lblas -llapack -lgfortran

# additional linker flags
MYLDFLAGS=

# additional C flags
MYCFLAGS= -DEFP_USE_MPI -std=c99 -O3 -g -fopenmp

# additional Fortran flags
MYFFLAGS= -g

Compilación

Compilar debe ser sencillo ahora. En primer lugar, ejecute el comando make. Esto verificará que todo esté en orden para la compilación de todo el paquete (si sólo necesita la biblioteca, no el motor de Dinámica Molecular EFPMD, puede ejecutar make libefp).

make

Si make se llevó a cabo sin errores, ahora debe comprobar que el código compilado funciona correctamente. Esto se hace mediante la ejecución de una serie de cálculos de prueba precargados que se corren a través de un script, el cual se llama usando los comandos make check. Al menos debe ejecutar el primero de ellos:

make check

Para probar código paralelo OpenMP (paralelización entre los núcleos):

make checkomp

Para probar código paralelo MPI (paralelización entre nodos):

make checkmpi

Por último, para instalar el código compilado, ejecute el comando make install.

make install

Creación de rutas del sistema para LibEFP

Si no realizó la instalación en el directorio por defecto, cree rutas de sistema para los binarios de LibEFP en su .bashrc.

export PATH="/home/carlosborca/libefp/bin:$PATH"

En los Clústeres del Centro Rosen para Cómputo Avanzado de la Universidad Purdue

Clonar el repositorio de GitHub

En primer lugar, vaya al directorio LibEFP dentro del directorio Aplicaciones del Grupo Slipchenko:

cd /group/lslipche/apps/libefp/

Para compilar LibEFP 1.4.2, hay que obtener los archivos de instalación. Esto se puede hacer usando Git.

git clone git://github.com/libefp/libefp.git

Esto creará un directorio llamado libefp en el directorio de trabajo actual. Es posible que desee cambiar el nombre del nuevo directorio para incluir la versión y otros detalles de la compilación que está a punto de ejecutar:

mv libefp libefp-1.4.2-beta-2017.05.23

Para explorar el contenido del código vaya al directorio que acaba de renombrar.

cd /group/lslipche/apps/libefp/libefp-1.4.2-beta-2017.05.23/

Contenido del archivo config.inc

También se necesita un archivo de configuración. Este archivo config.inc contiene todas las instrucciones para que el sistema reconozca los compiladores, directorio de instalación, y otras opciones.

A continuación se da un ejemplo de dicho archivo:

# C compiler
CC= mpicc

# Fortran compiler
FC= ifort

# install prefix
PREFIX= /group/lslipche/apps/libefp/libefp-1.4.2-beta-2017.05.23

# fragment library path
FRAGLIB= $(PREFIX)/fraglib-installed

# additional link libraries
MYLIBS= -lifcore

# additional linker flags
MYLDFLAGS=

# additional C flags
MYCFLAGS= -DWITH_MPI -std=c99 -O3 -g -mkl=sequential -fopenmp

# additional Fortran flags
MYFFLAGS= -g

# ar command
AR= ar rc

# ranlib command
RANLIB= ranlib

# rm command
RM= rm -f

# tags program
CTAGS= ctags

# tags file
TAGS= tags

Cargar los módulos requeridos (Versión de Desarrolladores en Carter del RCAC)

Si está compilando en Carter de RCAC, es necesario cargar las variables ambientales para el paquete de compiladores de Intel y OpenMPI. Usted puede hacer eso con los siguientes comandos:

module load intel
module load openmpi

Compilación

Compilar debe ser sencillo ahora. En primer lugar, ejecute el comando make. Esto verificará que todo esté en orden para la compilación de todo el paquete (si sólo necesita la biblioteca puede ejecutar make libefp.).

make

Si make se ejecutó sin errores, ahora debe comprobar que el programa funciona correctamente. Esto se hace mediante la ejecución de una serie de cálculos precargados que se corren a través de un script, el cual se llama usando los comandos make check. Al menos debe ejecutar el primero de ellos:

make check

Para probar código paralelo OpenMP (paralelización entre los núcleos):

make check-omp

Para probar código paralelo MPI (paralelización entre nodos):

make check-mpi

Por último, para compilar todo el programa, ejecute el comando make install.

make install

¿Cómo ejecutar LibEFP?

Si la biblioteca ha sido compilado correctamente, para ejecutar un trabajo LibEFP se necesita un archivo de entrada y otro de parámetros .efp.

Con el archivo de parámetros ubicado en el mismo directorio que el archivo de entrada, un trabajo de LibEFP se puede ejecutar con el comando:

libefp LibEFP_INPUT_NAME.in > LibEFP_OUTPUT_NAME.out

Trabajos de EFP-MD se pueden ejecutar con el comando:

efpmd EFPMD_INPUT_NAME.in > EFPMD_OUTPUT_NAME.out

Abajo se proveen más detalles.

Ejemplo de archivo de entrada de LibEFP/EFPMD

Un ejemplo de un corto archivo de entrada para una simulación NPT EFP-MD:

 run_type md
 ensemble npt
 time_step 2
 print_step 1
 velocitize true
 pressure 1.0
 coord points
 terms elec pol disp xr
 elec_damp overlap
 disp_damp overlap
 pol_damp tt
 enable_pbc true
 periodic_box 30.0 30.0 30.0
 enable_cutoff true
 swf_cutoff 10
 max_steps 250000
 userlib_path .
 temperature 300

fragment water
        -0.533          -2.036          -1.134
         0.341          -1.814          -1.517
        -0.337          -2.300          -0.211

fragment water
        -0.398           1.367          -1.467
         0.387           0.828          -1.697
        -0.112           1.901          -0.696

fragment water
         2.127           0.178           0.834
         1.680           1.046           0.921
         1.483          -0.381           0.351

fragment water
        -1.318           0.502           1.736
        -0.520           0.717           2.262
        -1.006          -0.146           1.070

Ejemplo de archivo PBS para ejecutar LibEFP/EFPMD en los Clústeres de la Universidad Purdue

Hay diversas versiones de LibEFP ya compiladas en los clústeres del RCAC. Para correr un trabajo de LibEFP a través del sistema de organización PBS, el usuario puede usar el siguiente formato de base:

#!/bin/bash -l
# FILENAME: EFPMD_JOB_NAME.pbs

# SHORT NAME OF THE JOB
#PBS -N EFPMD_JOB_NAME

# DECLARE THIS AS A NON-RERUNABLE JOB
#PBS -r n

# NAME OF THE QUEUE IN USE
#PBS -q yourqueue

# USER EMAIL FOR JOB STATUS UPDATES
#PBS -M youremail@purdue.edu

# SEND UPDATES WHEN ABORTING AND EXITING
#PBS -m ae

# AMOUNT OF RESERVED TIME IN THE COMMUNITY CLUSTER (ONE WEEK = 168 HOURS)
#PBS -l walltime=24:00:00

# AMOUNT OF NODES AND PROCESSORS PER NODE REQUESTED
#PBS -l nodes=4:ppn=16

# AMOUNT OF MEMORY (FOR ALL THE PROCESSORS) REQUESTED. OPTIONAL.
#PBS -l mem=128000MB

# LOAD INTEL AND OPENMPI LIBRARIES
module load intel
module load openmpi

# STORE PBS VARIABLES TO A FILE
cat $PBS_NODEFILE | uniq > pbsnodefile.$PBS_JOBID

# ENABLE PARALLEL COMPUTATION UP TO THE DESIRED NUMBER OF PARALLEL THREADS
export OMP_NUM_THREADS=16

# CHANGE TO THE DIRECTORY FROM WHICH YOU ORIGINALLY SUBMITTED THIS JOB
cd $PBS_O_WORKDIR

# EXECUTE 'EFPMD_JOB_NAME_EFPMD.in' WITH LIBEFP 1.3.1 WITH OUTPUT TO 'EFPMD_JOB_NAME.out'
mpirun -np 4 -machinefile pbsnodefile.$PBS_JOBID /group/lslipche/apps/libefp/libefp-1.3.1-beta-2015.11.13/bin/efpmd EFPMD_JOB_NAME.in > EFPMD_JOB_NAME.out

# PROCESS 'EFPMD_JOB_NAME_EFPMD.out' TO PRODUCE THE TRAJECTORY FILE 'EFPMD_JOB_NAME.xyz'
/group/lslipche/apps/libefp/libefp-1.3.1-beta-2015.11.13/bin/trajectory.pl EFPMD_JOB_NAME.out > EFPMD_JOB_NAME.xyz