cloudy
trunk
|
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 }