/home66/gary/public_html/cloudy/c08_branch/source/cool_carb.cpp

Go to the documentation of this file.
00001 /* This file is part of Cloudy and is copyright (C)1978-2008 by Gary J. Ferland and
00002  * others.  For conditions of distribution and use see copyright notice in license.txt */
00003 /*CoolCarb evaluate total cooling due to carbon */
00004 #include "cddefines.h"
00005 #include "physconst.h"
00006 #include "embesq.h"
00007 #include "phycon.h"
00008 #include "taulines.h"
00009 #include "dense.h"
00010 #include "hmi.h"
00011 #include "h2.h"
00012 #include "mole.h"
00013 #include "ligbar.h"
00014 #include "thermal.h"
00015 #include "colden.h"
00016 #include "lines_service.h"
00017 #include "atoms.h"
00018 #include "carb.h"
00019 #include "cooling.h"
00020 
00021 void CoolCarb(void)
00022 {
00023         double SaveAbun, 
00024           a21, 
00025           a31, 
00026           a32, 
00027           cs, 
00028           cs01, 
00029           cs02, 
00030           cs12, 
00031           cs13, 
00032           cs23, 
00033           cs2s2p, 
00034           cs2s3p ,
00035           ortho_frac ,
00036           popup,
00037           popratio,
00038           pump_rate;
00039 
00040         /* added to implement Peter van Hoof additions for new ground term
00041          * atomic collision data */
00042         double cse01,
00043                 cse12,
00044                 cse02,
00045                 csh01,
00046                 csh12,
00047                 csh02,
00048                 csp01,
00049                 csp12,
00050                 csp02,
00051                 csh201,
00052                 csh212,
00053                 csh202 ,
00054                 csh2p01,
00055                 csh2p12,
00056                 csh2p02,
00057                 csh2o01,
00058                 csh2o12,
00059                 csh2o02,
00060                 temp;
00061         double cs_c2_h12=-1.;
00062         realnum pciexc ,
00063                   sum;
00064         int i;
00065         static bool lgFirst=true;
00066         static long int *ipC2Pump=NULL,
00067                 nC2Pump=0;
00068 
00069         DEBUG_ENTRY( "CoolCarb()" );
00070 
00071         TransitionZero( &TauDummy );
00072         TauDummy.Hi->g = 0.;
00073         TauDummy.Lo->g = 0.;
00074         TauDummy.Hi->IonStg = 0;
00075         TauDummy.Lo->IonStg = 0;
00076         TauDummy.Hi->nelem = 0;
00077         TauDummy.Lo->nelem = 0;
00078         TauDummy.Emis->Aul = 0.;
00079         TauDummy.EnergyErg = 0.;
00080         TauDummy.EnergyK = 0.;
00081         TauDummy.EnergyWN = 0.;
00082 
00083         /* subroutine atom_level3( t10,t21,t20)
00084          *
00085          * Carbon cooling
00086          *
00087          * C I 1656, collision strength from transition prob */
00088         /*PutCS(7.3,t1656);
00089         atom_level2(t1656);*/
00090         PutCS(7.3, &TauLines[ipT1656] );
00091         atom_level2(&TauLines[ipT1656]);
00092 
00093         /* C I fine structure lines data originally from
00094          * >>refer      c1      cs      Tielens, A.G.G., & Hollenbach, D. 1985, ApJ, 291, 722
00095          * >>chng 99 jun 01, to more recent ground term collision data
00096          * by Peter van Hoof */
00097 
00098         /* effective collision strength of C I(3P) with e
00099          * >>refer      c1      cs      Johnson, C.T., Burke, P.G., Kingston, A.E. 1987, JPhB, 20, 2553
00100          * these data are valid for 7.5K <= Te <= 10,000K*/
00101         if( phycon.te<=3.0e3 )
00102         {
00103                 /* the first fit is valid for 10K <= Te <= 300K, 
00104                  * the second 300K <= Te <= 3000K*/
00105                 cse01 = MAX2(4.80E-06*phycon.te*phycon.te20/phycon.te03,
00106                         8.24E-07*phycon.te32/phycon.te01);
00107 
00108                 cse12 = MAX2(7.67E-05*phycon.te/phycon.te10/phycon.te03,
00109                         1.47E-06*phycon.te32*phycon.te10/phycon.te03);
00110 
00111                 cse02 = MAX2(4.72E-05*phycon.te70*phycon.te03,
00112                         3.05E-07*phycon.te32*phycon.te10);
00113         }
00114         else
00115         {
00116                 /* the first fit is valid for 300K <= Te <= 3000K, 
00117                  * the second up to 10,000K */
00118                 cse01 = MIN2(8.24E-07*phycon.te32/phycon.te01,
00119                         0.0035*phycon.sqrte*phycon.te01);
00120 
00121                 cse12 = MIN2(1.47E-06*phycon.te32*phycon.te10/phycon.te03,
00122                         0.0088*phycon.sqrte*phycon.te01*phycon.te005);
00123 
00124                 cse02 = MIN2(3.05E-07*phycon.te32*phycon.te10,
00125                         0.00448*phycon.sqrte/phycon.te10*phycon.te03*phycon.te005);
00126         }
00127 
00128         /* >>chng 04 nov 24, upper limit of 1000K is too low - for low Z DLA clouds we need
00129          * C^0 populations at higher temperature - these are simple power laws - extrapolate them
00130          * to 3x too high a temp */
00131         /* rate coefficients for collisional de-excitation of C I(3P) with neutral H(2S1/2)
00132          * >>refer      c1      cs      Launay & Roueff 1977, A&A 56, 289
00133          * the first fit is for Te <= 100K, the second for Te >= 250K
00134          * these data are valid for 4K <= Te <= 1000K*/
00135         csh01 = MAX2(1.61e-10,5.66e-11*phycon.te20);
00136 
00137         /* these data are valid for 7K <= Te <= 1000K*/
00138         csh12 = MAX2(1.93e-10*phycon.te05*phycon.te03,
00139                 5.64e-11*phycon.te30*phycon.te02);
00140 
00141         /* these data are valid for 10K <= Te <= 1000K*/
00142         csh02 = MAX2(1.08e-10/phycon.te03,
00143                 1.67e-11*phycon.te30*phycon.te02*phycon.te02);
00144 
00145         /* >>chng 05 may 23, collisional de-excitations rate co-efficients (cm3s-1) of C I by proton*/
00146         /*>>refer       C1      cs      Roueff, E. & Le Bourlot, J. 1990, A&A 236, 515
00147          * upward rates are given for 100 to 20,000K*/
00148         /* csp01 starts increasing below 25 K, but csp02 and csp12 behave properly*/
00149         if( phycon.te < 25. )
00150                 temp = 25.;
00151         else if( phycon.te >20000. )
00152                 temp = 20000.;
00153         else
00154                 temp = phycon.te;
00155         csp01 = 1e-9*pow((4.3671821 - 14.39018/log(temp)),2)*(1./3.)*exp(16.4*T1CM/temp);
00156         csp12 = 1e-9*exp(3.2823932 - 60.99754*(log(temp)/temp))*(1./5.)*exp(37.1*T1CM/temp);
00157         csp02 = 1e-9/(0.033932579+ (1503.4042/pow(temp,1.5)))*(3./5.)*exp(43.5*T1CM/temp);
00158 
00159         /* >>chng 05 feb 03, this logic had set H2 collisions to zero when
00160          * temperature was > 1.2e3.  this is unphysical.  change to use
00161          * 1200K collision rate at all higher temperatures.  this is a constant
00162          * rate, and the original paper suggested that the rate was fairly
00163          * constant at higher tabulated temperatures 
00164         if( phycon.te<=1.2e3 )*/
00165         /* >>chng 04 mar 15, use explicit ortho-para densities */
00166         ortho_frac = h2.ortho_density/SDIV(hmi.H2_total);
00167 
00168         /* rate coefficients for collisional de-excitation of C I(3P) with H2(J=1,0)
00169          * >>refer      c1      cs      Schroeder et al. 1991, J.Phys.B 24, 2487
00170          * these data are valid for 10K <= Te <= 1200K
00171          * the first entry is contribution from ortho H2, the second para H2.*/
00172         if( phycon.te<=30. )
00173         {
00174                 csh2p01 = MIN2(8.38E-11*phycon.te05*phycon.te01,
00175                         2.12e-10/phycon.te20/phycon.te05/phycon.te01);
00176 
00177                 csh2o01 = MIN2(5.17E-11*phycon.te10*phycon.te05,
00178                         1.07e-10/phycon.te10*phycon.te01);
00179         }
00180         else if( phycon.te<=150. )
00181         {
00182                 csh2p01 = MAX2(6.60e-11,
00183                         2.12e-10/phycon.te20/phycon.te05/phycon.te01);
00184 
00185                 csh2o01 = MAX2(7.10e-11,
00186                         1.07e-10/phycon.te10*phycon.te01);
00187         }
00188         else
00189         {
00190                 /* this is high temperature branch - increasing function of T,
00191                  * so hits cap set by min */
00192                 csh2p01 = MAX2(6.60e-11,3.38e-11*phycon.te10*phycon.te03);
00193                 csh2p01 = MIN2(8.10e-11,csh2p01);
00194 
00195                 csh2o01 = MAX2(7.1e-11,3.37e-11*phycon.te10*phycon.te02*phycon.te02);
00196                 csh2o01 = MIN2(8.57e-11,csh2o01);
00197         }
00198 
00199         /* use computed ortho and para H2 densities to get total collision rate */
00200         csh201 = ortho_frac*csh2o01 + (1.-ortho_frac)*csh2p01;
00201         if( phycon.te<=30. )
00202         {
00203                 csh2p12 = MIN2(1.48E-10*phycon.te05*phycon.te02,
00204                         2.25e-10/phycon.te03/phycon.te03);
00205         }
00206         else if( phycon.te <= 100. )
00207         {
00208                 csh2p12 = MAX2(1.75e-10,
00209                         2.25e-10/phycon.te03/phycon.te03);
00210         }
00211         else
00212         {
00213                 csh2p12 = MAX2(1.75e-10,6.23e-11*phycon.te20*phycon.te01);
00214                 csh2p12 = MIN2(2.61e-10,csh2p12);
00215         }
00216 
00217         csh2o12 = MIN2(2.83e-10,4.46e-11*phycon.te30/phycon.te03);
00218         {
00219                 /*csh212 = 0.75*csh2o12 + 0.25*csh2p12;*/
00220                 csh212 = ortho_frac*csh2o12 + (1.-ortho_frac)*csh2p12;
00221         }
00222 
00223         if( phycon.te<=30 )
00224         {
00225                 csh2p02 = MIN2(8.67E-11*phycon.te02*phycon.te02,
00226                         1.35e-10/phycon.te10);
00227         }
00228         else if( phycon.te<=150. )
00229         {
00230                 csh2p02 = MAX2(8.40e-11,
00231                         1.35e-10/phycon.te10);
00232         }
00233         else
00234         {
00235                 csh2p02 = MAX2(8.4e-11,4.04e-11*phycon.te10*phycon.te02*phycon.te02);
00236                 csh2p02 = MIN2(1.04e-10,csh2p02);
00237         }
00238 
00239         csh2o02 = MIN2(1.11e-10,3.16e-11*phycon.te20/phycon.te02);
00240         /*csh202 = 0.75*csh2o02 + 0.25*csh2p02;*/
00241         csh202 = ortho_frac*csh2o02 + (1.-ortho_frac)*csh2p02;
00242 
00245         /* assume CS for He^0 is the same as H^0*/
00246         /*cs01 = cse01 + 3.*(csh01*(dense.xIonDense[ipHYDROGEN][0]+dense.xIonDense[ipHELIUM][0]) + csh201*hmi.Hmolec[ipMH2g])/dense.cdsqte;
00247         cs12 = cse12 + 5.*(csh12*(dense.xIonDense[ipHYDROGEN][0]+dense.xIonDense[ipHELIUM][0]) + csh212*hmi.Hmolec[ipMH2g])/dense.cdsqte;
00248         cs02 = cse02 + 5.*(csh02*(dense.xIonDense[ipHYDROGEN][0]+dense.xIonDense[ipHELIUM][0]) + csh202*hmi.Hmolec[ipMH2g])/dense.cdsqte;*/
00249         cs01 = cse01 + 3.*(csh01*(dense.xIonDense[ipHYDROGEN][0]+dense.xIonDense[ipHELIUM][0]) + csp01*dense.xIonDense[ipHYDROGEN][1] + csh201*hmi.H2_total)/dense.cdsqte;
00250         cs12 = cse12 + 5.*(csh12*(dense.xIonDense[ipHYDROGEN][0]+dense.xIonDense[ipHELIUM][0]) + csp12*dense.xIonDense[ipHYDROGEN][1] + csh212*hmi.H2_total)/dense.cdsqte;
00251         cs02 = cse02 + 5.*(csh02*(dense.xIonDense[ipHYDROGEN][0]+dense.xIonDense[ipHELIUM][0]) + csp02*dense.xIonDense[ipHYDROGEN][1] + csh202*hmi.H2_total)/dense.cdsqte;
00252 
00253         PutCS( cs01 , &TauLines[ipT610] );
00254         PutCS( cs12 , &TauLines[ipT370] );
00255         PutCS( cs02 , &TauDummy );
00256 
00257         /* ======================================================== */
00258         /* end changes 99 Jun 01, by Peter van Hoof */
00259         atom_level3( 
00260                 &TauLines[ipT610],
00261                 &TauLines[ipT370],
00262                 &TauDummy);
00263 
00264         /* now save pops to add col den in radinc */
00265         for( i=0; i<3; ++i)
00266         {
00267                 /* >>chng 02 oct 23, bug - had been C1Colden rather than C1Pops */
00268                 colden.C1Pops[i] = (realnum)atoms.PopLevels[i];
00269         }
00270 
00271         /* C I 9850, 8727, A from 
00272          * >>refer      c1      as      Mendoza, C. 1982, in Planetary Nebulae, IAU Symp No. 103,
00273          * >>refercon ed by D.R. Flower, (D. Reidel: Holland), 143 */
00274         if( dense.xIonDense[ipCARBON][0] > 0. && phycon.te < 40000. )
00275         {
00276                 cs12 = 1.156e-4*phycon.te*(1.09 - 7.5e-6*phycon.te - 2.1e-10*
00277                   phycon.te*phycon.te);
00278                 cs13 = 2.8e-3*phycon.sqrte;
00279                 cs23 = 2.764e-3*phycon.sqrte;
00280 
00281                 a21 = 3.26e-4*TauLines[ipT9830].Emis->Pesc;
00282                 a31 = 2.73e-3;
00283                 a32 = 0.528*TauLines[ipT8727].Emis->Pesc;
00285                 carb.c8727 = atom_pop3(9.,5.,1.,cs12,cs13,cs23,a21,a31,a32,
00286                   1.417e4,1.255e4,&pciexc,dense.xIonDense[ipCARBON][0],0.,0.,0.)*a32*
00287                   2.28e-12;
00288                 TauLines[ipT9830].Emis->PopOpc = dense.xIonDense[ipCARBON][0];
00289                 TauLines[ipT9830].Lo->Pop = dense.xIonDense[ipCARBON][0];
00290                 TauLines[ipT9830].Hi->Pop = 0.;
00291                 TauLines[ipT9830].Coll.cs = (realnum)cs12;
00292                 TauLines[ipT8727].Emis->PopOpc = (carb.c8727/(a32*2.28e-12));
00293                 TauLines[ipT8727].Lo->Pop = (carb.c8727/(a32*2.28e-12));
00294                 TauLines[ipT8727].Hi->Pop = 0.;
00295                 TauLines[ipT8727].Coll.cs = (realnum)cs23;
00296 
00297                 carb.c9850 = pciexc*a21*2.02e-12;
00298                 thermal.dCooldT += carb.c9850*(1.468e4*thermal.tsq1 + thermal.halfte);
00299                 thermal.dCooldT += carb.c8727*(1.255e4*thermal.tsq1 + thermal.halfte);
00300 
00301                 /* C I 9850 correction for deexcitation, needed for rec line */
00302                 carb.r9850 = (realnum)(a21/(a21 + cs12/5.*COLL_CONST/phycon.sqrte*dense.eden));
00303         }
00304 
00305         else
00306         {
00307                 carb.c9850 = 0.;
00308                 carb.c8727 = 0.;
00309                 carb.r9850 = 0.;
00310                 TauLines[ipT9830].Emis->PopOpc = 0.;
00311                 TauLines[ipT9830].Lo->Pop = 0.;
00312                 TauLines[ipT9830].Hi->Pop = 0.;
00313                 TauLines[ipT8727].Emis->PopOpc = 0.;
00314                 TauLines[ipT8727].Lo->Pop = 0.;
00315                 TauLines[ipT8727].Hi->Pop = 0.;
00316         }
00317         CoolAdd("C  1",8727,carb.c8727);
00318         CoolAdd("C  1",9850,carb.c9850);
00319 
00320         /* one time initialization if first call, and level 2 lines are on */
00321         if( lgFirst && nWindLine )
00322         {
00323                 lgFirst = false;
00324                 nC2Pump = 0;
00325                 for( i=0; i<nWindLine; ++i )
00326                 {
00327                         /* don't test on nelem==ipCARBON since lines on physics, not C, scale */
00328                         if( TauLine2[i].Hi->nelem ==6 && TauLine2[i].Hi->IonStg==2  )
00329                         {
00330                                 ++nC2Pump;
00331                         }
00332                 }
00333                 if( nC2Pump<0 )
00334                         TotalInsanity();
00335                 else if( nC2Pump > 0 )
00336                         /* create the space - can't malloc 0 bytes */
00337                         ipC2Pump = (long *)MALLOC((unsigned)(nC2Pump)*sizeof(long) );
00338                 nC2Pump = 0;
00339                 for( i=0; i<nWindLine; ++i )
00340                 {
00341                         /* don't test on nelem==ipCARBON since lines on physics, not C, scale */
00342                         if( TauLine2[i].Hi->nelem ==6 && TauLine2[i].Hi->IonStg==2  )
00343                         {
00344 #                               if      0
00345                                 DumpLine( &TauLine2[i] );
00346 #                               endif
00347                                 ipC2Pump[nC2Pump] = i;
00348                                 ++nC2Pump;
00349                         }
00350                 }
00351         }
00352         else
00353                 /* level 2 lines are not enabled */
00354                 nC2Pump = 0;
00355 
00356         /* now sum pump rates */
00357         pump_rate = 0.;
00358         for( i=0; i<nC2Pump; ++i )
00359         {
00360                 pump_rate += TauLine2[ipC2Pump[i]].Emis->pump;
00361 #               if      0
00362                 fprintf(ioQQQ,"DEBUG C %li %.3e %.3e\n",
00363                         i,
00364                         TauLine2[ipC2Pump[i]].WLAng , TauLine2[ipC2Pump[i]].pump );
00365 #               endif
00366         }
00367 
00368         /* C II 158 micron emission, A=
00369          * >>refer      c2      as      Froese Fischer, C. 1983, J.Phys. B, 16, 157
00370          * CS From 
00371          * >>refer      c2      cs      Blum, R.D., & Pradhan, A.K. 1992, ApJS 80, 425
00372          * neutral collision data from 
00373          * >>refer      c2      cs      Tielens, A.G.G., & Hollenbach, D. 1985, ApJ, 291, 722
00374          * >>chng 96 aug 01, better fit to cs  */
00375         /* following is a more recent calculation but without extensive tables */
00376         /* >>refer      c2      cs      Wilson, N.J., & Bell, K.L. 2002, MNRAS, 337, 1027-1034 */
00377         /* >>chng 03 feb 24, break apart electron and neutral hydrogen for book keeping*/
00378         /*cs = MIN2(2.20,0.403*phycon.te20/phycon.te02*phycon.te001*phycon.te001) + 
00379           5.8e-10*phycon.te02/dense.cdsqte*4.*(dense.xIonDense[ipHYDROGEN][0] + 
00380           hmi.Hmolec[ipMH2g]);*/
00381         /* electron collision strength */
00382         cse12 = MIN2(2.20,0.403*phycon.te20/phycon.te02*phycon.te001*phycon.te001);
00383 
00384         /* atomic hydrogen collision strength, include H2 with same rate */
00385         /* >>referold   c2      cs      Tielens, A.G.G., & Hollenbach, D. 1985, ApJ, 291, 722 */
00386         /*cs_c2_h12 = 5.8e-10*phycon.te02/dense.cdsqte*4.*(dense.xIonDense[ipHYDROGEN][0] + 
00387           hmi.Hmolec[ipMH2g]);*/
00388         /* >> chng 05 may 21, GS, rate with hydrogen is updated from following */
00389         /* >>refer      c2      cs      Barinovs, G., van Hemert, M., Krems, R. & Dalgarno, A. 2005, ApJ, 620, 537 */
00390         temp = MIN2(2e3, phycon.te);
00391 
00392         /* evaluate the rate at the temperature set above, if temperature is above 2000 K
00393          * then it is evaluated at 2000K - first line is just rate as given in paper */
00394         cs_c2_h12 = 1e-10*(4.4716028+ 0.69658785*pow(temp, 0.31692387));
00395 
00396         if(phycon.te > 2e3) 
00397         {
00398                 /* temperature is above 2000 K so extrapolate rate as a power law */
00399                 cs_c2_h12 *= pow(phycon.te/2e3, 0.31692387);
00400         }
00401 
00402         /* now convert rate into equivalent cs */
00403         cs_c2_h12 *= 4.*(dense.xIonDense[ipHYDROGEN][0] + hmi.Hmolec[ipMH2g])/dense.cdsqte;
00404 
00405         /* >>chng 05 apr 10, make sure we have good current set of vars */
00406         ASSERT( fabs(dense.eden + dense.xIonDense[ipHYDROGEN][0]*1.7e-4 * dense.HCorrFac -dense.EdenHCorr )/ 
00407                 dense.EdenHCorr < 1e-8 );
00408 
00409         PutCS( cse12+cs_c2_h12 ,&TauLines[ipT157]);
00410 
00411         /* CII 1335 all collision strengths and A'S from 
00412          * >>refer      c2      cs      Lennon, D.J., Dufton, P.L., Hibbert, A., Kingston, A.E. 1985, ApJ, 294, 200
00413          * >>refer      c2      cs      Blum, R.D., & Pradhan, A.K. 1992, ApJS 80, 425 */
00414         cs = MIN2(6.73,2.316*phycon.te10);
00415         PutCS(cs,&TauLines[ipT1335]);
00416         atom_level2(&TauLines[ipT1335]);
00417 
00418         /*atom_level2(&TauLines[ipT157]);*/
00419         /*AtomSeqBoron compute cooling from 5-level boron sequence model atom */
00420         /* >>refer      c2      cs      Blum, R.D., & Pradhan, A.K., 1992, ApJS 80, 425
00421          * >>refer      c2      cs      Lennon, D.J., Dufton, P.L., Hibbert, A., Kingston, A.E. 1985, ApJ, 294, 200*/
00422         /* >>refer      c2      as      Nahar, S.N. 2003, ADNDT, 80, 205 */
00423         AtomSeqBoron(&TauLines[ipT157], 
00424           &TauLines[ipC2_2325], 
00425           &TauLines[ipC2_2324], 
00426           &TauLines[ipC2_2329], 
00427           &TauLines[ipC2_2328], 
00428           &TauLines[ipC2_2327], 
00429           0.2349 , 0.8237 , 0.8533 , 1.9818 , pump_rate , "C  2");
00430         {
00431                 /* following should be set true to print contributors */
00432                 enum {DEBUG_LOC=false};
00433                 if( DEBUG_LOC && nzone > 80 )
00434                 {
00435                         fprintf(ioQQQ,"DEBUG\t%.2f\t%.3e\t%.3e\t%.2e\t%.2e\t%.2e\t%.2e\n",
00436                                 fnzone , 
00437                                 phycon.te, 
00438                                 TauLines[ipT157].Coll.cool , 
00439                                 cse12,
00440                                 csh12,
00441                                 dense.eden,
00442                                 (dense.xIonDense[ipHYDROGEN][0] + hmi.Hmolec[ipMH2g])/dense.cdsqte);
00443                 }
00444         }
00445 
00446         sum = 0.;
00447         /* now save pops to add col den in radinc */
00448         for( i=0; i<5; ++i)
00449         {
00450                 colden.C2Pops[i] = (realnum)atoms.PopLevels[i];
00451                 sum += colden.C2Pops[i];
00452         }
00453         ASSERT( fabs(sum-dense.xIonDense[ipCARBON][1])/SDIV(dense.xIonDense[ipCARBON][1]) < 1e-4 );
00454 
00455         /* following used for pumping - cs just made up - no real data */
00456         PutCS(.1,&TauLines[ipT386]);
00457         atom_level2(&TauLines[ipT386]);
00458 
00459         PutCS(.1,&TauLines[ipT310]);
00460         atom_level2(&TauLines[ipT310]);
00461 
00462         PutCS(.1,&TauLines[ipT291]);
00463         atom_level2(&TauLines[ipT291]);
00464 
00465         PutCS(.1,&TauLines[ipT280]);
00466         atom_level2(&TauLines[ipT280]);
00467 
00468         PutCS(.1,&TauLines[ipT274]);
00469         atom_level2(&TauLines[ipT274]);
00470 
00471         PutCS(.1,&TauLines[ipT270]);
00472         atom_level2(&TauLines[ipT270]);
00473 
00474         /* C III  1909
00475          * A for 1909 itself from 
00476          * >>refer      c3      as      Kwong, V., Fang, Z., Gibbons, T.T., Parkinson, W.H., Smith, P.L.
00477          * >>refercon 1993, ApJ, 411, 431
00478          * experimental value of 121 is larger than old NS 96, cs from
00479          * >>refer      c3      cs      Berrington, K.A., Burke, P.G., Dufton, P.L., Kingston, A.E. 1985,
00480          * >>refercon   At. Data Nucl. Data Tables, 33, 195
00481          * AtomSeqBeryllium(CS23,CS24,CS34,tarray,A41) */
00482         /* >>chng 01 sep 09, AtomSeqBeryllium will reset this to 1/3 so critical density correct */
00483         /* >>refer      c2      as      Nahar, S.N. 2003, ADNDT, 80, 205 */
00484         cs = MIN2(1.1,2.67/phycon.te10);
00485         a21 = 5.149e-3;
00486         PutCS(cs,&TauLines[ipT1909]);
00487         /* C1909 = AtomSeqBeryllium(.96,.73,2.8 , T1909 ,5.19E-3 )
00488          * A's 
00489          * >>refer      c3      as      Fleming, J., Bell, K.L, Hibbert, A., Vaeck, N., Godefroid, M.R.
00490          * >>refercon 1996, MNRAS, 279, 1289 */
00491         AtomSeqBeryllium(.96,.73,2.8,&TauLines[ipT1909],a21);
00492         embesq.em1908 = (realnum)(atoms.PopLevels[3]*a21*1.04e-11);
00493         /*DumpLine(&TauLines[ipT1909]);*/
00494 
00495         /* >>chng 02 mar 08, add 13C line - this is totally forbidden for 12C
00496          * and so provides a mathod of deducing 13C/12C */
00497         /* >>refer      C3      13C As  Clegg, R.E.S., Storey, P.J., Walsh, J.R., & Neale, L.
00498          * >>refercon   1997, MNRAS, 284, 348 */
00499         a21 = 6.87e-4;
00500         /* this is the correction for depopulation of the P_0 level due to A21, which is no
00501          * present in 12C */
00502         cs = 2.8*dense.cdsqte/5.*1.667;
00503         popratio =      cs/(cs + a21);
00504         embesq.em13C1910 = (realnum)(a21 * atoms.PopLevels[1]*popratio* 1.04e-11 / co.C12_C13_isotope_ratio);
00505 
00506         /* CIII 1175 excited state line 
00507          * following were computed by previous call to AtomSeqBeryllium  */
00508         /*popup = atoms.PopLevels[1] + atoms.PopLevels[2] + atoms.PopLevels[3];*/
00509         popup = 0.;
00510         colden.C3Pops[0] = (realnum)atoms.PopLevels[0];
00511         for( i=1; i<4; ++i)
00512         {
00513                 popup += atoms.PopLevels[i];
00514                 colden.C3Pops[i] = (realnum)atoms.PopLevels[i];
00515         }
00516 
00517         SaveAbun = dense.xIonDense[ipCARBON][2];
00518         dense.xIonDense[ipCARBON][2] = (realnum)popup;
00519         /* cs 
00520          * >>refer      c3      cs      Berrington, K.A., Burke, P.G., Dufton, P.L., Kingston, A.E. 1985,
00521          * >>refercon At. Data Nucl. Data Tables, 33, 195 */
00522         cs = MIN2(30.,4.806*phycon.te10*phycon.te05/phycon.te01/phycon.te003);
00523         PutCS(18.45,&TauLines[ipc31175]);
00524         atom_level2(&TauLines[ipc31175]);
00525         dense.xIonDense[ipCARBON][2] = (realnum)SaveAbun;
00526 
00527         /* C III 977, cs from 
00528          * >>refer      c3      cs      Berrington, K.A. 1985, J.Phys. B, 18, L395 */
00529         cs = MIN2(7.0,1.556*phycon.te10);
00530         PutCS(cs,&TauLines[ipT977]);
00531         atom_level2(&TauLines[ipT977]);
00532 
00533         /* CIV 1548, 1550 doublet
00534          * >>refer      c4      cs      Cochrane, D.M., & McWhirter, R.W.P. 1983, PhyS, 28, 25 */
00535         ligbar(
00536                 6,
00537                 &TauLines[ipT1548],
00538                 &TauLines[ipT312],
00539                 &cs2s2p,&cs2s3p);
00540         PutCS(cs2s2p,&TauLines[ipT1548]);
00541         PutCS(cs2s2p*0.5,&TauLines[ipT1550]);
00542         PutCS(1.0,&TauDummy);
00543         atom_level3(
00544                 &TauLines[ipT1550],
00545                 &TauDummy,
00546                 &TauLines[ipT1548]);
00547 
00548         PutCS(cs2s3p,&TauLines[ipT312]);
00549         atom_level2(&TauLines[ipT312]);
00550         return;
00551 }

Generated on Mon Feb 16 12:01:13 2009 for cloudy by  doxygen 1.4.7