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