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 y $PBS_JOBID el número de identificación del trabajo.