vibeqc.AtomicRadialGrid

class vibeqc.AtomicRadialGrid(centre_bohr, r, w_r, angular_xyz, w_a, radial_alpha, lebedev_order)[source]

Bases: object

Per-atom radial × Lebedev quadrature grid.

Parameters:
centre_bohr

(3,) Cartesian position of the atom this grid is centred on (bohr).

Type:

numpy.ndarray

r

(n_radial,) radial mesh in bohr (strictly positive).

Type:

numpy.ndarray

w_r

(n_radial,) radial weights such that ∫_0^∞ f(r) dr Σ_k f(r_k) · w_k. Note: the Jacobian is already folded in; w_k already carries it.

Type:

numpy.ndarray

angular_xyz

(n_angular, 3) Lebedev points on the unit sphere (unit-norm rows).

Type:

numpy.ndarray

w_a

(n_angular,) angular weights such that ∫_S² g(Ω̂) dΩ̂ Σ_l g(Ω̂_l) · w_l, Σ_l w_l = .

Type:

numpy.ndarray

radial_alpha

The Mura-Knowles α (bohr) used to build the radial mesh. Carried for audit / reproduction.

Type:

float

lebedev_order

The Lebedev algebraic order requested.

Type:

int

__init__(centre_bohr, r, w_r, angular_xyz, w_a, radial_alpha, lebedev_order)
Parameters:
Return type:

None

Methods

__init__(centre_bohr, r, w_r, angular_xyz, ...)

build(centre_bohr, *[, n_radial, alpha, ...])

Build a Mura-Knowles × Lebedev grid centred on centre_bohr.

cartesian_points()

Return (n_radial, n_angular, 3) Cartesian points r_k · Ω̂_l + R_atom.

combined_weights()

Return (n_radial, n_angular) product weights w_k · w_l.

evaluate_real_spherical_harmonics(lmax)

Return (n_components, n_angular) real spherical harmonics Y_lm evaluated at this grid's Lebedev points.

from_element(centre_bohr, Z, *[, n_radial, ...])

Build with a per-element default α from default_alpha_for_element().

integrate(values)

Quadrature: Σ_kl values[k, l] · w_k · w_l.

Attributes

centre_bohr: ndarray
r: ndarray
w_r: ndarray
angular_xyz: ndarray
w_a: ndarray
radial_alpha: float
lebedev_order: int
property n_radial: int
property n_angular: int
property n_points: int
cartesian_points()[source]

Return (n_radial, n_angular, 3) Cartesian points r_k · Ω̂_l + R_atom.

Return type:

ndarray

combined_weights()[source]

Return (n_radial, n_angular) product weights w_k · w_l. The integral of a function f(r, Ω̂) is Σ_kl f(r_k, Ω̂_l) · w_k · w_l.

Return type:

ndarray

integrate(values)[source]

Quadrature: Σ_kl values[k, l] · w_k · w_l.

values is (n_radial, n_angular) evaluated at cartesian_points().

Parameters:

values (ndarray)

Return type:

float

classmethod build(centre_bohr, *, n_radial=50, alpha=5.0, lebedev_order=17)[source]

Build a Mura-Knowles × Lebedev grid centred on centre_bohr.

Parameters:
  • centre_bohr (ndarray) – (3,) Cartesian atom position.

  • n_radial (int) – Number of radial points (CP2K default 50, production 100+).

  • alpha (float) – Mura-Knowles radial scale (bohr). Use default_alpha_for_element() for per-Z defaults.

  • lebedev_order (int) – Lebedev algebraic order. 17 is sufficient for ℓ_max = 8 spherical harmonics — comfortably above the d / f level needed for typical GAPW projector multipoles.

Return type:

AtomicRadialGrid

evaluate_real_spherical_harmonics(lmax)[source]

Return (n_components, n_angular) real spherical harmonics Y_lm evaluated at this grid’s Lebedev points.

Components are ordered by multipole_index(l, m) — l = 0: (l=0, m=0); l = 1: (1, -1), (1, 0), (1, 1); … n_components = (lmax + 1) ** 2.

Parameters:

lmax (int)

Return type:

ndarray

classmethod from_element(centre_bohr, Z, *, n_radial=50, lebedev_order=17, quiet=False)[source]

Build with a per-element default α from default_alpha_for_element().

Emits GAPWExperimentalWarning to remind callers the M3b augmentation infrastructure is experimental.

Parameters:
Return type:

AtomicRadialGrid