phys_552.seq#

Tools for solving the radial Schrodinger equation to high precision,

Classes#

CoulombSEQ

Helper to solve the radial Schrodinger equation with a Coulomb tail.

Module Contents#

class CoulombSEQ(**kw)#

Helper to solve the radial Schrodinger equation with a Coulomb tail.

Assumes that the potential behaves like V(r) = -alpha/r at long distances, and that V(r) is not more singular than the centrifugal term 1/r^2 at short distance.

dimension#

Dimension of space. I.e dimension = 2 for cylindrical coordinates (without z).

Type:

int

hbar, m

Physical constants

Type:

float

alpha#

Coefficient for the tail of the potential (Units of energy * distance).

Type:

float

dimension = 3#
hbar = 1.0#
m = 1.0#
alpha = 1.0#
V(r)#

Potential. (Overload to change.)

The default is the pure Coulomb potential. Custom potentials must include this tail.

compute_E(E, tol=1e-08, l=0, lam=0.999, **kw)#

Return the energy eigenvalue E by shooting.

Parameters:
  • E (float) – Initial guess.

  • l (int) – Angular momentum quantum number.

  • tol (float) – Desired relative tolerance.

  • lam (float) – Parameter for bracketing the energy. Initial search is in the range (lam*E, E/lam)

  • kw (dict) – Additional arguments passed down to solve_ivp.

get_a(E)#

Return a, the length scale associated with the exponential decay.

get_r_v(E)#

Return r_v, an approximate location of the turning point.

compute_du_dr(r, udu, E, l=0)#

Return (du, ddu) for solve_ivp.

Integrates the radial equation at the specified energy and angular momentum.

Parameters:
  • r (array-like) – Radius. r.shape == (n,)

  • udu (array-like) – Current solution and derivative, u, du = udu. udu.shape == (2, n).

  • E (float) – Energy for state.

  • l (int) – Angular momentum quantum number.

get_r_u_du_backwards(E, u0=None, R=None, R_max=None, tol=1e-08, max_step=None, l=0)#

Return (rs, us, dus) for the radial equation.

Solves the radial equation by integrating from R_max backwards to R in order to kill any exponentially growing solutions.

Parameters:
  • E (float, int) – Energy, and angular momentum.

  • l (float, int) – Energy, and angular momentum.

  • u0 (float | None) – Initial size of the radial wavefunction u0 = u(R_max). If not provided, then we estimate by first performing a quick low-tolerance integration to r_v.

  • R (float | None) – Integrate from R_max down to R. If not provided, we estimate based on the length scales of the problem.

  • R_max (float | None) – Integrate from R_max down to R. If not provided, we estimate based on the length scales of the problem.

  • tol (float) – Tolerance for final integration. Assumes everything is roughly order unity, so this should be interpreted as a relative tolerance.

  • max_step (float | None) – Passed to solve_ivp. Estimated if not provided.

Returns:

  • rs (array-like) – Radial points (abscissa) for solution.

  • us (array-like) – Radial wavefunction at these points u(r)

  • dus (array-like) – Derivative of the radial wavefunction at these points.

objective(E, r0_a=None, R_max_a=None, N=10, deg=6, tol=1e-08, **kw)#

Short-distance objective function for finding E.

Parameters:
  • tol (float) – Tolerance for final integration. Assumes everything is roughly order unity, so this should be interpreted as a relative tolerance.

  • r0_a (float | None) – Dimensionless quantity r0/a specifying how far down to integrate. If not provided, then estimate from tolerance and length scales.

  • R_max_a (float | None) – Dimensionless quantity R_max/a specifying R_max.

  • N (int) – How many points and the degree to use when extrapolating from r0 to 0. We use np.polyfit.

  • deg (int) – How many points and the degree to use when extrapolating from r0 to 0. We use np.polyfit.