cloudy  trunk
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 */
21 static const int N1_SIZE = 10;
22 
23 static 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};
25 static 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};
27 static 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 
30 static double NI[6][6][3]; /* coefficients a b c into array */
31 
32 /*xNI_coll_stren interpolate the collision strength of NI */
33 STATIC 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 
119 void 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. )
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;
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
452  TotalInsanity();
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);
504  PutCS(cs,TauLines[ipT1486]);
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 }
ipT990
long ipT990
Definition: atmdat_readin.cpp:43
thermal.h
cNI
static const double cNI[N1_SIZE]
Definition: cool_nitr.cpp:27
atom_pop5
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
t_nitro::rec5199
double rec5199
recombination pumping of [NI] 5199, only an estimate
Definition: nitro.h:32
t_dense::eden
double eden
Definition: dense.h:190
DumpLine
void DumpLine(const TransitionProxy &t)
Definition: transition.cpp:100
dense
t_dense dense
Definition: dense.cpp:24
CoolNitr
void CoolNitr(void)
Definition: cool_nitr.cpp:119
atoms.h
t_dense::cdsqte
double cdsqte
Definition: dense.h:235
ioQQQ
FILE * ioQQQ
Definition: cddefines.cpp:7
t_nitro::xN10397
double xN10397
Definition: nitro.h:19
realnum
float realnum
Definition: cddefines.h:103
t_nitro::xN5200
double xN5200
Definition: nitro.h:14
nWindLine
long nWindLine
Definition: cdinit.cpp:19
STATIC
#define STATIC
Definition: cddefines.h:97
ipNI_pumpIndirect
long ipNI_pumpIndirect
Definition: atmdat_readin.cpp:99
NI_NDP
const int NI_NDP
Definition: taulines.h:90
ipT374g
long ipT374g
Definition: atmdat_readin.cpp:44
atom_level3
void atom_level3(const TransitionProxy &t10, const TransitionProxy &t21, const TransitionProxy &t20)
Definition: atom_level3.cpp:15
t_phycon::te03
double te03
Definition: phycon.h:59
phycon
t_phycon phycon
Definition: phycon.cpp:6
TransitionList::begin
iterator begin(void)
Definition: transition.h:305
ProxyIterator
Definition: proxy_iterator.h:58
t_nitro::pump5199
double pump5199
pump of [NI] 5199 by FUV intercombination lines, only an estimate
Definition: nitro.h:29
SDIV
sys_float SDIV(sys_float x)
Definition: cddefines.h:952
embesq.h
t_embesq::em1486
realnum em1486
Definition: embesq.h:12
t_nitro::c5755
double c5755
Definition: nitro.h:22
lines_service.h
CoolAdd
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition: cool_etc.cpp:13
ASSERT
#define ASSERT(exp)
Definition: cddefines.h:578
N1_SIZE
static const int N1_SIZE
Definition: cool_nitr.cpp:21
ipNITROGEN
const int ipNITROGEN
Definition: cddefines.h:311
ligbar
void ligbar(long int ized, const TransitionProxy &t2s2p, const TransitionProxy &t2s3p, double *cs2s2p, double *cs2s3p)
Definition: atmdat_ligbar.cpp:11
MIN2
#define MIN2
Definition: cddefines.h:761
ipT1486
long ipT1486
Definition: atmdat_readin.cpp:43
NI
static double NI[6][6][3]
Definition: cool_nitr.cpp:30
ipT209
long ipT209
Definition: atmdat_readin.cpp:46
t_nitro::quench_5200
double quench_5200
Definition: nitro.h:11
t_atoms::d5200r
realnum d5200r
Definition: atoms.h:242
ipT315
long ipT315
Definition: atmdat_readin.cpp:45
ipT1243
long ipT1243
Definition: atmdat_readin.cpp:43
nitro.h
t_nitro::xN5198
double xN5198
Definition: nitro.h:15
dense.h
AtomSeqBoron
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)
Definition: atom_seq_boron.cpp:11
cooling.h
cddefines.h
ipT324
long ipT324
Definition: atmdat_readin.cpp:45
atoms
t_atoms atoms
Definition: atoms.cpp:5
TauDummy
TransitionProxy::iterator TauDummy
Definition: taulines.cpp:60
thermal
t_thermal thermal
Definition: thermal.cpp:5
TotalInsanity
NORETURN void TotalInsanity(void)
Definition: service.cpp:886
xNI_coll_stren
STATIC double xNI_coll_stren(int ipLo, int ipHi)
Definition: cool_nitr.cpp:33
ipT2140
long ipT2140
Definition: atmdat_readin.cpp:45
TauLine2
TransitionList TauLine2("TauLine2", &AnonStates)
ipT333
long ipT333
Definition: atmdat_readin.cpp:46
ipN3_1752
long ipN3_1752
Definition: atmdat_readin.cpp:92
t_phycon::te02
double te02
Definition: phycon.h:60
set_NaN
void set_NaN(sys_float &x)
Definition: cpu.cpp:682
t_atoms::p2nit
realnum p2nit
Definition: atoms.h:242
PutCS
void PutCS(double cs, const TransitionProxy &t)
Definition: transition.cpp:317
t_phycon::alnte
double alnte
Definition: phycon.h:85
MAX2
#define MAX2
Definition: cddefines.h:782
ipN3_1754
long ipN3_1754
Definition: atmdat_readin.cpp:92
t_dense::xIonDense
double xIonDense[LIMELM][LIMELM+1]
Definition: dense.h:125
ipT122
long ipT122
Definition: atmdat_readin.cpp:46
TauLines
TransitionList TauLines("TauLines", &AnonStates)
t_nitro::xN3466
double xN3466
Definition: nitro.h:17
t_phycon::te10
double te10
Definition: phycon.h:55
t_nitro::xN10408
double xN10408
Definition: nitro.h:20
fp_equal
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition: cddefines.h:812
min
long min(int a, long b)
Definition: cddefines.h:723
AtomSeqBeryllium
void AtomSeqBeryllium(double cs12, double cs13, double cs23, const TransitionProxy &t, double a30)
Definition: atom_seq_beryllium.cpp:13
bNI
static const double bNI[N1_SIZE]
Definition: cool_nitr.cpp:25
ligbar.h
atom_level2
void atom_level2(const TransitionProxy &t)
Definition: atom_level2.cpp:17
ipT765
long ipT765
Definition: atmdat_readin.cpp:43
ipT1085
long ipT1085
Definition: atmdat_readin.cpp:42
atom_pop3
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
nitro
t_nitro nitro
Definition: nitro.cpp:5
t_thermal::dCooldT
double dCooldT
Definition: thermal.h:119
taulines.h
ipT205
long ipT205
Definition: atmdat_readin.cpp:46
dprintf
int dprintf(FILE *fp, const char *format,...)
Definition: service.cpp:1009
phycon.h
t_phycon::te32
double te32
Definition: phycon.h:49
embesq
t_embesq embesq
Definition: embesq.cpp:5
t_phycon::sqrte
double sqrte
Definition: phycon.h:48
ipN3_1747
long ipN3_1747
Definition: atmdat_readin.cpp:92
t_atoms::PopLevels
double PopLevels[LIMLEVELN+1]
Definition: atoms.h:270
ipT57
long ipT57
Definition: atmdat_readin.cpp:47
t_thermal::halfte
double halfte
Definition: thermal.h:123
t_thermal::tsq1
double tsq1
Definition: thermal.h:122
t_phycon::te
double te
Definition: phycon.h:11
ipT1200
long ipT1200
Definition: atmdat_readin.cpp:44
t_nitro::xN10398
double xN10398
Definition: nitro.h:18
ipNI_pumpDirect
long ipNI_pumpDirect[NI_NDP]
Definition: atmdat_readin.cpp:98
ipN3_1749
long ipN3_1749
Definition: atmdat_readin.cpp:92
ipT1239
long ipT1239
Definition: atmdat_readin.cpp:44
ipN3_1751
long ipN3_1751
Definition: atmdat_readin.cpp:92
DEBUG_ENTRY
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:684
t_nitro::xN3467
double xN3467
Definition: nitro.h:16
t_nitro::xN10407
double xN10407
Definition: nitro.h:21
t_nitro::xN2_A3_tot
double xN2_A3_tot
Definition: nitro.h:26
aNI
static const double aNI[N1_SIZE]
Definition: cool_nitr.cpp:23
t_nitro::c6584
double c6584
Definition: nitro.h:23
TransitionList::Emis
EmissionList & Emis()
Definition: transition.h:329
g
static double * g
Definition: species2.cpp:28