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