Preskočiť na obsah

Wannier90

Popis

Wannier90 je nástroj na post-processing výpočtov elektronovej štruktúry. Bežne sa používa spolu s kódmami teórie funkcionálu hustoty (DFT), napr. Quantum ESPRESSO, na výpočet maximálne lokalizovaných Wannierových funkcií, interpolácie pásov a elektrónových vlastností.


Oficiálna dokumentácia


Dostupné verzie

Aktuálne sú dostupné tieto verzie Wannier90:

  • Runtime závislosti:
    • Žiadne, potrebné knižnice a závislosti sa načítajú automaticky s modulom Wannier90/3.1.0-foss-2024a.

Modul Wannier90 môžete načítať nasledujúcim príkazom:

module load Wannier90/3.1.0-foss-2024a

  • Runtime závislosti:
    • Žiadne, potrebné knižnice a závislosti sa načítajú automaticky s modulom Wannier90/3.1.0-intel-2025b.

Modul Wannier90 môžete načítať nasledujúcim príkazom:

module load Wannier90/3.1.0-intel-2025b

  • Runtime závislosti:
    • Žiadne, potrebné knižnice a závislosti sa načítajú automaticky s modulom Wannier90/3.1.0-NVHPC-25.1.

Modul Wannier90 môžete načítať nasledujúcim príkazom:

module load Wannier90/3.1.0-NVHPC-25.1

MPI paralelizácia

Táto verzia Wannier90 nie je paralelizovaná na úrovni MPI.


Použitie

Wannier90 sa bežne používa v kombinácii s Quantum ESPRESSO. Workflow pozostáva z:

  1. Vykonanie DFT výpočtu (napr. s pw.x)
  2. Pripravenie vstupných súborov pre Wannier90 (*.win)
  3. Spustenie pre-processing v Wannier90
  4. Spustenie hlavného výpočtu Wannier90
wannier90.x -pp seedname.win
mpiexec -np ${SLURM_NTASKS} wannier90.x seedname.win

Ukážkový spúšťací skript

Tento skript si môžete skopírovať a upraviť ako wannier_run.sh a odoslať ho na výpočtový uzol pomocou sbatch wannier_run.sh.


#!/bin/bash
#SBATCH --job-name=                   # Name of the job
#SBATCH --account=                    # Project account number
#SBATCH --partition=                  # Partition name (cpu_short, cpu_long, cpu_hm_short, cpu_hm_long)
#SBATCH --nodes=                      # Number of nodes
#SBATCH --ntasks=                     # Total number of MPI ranks
#SBATCH --cpus-per-task=              # Number of threads per MPI rank
#SBATCH --time=hh:mm:ss               # Time limit (hh:mm:ss)
#SBATCH --output=stdout.%j.out        # Standard output (%j = Job ID)
#SBATCH --error=stderr.%j.err         # Standard error
#SBATCH --mail-type=END,FAIL          # Notifications for job done or failed
#SBATCH --mail-user=                  # Email address for notifications

# === Metadata functions ===
log_job_start() {
    echo "================== SLURM JOB METADATA =================="
    printf " Job ID        : %s\n" "$SLURM_JOB_ID"
    printf " Job Name      : %s\n" "$SLURM_JOB_NAME"
    printf " Partition     : %s\n" "$SLURM_JOB_PARTITION"
    printf " Nodes         : %s\n" "$SLURM_JOB_NUM_NODES"
    printf " Tasks (MPI)   : %s\n" "$SLURM_NTASKS"
    printf " CPUs per Task : %s\n" "$SLURM_CPUS_PER_TASK"
    printf " Account       : %s\n" "$SLURM_JOB_ACCOUNT"
    printf " Submit Dir    : %s\n" "$SLURM_SUBMIT_DIR"
    printf " Work Dir      : %s\n" "$PWD"
    printf " Start Time    : %s\n" "$(date)"
    echo "========================================================"
}

log_job_end() {
    printf " End Time      : %s\n" "$(date)"
    echo "========================================================"
}

# === Load required modules ===
module purge
module load Wannier90/3.1.0-intel-2025b

# === Set working directories ===
# Use local /work scratch (node-local, fastest I/O)
INIT_DIR="${SLURM_SUBMIT_DIR}"
WORK_DIR="/work/${SLURM_JOB_ID}"
mkdir -p "$WORK_DIR"

# === Input/output file declarations ===
INPUT_FILES="seedname.win"
OUTPUT_FILES="seedname.wout"

# === Copy input files to scratch ===
[ -n "$INPUT_FILES" ] && cp $INPUT_FILES "$WORK_DIR"

# === Change to working directory ===
cd "$WORK_DIR" || { echo "Failed to cd into $WORK_DIR"; exit 1; }

log_job_start >> "$INIT_DIR/jobinfo.$SLURM_JOB_ID.log"

# === Run Wannier90 ===
export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK}
mpiexec -np ${SLURM_NTASKS} wannier90.x seedname.win
# For the non-MPI-parallelized build (NVHPC-25.1) use instead:
# wannier90.x seedname.win

# === Copy output files back ===
[ -n "$OUTPUT_FILES" ] && cp $OUTPUT_FILES "$INIT_DIR"

# === Optional: clean up scratch ===
# rm -rf "$WORK_DIR"

log_job_end >> "$INIT_DIR/jobinfo.$SLURM_JOB_ID.log"
Created by: Marek Štekláč, Marek Štekláč