This page was generated from the Jupyter notebook compare_radial_matrix_element.ipynb.

Comparison of the radial matrix elements to pairinteraction(v0.9) and ARC

[1]:
from pathlib import Path

import matplotlib.pyplot as plt
import numpy as np

from ryd_numerov.rydberg import RydbergState
from ryd_numerov.units import ureg
[2]:
# A few exemplary test cases, where pairinteraction(v0.9) and ARC do fail in various ways
dn, dl, dj, dm = [
    (3, 1, 0, 0),
    (1, 0, 0, 0),
    (2, 0, 0, 0),
    (2, 2, 2, 0),
    (5, 1, 0, 0),
    (5, 2, 1, 0),
][0]

n_list = list(range(20, 150))
qn1_list = [(n1, n1 - 1, n1 - 0.5, n1 - 0.5) for n1 in n_list]
qn2_list = [(n + dn, l + dl, j + dj, m + dm) for n, l, j, m in qn1_list]

results = {}
[3]:
for species in ["Rb", "H_textbook"]:
    key = "ryd-numerov " + species
    results[key] = []
    for qn1, qn2 in zip(qn1_list, qn2_list):
        print(f"n={qn1[0]}", end="\r")
        state_i = RydbergState(species, qn1[0], qn1[1], j=qn1[2])
        state_f = RydbergState(species, qn2[0], qn2[1], j=qn2[2])
        radial_me = state_i.calc_radial_matrix_element(state_f, 1, unit="a.u.")
        results[key].append(radial_me)

    results[key] = np.array(results[key]) * ureg.Quantity(1, "bohr_radius").to("micrometer").magnitude
n=149
[4]:
from pairinteraction import pireal as pi

Path(".pairinteraction_cache").mkdir(exist_ok=True)
cache = pi.MatrixElementCache("./.pairinteraction_cache/")

for method in ["Numerov", "Whittaker"]:
    key = f"Pairinteraction(v0.9) {method}"
    cache.setMethod(pi.NUMEROV if method == "Numerov" else pi.WHITTAKER)
    results[key] = []
    for qn1, qn2 in zip(qn1_list, qn2_list):
        print(f"n={qn1[0]}", end="\r")
        state_i = pi.StateOne("Rb", int(qn1[0]), int(qn1[1]), qn1[2], qn1[3])
        state_f = pi.StateOne("Rb", int(qn2[0]), int(qn2[1]), qn2[2], qn2[3])
        results[key].append(cache.getRadial(state_f, state_i, 1))

    results[key] = np.array(results[key])
n=149
[5]:
import arc
import arc_fixed

atom = arc.Rubidium87()

for use_fixed_arc in [False, True]:
    key = "ARC fixed" if use_fixed_arc else "ARC default"
    results[key] = []
    for qn1, qn2 in zip(qn1_list, qn2_list):
        print(f"n={qn1[0]}", end="\r")
        v = arc_fixed.getRadialMatrixElement(
            atom, int(qn1[0]), int(qn1[1]), qn1[2], int(qn2[0]), int(qn2[1]), qn2[2], use_fixed_arc=use_fixed_arc
        )
        results[key].append(v)

    results[key] = np.array(results[key]) * ureg.Quantity(1, "bohr_radius").to("micrometer").magnitude
n=149
[6]:
ls_dict = {"ryd-numerov H": "--", "ARC fixed": ":"}

fig, ax = plt.subplots()

for key, values in results.items():
    ls = ls_dict.get(key, "-")
    ax.plot(n_list, values, ls=ls, label=key)

ax.set_xlabel("n")
ax.set_ylabel(r"Matrix element [$\mu m$]")

ax.legend()
plt.show()
../../_images/examples_comparisons_compare_radial_matrix_element_6_0.png