00001
00002
00003
00004 #include "cddefines.h"
00005 #include "coolheavy.h"
00006 #include "dense.h"
00007 #include "taulines.h"
00008 #include "h2.h"
00009 #include "phycon.h"
00010 #include "embesq.h"
00011 #include "hmi.h"
00012 #include "oxy.h"
00013 #include "colden.h"
00014 #include "mole.h"
00015 #include "ligbar.h"
00016 #include "thermal.h"
00017 #include "lines_service.h"
00018 #include "atoms.h"
00019 #include "cooling.h"
00020
00021
00022
00023
00024
00025
00026
00027
00028 static void oi3Pcs(double *cs21,
00029 double *cs20,
00030 double *cs10);
00031
00032 void CoolOxyg(void)
00033 {
00034 double a21,
00035 a31,
00036 a32,
00037 a41,
00038 a42,
00039 a43,
00040 a51,
00041 a52,
00042 a53,
00043 a54,
00044 a6300,
00045 a6363,
00046 aeff,
00047 cs,
00048 cs2s2p,
00049 cs2s3p ,
00050 cs01,
00051 cs02,
00052 cs12,
00053 cs13,
00054 cs21,
00055 cs23,
00056 cs31,
00057 cs32,
00058 cs41,
00059 cs42,
00060 cs43,
00061 cs51,
00062 cs52,
00063 cs53,
00064 cs54,
00065 Te_bounded,
00066 Te_bounded_log ,
00067 o3cs23,
00068 p[5],
00069 r12 ,
00070 r13,
00071 pump_rate;
00072
00073
00074
00075 double cse01=-1.,cse12=-1.,cse02 =-1.,
00076 csh01=-1.,cshe01=-1.,csh201=-1.,csh12=-1.,cshe12=-1.,csh212=-1.,csh02=-1.,cshe02=-1.,csh202 =-1.,
00077 csh2o01=-1.,csh2o02=-1.,csh2o12=-1.,csh2p01=-1.,csh2p02=-1.,csh2p12=-1.,csp01=-1.,csp02=-1.,
00078 csp12=-1.;
00079 static double go2[5]={4.,6.,4.,4.,2.};
00080 static double exo2[4]={26808.4,21.0,13637.5,1.5};
00081
00082
00083 static double oi_cs_tsave=-1. , oi_te_tsave=-1. , oi_dcdt_tsave=-1.;
00084 long int i;
00085 static bool lgFirst=true;
00086 static long int *ipO4Pump=NULL,
00087 nO4Pump=0;
00088 double rate_OH_dissoc;
00089
00090 DEBUG_ENTRY( "CoolOxyg()" );
00091
00092
00093 atom_oi_calc(&CoolHeavy.coolOi);
00094 CoolAdd("o 1",8446,CoolHeavy.coolOi);
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106 # if 0
00107 cs12 = 2.68e-5*phycon.te*(1. + 1.67e-6*phycon.te - 2.95e-10*phycon.te*
00108 phycon.te);
00109 cs12 = MAX2(0.1,cs12);
00110 # endif
00111
00112
00113
00114 if(phycon.te < 8E3)
00115 {
00116 cs12 = (4E-08)*(phycon.te*phycon.te70*phycon.te05);
00117 }
00118 else if(phycon.te < 2E4)
00119 {
00120 cs12 = (4.630155E-05)*((phycon.te/phycon.te04)*phycon.te005*phycon.te0001);
00121 }
00122 else
00123 {
00124
00125 cs12 = (1.5394E-03)*(phycon.sqrte*phycon.te10*phycon.te01*phycon.te001*phycon.te0003);
00126 }
00127
00128
00129 {
00130
00131
00132
00133
00134 double te_scale = phycon.te / 6000.;
00135 double rate_H0 = (1.74*te_scale + 0.6)*1e-12*sexp(0.47*te_scale) / sqrt(te_scale ) *
00136 dense.xIonDense[ipHYDROGEN][0];
00137
00138 cs12 += ConvRate2CS( 5.f , (float)rate_H0 );
00139
00140 }
00141
00142
00143
00144 if(phycon.te < 5E3)
00145 {
00146 cs23 = (7E-08)*(phycon.te*phycon.sqrte*phycon.te10*phycon.te007*phycon.te0001);
00147 }
00148 else if(phycon.te<2E4)
00149 {
00150 cs23 = (1.98479e-04)*((phycon.te70/phycon.te03)*phycon.te003*phycon.te0007);
00151 }
00152 else
00153 {
00154 cs23 = (9.31E-04)*(phycon.sqrte*phycon.te01*phycon.te007*phycon.te0005*phycon.te0001);
00155 }
00156
00157
00158
00159
00160 if(phycon.te < 2E4)
00161 {
00162 cs13 = (2E-05)*(phycon.sqrte*phycon.te30*phycon.te05*phycon.te01*(phycon.te004/phycon.te0002));
00163 }
00164 else
00165 {
00166 cs13 = (1.054E-03)*(phycon.sqrte/phycon.te04)*phycon.te003*phycon.te0005;;
00167 }
00168
00169
00170
00171
00172 a6300 = TauLines[ipT6300].Aul*TauLines[ipT6300].Pesc;
00173 TauLines[ipT6300].PopOpc = (dense.xIonDense[ipOXYGEN][0]*5./5.);
00174 TauLines[ipT6300].PopLo = (dense.xIonDense[ipOXYGEN][0]*5./5.);
00175 TauLines[ipT6300].PopHi = 0.;
00176 TauLines[ipT6300].cs = (float)(cs12*5./9.);
00177 TauLines[ipT6363].PopOpc = (dense.xIonDense[ipOXYGEN][0]*5./3.);
00178 TauLines[ipT6363].PopLo = (dense.xIonDense[ipOXYGEN][0]*5./3.);
00179 TauLines[ipT6363].PopHi = 0.;
00180 TauLines[ipT6363].cs = (float)(cs12*3./9.);
00181 a6363 = TauLines[ipT6363].Aul*TauLines[ipT6363].Pesc;
00182
00183 a21 = a6300 + a6363 + oxy.d6300;
00184 a32 = TauLines[ipT5577].Aul*TauLines[ipT5577].Pesc;
00185
00186 PutCS(cs23,&TauLines[ipT5577]);
00187
00188
00189
00190
00191 rate_OH_dissoc = CO_findrate("PHOTON,OH=>O,H");
00192 r12 = rate_OH_dissoc*0.55/SDIV( dense.xIonDense[ipOXYGEN][0] );
00193 r13 = rate_OH_dissoc*0.05/SDIV( dense.xIonDense[ipOXYGEN][0] );
00194
00195
00196 CoolHeavy.c6300_frac_emit = (a6300+a6363)/(a6300+a6363+cs12*dense.cdsqte/5.);
00197 CoolHeavy.c5577_frac_emit = (a32)/(a32+cs23*dense.cdsqte/3.);
00198
00199
00200
00201 CoolHeavy.c5577 = atom_pop3(9.,5.,1.,cs12,cs13,cs23,a21,7.56e-2,a32,
00202 22590.,25775.7,&oxy.poiexc,dense.xIonDense[ipOXYGEN][0],0.,r12,r13)*a32*
00203 3.57e-12;
00204
00205 TauLines[ipT5577].PopOpc = oxy.poiexc;
00206 TauLines[ipT5577].PopLo = oxy.poiexc;
00207 TauLines[ipT5577].PopHi = 0.;
00208
00209
00210
00211 CoolHeavy.c5577 *= (1.-r13/(SDIV(atoms.c13)));
00212
00213 CoolHeavy.c6300 = oxy.poiexc*a6300*TauLines[ipT6300].EnergyErg *
00214 (1.-r12/(SDIV(atoms.c12)));
00215 CoolHeavy.c6363 = oxy.poiexc*a6363*TauLines[ipT6363].EnergyErg *
00216 (1.-r12/(SDIV(atoms.c12)));
00217
00218 thermal.dCooldT += CoolHeavy.c6300*(2.28e4*thermal.tsq1 + thermal.halfte) *
00219
00220 (1.-r12/(SDIV(atoms.c12)));
00221
00222 oxy.poiexc /= (float)MAX2(1e-20,dense.xIonDense[ipOXYGEN][0]);
00223 CoolAdd("o 1",5577,CoolHeavy.c5577);
00224 CoolAdd("o 1",6300,CoolHeavy.c6300);
00225 CoolAdd("o 1",6363,CoolHeavy.c6363);
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246 oi3Pcs(&cse01,&cse02,&cse12);
00247
00248 cs = cse01;
00249
00250
00251
00252
00253
00254
00255 csh12 = MAX2(2.00e-11*phycon.te30*phycon.te05*phycon.te02,
00256 7.67e-12*phycon.sqrte*phycon.te03);
00257
00258
00259 csh01 = MIN2(3.12e-12*phycon.te70*phycon.te02*phycon.te02,
00260 7.51e-12*phycon.sqrte*phycon.te05*phycon.te03);
00261
00262
00263 csh02 = MIN2(6.96e-13*phycon.te/phycon.te10/phycon.te02,
00264 1.49e-12*phycon.te70*phycon.te05);
00265
00266
00267
00268
00269
00270
00271 cshe12 = MIN2(8.09e-16*phycon.te32*phycon.te10*phycon.te03,
00272 9.72e-15*phycon.te*phycon.te20);
00273
00274 cshe01 = 1.57e-12*phycon.te70/phycon.te01;
00275
00276 cshe02 = MIN2(1.80e-12*phycon.te70*phycon.te05,
00277 4.45e-12*phycon.te70/phycon.te10);
00278
00279 if( phycon.te<=1.5e3 )
00280 {
00281
00282 double ortho_frac = h2.ortho_density/SDIV(hmi.H2_total);
00283
00284
00285
00286
00287 csh2o12 = 2.21e-14*phycon.te*phycon.te10/phycon.te01;
00288 csh2p12 = 9.45e-15*phycon.te*phycon.te20/phycon.te01;
00289 csh212 = ortho_frac*csh2o12 + (1.-ortho_frac)*csh2p12;
00290
00291 csh2o01 = 2.37e-11*phycon.te30*phycon.te10/phycon.te02;
00292 csh2p01 = 3.40e-11*phycon.te30*phycon.te02;
00293 csh201 = ortho_frac*csh2o01 + (1.-ortho_frac)*csh2p01;
00294
00295 csh2o02 = 4.86e-11*phycon.te30*phycon.te02*phycon.te02;
00296 csh2p02 = 6.82e-11*phycon.te30/phycon.te02;
00297 csh202 = ortho_frac*csh2o02 + (1.-ortho_frac)*csh2p02;
00298 }
00299 else
00300 {
00301 csh212 = 0.;
00302 csh201 = 0.;
00303 csh202 = 0.;
00304 }
00305
00306
00307
00308
00309
00310
00311 if( phycon.te<=1000. )
00312 {
00313 csp01 = MAX2(2.22e-5*phycon.te/phycon.te10,
00314
00315
00316 2.69e-6*phycon.te*phycon.te30)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
00317
00318 csp02 = MIN2(7.07e-8*phycon.te32*phycon.te10,2.46e-7*
00319
00320
00321 phycon.te32/phycon.te10)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
00322 }
00323 else
00324 {
00325 csp01 = MIN2(2.69e-6*phycon.te*phycon.te30,9.21e-5*phycon.te/phycon.te10/
00326
00327
00328 phycon.te03)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
00329
00330 csp02 = MIN2(2.46e-7*phycon.te32/phycon.te10,5.21e-5*phycon.te/
00331
00332
00333 phycon.te20)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
00334 }
00335
00336 csp12 = MIN2(2.35e-6*phycon.te*phycon.te05*phycon.te01,3.98e-5*
00337
00338
00339
00340 phycon.te70/phycon.te01)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
00341
00342
00343
00344
00345
00346
00347
00348
00349 cs01 = cse01+csp01+3.*(csh01*dense.xIonDense[ipHYDROGEN][0] + cshe01*dense.xIonDense[ipHELIUM][0] + csh201*hmi.H2_total)/
00350 dense.cdsqte;
00351 cs12 = cse12+csp12+(csh12*dense.xIonDense[ipHYDROGEN][0] + cshe12*dense.xIonDense[ipHELIUM][0] + csh212*hmi.H2_total)/
00352 dense.cdsqte;
00353 cs02 = cse02+csp02+(csh02*dense.xIonDense[ipHYDROGEN][0] + cshe02*dense.xIonDense[ipHELIUM][0] + csh202*hmi.H2_total)/
00354 dense.cdsqte;
00355
00356
00357
00358 PutCS(cs01,&TauLines[ipT63]);
00359 PutCS(cs12,&TauLines[ipT146]);
00360 PutCS(cs02,&TauDummy);
00361 atom_level3(&TauLines[ipT63],&TauLines[ipT146],&TauDummy);
00362
00363
00364 for( i=0; i<3; ++i)
00365 {
00366
00367 colden.O1Pops[i] = (float)atoms.PopLevels[i];
00368 }
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381 # if 0
00382 if( cs01 > SMALLFLOAT )
00383 {
00384 thermal.dCooldT +=
00385 (cs01-cs)/cs01*TauLines[ipT63].cool*
00386 TauLines[ipT63].EnergyK*thermal.tsq1;
00387 }
00388 # endif
00389
00390
00391 if( fabs(phycon.te - oi_te_tsave)/phycon.te > 1e-4 )
00392 {
00393
00394 if(oi_te_tsave>0. )
00395 {
00396 oi_dcdt_tsave = (cs01-oi_cs_tsave) / (phycon.te-oi_te_tsave);
00397 }
00398 else
00399 {
00400 oi_dcdt_tsave = 0.;
00401 }
00402 oi_cs_tsave = cs01;
00403 oi_te_tsave = phycon.te;
00404
00405
00406
00407
00408
00409 oi_dcdt_tsave = MAX2( 0. , oi_dcdt_tsave);
00410
00411 oi_dcdt_tsave = MIN2( TauLines[ipT63].EnergyK*thermal.tsq1*4. , oi_dcdt_tsave);
00412 }
00413
00414
00415 thermal.dCooldT += TauLines[ipT63].cool*oi_dcdt_tsave;
00416
00417
00418 {
00419
00420 enum{DEBUG_LOC=false};
00421
00422 if( DEBUG_LOC )
00423 {
00424 fprintf(ioQQQ,"DEBUG OI\t%.2f\tte\t%.5e\tcool\t%.5e\tcs\t%.4e\told\t%.4e\tnew\t%.4e\n",
00425 fnzone,
00426 phycon.te,
00427 TauLines[ipT63].cool ,
00428 TauLines[ipT63].cs ,
00429 TauLines[ipT63].cool*TauLines[ipT63].EnergyK*thermal.tsq1,
00430 TauLines[ipT63].cool*oi_dcdt_tsave );
00431 }
00432 }
00433
00434
00435
00436
00437
00438
00439
00440
00441
00442 if( dense.lgAsChoose[ipOXYGEN][1] )
00443 {
00444 a21 = 3.058e-5;
00445 a31 = 1.776e-4;
00446 a41 = 5.22e-2;
00447 a51 = 2.12e-2;
00448 a32 = 1.30e-7;
00449 a42 = 0.09907;
00450 a52 = 0.0519;
00451 a43 = 0.0534;
00452 a53 = 0.08672;
00453 a54 = 1.41e-10;
00454 }
00455 else
00456 {
00457
00458
00459 a21 = 3.82e-5;
00460 a31 = 1.65e-4;
00461 a41 = 5.64e-2;
00462 a51 = 2.3202e-2;
00463 a32 = 1.20e-7;
00464 a42 = 0.11678;
00465 a52 = 0.0615;
00466 a43 = 0.0614;
00467 a53 = 0.10175;
00468 a54 = 2.08e-11;
00469 }
00470
00471
00472
00473
00474
00475
00476
00477
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510
00511 cs21 = (float)(0.8229*(phycon.te007*phycon.te0005*phycon.te0001));
00512 cs31 = (float)(0.5976/phycon.te002);
00513 cs32 = (float)(2.6084/(phycon.te07/(phycon.te003*phycon.te0001)));
00514 cs41 = (float)(0.2471*phycon.te02*(phycon.te007/phycon.te0004));
00515 cs42 = (float)(0.7075*phycon.te03*phycon.te004*phycon.te0002);
00516 cs43 = (float)(0.415*phycon.te04*(phycon.te004/phycon.te0004));
00517 cs51 = (float)(0.1294*(phycon.te02/(phycon.te001*phycon.te0004)));
00518 cs52 = (float)(0.2841*phycon.te04*phycon.te0004);
00519 cs53 = (float)(0.2737*phycon.te04*phycon.te003*phycon.te0001);
00520 cs54 = (float)(0.2037*phycon.te04*(phycon.te002/phycon.te0004));
00521 atom_pop5(go2,exo2,cs21,cs31,cs41,cs51,cs32,cs42,cs52,cs43,cs53,cs54,
00522 a21,a31,a41,a51,a32,a42,a52,a43,a53,a54,p,dense.xIonDense[ipOXYGEN][1]);
00523
00524 CoolHeavy.O3730 = (float)(p[1]*a21*5.34e-12);
00525 CoolHeavy.O3726 = (float)(p[2]*a31*5.34e-12);
00526 CoolHeavy.O2471 = (float)((p[3]*a41 + p[4]*a51)*8.05e-12);
00527 CoolHeavy.O7323 = (float)((p[3]*a42 + p[4]*a52)*2.72e-12);
00528 CoolHeavy.O7332 = (float)((p[3]*a43 + p[4]*a53)*2.71e-12);
00529 CoolHeavy.c3727 = CoolHeavy.O3730 + CoolHeavy.O3726;
00530 CoolHeavy.c7325 = CoolHeavy.O7323 + CoolHeavy.O7332;
00531 thermal.dCooldT += CoolHeavy.c3727*(3.86e4*thermal.tsq1 - thermal.halfte);
00532 CoolAdd("O 2",3727,CoolHeavy.c3727);
00533 CoolAdd("O 2",7325,CoolHeavy.c7325);
00534 CoolAdd("O 2",2470,CoolHeavy.c7325*0.78);
00535
00536
00537
00538 if( (p[3] + p[4]) > SMALLFLOAT )
00539 {
00540 CoolHeavy.O2_A3_tot = (p[3]*(a41+a42+a43) + p[4]*(a51+a52+a53) ) /
00541 ( (p[3]*(a41+a42+a43) + p[4]*(a51+a52+a53) ) +
00542 ( p[3]*(cs41+cs42+cs43)/go2[3] + p[4]*(cs51+cs52+cs53)/go2[4]) *
00543 dense.cdsqte );
00544 }
00545 else
00546 {
00547 CoolHeavy.O2_A3_tot = 0.;
00548 }
00549
00550 if( (p[1] + p[2]) > SMALLFLOAT )
00551 {
00552 CoolHeavy.O2_A2_tot = (p[1]*a21 + p[2]*a31 ) /
00553 ( (p[1]*a21 + p[2]*a31 ) +
00554 ( p[1]*cs21/go2[1] + p[2]*cs31/go2[2]) *
00555 dense.cdsqte );
00556 }
00557 else
00558 {
00559 CoolHeavy.O2_A2_tot = 0.;
00560 }
00561
00562
00563
00564
00565 cs = 0.355*phycon.te10*phycon.te10*phycon.te003*phycon.te001*
00566 phycon.te001;
00567 PutCS(cs,&TauLines[ipT834]);
00568 atom_level2(&TauLines[ipT834]);
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579 if(phycon.te < 30000)
00580 {
00581 cs = (float)(0.2519*(phycon.te07*phycon.te02*phycon.te007*phycon.te001*phycon.te0002));
00582 }
00583 else
00584 {
00585 cs = (float)(6.166388*(1/(phycon.te20*phycon.te01*phycon.te002)));
00586 }
00587
00588 PutCS(cs ,&TauLines[ipT1666]);
00589
00590
00591
00592
00593 if(phycon.te < 30000)
00594 {
00595 cs=(float)((0.1511)*(phycon.te07*phycon.te02*phycon.te007*phycon.te001*phycon.te0002));
00596 }
00597 else
00598 {
00599 cs=(float)((3.668474)*(1/(phycon.te20*phycon.te01*phycon.te001*phycon.te0002)));
00600 }
00601
00602 PutCS(cs,&TauLines[ipT1661]);
00603
00604
00605
00606
00607
00608 if(phycon.te < 30000)
00609 {
00610 cs = (float)(0.0504*((phycon.te10/phycon.te01)*phycon.te005*phycon.te003*phycon.te0002));
00611 }
00612 else
00613 {
00614 cs = (float)(1.223633/(phycon.te20*phycon.te01*phycon.te001*phycon.te0002));
00615 }
00616
00617 PutCS(cs,&TauDummy);
00618 atom_level3(&TauDummy,&TauLines[ipT1666],&TauLines[ipT1661]);
00619
00620
00621
00623 TauLines[ipT304].PopOpc = dense.xIonDense[ipOXYGEN][2];
00624 TauLines[ipT304].PopLo = dense.xIonDense[ipOXYGEN][2];
00625 TauLines[ipT304].PopHi = 0.;
00626
00627
00628
00629
00630
00631 aeff = 0.027205 + oxy.d5007r;
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650 if(phycon.te < 3E4)
00651 {
00652 oxy.o3cs12 = (float)(0.9062*(phycon.te10/phycon.te002));
00653 o3cs23 = (float)(0.0995*phycon.te10*phycon.te07*(phycon.te007/phycon.te0002));
00654 oxy.o3cs13 = (float)(0.1237*phycon.te07*phycon.te02*phycon.te005*phycon.te0005);
00655
00656 }
00657 else if(phycon.te < 6E4)
00658 {
00659 oxy.o3cs12 = (float)(1.710073*(phycon.te04/phycon.te004)*phycon.te0004);
00660 oxy.o3cs13 = (float)(0.1963109*phycon.te05*phycon.te0007);
00661 o3cs23 = (float)(0.781266/(phycon.te02*phycon.te003*phycon.te0001));
00662 }
00663 else
00664 {
00665 oxy.o3cs12 = (float)(6.452638/((phycon.te10/phycon.te02)*phycon.te004*phycon.te0003));
00666 oxy.o3cs13 = (float)(0.841578/(phycon.te07*phycon.te01*(phycon.te002/phycon.te0004)));
00667 o3cs23 = (float)(0.781266/(phycon.te02*phycon.te003*phycon.te0001));
00668 }
00669 # if 0
00670
00671 if( phycon.te > 3981 && phycon.te <= 1e5 )
00672 {
00673 oxy.o3cs12 = (float)(3.0211144 - 101.57536/phycon.sqrte + 355.06905*
00674
00675 log(phycon.te)/phycon.te);
00676 o3cs23 = 0.32412181 + 79.051672/phycon.sqrte - 4374.7816/
00677 phycon.te;
00678 }
00679 else if( phycon.te < 3981. )
00680 {
00681 oxy.o3cs12 = 2.15f;
00682 o3cs23 = 0.4781;
00683 }
00684 else
00685 {
00686 oxy.o3cs12 = 2.6594f;
00687 o3cs23 = 0.5304;
00688 }
00689 oxy.o3cs13 =
00690 (float)(MIN2(0.36,0.0784*phycon.te10*phycon.te03*phycon.te01*
00691 phycon.te003));
00692
00693
00694
00695 # endif
00696
00697 a21 = aeff - oxy.d5007r;
00698 a31 = .215634;
00699 a32 = 1.71;
00700 oxy.o3ex23 = 32947.;
00701 oxy.o3br32 = (float)(a32/(a31 + a32));
00702 oxy.o3enro = (float)(4.56e-12/3.98e-12);
00703
00704 oxy.poiii3 =
00705 (float)(atom_pop3(9.,5.,1.,oxy.o3cs12,oxy.o3cs13,o3cs23,
00706 a21,a31,a32,28990.,oxy.o3ex23,&oxy.poiii2,dense.xIonDense[ipOXYGEN][2],
00707 oxy.d5007r,0.,0.));
00708 CoolHeavy.c4363 = oxy.poiii3*a32*4.56e-12;
00709 CoolHeavy.c5007 = oxy.poiii2*a21*3.98e-12;
00710 oxy.d5007t = (float)(CoolHeavy.c5007*oxy.d5007r/aeff);
00711 thermal.dCooldT += CoolHeavy.c5007*(2.88e4*thermal.tsq1 - thermal.halfte);
00712 thermal.dCooldT += CoolHeavy.c4363*6.20e4*thermal.tsq1;
00713 CoolAdd("O 3",5007,CoolHeavy.c5007);
00714 CoolAdd("O 3",4363,CoolHeavy.c4363);
00715 CoolAdd("O 3",2331,CoolHeavy.c4363*0.236);
00716
00717
00718 if( MAX2(oxy.poiii2,oxy.poiii3) > 0.f && dense.xIonDense[ipOXYGEN][2]>SMALLFLOAT)
00719 {
00720 oxy.poiii3 /= dense.xIonDense[ipOXYGEN][2];
00721 oxy.poiii2 /= dense.xIonDense[ipOXYGEN][2];
00722 }
00723
00724
00725
00726
00727
00728 if(phycon.te < 3E4)
00729 {
00730 cs = (float)(0.3993*(phycon.te03/phycon.te001)*phycon.te0001);
00731 }
00732 else if(phycon.te < 1E5)
00733 {
00734 cs = (float)(0.245712*phycon.te07*phycon.te005*phycon.te001*phycon.te0002);
00735 }
00736 else
00737 {
00738 cs = (float)(1.310467/((phycon.te07/phycon.te001)*phycon.te0002));
00739 }
00740
00741 PutCS(cs,&TauLines[ipTO88]);
00742
00743 if(phycon.te < 3E4)
00744 {
00745 cs = (float)(0.7812*(phycon.te05/phycon.te0001));
00746 }
00747 else if(phycon.te < 1.2E5)
00748 {
00749 cs = (float)(0.516157*phycon.te07*phycon.te02*phycon.te0001);
00750 }
00751 else
00752 {
00753 cs = (float)(4.038402/(phycon.te05*phycon.te03*phycon.te005*phycon.te0007*phycon.te0001));
00754 }
00755
00756 PutCS(cs,&TauLines[ipT52]);
00757
00758 if(phycon.te < 3E4)
00759 {
00760 cs = (float)(0.1337*phycon.te07*phycon.te002*phycon.te0002);
00761 }
00762 else if(phycon.te < 1.2E5)
00763 {
00764 cs = (float)(0.086446*phycon.te10*phycon.te01*phycon.te004*phycon.te0005);
00765 }
00766 else
00767 {
00768 cs = (float)(0.82031/(phycon.te07*phycon.te007*phycon.te0007*phycon.te0002));
00769 }
00770
00771 PutCS(cs,&TauDummy);
00772 atom_level3(&TauLines[ipTO88],&TauLines[ipT52],&TauDummy);
00773
00774
00775
00776
00777
00778
00779
00780 if(phycon.te < 3E4)
00781 {
00782 cs = (float)(0.9595*phycon.te04*phycon.te0002);
00783 }
00784 else
00785 {
00786 cs = (float)(0.10798*phycon.te20*phycon.te05*phycon.te002*phycon.te0001);
00787 }
00788
00789 PutCS(cs,&TauLines[ipT835]);
00790 atom_level2(&TauLines[ipT835]);
00791
00792
00793
00794 Te_bounded = MAX2(phycon.te,4500.);
00795 Te_bounded = MIN2(Te_bounded,450000.);
00796 Te_bounded_log = log(Te_bounded);
00797
00798
00799
00800 cs = -3.0102462 + 109.22973/Te_bounded_log - 18666.357/Te_bounded;
00801 PutCS(cs,&TauLines[ipT789]);
00802 atom_level2(&TauLines[ipT789]);
00803
00804
00805
00806
00807
00808
00809
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823
00824
00825
00826
00827
00828
00829
00830
00831
00832
00833 cs = (float)(exp(3.265723 - 0.00014686984*phycon.alnte*phycon.sqrte
00834 -22.035066/phycon.alnte));
00835
00836
00837 cs = MAX2( cs , 1e-4 );
00838 PutCS(cs,&TauLines[ipT26]);
00839
00840
00841 if( lgFirst && nWindLine )
00842 {
00843 lgFirst = false;
00844 nO4Pump = 0;
00845 for( i=0; i<nWindLine; ++i )
00846 {
00847
00848 if( TauLine2[i].nelem ==8 && TauLine2[i].IonStg==4 )
00849 {
00850 ++nO4Pump;
00851 }
00852 }
00853 if( nO4Pump<0 )
00854 TotalInsanity();
00855 else if( nO4Pump > 0 )
00856
00857 ipO4Pump = (long *)MALLOC((unsigned)(nO4Pump)*sizeof(long) );
00858 nO4Pump = 0;
00859 for( i=0; i<nWindLine; ++i )
00860 {
00861
00862 if( TauLine2[i].nelem ==8 && TauLine2[i].IonStg==4 )
00863 {
00864 # if 0
00865 DumpLine( &TauLine2[i] );
00866 # endif
00867 ipO4Pump[nO4Pump] = i;
00868 ++nO4Pump;
00869 }
00870 }
00871 }
00872 else
00873
00874 nO4Pump = 0;
00875
00876
00877 pump_rate = 0.;
00878 for( i=0; i<nO4Pump; ++i )
00879 {
00880 pump_rate += TauLine2[ipO4Pump[i]].pump;
00881 # if 0
00882 fprintf(ioQQQ,"DEBUG C %li %.3e %.3e\n",
00883 i,
00884 TauLine2[ipO4Pump[i]].WLAng , TauLine2[ipO4Pump[i]].pump );
00885 # endif
00886 }
00887
00888
00889
00890
00891
00892 AtomSeqBoron(&TauLines[ipT26],
00893 &TauLines[ipO4_1400],
00894 &TauLines[ipO4_1397],
00895 &TauLines[ipO4_1407],
00896 &TauLines[ipO4_1405],
00897 &TauLines[ipO4_1401],
00898 0.1367 , 0.1560 , 1.1564 , 0.0457 , pump_rate,"O 4");
00899
00900
00901
00902
00903 cs = MIN2(4.0,1.317*phycon.te10/phycon.te03);
00904 PutCS(cs,&TauLines[ipT630]);
00905 atom_level2(&TauLines[ipT630]);
00906
00907
00908
00909
00910 if( phycon.te <= 3.16e4 )
00911 {
00912 cs = 3.224/(phycon.te10*phycon.te03*phycon.te03*phycon.te003);
00913 }
00914 else
00915 {
00916 cs = 10.549/(phycon.te10*phycon.te10*phycon.te10/phycon.te03);
00917 }
00918
00919 PutCS(cs,&TauLines[ipT1214]);
00920
00921
00922
00923
00924
00925 AtomSeqBeryllium(.87,0.602,2.86,&TauLines[ipT1214],.02198);
00926 embesq.em1218 = (float)(atoms.PopLevels[3]*0.0216*1.64e-11);
00927
00928
00929
00930
00931 ligbar(8,&TauLines[ipT1032],&TauLines[ipT150],&cs2s2p,&cs2s3p);
00932 PutCS(cs2s2p,&TauLines[ipT1032]);
00933 PutCS(cs2s2p*0.5,&TauLines[ipT1037]);
00934
00935 PutCS(1.0,&TauDummy);
00936
00937 atom_level3(&TauLines[ipT1037],&TauDummy,&TauLines[ipT1032]);
00938
00939 PutCS(cs2s3p,&TauLines[ipT150]);
00940 atom_level2(&TauLines[ipT150]);
00941
00942 DEBUG_EXIT( "CoolOxyg()" );
00943 return;
00944 }
00945
00946
00947
00948
00949
00950
00951
00952
00953
00954 static void oi3Pcs(double *cs21,
00955 double *cs20,
00956 double *cs10)
00957 {
00958 double a,
00959 b,
00960 c,
00961 d;
00962
00963 DEBUG_ENTRY( "oi3Pcs()" );
00964
00965
00966
00967 if( phycon.te <= 3.0e3 )
00968 {
00969 *cs21 = 1.49e-4*phycon.sqrte/phycon.te02/phycon.te02;
00970 }
00971 else if( phycon.te <= 1.0e4 )
00972 {
00973 a = -5.5634127e-04;
00974 b = 8.3458102e-08;
00975 c = 2.3068232e-04;
00976 *cs21 = 0.228f*(a + b*phycon.te32 + c*phycon.sqrte);
00977 }
00978 else
00979 {
00980 *cs21 = 0.228*MIN2(0.222,5.563e-06*phycon.te*phycon.te05*
00981 phycon.te02);
00982 }
00983
00984
00985 if( phycon.te <= 3.0e3 )
00986 {
00987 *cs20 = 4.98e-5*phycon.sqrte;
00988 }
00989 else if( phycon.te <= 1.0e4 )
00990 {
00991 a = -3.7178028e-04;
00992 b = 2.0569267e-08;
00993 c = 1.1898539e-04;
00994 *cs20 = 0.288*(a + b*phycon.te32 + c*phycon.sqrte);
00995 }
00996 else
00997 {
00998 *cs20 = 0.288*MIN2(0.0589,1.015e-05*phycon.te/phycon.te10/
00999 phycon.te02/phycon.te005);
01000 }
01001
01002
01003 if( phycon.te <= 3.0e3 )
01004 {
01005 *cs10 = 1.83e-9*phycon.te*phycon.te30*phycon.te05;
01006 }
01007 else if( phycon.te <= 1.0e4 )
01008 {
01009 a = -5.9364373e-04;
01010 b = 0.02946867;
01011 c = 10768.675;
01012 d = 3871.9826;
01013 *cs10 = 0.0269*(a + b*exp(-0.5*POW2((phycon.te-c)/d)));
01014 }
01015 else
01016 {
01017 *cs10 = 0.0269*MIN2(0.074,7.794e-08*phycon.te32/phycon.te10/
01018 phycon.te01);
01019 }
01020
01021
01022 DEBUG_EXIT( "oi3Pcs()" );
01023 return;
01024 }
01025