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