| name | vasp-static |
| description | VASP single-point energy calculation. Used standalone, as a pre-step for DOS/band structure, or to evaluate energy at a fixed geometry. |
VASP Single Point Calculation
Compute the total energy (and optionally charge density, wavefunction) at a fixed geometry. No ionic relaxation.
When to Use
- After geometry optimization — get a precise energy at the relaxed geometry with tighter settings
- Before DOS calculation — generate CHGCAR with fine k-mesh for subsequent non-SCF DOS
- Before band structure — generate CHGCAR for non-SCF band calculation
- Convergence testing — test ENCUT, k-points, or other parameters at fixed geometry
- Energy evaluation — compare energies of different configurations without relaxing
Discussion Checkpoints
🔴 Must discuss with user:
- Functional consistency — must match the functional used in the preceding geo_opt; mixing PBE geometry with SCAN single point introduces systematic errors
🟡 Recommend confirming:
- LORBIT (default: 11) — needed for projected DOS; set to 11 for per-atom orbital projections, omit if only total energy is needed
- NEDOS (default: 3001) — increase for DOS analysis to resolve fine features; 301 is sufficient for energy-only calculations
- ISMEAR — use -5 (tetrahedron) for DOS calculations, 0 (Gaussian) for general single points, 1 (Methfessel-Paxton) for metals
- LCHARG / LWAVE — set True if this single point feeds into a subsequent DOS or band structure calculation
🟢 Safe defaults:
- NSW = 0 (no ionic relaxation)
- IBRION = -1 (no ionic optimizer)
- EDIFF = 1E-5
- ISMEAR = 0, SIGMA = 0.05
Basic Single Point
from catgo.workflow import Workflow
from catgo.workflow.builtins import geo_opt, single_point
wf = Workflow("Single point energy")
struct = wf.add_task("structure_input", structure=structure_json)
sp = wf.add_task(single_point, structure=struct.output.structure,
system_name="TiO2_SP")
wf.submit()
MCP equivalent:
catgo_workflow_engine(action="create", params={"name": "Single point"})
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "single_point",
"software": "vasp",
"structure": "<json>",
"system_name": "TiO2_SP"
})
catgo_workflow_engine(action="submit", params={"workflow_id": "wf_xxx"})
After Optimization
Chain a single point after relaxation for a more accurate energy:
opt = wf.add_task(geo_opt, structure=struct.output.structure,
ISIF=2, system_name="relax")
sp = wf.add_task(single_point, structure=opt.output.structure,
ENCUT=600,
EDIFF=1e-6,
system_name="SP_precise")
Pre-DOS Single Point
Generate a converged charge density with a fine k-mesh for subsequent DOS:
sp = wf.add_task(single_point, structure=opt.output.structure,
LCHARG=True,
LWAVE=True,
ISMEAR=-5,
NEDOS=3001,
EDIFF=1e-6,
system_name="SP_for_DOS")
Pre-Band Structure Single Point
Generate CHGCAR for non-SCF band calculation:
sp = wf.add_task(single_point, structure=opt.output.structure,
LCHARG=True,
ICHARG=2,
system_name="SP_for_bands")
Convergence Testing
Test multiple ENCUT values at a fixed geometry:
wf = Workflow("ENCUT convergence")
struct = wf.add_task("structure_input", structure=structure_json)
for encut in [400, 450, 500, 550, 600]:
wf.add_task(single_point, structure=struct.output.structure,
ENCUT=encut, system_name=f"ENCUT={encut}")
wf.submit()
MCP equivalent:
catgo_workflow_engine(action="create", params={"name": "ENCUT convergence"})
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "structure_input",
"structure": "<json>"
})
# Repeat for each ENCUT value
catgo_workflow_engine(action="add_task", params={
"workflow_id": "wf_xxx",
"task_type": "single_point",
"software": "vasp",
"structure": "{{t_001.output.structure}}",
"ENCUT": 400,
"system_name": "ENCUT=400"
})
# ... repeat for 450, 500, 550, 600
Key Parameters
| Parameter | Default | Purpose |
|---|
| NSW | 0 | No ionic steps (fixed geometry) |
| IBRION | -1 | No ionic optimizer |
| EDIFF | 1e-5 | SCF convergence (use 1e-6 for precise energy) |
| NEDOS | 3001 | Number of DOS points (increase for DOS calculations) |
| LCHARG | False | Write CHGCAR (set True for DOS/band pre-calc) |
| LWAVE | False | Write WAVECAR (set True to restart from wavefunction) |
| ISMEAR | 0 | Gaussian smearing (use -5 for DOS with tetrahedron) |
| LORBIT | 11 | Write projected DOS (DOSCAR with per-atom projections) |
ISMEAR Guidance
| System type | ISMEAR | SIGMA | Notes |
|---|
| Insulator/semiconductor | 0 | 0.05 | Gaussian smearing (default) |
| Metal | 1 | 0.2 | Methfessel-Paxton |
| DOS calculation | -5 | N/A | Tetrahedron with Blochl corrections |
| Molecule in box | 0 | 0.01 | Small sigma, Gamma-only |
Rule: ISMEAR=-5 requires at least 3 k-points per direction. Do not use for Gamma-only calculations.
Output
The single_point task produces:
output.energy — total DFT energy in eV
output.structure — the (unchanged) input structure
Troubleshooting
| Problem | Fix |
|---|
| SCF not converging | Try ALGO=All, increase NELM=400, or AMIX=0.1 |
| Negative NBANDS warning | Increase NBANDS explicitly |
| Memory error | Reduce NCORE, or increase node count |
| Wrong energy for magnetic system | Set ISPIN=2, provide MAGMOM |