Hi
I am trying to compute the continuum radial wavefuntion of Rb87 with the parameteric model potential https://journals.aps.org/pra/pdf/10.1103/PhysRevA.49.982. I looked up the cpp code in arc_c_extensions.c and have couple of questions:
- Does the radialWavefunction function support continuum energy? I try with positive stateEnergy and it spit out some resonable thing but see 3.
- In the code, you re-parametrize the radius with
x = sqrt(r). Is that for a better percision? since it is not the regular way we write the radial wavefunction.
- I try a Numerov method with the radial wf
u =r * R, like this with the corresponding paramatric potential taken from you code. Below is my code. What I found is that the solution of the two methods sometimes agree but mostly do not. For example,
En = 1.5, Rl = np.linspace(1e-7,100,10000)
does not, but
En = 0.5, Rl = np.linspace(1e-7,100,10000)
agree. I am wondering what could cause that, would it be the way of re-parametrization?
from scipy import *
import numpy as np
from scipy import integrate
from scipy import optimize
import matplotlib.pyplot as plt
from scipy import constants as cc
from arc import *
atom = Rubidium87()
def effRadialPotential(l, s, j, r, E):
# used as f in Numerov(f, x0, dx, dh)
mu = (atom.mass - cc.m_e) / atom.mass #reduce mass of electron
return 2 * ( mu * (atom.potential(l,s,j,r) - E) + l * (l + 1)/(2 * r**2) )
def Numerov(f, x0, dx, dh):
"""Given precomputed function f(x), solves for x(t), which satisfies:
x''(t) = f(t) x(t)
"""
x = np.zeros(len(f))
x[0] = x0
x[1] = x0+dh*dx
h2 = dh**2
h12 = h2/12.
w0=x0*(1-h12*f[0])
w1=x[1]*(1-h12*f[1])
xi = x[1]
fi = f[1]
for i in range(2,len(f)):
w2 = 2*w1-w0+h2*fi*xi # here fi=f1
fi = f[i] # fi=f2
xi = w2/(1-h12*fi)
x[i]=xi
w0 = w1
w1 = w2
return x
Rl = np.linspace(1e-7,10,10000)
l=0
En=0.5
feff = np.array([effRadialPotential(l,0.5,l+.5, i, En) for i in Rl])
ur = Numerov(feff,0.0,1e-1,Rl[1]-Rl[0])
norm = integrate.simps(ur**2,x=Rl)
ur *= 1/np.sqrt(abs(norm))
arcr, arcRad = atom.radialWavefunction(l,0.5,l+0.5,En,Rl[0],Rl[-1],Rl[1])
plt.plot(Rl,ur,'b')
plt.plot(arcr,arcRad,'r')
# plt.ylim(-1,1)
norm
Hi
I am trying to compute the continuum radial wavefuntion of Rb87 with the parameteric model potential https://journals.aps.org/pra/pdf/10.1103/PhysRevA.49.982. I looked up the cpp code in
arc_c_extensions.cand have couple of questions:x = sqrt(r). Is that for a better percision? since it is not the regular way we write the radial wavefunction.u =r * R, like this with the corresponding paramatric potential taken from you code. Below is my code. What I found is that the solution of the two methods sometimes agree but mostly do not. For example,En = 1.5, Rl = np.linspace(1e-7,100,10000)does not, but
En = 0.5, Rl = np.linspace(1e-7,100,10000)agree. I am wondering what could cause that, would it be the way of re-parametrization?