Skip to content

Numerov wavefunction for continuum #43

Description

@zzpwahaha

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:

  1. Does the radialWavefunction function support continuum energy? I try with positive stateEnergy and it spit out some resonable thing but see 3.
  2. 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.
  3. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions