Wien2k

General

The program package Wien2k performs electronic structure calculations of solids using density functional theory (DFT). It is based on the full-potential (linearized) augmented plane-waves ((L)APW) + local orbitals (lo) method, one among the most accurate schemes for band structure calculations. Wien2k is an all-electron scheme including relativistic effects. Wien2k was developed at the Institute for Materials Chemistry at the Technical University, Vienna and is available on LRZ platforms with both serial and parallel versions.

Setup and access for Wien2k

The module package controls access to the software. Please load the appropriate module environment first after login to the system, in order to use the latest Wien2k version 11.1 or include the line in your script:

module load wien2k

To see where the Wien2k executables reside (such as the bin directory) and what environment variables are added to the PATH, type

module show wien2k

Follow the instruction in chapter "Quick start" in the usersguide to set up correctly your calculation. The registered user site provides further useful information.

Running Wien2k at LRZ

You can run Wien2k on the LRZ platforms using a script driven job and you can perform small test runs using an interactive shell. Sample scripts for the different platforms are provided below which you can modify according to your needs. Here you can find further scripts. Note that for parallel execution you need a ".machines" file in your working directory and to set the "-p" switch. Fine grained MPI parallel version of the programs lapw0, lapw1, and lapw2 are available.

A ".machines" file template is provided by Wien2k and is accessible here:

$WIENROOT/SRC_templates/.machines

If the ".machines" file does not exist, or if the "-p" switch is omitted, the serial versions of the programs are executed.

Linux-Cluster (SLURM): ICE, UV, and MPP

Interactive shell

Start an interactive shell with:

 salloc --ntasks=32  --partition=mpp1_inter

(ice1_inter for ICE, uv1_inter for UV)

 module load wien2k

loads the Wien2k environment

Now modify your ".machines" file and start your calculation, e.g. with:

 run_lapw -p -NI

Sample job script file

#!/bin/bash
#SBATCH -o /home/cluster/group/userID/mydir/job%j.out
#SBATCH -D /home/cluster/group/userID/mydir/
#SBATCH -J  jobname
#SBATCH --time=01:00:00
#SBATCH --ntasks=32
#SBATCH --get-user-env
#SBATCH --clusters=mpp1 %ice1 for ICE, uv1 for UV
#SBATCH --export=NONE
#SBATCH --mail-type=end
#SBATCH --mail-user=name@domain

source /etc/profile.d/modules.sh
# load the wien2k module
module load wien2k
#change to working directory
cd $OPT_TMP/mydir
export SCRATCH=./
#
# generate .machines file
rm -fr .machines
# for 32 cpus and 4 kpoints
nproc=32
#write .machines file
echo '#' > .machines
# example for an MPI parallel lapw0
echo 'lapw0:'`hostname`'
:'$nproc >> .machines
# k-point and mpi parallel lapw1/2
echo '1:'`hostname`':8' >> .machines
echo '1:'`hostname`':8' >> .machines
echo '1:'`hostname`':8' >> .machines
echo '1:'`hostname`':8' >> .machines
echo 'granularity:1' >>.machines
echo 'extrafine:1' >>.machines
#
# execute non spin-polarized system
run_lapw -p -NI 
# for spin-polarized system comment the previous line and uncomment the next line
##runsp_lapw -p -NI
Job control using SLURM

For more information concerning job submission using SLURM, see also here.

Submit job

 sbatch jobname

Check status of submitted jobs of user:

 squeue -u user-ID

SuperMUC (LoadLeveler)

Sample job script file

#!/bin/bash
#@ job_type = parallel
#@ environment = COPY_ALL
#@ node = 1
#@ total_tasks = 32
#@ requirements = (Pool == 1)
#@ class = general
#@ node_usage = not_shared
#@ network.mpi = sn_all,,us,,
#@ job_name = jobname
#@ notification = always
#@ notify_user = name@domain
#@ initialdir = $(home)/mydir   
#@ output = job$(jobid).out
#@ error = job$(jobid).err
#@ queue
. /etc/profile
. /etc/profile.d/modules.sh
# load the wien2k module
module load wien2k
#change to working directory
cd $WORK/mydir
export SCRATCH=./
#
# generate .machines file
rm -fr .machines
# for 32 cpus and 4 kpoints
nproc=32
#write .machines file
echo '#' > .machines
# example for an MPI parallel lapw0
echo 'lapw0:'`hostname`'    
:'$nproc >> .machines
# k-point and mpi parallel lapw1/2
echo '1:'`hostname`':8' >> .machines
echo '1:'`hostname`':8' >> .machines
echo '1:'`hostname`':8' >> .machines
echo '1:'`hostname`':8' >> .machines
echo 'granularity:1' >>.machines
echo 'extrafine:1' >>.machines
#
# execute non spin-polarized system
run_lapw -p 
# for spin-polarized system comment the previous line and uncomment the next line
##runsp_lapw -p -NI
Test job

To start a testing job use:

#@ class = test

Job control using LoadLeveler

For more information concerning job submission using LoadLeveler, see also here.

Submit job

llsubmit jobname

Check status of submitted jobs of user

llq -u user-ID 

Cancel submitted job

llcancel job-ID 

Documentation

The Wien2k Users Manual is particularly useful.

The Wien2k Textbooks website has a detailed description of the electronic structure methods available in Wien2k, and a set of technical notes.

For trouble shooting the keyword search in the Wien2k mailing list is very helpful.

Support

If you have any questions or problems with Wien2k on the different LRZ platforms, please don't hesitate to contact LRZ HPC support staff .