Quantum ESPRESSO (pw.x)

SkillDev tools

Generate and manage Quantum ESPRESSO (pw.x) DFT calculations. Use when the user requests QE, Quantum ESPRESSO, pw.x, or plane-wave pseudopotential calculations outside VASP.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Quantum ESPRESSO (pw.x) skill

What this skill tells your AI

The instructions your AI receives, as published by hello-qm/catgo-lrg in .claude/skills/qe/SKILL.md and read by ahel’s review.

When to Use

  • User explicitly requests Quantum ESPRESSO / QE / pw.x
  • User needs norm-conserving or ultrasoft pseudopotentials (not PAW-only like VASP)
  • User wants open-source plane-wave DFT
  • User needs ph.x phonon calculations (hand off to analysis/phonopy/SKILL.md for post-processing)

Prerequisites

  1. QE binaries (pw.x, pp.x) accessible on HPC
  2. Pseudopotential library (SSSP or PseudoDojo recommended) in a known directory
  3. Structure loaded in viewer — verify with catgo_view(action="get_state")

Workflow Steps

1. Verify structure

catgo_view(action="get_state")

2. Create workflow

catgo_workflow_engine(action="create", params={"name": "QE relaxation - TiO2"})

3. Add QE task

CatGo does not yet have a native QE engine. Use task_type: "shell" with input file generation.

catgo_workflow_engine(action="add_task", params={
  "workflow_id": "wf_xxx",
  "task_type": "shell",
  "name": "qe_relax",
  "command": "pw.x -in relax.in > relax.out",
  "input_files": {
    "relax.in": "<pw.x input content>"
  },
  "system_name": "TiO2_relax"
})

When a @register_engine("qe") is added to CatGo, use task_type: "geo_opt" with software: "qe" instead.

4. Submit

catgo_workflow_engine(action="submit", params={"workflow_id": "wf_xxx"})

Input File Template — SCF

&CONTROL
  calculation = 'scf'
  pseudo_dir  = './pseudo/'
  outdir      = './tmp/'
  tprnfor     = .true.
  tstress     = .true.
/
&SYSTEM
  ibrav       = 0
  nat         = <natoms>
  ntyp        = <ntypes>
  ecutwfc     = 60.0
  ecutrho     = 480.0
  occupations = 'smearing'
  smearing    = 'mv'
  degauss     = 0.02
/
&ELECTRONS
  conv_thr    = 1.0d-6
  mixing_beta = 0.3
/
ATOMIC_SPECIES
  <element>  <mass>  <element>.UPF
CELL_PARAMETERS angstrom
  <a1x> <a1y> <a1z>
  <a2x> <a2y> <a2z>
  <a3x> <a3y> <a3z>
ATOMIC_POSITIONS angstrom
  <element> <x> <y> <z>
K_POINTS automatic
  <k1> <k2> <k3> 0 0 0

Parameter Guidance

ParameterTypical valueNotes
ecutwfc40-80 RyDepends on pseudopotential; SSSP suggests per-element values
ecutrho4-12x ecutwfcNC: 4x, US: 8-12x
conv_thr1.0d-6SCF convergence; tighten to 1.0d-8 for phonons
mixing_beta0.3-0.7Lower for metals/magnetic systems
K_POINTSauto from cell~0.03 A^-1 spacing, Gamma for molecules
smearing'mv'Marzari-Vanderbilt cold smearing; use 'gaussian' for insulators

Relaxation-Specific Parameters

Add to input for geometry optimization:

&CONTROL
  calculation = 'relax'    ! ions only
  ! or 'vc-relax'          ! ions + cell
/
&IONS
  ion_dynamics = 'bfgs'
/
&CELL                      ! only for vc-relax
  cell_dynamics = 'bfgs'
  press = 0.0
/
  • Use relax for slabs (fixed cell), vc-relax for bulk
  • For slabs: constrain bottom atoms with if_pos flags (0 = fixed)

Common Pitfalls

  1. ecutrho too low for US pseudopotentials — NC needs 4x ecutwfc, US needs 8-12x. Check pseudopotential header.
  2. Mixing divergence for metals — reduce mixing_beta to 0.1-0.2 and try mixing_mode = 'local-TF'
  3. Wrong ibrav — always use ibrav = 0 with explicit CELL_PARAMETERS to avoid ambiguity
  4. Missing pseudo files — ensure UPF filenames match ATOMIC_SPECIES exactly (case-sensitive)
  5. Slab vacuum too thin — need at least 15 A vacuum; add assume_isolated = '2D' for 2D corrections
  6. K-points along vacuum direction — slabs must use k3=1 (single k-point in z)

Signals

GitHub stars
196
Forks
23
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
quantum-espresso
Source
github.com/hello-qm/catgo-lrg