1
1
; routines for calculation of hydrogenic and non-hydrogenic QDT momentum space wavefunctions
2
2
;
3
3
; 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
5
7
;
6
8
; notes: 1. QDT functions for l < 14 can be calculated easily with analytic functions,
7
9
; but higher l uses series expansions which are very slow to compute
@@ -17,7 +19,7 @@ function Fnl, A, ION, n, l, p
17
19
; follows Bransden and Joachain, Physics of Atoms and Molecules, 2nd edition appendix 5
18
20
;
19
21
; where:
20
- ; A is the atomic mass
22
+ ; A is the atomic mass in units of proton mass
21
23
; ION is the total charge on the atom (0 = neutral, 1=singly ionised)
22
24
; n, l are usual quantum numbers
23
25
; p is momentum in au
@@ -30,13 +32,14 @@ nd = double(n)
30
32
ld = double (l)
31
33
n2ps2 = nd* nd* ps* ps
32
34
35
+ normcorr = (ZZ* pmu)^ (- 1.5d0 ) ; normalisation correction for charged case
33
36
part1 = sqrt (2.d0 * factorial (n- l- 1 )/ !pi/ factorial (n+ l))
34
37
part2 = nd* nd* 2.d0 ^ (2 * ld+ 2 )* factorial (l)
35
38
part3 = nd^ ld* ps^ ld/ ((n2ps2+ 1.d0 )^ (ld+ 2 ))
36
39
x = (n2ps2- 1.d0 )/ (n2ps2+ 1.d0 )
37
40
part4 = Gegenbauer(x,l+ 1 ,n- l- 1 )
38
41
39
- return , part1 * part2 * part3 * part4
42
+ return , part1 * part2 * part3 * part4 * normcorr
40
43
end
41
44
42
45
function gegenbauer , x, alpha, n
@@ -475,23 +478,26 @@ endif
475
478
return , b
476
479
end
477
480
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)
480
485
; where:
481
486
; nu is the effective principal quantum number
482
487
; l is angular momentum quantum number
483
488
; q is momentum in atomic units
484
489
; normalisation is Integral |g|^2 q^2 dq = 1
485
490
;
486
491
; 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
487
493
488
494
nud = double (nu)
489
495
nq = n_elements (q)
490
496
wf = dblarr (nq)
491
497
492
498
if (nu gt 20 .) or (abs (nu mod 1 ) lt 0.001 ) then begin ; numerical precision limits QDT wf calc to about n*~25
493
499
; 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
495
501
endif else begin
496
502
497
503
t0 = fix (nud + l + 1 .)
@@ -514,8 +520,26 @@ endelse
514
520
return , wf
515
521
end
516
522
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
518
541
; generate a best estimate of square of wavefunction
542
+ ; for the neutral atom case
519
543
520
544
nud = double (nu)
521
545
nq = n_elements (q)
@@ -546,10 +570,10 @@ for i = 0, nq-1 do begin
546
570
wf[i] = 0.d0
547
571
endif else begin
548
572
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 .
550
574
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 .
553
577
h = (nu - num)/ (nup - num)
554
578
wf[i] = 10 ^ (alog10 (ym) + h* (alog10 (yp) - alog10 (ym)))
555
579
endelse
@@ -559,6 +583,13 @@ endfor
559
583
return , wf
560
584
end
561
585
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
562
593
563
594
564
595
0 commit comments