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