| name | quantum-espresso |
| description | 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.
|
| compatibility | Requires Quantum ESPRESSO installed on the HPC target. Pseudopotential files (UPF) must be available in the configured pseudo_dir.
|
Quantum ESPRESSO (pw.x)
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
- QE binaries (
pw.x, pp.x) accessible on HPC
- Pseudopotential library (SSSP or PseudoDojo recommended) in a known directory
- 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
| Parameter | Typical value | Notes |
|---|
| ecutwfc | 40-80 Ry | Depends on pseudopotential; SSSP suggests per-element values |
| ecutrho | 4-12x ecutwfc | NC: 4x, US: 8-12x |
| conv_thr | 1.0d-6 | SCF convergence; tighten to 1.0d-8 for phonons |
| mixing_beta | 0.3-0.7 | Lower for metals/magnetic systems |
| K_POINTS | auto 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
- ecutrho too low for US pseudopotentials — NC needs 4x ecutwfc, US needs 8-12x. Check pseudopotential header.
- Mixing divergence for metals — reduce
mixing_beta to 0.1-0.2 and try mixing_mode = 'local-TF'
- Wrong ibrav — always use
ibrav = 0 with explicit CELL_PARAMETERS to avoid ambiguity
- Missing pseudo files — ensure UPF filenames match ATOMIC_SPECIES exactly (case-sensitive)
- Slab vacuum too thin — need at least 15 A vacuum; add
assume_isolated = '2D' for 2D corrections
- K-points along vacuum direction — slabs must use k3=1 (single k-point in z)