sisl.SphericalOrbital
- class sisl.SphericalOrbital
Bases:
Orbital
An arbitrary orbital class which only contains the harmonical part of the wavefunction where
Note that in this case the used spherical harmonics is:
The resulting orbital is
where typically
. The above equation clarifies that this class is only intended for each , and that subsequent orders may be extracted by altering the spherical harmonic. Also, the quantum number is not necessary as that value is implicit in the function.- Parameters:
l – azimuthal quantum number
rf_or_func – radial components as a tuple/list, or the function which can interpolate to any R See
set_radial
for details.R – See
Orbital
for details.q0 – initial charge
tag – user defined tag
**kwargs – arguments passed directly to
set_radial(rf_or_func, **kwargs)
- f
interpolation function that returns f(r) for a given radius
- Type:
func
Examples
>>> from scipy.interpolate import interp1d >>> orb = SphericalOrbital(1, (np.arange(10.), np.arange(10.))) >>> orb.equal(SphericalOrbital(1, interp1d(np.arange(10.), np.arange(10.), ... fill_value=(0., 0.), kind="cubic", bounds_error=False))) True
Methods
copy
()Create an exact copy of this object
equal
(other[, psi, radial])Compare two orbitals by comparing their radius, and possibly the radial and psi functions
name
([tex])Return a named specification of the orbital (
tag
)psi
(r[, m])Calculate
at a given point (or more points)psi_spher
(r, theta, phi[, m, cos_phi])Calculate
at a given point (in spherical coordinates)radial
(r, *args, **kwargs)Calculate the radial part of spherical orbital
scale
(scale)Scale the orbital by extending R by
scale
set_radial
(*args, **kwargs)Update the internal radial function used as a
spher
(theta, phi[, m, cos_phi])Calculate the spherical harmonics of this orbital at a given point (in spherical coordinates)
toAtomicOrbital
([m, n, zeta, P, q0])Create a list of
AtomicOrbital
objectstoGrid
([precision, c, R, dtype, atom])Create a Grid with only this orbital wavefunction on it
toSphere
([center])Return a sphere with radius equal to the orbital size
Attributes
- copy()
Create an exact copy of this object
- Parameters:
orbital (SphericalOrbital)
- Return type:
- equal(other, psi=False, radial=False)[source]
Compare two orbitals by comparing their radius, and possibly the radial and psi functions
- psi(r, m=0)[source]
Calculate
at a given point (or more points)The position r is a vector from the origin of this orbital.
- Parameters:
- Returns:
basis function value at point r
- Return type:
- psi_spher(r, theta, phi, m=0, cos_phi=False)[source]
Calculate
at a given point (in spherical coordinates)This is equivalent to
psi
however, the input is given in spherical coordinates.- Parameters:
r (
ndarray
) – the radius from the orbital origintheta (
ndarray
) – azimuthal angle in the plane (from )phi (
ndarray
) – polar angle from axism (int) – magnetic quantum number, must be in range
-self.l <= m <= self.l
cos_phi (bool) – whether phi is actually
which will be faster because cos is not necessary to call.
- Returns:
basis function value at point r
- Return type:
- radial(r, *args, **kwargs)
Calculate the radial part of spherical orbital
The position r is a vector from the origin of this orbital.
- Parameters:
r (
ndarray
) – radius from the orbital origin*args – arguments passed to the radial function
**args – keyword arguments passed to the radial function
- Returns:
radial orbital value at point r
- Return type:
- set_radial(*args, **kwargs)
Update the internal radial function used as a
This can be called in several ways:
- set_radial(r, f)
which uses
scipy.interpolate.UnivariateSpline(r, f, k=3, s=0, ext=1, check_finite=False)
to define the interpolation function (see interp keyword). Here the maximum radius of the orbital is the maximum r value, regardless off(r)
is zero for smaller r.- set_radial(func)
which sets the interpolation function directly. The maximum orbital range is determined automatically to a precision of 0.0001 AA.
- Parameters:
r (
numpy.ndarray
) – the radial positions and the radial function values at r.f (
numpy.ndarray
) – the radial positions and the radial function values at r.func (
callable
) – a function which enables evaluation of the radial function. The function should accept a single array and return a single array.interp (
callable
, optional) – When two non-keyword arguments are passed this keyword will be used. It is the interpolation function which should return the equivalent of func. By using this one can define a custom interpolation routine. It should accept two arguments,interp(r, f)
and return a callable that returns interpolation values. See examples for different interpolation routines.
- Return type:
Examples
>>> from scipy import interpolate as interp >>> o = SphericalOrbital(1, lambda x:x) >>> r = np.linspace(0, 4, 300) >>> f = np.exp(-r) >>> def i_univariate(r, f): ... return interp.UnivariateSpline(r, f, k=3, s=0, ext=1, check_finite=False) >>> def i_interp1d(r, f): ... return interp.interp1d(r, f, kind="cubic", fill_value=(f[0], 0.), bounds_error=False) >>> def i_spline(r, f): ... from functools import partial ... tck = interp.splrep(r, f, k=3, s=0) ... return partial(interp.splev, tck=tck, der=0, ext=1) >>> R = np.linspace(0, 4, 400) >>> o.set_radial(r, f, interp=i_univariate) >>> f_univariate = o.radial(R) >>> o.set_radial(r, f, interp=i_interp1d) >>> f_interp1d = o.radial(R) >>> o.set_radial(r, f, interp=i_spline) >>> f_spline = o.radial(R) >>> np.allclose(f_univariate, f_interp1d) True >>> np.allclose(f_univariate, f_spline) True
- spher(theta, phi, m=0, cos_phi=False)[source]
Calculate the spherical harmonics of this orbital at a given point (in spherical coordinates)
- Parameters:
- Returns:
spherical harmonics at angles
and and given quantum number m- Return type:
- toAtomicOrbital(m=None, n=None, zeta=1, P=False, q0=None)[source]
Create a list of
AtomicOrbital
objectsThis defaults to create a list of
AtomicOrbital
objects for every m (for m in -l:l). One may optionally specify the sub-set of m to retrieve.- Parameters:
- Returns:
AtomicOrbital (
for passed `m
an atomic orbital will be returned`)list of AtomicOrbital (
for each :math:`min[-l;l]
an atomic orbital will be returned in the list`)
- toGrid(precision=0.05, c=1.0, R=None, dtype=np.float64, atom=1)
Create a Grid with only this orbital wavefunction on it
- Parameters:
precision (
float
, optional) – used separation in theGrid
between voxels (in Ang)c (
float
orcomplex
, optional) – coefficient for the orbitalR (
float
, optional) – box size of the grid (default to the orbital range)dtype (
numpy.dtype
, optional) – the used separation in theGrid
between voxelsatom (optional) – atom associated with the grid; either an atom instance or something that
Atom(atom)
would convert to a proper atom.
- toSphere(center=None)
Return a sphere with radius equal to the orbital size
- Returns:
sphere with a radius equal to the radius of this orbital
- Return type:
- property R
Maxmimum radius of orbital
- property l
quantum number
- property q0
Initial charge
- property tag
Named tag of orbital