cloudy trunk
Loading...
Searching...
No Matches
cool_nitr.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/*CoolNitr evaluate total cooling due to nitrogen */
4#include "cddefines.h"
5#include "taulines.h"
6#include "dense.h"
7#include "phycon.h"
8#include "ligbar.h"
9#include "thermal.h"
10#include "lines_service.h"
11#include "embesq.h"
12#include "atoms.h"
13#include "cooling.h"
14#include "nitro.h"
15/* xNI_coll_stren: Author: Terry Yun 2006 */
16/* This routine interpolates the collision strength of NI
17 * We are only interested in the first 5 levels, therefore there are 10 transitions.
18 * Used polynomial fit, eqn: CS = a*t+b*t^1.5+c*t^0.5
19 * The range of temp is 0 - 50,000 K */
20/* #define PRINT */
21static const int N1_SIZE = 10;
22
23static const double aNI[N1_SIZE] = {2.755e-5,4.123e-5,7.536e-6,1.486e-5,4.516e-5,
24 -2.935e-6,4.000e-6,3.751e-6,-2.176e-6,1.024e-5};
25static const double bNI[N1_SIZE] = {-8.150e-8,-1.220e-7,-2.226e-8,-4.390e-8,-1.130e-7,
26 8.000e-9,-1.1447e-8,-1.061e-8,5.610e-9,-3.227e-8};
27static const double cNI[N1_SIZE] = {2.140e-4,3.272e-4,-4.944e-6,3.473e-6,-8.772e-4,
28 1.654e-3,1.675e-3,1.123e-3,3.867e-3,3.376e-4};
29
30static double NI[6][6][3]; /* coefficients a b c into array */
31
32/*xNI_coll_stren interpolate the collision strength of NI */
33STATIC double xNI_coll_stren(int ipLo, int ipHi)
34{
35 /* incorporating the N0 collision strengths give in
36 *>>refer N1 cs Tayal, S.S., 2006, ApJS, 163, 207 */
37
38 double CS; /* collision strength */
39
40 // Tayal's energy index IS NOT IN INCREASING ENERGY ORDER
41 // call routine with proper energy order, swap it around
42 // to Tayal order
43 int ipLoTayal=-1, ipHiTayal=-1;
44
45 /* Invalid entries returns '-1':the initial indices are smaller than the final indices */
46 if(ipLo >= ipHi)
47 return( -1. );
48
49 /* Invalid returns '-1': the indices are greater than 5 or smaller than 0 */
50 if(ipLo < 1 || ipHi > 5)
51 return( -1. );
52
53 int ipTayalOrder[6]={0,1,3,2,4,5};
54 ipLoTayal = ipTayalOrder[ipLo];
55 ipHiTayal = ipTayalOrder[ipHi];
56 // special case of 2-3, must swap order again
57 if( ipLo==2 && ipHi==3 )
58 {
59 ipLoTayal = 2;
60 ipHiTayal = 3;
61 }
62
63 static bool lgMustInit = true;
64 if( lgMustInit )
65 {
66 lgMustInit = false;
67 /* assigning array initially to zero */
68 for(long i=0; i<6; i++)
69 {
70 for(long j=0; j<6; j++)
71 {
72 set_NaN(NI[i][j][0]); /* coeff a */
73 set_NaN(NI[i][j][1]); /* coeff b */
74 set_NaN(NI[i][j][2]); /* coeff c */
75 }
76 }
77
78 /* reading coeffs into 3D array */
79 /* The index is in physics scale */
80 int index = 0;
81 for(int i=1; i<6; i++)
82 {
83 for(int j=i+1; j<6; j++)
84 {
85 NI[i][j][0] = aNI[index];
86 NI[i][j][1] = bNI[index];
87 NI[i][j][2] = cNI[index];
88 index++;
89 }
90 }
91 }
92
93# ifdef PRINT
94 /* physical index goes from 1 to 5 */
95 for(long i=1; i<6; i++)
96 {
97 for(long j=i+1; j<6; j++)
98 {
99 printf("NI %i%i a:%e ", i, j, NI[i][j][0]);
100 printf("%i%i b:%e\n", i, j, NI[i][j][1]);
101 /* printf("%i%i c:%lf\n", i, j, NI[i][j][2]); */
102 }
103 }
104# endif
105
106 double temp_max = 50e3;
107 double temp_min = 0;
108 double temp = phycon.te;
109 temp = MAX2(temp, temp_min); /* return lager temp */
110 temp = MIN2(temp, temp_max); /* return smaller temp */
111 /* eqn: CS = a*t+b*t^1.5+c*t^0.5 */
112 CS = NI[ipLoTayal][ipHiTayal][0]*phycon.te + NI[ipLoTayal][ipHiTayal][1]*phycon.te32 +
113 NI[ipLoTayal][ipHiTayal][2]*phycon.sqrte;
114
115 return CS;
116}
117
118
119void CoolNitr(void)
120{
121 realnum p2;
122 double a21,
123 a31,
124 a32,
125 cs,
126 cs2s2p,
127 cs2s3p,
128 cs21,
129 cs31,
130 cs32,
131 p3;
132 long int i;
133
134 double a12,
135 a13,
136 a14,
137 a15,
138 a23,
139 a24,
140 a25,
141 a34,
142 a35,
143 a45,
144 cs12,
145 cs13,
146 cs14,
147 cs15,
148 cs23,
149 cs24,
150 cs25,
151 cs34,
152 cs35,
153 cs45;
154
155 double pop[5];
156
157 DEBUG_ENTRY( "CoolNitr()" );
158
159 static const double gN1[5]={4.,6.,4.,2.,4.};
160 static const double exN1[4]={19224.464,8.713,9605.74,0.386};
161
162 /* trans prob from
163 * >>refer n1 as Froese Fischer, C. & Tachiev, G. 2004, ADNDT, 87, 1
164 */
165 // 5200, g_up = 6, cs=0.337 @ 1e4K in Tayal06,
166 // NB - his J levels in ^2D are not in energy order
167 cs12 = xNI_coll_stren(1, 2);
168 a12 = 7.57e-6;
169 double a12Tot = a12 + atoms.d5200r;
170
171 // 5198, g_up = 4, cs=0.224 @ 1e4K in Tayal06
172 // NB - his J levels in ^2D are not in energy order
173 cs13 = xNI_coll_stren(1, 3);
174 a13 = 2.03e-5;
175 double a13Tot = a13 + atoms.d5200r;
176
177 // 3466.543 0.055 @ 1e4K, g_up = 2
178 cs14 = xNI_coll_stren(1, 4);
179 a14 = 2.61e-3;
180
181 // 3466.497 0.109 @ 1e4K, g_up = 4
182 cs15 = xNI_coll_stren(1,5);
183 a15 = 6.50e-3;
184
185 /* this is fraction of 2D excitations that emit a photon in the 5200 multiplet
186 * this is used for collisional quenching in prt lines routine
187 * true line emission is in numerator while all loss terms are in
188 * denominator */
189 nitro.quench_5200 = (a12+a13) / ((a12Tot+a13Tot) + (cs12 + cs13) * dense.cdsqte);
190
191 // 0.257 @ 1e4K, g_up = 4
192 cs23 = xNI_coll_stren(2, 3);
193 a23 = 1.07e-8;
194
195 // 10398.2 0.139 @ 1e4K, g_up = 2
196 cs24 = xNI_coll_stren(2, 4);
197 a24 = 3.45e-2;
198
199 // 10397.7 0.366 @ 1e4K, g_up = 4
200 cs25 = xNI_coll_stren(2, 5);
201 a25 = 6.14e-2;
202
203 // 10407.6 0.141 @ 1e4K, g_up = 2
204 cs34 = xNI_coll_stren(3, 4);
205 a34 = 5.27e-2;
206
207 // 10407.2 0.195 @ 1e4K, g_up = 4
208 cs35 = xNI_coll_stren(3, 5);
209 a35 = 2.75e-2;
210
211 // 0.123 @ 1e4K, g_up = 4
212 cs45 = xNI_coll_stren(4, 5);
213 a45 = 9.50e-17;
214
215 // FUV allowed and intercombination lines that pump [NI]
216 // the branching ratios used below are based on
217 // >>refer n1 as Froese Fischer, C. & Tachiev, G. 2004, ADNDT, 87, 1
218 //
219 // the colission strengths are taken from
220 // >>refer n1 cs Tayal, S. S., 2006, ApJS, 163, 207
221 // the fits are based on data between 500K and 50 kK
222 //
223 // update rates for the driving transitions
224 cs = exp(-11.3423 + 0.8379*min(phycon.alnte,10.82));
227
228 static const double csN1_a[NI_NDP] = {
229 -12.3982, -9.4523, -12.5580, -10.8813, -13.6532, -9.9035, -11.4470, -5.4776, -6.3304
230 };
231 static const double csN1_b[NI_NDP] = {
232 0.7458, 0.3865, 0.7330, 0.6853, 0.7712, 0.3919, 0.6734, 0.1789, 0.1966
233 };
234
235 for( i=0; i < NI_NDP; ++i )
236 {
237 cs = exp(csN1_a[i] + csN1_b[i]*min(phycon.alnte,10.82));
238 PutCS( cs, TauLines[ipNI_pumpDirect[i]] );
240 }
241 // units of pump rate s-1
242 double RPI = TauLines[ipNI_pumpIndirect].Emis().pump();
243 double RPD0 = TauLines[ipNI_pumpDirect[0]].Emis().pump();
244 double RPD1 = TauLines[ipNI_pumpDirect[1]].Emis().pump();
245 double RPD2 = TauLines[ipNI_pumpDirect[2]].Emis().pump();
246 double RPD3 = TauLines[ipNI_pumpDirect[3]].Emis().pump();
247 double RPD4 = TauLines[ipNI_pumpDirect[4]].Emis().pump();
248 double RPD5 = TauLines[ipNI_pumpDirect[5]].Emis().pump();
249 double RPD6 = TauLines[ipNI_pumpDirect[6]].Emis().pump();
250 double RPD7 = TauLines[ipNI_pumpDirect[7]].Emis().pump();
251 double RPD8 = TauLines[ipNI_pumpDirect[8]].Emis().pump();
252 // correct for removal of photons that go straight back to ground
253 // beta is the branching ratio directly back to ground
254 // for pumping lines not listed below, beta is less than 0.01
255 double beta = 0.7955;
256 double Premove = TauLines[ipNI_pumpIndirect].Emis().Pesc() +
257 TauLines[ipNI_pumpIndirect].Emis().Pelec_esc() + TauLines[ipNI_pumpIndirect].Emis().Pdest();
258 RPI *= (1.-beta)/(1.-beta*(1.-Premove));
259 beta = 0.1384;
260 Premove = TauLines[ipNI_pumpDirect[0]].Emis().Pesc() +
261 TauLines[ipNI_pumpDirect[0]].Emis().Pelec_esc() + TauLines[ipNI_pumpDirect[0]].Emis().Pdest();
262 RPD0 *= (1.-beta)/(1.-beta*(1.-Premove));
263 // the branching ratios to the lowest 4 excited levels are calculated in the low-density
264 // limit (i.e. no collisions are treated) and exclude transitions straight back to ground
265 // from the upper level of the driving line
266 double pump14 = 0.0113*RPI + 0.0239*RPD0 + 0.0090*RPD1 + 0.1617*RPD2 + 0.0167*RPD3 + 0.4404*RPD4;
267 double pump15 = 0.0112*RPI + 0.0265*RPD0 + 0.6253*RPD1 + 0.5108*RPD2 + 0.0824*RPD3 + 0.2588*RPD4;
268 double pump13 = 0.3441*RPI + 0.8621*RPD0 + 0.0233*RPD1 + 0.0895*RPD2 + 0.1068*RPD3 + 0.1644*RPD4;
269 double pump12 = 0.0417*RPI + 0.0468*RPD0 + 0.3408*RPD1 + 0.2328*RPD2 + 0.7937*RPD3 + 0.1338*RPD4;
270
271 pump14 += 0.4881*RPD5 + 0.0876*RPD6 + 0.0450*RPD7 + 0.1777*RPD8;
272 pump15 += 0.1569*RPD5 + 0.0484*RPD6 + 0.2240*RPD7 + 0.0854*RPD8;
273 pump13 += 0.2908*RPD5 + 0.8397*RPD6 + 0.0694*RPD7 + 0.7369*RPD8;
274 pump12 += 0.0623*RPD5 + 0.0238*RPD6 + 0.6615*RPD7 + 0.0000*RPD8;
275
276 // estimate of pumping contribution to intensity of [NI] 5199
277 nitro.pump5199 = (pump12+pump13+0.9710*pump14+0.9318*pump15) * nitro.quench_5200 *
278 dense.xIonDense[ipNITROGEN][0] * 3.82e-12;
279
280 /**** Terry's addition, recombination from N+ **************/
281 /* rate coefficient (cm3 s-1) from Table 3 of
282 *>>refer NI rec Pequignot, D., Petijean, P. & Boisson, C. 1991, A&A, 251, 680 */
283 double eff_recrate_2D = 1.108e-13 * pow(phycon.te*1e-4, -0.6085) /
284 (1. - 0.0041 * pow(phycon.te*1e-4, -0.3975) );
285 double eff_recrate_2P = 0.659e-13 * pow(phycon.te*1e-4, -0.6158);
286 double fac_n1;
287 if( dense.xIonDense[ipNITROGEN][0] > 0. )
288 fac_n1 = dense.eden * dense.xIonDense[ipNITROGEN][1] / dense.xIonDense[ipNITROGEN][0];
289 else
290 fac_n1 = 0.;
291
292 // assume levels are populated according to statistical weight
293 double rec14 = eff_recrate_2P * fac_n1 * 2./6.;
294 double rec15 = eff_recrate_2P * fac_n1 * 4./6.;
295 double rec13 = eff_recrate_2D * fac_n1 * 4./10.;
296 double rec12 = eff_recrate_2D * fac_n1 * 6./10.;
297
298 // estimate of recombination contribution to intensity of [NI] 5199
299 nitro.rec5199 = (rec12+rec13+0.9710*rec14+0.9318*rec15) * nitro.quench_5200 *
300 dense.xIonDense[ipNITROGEN][0] * 3.82e-12;
301
302 pump14 += rec14;
303 pump15 += rec15;
304 pump13 += rec13;
305 pump12 += rec12;
306
307 double Cooling , CoolingDeriv;
308 atom_pop5(gN1,exN1,cs12,cs13,cs14,cs15,cs23,cs24,cs25,cs34,cs35,
309 cs45,a12Tot,a13Tot,a14,a15,a23,a24,a25,a34,a35,a45,pop,
310 dense.xIonDense[ipNITROGEN][0], &Cooling , &CoolingDeriv ,
311 pump12 , pump13 , pump14 , pump15 );
312
313 nitro.xN5200 = pop[1]*a12*3.818e-12;
314 nitro.xN5198 = pop[2]*a13*3.821e-12;
315 nitro.xN3467 = pop[3]*a14*5.729e-12;
316 nitro.xN3466 = pop[4]*a15*5.729e-12;
317 nitro.xN10398 = pop[3]*a24*1.910e-12;
318 nitro.xN10397 = pop[4]*a25*1.910e-12;
319 nitro.xN10408 = pop[3]*a34*1.908e-12;
320 nitro.xN10407 = pop[4]*a35*1.908e-12;
321
322 // population of excited NI - used in ionization balance routines
323 atoms.p2nit = (realnum)(pop[1]+pop[2])/SDIV(dense.xIonDense[ipNITROGEN][0]);
324
325 // total cooling from 5-level system
326 thermal.dCooldT += CoolingDeriv;
327 CoolAdd("N 1",5199, Cooling );
328
329 /* N I 1200, cs from trans probability */
330 PutCS(4.1,TauLines[ipT1200]);
332
333 /* N II 1084, cs from trans prob */
334 PutCS(5.5,TauLines[ipT1085]);
336
337 /* [N II] coll data from
338 * >>referold n2 cs Stafford, R.P., Bell, K.L, Hibbert, A. & Wijesundera, W.P.,
339 * >>rereroldcon 1994, MNRAS 268, 816,
340 * at 10,000K (v weak T dep)
341 * >>chng 00 dec 11, to Lennon & Burke
342 * >>referold n2 cs Lennon, D.J., & Burke, V.M., 1994, A&AS, 103, 273-277
343 * transit prob from
344 * >>referold n2 as Nussbaumer, H., & Rusca, C. 1979, A&A, 72, 129
345 * >>chng 00 dec 11, to Lennon & Burke cs
346 *>>refer n2 as Froese Fischer, C., & Tachiev, G. 2004, At. Data Nucl. Data Tables, 87, 1
347 */
348 a21 = 3.889e-3;
349 a31 = 0.03140;
350 a32 = 1.136;
351 /* >>chng 02 may 02, put in option to switch between Lennon Burke and Stafford et al. ,
352 * default state of this var is true */
357 cs21 = 2.722;
358 cs31 = 0.3162;
359 cs32 = 0.806;
360
361 /* POP3( G1,G2,G3, O12, O13, O23, A21, A31, A32,*/
362 p3 = atom_pop3( 9.,5.,1., cs21, cs31, cs32, a21, a31, a32 ,
363 /* E12,E23,P2,ABUND,GAM2) */
364 21955.,24982.,&p2,dense.xIonDense[ipNITROGEN][1],0.,0.,0.);
365
366 nitro.c5755 = p3*a32*3.46e-12;
367
368 nitro.c6584 = p2*a21*3.03e-12;
369 thermal.dCooldT += nitro.c6584*(2.2e4*thermal.tsq1 - thermal.halfte);
370 CoolAdd("N 2",5755,nitro.c5755);
371 CoolAdd("N 2",6584,nitro.c6584);
372
373 /* nitro.xN2_A3_tot is fraction of excitations that produce a photon
374 * and represents the correction for collisiona deexcitation */
375 nitro.xN2_A3_tot = (a31+a32) /(a31+a32 + (cs31+cs32)/1.*dense.cdsqte );
376 ASSERT( nitro.xN2_A3_tot <= 1. );
377
378 /* N II fine structure lines, */
379 /* >>chng 00 dec 11, to Lennon & Burke CS
380 * >>refer n2 cs Hudson, C.E. & Bell, K.L. 2004, MNRAS, 348, 1275 and A&A, 430, 725
381 */
382 cs21 = 0.431;
383 cs32 = 1.15;
384 cs31 = 0.273;
385
386 PutCS(cs21,TauLines[ipT205]);
387 PutCS(cs32,TauLines[ipT122]);
388 PutCS(cs31,*TauDummy);
390
391 /* N II 2140, data
392 * >>referold n2 cs Stafford, R.P., Bell, K.L, Hibbert, A. & Wijesundera, W.P. 1994, MNRAS, 268, 816
393 * >>referold n2 cs Lennon, D.J., & Burke, V.M., 1994, A&AS, 103, 273-277
394 * A from
395 * >>referold n2 as Brage, T., Hibbert, A., Leckrone, D.S. 1997, ApJ, 478, 423
396 * >>refer n2 as Froese Fischer, C., & Tachiev, G. 2004, At. Data Nucl. Data Tables, 87, 1
397 * >>refer n2 cs Hudson, C.E. & Bell, K.L. 2004, MNRAS, 348, 1275 and A&A, 430, 725
398 */
399 cs21 = 1.125;
400
401 PutCS(cs21,TauLines[ipT2140]);
403
404 /* N III 989.8, cs from
405 * >>refer N3 cs Blum, R.D., & Pradhan, A.K. 1992, ApJS 80, 425 */
406 PutCS(7.12,TauLines[ipT990]);
408
409 /* 57 micron N III, A=
410 * >>refer n3 as Froese Fischer, C. 1983, J.Phys. B, 16, 157
411 * collision strength from
412 * >>refer n3 cs Blum, R.D., & Pradhan, A.K. 1992, ApJS 80, 425 */
413 cs = MIN2(1.90,0.2291*phycon.te10*phycon.te10);
414 PutCS(cs,TauLines[ipT57]);
415
416 static vector< pair<TransitionList::iterator,double> > N3Pump;
417 N3Pump.reserve(32);
418
419 /* one time initialization if first call */
420 if( N3Pump.empty() )
421 {
422 // set up level 1 pumping lines
423 pair<TransitionList::iterator,double> ppa( TauLines.begin()+ipT990, 1./6. );
424 N3Pump.push_back( ppa );
425 pair<TransitionList::iterator,double> ppb( TauLines.begin()+ipT374g, 1./6. );
426 N3Pump.push_back( ppb );
427 pair<TransitionList::iterator,double> ppc( TauLines.begin()+ipT315, 1./6. );
428 N3Pump.push_back( ppc );
429 pair<TransitionList::iterator,double> ppd( TauLines.begin()+ipT324, 1./2. );
430 N3Pump.push_back( ppd );
431 pair<TransitionList::iterator,double> ppe( TauLines.begin()+ipT333, 2./3. );
432 N3Pump.push_back( ppe );
433 // set up level 2 pumping lines
434 for( i=0; i < nWindLine; ++i )
435 {
436 /* don't test on nelem==ipIRON since lines on physics, not C, scale */
437 if( (*TauLine2[i].Hi()).nelem() == 7 && (*TauLine2[i].Hi()).IonStg() == 3 )
438 {
439# if 0
440 DumpLine( TauLine2.begin()+i );
441# endif
442 double branch_ratio;
443 // the branching ratios used here ignore cascades via intermediate levels
444 // usually the latter are much slower, so this should be reasonable
445 if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(2.) ) )
446 branch_ratio = 2./3.; // 2S upper level
447 else if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(6.) ) )
448 branch_ratio = 1./2.; // 2P upper level
449 else if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(10.) ) )
450 branch_ratio = 1./6.; // 2D upper level
451 else
453 pair<TransitionList::iterator,double> pp2( TauLine2.begin()+i, branch_ratio );
454 N3Pump.push_back( pp2 );
455 }
456 }
457 }
458
459 /* now sum pump rates */
460 double pump_rate = 0.;
461 vector< pair<TransitionList::iterator,double> >::const_iterator n3p;
462 for( n3p=N3Pump.begin(); n3p != N3Pump.end(); ++n3p )
463 {
464 const TransitionList::iterator t = n3p->first;
465 double branch_ratio = n3p->second;
466 pump_rate += (*t).Emis().pump()*branch_ratio;
467# if 0
468 dprintf( ioQQQ, "N III %.3e %.3e\n",
469 (*t).WLAng , (*t).Emis().pump()*branch_ratio );
470# endif
471 }
472
473 /* N III] N 3, N 3, 1765 multiplet */
474 /*atom_level2(TauLines[ipT57]);*/
475 /*AtomSeqBoron compute cooling from 5-level boron sequence model atom */
482 0.201 , 1.088 , 0.668 , 2.044 , pump_rate,"N 3");
483 /*fprintf(ioQQQ," n4 %.3e\n", (
484 TauLines[ipN3_1749].xIntensity() +
485 TauLines[ipN3_1747].xIntensity() +
486 TauLines[ipN3_1754].xIntensity()+
487 TauLines[ipN3_1752].xIntensity()+
488 TauLines[ipN3_1751].xIntensity()) / dense.xIonDense[ipNITROGEN][2] );*/
489
490 /* N IV 1486, N 4, N 4,collisions within 3P just guess
491 * cs to ground from
492 * >>refer n4 cs Ramsbottom, C.A., Berrington, K.A., Hibbert, A., Bell, K.L. 1994,
493 * >>refercon Physica Scripta, 50, 246 */
494 if( phycon.te > 1.584e4 )
495 {
496 cs = 21.346/(phycon.te10*phycon.te10*phycon.te10*phycon.te02);
497 }
498 else
499 {
500 cs = 75.221/(phycon.sqrte/phycon.te03/phycon.te02);
501 }
502 /* >>chng 01 sep 09, AtomSeqBeryllium will reset this to 1/3 so critical density correct */
503 cs = MAX2(0.01,cs);
505 AtomSeqBeryllium(.9,.9,3.0,TauLines[ipT1486],.0115);
506 embesq.em1486 = (realnum)(atoms.PopLevels[3]*0.0115*1.34e-11);
507 /*fprintf(ioQQQ," n4 %.3e\n", (TauLines[ipT1486].xIntensity() + embesq.em1486 ) / dense.xIonDense[ipNITROGEN][3] );*/
508
509 /* N IV 765, cs from
510 * >>refer n4 cs Ramsbottom, C.A., Berrington, K.A., Hibbert, A., Bell, K.L. 1994,
511 * >>refercon Physica Scripta, 50, 246 */
512 /* >>refer n4 as Flemming, J., Brage, T., Bell, K.L., Vaeck, N., Hibbert, A.,
513 * >>refercon Godefroid, M., & Froese Fischer, C., 1995, ApJ, 455, 758*/
514 cs = MIN2(4.0,1.864*phycon.te03*phycon.te03);
515 PutCS(cs,TauLines[ipT765]);
517
518 /* N V 1240
519 * >>refer n5 cs Cochrane, D.M., & McWhirter, R.W.P. 1983, PhyS, 28, 25 */
520 ligbar(7,TauLines[ipT1239],TauLines[ipT209],&cs2s2p,&cs2s3p);
521 PutCS(cs2s2p,TauLines[ipT1239]);
522 PutCS(cs2s2p*0.5,TauLines[ipT1243]);
523 PutCS(1.0,*TauDummy);
525 /*fprintf(ioQQQ," n5 %.3e\n", (TauLines[ipT1243].xIntensity() + TauLines[ipT1239].xIntensity() ) / dense.xIonDense[ipNITROGEN][4] );*/
526
527 /* N V 209 */
528 PutCS(cs2s3p,TauLines[ipT209]);
530 return;
531}
void ligbar(long int ized, const TransitionProxy &t2s2p, const TransitionProxy &t2s3p, double *cs2s2p, double *cs2s3p)
long ipT1085
long ipT324
long ipT2140
long ipT205
long ipT990
long ipN3_1752
long ipT1243
long ipT209
long ipT765
long ipN3_1754
long ipN3_1751
long ipT1486
long ipN3_1747
long ipT122
long ipN3_1749
long ipT333
long ipT57
long ipT315
long ipT1239
long ipNI_pumpIndirect
long ipT1200
long ipNI_pumpDirect[NI_NDP]
long ipT374g
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
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 ASSERT(exp)
Definition cddefines.h:578
#define STATIC
Definition cddefines.h:97
const int ipNITROGEN
Definition cddefines.h:311
#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
sys_float SDIV(sys_float x)
Definition cddefines.h:952
#define DEBUG_ENTRY(funcname)
Definition cddefines.h:684
long min(int a, long b)
Definition cddefines.h:723
long nWindLine
Definition cdinit.cpp:19
TransitionProxy::iterator iterator
Definition transition.h:280
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition cool_etc.cpp:13
static const double cNI[N1_SIZE]
Definition cool_nitr.cpp:27
static const double aNI[N1_SIZE]
Definition cool_nitr.cpp:23
STATIC double xNI_coll_stren(int ipLo, int ipHi)
Definition cool_nitr.cpp:33
void CoolNitr(void)
static const double bNI[N1_SIZE]
Definition cool_nitr.cpp:25
static const int N1_SIZE
Definition cool_nitr.cpp:21
static double NI[6][6][3]
Definition cool_nitr.cpp:30
void set_NaN(sys_float &x)
Definition cpu.cpp:682
t_dense dense
Definition dense.cpp:24
t_embesq embesq
Definition embesq.cpp:5
t_nitro nitro
Definition nitro.cpp:5
t_phycon phycon
Definition phycon.cpp:6
static double * g
Definition species2.cpp:28
TransitionList TauLine2("TauLine2", &AnonStates)
TransitionProxy::iterator TauDummy
Definition taulines.cpp:60
TransitionList TauLines("TauLines", &AnonStates)
const int NI_NDP
Definition taulines.h:90
t_thermal thermal
Definition thermal.cpp:5
void DumpLine(const TransitionProxy &t)
void PutCS(double cs, const TransitionProxy &t)