SIESTA

SkillProductivity

Generate and manage SIESTA DFT calculations. Use when the user requests SIESTA, numeric atomic orbital (NAO) DFT, or linear-scaling DFT for large systems.

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 SIESTA skill

What this skill tells your AI

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

When to Use

  • User explicitly requests SIESTA
  • User needs linear-scaling O(N) DFT for very large systems (1000+ atoms)
  • User wants numeric atomic orbital (NAO) basis sets
  • User needs TDDFT or electron transport (TranSIESTA)

Prerequisites

  1. SIESTA binary accessible on HPC (siesta --version)
  2. Pseudopotentials available (.psf or .psml format)
  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": "SIESTA relaxation"})

3. Add SIESTA task via shell

CatGo does not yet have a native SIESTA engine. Use task_type: "shell".

catgo_workflow_engine(action="add_task", params={
  "workflow_id": "wf_xxx",
  "task_type": "shell",
  "name": "siesta_relax",
  "command": "siesta < input.fdf > siesta.out 2>&1",
  "input_files": {
    "input.fdf": "<FDF input content>",
    "Si.psf": "{{pseudo_dir}}/Si.psf"
  },
  "system_name": "Si_bulk"
})

When a @register_engine("siesta") is added, use task_type: "geo_opt" with software: "siesta".

Input File Template — SCF

SystemName    TiO2_rutile
SystemLabel   tio2

NumberOfAtoms   <natoms>
NumberOfSpecies <nspecies>

%block ChemicalSpeciesLabel
  1  22  Ti
  2   8  O
%endblock ChemicalSpeciesLabel

PAO.BasisSize     DZP
PAO.EnergyShift   100 meV

LatticeConstant   1.0 Ang
%block LatticeVectors
  <a1x> <a1y> <a1z>
  <a2x> <a2y> <a2z>
  <a3x> <a3y> <a3z>
%endblock LatticeVectors

AtomicCoordinatesFormat Ang
%block AtomicCoordinatesAndAtomicSpecies
  <x> <y> <z>  <species_index>
%endblock AtomicCoordinatesAndAtomicSpecies

# Mesh and K-points
MeshCutoff        300 Ry
%block kgrid_Monkhorst_Pack
  <k1>  0  0  0.0
  0  <k2>  0  0.0
  0  0  <k3>  0.0
%endblock kgrid_Monkhorst_Pack

# SCF
MaxSCFIterations  200
DM.MixingWeight   0.1
DM.Tolerance      1.0d-4
XC.functional     GGA
XC.authors        PBE

# Electronic temperature
ElectronicTemperature  300 K

Relaxation Parameters

Add for geometry optimization:

MD.TypeOfRun      CG           # Conjugate gradient
MD.NumCGsteps     200
MD.MaxForceTol    0.02 eV/Ang
MD.VariableCell   .false.      # .true. for bulk cell optimization

For slabs, constrain atoms via %block GeometryConstraints.

Parameter Guidance

ParameterTypical valueNotes
PAO.BasisSizeSZ / DZ / DZP / TZPSingle/double/triple-zeta + polarization
PAO.EnergyShift50-200 meVBasis confinement; lower = more diffuse, more accurate
MeshCutoff200-400 RyReal-space grid fineness; 300 Ry usually sufficient
DM.MixingWeight0.05-0.3SCF mixing; lower for metals/difficult convergence
DM.Tolerance1.0d-4Density matrix convergence criterion
MaxSCFIterations200Increase for difficult systems

Common Pitfalls

  1. MeshCutoff in Ry, not eV — 300 Ry = 4082 eV. Do not confuse with plane-wave cutoff.
  2. Basis set quality — SZ is fast but inaccurate; DZP is the practical minimum for publishable results
  3. Ghost atoms — PAO.EnergyShift too large can cause basis-set superposition error (BSSE)
  4. Pseudopotential format — use .psf (Siesta native) or .psml (PSML standard). Not UPF.
  5. Linear scaling — enable with SolutionMethod OrderN only for >1000 atoms with a gap. Metals need diagonalization.
  6. Coordinate format — verify AtomicCoordinatesFormat matches your data (Ang vs Fractional vs Bohr)
  7. Memory for diagonalization — large systems with SolutionMethod diagon need significant memory; consider OrderN or parallelization

Signals

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