Scientific conventions
Use this reference for units, defaults, and override rules. For what to check before trusting a recommendation, see Check your recommendations.
Units
| Quantity | Unit | Field |
|---|---|---|
| k-point spacing | 1/Å | setting k_distance (group k_sampling) |
| Band-path point spacing | 1/Å | setting k_path_distance (group k_path) |
| q-point spacing | 1/Å | setting q_distance (group q_sampling) |
| Phonon-DOS mesh spacing | 1/Å | setting dos_q_distance (group phonon_dos) |
| Smearing width | Rydberg (Ry) | setting degauss (group occupations) |
| Wavefunction cutoff | Ry | setting ecutwfc_ry (group cutoffs) |
| Charge-density cutoff | Ry | setting ecutrho_ry (group cutoffs) |
| SCF convergence threshold | Ry | setting conv_thr (group convergence) |
| Density-mixing strength | Dimensionless | setting mixing_beta (group convergence) |
| SCF iteration limit | Integer | setting electron_maxstep (group convergence) |
| Force threshold | Ry/Bohr | setting forc_conv_thr (group relax) |
| Phonon frequency | cm⁻¹ | the phonon DOS (pwscf.phdos) and its step, phonon_dos.delta_e; the dispersion (pwscf.freq) |
Energies use Quantum ESPRESSO's Rydberg convention, not Hartree: 1 Ha = 2 Ry. The SCF threshold controls the estimated self-consistency error; it is not a k-point or cutoff convergence tolerance.
Every setting above is listed by goldilocks settings (with its group, type,
and default) and, once resolved for a structure, shown in the matching record
from goldilocks explain/the published goldilocks.json (k_sampling,
the k_path of a band task or of a phonon task's dispersion, a phonon
task's q_sampling and phonon_dos, occupations, cutoffs,
convergence and relax respectively). k_distance defaults to 0.15
for metals or when metallicity is unknown and 0.30 for a confirmed
non-metal; k_path_distance to 0.025; q_distance to 0.3; dos_q_distance to
0.10; forc_conv_thr to 1e-3 Ry/Bohr, or 1e-4 in the phonon tasks'
relaxation; degauss defaults to
0.01 Ry for metals; ecutwfc_ry/ecutrho_ry are decided together by the
cutoffs advisor from the selected pseudopotentials' own published
recommendations. When the table publishes no charge-density cutoff
(PseudoDojo), ecutrho_ry is its charge_density_dual times the resolved
ecutwfc_ry (a human one included), reported as the info notice
cutoffs.ecutrho_derived_from_dual.
K-point spacing and shifts
k_distance uses solid-state reciprocal lattice vectors, including the 2π
factor (matching AiiDA-QuantumESPRESSO's k-distance convention). For each
reciprocal vector b_i, the grid size is:
N_i = max(1, ceil(round(L_i / k_distance, 5))) along a periodic lattice vector
N_i = 1 along a vacuum axis
L_i is the longest |b_j| among the periodic lattice vectors that a
rotation of the cell's point group mixes with vector i, directly or through
the third, |b_i| itself included. Vectors the point group mixes therefore
get the same count, the larger one, and the mesh is one the point group maps
onto itself. The point group is searched on the cell's species, spin classes
included, at a 0.01 Å tolerance. Rounding to five decimal places avoids
numerical noise at integer boundaries. A smaller k_distance gives a denser
mesh. The human-override, k_distance, and k_grid paths all default to
shift [0, 0, 0] (Gamma-centered) when no explicit shift is given; the
ML-based k-point model (qrf-kpoints) is wired into k_distance's own
heuristic-vs-ml resolution, not into shift selection. In Quantum ESPRESSO's
K_POINTS automatic convention this includes Γ (the reciprocal-space
origin), even for even-sized meshes; a shift flag of 1 means a half-grid
shift on that axis.
A vacuum axis is a lattice vector along which the cell has an atom-free slab
wider than 5 Å (the geometry record's vacuum_axes), so a slab gets one
k-point across its vacuum and a molecule in a box the Γ-point alone, for any
k_distance or k_index; an explicit k_grid is written as given.
A phonon task's q-point mesh (q_distance) and phonon-DOS mesh
(dos_q_distance) follow the same formula on the written cell, vacuum axes
and mixed vectors included. An explicit q_grid is the q-point mesh as
given, but is refused unless every symmetry operation pw.x keeps maps it onto
itself, with one division along each vacuum axis and equal counts on mixed
vectors (see Check the phonon tasks).
Band path spacing
A band task's bands step runs a path of high-symmetry lines instead of a
mesh (see Check the band structure path),
and a phonon task's dispersion step the same path.
k_path_distance follows k_distance's convention, 2π included. A segment
of the path of length L, measured with the written cell's reciprocal
vectors (in the plane of a slab), takes
n = max(1, ceil(round(L / k_path_distance, 5)))
equal steps, so no step is longer than k_path_distance. pw.x runs every
point of the path: the sum over its branches of their steps plus one, per
spin channel. matdyn.x runs every point of the dispersion's path once, by
the same sum; on fixed occupations, unless isolation='slab', that path
lists each Γ inside a branch twice, ending one branch and starting the
next, and a segment into Γ can take a few more steps (49 becomes 50), so
that it lands on Γ exactly (see
Check the phonon tasks). The default,
0.025 Å⁻¹, is aiida-quantumespresso's bands.yaml (balanced); the
setting's lower bound is 0.001 Å⁻¹.
Defaults
| Setting | Default |
|---|---|
| Target | Quantum ESPRESSO, SCF single point |
| Exchange-correlation functional | PBEsol |
| Pseudopotential accuracy tier | efficiency (only usable tier today, see below) |
| SCF threshold / total-energy threshold | conv_thr = nat × 0.2e-9 Ry / etot_conv_thr = nat × 1e-5 Ry |
| Mixing / iteration limit | mixing_beta 0.4 / electron_maxstep 80 |
| Hubbard +U (d/f compounds with O or F) | Built-in Dudarev U_eff table, see Check Hubbard +U |
| Fixed Hubbard occupations (+U) | mixing_fixed_ns unset (QE's 0) |
| Hubbard projectors (+U) | hubbard_projectors ortho-atomic |
| Confirmed metal, or metallicity unconfirmed | smearing, cold, degauss 0.01 Ry |
| Confirmed non-metal | fixed, no width, where it can run; otherwise smearing as above |
band task's bands step |
k_path_distance 0.025 Å⁻¹; nbnd three times the occupied bands |
| Phonon tasks' relaxation | forc_conv_thr 1e-4 Ry/Bohr (the relax and vc-relax tasks: Quantum ESPRESSO's 1e-3) |
| Phonon tasks' first step | k-mesh raised against the q-mesh; no max_seconds, a job timer at 95% of the walltime |
| Phonon tasks' ph step | q_distance 0.3 Å⁻¹; tr2_ph 1e-18, alpha_mix(1) 0.4, nmix_ph 8 |
| Phonon tasks' q2r and phonon_dos steps | asr simple; dos_q_distance 0.10 Å⁻¹, every 1 cm⁻¹ |
| Phonon tasks' dispersion step | the band task's path at k_path_distance 0.025 Å⁻¹ |
conv_thr/etot_conv_thr scale with the structure's atom count nat, not a
fixed constant: for Si (nat=8) this gives conv_thr = 1.6e-9 Ry and
etot_conv_thr = 8e-5 Ry, matching real goldilocks explain output. The
products are exact decimals (nat=14 gives 2.8e-9), and the input writes
every real namelist value to at most 12 significant digits.
mixing_beta and electron_maxstep are fixed defaults. mixing_fixed_ns is
never set by default; see Check SCF convergence.
Today efficiency is the only usable pseudopotential accuracy tier: there is
no setting to request precision, and pinning a precision-tier
pseudo_table_id makes pseudopotential resolution Unavailable rather than
switching tiers (verified:
--set pseudo_table_id=pseudodojo-pbesol-precision-sr on Si.cif errors
with accuracy is precision, requested efficiency). This is a genuine
current gap, not a doc omission.
Metallicity comes from is_metal (FieldState[Metallicity]): a confirmed
non-metal gets fixed occupations; a confirmed metal, or a structure where
composition alone cannot confirm metallic character (is_metal is
Unavailable), gets smearing. This is deliberate -- a wrong-but-plausible
fixed-occupations run is worse than an unnecessary but correct smearing run.
The phonon tasks are the exception: ph.x treats a smearing run as a metal,
which an insulator is not, so they refuse smearing or tetrahedra on a
composition that is not all-metallic until you set is_metal=metal or the
run is on fixed occupations, which is_metal=non_metal alone does not give
the runs described below (see
the phonon tasks).
A non-metal gets fixed only where both spin channels hold a whole number of
electrons: an even electron count without spin polarization (with or without
spin-orbit coupling), any count on a spin-polarized spin-orbit run, or a
collinear spin-polarized run with an integer
tot_magnetization of the electron count's parity (one you set, or 0 for a
magnetic_ordering compensated by symmetry). Otherwise it gets smearing,
so no default is refused before generation; see
Check electronic occupations.
Each per-step advisor module under src/goldilocks_core/advisors/ documents
and owns its own heuristic default (e.g. occupations.py for smearing,
convergence.py for SCF thresholds, functional.py for the default
functional); there is no single parameters/policy module. The default code
and task, quantum_espresso and scf_single_point, are the CLI's
--code/--task defaults and those of the HTTP/MCP request document
(server/documents.py).
Spin, dispersion, and electronic-character heuristics are described in Check your recommendations. Pseudopotential compatibility exceptions belong to the table guide.
Override precedence
Fields below are --set-able keys (see goldilocks settings for the full,
live list) that set_overrides.build_overrides turns into a RunOverrides
object for one task, consumed by service.advise()/generate() and their
task variants. Each key reaches the steps of that task it applies to; a key
no step of the task reads is refused, and steps.<step>.<key> sets one step
only, ahead of the plain key for that step (see the
CLI reference). Leaving a key unset
leaves the choice to Goldilocks's heuristics, or -- for is_metal,
is_magnetic, and k_distance, where an ML tier is wired and resolves
ahead of the heuristic -- to a real model prediction (human > ml > llm >
heuristic; see goldilocks settings for each key's actual sources).
k_gridwins overk_distance; either one bypasses the heuristic k-point sizing entirely (thek_sampling.grid_and_distance_conflictinfo warning fires if both are given).- A
dostask's nscf step has a protocol tier between your settings and the ML tier, for that step only: k_distance 0.10 Å⁻¹ andtetrahedra_optoccupations (aiida-quantumespresso'spdos.yaml, balanced). Its values readheuristicwith the protocol named insource_note;humanmeans only a value set in the request. A setting you give replaces the protocol field by field: ashiftalone keeps the protocol's k_distance, and asmearing_type/degaussalone keepstetrahedra_optand is not applied to the nscf step. - A
bandtask's bands step has protocol defaults of its own:k_path_distance0.025 Å⁻¹ and three times the occupied bands (aiida-quantumespresso'sbands.yaml), readheuristicwith the protocol named insource_note.nbndreplaces the band count, andextra_bandsadds to it. The step takes the scf step's occupations, atetrahedra_optwritten as cold smearing at 0.01 Ry, sooccupations,smearing_typeanddegaussset the scf step only. Its scf step derives notot_magnetization = 0for a compensatedmagnetic_ordering, and a collinear band task refuses one you set (see the band structure path). - A phonon task holds its first step's k-mesh against its q-point mesh after
every k tier: a mesh the request did not set is raised, to the next
multiple of each q-axis with smearing or tetrahedra and to at least it with
fixed occupations, and a
k_grid,k_indexork_distanceyou set is used as given, withphonon.k_grid_coarser_than_qorphonon.k_grid_not_commensuratewhere it falls short.q_gridwins overq_distance(theq_sampling.grid_and_distance_conflictinfo warning fires if both are given). The phonon tasks' protocol values,forc_conv_thr1e-4 Ry/Bohr for their relaxation (aiida-quantumespresso's pwbase.yaml),q_distance0.3 Å⁻¹ and the ph.x settings (its phbase.yaml),dos_q_distance0.10 Å⁻¹, and the dispersion'sk_path_distance0.025 Å⁻¹ (itsbands.yaml), readheuristicwith the protocol named insource_note, and a value you set replaces each one alone. The relaxation'sforc_conv_thrhas no ML or LLM tier: a value you set wins over the protocol, which wins over Quantum ESPRESSO's 1e-3, and one looser than 1e-4 gets the warningphonon.loose_force_threshold. smearing_typeanddegaussare independent overrides in theoccupationsgroup;degaussdefaults to0.01Ry (the metallic cold-smearing default) if smearing is chosen without an explicit value.occupations='fixed'always carries nosmearing_type/degauss.conv_thr,etot_conv_thr,mixing_beta, andelectron_maxstepoverride independently; an unspecifiedconv_thr/etot_conv_thrfalls back to the per-atom-scaled formula (see Defaults above), not a fixed constant.etot_conv_thrapplies to relax and vc-relax only, the runs that compare energies between ionic steps.mixing_beta,mixing_mode,mixing_fixed_nsandelectron_maxsteptune the SCF loop, so they apply to the scf, relax and vc-relax steps and not to adostask's nscf step or abandtask's bands step, which pw.x diagonalizes once in the scf step's density.conv_thrsets their diagonalization threshold instead,max(1e-13, 0.1 × min(1e-2, conv_thr / nelec))(Quantum ESPRESSO's setup.f90).- The functional comes from the
functionalsetting (defaultPBEsol). There is currently no setting to choose the pseudopotential accuracy tier -- it is hardcoded toefficiency; pinning aprecision-tierpseudo_table_idwill make pseudopotential resolutionUnavailablerather than switch tiers (see Defaults above). This is a known current gap, not a doc omission. hubbard_projectorschooses the projectors of the HUBBARD card when an element gets +U, for every task, and changes nothing without +U; a U value is used unchanged with either projector type (see Check Hubbard +U).spin_polarizedandspin_orbit_couplingare independent settings (groupmagnetic) consumed together by one combined advisor,magnetic_config.py, specifically so that enabling one can never silently clear or ignore the other.use_vdwexplicitly enables or disables dispersion.methodalone changes the method only if dispersion is otherwise enabled; it does not enable dispersion for a 3D or unknown structure. Enabled dispersion defaults tod3bjif no method is given.use_vdw=trueis refused for a functional without D3(BJ) parameters, which is any functional except PBE and PBEsol (LDA included).- The single setting
pseudo_table_idpins an explicit table id instead of automatic selection. An explicit table must still satisfy the already-decided functional/accuracy/relativistic-treatment/element-coverage requirements, or the whole pseudopotential resolution becomesUnavailable(naming which tables would have matched); pinning a table never changes the requested functional, and (today) accuracy can't be changed via any setting at all -- see the accuracy-tier gap noted above.
Relativistic modes
relativistic is a derived value, not a settable field -- it is shown in
goldilocks explain/goldilocks.json, and as each pseudopotential table's
own relativistic classification in goldilocks assets/capabilities.
relativistic value |
Meaning |
|---|---|
scalar |
Scalar relativistic effects, without explicit SOC |
full |
Fully relativistic data, needed for explicit SOC |
non-relativistic |
No relativistic treatment |
It is always derived from spin_orbit_coupling: Goldilocks requests full
when SOC is enabled and scalar otherwise. There is no direct override for
the relativistic treatment itself. Pinning a pseudo_table_id whose own
relativistic classification does not match what spin_orbit_coupling
implies makes pseudopotential resolution Unavailable (it does not override
the derived requirement). Fully relativistic files alone do not enable SOC.
With SOC enabled, QE generation writes noncolin = .true. and
lspinorb = .true., a noncollinear run whether or not it is magnetic;
otherwise spin-polarized advice produces a collinear nspin = 2 run.
tot_magnetization belongs to the collinear run only, since pw.x stops on
it without nspin = 2: it is refused before generation together with
spin_orbit_coupling, and ignored with a warning when spin_polarized is
explicitly false. A collinear band task refuses it too, since bands.x
stops on it, and so does a phonon task with smearing or tetrahedra, since
ph.x refuses the two Fermi energies it gives there. The phonon tasks also
refuse spin_orbit_coupling together with a Hubbard U, since ph.x's DFPT+U
treats collinear spins only. A noncollinear run with fixed occupations needs no
tot_magnetization; its moments come from starting_magnetization. A
magnetic noncollinear run also writes angle1/angle2 for every species:
the direction of moment_direction, a lattice direction of the uploaded
cell, [0, 0, 1] by default (see
Check magnetism and spin-orbit coupling).