cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
helike_energy.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2022 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 #include "cddefines.h"
4 #include "helike.h"
5 #include "iso.h"
6 
7 /*
8  Energy order within 2 3P
9 
10  The order of the levels within the 2 3P level of atomic helium is opposite
11  from the order within astrophysically abundant ions. The indices below
12  consistently point to the correct level, and the energies are correct,
13  so the J levels within 2 3P are not in increasing energy order for helium itself.
14  This is ok since the atomic data is correct, and the difference in energies is so small.
15 */
16 
17 /* This the ratio of the helium finite mass rydberg to the infinite
18  * mass rydberg. */
19 const double HE_RYD_FACTOR=0.999862926;
20 
21 /* Ionization potentials (in wavenumber) for each ion in the iso-seq up to Z=30.
22  * These are exactly what you get if you take EionRYD below and multiply by RYD_INF. */
23 static const double EionWN[LIMELM] =
24  /* the first, or H-like, element is not defined for he-like species */
25  {-DBL_MAX,
26  198310.6679 ,610003.839889137,1241136.72201499,2091948.45665631,3162116.52584231,
27  4452446.95015668,5962133.81875305,7692790.05069734,9645221.44709864,11814589.7994457,
28  14209766.0528639,16822685.5022862,19661412.9625169,22717883.6187518,26000162.0663204,
29  29508248.5246975,33234078.1790787,37185715.7345311,41363161.0813172,45766414.4389118,
30  50395475.4781030,55258409.0136949,60339085.8550283,65653635.1927626,71202056.8074231,
31  76976286.4328920,82984388.3352872,89194104.5722390,95726403.3055320};
32 
33 /* Ionization potentials (in Rydbergs) for each ion in the iso-seq up to Z=30.
34  * These are exactly what you get if you take Verner's numbers in atmdat_ph1(0,1,nelem,0)
35  * and multiply by (0.9998787/EVRYD), exactly as is done elsewhere in Cloudy. */
36 static const double EionRYD[LIMELM] =
37  /* the first, or H-like, element is not defined for he-like species */
38  {-DBL_MAX,
39  1.807387521,5.558764,11.310070,19.063237,28.815326,40.573682,54.330961,70.101861,
40  87.893725,107.662464,129.488916,153.299590,179.167978,207.020588,236.930910,
41  268.898946,302.851204,338.861175,376.928858,417.054255,459.237363,503.551674,
42  549.850208,598.279945,648.840883,701.459535,756.209388,812.796486,872.323172};
43 
44 /* experimental energies, in wavenumbers, for atomic helium */
45 static const int NHE1LEVELS = 111;
46 /* These energies from Drake 1996, except these divided by c */
47 static const double He1Energies[NHE1LEVELS] =
48 {0.0 , 159855.9734, 166277.4390, 169087.8298, 169086.8417, 169086.7652, 171134.8957,
49 183236.7908, 184864.8281, 185564.6657, 186101.5615, 186104.9656, 186209.3638, 190298.6619,
50 190940.6075, 191217.0826, 191444.4868, 191446.4547, 191451.8805, 191451.8964, 191492.7108,
51 193346.9900, 193663.5106, 193800.7280, 193917.1538, 193918.2888, 193921.1207, 193921.1298,
52 193921.6166, 193921.6209, 193942.4612, 194936.1184, 195114.8672, 195192.7542, 195260.0724,
53 195260.7694, 195262.4251, 195262.4307, 195262.7236, 195262.7261, 195262.7930, 195262.7947,
54 195274.9074, 195868.2357, 195978.8938, 196027.3216, 196069.6730, 196070.1273, 196071.1763,
55 196071.1800, 196071.3686, 196071.3702, 196071.4141, 196071.4151, 196071.4283, 196071.4290,
56 196079.0865, 196461.3605, 196534.5628, 196566.7159, 196595.0620, 196595.3730, 196596.0785,
57 196596.0810, 196596.2092, 196596.2103, 196596.2404, 196596.2411, 196596.2503, 196596.2508,
58 196596.2541, 196596.2544, 196601.3992, 196861.9861, 196912.9014, 196935.3339, 196955.2261,
59 196955.4477, 196955.9445, 196955.9463, 196956.0373, 196956.0380, 196956.0595, 196956.0600,
60 196956.0666, 196956.0670, 196956.0693, 196956.0696, 196956.0705, 196956.0707, 196959.6917,
61 197145.2320, 197182.0643, 197198.3343, 197212.8252, 197212.9885, 197213.3513, 197213.3527,
62 197213.4194, 197213.4200, 197213.4358, 197213.4362, 197213.4411, 197213.4414, 197213.4431,
63 197213.4433, 197213.4440, 197213.4442, 197213.4445, 197213.4446, 197216.0885};
64 /* Last energy is 10^1P. */
65 
66 /* >>chng 05 sep 06, RP - update energies of excited states */
67 static const int NIONLEVELS = 31;
68 /* These energies are from CHIANTI 5, up to 5^1P
69  * -1 is flag to use quantum defect routines instead
70  * >>refer He-like Energies Landi et al., 2005; ApJSS, in press
71  * >>refer He-like Energies Dere, K. P. et al. 1997,
72  * >>refercon Astronomy and Astrophysics Suppl. Ser., Vol. 125, pp. 149-173 */
73 static const double IonEnergies[LIMELM-2][NIONLEVELS] =
74 {
75 /* ipLITHIUM=2; */
76 {0.00, 476034.98, 491374.60, 494266.57, 494261.17, 494263.44, 501808.59,
77  554754.45, 558777.88, 559501.16, 561243.67, 561273.62, 561752.82,
78  579981.33, 581596.77, 581886.34, 582613.64, 582630.95, 582642.97,
79  582644.04, 582830.11, 591184.26, 591989.55, 592134.36, 592504.32,
80  592514.43, 592520.11, 592521.11, -1.00 , -1.00 , 592634.91},
81 /* ipBERYLLIUM=3;*/
82 {0.00, 956502.00, 981178.00, 983366.00, 983355.00, 983370.00, 997454.00,
83  1121184.00, 1127705.00, 1128300.00, 1131383.00, 1131462.00, 1132390.00,
84  1175295.00, 1178005.00, 1178174.00, 1179451.00, 1179495.00, 1179515.00,
85  1179514.00, 1179830.00, 1199650.00, -1.00 , 1201060.00, 1201702.00,
86  1201800.00, 1201730.00, 1201742.00, -1.00 , -1.00 , 1201894.00},
87 /* ipBORON=4;*/
88 {0.00, 1601545.00, 1635720.00, 1636938.00, 1636922.00, 1636975.00, 1657980.00,
89  1882740.00, 1891790.00, 1892221.00, 1896710.00, 1896836.00, 1898063.00,
90  1976420.00, -1.00 , 1980291.11, 1982132.67, 1982220.00, 1982262.67,
91  1982240.00, 1982762.00, -1.00 , -1.00 , 2020730.00, 2021700.00,
92  -1.00 , 2021665.71, 2021760.00, 2021770.00, 2021770.00, 2022044.00},
93 /* ipCARBON=5;*/
94 {0.00, 2411262.00, 2455024.00, 2455162.74, 2455150.23, 2455286.01, 2483371.00,
95  2839562.00, 2851180.00, 2851418.00, 2857309.67, 2857529.00, 2859375.00,
96  2983541.00, -1.00 , 2988359.00, 2990776.00, 2990923.00, 2990923.40,
97  2990923.40, 2991710.00, 3048927.00, -1.00 , 3051332.00, 3052589.00,
98  3052656.00, 3052653.30, 3052653.30, 3052659.40, 3052659.40, 3053044.00},
99 /* ipNITROGEN=6;*/
100 {0.00, 3385890.00, 3439274.00, 3438312.46, 3438321.13, 3438612.15, 3473790.00,
101  3991860.00, -1.00 , 4006160.00, 4013460.00, 4013770.00, 4016390.00,
102  4196800.00, 4202520.00, 4202620.00, 4205820.00, 4205830.00, 4205810.00,
103  4205820.00, 4206810.00, 4290150.00, 4293020.00, 4293080.00, 4294570.00,
104  4294670.00, 4294700.00, 4294700.00, -1.00 , -1.00 , 4296090.00},
105 /* ipOXYGEN=7;*/
106 {0.00, 4524640.00, 4588380.00, 4585620.76, 4585679.58, 4586231.19, 4629201.00,
107  5338820.00, 5356420.00, 5355670.00, 5364422.67, 5365470.00, 5368550.00,
108  5616340.00, 5623100.00, 5622600.00, 5626225.33, 5626670.00, 5626210.00,
109  5626840.00, 5628100.00, 5742610.00, -1.00 , 5745440.00, 5747509.33,
110  5748230.00, 5747200.00, 5747820.00, -1.00 , -1.00 , 5748450.00},
111 /* ipFLUORINE=8;*/
112 {0.00, 5830040.00, 5903100.00, 5900600.00, 5900750.00, 5901700.00, 5949900.00,
113  6885090.00, 6903270.00, 6902560.00, 6914073.33, 6915900.00, 6916590.00,
114  7244270.00, -1.00 , 7250390.00, 7255960.00, 7254240.00, 7256750.00,
115  7257260.00, 7256370.00, -1.00 , -1.00 , 7410270.00, 7413940.00,
116  7412290.00, 7414760.00, 7415300.00, 7414780.00, -1.00 , 7414000.00},
117 /* ipNEON=9;*/
118 {0.00, 7299940.00, 7382680.00, 7378205.53, 7378506.43, 7380050.00, 7436560.00,
119  8623000.00, 8644880.00, 8644744.44, 8657128.67, 8662400.00, 8660530.00,
120  9075200.00, 9084060.00, 9084141.11, 9090355.33, -1.00 , 9089800.00,
121  9094400.00, 9090630.00, 9282200.00, 9286650.00, 9286713.33, 9288500.00,
122  -1.00 , 9289800.00, 9294400.00, -1.00 , -1.00 , 9290000.00},
123 /* ipSODIUM=10;*/
124 {0.00, 8935337.00, 9027981.00, 9022354.10, 9022876.10, 9025284.70, 9088700.00,
125  10558946.00, 10583431.00, 10583323.56, 10596783.40, 10597475.00, 10601080.00,
126  11115065.00, 11124986.00, 11125102.78, 11130639.00, 11131017.00, 11131051.00,
127  11131056.00, 11132393.00, 11369887.00, 11374868.00, 11374959.89, 11377767.00,
128  11377984.00, 11377987.00, 11377991.00, -1.00 , -1.00 , 11378646.00},
129 /* ipMAGNESIUM=11;*/
130 {0.00, 10736136.00, 10838778.00, 10831985.83, 10832819.18, 10836391.13, 10906612.00,
131  12691170.00, 12718304.00, 12718286.89, 12733392.33, 12734298.00, 12738006.00,
132  13361991.00, 13372977.00, 13373168.22, 13379472.60, 13379830.00, 13379893.00,
133  13379898.00, 13381265.00, 13669618.00, 13675137.00, 13675269.22, 13678467.13,
134  13678680.00, -1.00 , -1.00 , -1.00 , -1.00 , 13679363.00},
135 /* ipALUMINIUM=12;*/
136 {0.00, 12703061.00, 12815760.00, 12807847.00, 12809088.00, 12814213.00, 12891081.00,
137  15020463.00, 15050257.00, 15050434.00, 15067287.07, 15068371.00, 15072141.00,
138  15816791.00, 15828851.00, 15829158.67, 15836125.13, 15836581.00, -1.00 ,
139  -1.00 , 15838068.00, 16182216.00, 16188281.00, 16188471.33, 16192010.13,
140  16192244.00, -1.00 , -1.00 , -1.00 , -1.00 , 16192975.00},
141 /* ipSILICON=13;*/
142 {0.00, 14835945.00, 14958753.00, 14949756.42, 14951532.63, 14958690.57, 15042040.00,
143  17546734.00, 17579166.00, 17579686.44, 17598406.93, 17599605.00, 17603422.00,
144  18479389.00, 18492532.00, 18493007.56, 18500821.00, 18501245.00, -1.00 ,
145  -1.00 , 18502736.00, 18907613.00, 18914246.00, 18914502.78, 18918476.30,
146  18918694.00, -1.00 , -1.00 , -1.00 , -1.00 , 18919421.00},
147 /* ipPHOSPHORUS=14;*/
148 {0.00, 17135768.00, 17268828.00, 17258746.00, 17261164.00, 17270908.00, 17360546.00,
149  20271100.00, 20306284.00, 20307209.11, 20327865.87, 20329412.00, 20332952.00,
150  21350958.00, 21365192.00, 21365892.89, 21374428.00, 21375044.00, 21375302.00,
151  21375302.00, 21376454.00, 21846994.00, 21854144.00, 21854552.89, 21858894.80,
152  21859210.00, 21859340.00, 21859340.00, -1.00 , -1.00 , 21859464.00},
153 /* ipSULPHUR=15;*/
154 {0.00, 19602076.00, 19745473.00, 19734297.61, 19737518.84, 19750576.04, 19846285.00,
155  23193163.00, 23231087.00, 23232596.56, 23255347.53, 23257195.00, 23260416.00,
156  24431101.00, 24446439.00, 24447429.78, 24456981.30, 24457576.00, -1.00 ,
157  -1.00 , 24458842.00, 24999972.00, 25007605.00, 25008238.11, 25013102.40,
158  25013407.00, -1.00 , -1.00 , -1.00 , -1.00 , 25014007.00},
159 /* ipCHLORINE=16;*/
160 {0.00, 22236180.00, 22390000.00, 22377820.00, 22381940.00, 22399100.00, 22500680.00,
161  26314360.00, 26355050.00, 26357324.44, 26382328.67, 26384530.00, 26387270.00,
162  27720900.00, 27738000.00, 27738966.67, 27749520.00, 27750400.00, 27757331.14,
163  27757178.00, 27751600.00, 28367700.00, 28376500.00, 28376977.78, 28382286.67,
164  28382800.00, -1.00 , -1.00 , -1.00 , -1.00 , 28383400.00},
165 /* ipARGON=17;*/
166 {0.00, 25038230.00, 25202480.00, 25189388.10, 25194588.99, 25216810.57, 25323950.00,
167  29634850.00, 29678210.00, 29681541.11, 29713920.00, 29715070.00, 29713740.00,
168  31221700.00, 31239280.00, 31241087.78, -1.00 , -1.00 , -1.00 ,
169  -1.00 , 31254280.00, 31951370.00, 31960150.00, 31961182.22, -1.00 ,
170  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 31967860.00},
171 /* ipPOTASSIUM=18;*/
172 {0.00, 28004980.00, 28180480.00, 28165880.00, 28172670.00, 28200800.00, 28312910.00,
173  33151930.00, 33198090.00, 33202622.22, -1.00 , -1.00 , 33237140.00,
174  -1.00 , 34948420.00, -1.00 , -1.00 , -1.00 , -1.00 ,
175  -1.00 , 34964920.00, 35747360.00, 35756712.00, 35758032.00, -1.00 ,
176  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 35765192.00},
177 /* ipCALCIUM=19;*/
178 {0.00, 31142150.00, 31328450.00, 31312818.51, 31320486.08, 31356326.72, 31473810.00,
179  36870940.00, 36919930.00, 36925900.00, -1.00 , -1.00 , 36962850.00,
180  38850670.00, 38870530.00, 38873536.67, -1.00 , -1.00 , -1.00 ,
181  -1.00 , 38888680.00, 39761380.00, 39771310.00, 39772968.89, -1.00 ,
182  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 39780630.00},
183 /* ipSCANDIUM=20;*/
184 {0.00, 34448120.00, 34645360.00, 34628770.00, 34638550.00, 34682810.00, 34805000.00,
185  40790620.00, 40842480.00, 40850158.89, -1.00 , -1.00 , 40889690.00,
186  42983370.00, 43004390.00, 43008165.56, -1.00 , -1.00 , -1.00 ,
187  -1.00 , 43024380.00, 43992240.00, 44002740.00, 44004803.33, -1.00 ,
188  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 44013010.00},
189 /* ipTITANIUM=21;*/
190 {0.00, 37923880.00, 38131640.00, 38114760.00, 38125260.00, 38180620.00, 38308340.00,
191  44911910.00, 44966970.00, 44976472.22, 45016028.67, 45021140.00, 45018670.00,
192  47328500.00, 47351600.00, 47355644.44, 47372326.67, 47374500.00, -1.00 ,
193  -1.00 , 47373500.00, 48440800.00, 48452600.00, 48454581.11, -1.00 ,
194  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 48463700.00},
195 /* ipVANADIUM=22;*/
196 {0.00, 41568880.00, 41787830.00, 41770130.00, 41782100.00, 41849950.00, 41982380.00,
197  49234710.00, 49292760.00, 49304574.44, 49347922.67, 49353910.00, 49349740.00,
198  51886600.00, 51910900.00, 51915955.56, 51934113.33, 51936800.00, -1.00 ,
199  -1.00 , 51935100.00, 53107300.00, 53119700.00, 53122217.78, -1.00 ,
200  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 53132000.00},
201 /* ipCHROMIUM=23;*/
202 {0.00, 45384110.00, 45614410.00, 45595910.00, 45609360.00, 45691820.00, 45828830.00,
203  53760100.00, 53821190.00, 53835660.00, 53883181.33, 53890160.00, 53884060.00,
204  56658500.00, 56684100.00, 56690288.89, 56710306.67, 56713200.00, -1.00 ,
205  -1.00 , 56710700.00, 57992700.00, 58005800.00, 58008904.44, -1.00 ,
206  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 58019400.00},
207 /* ipMANGANESE=24;*/
208 {0.00, 49370240.00, 49612040.00, 49592800.00, 49607700.00, 49707130.00, 49848620.00,
209  58488800.00, 58553000.00, 58570522.22, 58622620.00, 58630700.00, 58622500.00,
210  61644700.00, 61671800.00, 61679233.33, 61701013.33, 61704700.00, -1.00 ,
211  -1.00 , 61701200.00, 63097900.00, 63111600.00, 63115327.78, -1.00 ,
212  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 63126600.00},
213 /* ipIRON=25;*/
214 {0.00, 53527760.00, 53781230.00, 53761280.00, 53777570.00, 53896550.00, 54042490.00,
215  63421700.00, 63489000.00, 63509966.67, 63567120.00, 63576500.00, 63565800.00,
216  66846900.00, 66875000.00, 66884011.11, 66908120.00, 66912100.00, -1.00 ,
217  -1.00 , 66907600.00, 68423800.00, 68438100.00, 68442730.00, -1.00 ,
218  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 68454800.00},
219 /* ipCOBALT=26;*/
220 {0.00, 57857380.00, 58122700.00, 58102090.00, 58119680.00, 58261180.00, 58411430.00,
221  68560000.00, 68630600.00, 68655444.44, 68718160.00, 68728900.00, 68715500.00,
222  72266000.00, 72295500.00, 72306144.44, 72332586.67, 72337100.00, -1.00 ,
223  -1.00 , 72331500.00, 73972000.00, 73987000.00, 73992318.89, -1.00 ,
224  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 74005400.00},
225 /* ipNICKEL=27;*/
226 {0.00, 62358960.00, 62637200.00, 62615022.80, 62633778.00, 62800884.44, 62952670.00,
227  73903340.00, 73976370.00, 74005924.44, -1.00 , -1.00 , 74070580.00,
228  77900890.00, 77930480.00, 77943808.89, -1.00 , -1.00 , -1.00 ,
229  -1.00 , 77970500.00, 79740940.00, 79755710.00, 79762730.00, -1.00 ,
230  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 79776290.00},
231 /* ipCOPPER=28;*/
232 {0.00, 67035380.00, 67324970.00, 67303150.00, 67322950.00, 67519170.00, 67678080.00,
233  79453200.00, 79530300.00, 79564500.00, 79640046.67, 79654200.00, 79634300.00,
234  83754400.00, 83786500.00, 83801155.56, 83832993.33, 83838900.00, -1.00 ,
235  -1.00 , 83830600.00, 85734300.00, 85750700.00, 85759175.00, -1.00 ,
236  -1.00 , -1.00 , -1.00 , -1.00 , -1.00 , 85773200.00},
237 /* ipZINC=29;*/
238 {0.00, 71886300.00, 72188400.00, 72166200.00, 72186600.00, 72415600.00, 72579000.00,
239  85212700.00, 85293200.00, 85332955.56, 85415826.67, 85431900.00, 85408300.00,
240  89828600.00, 89862000.00, 89879022.22, 89913666.67, 89920800.00, -1.00 ,
241  -1.00 , 89910900.00, 91953400.00, 91970500.00, 91979222.22, 91995073.33,
242  92000500.00, -1.00 , -1.00 , -1.00 , -1.00 , 91994500.00}};
243 
244 /* helike_quantum_defect - calculate quantum defect for a given level and nuclear charge. */
245 double helike_quantum_defect( long nelem, long n, long lqn, long S, long j )
246 {
247  DEBUG_ENTRY( "helike_quantum_defect()" );
248 
249  /* The quantum defect, and parameters a,b, and c */
250  double qd,a,b,c;
251 
252  /* These are values of quantum defects of Helium levels at n=10.
253  * First dimension is spin, second is angular momentum.
254  * The defects are assumed to be constant for all n>10 and
255  * equal to these values. */
256  static const double HeDefectAsymptotes[2][10] = {
257  {1.40005E-01,-1.20673E-02,2.08056E-03,4.21484E-04,1.14868E-04,
258  4.08648E-05,1.73548E-05,8.33891E-06,4.39680E-06,2.42075E-06},
259  {2.97063E-01,6.81567E-02,2.82381E-03,4.27703E-04,1.17319E-04,
260  4.25254E-05,1.85549E-05,9.24641E-06,5.30882E-06,3.02877E-06}
261  };
262 
263  /* Parameters for fits to quantum defects for */
264  /* P triplet and S orbitals. The dimensions are */
265  /* first: l */
266  /* second: n */
267  /* third: parameters a,b,and c. */
268  static const double param[3][4][3]=
269  {
270  {{0.6451941,0.3119437,-1.2722842}, /* ^3S */
271  {0.7664874,0.3455675,-1.3976462},
272  {0.8247101,0.3603131,-1.4520500},
273  {0.8878402,0.3714450,-1.4995732}},
274 
275  {{1.4203514,0.5311096,-2.6728087}, /* ^1S */
276  {1.5733513,0.5997339,-2.9253834},
277  {1.4531025,0.5924751,-2.8662756},
278  {1.6038999,0.6342552,-3.0298071}},
279 
280  {{-2.2323488,0.0890840,-0.5166053}, /* ^3P */
281  {-2.0463691,0.1222081,-0.6672983},
282  {-1.9904104,0.1328918,-0.7150879},
283  {-1.9500974,0.1452111,-0.7649031}}
284  };
285 
286  /* Because they cannot be fit to a funtion of the same form as the other orbitals,
287  * the P singlets are fit to a different function, with these parameters and dimensions */
288  /* first: n */
289  /* second: parameters a and b. */
290  static const double P1[4][2]=
291  {
292  {-56.65245,-3.661923},
293  {-52.03411,-4.941075},
294  {-50.43744,-5.525750},
295  {-49.45137,-5.908615}
296  };
297 
298  long int s;
299 
300  if( S==1 )
301  s = 0;
302  else if( S==3 )
303  s = 1;
304  else if( S < 0 )
305  {
306  ASSERT( n > iso_sp[ipHE_LIKE][nelem].n_HighestResolved_max );
307  s = S;
308  }
309  else
310  TotalInsanity();
311 
312  ASSERT(n >= 1L);
313  ASSERT(lqn >= 0 || n > iso_sp[ipHE_LIKE][nelem].n_HighestResolved_max);
314  ASSERT(n > lqn);
315  /* Only Helium and up, and only those turned on. */
316  ASSERT((nelem >= ipHELIUM) && (nelem < LIMELM));
317 
318  if( n > iso_sp[ipHE_LIKE][nelem].n_HighestResolved_max )
319  {
320  /* collapsed levels are assumed to have zero quantum defect. */
321  qd = 0.;
322  }
323  else if( nelem == ipHELIUM )
324  {
325  if( n<=10 && n<=iso_sp[ipHE_LIKE][nelem].n_HighestResolved_max )
326  {
327  long ipLo = iso_sp[ipHE_LIKE][nelem].QuantumNumbers2Index[n][lqn][S];
328 
329  // Adjust for resolved 2^3Pj levels
330  if( (n==2) && (lqn==1) && (S==3) )
331  {
332  ASSERT( (j>=0) && (j<=2) );
333  ipLo -= (2 - j);
334  }
335 
336  ASSERT( ipLo<NHE1LEVELS );
337  /* defects are calculated from theoretical energies. */
338  qd = n-sqrt(HE_RYD_FACTOR*RYD_INF/(EionWN[ipHELIUM] - He1Energies[ipLo]));
339  }
340  else if( lqn<=9 )
341  {
342  ASSERT( s >= 0 && lqn >= 0 );
343  /* defects are set equal to the values at n=10. */
344  qd = HeDefectAsymptotes[s][lqn];
345  }
346  else if( s == 0 )
347  {
348  /* a simple fit for singlet high-l defects. */
349  qd = 0.0497*pow((double)lqn, -4.4303);
350  }
351  else
352  {
353  /* a simple fit for triplet high-l defects. */
354  qd = 0.0656*pow((double)lqn, -4.5606);
355  }
356  }
357  else if( n==1 )
358  {
359  /* Quantum defects for ground state are found from the rydberg
360  * equation, and the ionization potential of the ion.
361  * the lint needs to see assert and not ASSERT */
362  ASSERT(nelem>ipHYDROGEN && nelem<LIMELM );
363  qd = 1.0 - nelem * sqrt(1/EionRYD[nelem]);
364  }
365  else
366  {
367  /* For levels with n > 5, the quantum defect */
368  /* is approximately the same as if n equaled 5. */
369  if( n > 5L )
370  {
371  n = 5L;
372  }
373  /* For P singlets */
374  if( lqn==1L && s==0L )
375  {
376  qd = 1./(P1[n-2][0] + P1[n-2][1] * (nelem+1) * log((double)nelem+1.) );
377  }
378  /* Defects for orbitals with l>2 are approximately equal to zero. */
379  else if( lqn < 2L )
380  {
381  a = param[2*(lqn+1)-s-1][n-2][0];
382  b = param[2*(lqn+1)-s-1][n-2][1];
383  c = param[2*(lqn+1)-s-1][n-2][2];
384  qd = exp((a+c*(nelem+1))/(1.0+b*(nelem+1)));
385  }
386  /* This fit is a simplification of table 11.9 from
387  * >>refer Helike defects Drake, G.W.F., editor. Atomic, Molecular & Optical Physics Handbook.
388  * >>refercon Chapter 11, "High Precision Calculations for Helium", G.W.F. Drake.
389  * >>refercon AIP Press: Woodbury, New York, 1996
390  * This will give quasi-real energies for all transitions, allowing a reasonable
391  * determination of which decays are zeroed due to being below the plasma frequency.
392  * The 1/nelem dependence is arbitray. */
393  else
394  {
395  ASSERT( lqn >= 2L );
396  qd = ( ( 0.0612/(double)nelem ) / pow((double)lqn, 4.44) );
397  }
398  }
399  return qd;
400 }
401 
402 /*helike_energy calculates energy of a given level. */
403 double helike_energy(long int nelem, long int ipLev )
404 {
405  double Ef, Eff_n;
406  long ipISO=ipHE_LIKE;
407 
408  DEBUG_ENTRY( "helike_energy()" );
409 
410  if( N_(ipLev) > iso_sp[ipISO][nelem].n_HighestResolved_max )
411  {
412  /* \todo 2 make this number a constant in physconst.h */
413  /* The first term is the ratio of the helium finite mass rydberg
414  * to the infinite mass rydberg. */
415  Ef = HE_RYD_FACTOR* RYD_INF * POW2((double)nelem/(double)N_(ipLev));
416  }
417  else if( nelem==ipHELIUM && ipLev<NHE1LEVELS )
418  {
419  /* for atomic helium use experimental energies */
420  Ef = EionWN[ipHELIUM] - He1Energies[ipLev];
421  }
422  else if( nelem > ipHELIUM && nelem <= ipZINC &&
423  ipLev < NIONLEVELS && IonEnergies[nelem-2][ipLev] >= 0. )
424  {
425  Ef = EionWN[nelem] - IonEnergies[nelem-2][ipLev];
426  }
427  else
428  {
429  Eff_n = N_(ipLev) - helike_quantum_defect( nelem, N_(ipLev), L_(ipLev), S_(ipLev), J_(ipLev) );
430  /* quantum defect can only be negative for singlet P */
431  ASSERT( ( L_(ipLev)==1 && S_(ipLev)==1 ) || ( N_(ipLev) - Eff_n >= 0. ) );
432 
433  /* energies (in wavenumbers) that correspond to quantum defect */
434  Ef = HE_RYD_FACTOR * RYD_INF * POW2((double)nelem/Eff_n);
435  }
436 
437  ASSERT(Ef > 0.);
438 
439  return Ef;
440 }
441 
static const double He1Energies[NHE1LEVELS]
const int ipHE_LIKE
Definition: iso.h:65
static const int NIONLEVELS
#define J_(A_)
Definition: iso.h:25
NORETURN void TotalInsanity(void)
Definition: service.cpp:971
const double HE_RYD_FACTOR
static const double EionWN[LIMELM]
const int ipZINC
Definition: cddefines.h:378
t_iso_sp iso_sp[NISO][LIMELM]
Definition: iso.cpp:11
double helike_energy(long nelem, long ipLev)
#define L_(A_)
Definition: iso.h:23
double helike_quantum_defect(long nelem, long n, long lqn, long S, long j)
#define POW2
Definition: cddefines.h:979
#define N_(A_)
Definition: iso.h:22
static const double EionRYD[LIMELM]
#define S_(A_)
Definition: iso.h:24
multi_arr< long, 3 > QuantumNumbers2Index
Definition: iso.h:490
static const int NHE1LEVELS
#define ASSERT(exp)
Definition: cddefines.h:613
const int LIMELM
Definition: cddefines.h:308
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:723
const int ipHELIUM
Definition: cddefines.h:350
static const double IonEnergies[LIMELM-2][NIONLEVELS]
#define S(I_, J_)
const int ipHYDROGEN
Definition: cddefines.h:349