Skip to content

Commit 2ab39f5

Browse files
committed
Updates
1 parent 976eec8 commit 2ab39f5

File tree

7 files changed

+8075
-101
lines changed

7 files changed

+8075
-101
lines changed

.DS_Store

0 Bytes
Binary file not shown.

AA_notes.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
AA_notes.txt
2+
3+
Working on implementing Z>1, i.e. ions. Code currently only for neutrals following HB & vR 1997.
4+
5+
- Done for hydrogenic.
6+
- Done for non-hydrogenic. Tested results for Z=2, seem physically reasonable, and tested normalisation numerically.
7+

mswavef.pro

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
; routines for calculation of hydrogenic and non-hydrogenic QDT momentum space wavefunctions
22
;
33
; Paul Barklem
4-
; written Jan-March 2010
4+
; Jan-March 2010 - written; original version only for neutral atoms
5+
; September 2015 - testing and release
6+
; December 2022 - extension to positive ions and testing
57
;
68
; notes: 1. QDT functions for l < 14 can be calculated easily with analytic functions,
79
; but higher l uses series expansions which are very slow to compute
@@ -17,7 +19,7 @@ function Fnl, A, ION, n, l, p
1719
; follows Bransden and Joachain, Physics of Atoms and Molecules, 2nd edition appendix 5
1820
;
1921
; where:
20-
; A is the atomic mass
22+
; A is the atomic mass in units of proton mass
2123
; ION is the total charge on the atom (0 = neutral, 1=singly ionised)
2224
; n, l are usual quantum numbers
2325
; p is momentum in au
@@ -30,13 +32,14 @@ nd = double(n)
3032
ld = double(l)
3133
n2ps2 = nd*nd*ps*ps
3234

35+
normcorr = (ZZ*pmu)^(-1.5d0) ; normalisation correction for charged case
3336
part1 = sqrt(2.d0*factorial(n-l-1)/!pi/factorial(n+l))
3437
part2 = nd*nd*2.d0^(2*ld+2)*factorial(l)
3538
part3 = nd^ld*ps^ld/((n2ps2+1.d0)^(ld+2))
3639
x = (n2ps2-1.d0)/(n2ps2+1.d0)
3740
part4 = Gegenbauer(x,l+1,n-l-1)
3841

39-
return, part1 * part2 * part3 * part4
42+
return, part1 * part2 * part3 * part4 * normcorr
4043
end
4144

4245
function gegenbauer, x, alpha, n
@@ -475,23 +478,26 @@ endif
475478
return, b
476479
end
477480

478-
function gwf, nu, l, q
479-
; the QDT non-hydrogenic wavefunction in momentum space, following Hoang Binh and van Regemorter (1997)
481+
function gwf_neutral, nu, l, q
482+
; the QDT non-hydrogenic wavefunction in momentum space,
483+
; for a valence electron in a neutral atom (core Z=1)
484+
; following Hoang Binh and van Regemorter (1997)
480485
; where:
481486
; nu is the effective principal quantum number
482487
; l is angular momentum quantum number
483488
; q is momentum in atomic units
484489
; normalisation is Integral |g|^2 q^2 dq = 1
485490
;
486491
; note due to machine numerical precision limits, if nu > 24, we use the nearest hydrogenic wavefunction
492+
; presently doesn't account for reduced mass effects, i.e. assumes infinite mass, but effects small even for hydrogen
487493

488494
nud = double(nu)
489495
nq = n_elements(q)
490496
wf = dblarr(nq)
491497

492498
if (nu gt 20.) or (abs(nu mod 1) lt 0.001) then begin ; numerical precision limits QDT wf calc to about n*~25
493499
; also use exact analytic expression if integer nu value (n*)
494-
wf = Fnl(1., 0, round(nu), l, q)
500+
wf = Fnl(1000., 0, round(nu), l, q) ; large mass to approximate infinite
495501
endif else begin
496502

497503
t0 = fix(nud + l + 1.)
@@ -514,8 +520,26 @@ endelse
514520
return, wf
515521
end
516522

517-
function gwfsq, nu, l, q
523+
function gwf, ion, nu, l, q
524+
; the QDT non-hydrogenic wavefunction in momentum space,
525+
; for ion through rescaling of neutral case
526+
; following Bransden and Joachain, Physics of Atoms and Molecules, 2nd edition appendix 5
527+
;
528+
; where:
529+
; ion is the total charge on the atom (0 = neutral, 1=singly ionised)
530+
; nu is the effective principal quantum number
531+
; l is angular momentum quantum number
532+
; q is momentum in atomic units (can be an array)
533+
; normalisation is Integral |g|^2 q^2 dq = 1
534+
535+
Z = ion+1 ; core charge
536+
wf = gwf_neutral(nu, l, q/Z) / (Z^1.5d0)
537+
return, wf
538+
end
539+
540+
function gwfsq_neutral, nu, l, q
518541
; generate a best estimate of square of wavefunction
542+
; for the neutral atom case
519543

520544
nud = double(nu)
521545
nq = n_elements(q)
@@ -546,10 +570,10 @@ for i = 0, nq-1 do begin
546570
wf[i] = 0.d0
547571
endif else begin
548572
if (q[i] lt qmax) and (q[i] gt qmin) then begin ; use QDT
549-
wf[i] = gwf(nud, l, q[i])^2.
573+
wf[i] = gwf_neutral(nud, l, q[i])^2.
550574
endif else begin ; linear interpolation between integer values for nu
551-
ym = Fnl(1., 0, num, l, q[i])^2.
552-
yp = Fnl(1., 0, nup, l, q[i])^2.
575+
ym = Fnl(1000., 0, num, l, q[i])^2. ; large mass to approximate infinite
576+
yp = Fnl(1000., 0, nup, l, q[i])^2.
553577
h = (nu - num)/(nup - num)
554578
wf[i] = 10^(alog10(ym) + h*(alog10(yp) - alog10(ym)))
555579
endelse
@@ -559,6 +583,13 @@ endfor
559583
return, wf
560584
end
561585

586+
function gwfsq, ion, nu, l, q
587+
; generate a best estimate of square of wavefunction
588+
589+
Z = ion+1 ; core charge
590+
wf = gwfsq_neutral(nu, l, q/Z) / (Z^3.d0)
591+
return, wf
592+
end
562593

563594

564595

mswavef.sublime-project

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{
2+
}

0 commit comments

Comments
 (0)