00001
00002
00003
00004
00005 #include "cddefines.h"
00006 #include "physconst.h"
00007 #include "lines_service.h"
00008 #include "prt.h"
00009 #include "taulines.h"
00010 #include "opacity.h"
00011 #include "lines.h"
00012
00013
00014
00015 static void initFindLevLine( void );
00016 static long ipFindLevLine( float , long , long );
00017 static void endFindLevLine( void );
00018
00019 void lines_setup(void)
00020 {
00021 long int i, J;
00022
00023 static bool lgFirst = true;
00024 bool lgSane;
00025
00026 DEBUG_ENTRY( "lines_setup()" );
00027
00028
00029
00030
00031
00032 TauLines[0].WLAng = 0.;
00033 TauLines[0].gLo = 0.;
00034 TauLines[0].gHi = 0.;
00035 TauLines[0].gf = 0.;
00036 TauLines[0].EnergyWN = 0.;
00037 TauLines[0].IonStg = 0;
00038 TauLines[0].nelem = 0;
00039
00040 TauLines[0].iRedisFun = 0;
00041 TauLines[0].Aul = 0.;
00042
00043
00044 if( TauLines[1].EnergyWN <= 0. )
00045 {
00046 fprintf( ioQQQ, " PROBLEM Insane value for TauLines array.\n" );
00047 fprintf( ioQQQ, " Was block data LineData linked in??\n" );
00048 fprintf( ioQQQ, " Check that it compiled OK (it probably did not).\n" );
00049 TotalInsanity();
00050 }
00051
00052
00053 lgSane = true;
00054 for( i=1; i <= nLevel1; i++ )
00055 {
00056
00057 if( TauLines[i].gLo <= 0. )
00058 {
00059 fprintf( ioQQQ, " routine lines_setup, insane lower stat wght\n" );
00060 fprintf( ioQQQ, " line index is %5ld\n", i );
00061 lgSane = false;
00062 }
00063
00064 if( TauLines[i].gHi <= 0. )
00065 {
00066 fprintf( ioQQQ, " routine lines_setup, insane upper stat wght\n" );
00067 fprintf( ioQQQ, " line index is %5ld\n", i );
00068 lgSane = false;
00069 }
00070
00071 if( TauLines[i].EnergyWN <= 0. )
00072 {
00073 fprintf( ioQQQ, " routine lines_setup, insane energy WN\n" );
00074 fprintf( ioQQQ, " line index is %5ld\n", i );
00075 lgSane = false;
00076 }
00077
00078 if( TauLines[i].IonStg <= 0 )
00079 {
00080 fprintf( ioQQQ, " routine lines_setup, insane ioniz stage\n" );
00081 fprintf( ioQQQ, " line index is %5ld\n", i );
00082 lgSane = false;
00083 }
00084
00085 if( TauLines[i].nelem <= 0 || TauLines[i].nelem > (int)LIMELM )
00086 {
00087 fprintf( ioQQQ, " routine lines_setup, insane Nelem\n" );
00088 fprintf( ioQQQ, " line index is %5ld\n", i );
00089 lgSane = false;
00090 }
00091
00092 if( TauLines[i].IonStg > TauLines[i].nelem )
00093 {
00094 fprintf( ioQQQ, " routine lines_setup, insane IonStg>Nelem\n" );
00095 fprintf( ioQQQ, " line index is %5ld\n", i );
00096 lgSane = false;
00097 }
00098
00099 if( TauLines[i].iRedisFun == 0 )
00100 {
00101 fprintf( ioQQQ, " routine lines_setup, insane line redis fcn\n" );
00102 fprintf( ioQQQ, " line index is %5ld\n", i );
00103 lgSane = false;
00104 }
00105
00106
00107
00108
00109
00110 if( TauLines[i].WLAng <= 0. )
00111 {
00112
00113 TauLines[i].WLAng =
00114 (float)(1.0e8/
00115 TauLines[i].EnergyWN/
00116 RefIndex( TauLines[i].EnergyWN));
00117 }
00118 {
00119
00120 enum{DEBUG_LOC=false};
00121
00122 if( DEBUG_LOC )
00123 {
00124 char chString[10];
00125 chIonLbl(chString,&TauLines[i]);
00126 fprintf( ioQQQ,"%s ", chString );
00127 prt_wl( ioQQQ , TauLines[i].WLAng );
00128 fprintf(ioQQQ,"\n");
00129 }
00130 }
00131 }
00132
00133 if( !lgSane )
00134 {
00135 fprintf( ioQQQ, " Insane value for line arrays encountered.\n" );
00136 fprintf( ioQQQ, " Was block data lines linked in??\n" );
00137 fprintf( ioQQQ, " Were errors intreoducted into the line array?\n" );
00138 ShowMe();
00139 puts( "[Stop in lines_setup]" );
00140 cdEXIT(EXIT_FAILURE);
00141 }
00142
00143
00144 initFindLevLine( );
00145
00146
00147
00148
00149
00150 ipT1656 = ipFindLevLine( 1656 , 1 , 6 );
00151
00152 ipT9830 = ipFindLevLine( 9830 , 1 , 6 );
00153
00154 ipT8727 = ipFindLevLine( 8727 , 1 , 6 );
00155
00156 ipC2_2325 = ipFindLevLine( 2325 , 2 , 6 );
00157 ipC2_2324 = ipFindLevLine( 2324 , 2 , 6 );
00158 ipC2_2329 = ipFindLevLine( 2329 , 2 , 6 );
00159 ipC2_2328 = ipFindLevLine( 2328 , 2 , 6 );
00160 ipC2_2327 = ipFindLevLine( 2327 , 2 , 6 );
00161
00162 ipT1335 = ipFindLevLine( 1335 , 2 , 6 );
00163
00164 ipT1909 = ipFindLevLine( 1910 , 3 , 6 );
00165
00166 ipT977 = ipFindLevLine( 977 , 3 , 6 );
00167
00168 ipT1550 = ipFindLevLine( 1551 , 4 , 6 );
00169
00170 ipT1548 = ipFindLevLine( 1548 , 4 , 6 );
00171
00172 ipT386 = ipFindLevLine( 386 , 3 , 6 );
00173
00174 ipT310 = ipFindLevLine( 310 , 3 , 6 );
00175
00176
00177 ipc31175 = ipFindLevLine( 1176 , 3 , 6 );
00178
00179 ipT291 = ipFindLevLine( 291 , 3 , 6 );
00180
00181 ipT280 = ipFindLevLine( 280 , 3 , 6 );
00182
00183 ipT274 = ipFindLevLine( 274 , 3 , 6 );
00184
00185 ipT270 = ipFindLevLine( 270 , 3 , 6 );
00186
00187 ipT312 = ipFindLevLine( 312 , 4 , 6 );
00188
00189
00190 ipT610 = ipFindLevLine( 6092000 , 1 , 6 );
00191
00192 ipT370 = ipFindLevLine( 3697000 , 1 , 6 );
00193
00194 ipT157 = ipFindLevLine( 1576000 , 2 , 6 );
00195
00196
00197 ipT1085 = ipFindLevLine( 1085 , 2 , 7 );
00198
00199 ipN3_1749 = ipFindLevLine( 1749 , 3 , 7 );
00200 ipN3_1747 = ipFindLevLine( 1747 , 3 , 7 );
00201 ipN3_1754 = ipFindLevLine( 1754 , 3 , 7 );
00202 ipN3_1752 = ipFindLevLine( 1752 , 3 , 7 );
00203 ipN3_1751 = ipFindLevLine( 1751 , 3 , 7 );
00204
00205 ipT990 = ipFindLevLine( 991 , 3 , 7 );
00206
00207 ipT1486 = ipFindLevLine( 1486 , 4 , 7 );
00208
00209 ipT765 = ipFindLevLine( 765 , 4 , 7 );
00210
00211 ipT1243 = ipFindLevLine( 1243 , 5 , 7 );
00212
00213 ipT1239 = ipFindLevLine( 1239 , 5 , 7 );
00214
00215 ipT374g = ipFindLevLine( 373 , 3 , 7 );
00216
00217
00218 ipT374x = ipFindLevLine( 374 , 3 , 7 );
00219
00220 ipT1200 = ipFindLevLine( 1200 , 1 , 7 );
00221
00222 ipT2140 = ipFindLevLine( 2141 , 2 , 7 );
00223
00224 ipT671 = ipFindLevLine( 671 , 2 , 7 );
00225
00226 ipT315 = ipFindLevLine( 315 , 3 , 7 );
00227
00228 ipT324 = ipFindLevLine( 324 , 3 , 7 );
00229
00230 ipT333 = ipFindLevLine( 333 , 3 , 7 );
00231
00232 ipT209 = ipFindLevLine( 209 , 5 , 7 );
00233
00234
00235
00236 ipT122 = ipFindLevLine( 1217000 , 2 , 7 );
00237
00238
00239 ipT205 = ipFindLevLine( 2054000 , 2 , 7 );
00240
00241
00242
00243 ipT57 = ipFindLevLine( 572100 , 3 , 7 );
00244
00245
00246 ipT6300 = ipFindLevLine( 6300 , 1 , 8 );
00247
00248 ipT6363 = ipFindLevLine( 6363 , 1 , 8 );
00249
00250
00251 ipT5577 = ipFindLevLine( 5577 , 1 , 8 );
00252
00253 ipT834 = ipFindLevLine( 833.8f , 2 , 8 );
00254
00255 ipT1661 = ipFindLevLine( 1661 , 3 , 8 );
00256
00257 ipT1666 = ipFindLevLine( 1666 , 3 , 8 );
00258
00259 ipT835 = ipFindLevLine( 835 , 3 , 8 );
00260
00261 ipO4_1400 = ipFindLevLine( 1400 , 4 , 8 );
00262 ipO4_1397 = ipFindLevLine( 1397 , 4 , 8 );
00263 ipO4_1407 = ipFindLevLine( 1407 , 4 , 8 );
00264 ipO4_1405 = ipFindLevLine( 1405 , 4 , 8 );
00265 ipO4_1401 = ipFindLevLine( 1401 , 4 , 8 );
00266
00267 ipT789 = ipFindLevLine( 789 , 4 , 8 );
00268
00269 ipT630 = ipFindLevLine( 630 , 5 , 8 );
00270
00271
00272 ipT1304 = ipFindLevLine( 1304 , 1 , 8 );
00273
00274 ipT1039 = ipFindLevLine( 1039 , 1 , 8 );
00275
00276 ipT8446 = ipFindLevLine( 8446 , 1 , 8 );
00277
00278 ipT4368 = ipFindLevLine( 4368 , 1 , 8 );
00279
00280 ipTOI13 = ipFindLevLine( 13200 , 1 , 8 );
00281
00282 ipTOI11 = ipFindLevLine( 11300 , 1 , 8 );
00283
00284 ipTOI29 = ipFindLevLine( 29000 , 1 , 8 );
00285
00286 ipTOI46 = ipFindLevLine( 46000 , 1 , 8 );
00287
00288 ipTO1025 = ipFindLevLine( 1025 , 1 , 8 );
00289
00290
00291
00292 ipT304 = ipFindLevLine( 304 , 3 , 8 );
00293
00294 ipT1214 = ipFindLevLine( 1218 , 5 , 8 );
00295
00296 ipT150 = ipFindLevLine( 150 , 6 , 8 );
00297
00298
00299
00300 ipT146 = ipFindLevLine( 1455300 , 1 , 8 );
00301
00302
00303 ipT63 = ipFindLevLine( 631700 , 1 , 8 );
00304
00305
00306 ipTO88 = ipFindLevLine( 883300 , 3 , 8 );
00307
00308
00309 ipT52 = ipFindLevLine( 518000 , 3 , 8 );
00310
00311
00312 ipT26 = ipFindLevLine( 258800 , 4 , 8 );
00313
00314 ipT1032 = ipFindLevLine( 1032 , 6 , 8 );
00315
00316 ipT1037 = ipFindLevLine( 1037.6f , 6 , 8 );
00317
00318
00319
00320 ipF0229 = ipFindLevLine( 293300 , 2 , 9 );
00321
00322
00323 ipF0267 = ipFindLevLine( 672000 , 2 , 9 );
00324
00325
00326 ipF444 = ipFindLevLine( 440700 , 4 , 9 );
00327
00328
00329 ipF425 = ipFindLevLine( 258300 , 4 , 9 );
00330
00331
00332 ipT770 = ipFindLevLine( 770.4f , 8 , 10 );
00333
00334 ipT780 = ipFindLevLine( 780.3f , 8 , 10 );
00335
00336
00337 ipxNe0676 = ipFindLevLine( 76520 , 6 , 10 );
00338
00339 ipT895 = ipFindLevLine( 895 , 7 , 10 );
00340
00341 ipT88 = ipFindLevLine( 88 , 8 , 10 );
00342
00343
00344
00345 ipTNe13 = ipFindLevLine( 128100 , 2 , 10 );
00346
00347
00348 ipTNe36 = ipFindLevLine( 360140 , 3 , 10 );
00349
00350
00351 ipTNe16 = ipFindLevLine( 155500 , 3 , 10 );
00352
00353
00354 ipTNe14 = ipFindLevLine( 143200 , 5 , 10 );
00355
00356
00357 ipTNe24 = ipFindLevLine( 243100 , 5 , 10 );
00358
00359
00360 ipT5895 = ipFindLevLine( 5891.9f , 1 , 11 );
00361
00362
00363 ipfsNa373 = ipFindLevLine( 73200 , 3 , 11 );
00364
00365
00366 ipfsNa490 = ipFindLevLine( 90390 , 4 , 11 );
00367
00368
00369 ipfsNa421 = ipFindLevLine( 212900 , 4 , 11 );
00370
00371
00372 ipxNa6143 = ipFindLevLine( 144000 , 6 , 11 );
00373
00374
00375 ipxNa6862 = ipFindLevLine( 86110 , 6 , 11 );
00376
00377
00378 ipxNa0746 = ipFindLevLine( 46800 , 7 , 11 );
00379
00380
00381 ipMgI2853 = ipFindLevLine( 2853 , 1 , 12 );
00382
00383 ipMgI2026 = ipFindLevLine( 2026 , 1 , 12 );
00384
00385 ipT2796 = ipFindLevLine( 2795.5f , 2 , 12 );
00386
00387 ipT2804 = ipFindLevLine( 2802.7f , 2 , 12 );
00388
00389 ipT705 = ipFindLevLine( 705 , 9 , 12 );
00390
00391 ipT4561 = ipFindLevLine( 4561 , 1 , 12 );
00392
00393
00394 ipxMg51325 = ipFindLevLine( 1325 , 5 , 12 );
00395
00396
00397 ipxMg52417 = ipFindLevLine( 2417 , 5 , 12 );
00398
00399
00400 ipxMg52855 = ipFindLevLine( 2855 , 5 , 12 );
00401
00402
00403 ipxMg71190 = ipFindLevLine( 1190 , 7 , 12 );
00404
00405
00406 ipxMg72261 = ipFindLevLine( 2261 , 7 , 12 );
00407
00408
00409 ipxMg72569 = ipFindLevLine( 2569 , 7 , 12 );
00410
00411
00412 ipxMg08303 = ipFindLevLine( 30300 , 8 , 12 );
00413
00414
00415 ipTMg610 = ipFindLevLine( 609.8f , 10 , 12 );
00416
00417 ipTMg625 = ipFindLevLine( 625 , 10 , 12 );
00418
00419 ipT58 = ipFindLevLine( 57.9f , 10 , 12 );
00420
00421
00422 ipTMg4 = ipFindLevLine( 44850 , 4 , 12 );
00423
00424
00425 ipTMg14 = ipFindLevLine( 135200 , 5 , 12 );
00426
00427
00428 ipTMg6 = ipFindLevLine( 56100 , 5 , 12 );
00429
00430
00431 ipfsMg790 = ipFindLevLine( 90330 , 7 , 12 );
00432
00433
00434 ipfsMg755 = ipFindLevLine( 55030 , 7 , 12 );
00435
00436
00437 ipAlI3957 = ipFindLevLine( 3957 , 1 , 13 );
00438
00439 ipAlI3090 = ipFindLevLine( 3090 , 1 , 13 );
00440
00441 ipT1855 = ipFindLevLine( 1855 , 3 , 13 );
00442
00443 ipT1863 = ipFindLevLine( 1863 , 3 , 13 );
00444
00445 ipT2670 = ipFindLevLine( 2670 , 2 , 13 );
00446
00447
00448 ipAl529 = ipFindLevLine( 29052 , 5 , 13 );
00449
00450
00451 ipAl6366 = ipFindLevLine( 36600 , 6 , 13 );
00452
00453
00454 ipAl6912 = ipFindLevLine( 91160 , 6 , 13 );
00455
00456
00457 ipAl8575 = ipFindLevLine( 58480 , 8 , 13 );
00458
00459
00460 ipAl8370 = ipFindLevLine( 36900 , 8 , 13 );
00461
00462
00463 ipAl09204 = ipFindLevLine( 20400 , 9 , 13 );
00464
00465 ipT639 = ipFindLevLine( 639 , 10 , 13 );
00466
00467
00468 ipTAl550 = ipFindLevLine( 550 , 11 , 13 );
00469
00470 ipTAl568 = ipFindLevLine( 568 , 11 , 13 );
00471
00472 ipTAl48 = ipFindLevLine( 48 , 11 , 13 );
00473
00474
00475 ipSi1_130m = ipFindLevLine( 1295823.0f , 1 , 14 );
00476 ipSi1_68m = ipFindLevLine( 683995.25f , 1 , 14 );
00477
00478 ipSii2518 = ipFindLevLine( 2518 , 1 , 14 );
00479
00480 ipSii2215 = ipFindLevLine( 2215 , 1 , 14 );
00481
00482 ipSi2_2334 = ipFindLevLine( 2334 , 2 , 14 );
00483 ipSi2_2329 = ipFindLevLine( 2329 , 2 , 14 );
00484 ipSi2_2350 = ipFindLevLine( 2350 , 2 , 14 );
00485 ipSi2_2344 = ipFindLevLine( 2344 , 2 , 14 );
00486 ipSi2_2336 = ipFindLevLine( 2336 , 2 , 14 );
00487
00488 ipT1808 = ipFindLevLine( 1813.99f , 2 , 14 );
00489
00490 ipT1207 = ipFindLevLine( 1207 , 3 , 14 );
00491
00492 ipT1895 = ipFindLevLine( 1892 , 3 , 14 );
00493
00494 ipT1394 = ipFindLevLine( 1394 , 4 , 14 );
00495
00496 ipT1403 = ipFindLevLine( 1403 , 4 , 14 );
00497
00498 ipT1527 = ipFindLevLine( 1531 , 2 , 14 );
00499
00500 ipT1305 = ipFindLevLine( 1307.7f , 2 , 14 );
00501
00502 ipT1260 = ipFindLevLine( 1263.3f , 2 , 14 );
00503
00504
00505 ipSi619 = ipFindLevLine( 19631 , 6 , 14 );
00506
00507
00508 ipSi10143 = ipFindLevLine( 14300 , 10 , 14 );
00509
00510
00511 ipSi10_606 = ipFindLevLine( 606 , 10 , 14 );
00512
00513 ipTSi499 = ipFindLevLine( 499 , 12 , 14 );
00514
00515 ipTSi521 = ipFindLevLine( 521 , 12 , 14 );
00516
00517 ipTSi41 = ipFindLevLine( 41 , 12 , 14 );
00518
00519
00520 ipTSi35 = ipFindLevLine( 348140 , 2 , 14 );
00521
00522
00523 ipTSi25 = ipFindLevLine( 24810 , 7 , 14 );
00524
00525
00526 ipTSi65 = ipFindLevLine( 64920 , 7 ,14 );
00527
00528
00529 ipTSi3 = ipFindLevLine( 25840 , 9 , 14 );
00530
00531
00532 ipTSi4 = ipFindLevLine( 39290 , 9 , 14 );
00533
00534
00535
00536 ipP0260 = ipFindLevLine( 606400 , 2 , 15 );
00537
00538
00539 ipP0233 = ipFindLevLine( 328700 , 2 , 15 );
00540
00541
00542 ipP0318 = ipFindLevLine( 178850 , 3 , 15 );
00543
00544
00545 ipP713 = ipFindLevLine( 13745 , 7 , 15 );
00546
00547
00548 ipP848 = ipFindLevLine( 48500 , 8 , 15 );
00549
00550
00551 ipP817 = ipFindLevLine( 17350 , 8 , 15 );
00552
00553
00554 ipP1027 = ipFindLevLine( 27080 , 10 , 15 );
00555
00556
00557 ipP1018 = ipFindLevLine( 18680 , 10 , 15 );
00558
00559
00560 ipS1_25m = ipFindLevLine( 251947.453f , 1 , 16 );
00561 ipS1_56m = ipFindLevLine( 562909.625f , 1 , 16 );
00562
00563 ipT1256 = ipFindLevLine( 1256 , 2 , 16 );
00564
00565 ipT1194 = ipFindLevLine( 1197.55f , 3 , 16 );
00566
00567 ipTS1720 = ipFindLevLine( 1720 , 3 , 16 );
00568
00569 ipS4_1405 = ipFindLevLine( 1405 , 4 , 16 );
00570 ipS4_1398 = ipFindLevLine( 1398 , 4 , 16 );
00571 ipS4_1424 = ipFindLevLine( 1424 , 4 , 16 );
00572 ipS4_1417 = ipFindLevLine( 1417 , 4 , 16 );
00573 ipS4_1407 = ipFindLevLine( 1406 , 4 , 16 );
00574
00575 ipT1198 = ipFindLevLine( 1198 , 5 , 16 );
00576
00577 ipT786 = ipFindLevLine( 786.47f , 5 , 16 );
00578
00579 ipT933 = ipFindLevLine( 933.38f , 6 , 16 );
00580
00581 ipT944 = ipFindLevLine( 944.52f , 6 , 16 );
00582
00583
00584 ipfsS810 = ipFindLevLine( 9913 , 8 , 16 );
00585
00586
00587 ipfsS912 = ipFindLevLine( 12520 , 9 , 16 );
00588
00589
00590 ipfsS938 = ipFindLevLine( 37550 , 9 , 16 );
00591
00592
00593 ipfsS1119 = ipFindLevLine( 19201 , 11 , 16 );
00594
00595
00596 ipfsS1114 = ipFindLevLine( 13927 , 11 , 16 );
00597
00598
00599
00600 ipfsS1207 = ipFindLevLine( 7611 , 12 , 16 );
00601
00602
00603 ipS12_520 = ipFindLevLine( 520 , 12 , 16 );
00604
00605 ipTSu418 = ipFindLevLine( 418 , 14 , 16 );
00606
00607 ipTSu446 = ipFindLevLine( 446 , 14 , 16 );
00608
00609 ipTSu30 = ipFindLevLine( 30 , 14 , 16 );
00610
00611
00612 ipTS19 = ipFindLevLine( 186700 , 3 , 16 );
00613
00614
00615 ipTS34 = ipFindLevLine( 334700 , 3 , 16 );
00616
00617 ipTS11 = ipFindLevLine( 105100 , 4 , 16 );
00618
00619
00620
00621
00622 ipCl1_11m = ipFindLevLine( 113296.3984f , 1 , 17 );
00623
00624
00625 ipfsCl214 = ipFindLevLine( 144000 , 2 , 17 );
00626
00627
00628 ipfsCl233 = ipFindLevLine( 333000 , 2 , 17 );
00629
00630
00631 ipCl04203 = ipFindLevLine( 204000 , 4 , 17 );
00632
00633
00634 ipCl04117 = ipFindLevLine( 117000 ,4 , 17 );
00635
00636
00637 ipCl973 = ipFindLevLine( 7334 , 9 , 17 );
00638
00639
00640 ipCl1030 = ipFindLevLine( 30500 , 10 , 17 );
00641
00642
00643 ipCl1092 = ipFindLevLine( 9332 , 10 , 17 );
00644
00645
00646
00647 ipT354 = ipFindLevLine( 354 , 16 , 18 );
00648
00649
00650 ipT389 = ipFindLevLine( 389 , 16 , 18 );
00651
00652
00653 ipT25 = ipFindLevLine( 25 , 16 , 18 );
00654
00655
00656
00657 ipTAr7 = ipFindLevLine( 69800 , 2 , 18 );
00658
00659
00660 ipTAr9 = ipFindLevLine( 90000 , 3 , 18 );
00661
00662
00663 ipTAr22 = ipFindLevLine( 218300 , 3 , 18 );
00664
00665
00666 ipTAr13 = ipFindLevLine( 131000 , 5 , 18 );
00667
00668
00669 ipTAr8 = ipFindLevLine( 80000 , 5 , 18 );
00670
00671
00672 ipAr06453 = ipFindLevLine( 45300 , 6 , 18 );
00673
00674
00675 ipAr1055 = ipFindLevLine( 5533 , 10 , 18 );
00676
00677
00678 ipAr1126 = ipFindLevLine( 26190 , 11 , 18 );
00679
00680
00681 ipAr1178 = ipFindLevLine( 6917 , 11 , 18 );
00682
00683
00684 ipKI7745 = ipFindLevLine( 7676.2f , 1 , 19 );
00685
00686
00687 ipxK03462 = ipFindLevLine( 46200 , 3 , 19 );
00688
00689
00690 ipxK04598 = ipFindLevLine( 59800 , 4 , 19 );
00691
00692
00693 ipxK04154 = ipFindLevLine( 153900 , 4 , 19 );
00694
00695
00696 ipxK06882 = ipFindLevLine( 88200 , 6 , 19 );
00697
00698
00699 ipxK06557 = ipFindLevLine( 55700 , 6 , 19 );
00700
00701
00702 ipxK07319 = ipFindLevLine( 31905 , 7 , 19 );
00703
00704
00705 ipxK11425 = ipFindLevLine( 4250 , 11 , 19 );
00706
00707
00708 ipCaI4228 = ipFindLevLine( 4228 , 1 , 20 );
00709
00710 ipT3934 = ipFindLevLine( 3934 , 2 , 20 );
00711
00712 ipT3969 = ipFindLevLine( 3969 , 2 , 20 );
00713
00714 ipT8498 = ipFindLevLine( 8498 , 2 , 20 );
00715
00716 ipT8542 = ipFindLevLine( 8542 , 2 , 20 );
00717
00718 ipT8662 = ipFindLevLine( 8662 , 2 , 20 );
00719
00720 ipT7291 = ipFindLevLine( 7291 , 2 , 20 );
00721
00722 ipT7324 = ipFindLevLine( 7324 , 2 , 20 );
00723
00724 ipTCa345 = ipFindLevLine( 345 , 18 , 20 );
00725
00726 ipTCa19 = ipFindLevLine( 19 , 18 , 20 );
00727
00728
00729 ipTCa3 = ipFindLevLine( 32100 , 4 , 20 );
00730
00731 ipTCa12 = ipFindLevLine( 114000 , 5 , 20 );
00732
00733 ipTCa4 = ipFindLevLine( 41500 , 5 , 20 );
00734
00735
00736 ipCa0741 = ipFindLevLine( 40900 , 7 , 20 );
00737
00738
00739 ipCa0761 = ipFindLevLine( 61500 , 7 , 20 );
00740
00741
00742 ipCa08232 = ipFindLevLine( 23200 , 8 , 20 );
00743
00744
00745 ipCa12333 = ipFindLevLine( 3329 , 12 , 20 );
00746
00747
00748 ipTCa302 = ipFindLevLine( 302 , 18 , 20 );
00749
00750
00751
00752 ipSc05231 = ipFindLevLine( 23100 , 5 , 21 );
00753
00754
00755 ipSc13264 = ipFindLevLine( 2638 , 13 , 21 );
00756
00757
00758
00759 ipTi06172 = ipFindLevLine( 17200 , 6 , 22 );
00760
00761
00762 ipTi14212 = ipFindLevLine( 2118 , 14 , 22 );
00763
00764
00765
00766 ipVa07130 = ipFindLevLine( 13000 , 7 , 23 );
00767
00768
00769 ipVa15172 = ipFindLevLine( 1721 , 15 , 23 );
00770
00771
00772
00773 ipCr08101 = ipFindLevLine( 10100 , 8 , 24 );
00774
00775
00776 ipCr16141 = ipFindLevLine( 1411 , 16 , 24 );
00777
00778
00779
00780 ipxMn0979 = ipFindLevLine( 7968 , 9 , 25 );
00781
00782
00783 ipxMn1712 = ipFindLevLine( 1170 , 17 , 25 );
00784
00785
00786
00787
00788 ipFe1_24m = ipFindLevLine( 240359.546f , 1 , 26 );
00789 ipFe1_35m = ipFindLevLine( 347043.25f , 1 , 26 );
00790 ipFe1_54m = ipFindLevLine( 542946.5625f , 1 , 26 );
00791 ipFe1_111m = ipFindLevLine( 1111549.25f , 1 , 26 );
00792
00793 ipFeI3884 = ipFindLevLine( 3884 , 1 , 26 );
00794
00795 ipFeI3729 = ipFindLevLine( 3729 , 1 , 26 );
00796
00797 ipFeI3457 = ipFindLevLine( 3457 , 1 , 26 );
00798
00799 ipFeI3021 = ipFindLevLine( 3021 , 1 , 26 );
00800
00801 ipFeI2966 = ipFindLevLine( 2966 , 1 , 26 );
00802
00803
00804
00805 ipTuv3 = ipFindLevLine( 2400 , 2 , 26 );
00806
00807 ipTr48 = ipFindLevLine( 6200 , 2 , 26 );
00808
00809 ipTFe16 = ipFindLevLine( 1080 , 2 , 26 );
00810
00811 ipTFe26 = ipFindLevLine( 1500 , 2 , 26 );
00812
00813 ipTFe34 = ipFindLevLine( 11500 , 2 , 26 );
00814
00815 ipTFe35 = ipFindLevLine( 2500 , 2 , 26 );
00816
00817 ipTFe46 = ipFindLevLine( 2300 , 2 , 26 );
00818
00819 ipTFe56 = ipFindLevLine( 8900 , 2 , 26 );
00820
00821 ipT1122 = ipFindLevLine( 1125.8f , 3 , 26 );
00822
00823
00824 ipFe0795 = ipFindLevLine( 95100, 7 , 26 );
00825
00826
00827 ipFe0778 = ipFindLevLine( 78100, 7 , 26 );
00828
00829 ipT245 = ipFindLevLine( 245 , 9 , 26 );
00830
00831
00832 ipT352 = ipFindLevLine( 352 , 10 , 26 );
00833
00834 ipFe106375 = ipFindLevLine( 6373.3f , 10 , 26 );
00835
00836
00837
00838 ipT353 = ipFindLevLine( 353 , 11 , 26 );
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851 ipTFe20_721 = ipFindLevLine( 721 , 20 , 26 );
00852 ipTFe20_578 = ipFindLevLine( 578 , 20 , 26 );
00853
00854
00855
00856 ipFe22_247 = ipFindLevLine( 247 , 22 , 26 );
00857 ipFe22_217 = ipFindLevLine( 217 , 22 , 26 );
00858 ipFe22_348 = ipFindLevLine( 348 , 22 , 26 );
00859 ipFe22_292 = ipFindLevLine( 292 , 22 , 26 );
00860 ipFe22_253 = ipFindLevLine( 253 , 22 , 26 );
00861 ipFe22_846 = ipFindLevLine( 846 , 22 , 26 );
00862
00863 ipT347 = ipFindLevLine( 347 , 14 , 26 );
00864
00865 ipT192 = ipFindLevLine( 192 , 24 , 26 );
00866
00867 ipT255 = ipFindLevLine( 255 , 24 , 26 );
00868
00869 ipT11 = ipFindLevLine( 11 , 24 , 26 );
00870
00871 ipT191 = ipFindLevLine( 1786 , 2 , 26 );
00872
00873
00874
00875 ipFe18975 = ipFindLevLine( 974 , 18 , 26 );
00876
00877 ipTFe23 = ipFindLevLine( 2299 , 21 , 26 );
00878
00879 ipTFe13 = ipFindLevLine( 1354 , 21 , 26 );
00880
00881
00882
00883 ipCo11527 = ipFindLevLine( 5168 , 11 , 27 );
00884
00885
00886 ipNi1_7m = ipFindLevLine( 75046.164f , 1 , 28 );
00887 ipNi1_11m = ipFindLevLine( 113044.031f , 1 , 28 );
00888
00889
00890 ipxNi1242 = ipFindLevLine( 4230 , 12 , 28 );
00891
00892
00893
00894 ipZn04363 = ipFindLevLine( 36250 , 4 , 30 );
00895
00896
00897
00898 endFindLevLine( );
00899
00900
00901 for( J=0; J< nCORotate; ++J )
00902 {
00903
00904
00905
00906 float BC12O16=1.9313f;
00907
00908 float dpC12O16 = 0.1111f;
00909 float BC13O16=2.0202f;
00910
00911 float dpC13O16 = 0.11046f;
00912
00913
00914 C12O16Rotate[J].gLo = 2.f*J+1.f;
00915 C12O16Rotate[J].gHi = 2.f*(J+1.f)+1.f;
00916
00917 C13O16Rotate[J].gLo = 2.f*J+1.f;
00918 C13O16Rotate[J].gHi = 2.f*(J+1.f)+1.f;
00919
00920
00921 C12O16Rotate[J].EnergyWN = 2.f * BC12O16 * (J+1.f);
00922 C12O16Rotate[J].WLAng = 1.e8f/C12O16Rotate[J].EnergyWN;
00923 C13O16Rotate[J].EnergyWN = 2.f * BC13O16 * (J+1.f);
00924 C13O16Rotate[J].WLAng = 1.e8f/C13O16Rotate[J].EnergyWN;
00925
00926
00927
00928 C12O16Rotate[J].nelem = LIMELM+1;
00929 C13O16Rotate[J].nelem = LIMELM+2;
00930
00931 C12O16Rotate[J].IonStg = 2;
00932 C13O16Rotate[J].IonStg = 3;
00933
00934
00935 C12O16Rotate[J].Aul = 2.508e-6f *POW2(dpC12O16)*POW3(BC12O16)*POW2(J+1.f)*POW2(J+1.f)/(2.f*J+3.f);
00936 C13O16Rotate[J].Aul = 2.508e-6f *POW2(dpC13O16)*POW3(BC13O16)*POW2(J+1.f)*POW2(J+1.f)/(2.f*J+3.f);
00937
00938 C12O16Rotate[J].gf = -1.f;
00939 C13O16Rotate[J].gf = -1.f;
00940 C12O16Rotate[J].PopLo = 0.;
00941 C13O16Rotate[J].PopLo = 0.;
00942 C12O16Rotate[J].PopHi = 0.;
00943 C13O16Rotate[J].PopHi = 0.;
00944
00945 C12O16Rotate[J].iRedisFun = ipCRD;
00946
00947 C13O16Rotate[J].iRedisFun = ipCRD;
00948 C12O16Rotate[J].TauIn = opac.taumin;
00949 C13O16Rotate[J].TauIn = opac.taumin;
00950 C12O16Rotate[J].TauCon = opac.taumin;
00951 C13O16Rotate[J].TauCon = opac.taumin;
00952 C12O16Rotate[J].ColOvTot = 0.;
00953 C13O16Rotate[J].ColOvTot = 0.;
00954
00955 C12O16Rotate[J].TauTot = 1e20f;
00956 C13O16Rotate[J].TauTot = 1e20f;
00957
00958 C12O16Rotate[J].Pesc = 1.;
00959 C13O16Rotate[J].Pesc = 1.;
00960
00961 C12O16Rotate[J].FracInwd = 1.f;
00962 C13O16Rotate[J].FracInwd = 1.f;
00963
00964 C12O16Rotate[J].Pdest = 0.;
00965 C13O16Rotate[J].Pdest = 0.;
00966 C12O16Rotate[J].Pelec_esc = 0.;
00967 C13O16Rotate[J].Pelec_esc = 0.;
00968
00969 C12O16Rotate[J].pump = 0.;
00970 C13O16Rotate[J].pump = 0.;
00971
00972 C12O16Rotate[J].PopLo = 0.;
00973 C13O16Rotate[J].PopLo = 0.;
00974
00975 C12O16Rotate[J].PopHi = 0.;
00976 C13O16Rotate[J].PopHi = 0.;
00977
00978 C12O16Rotate[J].PopOpc = 0.;
00979 C13O16Rotate[J].PopOpc = 0.;
00980
00981 C12O16Rotate[J].cool = 0.;
00982 C12O16Rotate[J].heat = 0.;
00983 C13O16Rotate[J].cool = 0.;
00984 C13O16Rotate[J].heat = 0.;
00985
00986 C12O16Rotate[J].xIntensity = 0.;
00987 C13O16Rotate[J].xIntensity = 0.;
00988
00989 C12O16Rotate[J].phots = 0.;
00990 C13O16Rotate[J].phots = 0.;
00991 }
00992
00993
00994
00995 if( lgFirst && nWindLine>0)
00996 {
00997
00998 lgFirst = false;
00999
01000
01001
01002 for( i=0; i < nWindLine; i++ )
01003 {
01004
01005 ASSERT( TauLine2[i].nelem > 0 );
01006 ASSERT( TauLine2[i].nelem <= (int)LIMELM );
01007
01008 ASSERT( TauLine2[i].IonStg> 0 );
01009 ASSERT( TauLine2[i].IonStg<= (int)LIMELM );
01010
01011 ASSERT( TauLine2[i].gLo>0. );
01012
01013 ASSERT( TauLine2[i].gHi > 0. );
01014
01015
01016 ASSERT( TauLine2[i].EnergyWN > 0 );
01017
01018
01019
01020 if( TauLine2[i].gf < 0. )
01021 {
01022
01023 TauLine2[i].gf *= (float)(-TauLine2[i].gHi/TRANS_PROB_CONST/POW2(TauLine2[i].EnergyWN));
01024 }
01025
01026
01027 TauLine2[i].WLAng = 1.e8f/TauLine2[i].EnergyWN;
01028 TauLine2[i].PopLo = 0.;
01029 TauLine2[i].PopHi = 0.;
01030 TauLine2[i].iRedisFun = ipPRD;
01031
01032
01033
01034 TauLine2[i].TauIn = opac.taumin;
01035 TauLine2[i].TauCon = opac.taumin;
01036 TauLine2[i].ColOvTot = 0.;
01037
01038 TauLine2[i].TauTot = 1e20f;
01039
01040 TauLine2[i].Pesc = 1.;
01041
01042 TauLine2[i].FracInwd = 1.;
01043
01044 TauLine2[i].Pdest = 0.;
01045 TauLine2[i].Pelec_esc = 0.;
01046
01047 TauLine2[i].pump = 0.;
01048
01049 TauLine2[i].PopLo = 0.;
01050
01051 TauLine2[i].PopHi = 0.;
01052
01053 TauLine2[i].PopOpc = 0.;
01054
01055 TauLine2[i].cool = 0.;
01056 TauLine2[i].heat = 0.;
01057
01058 TauLine2[i].xIntensity = 0.;
01059
01060 TauLine2[i].phots = 0.;
01061
01062 TauLine2[i].ots = 0.;
01063 }
01064 }
01065
01066 for( i=0; i < nUTA; i++ )
01067 {
01068
01069 ASSERT( UTALines[i].nelem > 0 );
01070 ASSERT( UTALines[i].nelem <= (int)LIMELM );
01071
01072 ASSERT( UTALines[i].IonStg> 0 );
01073 ASSERT( UTALines[i].IonStg<= (int)LIMELM );
01074
01075 ASSERT( UTALines[i].gLo>0. );
01076
01077 ASSERT( UTALines[i].gHi > 0. );
01078
01079
01080 ASSERT( UTALines[i].EnergyWN > 0 );
01081
01082 UTALines[i].PopLo = 0.;
01083 UTALines[i].PopHi = 0.;
01084 UTALines[i].iRedisFun = ipPRD;
01085
01086
01087
01088 UTALines[i].TauIn = opac.taumin;
01089 UTALines[i].TauCon = opac.taumin;
01090 UTALines[i].ColOvTot = 0.;
01091
01092 UTALines[i].TauTot = 1e20f;
01093
01094 UTALines[i].Pesc = 1.;
01095
01096 UTALines[i].FracInwd = 1.;
01097
01098 UTALines[i].Pdest = 0.;
01099 UTALines[i].Pelec_esc = 0.;
01100
01101 UTALines[i].pump = 0.;
01102
01103 UTALines[i].PopLo = 0.;
01104
01105 UTALines[i].PopHi = 0.;
01106
01107 UTALines[i].PopOpc = 0.;
01108
01109 UTALines[i].cool = 0.;
01110
01111
01112
01113
01114 UTALines[i].xIntensity = 0.;
01115
01116 UTALines[i].phots = 0.;
01117 }
01118
01119 for( i=0; i < nHFLines; i++ )
01120 {
01121
01122 ASSERT( HFLines[i].nelem > 0 );
01123 ASSERT( HFLines[i].nelem <= (int)LIMELM );
01124
01125 ASSERT( HFLines[i].IonStg> 0 );
01126 ASSERT( HFLines[i].IonStg<= (int)LIMELM );
01127
01128 ASSERT( HFLines[i].gLo>0. );
01129
01130 ASSERT( HFLines[i].gHi > 0. );
01131
01132
01133 ASSERT( HFLines[i].EnergyWN > 0 );
01134
01135
01136
01137 if( HFLines[i].gf < 0. )
01138 {
01139
01140 HFLines[i].gf *= (float)(-HFLines[i].gHi/TRANS_PROB_CONST/POW2(HFLines[i].EnergyWN));
01141 }
01142
01143
01144 HFLines[i].WLAng = 1.e8f/HFLines[i].EnergyWN;
01145 HFLines[i].PopLo = 0.;
01146 HFLines[i].PopHi = 0.;
01147
01148 HFLines[i].iRedisFun = ipCRD;
01149
01150
01151
01152 HFLines[i].TauIn = opac.taumin;
01153 HFLines[i].TauCon = opac.taumin;
01154 HFLines[i].ColOvTot = 0.;
01155
01156 HFLines[i].TauTot = 1e20f;
01157
01158 HFLines[i].Pesc = 1.;
01159
01160 HFLines[i].FracInwd = 1.;
01161
01162 HFLines[i].Pdest = 0.;
01163 HFLines[i].Pelec_esc = 0.;
01164
01165 HFLines[i].pump = 0.;
01166
01167 HFLines[i].PopLo = 0.;
01168
01169 HFLines[i].PopHi = 0.;
01170
01171 HFLines[i].PopOpc = 0.;
01172
01173 HFLines[i].cool = 0.;
01174 HFLines[i].heat = 0.;
01175
01176 HFLines[i].xIntensity = 0.;
01177
01178 HFLines[i].phots = 0.;
01179 }
01180 DEBUG_EXIT( "lines_setup()" );
01181 return;
01182 }
01183
01184
01185 static int *lev2set;
01186
01187
01188 static long ipFindLevLine(
01189
01190 float wl ,
01191
01192 long ion ,
01193
01194 long nelem )
01195 {
01196 long i;
01197
01198 DEBUG_ENTRY( "ipFindLevLine()" );
01199
01200 ASSERT( wl > 0. );
01201 ASSERT( ion > 0 );
01202 ASSERT( ion <= LIMELM );
01203 ASSERT( nelem > 0 );
01204 ASSERT( nelem <= LIMELM );
01205
01206
01207 for( i=1; i<= nLevel1; ++i )
01208 {
01209 if( TauLines[i].nelem == (int)nelem &&
01210 TauLines[i].IonStg == (int)ion &&
01211 fabs( TauLines[i].WLAng - wl) <0.1 )
01212 {
01213
01214 lev2set[i] = true;
01215
01216 DEBUG_EXIT( "ipFindLevLine()" );
01217 return i;
01218 }
01219 }
01220 fprintf(ioQQQ,
01221 " ipFindLevLine could not find a line with following properties:\n"
01222 " wavelength=%f\n"
01223 " ion stage =%li\n"
01224 " atomic num=%li\n",
01225 wl , ion, nelem );
01226
01227 DEBUG_EXIT( "ipFindLevLine()" );
01228 return -1;
01229 }
01230
01231 static void initFindLevLine( void )
01232 {
01233 long i;
01234
01235 DEBUG_ENTRY( "initFindLevLine()" );
01236
01237
01238 lev2set = (int*)MALLOC( (size_t)(nLevel1+1)*sizeof(int) );
01239
01240
01241
01242 for( i=1; i<=nLevel1; ++i )
01243 lev2set[i] = false;
01244
01245 DEBUG_EXIT( "initFindLevLine()" );
01246 return;
01247 }
01248
01249 static void endFindLevLine( void )
01250 {
01251 long i;
01252 bool lgAbort_loc=false;
01253
01254 DEBUG_ENTRY( "endFindLevLine()" );
01255
01256
01257
01258 for( i=1; i<=nLevel1; ++i )
01259 {
01260 if( lev2set[i] == false )
01261 {
01262 fprintf(ioQQQ,"PROBLEM endFindLevLine warning; line %li not claimed\n",i);
01263 fprintf(ioQQQ,
01264 " line had the following properties:\n"
01265 " wavelength=%f\n"
01266 " ion stage =%i\n"
01267 " atomic num=%i\n",
01268 TauLines[i].WLAng ,
01269 TauLines[i].IonStg ,
01270 TauLines[i].nelem );
01271 lgAbort_loc = true;
01272 }
01273 }
01274
01275
01276 free(lev2set);
01277
01278 if( lgAbort_loc )
01279 {
01280 fprintf(ioQQQ," problems found entering the data. I live in lines_setup.c\n");
01281 puts( "[Stop in endFindLevLine]" );
01282 cdEXIT(EXIT_FAILURE);
01283 }
01284
01285 DEBUG_EXIT( "endFindLevLine()" );
01286 return;
01287 }