Como Mandar Wien2k

Wien2k requiere de un fichero especial. Los scripts se envían al sistema de colas con el comando

qsub script_file

script_wien de script que ejecuta el programa run_lapw en paralelo es

#!/bin/bash
#PBS -l nodes=[val]:ppn=[val]
#PBS -l walltime=[val]
#PBS -l mem=[val]

# Vamos a nuestro home
cd $PBS_O_WORKDIR

#Creamos el fichero .machines
cat $PBS_NODEFILE |cut -c1-6 >.machines_current
aa=$(wc -l .machines_current |cut -d " " -f 1)
echo '#' > .machines

i=1
while [ $i -le $aa ];do
echo -n '1:' >>.machines
head -$i .machines_current |tail -1 >> .machines
let i=i+1
done
echo 'granularity:1' >>.machines
echo 'extrafine:1' >>.machines

#Nuestro directorio de scratch
scrt=/scratch/$USER/$(echo $PBS_O_WORKDIR |xargs basename)
outdir=bukatuta_$PBS_JOBID
export SCRATCH=$scrt/scratch

#Creamos el directorio
mkdir $scrt
mkdir $scrt/scratch

#Copiamos los archivos al directorio scratch
#Usaremos cp -r $scrt para copiar también subdirectorios.
cp $PBS_O_WORKDIR/* $scrt
cp .machines $scrt

#Nos movemos de directorio
cd $scrt

#Ejecutamos WIEN2k en paralelo
run_lapw -p
#Movemos los archivos finales
mkdir  $PBS_O_WORKDIR/$outdir
mv -f $scrt/* $PBS_O_WORKDIR/$outdir
mv -f $scrt/.machines $PBS_O_WORKDIR/$outdir

#Borramos el directorio
rmdir $scrt
rm .??*

Las líneas que comienzan con #PBS son órdenes para el gestor de colas que seleccionan:

nodes: Número de nodos en los que se va a ejecutar el programa (ejemplo [val]=2).

ppn: Número de microprocesadores por nodo que va a usar el programa (ejemplo [val]=4).

mem: Memoria RAM reservada para el cálculo, medida en mb o gb (ejemplo: [val]=100mb).

walltime: Tiempo de microprocesador reservado en formato hh:mm:ss (ejemplo: [val]=24:00:00).

En el script la variable $USER devuelve el nombre del usuario, $PBS_O_WORKDIR el directorio de trabajo desde donde se ejecuta el comando qsub$PBS_JOBID el número de identificación del trabajo.