/home66/gary/public_html/cloudy/c08_branch/source/atmdat_ligbar.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 /*ligbar obtain collision strength for any Li-sequence line */
00004 #include "cddefines.h"
00005 #include "physconst.h"
00006 #include "dense.h"
00007 #include "phycon.h"
00008 #include "ligbar.h"
00009 
00010 void ligbar(long int ized, 
00011   transition * t2s2p, 
00012   transition * t2s3p, 
00013   double *cs2s2p, 
00014   double *cs2s3p)
00015 {
00016         double a, 
00017           b, 
00018           c, 
00019           excit, 
00020           gbar;
00021 
00022         DEBUG_ENTRY( "ligbar()" );
00023 
00024         /* compute collision strength for Li-seq g-bar approx
00025          * summarized in Cochrane and McWhirter Physica Scripta 28, 25.
00026          * ized is nuclear charge, can be anything larger than 2
00027          * Kirk Korista
00028          *
00029          * ized is nuclear charge, 6 for carbon, etc
00030          * t2s2p is tau array for stronger memeber of 2s 2p multiplet,
00031          * which is treated as two separate lines
00032          * t2s3p is next transition up, treated as an averaged multiplet
00033          *
00034          * cs2s2p is the cs for the single 2s2p line that comes in
00035          * cs2s3p is the multiplet cs for that transition, which is
00036          * treated as  a multiplet average.  If t2s3p is ever separated
00037          * (as t2s2p was) then cs2s3p will be the single line not the multiplet
00038          *
00039          * T2S2P, T2S3P are line information array, defined in block data
00040          */
00041 
00042         /* no need to evaluate coll strength if population is zero */
00043         if(dense.xIonDense[ t2s2p->Hi->nelem -1 ][ t2s2p->Hi->IonStg-1 ] == 0)
00044         {
00045                 *cs2s2p = 1.;
00046                 *cs2s3p = 1.;
00047                 return;
00048         }
00049 
00050         if( ized < 3 )
00051         {
00052                 /* this is a sanity check */
00053                 fprintf( ioQQQ, " LIGBAR called with insane charge, ized=%4ld\n", 
00054                   ized );
00055                 ShowMe();
00056                 cdEXIT(EXIT_FAILURE);
00057         }
00058 
00059         else if( ized == 6 )
00060         {
00061                 /* CIV 1549 */
00062                 a = 0.292;
00063                 b = 0.289;
00064                 c = 2.67;
00065         }
00066 
00067         else if( ized == 7 )
00068         {
00069                 /* NV 1240 */
00070                 a = 0.387;
00071                 b = 0.247;
00072                 c = 3.93;
00073         }
00074 
00075         else if( ized == 8 )
00076         {
00077                 /* OVI 1035 -- values interpolated */
00078                 a = 0.40;
00079                 b = 0.256;
00080                 c = 4.12;
00081         }
00082 
00083         else if( ized == 10 )
00084         {
00085                 /* NeVIII 774 */
00086                 a = 0.426;
00087                 b = 0.273;
00088                 c = 4.50;
00089         }
00090 
00091         else if( ized == 12 )
00092         {
00093                 /* Mg 10 615 -- these values are general */
00094                 a = 0.45;
00095                 b = 0.27;
00096                 c = 5.0;
00097         }
00098 
00099         else if( ized == 18 )
00100         {
00101                 /* Ar 16 365 */
00102                 a = 0.311;
00103                 b = 0.294;
00104                 c = 6.65;
00105         }
00106 
00107         else if( ized == 26 )
00108         {
00109                 /* Fe 24 213 */
00110                 a = 0.435;
00111                 b = 0.314;
00112                 c = 6.92;
00113         }
00114 
00115         else
00116         {
00117                 /* use general formula for all other cases */
00118                 a = 0.6 - 1.5/((realnum)(ized) - 2.);
00119                 b = 0.27;
00120                 c = 5.;
00121         }
00122 
00123         /* evaluate expression in terms of coefficients
00124          * tarray(ipLnBolt) = line energy in degrees kelvin */
00125         excit = t2s2p->EnergyK/phycon.te;
00126 
00127         /* excit = e1/(te * 1.380622e-16) */
00128         gbar = a + b*log(1./excit+c);
00129 
00130         /* tarray(ipLnGF) = gf; tarray(ipLnBolt) excit temp kelvin */
00131         /*
00132         *cs2s2p = gbar*197.47*EVDEGK*t2s2p->Lo->gf/t2s2p->EnergyK;
00133         */
00134          *cs2s2p = gbar*197.47*EVDEGK*t2s2p->Emis->gf/t2s2p->EnergyK;
00135         /* small correction factors to CMcW83 2s-2p fits:
00136          * fits 3.57% too small compared to R-matrix calc. for Mg X.
00137          * scaled all, initially, by this constant. Pradhan & Peng (1994)
00138          * compilation cites a pc with Burgess, which further scales
00139          * cs(C IV) by 1.0429 and cs(N V) by 0.9691, approximately. 
00140          * The scaled cs(OVI) matched well with Burgess, so no further
00141          * scaling was done for more highly ionized species. */
00142 
00143         if( ized == 6 )
00144         {
00145                 *cs2s2p *= 1.08013;
00146         }
00147 
00148         else if( ized == 7 )
00149         {
00150                 *cs2s2p *= 1.00370;
00151         }
00152 
00153         else
00154         {
00155                 *cs2s2p *= 1.0357;
00156         }
00157 
00158 
00159         /* use general formula for 2s3p */
00160         a = -0.244;
00161         b = 0.25;
00162         c = 4.;
00163 
00164         /* excit = e2/(te * 1.380622e-16) */
00165         excit = t2s3p->EnergyK/phycon.te;
00166         gbar = a + b*log(1./excit+c);
00167         /* tarray(ipLnGF) = gf */
00169      *cs2s3p = gbar*197.47*EVDEGK*t2s3p->Emis->gf/t2s3p->EnergyK;
00170         /* cs2s3p = gbar * 197.47*eVdegK *  GF2/(e2/1.60184e-12)
00171          * */
00172         return;
00173 }

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