cloudy  trunk
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
atmdat_ligbar.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2008 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 /*ligbar obtain collision strength for any Li-sequence line */
4 #include "cddefines.h"
5 #include "physconst.h"
6 #include "dense.h"
7 #include "phycon.h"
8 #include "ligbar.h"
9 
10 void ligbar(long int ized,
11  transition * t2s2p,
12  transition * t2s3p,
13  double *cs2s2p,
14  double *cs2s3p)
15 {
16  double a,
17  b,
18  c,
19  excit,
20  gbar;
21 
22  DEBUG_ENTRY( "ligbar()" );
23 
24  /* compute collision strength for Li-seq g-bar approx
25  * summarized in Cochrane and McWhirter Physica Scripta 28, 25.
26  * ized is nuclear charge, can be anything larger than 2
27  * Kirk Korista
28  *
29  * ized is nuclear charge, 6 for carbon, etc
30  * t2s2p is tau array for stronger memeber of 2s 2p multiplet,
31  * which is treated as two separate lines
32  * t2s3p is next transition up, treated as an averaged multiplet
33  *
34  * cs2s2p is the cs for the single 2s2p line that comes in
35  * cs2s3p is the multiplet cs for that transition, which is
36  * treated as a multiplet average. If t2s3p is ever separated
37  * (as t2s2p was) then cs2s3p will be the single line not the multiplet
38  *
39  * T2S2P, T2S3P are line information array, defined in block data
40  */
41 
42  /* no need to evaluate coll strength if population is zero */
43  if(dense.xIonDense[ t2s2p->Hi->nelem -1 ][ t2s2p->Hi->IonStg-1 ] == 0)
44  {
45  *cs2s2p = 1.;
46  *cs2s3p = 1.;
47  return;
48  }
49 
50  if( ized < 3 )
51  {
52  /* this is a sanity check */
53  fprintf( ioQQQ, " LIGBAR called with insane charge, ized=%4ld\n",
54  ized );
55  ShowMe();
56  cdEXIT(EXIT_FAILURE);
57  }
58 
59  else if( ized == 6 )
60  {
61  /* CIV 1549 */
62  a = 0.292;
63  b = 0.289;
64  c = 2.67;
65  }
66 
67  else if( ized == 7 )
68  {
69  /* NV 1240 */
70  a = 0.387;
71  b = 0.247;
72  c = 3.93;
73  }
74 
75  else if( ized == 8 )
76  {
77  /* OVI 1035 -- values interpolated */
78  a = 0.40;
79  b = 0.256;
80  c = 4.12;
81  }
82 
83  else if( ized == 10 )
84  {
85  /* NeVIII 774 */
86  a = 0.426;
87  b = 0.273;
88  c = 4.50;
89  }
90 
91  else if( ized == 12 )
92  {
93  /* Mg 10 615 -- these values are general */
94  a = 0.45;
95  b = 0.27;
96  c = 5.0;
97  }
98 
99  else if( ized == 18 )
100  {
101  /* Ar 16 365 */
102  a = 0.311;
103  b = 0.294;
104  c = 6.65;
105  }
106 
107  else if( ized == 26 )
108  {
109  /* Fe 24 213 */
110  a = 0.435;
111  b = 0.314;
112  c = 6.92;
113  }
114 
115  else
116  {
117  /* use general formula for all other cases */
118  a = 0.6 - 1.5/((realnum)(ized) - 2.);
119  b = 0.27;
120  c = 5.;
121  }
122 
123  /* evaluate expression in terms of coefficients
124  * tarray(ipLnBolt) = line energy in degrees kelvin */
125  excit = t2s2p->EnergyK/phycon.te;
126 
127  /* excit = e1/(te * 1.380622e-16) */
128  gbar = a + b*log(1./excit+c);
129 
130  /* tarray(ipLnGF) = gf; tarray(ipLnBolt) excit temp kelvin */
131  /*
132  *cs2s2p = gbar*197.47*EVDEGK*t2s2p->Lo->gf/t2s2p->EnergyK;
133  */
134  *cs2s2p = gbar*197.47*EVDEGK*t2s2p->Emis->gf/t2s2p->EnergyK;
135  /* small correction factors to CMcW83 2s-2p fits:
136  * fits 3.57% too small compared to R-matrix calc. for Mg X.
137  * scaled all, initially, by this constant. Pradhan & Peng (1994)
138  * compilation cites a pc with Burgess, which further scales
139  * cs(C IV) by 1.0429 and cs(N V) by 0.9691, approximately.
140  * The scaled cs(OVI) matched well with Burgess, so no further
141  * scaling was done for more highly ionized species. */
142 
143  if( ized == 6 )
144  {
145  *cs2s2p *= 1.08013;
146  }
147 
148  else if( ized == 7 )
149  {
150  *cs2s2p *= 1.00370;
151  }
152 
153  else
154  {
155  *cs2s2p *= 1.0357;
156  }
157 
158 
159  /* use general formula for 2s3p */
160  a = -0.244;
161  b = 0.25;
162  c = 4.;
163 
164  /* excit = e2/(te * 1.380622e-16) */
165  excit = t2s3p->EnergyK/phycon.te;
166  gbar = a + b*log(1./excit+c);
167  /* tarray(ipLnGF) = gf */
169  *cs2s3p = gbar*197.47*EVDEGK*t2s3p->Emis->gf/t2s3p->EnergyK;
170  /* cs2s3p = gbar * 197.47*eVdegK * GF2/(e2/1.60184e-12)
171  * */
172  return;
173 }

Generated for cloudy by doxygen 1.8.4