cloudy trunk
Loading...
Searching...
No Matches
cool_sili.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/*CoolSili compute silicon cooling */
4#include "cddefines.h"
5#include "taulines.h"
6#include "phycon.h"
7#include "dense.h"
8#include "ligbar.h"
9#include "lines_service.h"
10#include "colden.h"
11#include "embesq.h"
12#include "atoms.h"
13#include "sil.h"
14#include "cooling.h"
15
16void CoolSili(void)
17{
18 double cs,
19 cs2s2p,
20 cs2s3p,
21 cs01,
22 cs02,
23 cs12,
24 tused,
25 temp;
27 p2,
28 rate;
29 long int i;
30
31 DEBUG_ENTRY( "CoolSili()" );
32
33 /*>>refer Si I cs Hollenbach, D. & McKee, C.F. 1989, ApJ, 342, 306 */
34 /* >>chng 03 nov 15, add these lines */
35 /* the Si I 25.2 micron line */
36 /* rates are said to be ok over range 30 - 3000K */
37 tused = MAX2( 30. , phycon.te );
38 tused = MIN2( 3000. , phycon.te );
39 tused /= 100.;
40
41 /* derive their rate, then convert to collision strength */
42 rate = (realnum)(7.2e-9 * dense.eden +
43 /* >>chng 05 jul 05, eden to cdsqte */
44 /*3.5e-10*pow(tused, -0.03 )*dense.xIonDense[ipHYDROGEN][0]) / dense.eden);*/
45 3.5e-10*pow(tused, -0.03 )*dense.xIonDense[ipHYDROGEN][0] );
47
48 /* the Si I 56.6 micron line */
49 rate = (realnum)(2.2e-8 * dense.eden +
50 /* >>chng 05 jul 05, eden to cdsqte */
51 /*5.0e-10*pow(tused, 0.17 )*dense.xIonDense[ipHYDROGEN][0]) / dense.eden);*/
52 5.0e-10*pow(tused, 0.17 )*dense.xIonDense[ipHYDROGEN][0] );
54
55 rate = (realnum)(7.2e-9 * dense.eden +
56 /* >>chng 05 jul 05, eden to cdsqte */
57 /*1.7e-10*pow(tused, 0.17 )*dense.xIonDense[ipHYDROGEN][0]) / dense.eden);*/
58 1.7e-10*pow(tused, 0.17 )*dense.xIonDense[ipHYDROGEN][0] );
59 (*(*TauDummy).Hi()).g() = (*TauLines[ipSi1_68m].Hi()).g();
60 LineConvRate2CS( *TauDummy , rate );
61 /* this says that line is a dummy, not real one */
62 (*(*TauDummy).Hi()).g() = 0;
63
64 /* solve model atom for Si I */
66
67 /* Si I 2518 */
70
71 /* Si I 2215 */
74
75 /* Silicon II 35 micron */
76 /* hydrogen collision strength from
77 * >>referold si2 cs Tielens, A.G.G., & Hollenbach, D. 1985, ApJ, 291, 722
78 * they give rate de-ex 6.5E-10 cm^3 s^-1, indep of temp */
79 /*cs += 6.5e-10/dense.cdsqte*4.*dense.xIonDense[ipHYDROGEN][0];*/
80 /* >> chng 05 may 21, GS, rate with hydrogen is updated from 2005, ApJ, 620,537*/
81 /* >>refer si2 cs Barinovs, G., van Hemert, M., Krems, R. & Dalgarno, A. 2005, ApJ, 620, 537 */
82 /* original data only extend up to 2000K
83 * following is valid up to 2000K */
84 temp = MIN2(2e3, phycon.te);
85 cs = 1e-10*(3.9436853+ 0.11176758*pow(temp, 0.55762129));
86 /* for high temperatures simply extend the power law */
87 if( phycon.te>2e3 )
88 {
89 cs *= pow(phycon.te/2e3, 0.55762129);
90 }
91 /* above was rate coef, convert to cs and mult by den of colliders */
92 cs *= 4.*dense.xIonDense[ipHYDROGEN][0]/dense.cdsqte;
93
94 /* add on elec cs from
95 *>>refer si2 cs Dufton, P.L., & Kingston, A.E. 1994, At. Data Nucl. Data Tables,
96 *>>refercon 57, 273 */
97 cs += 5.77;
98
100
101 static vector< pair<TransitionList::iterator,double> > Si2Pump;
102 Si2Pump.reserve(32);
103
104 /* one time initialization if first call */
105 if( Si2Pump.empty() )
106 {
107 // set up level 1 pumping lines
108 pair<TransitionList::iterator,double> ppa( TauLines.begin()+ipT1808, 1./6. );
109 Si2Pump.push_back( ppa );
110 pair<TransitionList::iterator,double> ppb( TauLines.begin()+ipT1527, 2./3. );
111 Si2Pump.push_back( ppb );
112 pair<TransitionList::iterator,double> ppc( TauLines.begin()+ipT1305, 2./3. );
113 Si2Pump.push_back( ppc );
114 pair<TransitionList::iterator,double> ppd( TauLines.begin()+ipT1260, 1./6. );
115 Si2Pump.push_back( ppd );
116 // set up level 2 pumping lines
117 for( i=0; i < nWindLine; ++i )
118 {
119 /* don't test on nelem==ipIRON since lines on physics, not C, scale */
120 if( (*TauLine2[i].Hi()).nelem() == 14 && (*TauLine2[i].Hi()).IonStg() == 2 )
121 {
122# if 0
123 DumpLine( TauLine2.begin()+i );
124# endif
125 double branch_ratio;
126 // the branching ratios used here ignore cascades via intermediate levels
127 // usually the latter are much slower, so this should be reasonable
128 if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(2.) ) )
129 branch_ratio = 2./3.; // 2S upper level
130 else if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(6.) ) )
131 branch_ratio = 1./2.; // 2P upper level
132 else if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(10.) ) )
133 branch_ratio = 1./6.; // 2D upper level
134 else
136 pair<TransitionList::iterator,double> pp2( TauLine2.begin()+i, branch_ratio );
137 Si2Pump.push_back( pp2 );
138 }
139 }
140 }
141
142 /* now sum pump rates */
143 double pump_rate = 0.;
144 vector< pair<TransitionList::iterator,double> >::const_iterator si2p;
145 for( si2p=Si2Pump.begin(); si2p != Si2Pump.end(); ++si2p )
146 {
147 const TransitionList::iterator t = si2p->first;
148 double branch_ratio = si2p->second;
149 pump_rate += (*t).Emis().pump()*branch_ratio;
150# if 0
151 dprintf( ioQQQ, "Si II %.3e %.3e\n",
152 (*t).WLAng , (*t).Emis().pump()*branch_ratio );
153# endif
154 }
155
156 /*atom_level2(TauLines[ipTSi35]);*/
157 /*AtomSeqBoron compute cooling from 5-level boron sequence model atom */
158 /* >>refer s4 cs Tayal, S.S., 2000, ApJ 530, 1091*/
159 /*>>refer si2 cs Dufton, P.L., & Kingston, A.E., 1991, MNRAS, 248, 827*/
160 /*>>refer si2 as Dufton, P.L., Keenan, F.P., Hibbert, A.,
161 *>>rerercon Stafford, R.P., Byrne, P.B., & Agnew, D., 1991, MNRAS, 253, 474*/
168 0.534 , 4.51 , 1.67 , 6.94 ,
169 pump_rate ,"Si 2");
170 /*fprintf(ioQQQ,"DEBUG Si2\t%.2f\t%.5e\t%.5e\t%.5e\n",
171 fnzone,
172 phycon.te,
173 TauLines[ipTSi35].cool(), dense.eden);*/
174 for( i=0; i < 5; i++ )
175 {
176 /* pops and column density for SiII atom */
177 colden.Si2Pops[i] = (realnum)atoms.PopLevels[i];
178 }
179
180 /* Si II 1808, permitted resonance line,
181 * osc str from
182 * >>refer si2 as morton et al 88 (apj sup);
183 * all si ii collision data (following 4 lines) are from
184 * >>refer si2 cs Dufton, P.L., & Kingston, A.E. 1991, MNRAS, 248, 827
185 * following assumes there is typo in table 1 of dufton and kingston
186 * and that they meant 2s 2p^2 ^2D instead of 3d */
187
188 /* Si II 1814 */
189 PutCS(13.01,TauLines[ipT1808]);
191
192 /* Si II 1531 */
193 PutCS(3.61,TauLines[ipT1527]);
195
196 /* Si II 1307.7 */
197 PutCS(2.89,TauLines[ipT1305]);
199
200 /* Si II 1263.3 */
201 PutCS(12.25,TauLines[ipT1260]);
203
204 /* permitted Si III 1206.5, collision strength from
205 * >>refer si3 cs Callaway, J. 1994, At. Data Nucl. Data Tables, 57, 9 */
206 cs = MIN2(7.0,1.442*phycon.te10*phycon.te03*phycon.te03/
207 phycon.te01);
210
211 /* Si III] 1895, CS=
212 * >>refer si3 cs Dufton, P.L., & Kingston, A.E. 1989, MNRAS, 241, 209
213 * >>refer si3 cs Dufton, P.L., & Kingston, A.E. 1994, ADNDT, 57, 273
214 * grnd 3s^2 ^1S, upper lev 3p ^3P^o j=0,1,2 */
215 /* >>refer si3 as Callegari, F., & Trigueiros, A.G., 1998, ApJS, 119, 181
216 * >>chng 00 nov 01, A about 3x larger than before */
217 cs = 106./(phycon.te10*phycon.te10*phycon.te10*phycon.te02);
218 /* >>chng 01 sep 09, AtomSeqBeryllium will reset this to 1/3 so critical density correct */
220 AtomSeqBeryllium(1.8,3.6,10.4,TauLines[ipT1895],.013);
221 embesq.em1895 = (realnum)(atoms.PopLevels[3]*0.013*1.05e-11);
222
223 /* Si IV 1394, 1403, data from
224 * >>refer si4 as Mendoza, C. 1982, in Planetary Nebulae, IAU Symp No. 103,
225 * >>refercon ed by D.R. Flower, (D. Reidel: Holland), 143
226 * cs from
227 * >>refer si4 cs Dufton, P.L., & Kingston, A.E. 1987, J.Phys. B, 20, 3899 */
228 cs = 6.37*phycon.te10;
229 PutCS(cs*0.667,TauLines[ipT1394]);
230 PutCS(cs*0.333,TauLines[ipT1403]);
231 PutCS(1.0,*TauDummy);
233
234 /* Si VI 1.96 micron
235 * >>referold si6 cs Saraph, H.E. & Tully, J.A. 1994, A&AS, 107, 29
236 * >>chng 96 jul 16 had been constant */
237 /*cs = MIN2(0.43,0.0448*phycon.te20/phycon.te003/phycon.te003);*/
238 /*cs = MAX2(0.3,cs);*/
239 /* >>refer si6 cs Berrington,K.A.,Saraph, H.E. & Tully, J.A. 1998, A&AS, 124, 161*/
240 /* >>chng 06 jul 11-Humeshkar Nemala*/
241 if(phycon.te< 1.43E5)
242 {
243 cs = (realnum)(0.0207*(phycon.te30/phycon.te04)*phycon.te0001);
244 }
245 else
246 {
247 cs = (realnum)(3.9042/((phycon.te20/phycon.te02)*phycon.te001*phycon.te0003));
248 }
251
252 /* Si VII 2148- OIII like,
253 * >>refer si7 cs Kafatos, M., & Lynch, J.P. 1980, ApJS, 42, 611 */
254 sil.c2148 =
255 atom_pop2(0.4,9.,5.,15.,6.7e4,dense.xIonDense[13][6])*9.26e-12;
256 CoolAdd("Si 7",2148,sil.c2148);
257
258 /* Si VII ground term, 2.48, 6.51 microns
259 * cs
260 * >>refer si7 cs Butler, K., & Zeippen, C.J. 1994, A&AS, 108, 1 */
261 /* more recent paper, for solar case, which does not give thermal averaged
262 * collision strengths, is
263 * >>refer Si7 data Bhatia, A.K., & Landi, E. 2003, ApJ, 585, 587-597 */
266 cs = MIN2(0.217,0.0904*phycon.te05*phycon.te03/phycon.te003/
267 phycon.te001);
269
270 cs = MIN2(0.70,8.79e-2*phycon.te10*phycon.te10/phycon.te02);
272
273 cs = MIN2(0.20,9.751e-3*phycon.te20*phycon.te03*phycon.te03/
274 phycon.te003);
275 PutCS(cs,*TauDummy);
276
278
279 /* Si 8 1446, 3727-like,
280 * >>refer si8 cs Kafatos, M., & Lynch, J.P. 1980, ApJS, 42, 611 */
281 sil.c1446 =
282 atom_pop2(0.4,4.,10.,1.,9.97e4,dense.xIonDense[13][7])*
283 1.39e-11;
284 CoolAdd("Si 8",1446,sil.c1446);
285
286 /* Si 9 1985, 2150
287 * cs, As from
288 * >>refer si9 cs Aggarwal, K.M. 1983, J.Phys. B, 16, L59
289 * >>refer si9 as Baluja, K.L. 1985, J.Phys. B, 18, L413 */
290 sil.c949 =
291 atom_pop3(9.,5.,1.,0.5913,0.0757,0.225,26.3,214.,5.16,
292 7.62e4,7.902e4,&p2,dense.xIonDense[13][8],0.,0.,0.)*214.*2.096e-11;
293 sil.c1815 = sil.c949*1.912*0.0516;
294 sil.c1985 = p2*26.3*1.0e-11;
295 CoolAdd("Si 9",949,sil.c949);
296 CoolAdd("Si 9",1815,sil.c1815);
297 CoolAdd("Si 9",1985,sil.c1985);
298
299 /* Si 9 3P fine structure lines, A=
300 * >>refer si9 as Baluja, K.L. 1985, J.Phys. B, 18, L413
301 * 2.583, 3.9microns
302 * CS=
303 * >>refer si9 cs Lennon, D.J. Burke, V.M. 1994, A&AS, 103, 273 */
304 cs01 = MIN2(0.98,28.51/(phycon.te10*phycon.te10*phycon.te10*
305 phycon.te10/phycon.te03*phycon.te003*phycon.te001*phycon.te001));
306
307 cs12 = MIN2(2.7,81.21/(phycon.te10*phycon.te10*phycon.te10*
308 phycon.te10/phycon.te01/phycon.te01/phycon.te001/phycon.te001));
309
310 cs02 = MIN2(0.70,19.67/(phycon.te10*phycon.te10*phycon.te10*
311 phycon.te10/phycon.te03*phycon.te001));
312
313 PutCS(cs01,TauLines[ipTSi4]);
314 PutCS(cs12,TauLines[ipTSi3]);
315 PutCS(cs02,*TauDummy);
316
318
319 /* 5S0 - 3P, cs from, A=guess
320 * >>refer si9 cs Aggarwal, K.M. 1984, ApJS, 54, 1 */
321 sil.c691 = atom_pop2(40.6/phycon.sqrte*phycon.te10,9.,5.,
322 1e4,2.081e5,dense.xIonDense[13][8])*2.88e-11;
323 CoolAdd("Si 9",691,sil.c691);
324
325 /* Si 10 606, actually three lines clumped together, ll 621.1, 611.7, 598.6
326 * atomic data
327 * >>refer si10 cs Saha, H.P., & Trefftz, E. 1982, A&A, 116, 224 */
328 /* >>chng 03 sep 27, rm expion move to simple two level with rt */
329 /*CoolHeavy.c606 =
330 0.10*1.42e-16*expion(2.4e5,dense.xIonDense[13][10-1]);
331 CoolAdd("Si10",606,CoolHeavy.c606);*/
334
335 /* Si 10 1.43m, A from
336 * >>refer si10 as Chandra, S. 1982, SoPh, 75, 133
337 * cs from
338 * >>refer si10 cs Zhang, H.L., Graziani, M., Pradhan, A.K. 1994, A&A, 283, 319 */
339 if( phycon.te <= 40500. )
340 {
341 cs = 0.190*phycon.te20/phycon.te001;
342 }
343 else
344 {
345 cs = 24.93/(phycon.te20*phycon.te03*phycon.te01*phycon.te003*
346 phycon.te003);
347 }
350
351 /* SI 11 582.9, 1909-LIKE, CS=
352 * >>refer si11 cs Berrington, K.A., Burke, P.G., Dufton, P.L., Kingston, A.E.
353 * >>refercon 1985, At. Data Nucl. Data Tables, 33, 195
354 * A=
355 * >>refer si11 as Muhlethaler, H.P., & Nussbaumer, H. 1976, A&A 48, 109 */
356 sil.c583 =
357 atom_pop2(0.10,1.,9.,1e5,2.47e5,dense.xIonDense[13][11-1])*
358 3.4e-11;
359 CoolAdd("Si11",583,sil.c583);
360
361 /* li seq 2s2p and 2s3p, Si 12 499, 521
362 * >>refer si12 cs Cochrane, D.M., & McWhirter, R.W.P. 1983, PhyS, 28, 25 */
363 ligbar(14,TauLines[ipTSi499],TauLines[ipTSi41],&cs2s2p,&cs2s3p);
364 PutCS(cs2s2p,TauLines[ipTSi499]);
365 PutCS(cs2s2p*0.5,TauLines[ipTSi521]);
366 PutCS(1.0,*TauDummy);
368
369 PutCS(cs2s3p,TauLines[ipTSi41]);
371 return;
372}
void ligbar(long int ized, const TransitionProxy &t2s2p, const TransitionProxy &t2s3p, double *cs2s2p, double *cs2s3p)
long ipTSi25
long ipSi2_2334
long ipSi10143
long ipSi2_2336
long ipTSi65
long ipSi2_2329
long ipT1394
long ipT1207
long ipSi1_68m
long ipTSi41
long ipT1305
long ipSi2_2350
long ipSii2215
long ipT1527
long ipT1403
long ipTSi521
long ipTSi4
long ipT1260
long ipSii2518
long ipSi619
long ipSi2_2344
long ipT1895
long ipSi10_606
long ipTSi35
long ipTSi3
long ipSi1_130m
long ipTSi499
long ipT1808
void atom_level2(const TransitionProxy &t)
void atom_level3(const TransitionProxy &t10, const TransitionProxy &t21, const TransitionProxy &t20)
double atom_pop2(double omega, double g1, double g2, double a21, double bltz, double abund)
Definition atom_pop2.cpp:9
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 AtomSeqBeryllium(double cs12, double cs13, double cs23, const TransitionProxy &t, double a30)
void AtomSeqBoron(const TransitionProxy &t10, const TransitionProxy &t20, const TransitionProxy &t30, const TransitionProxy &t21, const TransitionProxy &t31, const TransitionProxy &t41, double cs40, double cs32, double cs42, double cs43, double pump_rate, const char *chLabel)
t_atoms atoms
Definition atoms.cpp:5
FILE * ioQQQ
Definition cddefines.cpp:7
#define MIN2
Definition cddefines.h:761
int dprintf(FILE *fp, const char *format,...)
Definition service.cpp:1009
float realnum
Definition cddefines.h:103
#define MAX2
Definition cddefines.h:782
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition cddefines.h:812
NORETURN void TotalInsanity(void)
Definition service.cpp:886
const int ipHYDROGEN
Definition cddefines.h:305
#define DEBUG_ENTRY(funcname)
Definition cddefines.h:684
long nWindLine
Definition cdinit.cpp:19
TransitionProxy::iterator iterator
Definition transition.h:280
t_colden colden
Definition colden.cpp:5
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition cool_etc.cpp:13
void CoolSili(void)
Definition cool_sili.cpp:16
t_dense dense
Definition dense.cpp:24
t_embesq embesq
Definition embesq.cpp:5
t_phycon phycon
Definition phycon.cpp:6
t_sil sil
Definition sil.cpp:5
static double * g
Definition species2.cpp:28
TransitionList TauLine2("TauLine2", &AnonStates)
TransitionProxy::iterator TauDummy
Definition taulines.cpp:60
TransitionList TauLines("TauLines", &AnonStates)
void LineConvRate2CS(const TransitionProxy &t, realnum rate)
void DumpLine(const TransitionProxy &t)
void MakeCS(const TransitionProxy &t)
void PutCS(double cs, const TransitionProxy &t)