pyextal.jaxMultipole.protocol

A staged refinement protocol for data that constrain the valence density weakly.

The silicon test (Zuo et al. 1997) and the SrTiO3 LARBED fits point to the same recipe when the data are few, or confined to one plane of reciprocal space:

  1. ADPs from high-order data alone. Above s ~ 0.7 A^-1 the valence density contributes almost nothing, so the IAM with refined U_ij describes those reflections, and the U_ij it gives are not contaminated by bonding. They are then fixed (Zuo fixes B the same way).

  2. charge: valence populations and the anion’s kappa; electroneutrality eliminates one population; sites listed in fixed keep given values (e.g. Sr from a fit to theory, where the data alone cannot separate it).

  3. + quadrupole: the anion’s bond-directed P20, the one aspherical term with a clear physical meaning (O along Ti-O in SrTiO3).

  4. + d populations: the transition metal’s cubic hexadecapole refined as eg / t2g orbital populations, bounded at zero (params.SiteRefine(dpop=True)).

kappa’ stays fixed throughout – exponent and populations trade off even on excellent data (kappa’/octupole correlation 0.93 for Si). Every step is kept or rejected by Hamilton’s test against the previous one.

Functions

adp_from_high_order(model, obs[, smin, device, sites])

IAM refinement of the U_ij on the reflections with s >= smin.

protocol_steps(model[, anion, metal, fixed_sites, ...])

The ladder after the ADP step: charge -> + anion quadrupole -> + metal d populations.

run_protocol(model, obs[, start, smin, adp, ...])

Steps 0-3; returns (adp FitResult or None, ladder, start dict).

Module Contents

pyextal.jaxMultipole.protocol.adp_from_high_order(model, obs, smin=0.7, device='cpu', sites=None)

IAM refinement of the U_ij on the reflections with s >= smin.

Returns:

(FitResult, start dict of the refined U_ij).

Return type:

tuple

pyextal.jaxMultipole.protocol.protocol_steps(model, anion='O1', metal='Ti1', fixed_sites=(), quadrupoles=('P20',), refine_U=False, metal_pv=('Pv_3d',))

The ladder after the ADP step: charge -> + anion quadrupole -> + metal d populations.

Parameters:
  • model (MultipoleModel) – Its metal site needs the d orbitals in a shell of their own for step 3.

  • anion (str) – Site labels.

  • metal (str) – Site labels.

  • fixed_sites (sequence) – Sites whose populations stay at their start.

  • quadrupoles (tuple) – Anion multipoles of step 2.

  • refine_U (bool) – Keep refining U (for static data set False; U is moot).

  • metal_pv (tuple) – The metal populations refined in steps 1-2.

pyextal.jaxMultipole.protocol.run_protocol(model, obs, start=None, smin=0.7, adp=True, fixed_sites=(), dependent=None, device='cpu', log=print, **kw)

Steps 0-3; returns (adp FitResult or None, ladder, start dict).