Skip to content

dft.operators

Kohn-Sham operator and tiny-grid numerical references.

import mlx_atomistic.dft.operators

class DavidsonDiagonalizer
def __init__(config: EigensolverConfig = EigensolverConfig(), preconditioner: KineticPreconditioner = KineticPreconditioner())

Small block Davidson-style eigensolver.

The dense reference path is still used for tiny grids. Above that cutoff, this applies a conservative preconditioned residual iteration that avoids building the dense Hamiltonian.

Parameters

NameTypeDefaultDescription
configEigensolverConfigEigensolverConfig()
preconditionerKineticPreconditionerKineticPreconditioner()

Methods

def solve(operator: KohnShamOperator, *, n_orbitals: int, initial_orbitals: mx.array | None = None) -> DiagonalizationResult

Solve for the lowest occupied orbitals.

Parameters

NameTypeDefaultDescription
operatorKohnShamOperatorThe KohnShamOperator to diagonalize.
n_orbitalsintNumber of occupied orbitals to solve for.
initial_orbitalsmx.array | NoneNoneOptional starting orbital stack; None uses a deterministic random guess. Defaults to None.

Returns

  • DiagonalizationResult — A DiagonalizationResult for the lowest n_orbitals states (dense reference below the fallback size, preconditioned iteration above).
class DenseHamiltonianReference
def __init__(operator: KohnShamOperator)

Explicit dense Hamiltonian for tiny-grid validation.

Parameters

NameTypeDefaultDescription
operatorKohnShamOperator

Methods

def diagonalize(n_orbitals: int) -> DiagonalizationResult

Diagonalize the dense reference matrix.

Parameters

NameTypeDefaultDescription
n_orbitalsintNumber of lowest eigenpairs to return.

Returns

  • DiagonalizationResult — A DiagonalizationResult with the lowest n_orbitals eigenpairs (orthonormalized).
def matrix() -> np.ndarray

Build the dense matrix by applying the operator to basis vectors.

Returns

  • np.ndarray — The Hermitized dense Hamiltonian, shape (grid.size, grid.size).
def matvec(orbital: mx.array) -> mx.array

Apply the dense matrix to a single orbital.

Parameters

NameTypeDefaultDescription
orbitalmx.arrayA single real-space orbital of shape grid.shape.

Returns

  • mx.arrayH ψ as a grid-shaped array.
class DiagonalizationResult
def __init__(eigenvalues: mx.array, orbitals: mx.array, residuals: mx.array, orthonormality_error: float, iterations: int, converged: bool, metadata: dict = dict())

Small eigenproblem result bundle.

Parameters

NameTypeDefaultDescription
eigenvaluesmx.array
orbitalsmx.array
residualsmx.array
orthonormality_errorfloat
iterationsint
convergedbool
metadatadictdict()

Methods

def to_dict() -> dict

Return a JSON-safe summary.

Returns

  • dict — The eigenvalues, residuals, orthonormality error, iteration count, convergence flag, and metadata as a JSON-serializable dict.
class EigensolverConfig
def __init__(max_iterations: int = 16, tolerance: float = 1e-06, max_subspace_size: int = 12, dense_fallback_size: int = 512)

Configuration for iterative Kohn-Sham eigensolvers.

Parameters

NameTypeDefaultDescription
max_iterationsint16
tolerancefloat1e-06
max_subspace_sizeint12
dense_fallback_sizeint512
class KineticPreconditioner
def __init__(shift: float = 0.5)

Simple reciprocal-space kinetic preconditioner.

Parameters

NameTypeDefaultDescription
shiftfloat0.5

Methods

def apply(residual: mx.array, operator: KohnShamOperator) -> mx.array

Apply 1 / (0.5|G+k|² + shift) to a residual.

Parameters

NameTypeDefaultDescription
residualmx.arrayA real-space residual to precondition.
operatorKohnShamOperatorThe KohnShamOperator supplying the grid and k-point.

Returns

  • mx.array — The preconditioned residual, same shape as residual.
class KohnShamOperator
def __init__(grid: RealSpaceGrid, local_potential: mx.array, density: mx.array, hartree: mx.array, xc_potential: mx.array, effective_potential: mx.array, nonlocal_operator: NonlocalPseudopotentialOperator | None = None, kpoint: tuple[float, float, float] = (0.0, 0.0, 0.0))

Kohn-Sham Hamiltonian operator for a fixed density and local potential.

Parameters

NameTypeDefaultDescription
gridRealSpaceGrid
local_potentialmx.array
densitymx.array
hartreemx.array
xc_potentialmx.array
effective_potentialmx.array
nonlocal_operatorNonlocalPseudopotentialOperator | NoneNone
kpointtuple[float, float, float](0.0, 0.0, 0.0)

Methods

def apply_hamiltonian(orbitals: mx.array) -> mx.array

Apply H = T + V_eff.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).

Returns

  • mx.arrayH ψ (kinetic + effective local + any nonlocal term), same shape as orbitals.
def apply_hartree_xc_potential(orbitals: mx.array) -> mx.array

Apply only the Hartree plus exchange-correlation potential.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).

Returns

  • mx.array(V_H + V_xc) · ψ, same shape as orbitals.
def apply_kinetic(orbitals: mx.array) -> mx.array

Apply only the kinetic part.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).

Returns

  • mx.arrayT ψ at this operator’s k-point, same shape as orbitals.
def apply_local_potential(orbitals: mx.array) -> mx.array

Apply only the external local potential.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).

Returns

  • mx.arrayV_local · ψ, same shape as orbitals.
def from_density(grid: RealSpaceGrid, local_potential: mx.array, density: mx.array, *, xc_functional: ExchangeCorrelationFunctional | None = None, density_floor: float = 1e-12, nonlocal_operator: NonlocalPseudopotentialOperator | None = None, kpoint: Sequence[float] | None = None) -> KohnShamOperator

Build an operator from ρ and a local potential.

Parameters

NameTypeDefaultDescription
gridRealSpaceGridReal-space grid defining the FFT mesh.
local_potentialmx.arrayExternal local (ionic) potential on the grid, shape grid.shape.
densitymx.arrayElectron density ρ on the grid, shape grid.shape.
xc_functionalExchangeCorrelationFunctional | NoneNoneExchange-correlation functional; None uses LDAExchangeCorrelation. Defaults to None.
density_floorfloat1e-12Lower clamp on the density for XC numerical stability. Defaults to 1e-12.
nonlocal_operatorNonlocalPseudopotentialOperator | NoneNoneOptional nonlocal pseudopotential operator. Defaults to None.
kpointSequence[float] | NoneNoneOptional Bloch k-point; None uses Γ. Defaults to None.

Returns

  • KohnShamOperator — A KohnShamOperator with the Hartree, XC, and effective potentials precomputed.
def rayleigh_quotients(orbitals: mx.array) -> mx.array

Return <ψᵢ|H|ψᵢ>/<ψᵢ|ψᵢ> for each orbital.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital stack (n_orbitals, *grid.shape).

Returns

  • mx.array — The per-orbital Rayleigh quotients (energy estimates), shape (n_orbitals,).
class SubspaceDiagonalizer
def __init__(max_iterations: int = 8, tolerance: float = 1e-06)

Operator-backed Rayleigh-Ritz diagonalizer for tiny prototype grids.

Parameters

NameTypeDefaultDescription
max_iterationsint8
tolerancefloat1e-06

Methods

def solve(operator: KohnShamOperator, *, n_orbitals: int) -> DiagonalizationResult

Solve the occupied subspace.

For this milestone the implementation intentionally uses the explicit tiny-grid reference matrix as the Rayleigh-Ritz space. The public solver boundary lets us replace this with an iterative Davidson path later.

Parameters

NameTypeDefaultDescription
operatorKohnShamOperatorThe KohnShamOperator to diagonalize.
n_orbitalsintNumber of occupied orbitals to solve for.

Returns

  • DiagonalizationResult — A DiagonalizationResult for the lowest n_orbitals states.
def apply_hamiltonian(orbitals: mx.array, effective_potential: mx.array, grid: RealSpaceGrid) -> mx.array

Apply T + V_eff using an explicit effective potential.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).
effective_potentialmx.arrayCombined local effective potential on the grid, shape grid.shape.
gridRealSpaceGridReal-space grid defining the FFT mesh.

Returns

  • mx.array(T + V_eff) ψ, same shape as orbitals.
def apply_hartree_xc_potential(orbitals: mx.array, hartree: mx.array, xc_potential: mx.array) -> mx.array

Apply Hartree plus exchange-correlation potential to orbitals.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).
hartreemx.arrayHartree potential on the grid, shape grid.shape.
xc_potentialmx.arrayExchange-correlation potential on the grid, shape grid.shape.

Returns

  • mx.array — The product (V_H + V_xc) · ψ, same shape as orbitals.
def apply_kinetic(orbitals: mx.array, grid: RealSpaceGrid, *, kpoint: Sequence[float] | None = None) -> mx.array

Apply the plane-wave kinetic operator -1/2 ∇².

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).
gridRealSpaceGridReal-space grid defining the FFT mesh.
kpointSequence[float] | NoneNoneOptional k-point 3-vector added to the reciprocal-grid G-vectors; None uses the Γ point. Defaults to None.

Returns

  • mx.array — The kinetic operator applied to orbitals, same shape as orbitals.
def apply_local_potential(orbitals: mx.array, local_potential: mx.array) -> mx.array

Apply a local multiplicative potential to orbitals.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital(s); a single orbital of shape grid.shape or a stack (n_orbitals, *grid.shape).
local_potentialmx.arrayLocal potential on the grid, shape grid.shape.

Returns

  • mx.array — The elementwise product V · ψ, same shape as orbitals.
def orbital_residuals(orbitals: mx.array, operator: KohnShamOperator, eigenvalues: mx.array | None = None) -> mx.array

Return ||Hψᵢ - εᵢψᵢ|| for each orbital.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital stack (n_orbitals, *grid.shape).
operatorKohnShamOperatorThe KohnShamOperator supplying H.
eigenvaluesmx.array | NoneNoneOptional per-orbital eigenvalues εᵢ; None uses the Rayleigh quotients. Defaults to None.

Returns

  • mx.array — The per-orbital residual norms, shape (n_orbitals,).
def orthonormality_error(orbitals: mx.array, grid: RealSpaceGrid) -> float

Return max absolute overlap error from the identity matrix.

Parameters

NameTypeDefaultDescription
orbitalsmx.arrayReal-space orbital stack (n_orbitals, *grid.shape).
gridRealSpaceGridReal-space grid; its dv weights the overlap integral.

Returns

  • float — The maximum absolute deviation of the overlap matrix ⟨ψᵢ|ψⱼ⟩ from the identity.