cloudy trunk
Loading...
Searching...
No Matches
cool_argo.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/*CoolArgo compute argon cooling */
4#include "cddefines.h"
5#include "coolheavy.h"
6#include "phycon.h"
7#include "ligbar.h"
8#include "taulines.h"
9#include "dense.h"
10#include "thermal.h"
11#include "lines_service.h"
12#include "atoms.h"
13#include "cooling.h"
14
15void CoolArgo(void)
16{
17 realnum a12,
18 a13,
19 a14,
20 a15,
21 a23,
22 a24,
23 a25,
24 a34,
25 a35,
26 a45,
27 cs12,
28 cs13,
29 cs14,
30 cs15,
31 cs23,
32 cs24,
33 cs25,
34 cs34,
35 cs35,
36 cs45,
37 pop2,
38 popn3;
39 double cs, p[5];
40 static double gAr4[5]={4.,4.,6.,2.,4.};
41 static double exAr4[4]={21090.4,128.9,13636.2,177.1};
42
43 DEBUG_ENTRY( "CoolArgo()" );
44
45 /* Argon II 6.98 micron
46 * trans prob from
47 * >>refer Ar2 AS Nussbaumer, H., & Storey, P. J. 1988, A&A, 200, L25
48 * Y(ik) from
49 * >>refer Ar2 CS Pelan, J., & Berrington, K. A. 1995, A&AS, 110, 209 */
50 PutCS(3.1,TauLines[ipTAr7]);
52
53 /* A III 7136, 7751, 3109, 5192 CS
54 * >>refer Ar3 CS Galavis, M. E., Mendoza, C., & Zeippen, C. J. 1995, A&AS, 111, 347
55 * >>chng 97 mar 19, break up into three level atom */
56 cs12 = 4.825f;
57 cs13 = 0.841f;
58 cs23 = (realnum)MIN2(1.30,3.296/(phycon.te10*phycon.te01/phycon.te001/
59 phycon.te001));
60 a12 = 0.3963f;
61 a23 = 2.59f;
62 a13 = 3.952f;
63 /* POP3(G1,G2,G3,O12,O13,O23,A21,A31,A32,E12,E23,P2,ABUND,GAM2) */
64 popn3 = (realnum)(atom_pop3(9.,5.,1.,cs12,cs13,cs23,a12,a13,a23,1.955e4,2.770e4,
65 &pop2,dense.xIonDense[ipARGON][2],0.,0.,0.));
66 CoolHeavy.c7136 = pop2*a12*2.7e-12;
67 CoolHeavy.c5192 = popn3*a23*3.83e-12;
68 CoolHeavy.c3109 = popn3*a13*6.40e-12;
69 CoolAdd("Ar 3",7136,CoolHeavy.c7136);
70 CoolAdd("Ar 3",5192,CoolHeavy.c5192);
71 CoolAdd("Ar 3",3109,CoolHeavy.c3109);
72 /* add to deriv */
73 /* >>chng 01 mar 10, did not have second pair of lines included */
74 thermal.dCooldT += CoolHeavy.c7136*1.955e4*thermal.tsq1 +
75 (CoolHeavy.c5192+CoolHeavy.c3109)*4.73e4*thermal.tsq1;
76
77 /* Ar III 21.8(J=0,1), 9.0 (J=1,2) mircon lines,
78 * >>refer Ar3 CS Galavis, M. E., Mendoza, C., & Zeippen, C. J. 1995, A&AS, 111, 347 */
79 PutCS(3.1,TauLines[ipTAr9]);
80 cs = MIN2(1.384,3.110/(phycon.te10/phycon.te001*phycon.te001));
82 if( phycon.te < 1e4 )
83 {
84 cs = 0.671;
85 }
86 else
87 {
88 cs = MIN2(0.906,0.150*phycon.te20/phycon.te02/phycon.te02*
89 phycon.te003);
90 }
91 PutCS(cs,*TauDummy);
93
94 /* Argon IV 4711+4740, 7335 lines (O II like)
95 * CS from
96 * >>refer Ar4 CS Zeippen, C. J., Le Bourlot, J., & Butler, K. 1987, A&A, 188, 251
97 * >>chng 97 jan 31, increase to full 5 level atom
98 * Ar IV, cs data from
99 * >>refer Ar4 CS Ramsbottom, C. A., Bell., K. L., & Keenan, F. P. 1997, MNRAS 284, 754
100 * differs by 2-3x from older values
101 * temp dependence form
102 *>>refer Ar4 CS Ramsbottom, C. A., & Bell, K. L. 1997, At. Data Nucl. Data Tables, 66, 65 */
103 cs12 = (realnum)MAX2(0.761,0.481*phycon.te05);
104 cs12 = (realnum)MIN2(0.853,cs12);
105 a12 = 2.23e-2f;
106
107 cs13 = (realnum)MAX2(1.14,0.719*phycon.te05);
108 cs13 = (realnum)MIN2(1.3,cs13);
109 a13 = 1.77e-3f;
110
111 cs14 = (realnum)MAX2(0.39,0.108*phycon.te10*phycon.te02*phycon.te02);
112 cs14 = (realnum)MIN2(0.5,cs14);
113 a14 = 0.862f;
114
115 cs15 = (realnum)MAX2(0.78,0.216*phycon.te10*phycon.te02*phycon.te02);
116 cs15 = (realnum)MIN2(1.0,cs15);
117 a15 = 2.11f;
118
119 cs23 = 7.06f;
120 a23 = 2.30e-5f;
121
122 cs24 = (realnum)MAX2(1.53,0.346*phycon.te10*phycon.te05);
123 cs24 = (realnum)MIN2(1.96,cs24);
124 a24 = 0.603f;
125
126 cs25 = (realnum)MAX2(2.18,0.664*phycon.te10*phycon.te02);
127 cs25 = (realnum)MIN2(2.65,cs25);
128 a25 = 0.789f;
129
130 cs34 = (realnum)MAX2(1.56,0.475*phycon.te10*phycon.te02);
131 cs34 = (realnum)MIN2(1.89,cs34);
132 a34 = 0.119f;
133
134 cs35 = (realnum)MAX2(4.01,1.00*phycon.te10*phycon.te02*phycon.te02);
135 cs35 = (realnum)MIN2(5.03,cs35);
136 a35 = 0.598f;
137
138 cs45 = (realnum)(0.0359*phycon.te20*phycon.te20*phycon.te02*phycon.te02);
139 a45 = 4.94e-5f;
140
141 /* FIVEL( G(1-5) , ex(wn,1-5), cs12,cs13,14,15,23,24,25,34,35,45,
142 * A21,31,41,51,32,42,52,43,53,54, pop(1-5), abund) */
143 double Cooling;
144 double CoolingDeriv;
145 atom_pop5(gAr4,exAr4,cs12,cs13,cs14,cs15,cs23,cs24,cs25,cs34,cs35,
146 cs45,a12,a13,a14,a15,a23,a24,a25,a34,a35,a45,p,
147 dense.xIonDense[ipARGON][3],&Cooling , &CoolingDeriv, 0.,0.,0.,0.);
148 CoolHeavy.Ar4740 = p[1]*a12*4.20e-12;
149 CoolHeavy.Ar4711 = p[2]*a13*4.20e-12;
150 CoolHeavy.Ar2868 = p[3]*a14*6.94e-12;
151 CoolHeavy.Ar2854 = p[4]*a15*6.94e-12;
152 CoolHeavy.Ar7263 = p[3]*a24*2.74e-12;
153 CoolHeavy.Ar7171 = p[4]*a25*2.74e-12;
154 CoolHeavy.Ar7331 = p[3]*a34*2.74e-12;
155 CoolHeavy.Ar7237 = p[4]*a35*2.74e-12;
156
157 // total cooling from 5-level atom
158 CoolAdd("Ar 4",4740,Cooling);
159 thermal.dCooldT += CoolingDeriv;
160
161 /* Argon V 6435+7007,
162 * >>refer Ar5 AS Mendoza, C., & Zeippen, C. J. 1982, MNRAS, 199, 1025
163 * >>refer Ar5 CS Galavis, M. E., Mendoza, C., & Zeippen, C. J. 1995, A&AS, 111, 347
164 * POPEXC( O12,g1,g2,A21,excit,abund); result already*a21, excit in Kelvin */
165 if( phycon.te < 1e4 )
166 {
167 cs12 = 3.09f;
168 }
169 else
170 {
171 cs12 = (realnum)MIN2(4.454,0.634*phycon.te20/phycon.te03*phycon.te001*
172 phycon.te001);
173 }
174 cs13 = 0.56f;
175 cs23 = 1.65f;
176 a12 = 0.68f;
177 a13 = 6.55f;
178 a23 = 3.35f;
179
180 /* >>chng 01 mar 10, convert from 2 to 3 level atom */
181 popn3 = (realnum)(atom_pop3(9.,5.,1.,cs12,cs13,cs23,a12,a13,a23,2.055e4,3.110e4,
182 &pop2,dense.xIonDense[ipARGON][4],0.,0.,0.));
183 CoolHeavy.c7007 = pop2*a12*2.84e-12;
184 CoolHeavy.c4626 = popn3*a23*4.30e-12;
185 CoolHeavy.c2691 = popn3*a13*7.39e-12;
186
187 CoolAdd("Ar 5",7007,CoolHeavy.c7007);
188 CoolAdd("Ar 5",4626,CoolHeavy.c4626);
189 CoolAdd("Ar 5",2691,CoolHeavy.c2691);
190
191 /* add to deriv */
192 /* >>chng 01 mar 10, did not have second pair of lines included */
193 thermal.dCooldT += CoolHeavy.c7007*2.055e4*thermal.tsq1 +
194 (CoolHeavy.c4626+CoolHeavy.c2691)*5.17e4*thermal.tsq1;
195
196 /* Ar V 3P fine structure lines , A from
197 * >>refer Ar5 AS Mendoza, C. 1982, in IAU Symp. 103, Planetary
198 * >>refercon Nebulae, ed. D. R. Flower, (Dordrecht, Holland: D. Reidel Publishing Co.), 143
199 * >>refer Ar5 CS Galavis, M. E., Mendoza, C., & Zeippen, C. J. 1995, A&AS, 111, 347 */
200 cs = MIN2(3.26,26.27/(phycon.te20*phycon.te03*phycon.te01*
201 phycon.te003));
203
204 cs = MIN2(8.47,44.31/(phycon.te20/phycon.te003/phycon.te003));
205 PutCS(cs,TauLines[ipTAr8]);
206
207 cs = MIN2(1.95,7.280/(phycon.te10*phycon.te05*phycon.te005));
208 PutCS(cs,*TauDummy);
209
211
212 /* [Ar VI] 4.53 micron, cs from
213 * >>refer Ar6 CS Saraph, H. E., & Storey, P. J. 1996, A&AS, 115, 151
214 * >>chng 96 dec 11, cs should have been 6.33, caught by Simon Casassus */
215 PutCS(6.33,TauLines[ipAr06453]);
216
218
219 return;
220}
long ipTAr13
long ipTAr22
long ipAr06453
long ipTAr8
long ipTAr7
long ipTAr9
void atom_level2(const TransitionProxy &t)
void atom_level3(const TransitionProxy &t10, const TransitionProxy &t21, const TransitionProxy &t20)
double atom_pop3(double g1, double g2, double g3, double o12, double o13, double o23, double a21, double a31, double a32, double Tex12, double Tex23, realnum *pop2, double abund, double gam2, double r12, double r13)
Definition atom_pop3.cpp:10
void atom_pop5(const double g[], const double EnerWN[], double cs12, double cs13, double cs14, double cs15, double cs23, double cs24, double cs25, double cs34, double cs35, double cs45, double a21, double a31, double a41, double a51, double a32, double a42, double a52, double a43, double a53, double a54, double p[], realnum abund, double *Cooling, double *CoolingDeriv, double pump01, double pump02, double pump03, double pump04)
Definition atom_pop5.cpp:13
#define MIN2
Definition cddefines.h:761
float realnum
Definition cddefines.h:103
#define MAX2
Definition cddefines.h:782
#define DEBUG_ENTRY(funcname)
Definition cddefines.h:684
const int ipARGON
Definition cddefines.h:322
void CoolArgo(void)
Definition cool_argo.cpp:15
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition cool_etc.cpp:13
t_CoolHeavy CoolHeavy
Definition coolheavy.cpp:5
t_dense dense
Definition dense.cpp:24
t_phycon phycon
Definition phycon.cpp:6
TransitionProxy::iterator TauDummy
Definition taulines.cpp:60
TransitionList TauLines("TauLines", &AnonStates)
t_thermal thermal
Definition thermal.cpp:5
void PutCS(double cs, const TransitionProxy &t)