Skip to content

dft.forces

DFT force consistency checks.

import mlx_atomistic.dft.forces

class SCFForceConsistencyResult
def __init__(result: SCFResult, analytic_forces: mx.array, finite_difference_forces: mx.array, max_abs_error: float, rms_abs_error: float, displacement: float, samples: list[dict[str, float | int]])

SCF total-energy finite-difference force check.

Parameters

NameTypeDefaultDescription
resultSCFResult
analytic_forcesmx.array
finite_difference_forcesmx.array
max_abs_errorfloat
rms_abs_errorfloat
displacementfloat
sampleslist[dict[str, float | int]]

Methods

def to_dict() -> dict

Return a JSON-safe summary.

Returns

  • dict
def scf_total_energy_forces(system: DFTSystem, *, config: SCFConfig | None = None, xc_functional: ExchangeCorrelationFunctional | None = None, displacement: float = 0.001, reuse_scf_state: bool = True) -> SCFForceConsistencyResult

Compare SCF Hellmann-Feynman forces with total-energy finite differences.

The analytic force is the force reported by run_scf, which includes electronic local-pseudopotential forces and center-center repulsion for a DFTSystem. The finite-difference force is -[E(R + δ) - E(R - δ)] / 2δ after re-running SCF for each displacement.

Parameters

NameTypeDefaultDescription
systemDFTSystem
configSCFConfig | NoneNone
xc_functionalExchangeCorrelationFunctional | NoneNone
displacementfloat0.001
reuse_scf_stateboolTrue

Returns

  • SCFForceConsistencyResult