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.