root/branches/newmole/source/atmdat_ligbar.cpp

Revision 2376, 3.7 kB (checked in by rjrw, 3 months ago)

Merged from trunk r2345:2375

  • Property svn:eol-style set to native
Line 
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
10void 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 */
168        /**cs2s3p = gbar*197.47*EVDEGK*t2s3p->Lo->gf/t2s3p->EnergyK;*/
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}
Note: See TracBrowser for help on using the browser.