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