00001
00002
00003
00004
00005
00006
00007
00008 #include "cddefines.h"
00009 #include "coolheavy.h"
00010 #include "taulines.h"
00011 #include "dense.h"
00012 #include "phycon.h"
00013 #include "embesq.h"
00014 #include "ligbar.h"
00015 #include "thermal.h"
00016 #include "lines_service.h"
00017 #include "atoms.h"
00018 #include "cooling.h"
00019
00020 void CoolSulf(void)
00021 {
00022 double cs,
00023 cs2s2p,
00024 cs2s3p,
00025 cs01,
00026 cs02,
00027 cs12,
00028 a21,
00029 a31,
00030 a32,
00031 a41,
00032 a42,
00033 a43,
00034 a51,
00035 a52,
00036 a53,
00037 p[5],
00038 tused;
00039 realnum pop2,
00040 rate;
00041 static double gS2[5]={4.,4.,6.,2.,4.};
00042 static double exS2[4]={14851.9,31.5,9640.8,48.6};
00043
00044 long int i;
00045
00046 DEBUG_ENTRY( "CoolSulf()" );
00047
00048
00049
00050
00051 tused = MAX2( 30. , phycon.te );
00052 tused = MIN2( 3000. , phycon.te );
00053 tused /= 100.;
00054
00055
00056 rate = (realnum)(3.3e-8 * dense.eden +
00057
00058
00059 7.5e-10*pow(tused, 0.17 )*dense.xIonDense[ipHYDROGEN][0] );
00060 LineConvRate2CS( &TauLines[ipS1_25m] , rate );
00061
00062
00063 rate = (realnum)(1.2e-8 * dense.eden +
00064
00065
00066 4.2e-10*pow(tused, 0.17 )*dense.xIonDense[ipHYDROGEN][0] );
00067 LineConvRate2CS( &TauLines[ipS1_56m] , rate );
00068
00069 rate = (realnum)(3.3e-8 * dense.eden +
00070
00071
00072 7.1e-10*pow(tused, 0.17 )*dense.xIonDense[ipHYDROGEN][0] );
00073 TauDummy.Hi->g = TauLines[ipS1_56m].Hi->g;
00074 LineConvRate2CS( &TauDummy , rate );
00075
00076 TauDummy.Hi->g = 0.;
00077
00078 atom_level3(&TauLines[ipS1_25m],&TauLines[ipS1_56m],&TauDummy);
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093 double sii_cs4S32D3,
00094 sii_cs4S32D5,
00095 sii_cs4S32P1,
00096 sii_cs4S32P3,
00097 sii_cs2D32D5,
00098 sii_cs2D32P1,
00099 sii_cs2D52P1,
00100 sii_cs2D32P3,
00101 sii_cs2D52P3,
00102 sii_cs2P12P3,
00103 sii_cs4S34P;
00104
00105
00106
00107
00108
00109 sii_cs(sii_cs4S32D3,
00110 sii_cs4S32D5,
00111 sii_cs4S32P1,
00112 sii_cs4S32P3,
00113 sii_cs2D32D5,
00114 sii_cs2D32P1,
00115 sii_cs2D52P1,
00116 sii_cs2D32P3,
00117 sii_cs2D52P3,
00118 sii_cs2P12P3,
00119 sii_cs4S34P);
00120
00121
00122
00123
00124
00125
00126
00127
00128 a21 = 6.84e-4;
00129 a31 = 2.02e-4;
00130 a41 = 7.72e-2;
00131 a42 = 0.135;
00132 a43 = 6.81e-2;
00133 a51 = 1.92e-1;
00134 a52 = 0.115;
00135 a53 = 0.157;
00136
00137 double Cooling , CoolingDeriv;
00138 atom_pop5(gS2,exS2,sii_cs4S32D3,sii_cs4S32D5,sii_cs4S32P1,sii_cs4S32P3,sii_cs2D32D5,
00139 sii_cs2D32P1,sii_cs2D32P3,sii_cs2D52P1,sii_cs2D52P3,sii_cs2P12P3,
00140 a21,a31,a41,a51,3.35e-7,a42,a52,a43,a53,
00141 1.03e-6,p,dense.xIonDense[ipSULPHUR][1], &Cooling , &CoolingDeriv, 0.,0.,0.,0.);
00142 CoolHeavy.S6733 = (realnum)(p[1]*a21*2.96e-12);
00143 CoolHeavy.S6718 = (realnum)(p[2]*a31*2.962e-12);
00144 CoolHeavy.S4070 = (realnum)(p[4]*a51*4.89e-12);
00145 CoolHeavy.S4078 = (realnum)(p[3]*a41*4.88e-12);
00146 CoolHeavy.S10323 = (realnum)(p[4]*a53*1.93e-12);
00147 CoolHeavy.S10289 = (realnum)(p[4]*a52*1.93e-12);
00148 CoolHeavy.S10373 = (realnum)(p[3]*a43*1.92e-12);
00149 CoolHeavy.S10339 = (realnum)(p[3]*a42*1.92e-12);
00150 CoolHeavy.c6731 = CoolHeavy.S6733 + CoolHeavy.S6718;
00151 CoolHeavy.c10330 = CoolHeavy.S10323 + CoolHeavy.S10289 + CoolHeavy.S10373 + CoolHeavy.S10339;
00152
00153
00154 CoolAdd("S 2",6731,Cooling);
00155 thermal.dCooldT += CoolingDeriv;
00156
00157
00158 PutCS(sii_cs4S34P,&TauLines[ipT1256]);
00159 atom_level2(&TauLines[ipT1256]);
00160
00161
00162
00163
00164 double siii_cs3P03P1,
00165 siii_cs3P03P2,
00166 siii_cs3P01D2,
00167 siii_cs3P01S0,
00168 siii_cs3P13P2,
00169 siii_cs3P11D2,
00170 siii_cs3P11S0,
00171 siii_cs3P21D2,
00172 siii_cs3P21S0,
00173 siii_cs1D21S0,
00174 siii_cs3P3D,
00175 siii_cs3P5S2;
00176
00177 siii_cs(siii_cs3P03P1,
00178 siii_cs3P03P2,
00179 siii_cs3P01D2,
00180 siii_cs3P01S0,
00181 siii_cs3P13P2,
00182 siii_cs3P11D2,
00183 siii_cs3P11S0,
00184 siii_cs3P21D2,
00185 siii_cs3P21S0,
00186 siii_cs1D21S0,
00187 siii_cs3P3D,
00188 siii_cs3P5S2);
00189
00190 PutCS(siii_cs3P03P1,&TauLines[ipTS34]);
00191 PutCS(siii_cs3P13P2,&TauLines[ipTS19]);
00192 PutCS(siii_cs3P03P2,&TauDummy);
00193 atom_level3(&TauLines[ipTS34],&TauLines[ipTS19],&TauDummy);
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207 a21 = 0.0666;
00208 a31 = 0.670;
00209 a32 = 2.08;
00210
00211 CoolHeavy.c6312 = atom_pop3(9.,5.,1.,siii_cs3P01D2+siii_cs3P11D2+siii_cs3P21D2,
00212 siii_cs3P01S0+siii_cs3P11S0+siii_cs3P21S0,siii_cs1D21S0,a21,a31,a32,
00213 1.55e4,2.28e4,&pop2,dense.xIonDense[ipSULPHUR][2],0.,0.,0.)*2.22*3.15e-12;
00214
00215 CoolHeavy.c9532 = pop2*a21*2.11e-12;
00216 CoolAdd("S 3",6312,CoolHeavy.c6312);
00217 CoolAdd("S 3",9532,CoolHeavy.c9532);
00218 CoolAdd("S 3",3722,CoolHeavy.c6312*0.59);
00219
00220 PutCS(siii_cs3P3D,&TauLines[ipT1194]);
00221 atom_level2(&TauLines[ipT1194]);
00222
00223 PutCS(siii_cs3P5S2,&TauLines[ipTS1720]);
00224 atom_level2(&TauLines[ipTS1720]);
00225
00226
00227
00228
00229
00230
00231 double siv_cs2P12P3;
00232
00233
00234 siv_cs(siv_cs2P12P3);
00235
00236 PutCS(siv_cs2P12P3,&TauLines[ipTS11]);
00237
00238
00239 static vector< pair<transition*,double> > S4Pump;
00240 S4Pump.reserve(48);
00241
00242
00243 if( S4Pump.empty() )
00244 {
00245
00246 for( i=0; i < nWindLine; ++i )
00247 {
00248
00249 if( TauLine2[i].Hi->nelem == 16 && TauLine2[i].Hi->IonStg == 4 )
00250 {
00251 # if 0
00252 DumpLine( &TauLine2[i] );
00253 # endif
00254 double branch_ratio;
00255
00256
00257 if( fp_equal( TauLine2[i].Hi->g, realnum(2.) ) )
00258 branch_ratio = 2./3.;
00259 else if( fp_equal( TauLine2[i].Hi->g, realnum(6.) ) )
00260 branch_ratio = 1./2.;
00261 else if( fp_equal( TauLine2[i].Hi->g, realnum(10.) ) )
00262 branch_ratio = 1./6.;
00263 else
00264 TotalInsanity();
00265 pair<transition*,double> pp2( &TauLine2[i], branch_ratio );
00266 S4Pump.push_back( pp2 );
00267 }
00268 }
00269 }
00270
00271
00272 double pump_rate = 0.;
00273 vector< pair<transition*,double> >::const_iterator s4p;
00274 for( s4p=S4Pump.begin(); s4p != S4Pump.end(); ++s4p )
00275 {
00276 const transition* t = s4p->first;
00277 double branch_ratio = s4p->second;
00278 pump_rate += t->Emis->pump*branch_ratio;
00279 # if 0
00280 dprintf( ioQQQ, "S IV %.3e %.3e\n",
00281 t->WLAng , t->Emis->pump*branch_ratio );
00282 # endif
00283 }
00284
00285
00286
00287
00288 AtomSeqBoron(&TauLines[ipTS11],
00289 &TauLines[ipS4_1405],
00290 &TauLines[ipS4_1398],
00291 &TauLines[ipS4_1424],
00292 &TauLines[ipS4_1417],
00293 &TauLines[ipS4_1407],
00294 1.168 , 3.366 , 2.924 , 7.233 ,
00295 pump_rate , "S 4");
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308
00309 cs = MIN2(1.58,35.372/(phycon.te10*phycon.te10*phycon.te10));
00310 PutCS(cs,&TauLines[ipT1198]);
00311
00312 cs01 = MIN2(1.98,29.625/(phycon.te20*phycon.te05));
00313
00314 cs02 = MIN2(2.26,13.477/(phycon.te10*phycon.te03*phycon.te03*
00315 phycon.te005));
00316
00317 cs12 = MIN2(7.59,63.994/(phycon.te20/phycon.te003));
00318
00319
00320 AtomSeqBeryllium(cs01,cs02,cs12,&TauLines[ipT1198],.066);
00321 embesq.em1198 = (realnum)(atoms.PopLevels[3]*0.066*1.66e-11);
00322
00323
00324
00325
00329 PutCS(8.3,&TauLines[ipT786]);
00330 atom_level2(&TauLines[ipT786]);
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340 cs = 11.9;
00341 PutCS(cs*0.667,&TauLines[ipT933]);
00342 PutCS(cs*0.333,&TauLines[ipT944]);
00343 PutCS(1.0,&TauDummy);
00344
00345 atom_level3(&TauLines[ipT944],&TauDummy,&TauLines[ipT933]);
00346
00347
00348
00349
00350 double sviii_cs2P32P1;
00351
00352
00353 sviii_cs(sviii_cs2P32P1);
00354
00355 PutCS(sviii_cs2P32P1,&TauLines[ipfsS810]);
00356
00357 atom_level2(&TauLines[ipfsS810]);
00358
00359
00360
00361
00362
00363
00364 CoolHeavy.c1715 = atom_pop2(0.4,9.,5.,80.,8.39e4,dense.xIonDense[ipSULPHUR][8])*
00365 1.16e-11;
00366 CoolAdd("S 9",1715,CoolHeavy.c1715);
00367
00368
00369
00370
00371 cs = MIN2(3.10,277.2/(phycon.sqrte/phycon.te003));
00372 PutCS(cs,&TauLines[ipfsS912]);
00373
00374 cs = MIN2(.50,7.940/(phycon.te10*phycon.te10*phycon.te10));
00375 PutCS(cs,&TauLines[ipfsS938]);
00376
00377 cs = MIN2(1.1,195.72/(phycon.sqrte*phycon.te03*phycon.te03*
00378 phycon.te01*phycon.te003*phycon.te001));
00379 PutCS(cs,&TauDummy);
00380
00381 atom_level3(&TauLines[ipfsS912],&TauLines[ipfsS938],&TauDummy);
00382
00383
00384
00385 CoolHeavy.c1213 = atom_pop2(0.131,4.,6.,6.,1.19e5,dense.xIonDense[ipSULPHUR][10-1])*
00386 1.64e-11;
00387 CoolAdd("S 10",1213,CoolHeavy.c1213);
00388
00389
00390
00391 cs = MIN2(0.22,0.0151*phycon.te20*phycon.te03*phycon.te001*
00392 phycon.te001);
00393 PutCS(cs,&TauLines[ipfsS1119]);
00394 cs = MIN2(0.6,0.0168*phycon.te10*phycon.te10*phycon.te10*
00395 phycon.te01);
00396 PutCS(cs,&TauLines[ipfsS1114]);
00397 cs = MIN2(0.15,1.5e-3*phycon.te30*phycon.te10*phycon.te005);
00398 PutCS(cs,&TauDummy);
00399 atom_level3(&TauLines[ipfsS1119],&TauLines[ipfsS1114],&TauDummy);
00400
00401
00402
00403 CoolHeavy.c1826 = atom_pop2(0.3,9.,5.,100.,8.92e4,dense.xIonDense[ipSULPHUR][11-1])*
00404 1.23e-11;
00405 CoolAdd("S 11",1615,CoolHeavy.c1826);
00406
00407
00408
00409
00410
00411 PutCS(0.135,&TauLines[ipfsS1207]);
00412 atom_level2(&TauLines[ipfsS1207]);
00413
00414
00415
00416
00417
00418
00419
00420 PutCS(0.03,&TauLines[ipS12_520]);
00421 atom_level2(&TauLines[ipS12_520]);
00422
00423
00424 CoolHeavy.c488 = atom_pop2(0.11,1.,9.,3.3e5,2.948e5,dense.xIonDense[ipSULPHUR][13-1])*
00425 4.07e-11;
00426 CoolAdd("S 13",488,CoolHeavy.c488);
00427
00428
00429
00430 ligbar(16,&TauLines[ipTSu418],&TauLines[ipTSu30],&cs2s2p,&cs2s3p);
00431 PutCS(cs2s2p,&TauLines[ipTSu418]);
00432 PutCS(cs2s2p*0.5,&TauLines[ipTSu446]);
00433 PutCS(1.0,&TauDummy);
00434 atom_level3(&TauLines[ipTSu446],&TauDummy,&TauLines[ipTSu418]);
00435
00436 PutCS(cs2s3p,&TauLines[ipTSu30]);
00437 atom_level2(&TauLines[ipTSu30]);
00438 return;
00439 }
00440
00441
00442
00443
00444
00445 void sii_cs(double& sii_cs4S32D3,
00446 double& sii_cs4S32D5,
00447 double& sii_cs4S32P1,
00448 double& sii_cs4S32P3,
00449 double& sii_cs2D32D5,
00450 double& sii_cs2D32P1,
00451 double& sii_cs2D52P1,
00452 double& sii_cs2D32P3,
00453 double& sii_cs2D52P3,
00454 double& sii_cs2P12P3,
00455 double& sii_cs4S34P)
00456 {
00457 double telog;
00458 telog = phycon.alogte;
00459
00460 double a,
00461 b,
00462 c,
00463 telogn1;
00464
00465 DEBUG_ENTRY( "sii_cs()" );
00466
00467
00468 telogn1 = MAX2(3.5,telog);
00469 telogn1 = MIN2(telogn1,5.0);
00470
00471
00472 a = 18.335524;
00473 b = -5.1180248;
00474 c = 0.44482438;
00475 sii_cs2D52P3 = MIN2(5.82,a+b*telogn1+c*telogn1*telogn1);
00476 sii_cs2D52P3 = MAX2(3.87,sii_cs2D52P3);
00477
00478
00479 a = 6.690242;
00480 b = -1.061514;
00481 c = 0.034535506;
00482 sii_cs2D32P3 = MIN2(3.38,a+b*telogn1+c*telogn1*telogn1);
00483 sii_cs2D32P3 = MAX2(2.24,sii_cs2D32P3);
00484
00485
00486 a = 4.2250081;
00487 b = -0.46549935;
00488 c = -0.010172139;
00489 sii_cs2D52P1 = MIN2(2.46,a+b*telogn1+c*telogn1*telogn1);
00490 sii_cs2D52P1 = MAX2(1.64,sii_cs2D52P1);
00491
00492
00493 a = 8.274085;
00494 b = -2.6223732;
00495 c = 0.2502924;
00496 sii_cs2D32P1 = MIN2(2.14,a+b*telogn1+c*telogn1*telogn1);
00497 sii_cs2D32P1 = MAX2(1.42,sii_cs2D32P1);
00498
00499
00500 a = -5.1994665;
00501 b = 49.334586;
00502 c = -70.93344;
00503 sii_cs2P12P3 = MIN2(3.07,a+b/telogn1+c/(telogn1*telogn1));
00504 sii_cs2P12P3 = MAX2(1.85,sii_cs2P12P3);
00505
00506
00507 a = -27.497273;
00508 b = 247.27405;
00509 c = -429.9142;
00510 sii_cs2D32D5 = MIN2(8.01,a+b/telogn1+c/(telogn1*telogn1));
00511 sii_cs2D32D5 = MAX2(4.79,sii_cs2D32D5);
00512
00513
00514 a = 2.6106784;
00515 b = -3.2766908e-05;
00516 c = 6.5105436;
00517 sii_cs4S32P3 = a+b*pow(telogn1,c);
00518 sii_cs4S32P3 = MIN2(2.46,sii_cs4S32P3);
00519 sii_cs4S32P3 = MAX2(1.45,sii_cs4S32P3);
00520
00521
00522 sii_cs4S32P1 = 0.5*sii_cs4S32P3;
00523
00524
00525 a = 8.1458628;
00526 b = -0.5389108;
00527 c = 1.4486586;
00528 sii_cs4S32D5 = a+b*pow(telogn1,c);
00529 sii_cs4S32D5 = MIN2(4.77,sii_cs4S32D5);
00530 sii_cs4S32D5 = MAX2(2.54,sii_cs4S32D5);
00531
00532
00533 sii_cs4S32D3 = sii_cs4S32D5/1.5;
00534
00535
00536 sii_cs4S34P = MIN2(8.46,-4.9416304+47.01064/phycon.alogte);
00537 sii_cs4S34P = MAX2(4.466,sii_cs4S34P);
00538
00539 return;
00540 }
00541
00542 void siii_cs(double& siii_cs3P03P1,
00543 double& siii_cs3P03P2,
00544 double& siii_cs3P01D2,
00545 double& siii_cs3P01S0,
00546 double& siii_cs3P13P2,
00547 double& siii_cs3P11D2,
00548 double& siii_cs3P11S0,
00549 double& siii_cs3P21D2,
00550 double& siii_cs3P21S0,
00551 double& siii_cs1D21S0,
00552 double& siii_cs3P3D,
00553 double& siii_cs3P5S2)
00554 {
00555 DEBUG_ENTRY( "siii_cs()" );
00556
00557
00558
00559
00560
00561
00562
00563
00564 if( phycon.te < 5000. )
00565 {
00566 siii_cs3P03P1 = 4.44;
00567 siii_cs3P03P2 = 1.41;
00568 siii_cs3P01D2 = 0.802;
00569 siii_cs3P01S0 = 0.129;
00570 siii_cs3P13P2 = 8.72;
00571 siii_cs3P11D2 = 2.41;
00572 siii_cs3P11S0 = 0.388;
00573 siii_cs3P21D2 = 4.01;
00574 siii_cs3P21S0 = 0.646;
00575 siii_cs1D21S0 = 1.31;
00576 }
00577 else if( phycon.te > 1e5 )
00578 {
00579 siii_cs3P03P1 = 1.9;
00580 siii_cs3P03P2 = 1.24;
00581 siii_cs3P01D2 = 0.664;
00582 siii_cs3P01S0 = 0.136;
00583 siii_cs3P13P2 = 5.13;
00584 siii_cs3P11D2 = 1.99;
00585 siii_cs3P11S0 = 0.407;
00586 siii_cs3P21D2 = 3.32;
00587 siii_cs3P21S0 = 0.679;
00588 siii_cs1D21S0 = 1.84;
00589 }
00590 else
00591 {
00592 siii_cs3P03P1 = 52.47/(phycon.te30/phycon.te02);
00593 siii_cs3P03P2 = 1.894/(phycon.te02*phycon.te02);
00594 siii_cs3P01D2 = 1.34/(phycon.te05*phycon.te01);
00595 siii_cs3P01S0 = 0.109*phycon.te02;
00596 siii_cs3P13P2 = 41.3/(phycon.te20/phycon.te02);
00597 siii_cs3P11D2 = 4.03/(phycon.te05*phycon.te01);
00598 siii_cs3P11S0 = 0.327*phycon.te02;
00599 siii_cs3P21D2 = 6.708/(phycon.te05*phycon.te01);
00600 siii_cs3P21S0 = 0.545*phycon.te02;
00601 siii_cs1D21S0 = 0.501*phycon.te10*phycon.te01;
00602 }
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623 if( phycon.te <= 3e4 )
00624 {
00625 siii_cs3P3D = 12.04/(phycon.te02*phycon.te02);
00626 }
00627 else if( phycon.te > 3e4 && phycon.te <= 4e4 )
00628 {
00629 siii_cs3P3D = 7.97;
00630 }
00631 else
00632 {
00633 siii_cs3P3D = 55.42/(phycon.te20/phycon.te02*phycon.te003);
00634 }
00635
00636
00637
00638
00639
00640 if( phycon.te <= 3e4 )
00641 {
00642 siii_cs3P5S2 = 1.786*phycon.te05*phycon.te01*phycon.te001;
00643 }
00644 else
00645 {
00646 siii_cs3P5S2 = 9.392/phycon.te10;
00647 }
00648
00649 }
00650
00651
00652
00653 void siv_cs(double& siv_cs2P12P3)
00654 {
00655 DEBUG_ENTRY( "siv_cs()" );
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673 if( phycon.te < 1e4 )
00674 {
00675 siv_cs2P12P3 = 3.71*phycon.te10/phycon.te01;
00676 }
00677 else
00678 {
00679 siv_cs2P12P3 = MIN2(8.5,19.472/(phycon.te10/phycon.te01));
00680 }
00681
00682 return;
00683 }
00684
00685
00686 void sviii_cs(double& sviii_cs2P32P1)
00687 {
00688 DEBUG_ENTRY( "sviii_cs()" );
00689
00690
00691
00692
00693
00694
00695 if(phycon.te < 6.4E5)
00696 {
00697 sviii_cs2P32P1 = (realnum)(0.0943*(phycon.te10/(phycon.te01*phycon.te001))*phycon.te0004);
00698 }
00699 else
00700 {
00701 sviii_cs2P32P1 = (realnum) (8.1555/(phycon.te20*phycon.te04*phycon.te004*phycon.te0002));
00702 }
00703
00704 return;
00705 }
00706
00707
00708
00709
00710
00711
00712