SIESTA
SkillProductivityGenerate 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.
No other account needed.
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
- SIESTA binary accessible on HPC (
siesta --version) - Pseudopotentials available (.psf or .psml format)
- 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
| Parameter | Typical value | Notes |
|---|---|---|
| PAO.BasisSize | SZ / DZ / DZP / TZP | Single/double/triple-zeta + polarization |
| PAO.EnergyShift | 50-200 meV | Basis confinement; lower = more diffuse, more accurate |
| MeshCutoff | 200-400 Ry | Real-space grid fineness; 300 Ry usually sufficient |
| DM.MixingWeight | 0.05-0.3 | SCF mixing; lower for metals/difficult convergence |
| DM.Tolerance | 1.0d-4 | Density matrix convergence criterion |
| MaxSCFIterations | 200 | Increase for difficult systems |
Common Pitfalls
- MeshCutoff in Ry, not eV — 300 Ry = 4082 eV. Do not confuse with plane-wave cutoff.
- Basis set quality — SZ is fast but inaccurate; DZP is the practical minimum for publishable results
- Ghost atoms — PAO.EnergyShift too large can cause basis-set superposition error (BSSE)
- Pseudopotential format — use .psf (Siesta native) or .psml (PSML standard). Not UPF.
- Linear scaling — enable with
SolutionMethod OrderNonly for >1000 atoms with a gap. Metals need diagonalization. - Coordinate format — verify
AtomicCoordinatesFormatmatches your data (Ang vs Fractional vs Bohr) - Memory for diagonalization — large systems with
SolutionMethod diagonneed 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