--- 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 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": "" }, "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 = ntyp = 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 .UPF CELL_PARAMETERS angstrom ATOMIC_POSITIONS angstrom K_POINTS automatic 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 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)