Clúster HPC UAF · Guía de uso
Cálculos con FLOSIC
Cómo preparar, enviar y revisar un cálculo de FLOSIC2020 en el clúster de la Unidad Académica de Física, desde el primer archivo hasta leer la energía final.
Qué es FLOSIC
FLOSIC es un programa de estructura electrónica para átomos y moléculas (no maneja sistemas periódicos). Resuelve las ecuaciones de Kohn-Sham con bases gaussianas y aplica la corrección de autointeracción Fermi-Löwdin (FLO-SIC), que elimina el error de autointeracción de los funcionales LDA, GGA y meta-GGA. Está basado en NRLMOL y lo desarrolla el grupo de la Universidad de Texas en El Paso.
Además de las posiciones de los átomos, FLOSIC usa las posiciones de los FODs (Fermi-orbital descriptors): un punto en el espacio por cada electrón, que se puede ver como una “posición clásica” del electrón. El programa calcula fuerzas sobre los FODs y los va moviendo hasta minimizar la energía.
Versión
FLOSIC2020
Módulo
flosic/2020
Partición
opteron (n01, n02)
Por nodo
4 núcleos · 3 GB
No se ejecuta en galileo
galileo es el nodo de acceso: ahí se preparan los archivos y se envían los trabajos, pero los cálculos corren en los nodos de cómputo a través de Slurm. Si intentas module load flosic/2020 en galileo verás un mensaje de error con instrucciones; es lo esperado.
Archivos de ejemplo
El ejemplo es la molécula de LiH de la documentación oficial. Descarga los cuatro archivos y súbelos a un directorio en tu cuenta de galileo, o créalos directamente siguiendo los pasos de abajo.
Paso a paso
1. Crea un directorio para el cálculo
FLOSIC escribe unos 50 archivos en el directorio donde corre. Usa un directorio distinto para cada cálculo; si reutilizas uno, los archivos del cálculo anterior pueden mezclarse con el nuevo.
mkdir -p ~/flosic/lih && cd ~/flosic/lih
2. Geometría: CLUSTER
Define el funcional, la simetría, los átomos (coordenadas en bohr, número atómico y ALL para todos los electrones), la carga neta y el espín neto.
GGA-PBE*GGA-PBE (DF TYPE EXCHANGE*CORRELATION) NONE (TD, OH, IH, X, Y, XY, ... OR GRP) 2 (NUMBER OF INEQUIV. ATOMS) 0.0000 0.0000 0.0000 3 ALL 0.0000 0.0000 3.0139 1 ALL 0.0 0.0 (NET CHARGE AND NET SPIN)
Otros funcionales: LDA-PW91*LDA-PW91, GGA-PBE*GGA-NONE (solo intercambio), etc. La lista completa está en la documentación.
3. Posiciones iniciales de los FODs: FRMORB
La primera línea dice cuántos FODs hay con espín arriba y con espín abajo. Siguen las coordenadas de los de espín arriba y después las de espín abajo. En general hay FODs cerca de cada núcleo (capas internas), en los enlaces y en los pares libres.
2 2 0.000 0.000 0.000 1 1 0.000 0.000 2.500 1 2 0.000 0.000 0.000 1 1 0.000 0.000 2.500 1 2
Importante: dos columnas extra en cada FOD
Esta versión espera, después de x y z, el peso y la equivalencia de simetría de cada FOD. Sin simetría escribe 1 k, donde k es el número del FOD dentro de su espín (1, 2, 3… y vuelve a empezar en 1 para el espín abajo).
La documentación oficial todavía muestra solo x y z. Con ese formato el SCF termina, pero el programa se detiene al final con Fortran runtime error: Bad integer for item 4 in list input.
4. Opciones del cálculo: NRLMOL_INPUT.DAT
Si no existe, FLOSIC lo crea con valores por defecto, pero el valor por defecto de CALCTYPEV es 'LBFGS', que también mueve los átomos. Para optimizar solo los FODs usa el archivo de ejemplo, que trae:
CALCTYPEV = 'SCF-ONLY'
Otras opciones útiles: MAXSCFV (máximo de iteraciones SCF), SCFTOLV (tolerancia), SPNPOLV = 'Y' para cálculos con espín polarizado y DFTD3V = 'Y' para la corrección de dispersión de Grimme.
5. El script de Slurm: flosic.sbatch
#!/bin/bash
#SBATCH -J flosic
#SBATCH -p opteron # nodos n01 y n02 (AMD Opteron, 4 núcleos)
#SBATCH -N 1 # FLOSIC corre en un solo nodo
#SBATCH -n 4 # 4 procesos MPI = todos los núcleos del nodo
#SBATCH --mem=3G # el nodo tiene ~3.8 GB disponibles
#SBATCH -o %x-%j.out # salida: flosic-<jobid>.out
set -euo pipefail
module load flosic/2020
# Respaldo de los FODs de entrada antes de que el programa los mueva
cp FRMORB "FRMORB.antes-${SLURM_JOB_ID}"
srun --mpi=pmix nrlmol_exe
echo "Última iteración (IT, ..., EDFT+SIC en la 6a columna):"
tail -1 SUMMARY- Ejecuta con
srun --mpi=pmix, no conmpirun: así Slurm reparte los procesos y lleva la cuenta de los recursos. -n 4es el máximo por nodo. Para moléculas muy pequeñas puedes usar-n 2y dejar espacio a otros usuarios.- El módulo fija
OPENBLAS_NUM_THREADS=1para que cada proceso MPI use un solo núcleo.
6. Envía el trabajo y espera
sbatch flosic.sbatch squeue -u $USER
Cuando ya no aparezca en squeue, revisa cómo terminó:
sacct -X -o JobID,JobName,NodeList,State,Elapsed | tail -5
El ejemplo de LiH tarda unos 4 minutos y debe terminar como COMPLETED.
Revisar resultados
| Archivo | Qué contiene |
|---|---|
SUMMARY | Una línea por iteración SCF. La 6a columna es la energía total con corrección, EDFT+SIC, en Hartree. |
SIC_ENERGY | Desglose de la corrección de autointeracción por orbital. |
FRMORB | Posiciones nuevas de los FODs, listas para el siguiente paso. |
fforce.dat | Fuerzas sobre los FODs. |
records | Historial de energía, posiciones y fuerzas de cada paso. |
flosic-<jobid>.out | Salida del trabajo; aquí aparecen los errores si algo falla. |
tail -1 SUMMARY grep -iE 'error termination|fortran runtime' flosic-*.out
Para el LiH de ejemplo, la energía final debe ser ≈ −8.05283 Ha (la documentación da −8.052832) y el segundo comando no debe mostrar nada.
Optimizar los FODs
Cada ejecución hace un SCF completo y un solo paso de optimización de los FODs: al terminar, FRMORB ya tiene las posiciones nuevas. Para seguir optimizando, vuelve a enviar el mismo script en el mismo directorio:
sbatch flosic.sbatch
Repite hasta que la energía de SUMMARY deje de cambiar entre ejecuciones (por ejemplo, menos de 10−6 Ha) y las fuerzas en fforce.dat sean pequeñas. El script guarda una copia de los FODs de entrada (FRMORB.antes-<jobid>) por si necesitas regresar a un paso anterior.
Límites y recomendaciones
- Moléculas pequeñas y medianas. Cada nodo tiene 4 núcleos y unos 3.8 GB de RAM. Los tamaños máximos de malla, base y número de orbitales están fijos al compilar; si tu sistema no cabe, el programa se detiene. Escríbeme antes de intentar algo grande.
- Sin GPU. FLOSIC no usa GPU, así que no tiene sentido enviarlo a la partición
gpu. - Un directorio por cálculo, siempre.
- Revisa los FODs iniciales. Las posiciones iniciales influyen mucho en el resultado. Hay generadores como fodMC, pero ninguno es una caja negra: revisa lo que producen antes de usarlo.
- Bases alternativas disponibles en el nodo:
$FLOSIC_BASIS(opciónBASISV).
Más información
- Documentación oficial (PDF), también disponible en los nodos en
$FLOSIC_HOME/share/: repositorio FLOSIC/PublicRelease_2020. - Ayuda del módulo:
module help flosic/2020. - Al publicar resultados, cita el software y los artículos que aparecen en el README del repositorio.