cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
atmdat_lines_setup.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2013 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 /*lines_setup convert level 1 and level 2 line parameters and pointers into internal form
4  * used by code, line data were read in by atmdat_readin */
5 #include "cddefines.h"
6 #include "physconst.h"
7 #include "lines_service.h"
8 #include "prt.h"
9 #include "taulines.h"
10 #include "opacity.h"
11 #include "lines.h"
12 
13 /* following used for generating array indices to level1 lines,
14  * start process, use it, then end */
15 STATIC void initFindLevLine( void );
16 STATIC long ipFindLevLine( realnum , long , long );
17 STATIC void endFindLevLine( void );
18 
19 void lines_setup(void)
20 {
21  long int i;
22 
23  static bool lgFirst = true;
24  bool lgSane;
25 
26  DEBUG_ENTRY( "lines_setup()" );
27 
28  /* this routine takes the line parameters in the wind block data and sorts
29  * them into what is needed for the actual line optical depth arrays */
30 
33  /* this is the dummy line */
34  TauLines[0].WLAng() = 0.;
35  (*TauLines[0].Lo()).g() = 0.;
36  (*TauLines[0].Hi()).g() = 0.;
37  TauLines[0].Emis().gf() = 0.;
38  TauLines[0].EnergyWN() = 0.;
39  (*TauLines[0].Hi()).IonStg() = 0;
40  (*TauLines[0].Hi()).nelem() = 0;
41  /* this is an impossible value of iRedisFun() */
42  TauLines[0].Emis().iRedisFun() = 0;
43  TauLines[0].Emis().Aul() = 0.;
44 
45  /* the first valid line is [0] since zero is the dummy */
46  if( TauLines[1].EnergyWN() <= 0. )
47  {
48  fprintf( ioQQQ, " PROBLEM Insane value for TauLines array.\n" );
49  fprintf( ioQQQ, " Was block data LineData linked in??\n" );
50  fprintf( ioQQQ, " Check that it compiled OK (it probably did not).\n" );
51  TotalInsanity();
52  }
53 
54  /* check that all lines have valid data */
55  lgSane = true;
56  for( i=1; i <= nLevel1; i++ )
57  {
58 
59  if( (*TauLines[i].Lo()).g() <= 0. )
60  {
61  fprintf( ioQQQ, " routine lines_setup, insane lower stat wght\n" );
62  fprintf( ioQQQ, " line index is %5ld\n", i );
63  lgSane = false;
64  }
65 
66  if( (*TauLines[i].Hi()).g() <= 0. )
67  {
68  fprintf( ioQQQ, " routine lines_setup, insane upper stat wght\n" );
69  fprintf( ioQQQ, " line index is %5ld\n", i );
70  lgSane = false;
71  }
72 
73  if( TauLines[i].EnergyWN() <= 0. )
74  {
75  fprintf( ioQQQ, " routine lines_setup, insane energy WN\n" );
76  fprintf( ioQQQ, " line index is %5ld\n", i );
77  lgSane = false;
78  }
79 
80  if( (*TauLines[i].Hi()).IonStg() <= 0 )
81  {
82  fprintf( ioQQQ, " routine lines_setup, insane ioniz stage\n" );
83  fprintf( ioQQQ, " line index is %5ld\n", i );
84  lgSane = false;
85  }
86 
87  if( (*TauLines[i].Hi()).nelem() <= 0 || (*TauLines[i].Hi()).nelem() > (int)LIMELM )
88  {
89  fprintf( ioQQQ, " routine lines_setup, insane Nelem\n" );
90  fprintf( ioQQQ, " line index is %5ld\n", i );
91  lgSane = false;
92  }
93 
94  if( (*TauLines[i].Hi()).IonStg() > (*TauLines[i].Hi()).nelem() )
95  {
96  fprintf( ioQQQ, " routine lines_setup, insane IonStg>Nelem\n" );
97  fprintf( ioQQQ, " line index is %5ld\n", i );
98  lgSane = false;
99  }
100 
101  if( TauLines[i].Emis().iRedisFun() == 0 )
102  {
103  fprintf( ioQQQ, " routine lines_setup, insane line redis fcn\n" );
104  fprintf( ioQQQ, " line index is %5ld\n", i );
105  lgSane = false;
106  }
107 
108  /* use energies for wavelengths in air if wl not forced with wl number on line */
109  /* >>chng 03 oct 07, only make correction for index ref if
110  * if wl was not already set - this is an option to allow
111  * the printed wl to be specified in the level1.dat file */
112  if( TauLines[i].WLAng() <= 0. )
113  {
114  /* make following an air wavelength */
115  TauLines[i].WLAng() =
116  (realnum)(1.0e8/
117  TauLines[i].EnergyWN()/
118  RefIndex( TauLines[i].EnergyWN()));
119  }
120  {
121  /*@-redef@*/
122  enum{DEBUG_LOC=false};
123  /*@+redef@*/
124  if( DEBUG_LOC )
125  {
126  char chString[10];
127  chIonLbl(chString,TauLines[i]);
128  fprintf( ioQQQ,"%s ", chString );
129  prt_wl( ioQQQ , TauLines[i].WLAng() );
130  fprintf(ioQQQ,"\n");
131  }
132  }
133  }
134 
135  if( !lgSane )
136  {
137  fprintf( ioQQQ, " Insane value for line arrays encountered.\n" );
138  fprintf( ioQQQ, " Was block data lines linked in??\n" );
139  fprintf( ioQQQ, " Were errors intreoducted into the line array?\n" );
140  ShowMe();
142  }
143 
144  /* set up array to store hits for each line */
145  initFindLevLine( );
146 
147  /* in following calls to ipFindLevLine the numbers are the integer wavelength
148  * used in the printout, the ion stage, and the atomic number */
149 
150  /* carbon line optical depth data */
151  ipT1656 = ipFindLevLine( 1656 , 1 , 6 );
152 
153  ipT9830 = ipFindLevLine( 9830 , 1 , 6 );
154 
155  ipT8727 = ipFindLevLine( 8727 , 1 , 6 );
156 
157  ipC2_2325 = ipFindLevLine( 2325 , 2 , 6 );
158  ipC2_2324 = ipFindLevLine( 2324 , 2 , 6 );
159  ipC2_2329 = ipFindLevLine( 2329 , 2 , 6 );
160  ipC2_2328 = ipFindLevLine( 2328 , 2 , 6 );
161  ipC2_2327 = ipFindLevLine( 2327 , 2 , 6 );
162 
163  ipT1335 = ipFindLevLine( 1335 , 2 , 6 );
164 
165  ipT1909 = ipFindLevLine( 1910 , 3 , 6 );
166 
167  ipT977 = ipFindLevLine( 977 , 3 , 6 );
168 
169  ipT1550 = ipFindLevLine( 1551 , 4 , 6 );
170 
171  ipT1548 = ipFindLevLine( 1548 , 4 , 6 );
172 
173  ipT386 = ipFindLevLine( 386 , 3 , 6 );
174 
175  ipT310 = ipFindLevLine( 310 , 3 , 6 );
176 
177  /*CIII* 1175, lower level = upper level of 1909*/
178  ipc31175 = ipFindLevLine( 1176 , 3 , 6 );
179 
180  ipT291 = ipFindLevLine( 291 , 3 , 6 );
181 
182  ipT280 = ipFindLevLine( 280 , 3 , 6 );
183 
184  ipT274 = ipFindLevLine( 274 , 3 , 6 );
185 
186  ipT270 = ipFindLevLine( 270 , 3 , 6 );
187 
188  ipT312 = ipFindLevLine( 312 , 4 , 6 );
189 
190  /*carbon fine structure lines added by Jim Kingdon*/
191  ipT610 = ipFindLevLine( 6092000 , 1 , 6 );
192 
193  ipT370 = ipFindLevLine( 3697000 , 1 , 6 );
194 
195  ipT157 = ipFindLevLine( 1576000 , 2 , 6 );
196 
197  /*nitrogen line optical depth data*/
198  ipNI_pumpIndirect = ipFindLevLine( 953.9f , 1 , 7 );
199  ipNI_pumpDirect[0] = ipFindLevLine( 954.1f , 1 , 7 );
200  ipNI_pumpDirect[1] = ipFindLevLine( 951.0f , 1 , 7 );
201  ipNI_pumpDirect[2] = ipFindLevLine( 955.8f , 1 , 7 );
202  ipNI_pumpDirect[3] = ipFindLevLine( 959.4f , 1 , 7 );
203  ipNI_pumpDirect[4] = ipFindLevLine( 955.5f , 1 , 7 );
204  ipNI_pumpDirect[5] = ipFindLevLine( 951.2f , 1 , 7 );
205  ipNI_pumpDirect[6] = ipFindLevLine( 960.2f , 1 , 7 );
206  ipNI_pumpDirect[7] = ipFindLevLine(1159.8f , 1 , 7 );
207  ipNI_pumpDirect[8] = ipFindLevLine(1160.9f , 1 , 7 );
208 
209  ipT1200 = ipFindLevLine( 1200 , 1 , 7 );
210 
211  ipT1085 = ipFindLevLine( 1085 , 2 , 7 );
212 
213  ipN3_1749 = ipFindLevLine( 1749 , 3 , 7 );
214  ipN3_1747 = ipFindLevLine( 1747 , 3 , 7 );
215  ipN3_1754 = ipFindLevLine( 1754 , 3 , 7 );
216  ipN3_1752 = ipFindLevLine( 1752 , 3 , 7 );
217  ipN3_1751 = ipFindLevLine( 1751 , 3 , 7 );
218 
219  ipT990 = ipFindLevLine( 991 , 3 , 7 );
220 
221  ipT1486 = ipFindLevLine( 1486 , 4 , 7 );
222 
223  ipT765 = ipFindLevLine( 765 , 4 , 7 );
224 
225  ipT1243 = ipFindLevLine( 1243 , 5 , 7 );
226 
227  ipT1239 = ipFindLevLine( 1239 , 5 , 7 );
228 
229  ipT374g = ipFindLevLine( 373 , 3 , 7 );
230 
231  /*this is the stronger of the two lines*/
232  ipT374x = ipFindLevLine( 374 , 3 , 7 );
233 
234  ipT2140 = ipFindLevLine( 2141 , 2 , 7 );
235 
236  ipT671 = ipFindLevLine( 671 , 2 , 7 );
237 
238  ipT315 = ipFindLevLine( 315 , 3 , 7 );
239 
240  ipT324 = ipFindLevLine( 324 , 3 , 7 );
241 
242  ipT333 = ipFindLevLine( 333 , 3 , 7 );
243 
244  ipT209 = ipFindLevLine( 209 , 5 , 7 );
245 
246  /*fine structure lines */
247  /*[N II] 121.7*/
248  ipT122 = ipFindLevLine( 1217000 , 2 , 7 );
249 
250  /*[N II] 205.4*/
251  ipT205 = ipFindLevLine( 2054000 , 2 , 7 );
252 
253  /*big disagreement in A for this line, other val is 2x larger*/
254  /*see review in DEO Seaton 70th birthday*/
255  ipT57 = ipFindLevLine( 572100 , 3 , 7 );
256 
257  /*oxygen line optical depth data*/
258  ipT6300 = ipFindLevLine( 6300 , 1 , 8 );
259 
260  ipT6363 = ipFindLevLine( 6363 , 1 , 8 );
261 
262  /*A from NISt 96*/
263  ipT5577 = ipFindLevLine( 5577 , 1 , 8 );
264 
265  ipT834 = ipFindLevLine( 833.8f , 2 , 8 );
266 
267  ipT1661 = ipFindLevLine( 1661 , 3 , 8 );
268 
269  ipT1666 = ipFindLevLine( 1666 , 3 , 8 );
270 
271  ipT835 = ipFindLevLine( 835 , 3 , 8 );
272 
273  ipO4_1400 = ipFindLevLine( 1400 , 4 , 8 );
274  ipO4_1397 = ipFindLevLine( 1397 , 4 , 8 );
275  ipO4_1407 = ipFindLevLine( 1407 , 4 , 8 );
276  ipO4_1405 = ipFindLevLine( 1405 , 4 , 8 );
277  ipO4_1401 = ipFindLevLine( 1401 , 4 , 8 );
278 
279  ipT789 = ipFindLevLine( 789 , 4 , 8 );
280 
281  ipT630 = ipFindLevLine( 630 , 5 , 8 );
282 
283  /*start OI 6 level atom*/
284  ipT1304 = ipFindLevLine( 1304 , 1 , 8 );
285 
286  ipT1039 = ipFindLevLine( 1039 , 1 , 8 );
287 
288  ipT8446 = ipFindLevLine( 8446 , 1 , 8 );
289 
290  ipT4368 = ipFindLevLine( 4368 , 1 , 8 );
291 
292  ipTOI13 = ipFindLevLine( 13200 , 1 , 8 );
293 
294  ipTOI11 = ipFindLevLine( 11300 , 1 , 8 );
295 
296  ipTOI29 = ipFindLevLine( 29000 , 1 , 8 );
297 
298  ipTOI46 = ipFindLevLine( 46000 , 1 , 8 );
299 
300  ipTO1025 = ipFindLevLine( 1025 , 1 , 8 );
301 
302  /*end of OI 6 level atom*/
303 
304  ipT304 = ipFindLevLine( 304 , 3 , 8 );
305 
306  ipT1214 = ipFindLevLine( 1218 , 5 , 8 );
307 
308  ipT150 = ipFindLevLine( 150 , 6 , 8 );
309 
310  /*fine structure lines*/
311  /*[O I] 146 microns*/
312  ipT146 = ipFindLevLine( 1455300 , 1 , 8 );
313 
314  /*[O I] 63 microns*/
315  ipT63 = ipFindLevLine( 631700 , 1 , 8 );
316 
317  /*[O III] 88.3564 m*/
318  ipTO88 = ipFindLevLine( 883300 , 3 , 8 );
319 
320  /*[O III] 51.8145*/
321  ipT52 = ipFindLevLine( 518000 , 3 , 8 );
322 
323  /*[O IV] 25.89mic, A from*/
324  ipT26 = ipFindLevLine( 258800 , 4 , 8 );
325 
326  ipT1032 = ipFindLevLine( 1031.9f , 6 , 8 );
327 
328  ipT1037 = ipFindLevLine( 1037.6f , 6 , 8 );
329 
330  /*neon*/
331  ipT770 = ipFindLevLine( 770.4f , 8 , 10 );
332 
333  ipT780 = ipFindLevLine( 780.3f , 8 , 10 );
334 
335  /*[Ne VI] 7.652 micron*/
336  ipxNe0676 = ipFindLevLine( 76520 , 6 , 10 );
337 
338  ipT895 = ipFindLevLine( 895 , 7 , 10 );
339 
340  ipT88 = ipFindLevLine( 88 , 8 , 10 );
341 
342  /*fine structure lines */
343  /*[Ne II] 12.8*/
344  ipTNe13 = ipFindLevLine( 128100 , 2 , 10 );
345 
346  /*[Ne III] 36.013 m*/
347  ipTNe36 = ipFindLevLine( 360140 , 3 , 10 );
348 
349  /*[Ne III] 15.56 m*/
350  ipTNe16 = ipFindLevLine( 155500 , 3 , 10 );
351 
352  /*[Ne V] 14.32 m*/
353  ipTNe14 = ipFindLevLine( 143200 , 5 , 10 );
354 
355  /*[Ne V] 24.318 m*/
356  ipTNe24 = ipFindLevLine( 243100 , 5 , 10 );
357 
358  /*sodium line optical depth data*/
359  ipT5895 = ipFindLevLine( 5891.9f , 1 , 11 );
360 
361  /*[Na III] 7.3177mic*/
362  ipfsNa373 = ipFindLevLine( 73200 , 3 , 11 );
363 
364  /*[Na IV] 9.039 mic*/
365  ipfsNa490 = ipFindLevLine( 90390 , 4 , 11 );
366 
367  /*[Na IV] 21.29 mic*/
368  ipfsNa421 = ipFindLevLine( 212900 , 4 , 11 );
369 
370  /*[Na VI] 14.40 mic*/
371  ipxNa6143 = ipFindLevLine( 144000 , 6 , 11 );
372 
373  /*[Na VI] 8.611 mic*/
374  ipxNa6862 = ipFindLevLine( 86110 , 6 , 11 );
375 
376  /*[Na VII] 4.68 micron*/
377  ipxNa0746 = ipFindLevLine( 46800 , 7 , 11 );
378 
379  /*magnesium line optical depth data*/
380  ipMgI2853 = ipFindLevLine( 2853 , 1 , 12 );
381 
382  ipMgI2026 = ipFindLevLine( 2026 , 1 , 12 );
383 
384  ipT2796 = ipFindLevLine( 2795.5f , 2 , 12 );
385 
386  ipT2804 = ipFindLevLine( 2802.7f , 2 , 12 );
387 
388  ipT705 = ipFindLevLine( 705 , 9 , 12 );
389 
390  ipT4561 = ipFindLevLine( 4561 , 1 , 12 );
391 
392  /*[Mg V] 1325, 3-1 in three level atom*/
393  ipxMg51325 = ipFindLevLine( 1325 , 5 , 12 );
394 
395  /*[Mg V] 2417, 3-2 in three level atom*/
396  ipxMg52417 = ipFindLevLine( 2417 , 5 , 12 );
397 
398  /*[Mg V] 2855, 2-1 in three level atom, really 2928, 2782*/
399  ipxMg52855 = ipFindLevLine( 2855 , 5 , 12 );
400 
401  /*[Mg VII] 1325, 3-1 in three level atom*/
402  ipxMg71190 = ipFindLevLine( 1190 , 7 , 12 );
403 
404  /*[Mg VII] 2261, 3-2 in three level atom*/
405  ipxMg72261 = ipFindLevLine( 2261 , 7 , 12 );
406 
407  /*[Mg VII] 2569, 2-1 in three level atom, really 2509, 2629*/
408  ipxMg72569 = ipFindLevLine( 2569 , 7 , 12 );
409 
410  /*[Mg VIII] 3.03 micron*/
411  ipxMg08303 = ipFindLevLine( 30300 , 8 , 12 );
412 
413  /*the Mg X 615 li seq doublet*/
414  ipTMg610 = ipFindLevLine( 609.8f , 10 , 12 );
415 
416  ipTMg625 = ipFindLevLine( 624.9f , 10 , 12 );
417 
418  ipT58 = ipFindLevLine( 57.9f , 10 , 12 );
419 
420  /*Mg IV 4.487m*/
421  ipTMg4 = ipFindLevLine( 44850 , 4 , 12 );
422 
423  /*[Mg V] 13.52*/
424  ipTMg14 = ipFindLevLine( 135200 , 5 , 12 );
425 
426  /*[Mg V] 5.610*/
427  ipTMg6 = ipFindLevLine( 56100 , 5 , 12 );
428 
429  /*[Mg VII] 9.033 mic*/
430  ipfsMg790 = ipFindLevLine( 90330 , 7 , 12 );
431 
432  /*[Mg VII] 5.503 mic7 , 12 );*/
433  ipfsMg755 = ipFindLevLine( 55030 , 7 , 12 );
434 
435  /* aluminum line optical depth data */
436  ipAlI3957 = ipFindLevLine( 3957 , 1 , 13 );
437 
438  ipAlI3090 = ipFindLevLine( 3090 , 1 , 13 );
439 
440  ipT1855 = ipFindLevLine( 1855 , 3 , 13 );
441 
442  ipT1863 = ipFindLevLine( 1863 , 3 , 13 );
443 
444  ipT2670 = ipFindLevLine( 2670 , 2 , 13 );
445 
446  /*[Al V] 2.905 mic*/
447  ipAl529 = ipFindLevLine( 29052 , 5 , 13 );
448 
449  /*[Al VI] 3.66 mic*/
450  ipAl6366 = ipFindLevLine( 36600 , 6 , 13 );
451 
452  /*[Al VI] 9.116 mic*/
453  ipAl6912 = ipFindLevLine( 91160 , 6 , 13 );
454 
455  /*[Al VIII] 5.848 mic*/
456  ipAl8575 = ipFindLevLine( 58480 , 8 , 13 );
457 
458  /*[Al VIII] 3.69 mic*/
459  ipAl8370 = ipFindLevLine( 36900 , 8 , 13 );
460 
461  /*[Al IX] 2.04 micron*/
462  ipAl09204 = ipFindLevLine( 20400 , 9 , 13 );
463 
464  ipT639 = ipFindLevLine( 639 , 10 , 13 );
465 
466  /*Al XI 550, 568 Li seq doublet */
467  ipTAl550 = ipFindLevLine( 550 , 11 , 13 );
468 
469  ipTAl568 = ipFindLevLine( 568 , 11 , 13 );
470 
471  ipTAl48 = ipFindLevLine( 48 , 11 , 13 );
472 
473  /*silicon line optical depth data*/
474  ipSi1_130m = ipFindLevLine( 1295823.0f , 1 , 14 );
475  ipSi1_68m = ipFindLevLine( 683995.25f , 1 , 14 );
476 
477  ipSii2518 = ipFindLevLine( 2518 , 1 , 14 );
478 
479  ipSii2215 = ipFindLevLine( 2215 , 1 , 14 );
480 
481  ipSi2_2334 = ipFindLevLine( 2334 , 2 , 14 );
482  ipSi2_2329 = ipFindLevLine( 2329 , 2 , 14 );
483  ipSi2_2350 = ipFindLevLine( 2350 , 2 , 14 );
484  ipSi2_2344 = ipFindLevLine( 2344 , 2 , 14 );
485  ipSi2_2336 = ipFindLevLine( 2336 , 2 , 14 );
486 
487  ipT1808 = ipFindLevLine( 1813.99f , 2 , 14 );
488 
489  ipT1527 = ipFindLevLine( 1531 , 2 , 14 );
490 
491  ipT1305 = ipFindLevLine( 1307.7f , 2 , 14 );
492 
493  ipT1260 = ipFindLevLine( 1263.3f , 2 , 14 );
494 
495  ipT1207 = ipFindLevLine( 1207 , 3 , 14 );
496 
497  ipT1895 = ipFindLevLine( 1892 , 3 , 14 );
498 
499  ipT1394 = ipFindLevLine( 1394 , 4 , 14 );
500 
501  ipT1403 = ipFindLevLine( 1403 , 4 , 14 );
502 
503  /*[Si VI] 1.9641mic*/
504  ipSi619 = ipFindLevLine( 19631 , 6 , 14 );
505 
506  /*[Si X] 1.43 micron*/
507  ipSi10143 = ipFindLevLine( 14300 , 10 , 14 );
508 
509  /* Si X] ll 621.1, 611.7, 598.6 */
510  ipSi10_606 = ipFindLevLine( 606 , 10 , 14 );
511 
512  ipTSi499 = ipFindLevLine( 499 , 12 , 14 );
513 
514  ipTSi521 = ipFindLevLine( 521 , 12 , 14 );
515 
516  ipTSi41 = ipFindLevLine( 41 , 12 , 14 );
517 
518  /*[Si II] 34.8 mic*/
519  ipTSi35 = ipFindLevLine( 348140 , 2 , 14 );
520 
521  /*[Si VII] 2.481*/
522  ipTSi25 = ipFindLevLine( 24810 , 7 , 14 );
523 
524  /*[Si VII] 6.4922*/
525  ipTSi65 = ipFindLevLine( 64920 , 7 ,14 );
526 
527  /*[Si IX] 2.585 mic*/
528  ipTSi3 = ipFindLevLine( 25840 , 9 , 14 );
529 
530  /*[Si IX] 3.929 mic*/
531  ipTSi4 = ipFindLevLine( 39290 , 9 , 14 );
532 
533  /*phosphorus line data*/
534  /*P II 60.64 mic*/
535  ipP0260 = ipFindLevLine( 606400 , 2 , 15 );
536 
537  /*P II 32.87 mic*/
538  ipP0233 = ipFindLevLine( 328700 , 2 , 15 );
539 
540  /*P III 17.885 mic*/
541  ipP0318 = ipFindLevLine( 178850 , 3 , 15 );
542 
543  /*P VII 1.3745 mic*/
544  ipP713 = ipFindLevLine( 13745 , 7 , 15 );
545 
546  /*sulphur line optical depth data*/
547  ipS1_25m = ipFindLevLine( 251947.453f , 1 , 16 );
548  ipS1_56m = ipFindLevLine( 562909.625f , 1 , 16 );
549 
550  ipT1256 = ipFindLevLine( 1256 , 2 , 16 );
551 
552  ipT1194 = ipFindLevLine( 1197.55f , 3 , 16 );
553 
554  ipTS1720 = ipFindLevLine( 1720 , 3 , 16 );
555 
556  ipS4_1405 = ipFindLevLine( 1405 , 4 , 16 );
557  ipS4_1398 = ipFindLevLine( 1398 , 4 , 16 );
558  ipS4_1424 = ipFindLevLine( 1424 , 4 , 16 );
559  ipS4_1417 = ipFindLevLine( 1417 , 4 , 16 );
560  ipS4_1407 = ipFindLevLine( 1406 , 4 , 16 );
561 
562  ipT1198 = ipFindLevLine( 1198 , 5 , 16 );
563 
564  ipT786 = ipFindLevLine( 786.47f , 5 , 16 );
565 
566  /*fine structure lines added in by Jim Kingdon*/
567  ipTS19 = ipFindLevLine( 186700 , 3 , 16 );
568 
569  /*[S III] 33.48*/
570  ipTS34 = ipFindLevLine( 334700 , 3 , 16 );
571 
572  ipTS11 = ipFindLevLine( 105100 , 4 , 16 );
573 
574  /*chlorine line optical depth data*/
575 
576  /* Cl 1 mic */
577  ipCl1_11m = ipFindLevLine( 113296.3984f , 1 , 17 );
578 
579  /*Cl II 14.3678 mic*/
580  ipfsCl214 = ipFindLevLine( 144000 , 2 , 17 );
581 
582  /*Cl II 33.281 mic*/
583  ipfsCl233 = ipFindLevLine( 333000 , 2 , 17 );
584 
585  /*[Cl 4] 20.354 mic*/
586  ipCl04203 = ipFindLevLine( 204000 , 4 , 17 );
587 
588  /*[Cl 4] 11.741 mic*/
589  ipCl04117 = ipFindLevLine( 117000 ,4 , 17 );
590 
591  /*Cl IX 7334A*/
592  ipCl973 = ipFindLevLine( 7334 , 9 , 17 );
593 
594  /*argon fine structure lines*/
595  /*[Ar II]*/
596  ipTAr7 = ipFindLevLine( 69800 , 2 , 18 );
597 
598  /*[Ar III] 9.0 mic*/
599  ipTAr9 = ipFindLevLine( 90000 , 3 , 18 );
600 
601  /*[Ar III] 21.83 mic*/
602  ipTAr22 = ipFindLevLine( 218300 , 3 , 18 );
603 
604  /*[Ar V] 13.1 mic*/
605  ipTAr13 = ipFindLevLine( 131000 , 5 , 18 );
606 
607  /*[Ar V] 8.0 mic*/
608  ipTAr8 = ipFindLevLine( 80000 , 5 , 18 );
609 
610  /*[Ar VI] 4.53 micron*/
611  ipAr06453 = ipFindLevLine( 45300 , 6 , 18 );
612 
613  /*potasium - really should split into two*/
614  ipKI7745 = ipFindLevLine( 7676.2f , 1 , 19 );
615 
616  /*[K III] 4.62 micron*/
617  ipxK03462 = ipFindLevLine( 46200 , 3 , 19 );
618 
619  /*[K IV] 5.982 micron*/
620  ipxK04598 = ipFindLevLine( 59800 , 4 , 19 );
621 
622  /*[K IV] 15.39 micron4 , 19 );*/
623  ipxK04154 = ipFindLevLine( 153900 , 4 , 19 );
624 
625  /*[K VII] 3.19 micron7 , 19 );*/
626  ipxK07319 = ipFindLevLine( 31905 , 7 , 19 );
627 
628  /*calcium line optical depth data*/
629  ipCaI4228 = ipFindLevLine( 4228 , 1 , 20 );
630 
631  ipT3934 = ipFindLevLine( 3934 , 2 , 20 );
632 
633  ipT3969 = ipFindLevLine( 3969 , 2 , 20 );
634 
635  ipT8498 = ipFindLevLine( 8498 , 2 , 20 );
636 
637  ipT8542 = ipFindLevLine( 8542 , 2 , 20 );
638 
639  ipT8662 = ipFindLevLine( 8662 , 2 , 20 );
640 
641  ipT7291 = ipFindLevLine( 7291 , 2 , 20 );
642 
643  ipT7324 = ipFindLevLine( 7324 , 2 , 20 );
644 
645  /*[Ca IV] 3.21 min*/
646  ipTCa3 = ipFindLevLine( 32100 , 4 , 20 );
647 
648  /*scandium data*/
649  /*[Sc V] 2.31 micron*/
650  ipSc05231 = ipFindLevLine( 23100 , 5 , 21 );
651 
652  /*[Sc 13] 2637.97 A */
653  ipSc13264 = ipFindLevLine( 2638 , 13 , 21 );
654  /*iron Fe line optical depth data*/
655 
656  /* [Fe I] ground term */
657  ipFe1_24m = ipFindLevLine( 240359.546f , 1 , 26 );
658  ipFe1_35m = ipFindLevLine( 347043.25f , 1 , 26 );
659  ipFe1_54m = ipFindLevLine( 542946.5625f , 1 , 26 );
660  ipFe1_111m = ipFindLevLine( 1111549.25f , 1 , 26 );
661 
662  ipFeI3884 = ipFindLevLine( 3884 , 1 , 26 );
663 
664  ipFeI3729 = ipFindLevLine( 3729 , 1 , 26 );
665 
666  ipFeI3457 = ipFindLevLine( 3457 , 1 , 26 );
667 
668  ipFeI3021 = ipFindLevLine( 3021 , 1 , 26 );
669 
670  ipFeI2966 = ipFindLevLine( 2966 , 1 , 26 );
671 
672  /*>>chng 03 oct 07, chng wl from 2360 to 2400, the value
673  * before cnhg of feii lines to stuc */
674  ipTuv3 = ipFindLevLine( 2400 , 2 , 26 );
675 
676  ipTr48 = ipFindLevLine( 6200 , 2 , 26 );
677 
678  ipTFe16 = ipFindLevLine( 1080 , 2 , 26 );
679 
680  ipTFe26 = ipFindLevLine( 1500 , 2 , 26 );
681 
682  ipTFe34 = ipFindLevLine( 11500 , 2 , 26 );
683 
684  ipTFe35 = ipFindLevLine( 2500 , 2 , 26 );
685 
686  ipTFe46 = ipFindLevLine( 2300 , 2 , 26 );
687 
688  ipTFe56 = ipFindLevLine( 8900 , 2 , 26 );
689 
690  ipT1122 = ipFindLevLine( 1125.8f , 3 , 26 );
691 
692  ipT191 = ipFindLevLine( 1786 , 2 , 26 );
693 
694  /* Cobalt data */
695  /* [Co XI] 5168.A */
696  ipCo11527 = ipFindLevLine( 5168 , 11 , 27 );
697 
698  /* Nickel data */
699  ipNi1_7m = ipFindLevLine( 75046.164f , 1 , 28 );
700  ipNi1_11m = ipFindLevLine( 113044.031f , 1 , 28 );
701 
702  /* flush the line list, freeing the extra storage and checking that all
703  * lines have been claimed */
704  endFindLevLine( );
705 
709  /* only do this one time, and only if number of atom_level2 lines is positive */
710  if( lgFirst && nWindLine>0)
711  {
712 
713  lgFirst = false;
714  /* these are the massive set of op lines, with g-bar approx cs
715  * confirm that input data are valid */
716 
717  for( i=0; i < nWindLine; i++ )
718  {
719  /* this information was read in in createdata */
720  ASSERT( (*TauLine2[i].Hi()).nelem() > 0 );
721  ASSERT( (*TauLine2[i].Hi()).nelem() <= (int)LIMELM );
722 
723  ASSERT( (*TauLine2[i].Hi()).IonStg() > 0 );
724  ASSERT( (*TauLine2[i].Hi()).IonStg() <= (int)LIMELM );
725 
726  ASSERT( (*TauLine2[i].Lo()).g() >0. );
727 
728  ASSERT( (*TauLine2[i].Hi()).g() > 0. );
729 
730  /* check that energy is positive*/
731  ASSERT( TauLine2[i].EnergyWN() > 0 );
732 
733  /* TauLine2[i].Emis().gf() this is gf if positive, A if negative */
734  /* test whether a or gf entered, convert A to gf */
735  if( TauLine2[i].Emis().gf() < 0. )
736  {
737  /* convert A (=-gf) into real gf */
738  TauLine2[i].Emis().gf() *= (realnum)((-(*TauLine2[i].Hi()).g())/TRANS_PROB_CONST/POW2(TauLine2[i].EnergyWN()));
739  }
740 
741  /*now put into standard format */
742  TauLine2[i].WLAng() = 1.e8f/TauLine2[i].EnergyWN();
743  (*TauLine2[i].Lo()).Pop() = 0.;
744  (*TauLine2[i].Hi()).Pop() = 0.;
745  TauLine2[i].Emis().iRedisFun() = ipPRD;
746 
747  /* these are line optical depth arrays
748  * inward optical depth */
749  TauLine2[i].Emis().TauIn() = opac.taumin;
750  TauLine2[i].Emis().TauCon() = opac.taumin;
751  TauLine2[i].Emis().ColOvTot() = 0.;
752  /* outward optical depth */
753  TauLine2[i].Emis().TauTot() = 1e20f;
754  /* escape probability */
755  TauLine2[i].Emis().Pesc() = 1.;
756  /* inward part of line */
757  TauLine2[i].Emis().FracInwd() = 1.;
758  /* destruction probability */
759  TauLine2[i].Emis().Pdest() = 0.;
760  TauLine2[i].Emis().Pelec_esc() = 0.;
761  /* line pumping rate */
762  TauLine2[i].Emis().pump() = 0.;
763  /* population of lower level */
764  (*TauLine2[i].Lo()).Pop() = 0.;
765  /* population of upper level */
766  (*TauLine2[i].Hi()).Pop() = 0.;
767  /* population of lower level with correction for stim emission */
768  TauLine2[i].Emis().PopOpc() = 0.;
769  /* following two heat exchange excitation, deexcitation */
770  TauLine2[i].Coll().cool() = 0.;
771  TauLine2[i].Coll().heat() = 0.;
772  /* intensity of line */
773  TauLine2[i].Emis().xIntensity() = 0.;
774  /* number of photons emitted in line */
775  TauLine2[i].Emis().phots() = 0.;
776  /* ots rate */
777  TauLine2[i].Emis().ots() = 0.;
778  }
779  }
780 
781  for( i=0; i < nUTA; i++ )
782  {
783  /* this information was read in in createdata */
784  ASSERT( (*UTALines[i].Hi()).nelem() > 0 );
785  ASSERT( (*UTALines[i].Hi()).nelem() <= (int)LIMELM );
786 
787  ASSERT( (*UTALines[i].Hi()).IonStg() > 0 );
788  ASSERT( (*UTALines[i].Hi()).IonStg() <= (int)LIMELM );
789 
790  ASSERT( (*UTALines[i].Lo()).g() > 0. );
791 
792  ASSERT( (*UTALines[i].Hi()).g() > 0. );
793 
794  /* check that energy is positive*/
795  ASSERT( UTALines[i].EnergyWN() > 0 );
796 
797  (*UTALines[i].Lo()).Pop() = 0.;
798  (*UTALines[i].Hi()).Pop() = 0.;
799  UTALines[i].Emis().iRedisFun() = ipPRD;
800 
801  /* these are line optical depth arrays
802  * inward optical depth */
803  UTALines[i].Emis().TauIn() = opac.taumin;
804  UTALines[i].Emis().TauCon() = opac.taumin;
805  UTALines[i].Emis().ColOvTot() = 0.;
806  /* outward optical depth */
807  UTALines[i].Emis().TauTot() = 1e20f;
808  /* escape probability */
809  UTALines[i].Emis().Pesc() = 1.;
810  /* inward part of line */
811  UTALines[i].Emis().FracInwd() = 1.;
812  /* destruction probability */
813  UTALines[i].Emis().Pdest() = 0.;
814  UTALines[i].Emis().Pelec_esc() = 0.;
815  /* line pumping rate */
816  UTALines[i].Emis().pump() = 0.;
817  /* population of lower level */
818  (*UTALines[i].Lo()).Pop() = 0.;
819  /* population of upper level */
820  (*UTALines[i].Hi()).Pop() = 0.;
821  /* population of lower level with correction for stim emission */
822  UTALines[i].Emis().PopOpc() = 0.;
823  /* following two heat exchange excitation, deexcitation */
824  UTALines[i].Coll().cool() = 0.;
825  /* heat is the net heat per pump and was set when data read in
826  * this is different from other lines with this structure
827  UTALines[i].Coll().heat() = 0.;*/
828  /* intensity of line */
829  UTALines[i].Emis().xIntensity() = 0.;
830  /* number of photons emitted in line */
831  UTALines[i].Emis().phots() = 0.;
832  UTALines[i].Emis().ots() = 0.;
833  }
834 
835  for( i=0; i < nHFLines; i++ )
836  {
837  /* this information was read in in createdata */
838  ASSERT( (*HFLines[i].Hi()).nelem() > 0 );
839  ASSERT( (*HFLines[i].Hi()).nelem() <= (int)LIMELM );
840 
841  ASSERT( (*HFLines[i].Hi()).IonStg() > 0 );
842  ASSERT( (*HFLines[i].Hi()).IonStg() <= (int)LIMELM );
843 
844  ASSERT( (*HFLines[i].Lo()).g() > 0. );
845 
846  ASSERT( (*HFLines[i].Hi()).g() > 0. );
847 
848  /* check that energy is positive*/
849  ASSERT( HFLines[i].EnergyWN() > 0 );
850  ASSERT( HFLines[i].Emis().Aul()>0 );
851  ASSERT( HFLines[i].Emis().damp()>0 );
852 
853  /* HFLines[i].Emis->gf() this is gf if positive, A if negative */
854  /* test whether a or gf entered, convert A to gf */
855  if( HFLines[i].Emis().gf() < 0. )
856  {
857  /* convert A (=-gf) into real gf */
858  HFLines[i].Emis().gf() *= (realnum)(-(*HFLines[i].Hi()).g()/TRANS_PROB_CONST/POW2(HFLines[i].EnergyWN()));
859  }
860 
861  /*now put into standard format */
862  HFLines[i].WLAng() = 1.e8f/HFLines[i].EnergyWN();
863  (*HFLines[i].Lo()).Pop() = 0.;
864  (*HFLines[i].Hi()).Pop() = 0.;
865  /* change from partial to complete redistribution */
866  HFLines[i].Emis().iRedisFun() = ipCRD;
867 
868  /* these are line optical depth arrays
869  * inward optical depth */
870  HFLines[i].Emis().TauIn() = opac.taumin;
871  HFLines[i].Emis().TauCon() = opac.taumin;
872  HFLines[i].Emis().ColOvTot()=0;
873  /* outward optical depth */
874  HFLines[i].Emis().TauTot() = 1e20f;
875  /* escape probability */
876  HFLines[i].Emis().Pesc() = 1.;
877  /* inward part of line */
878  HFLines[i].Emis().FracInwd() = 1.;
879  /* destruction probability */
880  HFLines[i].Emis().Pdest() = 0.;
881  HFLines[i].Emis().Pelec_esc() = 0.;
882  /* line pumping rate */
883  HFLines[i].Emis().pump() = 0.;
884  /* population of lower level */
885  (*HFLines[i].Lo()).Pop() = 0.;
886  /* population of upper level */
887  (*HFLines[i].Hi()).Pop() = 0.;
888  /* population of lower level with correction for stim emission */
889  HFLines[i].Emis().PopOpc() = 0.;
890  /* following two heat exchange excitation, deexcitation */
891  HFLines[i].Coll().cool() = 0.;
892  HFLines[i].Coll().heat() = 0.;
893  /* intensity of line */
894  HFLines[i].Emis().xIntensity() = 0.;
895  /* number of photons emitted in line */
896  HFLines[i].Emis().phots() = 0.;
897  HFLines[i].Emis().ots() = 0.;
898  }
899  return;
900 }
901 
902 /* following used to save whether lines have been claimed by a pointer */
903 static int *lev2set;
904 
905 /*generate pointer to level 1 line using wavelengtgh, ion, element */
907  /* realnum ID wavelength, in angstroms */
908  realnum wl ,
909  /* state of ionization, 1 for neutral atom */
910  long ion ,
911  /* element number, 1 for H, 26 for Fe */
912  long nelem)
913 {
914  long i;/* use for counter in for loop */
915 
916  DEBUG_ENTRY( "ipFindLevLine()" );
917 
918  ASSERT( wl > 0. );
919  ASSERT( ion > 0 );
920  ASSERT( ion <= LIMELM );
921  ASSERT( nelem > 0 );
922  ASSERT( nelem <= LIMELM );
923 
924  /* look for the line */
925  for( i=1; i<= nLevel1; ++i )
926  {
927  if( (*TauLines[i].Hi()).nelem() == (int)nelem &&
928  (*TauLines[i].Hi()).IonStg() == (int)ion &&
929  // wl hit within relative accuracy of 0.05A in 1000A
930  fabs(TauLines[i].WLAng() - wl)/max(1000.,wl) < 0.05/1000. )
931  {
932  /* remember that we have hit this line */
933  lev2set[i] = true;
934  /* and return pointer to the label*/
935  return i;
936  }
937  }
938  fprintf(ioQQQ,
939  " ipFindLevLine could not find a line with following properties:\n"
940  " wavelength=%f\n"
941  " ion stage =%li\n"
942  " atomic num=%li\n",
943  wl , ion, nelem );
944  return -1;
945 }
946 
948 {
949  long i;
950 
951  DEBUG_ENTRY( "initFindLevLine()" );
952 
953  /* generate the array of ints to store true and false */
954  lev2set = (int*)MALLOC( (size_t)(nLevel1+1)*sizeof(int) );
955 
956  /* set them all false, saying that they have not been claimed by
957  * one of the line pointers */
958  for( i=1; i<=nLevel1; ++i )
959  lev2set[i] = false;
960  return;
961 }
962 
963 STATIC void endFindLevLine( void )
964 {
965  long i;
966  bool lgAbort_loc=false;
967 
968  DEBUG_ENTRY( "endFindLevLine()" );
969 
970  /* set them all false, saying that they have not been claimed by
971  * one of the line pointers */
972  for( i=1; i<=nLevel1; ++i )
973  {
974  if( !lev2set[i] )
975  {
976  fprintf(ioQQQ,"PROBLEM endFindLevLine warning; line %li not claimed\n",i);
977  fprintf(ioQQQ,
978  " line had the following properties:\n"
979  " wavelength=%f\n"
980  " ion stage =%i\n"
981  " atomic num=%i\n",
982  TauLines[i].WLAng() ,
983  (*TauLines[i].Hi()).IonStg() ,
984  (*TauLines[i].Hi()).nelem() );
985  lgAbort_loc = true;
986  }
987  }
988 
989  /* generate the array of ints to store true and false */
990  free(lev2set);
991 
992  if( lgAbort_loc )
993  {
994  fprintf(ioQQQ," problems found entering the data. I live in lines_setup.c\n");
996  }
997  return;
998 }
long ipTNe13
long ipT8727
long ipT834
long ipT1304
long ipT1486
long ipT7324
long ipTFe35
long ipC2_2324
long ipAr06453
long ipT2796
long ipCo11527
long ipT157
long ipS4_1417
void prt_wl(FILE *ioOUT, realnum wl)
Definition: prt.cpp:13
long ipTNe14
long ipAl6366
long ipTAl550
long ipSi10143
long ipTSi499
long ipTS1720
long ipT374g
TransitionList UTALines("UTALines",&AnonStates)
long ipTS11
long ipMgI2853
long ipxMg52417
long ipO4_1407
long ipCaI4228
long ipTSi35
long ipT765
long ipFeI3884
NORETURN void TotalInsanity(void)
Definition: service.cpp:886
t_opac opac
Definition: opacity.cpp:5
long int nLevel1
Definition: taulines.cpp:28
long ipxNa6143
long ipTSi65
long ipT370
long ipT1037
long ipP713
long ipxNa6862
long ipNi1_11m
long ipTMg14
long ipC2_2327
long ipC2_2329
void lines_setup(void)
long ipO4_1401
long ipMgI2026
long ipCl1_11m
TransitionList HFLines("HFLines",&AnonStates)
long ipP0318
long ipxMg71190
long ipSi619
long ipfsNa490
long ipT386
long ipT2670
long ipT8498
long ipT374x
double RefIndex(double EnergyWN)
long ipT63
static double * g
Definition: species2.cpp:28
long ipSii2518
long ipO4_1397
long ipT1808
FILE * ioQQQ
Definition: cddefines.cpp:7
long ipT7291
long ipN3_1749
long ipNI_pumpIndirect
long ipSi10_606
long ipT150
long ipT789
long ipT291
long ipT58
long ipS4_1424
long ipTMg610
long ipxMg51325
void chIonLbl(char *chIonLbl_v, const TransitionProxy &t)
Definition: transition.cpp:195
TransitionList TauLine2("TauLine2",&AnonStates)
long ipxMg72569
long ipTFe26
long ipT630
long ipS4_1398
long ipT705
long ipT1550
long ipTOI29
long ipxK04154
long ipTSi521
long ipfsNa421
long ipT671
long ipFeI3457
long ipT191
long ipT1656
long ipT1895
long ipxNe0676
long ipTOI46
long ipxNa0746
long ipT312
long ipT1527
long ipSi2_2334
long ipFe1_54m
long ipT1198
long ipNI_pumpDirect[NI_NDP]
long ipSi2_2344
long ipTFe16
long ipTSi3
long ipxMg72261
long ipT270
#define MALLOC(exp)
Definition: cddefines.h:505
long ipTSi4
static int * lev2set
long ipN3_1751
long ipT8446
long ipT5895
long ipCl04117
long ipfsMg790
long ipS4_1407
long ipFe1_111m
long ipTS34
long ipT1335
long ipTAr8
long ipT8662
long ipfsCl214
const double TRANS_PROB_CONST
Definition: physconst.h:237
#define POW2
Definition: cddefines.h:933
long ipTNe16
long ipSc05231
long ipS4_1405
long ipT1305
long ipT324
long ipAlI3090
#define STATIC
Definition: cddefines.h:101
long ipN3_1754
long ipTMg6
long ipAl09204
long ipT1200
long ipT1207
long ipTSi41
long ipSi1_68m
long ipTuv3
long ipT4561
long ipxK03462
long ipTO1025
const int ipCRD
Definition: cddefines.h:296
long ipT1032
long ipT5577
long ipT146
float realnum
Definition: cddefines.h:107
#define EXIT_FAILURE
Definition: cddefines.h:144
long ipTAr13
long ipT274
long ipT52
long ipTFe46
long ipT3934
long max(int a, long b)
Definition: cddefines.h:779
long ipT8542
long ipCl973
long ipfsNa373
#define cdEXIT(FAIL)
Definition: cddefines.h:438
long ipSi1_130m
long ipT3969
long ipT1548
long ipxK07319
long ipFeI2966
long ipTMg625
long ipC2_2325
long ipT835
long nWindLine
Definition: cdinit.cpp:19
long ipFeI3729
long ipT1855
long ipT1863
long ipFe1_35m
long ipTr48
long ipAl529
long ipT2804
long ipTAr22
long ipfsMg755
long ipTO88
long ipN3_1752
long ipFe1_24m
long ipT333
long ipSc13264
long ipKI7745
long ipT610
long ipTOI11
long ipS1_56m
long ipT780
long ipT122
long ipSi2_2336
long ipTFe56
long ipTSi25
long ipT280
long ipxK04598
STATIC void endFindLevLine(void)
#define ASSERT(exp)
Definition: cddefines.h:582
long ipTNe24
long ipfsCl233
TransitionList TauLines("TauLines",&AnonStates)
long ipT895
const int LIMELM
Definition: cddefines.h:262
static bool lgFirst
Definition: prt_linesum.cpp:16
long ipT1239
long ipTFe34
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:688
long ipP0260
long ipT1256
long ipT315
long ipT1243
long ipT1394
long ipN3_1747
long ipTAl48
long ipTMg4
long ipT88
long ipTAl568
long ipO4_1400
long ipT977
long ipT1214
long ipT990
long ipSii2215
long ipTOI13
long ipT310
long ipT1661
long int nHFLines
Definition: taulines.cpp:31
long ipTS19
long ipAl8575
long ipO4_1405
long ipNi1_7m
STATIC long ipFindLevLine(realnum, long, long)
const int ipPRD
Definition: cddefines.h:294
long ipT1039
long ipTAr9
long ipT6363
long ipT786
STATIC void initFindLevLine(void)
long ipT1260
long ipT26
long ipT1194
long ipTCa3
long ipT1666
long int nUTA
Definition: taulines.cpp:26
long ipT6300
long ipP0233
long ipT57
long ipCl04203
long ipSi2_2329
long ipT639
long ipxMg08303
void ShowMe(void)
Definition: service.cpp:181
long ipFeI3021
long ipAl8370
long ipxMg52855
long ipT4368
long ipTAr7
long ipT205
long ipT770
long ipTNe36
long ipc31175
long ipT209
long ipAlI3957
long ipT1909
long ipT2140
long ipT1403
long ipSi2_2350
long ipT304
realnum taumin
Definition: opacity.h:154
EmissionList & Emis()
Definition: transition.h:329
long ipT1085
long ipT1122
long ipC2_2328
long ipAl6912
long ipT9830
long ipS1_25m