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