cloudy  trunk
cool_oxyg.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 /*CoolOxyg evaluate total cooling due to oxygen */
4 #include "cddefines.h"
5 #include "coolheavy.h"
6 #include "dense.h"
7 #include "taulines.h"
8 #include "h2.h"
9 #include "phycon.h"
10 #include "embesq.h"
11 #include "hmi.h"
12 #include "oxy.h"
13 #include "colden.h"
14 #include "mole.h"
15 #include "ligbar.h"
16 #include "thermal.h"
17 #include "lines_service.h"
18 #include "atoms.h"
19 #include "cooling.h"
20 
21 #if defined (__ICC) && defined(__ia64) && __INTEL_COMPILER < 910
22 #pragma optimization_level 1
23 #endif
24 void CoolOxyg(void)
25 {
26  double a21,
27  a31,
28  a32,
29  a41,
30  a42,
31  a43,
32  a51,
33  a52,
34  a53,
35  a54,
36  a6300,
37  a6363,
38  aeff,
39  cs2s2p,
40  cs2s3p,
41  p[5],
42  r12 ,
43  r13;
44 
45  static double go2[5]={4.,6.,4.,4.,2.};
46  static double exo2[4]={26808.4,21.0,13637.5,1.5};
47  /* these will be used to update change in cs wrt temperature,
48  * and its affect on cooling derivative */
49  static double oi_cs_tsave=-1. , oi_te_tsave=-1. , oi_dcdt_tsave=-1.;
50  long int i;
51  double rate_OH_dissoc;
52 
53  DEBUG_ENTRY( "CoolOxyg()" );
54 
55  {
56  enum{DEBUG_LOC=false};
57  if( DEBUG_LOC )
58  {
59  // simple unit test
60  double TeTest = phycon.TEMP_LIMIT_LOW;
61  double oi_a, oi_b, oi_c, oi_d, oi_e, oi_f;
62  double oii_a,
63  oii_b,
64  oii_c,
65  oii_d,
66  oii_e,
67  oii_f,
68  oii_g,
69  oii_h,
70  oii_i,
71  oii_j,
72  oii_k;
73  double oiii_a,
74  oiii_b,
75  oiii_c,
76  oiii_d,
77  oiii_e,
78  oiii_f,
79  oiii_g,
80  oiii_h,
81  oiii_i,
82  oiii_j;
83  double oiv_a,oiv_b;
84  double ov_a,ov_b;
85  double sii_a,
86  sii_b,
87  sii_c,
88  sii_d,
89  sii_e,
90  sii_f,
91  sii_g,
92  sii_h,
93  sii_i,
94  sii_j,
95  sii_k;
96  double siii_a,
97  siii_b,
98  siii_c,
99  siii_d,
100  siii_e,
101  siii_f,
102  siii_g,
103  siii_h,
104  siii_i,
105  siii_j,
106  siii_k,
107  siii_l;
108  double siv_a;
109  double sviii_a;
110  double neiii_a,neiii_b,neiii_c,neiii_d,neiii_e;
111  TempChange( TeTest , true );
112  oi_cs(oi_a, oi_b, oi_c, oi_d, oi_e, oi_f);
113  oii_cs(oii_a, oii_b, oii_c, oii_d, oii_e, oii_f, oii_g,
114  oii_h, oii_i, oii_j, oii_k);
115  oiii_cs(oiii_a, oiii_b, oiii_c, oiii_d, oiii_e, oiii_f,
116  oiii_g, oiii_h, oiii_i, oiii_j);
117  oiv_cs(oiv_a, oiv_b);
118  ov_cs(ov_a, ov_b);
119  sii_cs(sii_a, sii_b, sii_c, sii_d, sii_e, sii_f, sii_g,
120  sii_h, sii_i, sii_j, sii_k);
121  siii_cs(siii_a, siii_b, siii_c, siii_d, siii_e, siii_f,
122  siii_g, siii_h, siii_i, siii_j, siii_k,siii_l);
123  siv_cs(siv_a);
124  sviii_cs(sviii_a);
125  neiii_cs(neiii_a,neiii_b,neiii_c,neiii_d,neiii_e);
126  double tinc = 0.05;
127  for( TeTest=phycon.TEMP_LIMIT_LOW; TeTest<phycon.TEMP_LIMIT_HIGH;
128  TeTest *=(1+tinc) )
129  {
130  double oi_aold=oi_a,
131  oi_bold=oi_b,
132  oi_cold=oi_c,
133  oi_dold=oi_d,
134  oi_eold=oi_e,
135  oi_fold=oi_f;
136  double oii_aold=oii_a,
137  oii_bold=oii_b,
138  oii_cold=oii_c,
139  oii_dold=oii_d,
140  oii_eold=oii_e,
141  oii_fold=oii_f,
142  oii_gold=oii_g,
143  oii_hold=oii_h,
144  oii_iold=oii_i,
145  oii_jold=oii_j,
146  oii_kold=oii_k;
147  double oiii_aold=oiii_a,
148  oiii_bold=oiii_b,
149  oiii_cold=oiii_c,
150  oiii_dold=oiii_d,
151  oiii_eold=oiii_e,
152  oiii_fold=oiii_f,
153  oiii_gold=oiii_g,
154  oiii_hold=oiii_h,
155  oiii_iold=oiii_i,
156  oiii_jold=oiii_j;
157  double oiv_aold=oiv_a,oiv_bold=oiv_b;
158  double ov_aold=ov_a,ov_bold=ov_b;
159  double sii_aold=sii_a,
160  sii_bold=sii_b,
161  sii_cold=sii_c,
162  sii_dold=sii_d,
163  sii_eold=sii_e,
164  sii_fold=sii_f,
165  sii_gold=sii_g,
166  sii_hold=sii_h,
167  sii_iold=sii_i,
168  sii_jold=sii_j,
169  sii_kold=sii_k;
170  double siii_aold=siii_a,
171  siii_bold=siii_b,
172  siii_cold=siii_c,
173  siii_dold=siii_d,
174  siii_eold=siii_e,
175  siii_fold=siii_f,
176  siii_gold=siii_g,
177  siii_hold=siii_h,
178  siii_iold=siii_i,
179  siii_jold=siii_j,
180  siii_kold=siii_k,
181  siii_lold=siii_l;
182  double siv_aold=siv_a;
183  double sviii_aold=sviii_a;
184  double neiii_aold=neiii_a,
185  neiii_bold=neiii_b,
186  neiii_cold=neiii_c,
187  neiii_dold=neiii_d,
188  neiii_eold=neiii_e;
189  TempChange( TeTest , true );
190  oi_cs(oi_a, oi_b, oi_c, oi_d, oi_e, oi_f);
191  ASSERT( fabs(oi_a-oi_aold) <= oi_a*3.*tinc);
192  ASSERT( fabs(oi_b-oi_bold) <= oi_b*3.*tinc);
193  ASSERT( fabs(oi_c-oi_cold) <= oi_c*3.*tinc);
194  ASSERT( fabs(oi_d-oi_dold) <= oi_d*3.*tinc);
195  ASSERT( fabs(oi_e-oi_eold) <= oi_e*3.*tinc);
196  ASSERT( fabs(oi_f-oi_fold) <= oi_f*3.*tinc);
197  oii_cs(oii_a, oii_b, oii_c, oii_d, oii_e, oii_f,
198  oii_g, oii_h, oii_i, oii_j, oii_k);
199  ASSERT( fabs(oii_a-oii_aold) <= oii_a*3.*tinc);
200  ASSERT( fabs(oii_b-oii_bold) <= oii_b*3.*tinc);
201  ASSERT( fabs(oii_c-oii_cold) <= oii_c*3.*tinc);
202  ASSERT( fabs(oii_d-oii_dold) <= oii_d*3.*tinc);
203  ASSERT( fabs(oii_e-oii_eold) <= oii_e*3.*tinc);
204  ASSERT( fabs(oii_f-oii_fold) <= oii_f*3.*tinc);
205  ASSERT( fabs(oii_g-oii_gold) <= oii_g*3.*tinc);
206  ASSERT( fabs(oii_h-oii_hold) <= oii_h*3.*tinc);
207  ASSERT( fabs(oii_i-oii_iold) <= oii_i*3.*tinc);
208  ASSERT( fabs(oii_j-oii_jold) <= oii_j*3.*tinc);
209  ASSERT( fabs(oii_k-oii_kold) <= oii_k*3.*tinc);
210  oiii_cs(oiii_a, oiii_b, oiii_c, oiii_d, oiii_e,
211  oiii_f, oiii_g, oiii_h, oiii_i, oiii_j);
212  ASSERT( fabs(oiii_a-oiii_aold) <= oiii_a*3.*tinc);
213  ASSERT( fabs(oiii_b-oiii_bold) <= oiii_b*3.*tinc);
214  ASSERT( fabs(oiii_c-oiii_cold) <= oiii_c*3.*tinc);
215  ASSERT( fabs(oiii_d-oiii_dold) <= oiii_d*3.*tinc);
216  ASSERT( fabs(oiii_e-oiii_eold) <= oiii_e*3.*tinc);
217  ASSERT( fabs(oiii_f-oiii_fold) <= oiii_f*3.*tinc);
218  ASSERT( fabs(oiii_g-oiii_gold) <= oiii_g*3.*tinc);
219  ASSERT( fabs(oiii_h-oiii_hold) <= oiii_h*3.*tinc);
220  ASSERT( fabs(oiii_i-oiii_iold) <= oiii_i*3.*tinc);
221  ASSERT( fabs(oiii_j-oiii_jold) <= oiii_j*3.*tinc);
222  oiv_cs(oiv_a, oiv_b);
223  ASSERT( fabs(oiv_a-oiv_aold) <= oiv_a*3.*tinc);
224  ASSERT( fabs(oiv_b-oiv_bold) <= oiv_b*3.*tinc);
225  ov_cs(ov_a, ov_b);
226  ASSERT( fabs(ov_a-ov_aold) <= ov_a*3.*tinc);
227  ASSERT( fabs(ov_b-ov_bold) <= ov_b*3.*tinc);
228  sii_cs(sii_a, sii_b, sii_c, sii_d, sii_e, sii_f,
229  sii_g, sii_h, sii_i, sii_j, sii_k);
230  ASSERT( fabs(sii_a-sii_aold) <= sii_a*3.*tinc);
231  ASSERT( fabs(sii_b-sii_bold) <= sii_b*3.*tinc);
232  ASSERT( fabs(sii_c-sii_cold) <= sii_c*3.*tinc);
233  ASSERT( fabs(sii_d-sii_dold) <= sii_d*3.*tinc);
234  ASSERT( fabs(sii_e-sii_eold) <= sii_e*3.*tinc);
235  ASSERT( fabs(sii_f-sii_fold) <= sii_f*3.*tinc);
236  ASSERT( fabs(sii_g-sii_gold) <= sii_g*3.*tinc);
237  ASSERT( fabs(sii_h-sii_hold) <= sii_h*3.*tinc);
238  ASSERT( fabs(sii_i-sii_iold) <= sii_i*3.*tinc);
239  ASSERT( fabs(sii_j-sii_jold) <= sii_j*3.*tinc);
240  ASSERT( fabs(sii_k-sii_kold) <= sii_k*3.*tinc);
241  siii_cs(siii_a,
242  siii_b,
243  siii_c,
244  siii_d,
245  siii_e,
246  siii_f,
247  siii_g,
248  siii_h,
249  siii_i,
250  siii_j,
251  siii_k,
252  siii_l);
253  ASSERT( fabs(siii_a-siii_aold) <= siii_a*3.*tinc);
254  ASSERT( fabs(siii_b-siii_bold) <= siii_b*3.*tinc);
255  ASSERT( fabs(siii_c-siii_cold) <= siii_c*3.*tinc);
256  ASSERT( fabs(siii_d-siii_dold) <= siii_d*3.*tinc);
257  ASSERT( fabs(siii_e-siii_eold) <= siii_e*3.*tinc);
258  ASSERT( fabs(siii_f-siii_fold) <= siii_f*3.*tinc);
259  ASSERT( fabs(siii_g-siii_gold) <= siii_g*3.*tinc);
260  ASSERT( fabs(siii_h-siii_hold) <= siii_h*3.*tinc);
261  ASSERT( fabs(siii_i-siii_iold) <= siii_i*3.*tinc);
262  ASSERT( fabs(siii_j-siii_jold) <= siii_j*3.*tinc);
263  ASSERT( fabs(siii_k-siii_kold) <= siii_k*3.*tinc);
264  ASSERT( fabs(siii_l-siii_lold) <= siii_l*3.*tinc);
265  siv_cs(siv_a);
266  ASSERT( fabs(siv_a-siv_aold) <= siv_a*3.*tinc);
267  sviii_cs(sviii_a);
268  ASSERT( fabs(sviii_a-sviii_aold) <= sviii_a*3.*tinc);
269  neiii_cs(neiii_a, neiii_b, neiii_c, neiii_d, neiii_e);
270  ASSERT( fabs(neiii_a-neiii_aold) <= neiii_a*3.*tinc);
271  ASSERT( fabs(neiii_b-neiii_bold) <= neiii_b*3.*tinc);
272  ASSERT( fabs(neiii_c-neiii_cold) <= neiii_c*3.*tinc);
273  ASSERT( fabs(neiii_d-neiii_dold) <= neiii_d*3.*tinc);
274  ASSERT( fabs(neiii_e-neiii_eold) <= neiii_e*3.*tinc);
275  }
277  }
278  }
279 
280  /***********************************************************************
281  **************************************O I*******************************
282  ***********************************************************************/
283  /* following does the OI Bowen Ly-bet pumping problem */
285  CoolAdd("o 1",8446,CoolHeavy.coolOi);
286  double oi_cs3P23P1,
287  oi_cs3P23P0,
288  oi_cs3P13P0,
289  oi_cs3P1D2,
290  oi_cs1D21S0,
291  oi_cs3P1S0;
292  /*"oi_cs" calculates electron collision strengths for O I.
293  *>>refer o1 cs Bell, Berrington & Thomas 1998, MNRAS 293, L83
294  * cs variables are named based of the transition they represent (lower level first).
295  * Transitions where triplet states are considered to be a single state
296  * are denoted by omitting the J value from the triplet level
297  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2
298  * written by Kirk Korista, 29 may 96
299  * adapted by Peter van Hoof, 30 march 99 (to include Bell et al. data)
300  * all data within the ground state 3P triplet, above 3000K, have been
301  * adjusted down by a constant factor to make them line up with Bell et al. data.
302  *>>chng 10 mar 6 ML: combined oi3Pcs with the other cs calculations for O I.*/
303  oi_cs(oi_cs3P23P1,
304  oi_cs3P23P0,
305  oi_cs3P13P0,
306  oi_cs3P1D2,
307  oi_cs1D21S0,
308  oi_cs3P1S0);
309  double csh01=-1.,
310  cshe01=-1.,
311  csh201=-1.,
312  csh12=-1.,
313  cshe12=-1.,
314  csh212=-1.,
315  csh02=-1.,
316  cshe02=-1.,
317  csh202 =-1.,
318  csh2o01=-1.,
319  csh2o02=-1.,
320  csh2o12=-1.,
321  csh2p01=-1.,
322  csh2p02=-1.,
323  csh2p12=-1.,
324  csp01=-1.,
325  csp02=-1.,
326  csp12=-1.;
327  /*"oi_othercs" calculates non-electron collision strengths for O I.
328  *The variables declared here have 2 digit indices at the end of the name.
329  * The lower level is specified first, then the upper level.
330  * The levels are numbered in order of increasing energy.
331  * Below is a small table to convert from the index used here (i) to J
332  * for the O I 3P triplet.
333  * i|J
334  * 0|2
335  * 1|1
336  * 2|0 */
337  oi_othercs(csh01,cshe01,csh201,csh12,cshe12,csh212,csh02,cshe02,csh202,
338  csh2o01,csh2o02,csh2o12,csh2p01,csh2p02,csh2p12,csp01,csp02,csp12);
339 
340  oi_cs3P23P1 = oi_cs3P23P1+csp01+3.*(csh01*dense.xIonDense[ipHYDROGEN][0]
341  + cshe01*dense.xIonDense[ipHELIUM][0] + csh201*hmi.H2_total)/
342  dense.cdsqte;
343  oi_cs3P13P0 = oi_cs3P13P0+csp12+(csh12*dense.xIonDense[ipHYDROGEN][0] +
344  cshe12*dense.xIonDense[ipHELIUM][0] + csh212*hmi.H2_total)/
345  dense.cdsqte;
346  oi_cs3P23P0 = oi_cs3P23P0+csp02+(csh02*dense.xIonDense[ipHYDROGEN][0] +
347  cshe02*dense.xIonDense[ipHELIUM][0] + csh202*hmi.H2_total)/
348  dense.cdsqte;
349 
350  /* O I 6300, 6363, A from
351  * >>refer all all Mendoza, C. 1982, in Planetary Nebulae, IAU Symp No. 103,
352  * >>refercon ed by D.R. Flower, (D. Reidel: Holland), 143 */
353  a6300 = TauLines[ipT6300].Emis().Aul()*TauLines[ipT6300].Emis().Pesc();
354  TauLines[ipT6300].Emis().PopOpc() = (dense.xIonDense[ipOXYGEN][0]*5./5.);
355  (*TauLines[ipT6300].Lo()).Pop() = (dense.xIonDense[ipOXYGEN][0]*5./5.);
356  (*TauLines[ipT6300].Hi()).Pop() = 0.;
357  TauLines[ipT6300].Coll().col_str() = (realnum)(oi_cs3P1D2*5./9.);
358  TauLines[ipT6363].Emis().PopOpc() = (dense.xIonDense[ipOXYGEN][0]*5./3.);
359  (*TauLines[ipT6363].Lo()).Pop() = (dense.xIonDense[ipOXYGEN][0]*5./3.);
360  (*TauLines[ipT6363].Hi()).Pop() = 0.;
361  TauLines[ipT6363].Coll().col_str() = (realnum)(oi_cs3P1D2*3./9.);
362  a6363 = TauLines[ipT6363].Emis().Aul()*TauLines[ipT6363].Emis().Pesc();
363  a21 = a6300 + a6363 + oxy.d6300;
364  a32 = TauLines[ipT5577].Emis().Aul()*TauLines[ipT5577].Emis().Pesc();
365  PutCS(oi_cs1D21S0,TauLines[ipT5577]);
366  /* rate of new populations of O^0 due to dissociation of OH,
367  * co.rate_OH_dissoc is rate OH -> O + H [cm-3 s-1],
368  * must make it per unit O atom, so this rate is s-1 excitations per O atom */
369  rate_OH_dissoc = mole.findrate("PHOTON,OH=>O,H");
370  r12 = rate_OH_dissoc*0.55/SDIV( dense.xIonDense[ipOXYGEN][0] );
371  r13 = rate_OH_dissoc*0.05/SDIV( dense.xIonDense[ipOXYGEN][0] );
372  /* below is correction for fraction of excitations the produce emission */
373  CoolHeavy.c6300_frac_emit = (a6300+a6363)/(a6300+a6363+oi_cs3P1D2*dense.cdsqte/5.);
374  CoolHeavy.c5577_frac_emit = (a32)/(a32+oi_cs1D21S0*dense.cdsqte/3.);
375  /* d6300 is the photoionization rate from the excited level
376  * was computed when ionization balance done */
377  CoolHeavy.c5577 = atom_pop3(9.,5.,1.,oi_cs3P1D2,oi_cs3P1S0,oi_cs1D21S0,a21,7.56e-2,a32,
378  22590.,25775.7,&oxy.poiexc,dense.xIonDense[ipOXYGEN][0],0.,r12,r13)*a32*
379  3.57e-12;
380  TauLines[ipT5577].Emis().PopOpc() = oxy.poiexc;
381  (*TauLines[ipT5577].Lo()).Pop() = oxy.poiexc;
382  (*TauLines[ipT5577].Hi()).Pop() = 0.;
383  /* convert poiexc to relative abundances */
384  /* >>chng 04 apr 20, include correction for fraction of 6300 due to OH pump */
385  CoolHeavy.c5577 *= (1.-r13/(SDIV(atoms.c13)));
386  CoolHeavy.c6300 = oxy.poiexc*a6300*TauLines[ipT6300].EnergyErg() *
387  (1.-r12/(SDIV(atoms.c12)));
388  CoolHeavy.c6363 = oxy.poiexc*a6363*TauLines[ipT6363].EnergyErg() *
389  (1.-r12/(SDIV(atoms.c12)));
390  /* must introduce correction for fraction of 6300 that is photo produced */
392  /* note that atoms.c12 has all ra tes 1->2 */
393  (1.-r12/(SDIV(atoms.c12)));
394  oxy.poiexc /= (realnum)MAX2(1e-20,dense.xIonDense[ipOXYGEN][0]);
395  CoolAdd("o 1",5577,CoolHeavy.c5577);
396  CoolAdd("o 1",6300,CoolHeavy.c6300);
397  CoolAdd("o 1",6363,CoolHeavy.c6363);
398  PutCS(oi_cs3P23P1,TauLines[ipT63]);
399  PutCS(oi_cs3P13P0,TauLines[ipT146]);
400  PutCS(oi_cs3P23P0,*TauDummy);
402  /* now save pops to add col den in radinc */
403  for( i=0; i<3; ++i)
405  /* >>chng 02 jul 25, keep track of change in cs for 63 micron line */
406  if( !fp_equal(phycon.te,oi_te_tsave) )
407  {
408  /* very first time we come through, previous values are -1 */
409  if(oi_te_tsave>0. )
410  oi_dcdt_tsave = (oi_cs3P23P1-oi_cs_tsave) /
411  (phycon.te-oi_te_tsave);
412  else
413  oi_dcdt_tsave = 0.;
414  oi_cs_tsave = oi_cs3P23P1;
415  oi_te_tsave = phycon.te;
416  /* >>chng 03 jan 21, this factor could become very large - it should
417  * always be positive since neutral cs's are, and not much bigger than
418  * the usual derivative */
419  /* can't be negative */
420  oi_dcdt_tsave = MAX2( 0. , oi_dcdt_tsave);
421  /* can't be bigger than several times normal dC/dT */
422  oi_dcdt_tsave = MIN2( TauLines[ipT63].EnergyK()*thermal.tsq1*4.,oi_dcdt_tsave);
423  }
424  /* this is only derivative due to change in collision strength, which is capped to be
425  * less than 4x the thermal derivative just above */
426  thermal.dCooldT += TauLines[ipT63].Coll().cool()*oi_dcdt_tsave;
427  /* this is a bebug print statement for the numerical cs derivative */
428  {
429  enum{DEBUG_LOC=false};
430  if( DEBUG_LOC )
431  {
432  fprintf(ioQQQ,"DEBUG OI\t%.2f\tte\t%.5e\tcool\t%.5e\tcs\t%.4e\told\t%.4e\tnew\t%.4e\n",
433  fnzone,
434  phycon.te,
435  TauLines[ipT63].Coll().cool() ,
436  TauLines[ipT63].Coll().col_str() ,
437  TauLines[ipT63].Coll().cool()*TauLines[ipT63].EnergyK()*thermal.tsq1,
438  TauLines[ipT63].Coll().cool()*oi_dcdt_tsave );
439  }
440  }
441 
442  /***********************************************************************
443  **************************************O II******************************
444  ***********************************************************************/
445  double oii_cs4S32D5,
446  oii_cs4S32D3,
447  oii_cs2D52D3,
448  oii_cs4S32P3,
449  oii_cs2D52P3,
450  oii_cs2D32P3,
451  oii_cs4S32P1,
452  oii_cs2D52P1,
453  oii_cs2D32P1,
454  oii_cs2P32P1,
455  oii_cs4S34P;
456  /* >>chng 10 feb 14, update cs to
457  * >>referold o2 cs McLaughlin, B.M., & Bell, K.L. 1998, J Phys B 31, 4317
458  * >>chng 02 mar 13, go back to older values as per Seaton/Osterbrock correspondence
459  * >>chng 04 nov 01, statistical weights were reversed, caught by Kevin Blagrave
460  * >>refer o2 as Froese Fischer, C., & Tachiev, G. 2004, At. Data Nucl. Data Tables, 87, 1
461  */
462  a21 = 4.12e-5;
463  a31 = 1.63e-4;
464  a32 = 1.24e-7;
465  a41 = 5.65e-2;
466  a42 = 1.11e-1;
467  a43 = 5.87e-2;
468  a51 = 2.27e-2;
469  a52 = 5.82e-2;
470  a53 = 9.67e-2;
471  a54 = 3.15e-10;
472  /*"oii_cs" calculates collision strengths for O II.
473  * cs variables are named based of the transition they represent (lower level first).
474  * Transitions where triplet states are considered to be a single state
475  * are denoted by omitting the J value from the triplet level
476  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2
477  * When the J is a half integer, only the numerator is given.
478  */
479  oii_cs(oii_cs4S32D5,
480  oii_cs4S32D3,
481  oii_cs2D52D3,
482  oii_cs4S32P3,
483  oii_cs2D52P3,
484  oii_cs2D32P3,
485  oii_cs4S32P1,
486  oii_cs2D52P1,
487  oii_cs2D32P1,
488  oii_cs2P32P1,
489  oii_cs4S34P);
490 
491  double Cooling , CoolingDeriv;
492  atom_pop5(go2,exo2,oii_cs4S32D5,oii_cs4S32D3,oii_cs4S32P3,oii_cs4S32P1,
493  oii_cs2D52D3,oii_cs2D52P3,oii_cs2D52P1,oii_cs2D32P3,oii_cs2D32P1,
494  oii_cs2P32P1,a21,a31,a41,a51,a32,a42,a52,a43,a53,a54,p,
495  dense.xIonDense[ipOXYGEN][1], &Cooling , &CoolingDeriv, 0.,0.,0.,0.);
496 
497  CoolHeavy.O3730 = (realnum)(p[1]*a21*5.34e-12);
498  CoolHeavy.O3726 = (realnum)(p[2]*a31*5.34e-12);
499  CoolHeavy.O2471 = (realnum)((p[3]*a41 + p[4]*a51)*8.05e-12);
500  CoolHeavy.O7323 = (realnum)((p[3]*a42 + p[4]*a52)*2.72e-12);
501  CoolHeavy.O7332 = (realnum)((p[3]*a43 + p[4]*a53)*2.71e-12);
504 
505  // total cooling from lowest five levels of O II
506  CoolAdd("O 2",3727,Cooling );
507  thermal.dCooldT += CoolingDeriv;
508 
509  /* remember ratio of radiative to total decays, to use for estimating
510  * recombination contribution in lines_lv1_li_ne */
511  if( (p[3] + p[4]) > SMALLFLOAT )
512  CoolHeavy.O2_A3_tot = (p[3]*(a41+a42+a43) + p[4]*(a51+a52+a53) ) /
513  ( (p[3]*(a41+a42+a43) + p[4]*(a51+a52+a53) ) +
514  ( p[3]*(oii_cs4S32P3+oii_cs2D52P3+oii_cs2D32P3)/go2[3] +
515  p[4]*(oii_cs4S32P1+oii_cs2D52P1+oii_cs2D32P1)/go2[4]) *
516  dense.cdsqte );
517  else
518  CoolHeavy.O2_A3_tot = 0.;
519 
520  if( (p[1] + p[2]) > SMALLFLOAT )
521  CoolHeavy.O2_A2_tot = (p[1]*a21 + p[2]*a31 ) /
522  ( (p[1]*a21 + p[2]*a31 ) +
523  ( p[1]*oii_cs4S32D5/go2[1] + p[2]*oii_cs4S32D3/go2[2]) *
524  dense.cdsqte );
525  else
526  CoolHeavy.O2_A2_tot = 0.;
527 
528  /* O II 4S34P 833.9A, CS
529  * >>refer o2 cs McLaughlin, B.M., & Bell, K.L. 1993, ApJ, 408, 753 */
530  /* >>chng 01 aug 10, turn this line back on - no reason given for turning it off. */
531  PutCS(oii_cs4S34P,TauLines[ipT834]);
533 
534  /***********************************************************************
535  **************************************O III*****************************
536  ***********************************************************************/
537  double oiii_cs3P25S2,
538  oiii_cs3P15S2,
539  oiii_cs3P05S2,
540  oiii_cs3P1D2,
541  oiii_cs1D21S0,
542  oiii_cs3P1S0,
543  oiii_cs3P03P1,
544  oiii_cs3P13P2,
545  oiii_cs3P03P2,
546  oiii_cs3P3D;
547  /*"oiii_cs" calculates collision strengths for O III.
548  * cs variables are named based of the transition they represent (lower level first).
549  *Transitions where triplet states are considered to be a single state
550  * are denoted by omitting the J value from the triplet level
551  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2 */
552  oiii_cs(oiii_cs3P25S2,
553  oiii_cs3P15S2,
554  oiii_cs3P05S2,
555  oiii_cs3P1D2,
556  oiii_cs1D21S0,
557  oiii_cs3P1S0,
558  oiii_cs3P03P1,
559  oiii_cs3P13P2,
560  oiii_cs3P03P2,
561  oiii_cs3P3D);
562 
563  PutCS(oiii_cs3P25S2,TauLines[ipT1666]);
564  PutCS(oiii_cs3P15S2,TauLines[ipT1661]);
565  PutCS(oiii_cs3P05S2,*TauDummy);
567  TauLines[ipT304].Emis().PopOpc() = dense.xIonDense[ipOXYGEN][2];
568  (*TauLines[ipT304].Lo()).Pop() = dense.xIonDense[ipOXYGEN][2];
569  (*TauLines[ipT304].Hi()).Pop() = 0.;
570 
571  /* o iii 5007+4959, As 96 NIST */
572  /*The cs of the transitions 3P0,1,2 to 1D2 are added together to give oiii_cs3P1D2 */
573  /*the cs of the transition 1D2-1S0 is mentioned as oiii_cs1D21S0*/
574  /*The cs of the transitions 3P0,1,2 to 1S0 are added together to give oiii_cs3P1S0*/
575  aeff = 0.027242 + oxy.d5007r;
576  a21 = aeff - oxy.d5007r;
577  a31 = 0.2262;
578  a32 = 1.685;
579  oxy.o3ex23 = 32947.;
580  oxy.o3br32 = (realnum)(a32/(a31 + a32));
581  oxy.o3enro = (realnum)(4.56e-12/3.98e-12);
582  // solve a 3 level system, collapsing ^3P ground term into single level
583  /* POP3(G1,G2,G3,O12,O13,O23,A21,A31,A32,E12,E23,P2,ABUND,GAM2) */
584  oxy.poiii3 = (realnum)(atom_pop3(9.,5.,1.,oiii_cs3P1D2,oiii_cs3P1S0,
585  oiii_cs1D21S0,a21,a31,a32,28990.,oxy.o3ex23,&oxy.poiii2,
586  dense.xIonDense[ipOXYGEN][2],oxy.d5007r,0.,0.));
587  CoolHeavy.c4363 = oxy.poiii3*a32*4.56e-12;
588  CoolHeavy.c5007 = oxy.poiii2*a21*3.98e-12;
592  CoolAdd("O 3",5007,CoolHeavy.c5007);
593  CoolAdd("O 3",4363,CoolHeavy.c4363);
594  CoolAdd("O 3",2331,CoolHeavy.c4363*0.236);
595 
597  {
600  }
601 
602  /* O III IR lines */
603  PutCS(oiii_cs3P03P1,TauLines[ipTO88]);
604  PutCS(oiii_cs3P13P2,TauLines[ipT52]);
605  PutCS(oiii_cs3P03P2,*TauDummy);
607 
608  /* O III 3P to 3D triplets 835 angstroms */
609  PutCS(oiii_cs3P3D,TauLines[ipT835]);
611 
612  /***********************************************************************
613  **************************************O IV******************************
614  ***********************************************************************/
615  double oiv_cs2P2D,oiv_cs2P12P3;
616  /*"oiv_cs" calculates collision strengths for O IV.
617  * cs variables are named based of the transition they represent (lower level first).
618  * Transitions where triplet states are considered to be a single state
619  * are denoted by omitting the J value from the triplet level
620  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2
621  * For half integer Js, only the numerator is given. */
622  oiv_cs(oiv_cs2P2D,oiv_cs2P12P3);
623  /* O IV 789A, 2P2D CS from
624  * >>refer o4 cs Zhang, H.L., Graziani, M., Pradhan, A.K. 1994, A&A, 283, 319 */
625  PutCS(oiv_cs2P2D,TauLines[ipT789]);
627  /* O IV 26 micron, CS
628  * >>referold o4 cs Blum, R.D., & Pradhan, A.K. 1992, ApJS 80, 425
629  * A=
630  * >>refer o4 as Brage, T., Judge, P.G., & Brekke, P. 1996, ApJ. 464, 1030 */
631  /* >>chng 06 nov 08 - NPA. Update collision strength to new data from:
632  * >>refer o4 cs Tayal, S. 2006, ApJS 166, 634
633  * Equation derived by using TableCurve, and goes to zero as
634  * T => 0 and T => infinity */
635  PutCS(oiv_cs2P12P3,TauLines[ipT26]);
636  static vector< pair<TransitionList::iterator,double> > O4Pump;
637  O4Pump.reserve(48);
638  /* one time initialization if first call */
639  if( O4Pump.empty() )
640  {
641  // set up level 1 pumping lines
642  pair<TransitionList::iterator,double> pp( TauLines.begin()+ipT789, 1./6. );
643  O4Pump.push_back( pp );
644  // set up level 2 pumping lines
645  for( i=0; i < nWindLine; ++i )
646  {
647  /* don't test on nelem==ipIRON since lines on physics, not C, scale */
648  if( (*TauLine2[i].Hi()).nelem() == 8 && (*TauLine2[i].Hi()).IonStg() == 4 )
649  {
650 # if 0
651  DumpLine( TauLine2.begin()+i );
652 # endif
653  double branch_ratio;
654  // the branching ratios used here ignore cascades via intermediate levels
655  // usually the latter are much slower, so this should be reasonable
656  if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(2.) ) )
657  branch_ratio = 2./3.; // 2S upper level
658  else if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(6.) ) )
659  branch_ratio = 1./2.; // 2P upper level
660  else if( fp_equal( (*TauLine2[i].Hi()).g(), realnum(10.) ) )
661  branch_ratio = 1./6.; // 2D upper level
662  else
663  TotalInsanity();
664  pair<TransitionList::iterator,double> pp2( TauLine2.begin()+i, branch_ratio );
665  O4Pump.push_back( pp2 );
666  }
667  }
668  }
669 
670  /* now sum pump rates */
671  double pump_rate = 0.;
672  vector< pair<TransitionList::iterator,double> >::const_iterator o4p;
673  for( o4p=O4Pump.begin(); o4p != O4Pump.end(); ++o4p )
674  {
675  const TransitionList::iterator t = o4p->first;
676  double branch_ratio = o4p->second;
677  pump_rate += (*t).Emis().pump()*branch_ratio;
678 # if 0
679  dprintf( ioQQQ, "O IV %.3e %.3e\n",
680  (*t).WLAng , (*t).Emis().pump()*branch_ratio );
681 # endif
682  }
683 
684  /*atom_level2(TauLines[ipT26]);*/
685  /*AtomSeqBoron compute cooling from 5-level boron sequence model atom */
686  /* >>refer o4 cs Blum, R.D., & Pradhan, A.K., 1992, ApJS 80, 425
687  * >>refer o4 cs Zhang, H.L., Graziani, M., Pradhan, A.K. 1994, A&A, 283, 319 */
694  0.1367 , 0.1560 , 1.1564 , 0.0457 , pump_rate,"O 4");
695  /***********************************************************************
696  **************************************O V*******************************
697  ***********************************************************************/
698 
699  double ov_cs1S01P1,ov_cs1S03P;
700  /*"ov_cs" calculates collision strengths for O V.
701  * cs variables are named based of the transition they represent (lower level first).
702  *Transitions where triplet states are considered to be a single state
703  *are denoted by omitting the J value from the triplet level
704  *ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2 */
705  ov_cs(ov_cs1S01P1,ov_cs1S03P);
706  PutCS(ov_cs1S01P1,TauLines[ipT630]);
708  /* >>chng 01 sep 09, AtomSeqBeryllium will reset this to 1/3 so critical density correct */
709  PutCS(ov_cs1S03P,TauLines[ipT1214]);
710  /* c1214 = AtomSeqBeryllium( .87,1.05,3.32, t1214, .0216) * 1.64E-11
711  * AtomSeqBeryllium(CS23,CS24,CS34,tarray,A41)
712  * A's
713  * >>refer o5 as Fleming, J., Bell, K.L, Hibbert, A., Vaeck, N., Godefroid, M.R.
714  * >>refercon 1996, MNRAS, 279, 1289 */
715  AtomSeqBeryllium(.87,0.602,2.86,TauLines[ipT1214],.02198);
716  embesq.em1218 = (realnum)(atoms.PopLevels[3]*0.0216*1.64e-11);
717 
718  /* O VI 1035 li seq
719  * generate collision strengths, then stuff them in
720  * >>refer o6 vs Cochrane, D.M., & McWhirter, R.W.P. 1983, PhyS, 28, 25 */
721  ligbar(8,TauLines[ipT1032],TauLines[ipT150],&cs2s2p,&cs2s3p);
722  PutCS(cs2s2p,TauLines[ipT1032]);
723  PutCS(cs2s2p*0.5,TauLines[ipT1037]);
724  /* no data for the 2-3 transition */
725  PutCS(1.0,*TauDummy);
726  /* solve the 3 level atom */
728 
729  PutCS(cs2s3p,TauLines[ipT150]);
731  return;
732 }
733 
734 /*"oi_cs" calculates electron collision strengths for O I.
735  *>>refer o1 cs Bell, Berrington & Thomas 1998, MNRAS 293, L83
736  * cs variables are named based of the transition they represent (lower level first).
737  * Transitions where triplet states are considered to be a single state are
738  * denoted by omitting the J value from the triplet level
739  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2
740  * written by Kirk Korista, 29 may 96
741  * adapted by Peter van Hoof, 30 march 99 (to include Bell et al. data)
742  * all data within the ground state 3P triplet, above 3000K, have been adjusted
743  * down by a constant factor to make
744  * them line up with Bell et al. data.
745  *>>chng 10 mar 6 ML: combined oi3Pcs with the other cs calculations for O I. */
746 
747 void oi_cs(double& oi_cs3P23P1,double& oi_cs3P23P0,double& oi_cs3P13P0,
748  double& oi_cs3P1D2,double& oi_cs1D21S0,double& oi_cs3P1S0)
749 {
750  double a,
751  b,
752  c,
753  d;
754 
755  DEBUG_ENTRY( "oi_cs()" );
756  /* local variables */
757 
758  /* 3P2 - 3P1 */
759  if( phycon.te <= 3.0e3 )
760  {
761  oi_cs3P23P1 = 1.49e-4*phycon.sqrte/phycon.te02/phycon.te02;
762  }
763  else if( phycon.te <= 1.0e4 )
764  {
765  a = -5.5634127e-04;
766  b = 8.3458102e-08;
767  c = 2.3068232e-04;
768  oi_cs3P23P1 = 0.228f*(a + b*phycon.te32 + c*phycon.sqrte);
769  }
770  else
771  {
772  oi_cs3P23P1 = 0.228*MIN2(0.222,5.563e-06*phycon.te*phycon.te05*
773  phycon.te02);
774  }
775 
776  /* 3P2 - 3P0 */
777  if( phycon.te <= 3.0e3 )
778  {
779  oi_cs3P23P0 = 4.98e-5*phycon.sqrte;
780  }
781  else if( phycon.te <= 1.0e4 )
782  {
783  a = -3.7178028e-04;
784  b = 2.0569267e-08;
785  c = 1.1898539e-04;
786  oi_cs3P23P0 = 0.288*(a + b*phycon.te32 + c*phycon.sqrte);
787  }
788  else
789  {
790  oi_cs3P23P0 = 0.288*MIN2(0.0589,1.015e-05*phycon.te/phycon.te10/
792  }
793 
794  /* 3P1 - 3P0 */
795  if( phycon.te <= 3.0e3 )
796  {
797  oi_cs3P13P0 = 1.83e-9*phycon.te*phycon.te30*phycon.te05;
798  }
799  else if( phycon.te <= 1.0e4 )
800  {
801  a = -5.9364373e-04;
802  b = 0.02946867;
803  c = 10768.675;
804  d = 3871.9826;
805  oi_cs3P13P0 = 0.0269*(a + b*exp(-0.5*POW2((phycon.te-c)/d)));
806  }
807  else
808  {
809  oi_cs3P13P0= 0.0269*MIN2(0.074,7.794e-08*phycon.te32/phycon.te10/
810  phycon.te01);
811  }
812 
813  /* [OI] 6300, 6363, 5575, etc
814  * >>chng 06 oct 02, Humeshkar Nemala incorporate Barklem cs data for OI
815  * largest difference is 3P - 1D (6300+6363) which is now roughly 3x smaller */
816  /* This is the transition from 3P(J=2,1,0;the levels are reversed) to 1D2
817  * The rate coefficients were converted to CS
818  *>>refer oi cs Barklem,P.S.,2006,A&A (astroph 0609684)
819  * Data pts are avilable over 1000,3000,5000,8000,12000,20000 and 50000
820  * Fits between 1000K and 20000K are reliable;this is not the case
821  * between 20000K & 50000K*/
822 
823  if(phycon.te < 8E3)
824  oi_cs3P1D2 = (4E-08)*(phycon.te*phycon.te70*phycon.te05);
825  else if(phycon.te < 2E4)
826  oi_cs3P1D2 = (4.630155E-05)*((phycon.te/phycon.te04)*phycon.te005*phycon.te0001);
827  else
828  oi_cs3P1D2 = (1.5394E-03)*(phycon.sqrte*phycon.te10*phycon.te01*phycon.te001*phycon.te0003);
829 
830  /* this block adds on collisional excitation by H0 */
831  /* >>chng 06 aug 18, add atomic hydrogen collisional processes using rates from
832  * >>refer O1 coll Krems, R.V., Jameson, M.J. & Dalgarno, A. 2006, ApJ, 647, 1531
833  * their equation 10 - the deecxiation rate coefficient, cm3 s-1
834  * >>referold oi cs Federman, S.R., & Shipsey, E.J. 1983, ApJ, 269, 791 */
835  double te_scale = phycon.te / 6000.;
836  double rate_H0 = (1.74*te_scale + 0.6)*1e-12*sexp(0.47*te_scale) / sqrt(te_scale ) *
838  oi_cs3P1D2 += ConvRate2CS( 5.f , (realnum)rate_H0 );
839 
840  if(phycon.te < 5E3)
841  oi_cs1D21S0 = (7E-08)*(phycon.te*phycon.sqrte*phycon.te10*phycon.te007*phycon.te0001);
842  else if(phycon.te<2E4)
843  oi_cs1D21S0 = (1.98479e-04)*((phycon.te70/phycon.te03)*phycon.te003*phycon.te0007);
844  else
845  oi_cs1D21S0 = (9.31E-04)*(phycon.sqrte*phycon.te01*phycon.te007*phycon.te0005*phycon.te0001);
846 
847  /* 1,2,3 -> 5 transition */
848  if(phycon.te < 2E4)
849  oi_cs3P1S0 = (2E-05)*(phycon.sqrte*phycon.te30*phycon.te05*phycon.te01*(phycon.te004/phycon.te0002));
850  else
851  oi_cs3P1S0 = (1.054E-03)*(phycon.sqrte/phycon.te04)*phycon.te003*phycon.te0005;
852 
853 
854  return;
855 }
856 /*"oi_othercs" calculates non-electron collision strengths for O I.
857  *The variables declared here have 2 digit indices at the end of the name.
858  *The lower level is specified first, then the upper level. The levels are
859  *numbered in order of increasing energy. Below is a small table to convert from
860  *the index used here (i) to J for the O I 3P triplet.
861  * i|J
862  * 0|2
863  * 1|1
864  * 2|0 */
865 void oi_othercs(double& csh01,double& cshe01,double& csh201,double& csh12,double& cshe12,
866  double& csh212,double& csh02,double& cshe02,double& csh202,double& csh2o01,
867  double& csh2o02,double& csh2o12,double& csh2p01,double& csh2p02,double& csh2p12,
868  double& csp01,double& csp02,double& csp12)
869 {
870  DEBUG_ENTRY( "oi_othercs()" );
871 
872  /* O I fine structure lines rad data from
873  * >>refer all cs Mendoza, C. 1982, in Planetary Nebulae, IAU Symp No. 103,
874  * >>refercon ed by D.R. Flower, (D. Reidel: Holland), 143
875  * >>refer o1 cs Berrington, K.A. 1988, J.Phys. B, 21, 1083
876  * hydrogen collisions from
877  * >>refer oi cs Tielens, A.G.G., & Hollenbach, D. 1985, ApJ, 291, 722
878  * factor in () is their rate coef
879  * assume H2 and H are same
880  * CDSQTE = 8.629E-6*EDEN/SQRTE
881  * cs01 = 9.8e-6*te + (4.2e-12*te70/te03) / cdsqte * 3. * hdcor
882  * cs12 = 2.6e-6*te + (1.5e-10*sqrte/te03/te03)/cdsqte*hdcor
883  * cs02 = 2.9e-6*te + (1.1e-12*te70*te10)/cdsqte*hdcor
884  * evaluate fits to OI electron rates, indices on var do not agree
885  * with Kirk's in sub, but are OK */
886  /*==============================================================*/
887  /* >>>chng 99 jun 01,
888  * following changed to be parallel to Peter van Hoof's changes
889  * in the Fortran C90.05 version
890  * following is collisions with electrons */
891 
892  /* remember the electron part of the cs */
893  /* these were added by Peter van Hoof to update the collision
894  * data within the OI ground term */
895 
896 
897  /* rate coefficients for collisional de-excitation of O^o(3P) with H^o(2S1/2)
898  * NOTE: due to lack of data these relations are extrapolated to higher Te !
899  * >>refer o1 cs Launay & Roueff 1977, AA 56, 289
900  * the first fit is for Te <= 300K, the second for higher temps
901  * these data are valid for 50K <= Te <= 1000K*/
902  csh12 = MAX2(2.00e-11*phycon.te30*phycon.te05*phycon.te02,
903  7.67e-12*phycon.sqrte*phycon.te03);
904 
905  /* these data are valid for 100K <= Te <= 1000K */
906  csh01 = MIN2(3.12e-12*phycon.te70*phycon.te02*phycon.te02,
907  7.51e-12*phycon.sqrte*phycon.te05*phycon.te03);
908 
909  /* these data are valid for 150K <= Te <= 1000K*/
910  csh02 = MIN2(6.96e-13*phycon.te/phycon.te10/phycon.te02,
911  1.49e-12*phycon.te70*phycon.te05);
912 
913  /* rate coefficients for collisional de-excitation of O^o(3P) with He^o(1S)
914  * NOTE: due to lack of data these relations are extrapolated to higher Te !
915  * >>refer oi cs Monteiro & Flower 1987, MNRAS 228, 101
916  * the first fit is for Te <= 300K, the second for higher temps
917  * these data are valid for 100K <= Te <= 1000K */
918  cshe12 = MIN2(8.09e-16*phycon.te32*phycon.te10*phycon.te03,
919  9.72e-15*phycon.te*phycon.te20);
920 
921  cshe01 = 1.57e-12*phycon.te70/phycon.te01;
922 
923  cshe02 = MIN2(1.80e-12*phycon.te70*phycon.te05,
924  4.45e-12*phycon.te70/phycon.te10);
925 
926  if( phycon.te<=1.5e3 )
927  {
928  /* >>chng 04 mar 15, use explicit ortho-para densities */
929  double ortho_frac = h2.ortho_density/SDIV(hmi.H2_total);
930  /* rate coefficients for collisional de-excitation of O^o(3P) with H2(J=1,0)
931  * >>refer oi cs Jaquet et al. 1992, J.Phys.B 25, 285
932  * these data are valid for 40K <= Te <= 1500K
933  * the first entry is contribution from ortho H2, the second para H2.*/
934  csh2o12 = 2.21e-14*phycon.te*phycon.te10/phycon.te01;
935  csh2p12 = 9.45e-15*phycon.te*phycon.te20/phycon.te01;
936  csh212 = ortho_frac*csh2o12 + (1.-ortho_frac)*csh2p12;
937 
938  csh2o01 = 2.37e-11*phycon.te30*phycon.te10/phycon.te02;
939  csh2p01 = 3.40e-11*phycon.te30*phycon.te02;
940  csh201 = ortho_frac*csh2o01 + (1.-ortho_frac)*csh2p01;
941 
942  csh2o02 = 4.86e-11*phycon.te30*phycon.te02*phycon.te02;
943  csh2p02 = 6.82e-11*phycon.te30/phycon.te02;
944  csh202 = ortho_frac*csh2o02 + (1.-ortho_frac)*csh2p02;
945  }
946  else
947  {
948  csh212 = 0.;
949  csh201 = 0.;
950  csh202 = 0.;
951  }
952 
953  /* effective collision strength of O^o(3P) with p
954  * >>refer oi cs Pequignot, D. 1990, A&A 231, 499
955  * original data:
956  * >>refer oi cs Chambaud et al., 1980, J.Phys.B, 13, 4205 (upto 5000K)
957  * >>refer oi cs Roueff, private communication (10,000K and 20,000K)*/
958  if( phycon.te<=1000. )
959  {
960  csp01 = MAX2(2.22e-5*phycon.te/phycon.te10,
961  /* >>chng 05 jul 05, eden to dense.EdenHCorr */
962  /*2.69e-6*phycon.te*phycon.te30)*dense.xIonDense[ipHYDROGEN][1]/dense.eden;*/
964 
965  csp02 = MIN2(7.07e-8*phycon.te32*phycon.te10,2.46e-7*
966  /* >>chng 05 jul 05, eden to dense.EdenHCorr */
967  /*phycon.te32/phycon.te10)*dense.xIonDense[ipHYDROGEN][1]/dense.eden;*/
969  }
970  else
971  {
972  csp01 = MIN2(2.69e-6*phycon.te*phycon.te30,9.21e-5*phycon.te/phycon.te10/
973  /* >>chng 05 jul 05, eden to dense.EdenHCorr */
974  /*phycon.te03)*dense.xIonDense[ipHYDROGEN][1]/dense.eden;*/
976 
977  csp02 = MIN2(2.46e-7*phycon.te32/phycon.te10,5.21e-5*phycon.te/
978  /* >>chng 05 jul 05, eden to dense.EdenHCorr */
979  /*phycon.te20)*dense.xIonDense[ipHYDROGEN][1]/dense.eden;*/
981  }
982 
983  csp12 = MIN2(2.35e-6*phycon.te*phycon.te05*phycon.te01,3.98e-5*
984  /* >>chng 05 jul 05, eden to dense.EdenHCorr */
985  /*phycon.te20)*dense.xIonDense[ipHYDROGEN][1]/dense.eden;*/
986  /*phycon.te70/phycon.te01)*dense.xIonDense[ipHYDROGEN][1]/dense.eden;*/
988 
989  return;
990 }
991 
992 /*"oii_cs" calculates collision strengths for O II.
993  * cs variables are named based of the transition they represent (lower level first).
994  * Transitions where triplet states are considered to be a single state are
995  * denoted by omitting the J value from the triplet level
996  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2
997  * When the J is a half integer, only the numerator is given.
998  */
999 
1000 void oii_cs(double& oii_cs4S32D5,
1001  double& oii_cs4S32D3,
1002  double& oii_cs2D52D3,
1003  double& oii_cs4S32P3,
1004  double& oii_cs2D52P3,
1005  double& oii_cs2D32P3,
1006  double& oii_cs4S32P1,
1007  double& oii_cs2D52P1,
1008  double& oii_cs2D32P1,
1009  double& oii_cs2P32P1,
1010  double& oii_cs4S34P)
1011 {
1012  DEBUG_ENTRY( "oii_cs()" );
1013  /* >>refer o2 cs Kisielius, R., Storey, P. J., Ferland, G. J., & Keenan, F. P.,
1014  * >>refercon 2009, MNRAS, 397, 903 */
1015  oii_cs4S32D5 = (realnum)(0.7776*(phycon.te007*phycon.te0005*phycon.te0001));
1016  oii_cs4S32D3 = (realnum)(0.5643/phycon.te002);
1017  oii_cs2D52D3 = (realnum)(2.2277/(phycon.te07/(phycon.te003*phycon.te0001)));
1018  oii_cs4S32P3 = (realnum)(0.2004*phycon.te02*(phycon.te007/phycon.te0004));
1019  oii_cs2D52P3 = (realnum)(0.6211*phycon.te03*phycon.te004*phycon.te0002);
1020  oii_cs2D32P3 = (realnum)(0.3159*phycon.te04*(phycon.te004/phycon.te0004));
1021  oii_cs4S32P1 = (realnum)(0.1112*(phycon.te02/(phycon.te001*phycon.te0004)));
1022  oii_cs2D52P1 = (realnum)(0.2337*phycon.te04*phycon.te0004);
1023  oii_cs2D32P1 = (realnum)(0.2226*phycon.te04*phycon.te003*phycon.te0001);
1024  oii_cs2P32P1 = (realnum)(0.1943*phycon.te04*(phycon.te002/phycon.te0004));
1025 
1026  /* O II 4S34P 833.9A, CS
1027  * >>refer o2 cs McLaughlin, B.M., & Bell, K.L. 1993, ApJ, 408, 753 */
1028  /* >>chng 01 aug 10, turn this line back on - no reason given for turning it off. */
1029  oii_cs4S34P = 0.355*phycon.te10*phycon.te10*phycon.te003*phycon.te001*phycon.te001;
1030 
1031  return;
1032 }
1033 
1034 /*"oiii_cs" calculates collision strengths for O III.
1035  * cs variables are named based of the transition they represent (lower level first).
1036  * Transitions where triplet states are considered to be a single state are
1037  * denoted by omitting the J value from the triplet level
1038  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2 */
1039 void oiii_cs(double& oiii_cs3P25S2,
1040  double& oiii_cs3P15S2,
1041  double& oiii_cs3P05S2,
1042  double& oiii_cs3P1D2,
1043  double& oiii_cs1D21S0,
1044  double& oiii_cs3P1S0,
1045  double& oiii_cs3P03P1,
1046  double& oiii_cs3P13P2,
1047  double &oiii_cs3P03P2,
1048  double& oiii_cs3P3D)
1049 {
1050  DEBUG_ENTRY( "oiii_cs()" );
1051 
1052  /* O III 1666, 3P25S2 crit den=2.6+10, A from
1053  * >>refer all cs Mendoza, C. 1982, in Planetary Nebulae, IAU Symp No. 103,
1054  * >>refercon ed by D.R. Flower, (D. Reidel: Holland), 143
1055  * c.s.
1056  * >>referold o3 cs Lennon, D.J. Burke, V.M. 1994, A&AS, 103, 273 */
1057  /* >>chng 06 jun 30- Humeshkar Nemala */
1058  /* >>refer o3 cs Aggarwal,K.M. & Keenan,F. P.1999,ApJS,123,311*/
1059  /*Data available in the temperature range 2500 K to 2E6 K*/
1060  /*fits at temperatures below 30000K and at temperatures above 30000K*/
1061  if(phycon.te < 30000)
1062  oiii_cs3P25S2 = (realnum)(0.2519*(phycon.te07*phycon.te02*phycon.te007*phycon.te001*phycon.te0002));
1063  else
1064  oiii_cs3P25S2 = (realnum)(6.166388*(1/(phycon.te20*phycon.te01*phycon.te002)));
1065 
1066 
1067  /* O III 1661, 3P15S2
1068  * >>refer o3 cs Aggarwal,K.M. & Keenan,F. P.1999,ApJS,123,311*/
1069  /*Data available in the temperature range 2500 K to 2E6 K*/
1070  /*fits at temperatures below 30000K and at temperatures above 30000K*/
1071  if(phycon.te < 30000)
1072  oiii_cs3P15S2 = (realnum)((0.1511)*(phycon.te07*phycon.te02*phycon.te007*phycon.te001*phycon.te0002));
1073  else
1074  oiii_cs3P15S2 = (realnum)((3.668474)*(1/(phycon.te20*phycon.te01*phycon.te001*phycon.te0002)));
1075 
1076  /* O III 3P0-5S^o2*/
1077  /*>>chng 06 jun 30- Humeshkar Nemala*/
1078  /*>>refer o3 cs Aggarwal,K.M. & Keenan,F. P.1999,ApJS,123,311*/
1079  /*Data available in the temperature range 2500 K to 2E6 K*/
1080  /*fits at temperatures below 30000K and at temperatures above 30000K*/
1081  if(phycon.te < 30000)
1082  oiii_cs3P05S2 = (realnum)(0.0504*((phycon.te10/phycon.te01)*phycon.te005*phycon.te003*phycon.te0002));
1083  else
1084  oiii_cs3P05S2 = (realnum)(1.223633/(phycon.te20*phycon.te01*phycon.te001*phycon.te0002));
1085 
1086 
1087  /* o iii 5007+4959, As 96 NIST */
1088  /*The cs of the transitions 3P0,1,2 to 1D2 are added together to give oiii_cs3P1D2 */
1089  /*the cs of the transition 1D2-1S0 is mentioned as oiii_cs1D21S0*/
1090  /*The cs of the transitions 3P0,1,2 to 1S0 are added together to give oiii_cs3P1S0*/
1091  /* >>chng 01 may 04, As updated to
1092  * >>referold o3 as Storey, P.J., & Zeippen, C.J., 2000, MNRAS, 312, 813-816,
1093  * changed by 10 percent! */
1094  /* >>chng 10 feb 11 aeff = 0.027205 + oxy.d5007r;
1095  * >>refer o3 as Froese Fischer, C., & Tachiev, G. 2004, At. Data Nucl. Data Tables, 87, 1
1096  * term oxy.d5007r is photoioniozation loss */
1097  /* following data used in routine that deduces OIII temp from spectrum
1098  *
1099  * >>refer o3 cs Lennon, D.J. Burke, V.M. 1994, A&AS, 103, 273
1100  * IP paper Y(ki) differ significantly from those
1101  * calculated by
1102  * >>refer o3 cs Burke, V.M., Lennon, D.J., & Seaton, M.J. 1989, MNRAS, 236, 353
1103  * especially for 1D2-1S0.
1104  * BLS89 is adopted for 1D2-1S0 and LB94 for 3P2,1-1D2.
1105  * NB!! these cs's must be kept parallel with those in Peimbert analysis */
1106 
1107  /* >>refer o3 cs Aggarwal,K.M. & Keenan,F. P.1999,ApJS,123,311*/
1108  /* >>chng 06 jul 24- Humeshkar Nemala */
1109  /*cs are available over two temperature ranges: below 30000K and above 30000K*/
1110  /*The old values seemed to saturate at around 100,000K.The new values are around
1111  10-15% different from the old values*/
1112 
1113  if(phycon.te < 3E4)
1114  {
1115  oiii_cs3P1D2 = (realnum)(0.9062*(phycon.te10/phycon.te002));
1116  oiii_cs1D21S0 = (realnum)(0.0995*phycon.te10*phycon.te07*(phycon.te007/phycon.te0002));
1117  oiii_cs3P1S0 = (realnum)(0.1237*phycon.te07*phycon.te02*phycon.te005*phycon.te0005);
1118 
1119  }
1120  else if(phycon.te < 6E4)
1121  {
1122  oiii_cs3P1D2 = (realnum)(1.710073*(phycon.te04/phycon.te004)*phycon.te0004);
1123  oiii_cs3P1S0 = (realnum)(0.1963109*phycon.te05*phycon.te0007);
1124  oiii_cs1D21S0 = (realnum)(0.781266/(phycon.te02*phycon.te003*phycon.te0001));
1125  }
1126  else
1127  {
1128  oiii_cs3P1D2 = (realnum)(6.452638/((phycon.te10/phycon.te02)*phycon.te004*phycon.te0003));
1129  oiii_cs3P1S0 = (realnum)(0.841578/(phycon.te07*phycon.te01*(phycon.te002/phycon.te0004)));
1130  oiii_cs1D21S0 = (realnum)(0.781266/(phycon.te02*phycon.te003*phycon.te0001));
1131  }
1132 
1133  /* >>chng 10 feb 11 chng from a31 = 0.215634; a32 = 1.71;
1134  * >>refer o3 as Froese Fischer, C., & Tachiev, G. 2004, At. Data Nucl. Data Tables, 87, 1
1135  */
1136  /* O III IR lines, col str from iron project,
1137  * >>referold o3 cs Lennon, D.J. Burke, V.M. 1994, A&AS, 103, 273 */
1138  /*>>refer o3 cs Aggarwal,K.M. & Keenan,F. P.1999,ApJS,123,311*/
1139  /*88 microns refers to the 3P0-3P1 transition*/
1140  if(phycon.te < 3E4)
1141  oiii_cs3P03P1 = (realnum)(0.3993*(phycon.te03/phycon.te001)*phycon.te0001);
1142  else if(phycon.te < 1E5)
1143  oiii_cs3P03P1 = (realnum)(0.245712*phycon.te07*phycon.te005*phycon.te001*phycon.te0002);
1144  else
1145  oiii_cs3P03P1 = (realnum)(1.310467/((phycon.te07/phycon.te001)*phycon.te0002));
1146 
1147  /*O III 52 microns refers to the 3P1-3P2 transition*/
1148  if(phycon.te < 3E4)
1149  oiii_cs3P13P2 = (realnum)(0.7812*(phycon.te05/phycon.te0001));
1150  else if(phycon.te < 1.2E5)
1151  oiii_cs3P13P2 = (realnum)(0.516157*phycon.te07*phycon.te02*phycon.te0001);
1152  else
1153  oiii_cs3P13P2 = (realnum)(4.038402/(phycon.te05*phycon.te03*phycon.te005*phycon.te0007*phycon.te0001));
1154 
1155  /*O III TauDummy refers to the 3P0-3P2 transition*/
1156  if(phycon.te < 3E4)
1157  oiii_cs3P03P2 = (realnum)(0.1337*phycon.te07*phycon.te002*phycon.te0002);
1158  else if(phycon.te < 1.2E5)
1159  oiii_cs3P03P2 = (realnum)(0.086446*phycon.te10*phycon.te01*phycon.te004*phycon.te0005);
1160  else
1161  oiii_cs3P03P2 = (realnum)(0.82031/(phycon.te07*phycon.te007*phycon.te0007*phycon.te0002));
1162 
1163  /* O III 834A, 3P3D CS */
1164  /* >>referold o3 cs Aggarwal, K.M., 1985 A&A 146, 149. */
1165  /* >>chng 06 jul 22- Humeshkar Nemala */
1166  /*>>refer o3 cs Aggarwal,K.M. & Keenan,F. P.1999,ApJS,123,311*/
1167  /*the cs of OIII 834A was obtained by summing the cs of the nine transitions:
1168  3P(0,1,2)-3D^o(1,2,3)*/
1169  if(phycon.te < 3E4)
1170  oiii_cs3P3D = (realnum)(4.74*phycon.te04*phycon.te0002);
1171  else
1172  oiii_cs3P3D = (realnum)(0.533*phycon.te20*phycon.te05*phycon.te002*phycon.te0001);
1173  return;
1174 }
1175 /*"oiv_cs" calculates collision strengths for O IV.
1176  * cs variables are named based of the transition they represent (lower level first).
1177  * Transitions where triplet states are considered to be a single state are
1178  * denoted by omitting the J value from the triplet level
1179  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2
1180  * For half integer Js, only the numerator is given.
1181  */
1182 void oiv_cs(double& oiv_cs2P2D,double& oiv_cs2P12P3)
1183 {
1184  double Te_bounded,Te_bounded_log;
1185 
1186  DEBUG_ENTRY( "oiv_cs()" );
1187  /* these cs data only extend over a modest Temp range */
1188  Te_bounded = MAX2(phycon.te,4500.);
1189  Te_bounded = MIN2(Te_bounded,450000.);
1190  Te_bounded_log = log(Te_bounded);
1191  /* O IV 789A, 2P2D CS from
1192  * >>refer o4 cs Zhang, H.L., Graziani, M., Pradhan, A.K. 1994, A&A, 283, 319 */
1193  oiv_cs2P2D = -3.0102462 + 109.22973/Te_bounded_log - 18666.357/Te_bounded;
1194  /* O IV 26 micron, CS
1195  * >>referold o4 cs Blum, R.D., & Pradhan, A.K. 1992, ApJS 80, 425
1196  * A=
1197  * >>refer o4 as Brage, T., Judge, P.G., & Brekke, P. 1996, ApJ. 464, 1030 */
1198  /* >>chng 06 nov 08 - NPA. Update collision strength to new data from:
1199  * >>refer o4 cs Tayal, S. 2006, ApJS 166, 634
1200  * Equation derived by using TableCurve, and goes to zero as
1201  * T => 0 and T => infinity */
1202  oiv_cs2P12P3 = (realnum)(exp(3.265723 - 0.00014686984*phycon.alnte*phycon.sqrte
1203  -22.035066/phycon.alnte));
1204  /* cs goes to zero at very high T, which will cause an assert in the
1205  * n-level solver - don't let this happen */
1206  oiv_cs2P12P3 = MAX2( oiv_cs2P12P3 , 3.25e-2);
1207  return;
1208 }
1209 /*"ov_cs" calculates collision strengths for O V.
1210  * cs variables are named based of the transition they represent (lower level first).
1211  * Transitions where triplet states are considered to be a single state are
1212  * denoted by omitting the J value from the triplet level
1213  * ex. (3P(J=2,1,0) -> 1D2 = oi_cs3P1D2 */
1214 void ov_cs(double& ov_cs1S01P1,double& ov_cs1S03P)
1215 {
1216  DEBUG_ENTRY( "ov_cs()" );
1217  /* O V 630, 1S01P1 CS from
1218  * >>refer o5 cs Berrington, K.A., Burke, P.G., Dufton, P.L., Kingston, A.E. 1985,
1219  * >>refercon At. Data Nucl. Data Tables, 33, 195 */
1220  ov_cs1S01P1 = MIN2(4.0,1.317*phycon.te10/phycon.te03);
1221  /* O V 1218; 1S03P coll data from
1222  * >>refer o5 cs Berrington, K.A., Burke, P.G., Dufton, P.L., Kingston, A.E. 1985,
1223  * >>refercon At. Data Nucl. Data Tables, 33, 195 */
1224  if( phycon.te <= 3.16e4 )
1225  {
1226  ov_cs1S03P = 3.224/(phycon.te10*phycon.te03*phycon.te03*phycon.te003);
1227  }
1228  else
1229  {
1230  ov_cs1S03P = 10.549/(phycon.te10*phycon.te10*phycon.te10/phycon.te03);
1231  }
1232 
1233  return;
1234 }
1235 
colden.h
ipT834
long ipT834
Definition: atmdat_readin.cpp:48
thermal.h
t_atoms::c12
double c12
Definition: atoms.h:245
neiii_cs
void neiii_cs(double &neiii_cs3P13P0, double &neiii_cs3P23P1, double &neiii_cs3P23P0, double &neiii_cs3P1D2, double &neiii_cs3P1S0)
Definition: cool_neon.cpp:251
t_CoolHeavy::O7323
realnum O7323
Definition: coolheavy.h:130
t_CoolHeavy::c6300
double c6300
Definition: coolheavy.h:76
ipOXYGEN
const int ipOXYGEN
Definition: cddefines.h:312
ipT63
long ipT63
Definition: atmdat_readin.cpp:53
ipT1037
long ipT1037
Definition: atmdat_readin.cpp:54
h2
diatomics h2("h2", 4100., &hmi.H2_total, Yan_H2_CS)
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_dense::EdenHCorr
double EdenHCorr
Definition: dense.h:216
DumpLine
void DumpLine(const TransitionProxy &t)
Definition: transition.cpp:100
CoolOxyg
void CoolOxyg(void)
Definition: cool_oxyg.cpp:24
dense
t_dense dense
Definition: dense.cpp:24
atoms.h
t_dense::cdsqte
double cdsqte
Definition: dense.h:235
t_CoolHeavy::c6363
double c6363
Definition: coolheavy.h:84
ioQQQ
FILE * ioQQQ
Definition: cddefines.cpp:7
sviii_cs
void sviii_cs(double &sviii_cs2P32P1)
Definition: cool_sulf.cpp:578
ipO4_1400
long ipO4_1400
Definition: atmdat_readin.cpp:91
TempChange
void TempChange(double TempNew, bool lgForceUpdate)
Definition: temp_change.cpp:51
t_phycon::te001
double te001
Definition: phycon.h:67
realnum
float realnum
Definition: cddefines.h:103
t_phycon::te07
double te07
Definition: phycon.h:56
t_CoolHeavy::O3730
realnum O3730
Definition: coolheavy.h:127
nWindLine
long nWindLine
Definition: cdinit.cpp:19
ipO4_1397
long ipO4_1397
Definition: atmdat_readin.cpp:91
oiii_cs
void oiii_cs(double &oiii_cs3P25S2, double &oiii_cs3P15S2, double &oiii_cs3P05S2, double &oiii_cs3P1D2, double &oiii_cs1D21S0, double &oiii_cs3P1S0, double &oiii_cs3P03P1, double &oiii_cs3P13P2, double &oiii_cs3P03P2, double &oiii_cs3P3D)
Definition: cool_oxyg.cpp:1039
ipT1661
long ipT1661
Definition: atmdat_readin.cpp:48
oi_cs
void oi_cs(double &oi_cs3P23P1, double &oi_cs3P23P0, double &oi_cs3P13P0, double &oi_cs3P1D2, double &oi_cs1D21S0, double &oi_cs3P1S0)
Definition: cool_oxyg.cpp:747
mole.h
siii_cs
void siii_cs(double &siii_cs3P03P1, double &siii_cs3P03P2, double &siii_cs3P01D2, double &siii_cs3P01S0, double &siii_cs3P13P2, double &siii_cs3P11D2, double &siii_cs3P11S0, double &siii_cs3P21D2, double &siii_cs3P21S0, double &siii_cs1D21S0, double &siii_cs3P3D, double &siii_cs3P5S2)
Definition: cool_sulf.cpp:434
sii_cs
void sii_cs(double &sii_cs4S32D3, double &sii_cs4S32D5, double &sii_cs4S32P1, double &sii_cs4S32P3, double &sii_cs2D32D5, double &sii_cs2D32P1, double &sii_cs2D52P1, double &sii_cs2D32P3, double &sii_cs2D52P3, double &sii_cs2P12P3, double &sii_cs4S34P)
Definition: cool_sulf.cpp:337
t_CoolHeavy::O2_A2_tot
double O2_A2_tot
Definition: coolheavy.h:136
ipTO88
long ipTO88
Definition: atmdat_readin.cpp:53
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
ipT52
long ipT52
Definition: atmdat_readin.cpp:53
t_CoolHeavy::O7332
realnum O7332
Definition: coolheavy.h:131
t_CoolHeavy::coolOi
double coolOi
Definition: coolheavy.h:83
t_CoolHeavy::c5577
double c5577
Definition: coolheavy.h:75
phycon
t_phycon phycon
Definition: phycon.cpp:6
t_phycon::te005
double te005
Definition: phycon.h:63
TransitionList::begin
iterator begin(void)
Definition: transition.h:305
ProxyIterator
Definition: proxy_iterator.h:58
t_CoolHeavy::O2_A3_tot
double O2_A3_tot
Definition: coolheavy.h:135
t_phycon::te004
double te004
Definition: phycon.h:64
SDIV
sys_float SDIV(sys_float x)
Definition: cddefines.h:952
embesq.h
lines_service.h
t_phycon::TEMP_LIMIT_LOW
const double TEMP_LIMIT_LOW
Definition: phycon.h:111
CoolAdd
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition: cool_etc.cpp:13
t_CoolHeavy::c3727
double c3727
Definition: coolheavy.h:79
diatomics::ortho_density
double ortho_density
Definition: h2_priv.h:319
ASSERT
#define ASSERT(exp)
Definition: cddefines.h:578
t_hmi::H2_total
double H2_total
Definition: hmi.h:16
oiv_cs
void oiv_cs(double &oiv_cs2P2D, double &oiv_cs2P12P3)
Definition: cool_oxyg.cpp:1182
ipHYDROGEN
const int ipHYDROGEN
Definition: cddefines.h:305
EXIT_SUCCESS
#define EXIT_SUCCESS
Definition: cddefines.h:138
oii_cs
void oii_cs(double &oii_cs4S32D5, double &oii_cs4S32D3, double &oii_cs2D52D3, double &oii_cs4S32P3, double &oii_cs2D52P3, double &oii_cs2D32P3, double &oii_cs4S32P1, double &oii_cs2D52P1, double &oii_cs2D32P1, double &oii_cs2P32P1, double &oii_cs4S34P)
Definition: cool_oxyg.cpp:1000
POW2
#define POW2
Definition: cddefines.h:929
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
t_mole_local::findrate
double findrate(const char buf[]) const
Definition: mole_reactions.cpp:3900
t_oxy::o3ex23
realnum o3ex23
Definition: oxy.h:35
t_CoolHeavy::O2471
realnum O2471
Definition: coolheavy.h:129
t_phycon::te0004
double te0004
Definition: phycon.h:72
t_oxy::poiii3
realnum poiii3
Definition: oxy.h:12
sexp
sys_float sexp(sys_float x)
Definition: service.cpp:914
siv_cs
void siv_cs(double &siv_cs2P12P3)
Definition: cool_sulf.cpp:545
t_oxy::poiexc
realnum poiexc
Definition: oxy.h:18
ipT5577
long ipT5577
Definition: atmdat_readin.cpp:47
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
t_CoolHeavy::c7325
double c7325
Definition: coolheavy.h:80
t_oxy::d5007r
realnum d5007r
Definition: oxy.h:10
coolheavy.h
mole
t_mole_local mole
Definition: mole.cpp:7
t_phycon::te01
double te01
Definition: phycon.h:61
cooling.h
cddefines.h
t_CoolHeavy::c5577_frac_emit
double c5577_frac_emit
Definition: coolheavy.h:78
t_phycon::te0002
double te0002
Definition: phycon.h:70
atoms
t_atoms atoms
Definition: atoms.cpp:5
t_phycon::te0005
double te0005
Definition: phycon.h:73
TauDummy
TransitionProxy::iterator TauDummy
Definition: taulines.cpp:60
thermal
t_thermal thermal
Definition: thermal.cpp:5
t_embesq::em1218
realnum em1218
Definition: embesq.h:11
TotalInsanity
NORETURN void TotalInsanity(void)
Definition: service.cpp:886
ConvRate2CS
double ConvRate2CS(realnum gHi, realnum rate)
Definition: lines_service.cpp:648
TauLine2
TransitionList TauLine2("TauLine2", &AnonStates)
t_phycon::te002
double te002
Definition: phycon.h:66
t_CoolHeavy::c6300_frac_emit
double c6300_frac_emit
Definition: coolheavy.h:77
ipT146
long ipT146
Definition: atmdat_readin.cpp:52
t_phycon::te02
double te02
Definition: phycon.h:60
colden
t_colden colden
Definition: colden.cpp:5
atom_oi_calc
void atom_oi_calc(double *coloi)
Definition: atom_oi.cpp:23
PutCS
void PutCS(double cs, const TransitionProxy &t)
Definition: transition.cpp:317
hmi.h
t_phycon::alnte
double alnte
Definition: phycon.h:85
MAX2
#define MAX2
Definition: cddefines.h:782
t_phycon::te30
double te30
Definition: phycon.h:53
ov_cs
void ov_cs(double &ov_cs1S01P1, double &ov_cs1S03P)
Definition: cool_oxyg.cpp:1214
t_phycon::te0003
double te0003
Definition: phycon.h:71
cdEXIT
#define cdEXIT(FAIL)
Definition: cddefines.h:434
t_colden::O1Pops
realnum O1Pops[3]
Definition: colden.h:80
t_dense::xIonDense
double xIonDense[LIMELM][LIMELM+1]
Definition: dense.h:125
TauLines
TransitionList TauLines("TauLines", &AnonStates)
t_phycon::te04
double te04
Definition: phycon.h:58
t_oxy::d5007t
realnum d5007t
Definition: oxy.h:11
ipT835
long ipT835
Definition: atmdat_readin.cpp:48
t_phycon::te007
double te007
Definition: phycon.h:62
t_phycon::te003
double te003
Definition: phycon.h:65
t_phycon::te10
double te10
Definition: phycon.h:55
fp_equal
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition: cddefines.h:812
ipT6363
long ipT6363
Definition: atmdat_readin.cpp:47
hmi
t_hmi hmi
Definition: hmi.cpp:5
t_phycon::te0001
double te0001
Definition: phycon.h:69
oi_othercs
void oi_othercs(double &csh01, double &cshe01, double &csh201, double &csh12, double &cshe12, double &csh212, double &csh02, double &cshe02, double &csh202, double &csh2o01, double &csh2o02, double &csh2o12, double &csh2p01, double &csh2p02, double &csh2p12, double &csp01, double &csp02, double &csp12)
Definition: cool_oxyg.cpp:865
ipO4_1401
long ipO4_1401
Definition: atmdat_readin.cpp:91
AtomSeqBeryllium
void AtomSeqBeryllium(double cs12, double cs13, double cs23, const TransitionProxy &t, double a30)
Definition: atom_seq_beryllium.cpp:13
t_CoolHeavy::O3726
realnum O3726
Definition: coolheavy.h:128
t_CoolHeavy::c5007
double c5007
Definition: coolheavy.h:82
ligbar.h
atom_level2
void atom_level2(const TransitionProxy &t)
Definition: atom_level2.cpp:17
t_phycon::te70
double te70
Definition: phycon.h:51
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
t_phycon::te20
double te20
Definition: phycon.h:54
t_thermal::dCooldT
double dCooldT
Definition: thermal.h:119
ipHELIUM
const int ipHELIUM
Definition: cddefines.h:306
taulines.h
CoolHeavy
t_CoolHeavy CoolHeavy
Definition: coolheavy.cpp:5
dprintf
int dprintf(FILE *fp, const char *format,...)
Definition: service.cpp:1009
ipO4_1405
long ipO4_1405
Definition: atmdat_readin.cpp:91
phycon.h
t_phycon::te32
double te32
Definition: phycon.h:49
embesq
t_embesq embesq
Definition: embesq.cpp:5
ipT150
long ipT150
Definition: atmdat_readin.cpp:52
t_phycon::sqrte
double sqrte
Definition: phycon.h:48
ipT1032
long ipT1032
Definition: atmdat_readin.cpp:54
t_phycon::TEMP_LIMIT_HIGH
const double TEMP_LIMIT_HIGH
Definition: phycon.h:113
ipT789
long ipT789
Definition: atmdat_readin.cpp:49
t_atoms::PopLevels
double PopLevels[LIMLEVELN+1]
Definition: atoms.h:270
t_CoolHeavy::c4363
double c4363
Definition: coolheavy.h:81
ipT1666
long ipT1666
Definition: atmdat_readin.cpp:48
t_phycon::te05
double te05
Definition: phycon.h:57
oxy.h
h2.h
t_thermal::halfte
double halfte
Definition: thermal.h:123
fnzone
double fnzone
Definition: cddefines.cpp:15
ipT1214
long ipT1214
Definition: atmdat_readin.cpp:52
t_oxy::d6300
realnum d6300
Definition: oxy.h:20
t_thermal::tsq1
double tsq1
Definition: thermal.h:122
t_oxy::o3enro
realnum o3enro
Definition: oxy.h:37
t_phycon::te
double te
Definition: phycon.h:11
t_oxy::poiii2
realnum poiii2
Definition: oxy.h:9
t_oxy::o3br32
realnum o3br32
Definition: oxy.h:36
ipT304
long ipT304
Definition: atmdat_readin.cpp:52
t_atoms::c13
double c13
Definition: atoms.h:245
ipT630
long ipT630
Definition: atmdat_readin.cpp:49
DEBUG_ENTRY
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:684
oxy
t_oxy oxy
Definition: oxy.cpp:5
ipT6300
long ipT6300
Definition: atmdat_readin.cpp:47
ipT26
long ipT26
Definition: atmdat_readin.cpp:53
SMALLFLOAT
const realnum SMALLFLOAT
Definition: cpu.h:191
t_phycon::te0007
double te0007
Definition: phycon.h:74
ipO4_1407
long ipO4_1407
Definition: atmdat_readin.cpp:91
TransitionList::Emis
EmissionList & Emis()
Definition: transition.h:329
g
static double * g
Definition: species2.cpp:28