Model Terms¶
UFP terms are small torch.nn.Module objects that implement a piece of an
interatomic potential. Terms should be additive, explicit about their supported
atomic types, and conservative about hidden state.
One-Body Terms¶
ElementOneBodyTerm assigns a reference energy to each covered atomic number:
This is useful for fitting formation-like residuals. A one-body term has zero force because its energy depends only on composition.
Harmonic Pair Terms¶
HarmonicPairTerm evaluates a uniform harmonic interaction over covered pairs:
ElementPairHarmonicTerm generalizes this to element-pair-specific spring
constants and equilibrium distances. Symmetric pair terms canonicalize (a, b)
and (b, a) into the same category.
Two-Body Spline Terms¶
In UFP terminology, two-body names the physics family, while a pair
channel names one (Z1, Z2) coefficient row or category. SplinePairTerm
represents one explicit pair channel with a one-dimensional uniform spline over
pair distance. SplineTwoBodyTerm is the categorized two-body family term: it
stores coefficients for all pair channels implied by atomic_types, optionally
narrowed with active_pairs.
Fitting labels follow that distinction. SplinePairTerm exposes a single
pair[(Z1, Z2)] parameter block with internal kind and assembler "pair".
SplineTwoBodyTerm exposes one twobody[(...)] parameter block with internal
kind and assembler "twobody". Both use regularization group "twobody" so
two-body ridge and shape penalties apply consistently.
RepulsiveSplineTwoBodyTerm is a categorized cubic two-body term for optimizer
training when low-distance data are sparse. It generates the low-distance cubic
coefficients from positive curvature coefficients, a positive transition force,
and a trainable transition value, then evaluates the generated row as an
ordinary cubic spline. It does not expose a direct least-squares parameter block
because the constrained wall parameters are nonlinear in the final coefficients.
TwoBodyCriticalWallPenalty is a soft Torch-training regularizer for ordinary
cubic spline pair terms. It uses a per-pair critical distance, usually the
shortest observed training distance, and penalizes positive radial slope at that
distance plus negative curvature on the inner interval. Unlike
RepulsiveSplineTwoBodyTerm, it does not hard-parameterize the coefficients and
does not provide a direct least-squares constraint solver.
For a pair channel, the energy contribution has the form
and the force uses the derivative of the same spline basis:
The implementation guards division by very small distances with eps.
Charge and Spin Terms¶
Charge and collinear-spin terms use optional state carried by UFPInputState.
ASE inputs can provide atomwise charges or initial_charges, atomwise
magmoms or initial_magmoms, and system-level charge or spin_moment
metadata. Terms declare these requirements through TermInputRequirements, so
missing state fails before evaluation or least-squares assembly.
ChargeSelfEnergyTerm adds a local charge self energy
where q_i is a fixed local charge. It exposes linear least-squares blocks for
the electronegativity coefficients chi and hardness coefficients eta, and
reports the atomwise diagnostic feature charge_potential = dE / dq_i.
LocalChargeCoulombTerm is a finite-cutoff softened Coulomb prior for fixed
local charges,
with k_e = 14.3996454784255 eV Angstrom / e^2. It is a short-range screened
term only; it does not implement Ewald, PME, P3M, or any other true long-range
periodic electrostatics.
ChargeScaledSplinePairTerm fits a short-range spline correction multiplied by
q_i q_j:
The coefficient block is linear for fixed charges and uses kind
charge_twobody.
CollinearSpinLandauTerm adds an onsite scalar-spin Landau energy
and reports spin_effective_field = -dE / dm_i. CollinearSpinExchangeTerm
adds a pairwise scalar exchange spline
These spin terms support fixed collinear scalar moments only. Non-collinear spins, spin-orbit coupling, charge equilibration, spin relaxation, learned state prediction, and density-like training targets are outside this first state-aware term layer.
Three-Body Spline Terms¶
SplineThreeBodyTerm is source-distinguished. For a source atom \(i\) and two
neighbors \(j\) and \(k\), it evaluates a three-dimensional spline over
The coefficient tensor is indexed by triplet category
(source, first_neighbor, second_neighbor) and by the local spline stencil:
The two neighbor categories are symmetric in category construction. For channels where the two neighbor species are identical, UFP symmetrizes the coefficient axes so swapping \(j\) and \(k\) does not change the energy.
Three-body terms require a full neighbor list so the source-centered neighbor sets are available in both pair directions. Forces are assembled analytically from the partial derivatives with respect to \(x\), \(y\), and \(z\) using the chain rule.
Triplet 2D and Four-Body Terms¶
SplineTriplet2DTerm is a lower-dimensional three-body term over the two
center-neighbor distances \(r_{ij}\) and \(r_{ik}\). It omits the neighbor-neighbor
distance and is useful when angular or neighbor-neighbor resolution is not
needed.
SplineFourBody6DTerm is a Torch-only energy term over the six pair distances
in a source-neighbor triple. Forces can be obtained through autograd by using
model APIs with derive_forces=True.
Repulsion and Alchemical Coefficients¶
ZBLRepulsionTerm provides a short-range repulsive interaction. It is meant to
be composed with learned terms when close-contact behavior needs an explicit
physical prior.
AlchemicalCoefficients lets multiple true element channels share a smaller set
of proxy coefficients through mixing weights. This is useful when many element
combinations are present but the desired model should share statistical strength
across related channels.