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 ipT770 = ipFindLevLine( 770.4f , 8 , 10 );
00332
00333 ipT780 = ipFindLevLine( 780.3f , 8 , 10 );
00334
00335
00336 ipxNe0676 = ipFindLevLine( 76520 , 6 , 10 );
00337
00338 ipT895 = ipFindLevLine( 895 , 7 , 10 );
00339
00340 ipT88 = ipFindLevLine( 88 , 8 , 10 );
00341
00342
00343
00344 ipTNe13 = ipFindLevLine( 128100 , 2 , 10 );
00345
00346
00347 ipTNe36 = ipFindLevLine( 360140 , 3 , 10 );
00348
00349
00350 ipTNe16 = ipFindLevLine( 155500 , 3 , 10 );
00351
00352
00353 ipTNe14 = ipFindLevLine( 143200 , 5 , 10 );
00354
00355
00356 ipTNe24 = ipFindLevLine( 243100 , 5 , 10 );
00357
00358
00359 ipT5895 = ipFindLevLine( 5891.9f , 1 , 11 );
00360
00361
00362 ipfsNa373 = ipFindLevLine( 73200 , 3 , 11 );
00363
00364
00365 ipfsNa490 = ipFindLevLine( 90390 , 4 , 11 );
00366
00367
00368 ipfsNa421 = ipFindLevLine( 212900 , 4 , 11 );
00369
00370
00371 ipxNa6143 = ipFindLevLine( 144000 , 6 , 11 );
00372
00373
00374 ipxNa6862 = ipFindLevLine( 86110 , 6 , 11 );
00375
00376
00377 ipxNa0746 = ipFindLevLine( 46800 , 7 , 11 );
00378
00379
00380 ipMgI2853 = ipFindLevLine( 2853 , 1 , 12 );
00381
00382 ipMgI2026 = ipFindLevLine( 2026 , 1 , 12 );
00383
00384 ipT2796 = ipFindLevLine( 2795.5f , 2 , 12 );
00385
00386 ipT2804 = ipFindLevLine( 2802.7f , 2 , 12 );
00387
00388 ipT705 = ipFindLevLine( 705 , 9 , 12 );
00389
00390 ipT4561 = ipFindLevLine( 4561 , 1 , 12 );
00391
00392
00393 ipxMg51325 = ipFindLevLine( 1325 , 5 , 12 );
00394
00395
00396 ipxMg52417 = ipFindLevLine( 2417 , 5 , 12 );
00397
00398
00399 ipxMg52855 = ipFindLevLine( 2855 , 5 , 12 );
00400
00401
00402 ipxMg71190 = ipFindLevLine( 1190 , 7 , 12 );
00403
00404
00405 ipxMg72261 = ipFindLevLine( 2261 , 7 , 12 );
00406
00407
00408 ipxMg72569 = ipFindLevLine( 2569 , 7 , 12 );
00409
00410
00411 ipxMg08303 = ipFindLevLine( 30300 , 8 , 12 );
00412
00413
00414 ipTMg610 = ipFindLevLine( 609.8f , 10 , 12 );
00415
00416 ipTMg625 = ipFindLevLine( 624.9f , 10 , 12 );
00417
00418 ipT58 = ipFindLevLine( 57.9f , 10 , 12 );
00419
00420
00421 ipTMg4 = ipFindLevLine( 44850 , 4 , 12 );
00422
00423
00424 ipTMg14 = ipFindLevLine( 135200 , 5 , 12 );
00425
00426
00427 ipTMg6 = ipFindLevLine( 56100 , 5 , 12 );
00428
00429
00430 ipfsMg790 = ipFindLevLine( 90330 , 7 , 12 );
00431
00432
00433 ipfsMg755 = ipFindLevLine( 55030 , 7 , 12 );
00434
00435
00436 ipAlI3957 = ipFindLevLine( 3957 , 1 , 13 );
00437
00438 ipAlI3090 = ipFindLevLine( 3090 , 1 , 13 );
00439
00440 ipT1855 = ipFindLevLine( 1855 , 3 , 13 );
00441
00442 ipT1863 = ipFindLevLine( 1863 , 3 , 13 );
00443
00444 ipT2670 = ipFindLevLine( 2670 , 2 , 13 );
00445
00446
00447 ipAl529 = ipFindLevLine( 29052 , 5 , 13 );
00448
00449
00450 ipAl6366 = ipFindLevLine( 36600 , 6 , 13 );
00451
00452
00453 ipAl6912 = ipFindLevLine( 91160 , 6 , 13 );
00454
00455
00456 ipAl8575 = ipFindLevLine( 58480 , 8 , 13 );
00457
00458
00459 ipAl8370 = ipFindLevLine( 36900 , 8 , 13 );
00460
00461
00462 ipAl09204 = ipFindLevLine( 20400 , 9 , 13 );
00463
00464 ipT639 = ipFindLevLine( 639 , 10 , 13 );
00465
00466
00467 ipTAl550 = ipFindLevLine( 550 , 11 , 13 );
00468
00469 ipTAl568 = ipFindLevLine( 568 , 11 , 13 );
00470
00471 ipTAl48 = ipFindLevLine( 48 , 11 , 13 );
00472
00473
00474 ipSi1_130m = ipFindLevLine( 1295823.0f , 1 , 14 );
00475 ipSi1_68m = ipFindLevLine( 683995.25f , 1 , 14 );
00476
00477 ipSii2518 = ipFindLevLine( 2518 , 1 , 14 );
00478
00479 ipSii2215 = ipFindLevLine( 2215 , 1 , 14 );
00480
00481 ipSi2_2334 = ipFindLevLine( 2334 , 2 , 14 );
00482 ipSi2_2329 = ipFindLevLine( 2329 , 2 , 14 );
00483 ipSi2_2350 = ipFindLevLine( 2350 , 2 , 14 );
00484 ipSi2_2344 = ipFindLevLine( 2344 , 2 , 14 );
00485 ipSi2_2336 = ipFindLevLine( 2336 , 2 , 14 );
00486
00487 ipT1808 = ipFindLevLine( 1813.99f , 2 , 14 );
00488
00489 ipT1527 = ipFindLevLine( 1531 , 2 , 14 );
00490
00491 ipT1305 = ipFindLevLine( 1307.7f , 2 , 14 );
00492
00493 ipT1260 = ipFindLevLine( 1263.3f , 2 , 14 );
00494
00495 ipT1207 = ipFindLevLine( 1207 , 3 , 14 );
00496
00497 ipT1895 = ipFindLevLine( 1892 , 3 , 14 );
00498
00499 ipT1394 = ipFindLevLine( 1394 , 4 , 14 );
00500
00501 ipT1403 = ipFindLevLine( 1403 , 4 , 14 );
00502
00503
00504 ipSi619 = ipFindLevLine( 19631 , 6 , 14 );
00505
00506
00507 ipSi10143 = ipFindLevLine( 14300 , 10 , 14 );
00508
00509
00510 ipSi10_606 = ipFindLevLine( 606 , 10 , 14 );
00511
00512 ipTSi499 = ipFindLevLine( 499 , 12 , 14 );
00513
00514 ipTSi521 = ipFindLevLine( 521 , 12 , 14 );
00515
00516 ipTSi41 = ipFindLevLine( 41 , 12 , 14 );
00517
00518
00519 ipTSi35 = ipFindLevLine( 348140 , 2 , 14 );
00520
00521
00522 ipTSi25 = ipFindLevLine( 24810 , 7 , 14 );
00523
00524
00525 ipTSi65 = ipFindLevLine( 64920 , 7 ,14 );
00526
00527
00528 ipTSi3 = ipFindLevLine( 25840 , 9 , 14 );
00529
00530
00531 ipTSi4 = ipFindLevLine( 39290 , 9 , 14 );
00532
00533
00534
00535 ipP0260 = ipFindLevLine( 606400 , 2 , 15 );
00536
00537
00538 ipP0233 = ipFindLevLine( 328700 , 2 , 15 );
00539
00540
00541 ipP0318 = ipFindLevLine( 178850 , 3 , 15 );
00542
00543
00544 ipP713 = ipFindLevLine( 13745 , 7 , 15 );
00545
00546
00547 ipS1_25m = ipFindLevLine( 251947.453f , 1 , 16 );
00548 ipS1_56m = ipFindLevLine( 562909.625f , 1 , 16 );
00549
00550 ipT1256 = ipFindLevLine( 1256 , 2 , 16 );
00551
00552 ipT1194 = ipFindLevLine( 1197.55f , 3 , 16 );
00553
00554 ipTS1720 = ipFindLevLine( 1720 , 3 , 16 );
00555
00556 ipS4_1405 = ipFindLevLine( 1405 , 4 , 16 );
00557 ipS4_1398 = ipFindLevLine( 1398 , 4 , 16 );
00558 ipS4_1424 = ipFindLevLine( 1424 , 4 , 16 );
00559 ipS4_1417 = ipFindLevLine( 1417 , 4 , 16 );
00560 ipS4_1407 = ipFindLevLine( 1406 , 4 , 16 );
00561
00562 ipT1198 = ipFindLevLine( 1198 , 5 , 16 );
00563
00564 ipT786 = ipFindLevLine( 786.47f , 5 , 16 );
00565
00566
00567 ipTS19 = ipFindLevLine( 186700 , 3 , 16 );
00568
00569
00570 ipTS34 = ipFindLevLine( 334700 , 3 , 16 );
00571
00572 ipTS11 = ipFindLevLine( 105100 , 4 , 16 );
00573
00574
00575
00576
00577 ipCl1_11m = ipFindLevLine( 113296.3984f , 1 , 17 );
00578
00579
00580 ipfsCl214 = ipFindLevLine( 144000 , 2 , 17 );
00581
00582
00583 ipfsCl233 = ipFindLevLine( 333000 , 2 , 17 );
00584
00585
00586 ipCl04203 = ipFindLevLine( 204000 , 4 , 17 );
00587
00588
00589 ipCl04117 = ipFindLevLine( 117000 ,4 , 17 );
00590
00591
00592 ipCl973 = ipFindLevLine( 7334 , 9 , 17 );
00593
00594
00595
00596 ipTAr7 = ipFindLevLine( 69800 , 2 , 18 );
00597
00598
00599 ipTAr9 = ipFindLevLine( 90000 , 3 , 18 );
00600
00601
00602 ipTAr22 = ipFindLevLine( 218300 , 3 , 18 );
00603
00604
00605 ipTAr13 = ipFindLevLine( 131000 , 5 , 18 );
00606
00607
00608 ipTAr8 = ipFindLevLine( 80000 , 5 , 18 );
00609
00610
00611 ipAr06453 = ipFindLevLine( 45300 , 6 , 18 );
00612
00613
00614 ipKI7745 = ipFindLevLine( 7676.2f , 1 , 19 );
00615
00616
00617 ipxK03462 = ipFindLevLine( 46200 , 3 , 19 );
00618
00619
00620 ipxK04598 = ipFindLevLine( 59800 , 4 , 19 );
00621
00622
00623 ipxK04154 = ipFindLevLine( 153900 , 4 , 19 );
00624
00625
00626 ipxK07319 = ipFindLevLine( 31905 , 7 , 19 );
00627
00628
00629 ipCaI4228 = ipFindLevLine( 4228 , 1 , 20 );
00630
00631 ipT3934 = ipFindLevLine( 3934 , 2 , 20 );
00632
00633 ipT3969 = ipFindLevLine( 3969 , 2 , 20 );
00634
00635 ipT8498 = ipFindLevLine( 8498 , 2 , 20 );
00636
00637 ipT8542 = ipFindLevLine( 8542 , 2 , 20 );
00638
00639 ipT8662 = ipFindLevLine( 8662 , 2 , 20 );
00640
00641 ipT7291 = ipFindLevLine( 7291 , 2 , 20 );
00642
00643 ipT7324 = ipFindLevLine( 7324 , 2 , 20 );
00644
00645
00646 ipTCa3 = ipFindLevLine( 32100 , 4 , 20 );
00647
00648
00649
00650 ipSc05231 = ipFindLevLine( 23100 , 5 , 21 );
00651
00652
00653 ipSc13264 = ipFindLevLine( 2638 , 13 , 21 );
00654
00655
00656
00657 ipFe1_24m = ipFindLevLine( 240359.546f , 1 , 26 );
00658 ipFe1_35m = ipFindLevLine( 347043.25f , 1 , 26 );
00659 ipFe1_54m = ipFindLevLine( 542946.5625f , 1 , 26 );
00660 ipFe1_111m = ipFindLevLine( 1111549.25f , 1 , 26 );
00661
00662 ipFeI3884 = ipFindLevLine( 3884 , 1 , 26 );
00663
00664 ipFeI3729 = ipFindLevLine( 3729 , 1 , 26 );
00665
00666 ipFeI3457 = ipFindLevLine( 3457 , 1 , 26 );
00667
00668 ipFeI3021 = ipFindLevLine( 3021 , 1 , 26 );
00669
00670 ipFeI2966 = ipFindLevLine( 2966 , 1 , 26 );
00671
00672
00673
00674 ipTuv3 = ipFindLevLine( 2400 , 2 , 26 );
00675
00676 ipTr48 = ipFindLevLine( 6200 , 2 , 26 );
00677
00678 ipTFe16 = ipFindLevLine( 1080 , 2 , 26 );
00679
00680 ipTFe26 = ipFindLevLine( 1500 , 2 , 26 );
00681
00682 ipTFe34 = ipFindLevLine( 11500 , 2 , 26 );
00683
00684 ipTFe35 = ipFindLevLine( 2500 , 2 , 26 );
00685
00686 ipTFe46 = ipFindLevLine( 2300 , 2 , 26 );
00687
00688 ipTFe56 = ipFindLevLine( 8900 , 2 , 26 );
00689
00690 ipT1122 = ipFindLevLine( 1125.8f , 3 , 26 );
00691
00692 ipT191 = ipFindLevLine( 1786 , 2 , 26 );
00693
00694
00695
00696 ipCo11527 = ipFindLevLine( 5168 , 11 , 27 );
00697
00698
00699 ipNi1_7m = ipFindLevLine( 75046.164f , 1 , 28 );
00700 ipNi1_11m = ipFindLevLine( 113044.031f , 1 , 28 );
00701
00702
00703
00704 endFindLevLine( );
00705
00709
00710 if( lgFirst && nWindLine>0)
00711 {
00712
00713 lgFirst = false;
00714
00715
00716
00717 for( i=0; i < nWindLine; i++ )
00718 {
00719
00720 ASSERT( (*TauLine2[i].Hi()).nelem() > 0 );
00721 ASSERT( (*TauLine2[i].Hi()).nelem() <= (int)LIMELM );
00722
00723 ASSERT( (*TauLine2[i].Hi()).IonStg() > 0 );
00724 ASSERT( (*TauLine2[i].Hi()).IonStg() <= (int)LIMELM );
00725
00726 ASSERT( (*TauLine2[i].Lo()).g() >0. );
00727
00728 ASSERT( (*TauLine2[i].Hi()).g() > 0. );
00729
00730
00731 ASSERT( TauLine2[i].EnergyWN() > 0 );
00732
00733
00734
00735 if( TauLine2[i].Emis().gf() < 0. )
00736 {
00737
00738 TauLine2[i].Emis().gf() *= (realnum)((-(*TauLine2[i].Hi()).g())/TRANS_PROB_CONST/POW2(TauLine2[i].EnergyWN()));
00739 }
00740
00741
00742 TauLine2[i].WLAng() = 1.e8f/TauLine2[i].EnergyWN();
00743 (*TauLine2[i].Lo()).Pop() = 0.;
00744 (*TauLine2[i].Hi()).Pop() = 0.;
00745 TauLine2[i].Emis().iRedisFun() = ipPRD;
00746
00747
00748
00749 TauLine2[i].Emis().TauIn() = opac.taumin;
00750 TauLine2[i].Emis().TauCon() = opac.taumin;
00751 TauLine2[i].Emis().ColOvTot() = 0.;
00752
00753 TauLine2[i].Emis().TauTot() = 1e20f;
00754
00755 TauLine2[i].Emis().Pesc() = 1.;
00756
00757 TauLine2[i].Emis().FracInwd() = 1.;
00758
00759 TauLine2[i].Emis().Pdest() = 0.;
00760 TauLine2[i].Emis().Pelec_esc() = 0.;
00761
00762 TauLine2[i].Emis().pump() = 0.;
00763
00764 (*TauLine2[i].Lo()).Pop() = 0.;
00765
00766 (*TauLine2[i].Hi()).Pop() = 0.;
00767
00768 TauLine2[i].Emis().PopOpc() = 0.;
00769
00770 TauLine2[i].Coll().cool() = 0.;
00771 TauLine2[i].Coll().heat() = 0.;
00772
00773 TauLine2[i].Emis().xIntensity() = 0.;
00774
00775 TauLine2[i].Emis().phots() = 0.;
00776
00777 TauLine2[i].Emis().ots() = 0.;
00778 }
00779 }
00780
00781 for( i=0; i < nUTA; i++ )
00782 {
00783
00784 ASSERT( (*UTALines[i].Hi()).nelem() > 0 );
00785 ASSERT( (*UTALines[i].Hi()).nelem() <= (int)LIMELM );
00786
00787 ASSERT( (*UTALines[i].Hi()).IonStg() > 0 );
00788 ASSERT( (*UTALines[i].Hi()).IonStg() <= (int)LIMELM );
00789
00790 ASSERT( (*UTALines[i].Lo()).g() > 0. );
00791
00792 ASSERT( (*UTALines[i].Hi()).g() > 0. );
00793
00794
00795 ASSERT( UTALines[i].EnergyWN() > 0 );
00796
00797 (*UTALines[i].Lo()).Pop() = 0.;
00798 (*UTALines[i].Hi()).Pop() = 0.;
00799 UTALines[i].Emis().iRedisFun() = ipPRD;
00800
00801
00802
00803 UTALines[i].Emis().TauIn() = opac.taumin;
00804 UTALines[i].Emis().TauCon() = opac.taumin;
00805 UTALines[i].Emis().ColOvTot() = 0.;
00806
00807 UTALines[i].Emis().TauTot() = 1e20f;
00808
00809 UTALines[i].Emis().Pesc() = 1.;
00810
00811 UTALines[i].Emis().FracInwd() = 1.;
00812
00813 UTALines[i].Emis().Pdest() = 0.;
00814 UTALines[i].Emis().Pelec_esc() = 0.;
00815
00816 UTALines[i].Emis().pump() = 0.;
00817
00818 (*UTALines[i].Lo()).Pop() = 0.;
00819
00820 (*UTALines[i].Hi()).Pop() = 0.;
00821
00822 UTALines[i].Emis().PopOpc() = 0.;
00823
00824 UTALines[i].Coll().cool() = 0.;
00825
00826
00827
00828
00829 UTALines[i].Emis().xIntensity() = 0.;
00830
00831 UTALines[i].Emis().phots() = 0.;
00832 UTALines[i].Emis().ots() = 0.;
00833 }
00834
00835 for( i=0; i < nHFLines; i++ )
00836 {
00837
00838 ASSERT( (*HFLines[i].Hi()).nelem() > 0 );
00839 ASSERT( (*HFLines[i].Hi()).nelem() <= (int)LIMELM );
00840
00841 ASSERT( (*HFLines[i].Hi()).IonStg() > 0 );
00842 ASSERT( (*HFLines[i].Hi()).IonStg() <= (int)LIMELM );
00843
00844 ASSERT( (*HFLines[i].Lo()).g() > 0. );
00845
00846 ASSERT( (*HFLines[i].Hi()).g() > 0. );
00847
00848
00849 ASSERT( HFLines[i].EnergyWN() > 0 );
00850 ASSERT( HFLines[i].Emis().Aul()>0 );
00851 ASSERT( HFLines[i].Emis().damp()>0 );
00852
00853
00854
00855 if( HFLines[i].Emis().gf() < 0. )
00856 {
00857
00858 HFLines[i].Emis().gf() *= (realnum)(-(*HFLines[i].Hi()).g()/TRANS_PROB_CONST/POW2(HFLines[i].EnergyWN()));
00859 }
00860
00861
00862 HFLines[i].WLAng() = 1.e8f/HFLines[i].EnergyWN();
00863 (*HFLines[i].Lo()).Pop() = 0.;
00864 (*HFLines[i].Hi()).Pop() = 0.;
00865
00866 HFLines[i].Emis().iRedisFun() = ipCRD;
00867
00868
00869
00870 HFLines[i].Emis().TauIn() = opac.taumin;
00871 HFLines[i].Emis().TauCon() = opac.taumin;
00872 HFLines[i].Emis().ColOvTot()=0;
00873
00874 HFLines[i].Emis().TauTot() = 1e20f;
00875
00876 HFLines[i].Emis().Pesc() = 1.;
00877
00878 HFLines[i].Emis().FracInwd() = 1.;
00879
00880 HFLines[i].Emis().Pdest() = 0.;
00881 HFLines[i].Emis().Pelec_esc() = 0.;
00882
00883 HFLines[i].Emis().pump() = 0.;
00884
00885 (*HFLines[i].Lo()).Pop() = 0.;
00886
00887 (*HFLines[i].Hi()).Pop() = 0.;
00888
00889 HFLines[i].Emis().PopOpc() = 0.;
00890
00891 HFLines[i].Coll().cool() = 0.;
00892 HFLines[i].Coll().heat() = 0.;
00893
00894 HFLines[i].Emis().xIntensity() = 0.;
00895
00896 HFLines[i].Emis().phots() = 0.;
00897 HFLines[i].Emis().ots() = 0.;
00898 }
00899 return;
00900 }
00901
00902
00903 static int *lev2set;
00904
00905
00906 STATIC long ipFindLevLine(
00907
00908 realnum wl ,
00909
00910 long ion ,
00911
00912 long nelem)
00913 {
00914 long i;
00915
00916 DEBUG_ENTRY( "ipFindLevLine()" );
00917
00918 ASSERT( wl > 0. );
00919 ASSERT( ion > 0 );
00920 ASSERT( ion <= LIMELM );
00921 ASSERT( nelem > 0 );
00922 ASSERT( nelem <= LIMELM );
00923
00924
00925 for( i=1; i<= nLevel1; ++i )
00926 {
00927 if( (*TauLines[i].Hi()).nelem() == (int)nelem &&
00928 (*TauLines[i].Hi()).IonStg() == (int)ion &&
00929
00930 fabs(TauLines[i].WLAng() - wl)/max(1000.,wl) < 0.05/1000. )
00931 {
00932
00933 lev2set[i] = true;
00934
00935 return i;
00936 }
00937 }
00938 fprintf(ioQQQ,
00939 " ipFindLevLine could not find a line with following properties:\n"
00940 " wavelength=%f\n"
00941 " ion stage =%li\n"
00942 " atomic num=%li\n",
00943 wl , ion, nelem );
00944 return -1;
00945 }
00946
00947 STATIC void initFindLevLine( void )
00948 {
00949 long i;
00950
00951 DEBUG_ENTRY( "initFindLevLine()" );
00952
00953
00954 lev2set = (int*)MALLOC( (size_t)(nLevel1+1)*sizeof(int) );
00955
00956
00957
00958 for( i=1; i<=nLevel1; ++i )
00959 lev2set[i] = false;
00960 return;
00961 }
00962
00963 STATIC void endFindLevLine( void )
00964 {
00965 long i;
00966 bool lgAbort_loc=false;
00967
00968 DEBUG_ENTRY( "endFindLevLine()" );
00969
00970
00971
00972 for( i=1; i<=nLevel1; ++i )
00973 {
00974 if( !lev2set[i] )
00975 {
00976 fprintf(ioQQQ,"PROBLEM endFindLevLine warning; line %li not claimed\n",i);
00977 fprintf(ioQQQ,
00978 " line had the following properties:\n"
00979 " wavelength=%f\n"
00980 " ion stage =%i\n"
00981 " atomic num=%i\n",
00982 TauLines[i].WLAng() ,
00983 (*TauLines[i].Hi()).IonStg() ,
00984 (*TauLines[i].Hi()).nelem() );
00985 lgAbort_loc = true;
00986 }
00987 }
00988
00989
00990 free(lev2set);
00991
00992 if( lgAbort_loc )
00993 {
00994 fprintf(ioQQQ," problems found entering the data. I live in lines_setup.c\n");
00995 cdEXIT(EXIT_FAILURE);
00996 }
00997 return;
00998 }