00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "cddefines.h"
00010 #include "phycon.h"
00011 #include "physconst.h"
00012 #include "abund.h"
00013 #include "dense.h"
00014 #include "iso.h"
00015 #include "thermal.h"
00016 #include "mole.h"
00017 #include "elementnames.h"
00018 #include "heavy.h"
00019 #include "trace.h"
00020 #include "conv.h"
00021 #include "atmdat.h"
00022
00023
00024 STATIC double HCTIon(long int ion,
00025 long int nelem);
00026
00027
00028 STATIC double HCTRecom(long int ion,
00029 long int nelem);
00030
00031
00032 STATIC void MakeHCTData(void);
00033
00034
00035
00036 static double CTIonData[LIMELM][4][8];
00037 static double CTRecombData[LIMELM][4][7];
00038
00039
00040 static bool lgCTDataDefined = false;
00041
00042
00043 void ChargTranEval(
00044
00045 double *O_HIonRate )
00046 {
00047 long int ion,
00048 nelem;
00049 double a, b, c, a_op, b_op, c_op, d_op, e_op, f_op, a_o,
00050 b_o, c_o, d_o, e_o, f_o, g_o;
00051
00052 static double TeUsed = -1.;
00053
00054 DEBUG_ENTRY( "ChargTranEval()" );
00055
00056
00057 if( !conv.nTotalIoniz || fabs(phycon.te-TeUsed)/phycon.te > 0.01 )
00058 {
00059
00060
00061 for( nelem=ipHELIUM; nelem < LIMELM; nelem++ )
00062 {
00063 for( ion=0; ion <= nelem; ion++ )
00064 {
00065
00066
00067
00068
00069
00070
00071
00072
00073 atmdat.HCharExcIonOf[nelem][ion] = HCTIon(ion,nelem);
00074
00075
00076
00077
00078
00079
00080 atmdat.HCharExcRecTo[nelem][ion] = HCTRecom(ion,nelem);
00081 }
00082
00083
00084 for( ion=0; ion < LIMELM; ion++ )
00085 {
00086 atmdat.HeCharExcIonOf[nelem][ion] = 0.;
00087 atmdat.HeCharExcRecTo[nelem][ion] = 0.;
00088 }
00089 }
00090
00091
00092
00093
00094 if( phycon.te > 6000. )
00095 atmdat.HCharExcRecTo[ipHELIUM][0] += 7.47e-15*pow(phycon.te/1e4,2.06)*
00096 (1.+9.93*sexp(3.89e-4*phycon.te) );
00097
00098
00099
00100
00101 if(!co.lgUMISTrates)
00102 {
00103 atmdat.HCharExcRecTo[ipHELIUM][0] = 4.85e-15*pow(phycon.te/300, 0.18);
00104 }
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 if(phycon.te <= 10. )
00117 {
00118 atmdat.HCharExcRecTo[ipOXYGEN][0] = 3.744e-10;
00119 atmdat.HCharExcIonOf[ipOXYGEN][0] = 4.749e-20;
00120 }
00121
00122
00123 if( phycon.te > 10.)
00124 {
00125 a_op = 2.3344302e-10;
00126 b_op = 2.3651505e-10;
00127 c_op = -1.3146803e-10;
00128 d_op = 2.9979994e-11;
00129 e_op = -2.8577012e-12;
00130 f_op = 1.1963502e-13;
00131
00132
00133 atmdat.HCharExcRecTo[ipOXYGEN][0] = a_op + b_op*phycon.alnte + c_op*pow(phycon.alnte,2) + d_op*pow(phycon.alnte,3)
00134 + e_op*pow(phycon.alnte,4) + f_op*pow(phycon.alnte, 5);
00135 }
00136
00137
00138
00139
00140 if((phycon.te > 10.) && (phycon.te <= 190.))
00141 {
00142 a = -21.134531;
00143 b = -242.06831;
00144 c = 84.761441;
00145
00146
00147 atmdat.HCharExcIonOf[ipOXYGEN][0] = exp((a + b/SDIV(phycon.te) + c/SDIV(phycon.tesqrd)));
00148 }
00149
00150 else if((phycon.te > 190.) && (phycon.te <= 200.))
00151 {
00152
00153
00154
00155
00156
00157
00158 atmdat.HCharExcIonOf[ipOXYGEN][0] = 2.18733e-12*(phycon.te-190) + 1.85823e-10;
00159 }
00160
00161 else if(phycon.te > 200.)
00162 {
00163
00164 a_o = -7.6767404e-14;
00165 b_o = -3.7282001e-13;
00166 c_o = -1.488594e-12;
00167 d_o = -3.6606214e-12;
00168 e_o = 2.0699463e-12;
00169 f_o = -2.6139493e-13;
00170 g_o = 1.1580844e-14;
00171
00172
00173 atmdat.HCharExcIonOf[ipOXYGEN][0] = a_o + b_o*phycon.alnte + c_o*pow(phycon.alnte,2) + d_o*pow(phycon.alnte,3)
00174 + e_o*pow(phycon.alnte,4) + f_o*pow(phycon.alnte, 5) + g_o*pow(phycon.alnte,6);
00175 }
00176
00177
00178
00179 if(!co.lgUMISTrates)
00180 {
00181 atmdat.HCharExcIonOf[ipOXYGEN][0] = HMRATE(7.31e-10,0.23,225.9);
00182 atmdat.HCharExcRecTo[ipOXYGEN][0] = HMRATE(5.66e-10,0.36,-8.60);
00183 }
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 atmdat.HCharExcIonOf[ipIRON][0] = 5.4e-9;
00202
00203
00204
00205
00206
00207
00208 atmdat.HCharExcIonOf[ipALUMINIUM][0] = 3e-9;
00209
00210
00211
00212 atmdat.HCharExcIonOf[ipPHOSPHORUS][0] = 1e-9;
00213
00214
00215
00216 atmdat.HCharExcIonOf[ipCHLORINE][0] = 1e-9;
00217
00218
00219
00220 atmdat.HCharExcIonOf[ipTITANIUM][0] = 3e-9;
00221
00222
00223
00224 atmdat.HCharExcIonOf[ipMANGANESE][0] = 3e-9;
00225
00226
00227
00228 atmdat.HCharExcIonOf[ipNICKEL][0] = 3e-9;
00229
00230
00231
00232
00233
00234
00235
00236 atmdat.HCharExcIonOf[ipSODIUM][0] = 7e-12;
00237
00238
00239
00240
00241
00242
00243
00244 atmdat.HCharExcIonOf[ipSODIUM][0] += 0.7e-12;
00245
00246
00247
00248
00249
00250
00251 atmdat.HCharExcIonOf[ipPOTASSIUM][0] = 1.25e-12;
00252
00253
00254
00255
00256
00257
00258 atmdat.HCharExcIonOf[ipSULPHUR][0] = 1.e-14;
00259
00260 if( phycon.te < 1e5 )
00261 {
00262
00263
00264
00265
00266
00267 atmdat.HCharExcIonOf[ipMAGNESIUM][0] = 9.76e-12*pow((phycon.te/1e4),3.14)*(1. + 55.54*sexp(1.12*phycon.te/1e4));
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279 atmdat.HCharExcIonOf[ipSILICON][0] = 0.92e-12*pow((phycon.te/1e4),1.15)*(1. + 0.80*sexp(0.24*phycon.te/1e4));
00280
00281
00283
00284
00285
00286
00287
00288
00289
00290 atmdat.HCharExcIonOf[ipLITHIUM][0] = 2.84e-12*pow((phycon.te/1e4),1.99)*(1. + 375.54*sexp(54.07*phycon.te/1e4));
00293 }
00294 else
00295 {
00297 atmdat.HCharExcIonOf[ipMAGNESIUM][0] = 0.;
00298 atmdat.HCharExcIonOf[ipSILICON][0] = 0.;
00299 atmdat.HCharExcIonOf[ipLITHIUM][0] = 0.;
00300 }
00301
00302 {
00303
00304
00305
00306
00307
00308
00309 double tefac = phycon.te * phycon.alnte;
00310
00311
00312
00313 double ct_from_n0grhp_to_npgrh0 = (1.64e-16*phycon.te - 8.76e-17*tefac + 2.41e-20*phycon.tesqrd + 9.83e-13*phycon.alnte )*
00314 sexp( 10985./phycon.te );
00315
00316
00318
00319
00320
00321 double ct_from_npgrh0_to_n0grhp = (1.56e-15*phycon.te - 1.79e-16*tefac + 1.15e-20*phycon.tesqrd + 1.08e-13*phycon.alnte);
00322
00323
00324
00325 atmdat.HCharExcRecTo_N0_2D = (6.83e-16*phycon.te - 7.40e-17*tefac + 3.73e-21*phycon.tesqrd + 1.75e-15*phycon.alnte)*
00326 sexp( 16680./phycon.te );
00327
00328
00329
00330 atmdat.HCharExcIonOf[ipNITROGEN][0] = ct_from_n0grhp_to_npgrh0;
00331 atmdat.HCharExcRecTo[ipNITROGEN][0] = ct_from_npgrh0_to_n0grhp + atmdat.HCharExcRecTo_N0_2D;
00332 }
00333
00334
00335
00336
00337
00338 if( phycon.te <= 1500. )
00339 {
00340 atmdat.HCharExcRecTo[ipOXYGEN][1] = 0.5337e-9*pow( (phycon.te/100.) ,-0.076);
00341 }
00342 else
00343 {
00344 atmdat.HCharExcRecTo[ipOXYGEN][1] = 0.4344e-9 +
00345 0.6340e-9*pow( log10(phycon.te/1500.) ,2.06 );
00346 }
00347
00348
00349 if( phycon.te <= 1500. )
00350 {
00351 atmdat.HCharExcRecTo[ipNITROGEN][1] = 0.8692e-9*pow( (phycon.te/1500.) ,0.17);
00352 }
00353 else if( phycon.te <= 20000. )
00354 {
00355 atmdat.HCharExcRecTo[ipNITROGEN][1] = 0.9703e-9*pow( (phycon.te/10000.) ,0.058);
00356 }
00357 else
00358 {
00359 atmdat.HCharExcRecTo[ipNITROGEN][1] = 1.0101e-9 +
00360 1.4589e-9*pow( log10(phycon.te/20000.) ,2.06 );
00361 }
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377 atmdat.HeCharExcRecTo[ipCARBON][2] = 4.6e-19*phycon.tesqrd;
00378
00379
00380
00381 atmdat.HeCharExcRecTo[ipCARBON][3] = 1e-14;
00382
00383
00384
00385
00386
00387
00388
00389 atmdat.HeCharExcIonOf[ipCARBON][0] = 6.3e-15*pow((phycon.te/300),0.75);
00390
00391
00392
00393 atmdat.HeCharExcIonOf[ipCARBON][1] =
00394 5e-20*phycon.tesqrd*sexp(0.07e-4*phycon.te)*sexp(6.29/phycon.te_eV);
00395
00396
00397
00398
00399
00400
00401
00402
00403 atmdat.HeCharExcRecTo[ipNITROGEN][1] = 0.8e-10;
00404
00405
00406
00407 atmdat.HeCharExcRecTo[ipNITROGEN][2] = 1.5e-10;
00408
00409
00410
00411
00412
00413 atmdat.HeCharExcRecTo[ipNITROGEN][3] = 2e-9;
00414
00415
00416
00417
00418 atmdat.HeCharExcIonOf[ipNITROGEN][1] =
00419 3.7e-20*phycon.tesqrd*sexp(0.063e-4*phycon.te)*sexp(1.44/phycon.te_eV);
00420
00421
00422
00423
00424
00425 atmdat.HeCharExcRecTo[ipOXYGEN][1] = 3.2e-14*phycon.te/phycon.te05;
00426
00427
00428 atmdat.HeCharExcRecTo[ipOXYGEN][2] = 1e-9;
00429
00430
00431 atmdat.HeCharExcRecTo[ipOXYGEN][3] = 6e-10;
00432
00433
00434
00435
00436 atmdat.HeCharExcIonOf[ipOXYGEN][0] =
00437 4.991E-15 * pow( phycon.te / 1e4, 0.3794 )* sexp( phycon.te/1.121E6 ) +
00438 2.780E-15 * pow( phycon.te / 1e4, -0.2163 )* exp( -1. * MIN2(1e7, phycon.te)/(-8.158E5) );
00439
00440
00441
00442
00443
00444 atmdat.HeCharExcRecTo[ipNEON][1] = 1e-14;
00445
00446
00447 atmdat.HeCharExcRecTo[ipNEON][2] = 1e-16*phycon.sqrte;
00448
00449
00450 atmdat.HeCharExcRecTo[ipNEON][3] = 1.7e-11*phycon.sqrte;
00451
00452
00453
00454
00455
00456 atmdat.HeCharExcRecTo[ipMAGNESIUM][2] = 7.5e-10;
00457
00458
00459 atmdat.HeCharExcRecTo[ipMAGNESIUM][3] = 1.4e-10*phycon.te30;
00460
00461
00462
00463
00464
00465
00466
00467
00468 atmdat.HeCharExcRecTo[ipSILICON][2] += phycon.sqrte*phycon.te10*phycon.te10*
00469 1.3*1.5e-12;
00470
00471
00472
00473 atmdat.HeCharExcRecTo[ipSILICON][3] = 2.54e-11*phycon.sqrte/phycon.te03/
00474 phycon.te01/phycon.te01;
00475
00476
00477
00478
00479 atmdat.HeCharExcIonOf[ipSILICON][0] = 3.3e-9;
00480
00481
00482
00483 atmdat.HeCharExcIonOf[ipSILICON][1] =
00484 1.5e-11*phycon.te20*phycon.te05*sexp(6.91/phycon.te_eV);
00485
00486
00487
00488 atmdat.HeCharExcIonOf[ipSILICON][2] =
00489 1.15e-11*phycon.sqrte*sexp(8.88/phycon.te_eV);
00490
00491
00492
00493
00494
00495 atmdat.HeCharExcRecTo[ipSULPHUR][2] = phycon.sqrte*1.1e-11;
00496
00497
00498
00499
00500 atmdat.HeCharExcRecTo[ipSULPHUR][3] = 4.8e-14*phycon.te30;
00501
00502
00503
00504
00505 atmdat.HeCharExcIonOf[ipSULPHUR][1] =
00506 4.4e-16*phycon.te*phycon.te20*sexp(0.036e-4*phycon.te)*sexp(9.2/phycon.te_eV);
00507
00508
00509
00510 atmdat.HeCharExcIonOf[ipSULPHUR][2] =
00511 5.5e-18*phycon.te*phycon.sqrte*phycon.te10*sexp(0.046e-4*phycon.te)*sexp(10.5/phycon.te_eV);
00512
00513
00514
00515
00516 atmdat.HeCharExcRecTo[ipARGON][1] = 1.3e-10;
00517
00518
00519 atmdat.HeCharExcRecTo[ipARGON][2] = 1.e-14;
00520
00521
00522 atmdat.HeCharExcRecTo[ipARGON][3] = 1.6e-8/phycon.te30;
00523
00524
00525
00526
00527 atmdat.HeCharExcIonOf[ipARGON][1] = 1.1e-10;
00528
00529 TeUsed = phycon.te;
00530
00531 if(!co.lgUMISTrates)
00532 {
00533
00534
00535
00536
00537 atmdat.HCharExcIonOf[ipHELIUM][0] = 0;
00538 atmdat.HCharExcIonOf[ipCARBON][0] = 0;
00539 atmdat.HCharExcRecTo[ipCARBON][0] = 0;
00540
00541 atmdat.HeCharExcRecTo[ipCARBON][0] = 0;
00542 atmdat.HeCharExcIonOf[ipOXYGEN][0] = 0;
00543 atmdat.HeCharExcRecTo[ipOXYGEN][0] = 0;
00544 }
00545
00546
00547
00548 if( !atmdat.lgCTOn )
00549 {
00550 for( nelem=0; nelem< LIMELM; ++nelem )
00551 {
00552 for( ion=0; ion<LIMELM; ++ion )
00553 {
00554 atmdat.HCharExcIonOf[nelem][ion] = 0.;
00555 atmdat.HCharExcRecTo[nelem][ion] = 0.;
00556 atmdat.HeCharExcIonOf[nelem][ion] = 0.;
00557 atmdat.HeCharExcRecTo[nelem][ion] = 0.;
00558 }
00559 }
00560 }
00561 }
00562
00563
00564 *O_HIonRate = atmdat.HCharExcRecTo[ipOXYGEN][0]*dense.xIonDense[ipOXYGEN][1];
00565 return;
00566 }
00567
00568
00569
00570 double ChargTranSumHeat(void)
00571 {
00572 long int ion,
00573 nelem;
00574 double SumCTHeat_v;
00575
00576 DEBUG_ENTRY( "ChargTranSumHeat()" );
00577
00578
00579
00580
00581
00582
00583 ASSERT( lgCTDataDefined );
00584
00585 SumCTHeat_v = 0.;
00586
00587 for( nelem=ipHELIUM; nelem < LIMELM; nelem++ )
00588 {
00589
00590
00591
00592 int limit = MIN2(4, nelem);
00593
00594 for( ion=0; ion < limit; ion++ )
00595 {
00596
00597
00598
00599
00600 SumCTHeat_v +=
00601
00602
00603 atmdat.HCharExcIonOf[nelem][ion]*CTIonData[nelem][ion][7]*
00604 (double)dense.xIonDense[ipHYDROGEN][1]*(double)dense.xIonDense[nelem][ion] +
00605
00606
00607 atmdat.HCharExcRecTo[nelem][ion]*CTRecombData[nelem][ion][6]*
00608 StatesElem[ipH_LIKE][ipHYDROGEN][ipH1s].Pop*dense.xIonDense[ipHYDROGEN][1]*
00609 (double)dense.xIonDense[nelem][ion+1];
00610 }
00611
00612
00613
00614 for( ion=4; ion < nelem; ion++ )
00615 {
00616 SumCTHeat_v +=
00617 atmdat.HCharExcRecTo[nelem][ion]* 2.86*(double)ion *
00618 (double)dense.xIonDense[ipHYDROGEN][0]*(double)dense.xIonDense[nelem][ion+1];
00619 }
00620 }
00621
00622
00623
00624 SumCTHeat_v *= EN1EV * atmdat.HCharHeatOn;
00625
00626 if( thermal.htot > 1e-35 )
00627 {
00628
00629 atmdat.HCharHeatMax = MAX2(atmdat.HCharHeatMax,
00630 SumCTHeat_v/thermal.htot );
00631
00632 atmdat.HCharCoolMax = MAX2(atmdat.HCharCoolMax,
00633 -SumCTHeat_v/thermal.htot);
00634 }
00635
00636
00637 {
00638
00639 enum {DEBUG_LOC=false};
00640
00641 if( DEBUG_LOC)
00642 {
00643 # define FRAC 0.1
00644 for( nelem=ipHELIUM; nelem < LIMELM; nelem++ )
00645 {
00646
00647
00648
00649 int limit = MIN2(4, nelem);
00650
00651 for( ion=0; ion < limit; ion++ )
00652 {
00653 if(
00654
00655 (atmdat.HCharExcIonOf[nelem][ion]*CTIonData[nelem][ion][7]*
00656 (double)dense.xIonDense[ipHYDROGEN][1]*(double)dense.xIonDense[nelem][ion] +
00657
00658
00659 atmdat.HCharExcRecTo[nelem][ion]*CTRecombData[nelem][ion][6]*
00660 StatesElem[ipH_LIKE][ipHYDROGEN][ipH1s].Pop*dense.xIonDense[ipHYDROGEN][1]*
00661 (double)dense.xIonDense[nelem][ion+1])/SumCTHeat_v> FRAC )
00662
00663 fprintf(ioQQQ,"DEBUG ct %li %li %.3f\n", nelem, ion,
00664 (atmdat.HCharExcIonOf[nelem][ion]*CTIonData[nelem][ion][7]*
00665 (double)dense.xIonDense[ipHYDROGEN][1]*(double)dense.xIonDense[nelem][ion] +
00666
00667
00668 atmdat.HCharExcRecTo[nelem][ion]*CTRecombData[nelem][ion][6]*
00669 StatesElem[ipH_LIKE][ipHYDROGEN][ipH1s].Pop*dense.xIonDense[ipHYDROGEN][1]*
00670 (double)dense.xIonDense[nelem][ion+1]) );
00671 }
00672
00673 for( ion=4; ion < nelem; ion++ )
00674 {
00675 if(
00676 (atmdat.HCharExcRecTo[nelem][ion]* 2.86*(double)ion *
00677 (double)dense.xIonDense[ipHYDROGEN][0]*(double)dense.xIonDense[nelem][ion+1])/SumCTHeat_v> FRAC )
00678 fprintf(ioQQQ,"DEBUG ct %li %li %.3f\n", nelem, ion,
00679 (atmdat.HCharExcRecTo[nelem][ion]* 2.86*(double)ion *
00680 (double)dense.xIonDense[ipHYDROGEN][0]*(double)dense.xIonDense[nelem][ion+1]) );
00681 }
00682 }
00683 # undef FRAC
00684 fprintf(ioQQQ,"DEBUT ct tot %.e3\n", SumCTHeat_v / thermal.htot );
00685 }
00686 }
00687 return( SumCTHeat_v );
00688 }
00689
00690
00691
00692 STATIC double HCTIon(
00693
00694 long int ion,
00695
00696
00697 long int nelem)
00698 {
00699 double HCTIon_v,
00700 tused;
00701
00702 DEBUG_ENTRY( "HCTIon()" );
00703
00704
00705
00706 if( !lgCTDataDefined )
00707 {
00708 if( trace.lgTrace )
00709 {
00710 fprintf( ioQQQ," HCTIon doing 1-time init of charge transfer data\n");
00711 }
00712 lgCTDataDefined = true;
00713 MakeHCTData();
00714 }
00715
00716
00717
00718 ASSERT( CTIonData[2][0][0] > 0. );
00719
00720
00721 if( ion >= 3 )
00722 {
00723 HCTIon_v = 0.;
00724 return( HCTIon_v );
00725 }
00726
00727
00728
00729 ASSERT( ion >= 0);
00730 ASSERT( ion <= nelem );
00731
00732
00733 ASSERT( nelem > 0 );
00734 ASSERT( nelem < LIMELM );
00735
00736
00737 if( CTIonData[nelem][ion][0] <= 0. )
00738 {
00739 HCTIon_v = 0.;
00740
00741 }
00742
00743 else
00744 {
00745
00746 tused = MAX2((double)phycon.te,CTIonData[nelem][ion][4]);
00747 tused = MIN2(tused,CTIonData[nelem][ion][5]);
00748 tused *= 1e-4;
00749
00750
00751 HCTIon_v = CTIonData[nelem][ion][0]*1e-9*(pow(tused,CTIonData[nelem][ion][1]))*
00752 (1. + CTIonData[nelem][ion][2]*exp(CTIonData[nelem][ion][3]*tused))*
00753 exp(-CTIonData[nelem][ion][6]/tused);
00754 }
00755 return( HCTIon_v );
00756 }
00757
00758
00759
00760 STATIC double HCTRecom(
00761
00762 long int ion,
00763
00764
00765 long int nelem)
00766 {
00767 double HCTRecom_v,
00768 tused;
00769
00770 DEBUG_ENTRY( "HCTRecom()" );
00771
00772
00773
00774
00775
00776 if( !lgCTDataDefined )
00777 {
00778 if( trace.lgTrace )
00779 {
00780 fprintf( ioQQQ," HCTIon doing 1-time init of charge transfer data\n");
00781 }
00782 lgCTDataDefined = true;
00783 MakeHCTData();
00784 }
00785
00786
00787
00788 ASSERT( CTRecombData[1][0][0] > 0. );
00789
00790
00791
00792 if( ion > 3 )
00793 {
00794
00795
00796 HCTRecom_v = atmdat.HCTAlex*((double)ion+1.);
00797 return( HCTRecom_v );
00798 }
00799
00800
00801 ASSERT( ion >= 0 && ion <= nelem );
00802
00803
00804 ASSERT( nelem > 0 && nelem < LIMELM );
00805
00806 tused = MAX2((double)phycon.te,CTRecombData[nelem][ion][4]);
00807 tused = MIN2(tused,CTRecombData[nelem][ion][5]);
00808 tused *= 1e-4;
00809
00810 if( tused == 0. )
00811 {
00812 HCTRecom_v = 0.;
00813 return( HCTRecom_v );
00814 }
00815
00816
00817 HCTRecom_v = CTRecombData[nelem][ion][0]*1e-9*(pow(tused,CTRecombData[nelem][ion][1]))*
00818 (1. + CTRecombData[nelem][ion][2]*sexp(-CTRecombData[nelem][ion][3]*tused));
00819
00820
00821
00822 return( HCTRecom_v );
00823 }
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838
00839
00840
00841
00842
00843
00844
00845
00846
00847
00848
00849
00850
00851
00852 STATIC void MakeHCTData(void)
00853 {
00854 long int i,
00855 j,
00856 nelem,
00857 _r;
00858
00859 DEBUG_ENTRY( "MakeHCTData()" );
00860
00861
00862
00863
00864 for( nelem=0; nelem<LIMELM; ++nelem )
00865 {
00866 for( i=0; i<4; ++i )
00867 {
00868 for( j=0; j<7; ++j )
00869 {
00870 CTIonData[nelem][i][j] = 0.;
00871 CTRecombData[nelem][i][j] = 0.;
00872 }
00873 CTIonData[nelem][i][7] = 0.;
00874 }
00875 }
00876
00877
00878
00879
00880
00881
00882 { static double _itmp0[] = {2.84e-3 , 1.99 , 375.54 , -54.07 , 1e2 , 1e4 , 0.,
00883 -10.};
00884
00885 for( i=1, _r = 0; i <= 8; i++ )
00886 {
00887 CTIonData[2][0][i-1] = _itmp0[_r++];
00888 }
00889 }
00890
00891
00892 { static double _itmp1[] = {1.07e-6 , 3.15 , 176.43 , -4.29 , 1e3 , 1e5 , 0. ,2.34};
00893 for( i=1, _r = 0; i <= 8; i++ )
00894 {
00895 CTIonData[5][0][i-1] = _itmp1[_r++];
00896 }
00897 }
00898 { static double _itmp2[] = {4.55e-3,-0.29,-0.92,-8.38,1e2,5e4,
00899 1.086,-0.94};
00900 for( i=1, _r = 0; i <= 8; i++ )
00901 {
00902 CTIonData[6][0][i-1] = _itmp2[_r++];
00903 }
00904 }
00905
00906 { static double _itmp3[] = {7.40e-2,0.47,24.37,-0.74,1e1,1e4,
00907 0.023,-0.02};
00908 for( i=1, _r = 0; i <= 8; i++ )
00909 {
00910 CTIonData[7][0][i-1] = _itmp3[_r++];
00911 }
00912 }
00913 { static double _itmp4[] = {3.34e-6,9.31,2632.31,-3.04,1e3,
00914 2e4,0.0,-1.74};
00915 for( i=1, _r = 0; i <= 8; i++ )
00916 {
00917 CTIonData[10][0][i-1] = _itmp4[_r++];
00918 }
00919 }
00920 { static double _itmp5[] = {9.76e-3,3.14,55.54,-1.12,5e3,3e4,
00921 0.0,1.52};
00922 for( i=1, _r = 0; i <= 8; i++ )
00923 {
00924 CTIonData[11][0][i-1] = _itmp5[_r++];
00925 }
00926 }
00927 { static double _itmp6[] = {7.60e-5,0.00,-1.97,-4.32,1e4,3e5,
00928 1.670,-1.44};
00929 for( i=1, _r = 0; i <= 8; i++ )
00930 {
00931 CTIonData[11][1][i-1] = _itmp6[_r++];
00932 }
00933 }
00934 { static double _itmp7[] = {0.92,1.15,0.80,-0.24,1e3,2e5,0.0,
00935 0.12};
00936 for( i=1, _r = 0; i <= 8; i++ )
00937 {
00938 CTIonData[13][0][i-1] = _itmp7[_r++];
00939 }
00940 }
00941
00942 { static double _itmp8[] = {2.26 , 7.36e-2 , -0.43 , -0.11 , 2e3 , 1e5 , 3.031
00943 ,-2.72};
00944 for( i=1, _r = 0; i <= 8; i++ )
00945 {
00946 CTIonData[13][1][i-1] = _itmp8[_r++];
00947 }
00948 }
00949 { static double _itmp9[] = {1.00e-5,0.00,0.00,0.00,1e3,1e4,
00950 0.0,-3.24};
00951 for( i=1, _r = 0; i <= 8; i++ )
00952 {
00953 CTIonData[15][0][i-1] = _itmp9[_r++];
00954 }
00955 }
00956 { static double _itmp10[] = {4.39,0.61,-0.89,-3.56,1e3,3e4,
00957 3.349,-2.89};
00958 for( i=1, _r = 0; i <= 8; i++ )
00959 {
00960 CTIonData[23][1][i-1] = _itmp10[_r++];
00961 }
00962 }
00963 { static double _itmp11[] = {2.83e-1,6.80e-3,6.44e-2,-9.70,
00964 1e3,3e4,2.368,-2.04};
00965 for( i=1, _r = 0; i <= 8; i++ )
00966 {
00967 CTIonData[24][1][i-1] = _itmp11[_r++];
00968 }
00969 }
00970 { static double _itmp12[] = {2.10,7.72e-2,-0.41,-7.31,1e4,1e5,
00971 3.005,-2.56};
00972 for( i=1, _r = 0; i <= 8; i++ )
00973 {
00974 CTIonData[25][1][i-1] = _itmp12[_r++];
00975 }
00976 }
00977 { static double _itmp13[] = {1.20e-2,3.49,24.41,-1.26,1e3,3e4,
00978 4.044,-3.49};
00979 for( i=1, _r = 0; i <= 8; i++ )
00980 {
00981 CTIonData[26][1][i-1] = _itmp13[_r++];
00982 }
00983 }
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993
00994 { static double _itmp14[] = {1.87e-6,2.06,9.93,-3.89,6e3,1e5,
00995 10.99};
00996 for( i=1, _r = 0; i <= 7; i++ )
00997 {
00998 CTRecombData[1][0][i-1] = _itmp14[_r++];
00999 }
01000 }
01001 { static double _itmp15[] = {1.00e-5,0.,0.,0.,1e3,1e7,-40.81};
01002 for( i=1, _r = 0; i <= 7; i++ )
01003 {
01004 CTRecombData[1][1][i-1] = _itmp15[_r++];
01005 }
01006 }
01007 for( i=1; i <= 7; i++ )
01008 {
01009 CTRecombData[2][0][i-1] = 0.f;
01010 }
01011 { static double _itmp16[] = {1.26,0.96,3.02,-0.65,1e3,3e4,3.02};
01012 for( i=1, _r = 0; i <= 7; i++ )
01013 {
01014 CTRecombData[2][1][i-1] = _itmp16[_r++];
01015 }
01016 }
01017 { static double _itmp17[] = {1.00e-5,0.,0.,0.,2e3,5e4,-108.83};
01018 for( i=1, _r = 0; i <= 7; i++ )
01019 {
01020 CTRecombData[2][2][i-1] = _itmp17[_r++];
01021 }
01022 }
01023 for( i=1; i <= 7; i++ )
01024 {
01025 CTRecombData[3][0][i-1] = 0.f;
01026 }
01027 { static double _itmp18[] = {1.00e-5,0.,0.,0.,2e3,5e4,-4.61};
01028 for( i=1, _r = 0; i <= 7; i++ )
01029 {
01030 CTRecombData[3][1][i-1] = _itmp18[_r++];
01031 }
01032 }
01033 { static double _itmp19[] = {1.00e-5,0.,0.,0.,2e3,5e4,-140.26};
01034 for( i=1, _r = 0; i <= 7; i++ )
01035 {
01036 CTRecombData[3][2][i-1] = _itmp19[_r++];
01037 }
01038 }
01039 { static double _itmp20[] = {5.17,0.82,-0.69,-1.12,2e3,5e4,
01040 10.59};
01041 for( i=1, _r = 0; i <= 7; i++ )
01042 {
01043 CTRecombData[3][3][i-1] = _itmp20[_r++];
01044 }
01045 }
01046 for( i=1; i <= 7; i++ )
01047 {
01048 CTRecombData[4][0][i-1] = 0.f;
01049 }
01050 { static double _itmp21[] = {2.00e-2,0.,0.,0.,1e3,1e9,2.46};
01051 for( i=1, _r = 0; i <= 7; i++ )
01052 {
01053 CTRecombData[4][1][i-1] = _itmp21[_r++];
01054 }
01055 }
01056 { static double _itmp22[] = {1.00e-5,0.,0.,0.,2e3,5e4,-24.33};
01057 for( i=1, _r = 0; i <= 7; i++ )
01058 {
01059 CTRecombData[4][2][i-1] = _itmp22[_r++];
01060 }
01061 }
01062
01063 { static double _itmp23[] = {2.74 , 0.93 , -0.61 , -1.13 , 2e3 , 5e4 ,
01064 11.};
01065 for( i=1, _r = 0; i <= 7; i++ )
01066 {
01067 CTRecombData[4][3][i-1] = _itmp23[_r++];
01068 }
01069 }
01070
01071 { static double _itmp24[] = {4.88e-7 , 3.25 , -1.12 , -0.21 , 5.5e3 , 1e5 ,
01072 -2.34};
01073 for( i=1, _r = 0; i <= 7; i++ )
01074 {
01075 CTRecombData[5][0][i-1] = _itmp24[_r++];
01076 }
01077 }
01078 { static double _itmp25[] = {1.67e-4,2.79,304.72,-4.07,5e3,
01079 5e4,4.01};
01080 for( i=1, _r = 0; i <= 7; i++ )
01081 {
01082 CTRecombData[5][1][i-1] = _itmp25[_r++];
01083 }
01084 }
01085 { static double _itmp26[] = {3.25,0.21,0.19,-3.29,1e3,1e5,5.73};
01086 for( i=1, _r = 0; i <= 7; i++ )
01087 {
01088 CTRecombData[5][2][i-1] = _itmp26[_r++];
01089 }
01090 }
01091 { static double _itmp27[] = {332.46,-0.11,-9.95e-1,-1.58e-3,
01092 1e1,1e5,11.30};
01093 for( i=1, _r = 0; i <= 7; i++ )
01094 {
01095 CTRecombData[5][3][i-1] = _itmp27[_r++];
01096 }
01097 }
01098 { static double _itmp28[] = {1.01e-3,-0.29,-0.92,-8.38,1e2,
01099 5e4,0.94};
01100 for( i=1, _r = 0; i <= 7; i++ )
01101 {
01102 CTRecombData[6][0][i-1] = _itmp28[_r++];
01103 }
01104 }
01105 { static double _itmp29[] = {3.05e-1,0.60,2.65,-0.93,1e3,1e5,
01106 4.56};
01107 for( i=1, _r = 0; i <= 7; i++ )
01108 {
01109 CTRecombData[6][1][i-1] = _itmp29[_r++];
01110 }
01111 }
01112 { static double _itmp30[] = {4.54,0.57,-0.65,-0.89,1e1,1e5,
01113 6.40};
01114 for( i=1, _r = 0; i <= 7; i++ )
01115 {
01116 CTRecombData[6][2][i-1] = _itmp30[_r++];
01117 }
01118 }
01119
01120 { static double _itmp31[] = { 2.95 , 0.55 , -0.39 , -1.07 , 1e3 , 1e6 ,
01121 11.};
01122 for( i=1, _r = 0; i <= 7; i++ )
01123 {
01124 CTRecombData[6][3][i-1] = _itmp31[_r++];
01125 }
01126 }
01127 { static double _itmp32[] = {1.04,3.15e-2,-0.61,-9.73,1e1,1e4,
01128 0.02};
01129 for( i=1, _r = 0; i <= 7; i++ )
01130 {
01131 CTRecombData[7][0][i-1] = _itmp32[_r++];
01132 }
01133 }
01134 { static double _itmp33[] = {1.04,0.27,2.02,-5.92,1e2,1e5,6.65};
01135 for( i=1, _r = 0; i <= 7; i++ )
01136 {
01137 CTRecombData[7][1][i-1] = _itmp33[_r++];
01138 }
01139 }
01140 { static double _itmp34[] = {3.98,0.26,0.56,-2.62,1e3,5e4,5.};
01141 for( i=1, _r = 0; i <= 7; i++ )
01142 {
01143 CTRecombData[7][2][i-1] = _itmp34[_r++];
01144 }
01145 }
01146 { static double _itmp35[] = {2.52e-1,0.63,2.08,-4.16,1e3,3e4,
01147 8.47};
01148 for( i=1, _r = 0; i <= 7; i++ )
01149 {
01150 CTRecombData[7][3][i-1] = _itmp35[_r++];
01151 }
01152 }
01153 for( i=1; i <= 7; i++ )
01154 {
01155 CTRecombData[8][0][i-1] = 0.f;
01156 }
01157 { static double _itmp36[] = {1.00e-5,0.,0.,0.,2e3,5e4,-21.37};
01158 for( i=1, _r = 0; i <= 7; i++ )
01159 {
01160 CTRecombData[8][1][i-1] = _itmp36[_r++];
01161 }
01162 }
01163 { static double _itmp37[] = {9.86,0.29,-0.21,-1.15,2e3,5e4,
01164 5.6};
01165 for( i=1, _r = 0; i <= 7; i++ )
01166 {
01167 CTRecombData[8][2][i-1] = _itmp37[_r++];
01168 }
01169 }
01170 { static double _itmp38[] = {7.15e-1,1.21,-0.70,-0.85,2e3,5e4,
01171 11.8};
01172 for( i=1, _r = 0; i <= 7; i++ )
01173 {
01174 CTRecombData[8][3][i-1] = _itmp38[_r++];
01175 }
01176 }
01177 for( i=1; i <= 7; i++ )
01178 {
01179 CTRecombData[9][0][i-1] = 0.f;
01180 }
01181 { static double _itmp39[] = {1.00e-5,0.,0.,0.,5e3,5e4,-27.36};
01182 for( i=1, _r = 0; i <= 7; i++ )
01183 {
01184 CTRecombData[9][1][i-1] = _itmp39[_r++];
01185 }
01186 }
01187 { static double _itmp40[] = {14.73,4.52e-2,-0.84,-0.31,5e3,
01188 5e4,5.82};
01189 for( i=1, _r = 0; i <= 7; i++ )
01190 {
01191 CTRecombData[9][2][i-1] = _itmp40[_r++];
01192 }
01193 }
01194 { static double _itmp41[] = {6.47,0.54,3.59,-5.22,1e3,3e4,8.60};
01195 for( i=1, _r = 0; i <= 7; i++ )
01196 {
01197 CTRecombData[9][3][i-1] = _itmp41[_r++];
01198 }
01199 }
01200 for( i=1; i <= 7; i++ )
01201 {
01202 CTRecombData[10][0][i-1] = 0.f;
01203 }
01204 { static double _itmp42[] = {1.00e-5,0.,0.,0.,2e3,5e4,-33.68};
01205 for( i=1, _r = 0; i <= 7; i++ )
01206 {
01207 CTRecombData[10][1][i-1] = _itmp42[_r++];
01208 }
01209 }
01210 { static double _itmp43[] = {1.33,1.15,1.20,-0.32,2e3,5e4,6.25};
01211 for( i=1, _r = 0; i <= 7; i++ )
01212 {
01213 CTRecombData[10][2][i-1] = _itmp43[_r++];
01214 }
01215 }
01216 { static double _itmp44[] = {1.01e-1,1.34,10.05,-6.41,2e3,5e4,
01217 11.};
01218 for( i=1, _r = 0; i <= 7; i++ )
01219 {
01220 CTRecombData[10][3][i-1] = _itmp44[_r++];
01221 }
01222 }
01223 for( i=1; i <= 7; i++ )
01224 {
01225 CTRecombData[11][0][i-1] = 0.f;
01226 }
01227 { static double _itmp45[] = {8.58e-5,2.49e-3,2.93e-2,-4.33,
01228 1e3,3e4,1.44};
01229 for( i=1, _r = 0; i <= 7; i++ )
01230 {
01231 CTRecombData[11][1][i-1] = _itmp45[_r++];
01232 }
01233 }
01234 { static double _itmp46[] = {6.49,0.53,2.82,-7.63,1e3,3e4,5.73};
01235 for( i=1, _r = 0; i <= 7; i++ )
01236 {
01237 CTRecombData[11][2][i-1] = _itmp46[_r++];
01238 }
01239 }
01240 { static double _itmp47[] = {6.36,0.55,3.86,-5.19,1e3,3e4,8.60};
01241 for( i=1, _r = 0; i <= 7; i++ )
01242 {
01243 CTRecombData[11][3][i-1] = _itmp47[_r++];
01244 }
01245 }
01246 for( i=1; i <= 7; i++ )
01247 {
01248 CTRecombData[12][0][i-1] = 0.f;
01249 }
01250 { static double _itmp48[] = {1.00e-5,0.,0.,0.,1e3,3e4,-5.23};
01251 for( i=1, _r = 0; i <= 7; i++ )
01252 {
01253 CTRecombData[12][1][i-1] = _itmp48[_r++];
01254 }
01255 }
01256 { static double _itmp49[] = {7.11e-5,4.12,1.72e4,-22.24,1e3,
01257 3e4,8.17};
01258 for( i=1, _r = 0; i <= 7; i++ )
01259 {
01260 CTRecombData[12][2][i-1] = _itmp49[_r++];
01261 }
01262 }
01263 { static double _itmp50[] = {7.52e-1,0.77,6.24,-5.67,1e3,3e4,
01264 8.};
01265 for( i=1, _r = 0; i <= 7; i++ )
01266 {
01267 CTRecombData[12][3][i-1] = _itmp50[_r++];
01268 }
01269 }
01270 for( i=1; i <= 7; i++ )
01271 {
01272 CTRecombData[13][0][i-1] = 0.f;
01273 }
01274
01275 { static double _itmp51[] = {6.77 , 7.36e-2 , -0.43 , -0.11 , 5e2 , 1e5 ,
01276 2.72};
01277 for( i=1, _r = 0; i <= 7; i++ )
01278 {
01279 CTRecombData[13][1][i-1] = _itmp51[_r++];
01280 }
01281 }
01282 { static double _itmp52[] = {4.90e-1,-8.74e-2,-0.36,-0.79,1e3,
01283 3e4,4.23};
01284 for( i=1, _r = 0; i <= 7; i++ )
01285 {
01286 CTRecombData[13][2][i-1] = _itmp52[_r++];
01287 }
01288 }
01289 { static double _itmp53[] = {7.58,0.37,1.06,-4.09,1e3,5e4,7.49};
01290 for( i=1, _r = 0; i <= 7; i++ )
01291 {
01292 CTRecombData[13][3][i-1] = _itmp53[_r++];
01293 }
01294 }
01295 for( i=1; i <= 7; i++ )
01296 {
01297 CTRecombData[14][0][i-1] = 0.f;
01298 }
01299 { static double _itmp54[] = {1.74e-4,3.84,36.06,-0.97,1e3,3e4,
01300 3.45};
01301 for( i=1, _r = 0; i <= 7; i++ )
01302 {
01303 CTRecombData[14][1][i-1] = _itmp54[_r++];
01304 }
01305 }
01306 { static double _itmp55[] = {9.46e-2,-5.58e-2,0.77,-6.43,1e3,
01307 3e4,7.29};
01308 for( i=1, _r = 0; i <= 7; i++ )
01309 {
01310 CTRecombData[14][2][i-1] = _itmp55[_r++];
01311 }
01312 }
01313 { static double _itmp56[] = {5.37,0.47,2.21,-8.52,1e3,3e4,9.71};
01314 for( i=1, _r = 0; i <= 7; i++ )
01315 {
01316 CTRecombData[14][3][i-1] = _itmp56[_r++];
01317 }
01318 }
01319 { static double _itmp57[] = {3.82e-7,11.10,2.57e4,-8.22,1e3,
01320 1e4,-3.24};
01321 for( i=1, _r = 0; i <= 7; i++ )
01322 {
01323 CTRecombData[15][0][i-1] = _itmp57[_r++];
01324 }
01325 }
01326 { static double _itmp58[] = {1.00e-5,0.,0.,0.,1e3,3e4,-9.73};
01327 for( i=1, _r = 0; i <= 7; i++ )
01328 {
01329 CTRecombData[15][1][i-1] = _itmp58[_r++];
01330 }
01331 }
01332 { static double _itmp59[] = {2.29,4.02e-2,1.59,-6.06,1e3,3e4,
01333 5.73};
01334 for( i=1, _r = 0; i <= 7; i++ )
01335 {
01336 CTRecombData[15][2][i-1] = _itmp59[_r++];
01337 }
01338 }
01339 { static double _itmp60[] = {6.44,0.13,2.69,-5.69,1e3,3e4,8.60};
01340 for( i=1, _r = 0; i <= 7; i++ )
01341 {
01342 CTRecombData[15][3][i-1] = _itmp60[_r++];
01343 }
01344 }
01345 for( i=1; i <= 7; i++ )
01346 {
01347 CTRecombData[16][0][i-1] = 0.f;
01348 }
01349 { static double _itmp61[] = {1.00e-5,0.,0.,0.,1e3,3e4,-10.21};
01350 for( i=1, _r = 0; i <= 7; i++ )
01351 {
01352 CTRecombData[16][1][i-1] = _itmp61[_r++];
01353 }
01354 }
01355 { static double _itmp62[] = {1.88,0.32,1.77,-5.70,1e3,3e4,8.};
01356 for( i=1, _r = 0; i <= 7; i++ )
01357 {
01358 CTRecombData[16][2][i-1] = _itmp62[_r++];
01359 }
01360 }
01361 { static double _itmp63[] = {7.27,0.29,1.04,-10.14,1e3,3e4,
01362 9.};
01363 for( i=1, _r = 0; i <= 7; i++ )
01364 {
01365 CTRecombData[16][3][i-1] = _itmp63[_r++];
01366 }
01367 }
01368 for( i=1; i <= 7; i++ )
01369 {
01370 CTRecombData[17][0][i-1] = 0.f;
01371 }
01372 { static double _itmp64[] = {1.00e-5,0.,0.,0.,1e3,3e4,-14.03};
01373 for( i=1, _r = 0; i <= 7; i++ )
01374 {
01375 CTRecombData[17][1][i-1] = _itmp64[_r++];
01376 }
01377 }
01378 { static double _itmp65[] = {4.57,0.27,-0.18,-1.57,1e3,3e4,
01379 5.73};
01380 for( i=1, _r = 0; i <= 7; i++ )
01381 {
01382 CTRecombData[17][2][i-1] = _itmp65[_r++];
01383 }
01384 }
01385 { static double _itmp66[] = {6.37,0.85,10.21,-6.22,1e3,3e4,
01386 8.60};
01387 for( i=1, _r = 0; i <= 7; i++ )
01388 {
01389 CTRecombData[17][3][i-1] = _itmp66[_r++];
01390 }
01391 }
01392 for( i=1; i <= 7; i++ )
01393 {
01394 CTRecombData[18][0][i-1] = 0.f;
01395 }
01396 { static double _itmp67[] = {1.00e-5,0.,0.,0.,1e3,3e4,-18.02};
01397 for( i=1, _r = 0; i <= 7; i++ )
01398 {
01399 CTRecombData[18][1][i-1] = _itmp67[_r++];
01400 }
01401 }
01402 { static double _itmp68[] = {4.76,0.44,-0.56,-0.88,1e3,3e4,
01403 6.};
01404 for( i=1, _r = 0; i <= 7; i++ )
01405 {
01406 CTRecombData[18][2][i-1] = _itmp68[_r++];
01407 }
01408 }
01409 { static double _itmp69[] = {1.00e-5,0.,0.,0.,1e3,3e4,-47.3};
01410 for( i=1, _r = 0; i <= 7; i++ )
01411 {
01412 CTRecombData[18][3][i-1] = _itmp69[_r++];
01413 }
01414 }
01415 for( i=1; i <= 7; i++ )
01416 {
01417 CTRecombData[19][0][i-1] = 0.f;
01418 }
01419 { static double _itmp70[] = {0.,0.,0.,0.,1e1,1e9,0.};
01420 for( i=1, _r = 0; i <= 7; i++ )
01421 {
01422 CTRecombData[19][1][i-1] = _itmp70[_r++];
01423 }
01424 }
01425 { static double _itmp71[] = {3.17e-2,2.12,12.06,-0.40,1e3,3e4,
01426 6.6};
01427 for( i=1, _r = 0; i <= 7; i++ )
01428 {
01429 CTRecombData[19][2][i-1] = _itmp71[_r++];
01430 }
01431 }
01432 { static double _itmp72[] = {2.68,0.69,-0.68,-4.47,1e3,3e4,
01433 9.9};
01434 for( i=1, _r = 0; i <= 7; i++ )
01435 {
01436 CTRecombData[19][3][i-1] = _itmp72[_r++];
01437 }
01438 }
01439 for( i=1; i <= 7; i++ )
01440 {
01441 CTRecombData[20][0][i-1] = 0.f;
01442 }
01443 { static double _itmp73[] = {0.,0.,0.,0.,1e1,1e9,0.};
01444 for( i=1, _r = 0; i <= 7; i++ )
01445 {
01446 CTRecombData[20][1][i-1] = _itmp73[_r++];
01447 }
01448 }
01449 { static double _itmp74[] = {7.22e-3,2.34,411.50,-13.24,1e3,
01450 3e4,3.5};
01451 for( i=1, _r = 0; i <= 7; i++ )
01452 {
01453 CTRecombData[20][2][i-1] = _itmp74[_r++];
01454 }
01455 }
01456 { static double _itmp75[] = {1.20e-1,1.48,4.00,-9.33,1e3,3e4,
01457 10.61};
01458 for( i=1, _r = 0; i <= 7; i++ )
01459 {
01460 CTRecombData[20][3][i-1] = _itmp75[_r++];
01461 }
01462 }
01463 for( i=1; i <= 7; i++ )
01464 {
01465 CTRecombData[21][0][i-1] = 0.f;
01466 }
01467 { static double _itmp76[] = {0.,0.,0.,0.,1e1,1e9,0.};
01468 for( i=1, _r = 0; i <= 7; i++ )
01469 {
01470 CTRecombData[21][1][i-1] = _itmp76[_r++];
01471 }
01472 }
01473 { static double _itmp77[] = {6.34e-1,6.87e-3,0.18,-8.04,1e3,
01474 3e4,4.3};
01475 for( i=1, _r = 0; i <= 7; i++ )
01476 {
01477 CTRecombData[21][2][i-1] = _itmp77[_r++];
01478 }
01479 }
01480 { static double _itmp78[] = {4.37e-3,1.25,40.02,-8.05,1e3,3e4,
01481 5.3};
01482 for( i=1, _r = 0; i <= 7; i++ )
01483 {
01484 CTRecombData[21][3][i-1] = _itmp78[_r++];
01485 }
01486 }
01487 for( i=1; i <= 7; i++ )
01488 {
01489 CTRecombData[22][0][i-1] = 0.f;
01490 }
01491 { static double _itmp79[] = {1.00e-5,0.,0.,0.,1e3,3e4,-1.05};
01492 for( i=1, _r = 0; i <= 7; i++ )
01493 {
01494 CTRecombData[22][1][i-1] = _itmp79[_r++];
01495 }
01496 }
01497 { static double _itmp80[] = {5.12,-2.18e-2,-0.24,-0.83,1e3,
01498 3e4,4.7};
01499 for( i=1, _r = 0; i <= 7; i++ )
01500 {
01501 CTRecombData[22][2][i-1] = _itmp80[_r++];
01502 }
01503 }
01504 { static double _itmp81[] = {1.96e-1,-8.53e-3,0.28,-6.46,1e3,
01505 3e4,6.2};
01506 for( i=1, _r = 0; i <= 7; i++ )
01507 {
01508 CTRecombData[22][3][i-1] = _itmp81[_r++];
01509 }
01510 }
01511 for( i=1; i <= 7; i++ )
01512 {
01513 CTRecombData[23][0][i-1] = 0.f;
01514 }
01515 { static double _itmp82[] = {5.27e-1,0.61,-0.89,-3.56,1e3,3e4,
01516 2.89};
01517 for( i=1, _r = 0; i <= 7; i++ )
01518 {
01519 CTRecombData[23][1][i-1] = _itmp82[_r++];
01520 }
01521 }
01522 { static double _itmp83[] = {10.90,0.24,0.26,-11.94,1e3,3e4,
01523 5.4};
01524 for( i=1, _r = 0; i <= 7; i++ )
01525 {
01526 CTRecombData[23][2][i-1] = _itmp83[_r++];
01527 }
01528 }
01529 { static double _itmp84[] = {1.18,0.20,0.77,-7.09,1e3,3e4,6.6};
01530 for( i=1, _r = 0; i <= 7; i++ )
01531 {
01532 CTRecombData[23][3][i-1] = _itmp84[_r++];
01533 }
01534 }
01535 for( i=1; i <= 7; i++ )
01536 {
01537 CTRecombData[24][0][i-1] = 0.f;
01538 }
01539 { static double _itmp85[] = {1.65e-1,6.80e-3,6.44e-2,-9.70,
01540 1e3,3e4,2.04};
01541 for( i=1, _r = 0; i <= 7; i++ )
01542 {
01543 CTRecombData[24][1][i-1] = _itmp85[_r++];
01544 }
01545 }
01546 { static double _itmp86[] = {14.20,0.34,-0.41,-1.19,1e3,3e4,
01547 6.};
01548 for( i=1, _r = 0; i <= 7; i++ )
01549 {
01550 CTRecombData[24][2][i-1] = _itmp86[_r++];
01551 }
01552 }
01553 { static double _itmp87[] = {4.43e-1,0.91,10.76,-7.49,1e3,3e4,
01554 7.};
01555 for( i=1, _r = 0; i <= 7; i++ )
01556 {
01557 CTRecombData[24][3][i-1] = _itmp87[_r++];
01558 }
01559 }
01560 for( i=1; i <= 7; i++ )
01561 {
01562 CTRecombData[25][0][i-1] = 0.f;
01563 }
01564 { static double _itmp88[] = {1.26,7.72e-2,-0.41,-7.31,1e3,1e5,
01565 2.56};
01566 for( i=1, _r = 0; i <= 7; i++ )
01567 {
01568 CTRecombData[25][1][i-1] = _itmp88[_r++];
01569 }
01570 }
01571 { static double _itmp89[] = {3.42,0.51,-2.06,-8.99,1e3,1e5,
01572 6.3};
01573 for( i=1, _r = 0; i <= 7; i++ )
01574 {
01575 CTRecombData[25][2][i-1] = _itmp89[_r++];
01576 }
01577 }
01578 { static double _itmp90[] = {14.60,3.57e-2,-0.92,-0.37,1e3,
01579 3e4,10.};
01580 for( i=1, _r = 0; i <= 7; i++ )
01581 {
01582 CTRecombData[25][3][i-1] = _itmp90[_r++];
01583 }
01584 }
01585 for( i=1; i <= 7; i++ )
01586 {
01587 CTRecombData[26][0][i-1] = 0.f;
01588 }
01589 { static double _itmp91[] = {5.30,0.24,-0.91,-0.47,1e3,3e4,
01590 2.9};
01591 for( i=1, _r = 0; i <= 7; i++ )
01592 {
01593 CTRecombData[26][1][i-1] = _itmp91[_r++];
01594 }
01595 }
01596 { static double _itmp92[] = {3.26,0.87,2.85,-9.23,1e3,3e4,6.};
01597 for( i=1, _r = 0; i <= 7; i++ )
01598 {
01599 CTRecombData[26][2][i-1] = _itmp92[_r++];
01600 }
01601 }
01602 { static double _itmp93[] = {1.03,0.58,-0.89,-0.66,1e3,3e4,
01603 10.51};
01604 for( i=1, _r = 0; i <= 7; i++ )
01605 {
01606 CTRecombData[26][3][i-1] = _itmp93[_r++];
01607 }
01608 }
01609 for( i=1; i <= 7; i++ )
01610 {
01611 CTRecombData[27][0][i-1] = 0.f;
01612 }
01613 { static double _itmp94[] = {1.05,1.28,6.54,-1.81,1e3,1e5,3.0};
01614 for( i=1, _r = 0; i <= 7; i++ )
01615 {
01616 CTRecombData[27][1][i-1] = _itmp94[_r++];
01617 }
01618 }
01619 { static double _itmp95[] = {9.73,0.35,0.90,-5.33,1e3,3e4,5.2};
01620 for( i=1, _r = 0; i <= 7; i++ )
01621 {
01622 CTRecombData[27][2][i-1] = _itmp95[_r++];
01623 }
01624 }
01625 { static double _itmp96[] = {6.14,0.25,-0.91,-0.42,1e3,3e4,
01626 10.};
01627 for( i=1, _r = 0; i <= 7; i++ )
01628 {
01629 CTRecombData[27][3][i-1] = _itmp96[_r++];
01630 }
01631 }
01632 for( i=1; i <= 7; i++ )
01633 {
01634 CTRecombData[28][0][i-1] = 0.f;
01635 }
01636 { static double _itmp97[] = {1.47e-3,3.51,23.91,-0.93,1e3,3e4,
01637 3.44};
01638 for( i=1, _r = 0; i <= 7; i++ )
01639 {
01640 CTRecombData[28][1][i-1] = _itmp97[_r++];
01641 }
01642 }
01643 { static double _itmp98[] = {9.26,0.37,0.40,-10.73,1e3,3e4,
01644 5.6};
01645 for( i=1, _r = 0; i <= 7; i++ )
01646 {
01647 CTRecombData[28][2][i-1] = _itmp98[_r++];
01648 }
01649 }
01650 { static double _itmp99[] = {11.59,0.20,0.80,-6.62,1e3,3e4,
01651 9.};
01652 for( i=1, _r = 0; i <= 7; i++ )
01653 {
01654 CTRecombData[28][3][i-1] = _itmp99[_r++];
01655 }
01656 }
01657 for( i=1; i <= 7; i++ )
01658 {
01659 CTRecombData[29][0][i-1] = 0.f;
01660 }
01661 { static double _itmp100[] = {1.00e-5,0.,0.,0.,1e3,3e4,-4.37};
01662 for( i=1, _r = 0; i <= 7; i++ )
01663 {
01664 CTRecombData[29][1][i-1] = _itmp100[_r++];
01665 }
01666 }
01667 { static double _itmp101[] = {6.96e-4,4.24,26.06,-1.24,1e3,
01668 3e4,7.8};
01669 for( i=1, _r = 0; i <= 7; i++ )
01670 {
01671 CTRecombData[29][2][i-1] = _itmp101[_r++];
01672 }
01673 }
01674 { static double _itmp102[] = {1.33e-2,1.56,-0.92,-1.20,1e3,
01675 3e4,11.73};
01676 for( i=1, _r = 0; i <= 7; i++ )
01677 {
01678 CTRecombData[29][3][i-1] = _itmp102[_r++];
01679 }
01680 }
01681 }
01682
01683
01684 void ChargTranPun( FILE* ipPnunit , char* chPunch )
01685 {
01686 long int j, jj;
01687
01688 double TempSave = phycon.te;
01689
01690 DEBUG_ENTRY( "ChargTranPun()" );
01691
01692
01693 if( strcmp( chPunch,"CHAR") == 0 )
01694 {
01695
01696
01697
01698
01699
01700
01701
01702 fprintf( ipPnunit, "#element\tion\n");
01703 for( j=1; j < LIMELM; j++ )
01704 {
01705
01706
01707 fprintf( ipPnunit, "%s\t", elementnames.chElementSym[j] );
01708
01709
01710 for( jj=0; jj < j; jj++ )
01711 {
01712 fprintf( ipPnunit, "%.2e\t",
01713 HCTRecom(jj,j) );
01714 }
01715 fprintf( ipPnunit, "\n" );
01716 }
01717
01718
01719
01720 fprintf( ipPnunit, "\n#ionization rates, atomic number\n");
01721 for( j=1; j < LIMELM; j++ )
01722 {
01723 fprintf( ipPnunit, "%s\t", elementnames.chElementSym[j] );
01724 for( jj=0; jj < j; jj++ )
01725 {
01726 fprintf( ipPnunit, "%.2e\t",
01727 HCTIon(jj,j) );
01728 }
01729 fprintf( ipPnunit, "\n" );
01730 }
01731 }
01732
01733
01734
01735 else if( strcmp( chPunch,"CHAG") == 0 )
01736 {
01737
01738 double BreakEnergy = 100./13.0;
01739 double OHRate;
01740 realnum teinit = 5000.;
01741 realnum tefinal = 20000.;
01742 realnum te1;
01743 long int nelem, ion;
01744
01745 te1 = teinit;
01746 fprintf(ipPnunit,"H ioniz\n X+i\\Te");
01747 while( te1 <= tefinal )
01748 {
01749 fprintf(ipPnunit,"\t%.0f K",te1);
01750 te1 *= 2.;
01751 }
01752 fprintf(ipPnunit,"\n");
01753
01754
01755 ChargTranEval(&OHRate);
01756
01757
01758 for( nelem=ipHELIUM; nelem<LIMELM; ++nelem )
01759 {
01760
01761 if( abund.lgAGN[nelem] )
01762 {
01763 for( ion=0; ion<=nelem; ++ion )
01764 {
01765
01766 if( Heavy.Valence_IP_Ryd[nelem][ion] > BreakEnergy )
01767 break;
01768
01769 if( atmdat.HCharExcIonOf[nelem][ion] == 0 )
01770 continue;
01771
01772
01773 fprintf(ipPnunit,"%s",
01774 elementnames.chElementSym[nelem]);
01775
01776 if( ion==0 )
01777 {
01778 fprintf(ipPnunit,"0 ");
01779 }
01780 else if( ion==1 )
01781 {
01782 fprintf(ipPnunit,"+ ");
01783 }
01784 else
01785 {
01786 fprintf(ipPnunit,"+%li",ion);
01787 }
01788
01789
01790 TempChange(teinit , false);
01791
01792 while( phycon.te <= tefinal )
01793 {
01794 dense.IonLow[nelem] = 0;
01795 dense.IonHigh[nelem] = nelem+1;
01796 ChargTranEval(&OHRate);
01797
01798 fprintf(ipPnunit,"\t%.2e",atmdat.HCharExcIonOf[nelem][ion]);
01799 TempChange(phycon.te *2.f , false);
01800 }
01801 fprintf(ipPnunit,"\n");
01802 }
01803 fprintf(ipPnunit,"\n");
01804 }
01805 }
01806
01807 te1 = teinit;
01808 fprintf(ipPnunit,"H recom\n X+i\\Te");
01809 while( te1 <= tefinal )
01810 {
01811 fprintf(ipPnunit,"\t%.0f K",te1);
01812 te1 *= 2.;
01813 }
01814 fprintf(ipPnunit,"\n");
01815
01816
01817 for( nelem=ipHELIUM; nelem<LIMELM; ++nelem )
01818 {
01819
01820 if( abund.lgAGN[nelem] )
01821 {
01822 for( ion=0; ion<=nelem; ++ion )
01823 {
01824
01825 if( Heavy.Valence_IP_Ryd[nelem][ion] > BreakEnergy )
01826 break;
01827
01828 if( atmdat.HCharExcRecTo[nelem][ion] == 0 )
01829 continue;
01830
01831
01832 fprintf(ipPnunit,"%s",
01833 elementnames.chElementSym[nelem]);
01834
01835 if( ion==0 )
01836 {
01837 fprintf(ipPnunit,"0 ");
01838 }
01839 else if( ion==1 )
01840 {
01841 fprintf(ipPnunit,"+ ");
01842 }
01843 else
01844 {
01845 fprintf(ipPnunit,"+%li",ion);
01846 }
01847
01848
01849 TempChange(teinit , false);
01850 while( phycon.te <= tefinal )
01851 {
01852 dense.IonLow[nelem] = 0;
01853 dense.IonHigh[nelem] = nelem+1;
01854 ChargTranEval(&OHRate);
01855
01856 fprintf(ipPnunit,"\t%.2e",atmdat.HCharExcRecTo[nelem][ion]);
01857 TempChange(phycon.te *2.f , false);
01858 }
01859 fprintf(ipPnunit,"\n");
01860 }
01861 fprintf(ipPnunit,"\n");
01862 }
01863 }
01864
01865 # if 0
01866 te1 = teinit;
01867 fprintf(ipPnunit,"He recom\n Elem\\Te");
01868 while( te1 <= tefinal )
01869 {
01870 fprintf(ipPnunit,"\t%.0f",te1);
01871 te1 *= 2.;
01872 }
01873 fprintf(ipPnunit,"\n");
01874
01875
01876 for( nelem=ipHELIUM; nelem<LIMELM; ++nelem )
01877 {
01878
01879 if( abund.lgAGN[nelem] )
01880 {
01881 for( ion=0; ion<=nelem; ++ion )
01882 {
01883
01884 if( atmdat.HeCharExcRecTo[nelem][ion] == 0 )
01885 continue;
01886 fprintf(ipPnunit,"%.2s%.2s",
01887 elementnames.chElementSym[nelem],
01888 elementnames.chIonStage[ion]);
01889
01890
01891 TempChange(teinit , false);
01892 while( phycon.te <= tefinal )
01893 {
01894 dense.IonLow[nelem] = 0;
01895 dense.IonHigh[nelem] = nelem+1;
01896 ChargTranEval();
01897
01898 fprintf(ipPnunit,"\t%.2e",atmdat.HeCharExcRecTo[nelem][ion]);
01899 TempChange(phycon.te *2.fprintf , false);
01900 }
01901 fprintf(ipPnunit,"\n");
01902 }
01903 fprintf(ipPnunit,"\n");
01904 }
01905 }
01906
01907
01908 te1 = teinit;
01909 fprintf(ipPnunit,"He ioniz\n Elem\\Te");
01910 while( te1 <= tefinal )
01911 {
01912 fprintf(ipPnunit,"\t%.0f",te1);
01913 te1 *= 2.;
01914 }
01915 fprintf(ipPnunit,"\n");
01916
01917
01918 for( nelem=ipHELIUM; nelem<LIMELM; ++nelem )
01919 {
01920
01921 if( abund.lgAGN[nelem] )
01922 {
01923 for( ion=0; ion<=nelem; ++ion )
01924 {
01925
01926 if( atmdat.HeCharExcIonOf[nelem][ion] == 0 )
01927 continue;
01928 fprintf(ipPnunit,"%.2s%.2s",
01929 elementnames.chElementSym[nelem],
01930 elementnames.chIonStage[ion]);
01931
01932
01933 TempChange(teinit , false);
01934 while( phycon.te <= tefinal )
01935 {
01936 dense.IonLow[nelem] = 0;
01937 dense.IonHigh[nelem] = nelem+1;
01938 ChargTranEval();
01939
01940 fprintf(ipPnunit,"\t%.2e",atmdat.HeCharExcIonOf[nelem][ion]);
01941 TempChange(phycon.te*2.f , true);
01942 }
01943 fprintf(ipPnunit,"\n");
01944 }
01945 fprintf(ipPnunit,"\n");
01946 }
01947 }
01948 # endif
01949 }
01950 else
01951 {
01952 fprintf( ioQQQ, " punch charge keyword insane\n" );
01953 cdEXIT(EXIT_FAILURE);
01954 }
01955
01956 TempChange(TempSave , false);
01957 return;
01958 }