cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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));
226  atom_level2( TauLines[ipNI_pumpIndirect] );
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]);
331  atom_level2(TauLines[ipT1200]);
332 
333  /* N II 1084, cs from trans prob */
334  PutCS(5.5,TauLines[ipT1085]);
335  atom_level2(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);
389  atom_level3(TauLines[ipT205],TauLines[ipT122],*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]);
402  atom_level2(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]);
407  atom_level2(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 */
476  AtomSeqBoron(TauLines[ipT57],
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]);
516  atom_level2(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);
524  atom_level3(TauLines[ipT1243],*TauDummy,TauLines[ipT1239]);
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]);
529  atom_level2(TauLines[ipT209]);
530  return;
531 }
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition: cool_etc.cpp:13
#define MIN2
Definition: cddefines.h:765
double cdsqte
Definition: dense.h:235
long ipT1486
void CoolNitr(void)
Definition: cool_nitr.cpp:119
void DumpLine(const TransitionProxy &t)
Definition: transition.cpp:100
t_thermal thermal
Definition: thermal.cpp:5
long ipT374g
double te03
Definition: phycon.h:48
long ipT765
NORETURN void TotalInsanity(void)
Definition: service.cpp:886
TransitionProxy::iterator TauDummy
Definition: taulines.cpp:60
void set_NaN(sys_float &x)
Definition: cpu.cpp:673
void AtomSeqBeryllium(double cs12, double cs13, double cs23, const TransitionProxy &t, double a30)
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
t_embesq embesq
Definition: embesq.cpp:5
double xN10398
Definition: nitro.h:11
#define MAX2
Definition: cddefines.h:786
double te02
Definition: phycon.h:48
double xN2_A3_tot
Definition: nitro.h:11
realnum d5200r
Definition: atoms.h:242
realnum em1486
Definition: embesq.h:9
t_phycon phycon
Definition: phycon.cpp:6
static const int N1_SIZE
Definition: cool_nitr.cpp:21
t_dense dense
Definition: dense.cpp:24
iterator begin(void)
Definition: transition.h:305
static double * g
Definition: species2.cpp:28
FILE * ioQQQ
Definition: cddefines.cpp:7
long ipN3_1749
long ipNI_pumpIndirect
double xN5200
Definition: nitro.h:11
TransitionList TauLine2("TauLine2",&AnonStates)
double xIonDense[LIMELM][LIMELM+1]
Definition: dense.h:125
long ipNI_pumpDirect[NI_NDP]
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition: cddefines.h:816
long ipN3_1751
int dprintf(FILE *fp, const char *format,...)
Definition: service.cpp:1009
double c5755
Definition: nitro.h:11
void PutCS(double cs, const TransitionProxy &t)
Definition: transition.cpp:317
double pump5199
pump of [NI] 5199 by FUV intercombination lines, only an estimate
Definition: nitro.h:11
long ipT324
#define STATIC
Definition: cddefines.h:101
long ipN3_1754
long ipT1200
static double NI[6][6][3]
Definition: cool_nitr.cpp:30
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_atoms atoms
Definition: atoms.cpp:5
float realnum
Definition: cddefines.h:107
void ligbar(long int ized, const TransitionProxy &t2s2p, const TransitionProxy &t2s3p, double *cs2s2p, double *cs2s3p)
STATIC double xNI_coll_stren(int ipLo, int ipHi)
Definition: cool_nitr.cpp:33
double xN3467
Definition: nitro.h:11
long min(int a, long b)
Definition: cddefines.h:727
void atom_level3(const TransitionProxy &t10, const TransitionProxy &t21, const TransitionProxy &t20)
Definition: atom_level3.cpp:15
double alnte
Definition: phycon.h:85
long nWindLine
Definition: cdinit.cpp:19
long ipN3_1752
long ipT333
double xN10407
Definition: nitro.h:11
long ipT122
#define ASSERT(exp)
Definition: cddefines.h:582
static const double bNI[N1_SIZE]
Definition: cool_nitr.cpp:25
double xN3466
Definition: nitro.h:11
realnum p2nit
Definition: atoms.h:242
const int ipNITROGEN
Definition: cddefines.h:315
TransitionList TauLines("TauLines",&AnonStates)
long ipT1239
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:688
long ipT315
long ipT1243
void atom_level2(const TransitionProxy &t)
Definition: atom_level2.cpp:17
double te10
Definition: phycon.h:48
long ipN3_1747
double xN10408
Definition: nitro.h:11
double xN10397
Definition: nitro.h:11
double eden
Definition: dense.h:190
long ipT990
double c6584
Definition: nitro.h:11
static const double aNI[N1_SIZE]
Definition: cool_nitr.cpp:23
sys_float SDIV(sys_float x)
Definition: cddefines.h:956
double dCooldT
Definition: thermal.h:119
t_nitro nitro
Definition: nitro.cpp:5
double halfte
Definition: thermal.h:122
double sqrte
Definition: phycon.h:48
long ipT57
double te
Definition: phycon.h:11
double PopLevels[LIMLEVELN+1]
Definition: atoms.h:270
double rec5199
recombination pumping of [NI] 5199, only an estimate
Definition: nitro.h:11
long ipT205
const int NI_NDP
Definition: taulines.h:90
long ipT209
long ipT2140
double tsq1
Definition: thermal.h:122
double xN5198
Definition: nitro.h:11
EmissionList & Emis()
Definition: transition.h:329
double quench_5200
Definition: nitro.h:11
double te32
Definition: phycon.h:48
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)
long ipT1085
static const double cNI[N1_SIZE]
Definition: cool_nitr.cpp:27