cloudy trunk
Loading...
Searching...
No Matches
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
24void 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 */
284 atom_oi_calc(&CoolHeavy.coolOi);
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 */
391 thermal.dCooldT += CoolHeavy.c6300*(2.28e4*thermal.tsq1 + thermal.halfte) *
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)
404 colden.O1Pops[i] = (realnum)atoms.PopLevels[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);
502 CoolHeavy.c3727 = CoolHeavy.O3730 + CoolHeavy.O3726;
503 CoolHeavy.c7325 = CoolHeavy.O7323 + CoolHeavy.O7332;
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;
589 oxy.d5007t = (realnum)(CoolHeavy.c5007*oxy.d5007r/aeff);
590 thermal.dCooldT += CoolHeavy.c5007*(2.88e4*thermal.tsq1 - thermal.halfte);
591 thermal.dCooldT += CoolHeavy.c4363*6.20e4*thermal.tsq1;
592 CoolAdd("O 3",5007,CoolHeavy.c5007);
593 CoolAdd("O 3",4363,CoolHeavy.c4363);
594 CoolAdd("O 3",2331,CoolHeavy.c4363*0.236);
595
596 if( MAX2(oxy.poiii2,oxy.poiii3) > 0.f && dense.xIonDense[ipOXYGEN][2]>SMALLFLOAT)
597 {
598 oxy.poiii3 /= dense.xIonDense[ipOXYGEN][2];
599 oxy.poiii2 /= dense.xIonDense[ipOXYGEN][2];
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
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
747void 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/
791 phycon.te02/phycon.te005);
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 ) *
837 dense.xIonDense[ipHYDROGEN][0];
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 */
865void 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;*/
963 2.69e-6*phycon.te*phycon.te30)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
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;*/
968 phycon.te32/phycon.te10)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
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;*/
975 phycon.te03)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
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;*/
980 phycon.te20)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
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;*/
987 phycon.te70/phycon.te01)*dense.xIonDense[ipHYDROGEN][1]/dense.EdenHCorr;
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
1000void 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 */
1039void 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 */
1182void 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 */
1214void 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
void ligbar(long int ized, const TransitionProxy &t2s2p, const TransitionProxy &t2s3p, double *cs2s2p, double *cs2s3p)
long ipT6363
long ipT1661
long ipO4_1401
long ipO4_1405
long ipT1666
long ipO4_1397
long ipT146
long ipT26
long ipO4_1407
long ipTO88
long ipT1037
long ipT5577
long ipT304
long ipT52
long ipO4_1400
long ipT835
long ipT150
long ipT834
long ipT1214
long ipT630
long ipT6300
long ipT63
long ipT789
long ipT1032
void atom_level2(const TransitionProxy &t)
void atom_level3(const TransitionProxy &t10, const TransitionProxy &t21, const TransitionProxy &t20)
void atom_oi_calc(double *coloi)
Definition atom_oi.cpp:23
double atom_pop3(double g1, double g2, double g3, double o12, double o13, double o23, double a21, double a31, double a32, double Tex12, double Tex23, realnum *pop2, double abund, double gam2, double r12, double r13)
Definition atom_pop3.cpp:10
void atom_pop5(const double g[], const double EnerWN[], double cs12, double cs13, double cs14, double cs15, double cs23, double cs24, double cs25, double cs34, double cs35, double cs45, double a21, double a31, double a41, double a51, double a32, double a42, double a52, double a43, double a53, double a54, double p[], realnum abund, double *Cooling, double *CoolingDeriv, double pump01, double pump02, double pump03, double pump04)
Definition atom_pop5.cpp:13
void AtomSeqBeryllium(double cs12, double cs13, double cs23, const TransitionProxy &t, double a30)
void AtomSeqBoron(const TransitionProxy &t10, const TransitionProxy &t20, const TransitionProxy &t30, const TransitionProxy &t21, const TransitionProxy &t31, const TransitionProxy &t41, double cs40, double cs32, double cs42, double cs43, double pump_rate, const char *chLabel)
t_atoms atoms
Definition atoms.cpp:5
FILE * ioQQQ
Definition cddefines.cpp:7
double fnzone
Definition cddefines.cpp:15
#define ASSERT(exp)
Definition cddefines.h:578
sys_float sexp(sys_float x)
Definition service.cpp:914
#define MIN2
Definition cddefines.h:761
const int ipOXYGEN
Definition cddefines.h:312
#define POW2
Definition cddefines.h:929
#define EXIT_SUCCESS
Definition cddefines.h:138
int dprintf(FILE *fp, const char *format,...)
Definition service.cpp:1009
#define cdEXIT(FAIL)
Definition cddefines.h:434
const int ipHELIUM
Definition cddefines.h:306
float realnum
Definition cddefines.h:103
#define MAX2
Definition cddefines.h:782
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition cddefines.h:812
NORETURN void TotalInsanity(void)
Definition service.cpp:886
sys_float SDIV(sys_float x)
Definition cddefines.h:952
const int ipHYDROGEN
Definition cddefines.h:305
#define DEBUG_ENTRY(funcname)
Definition cddefines.h:684
long nWindLine
Definition cdinit.cpp:19
TransitionProxy::iterator iterator
Definition transition.h:280
t_colden colden
Definition colden.cpp:5
void CoolAdd(const char *chLabel, realnum lambda, double cool)
Definition cool_etc.cpp:13
void neiii_cs(double &neiii_cs3P13P0, double &neiii_cs3P23P1, double &neiii_cs3P23P0, double &neiii_cs3P1D2, double &neiii_cs3P1S0)
void oi_cs(double &oi_cs3P23P1, double &oi_cs3P23P0, double &oi_cs3P13P0, double &oi_cs3P1D2, double &oi_cs1D21S0, double &oi_cs3P1S0)
void CoolOxyg(void)
Definition cool_oxyg.cpp:24
void ov_cs(double &ov_cs1S01P1, double &ov_cs1S03P)
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)
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)
void oiv_cs(double &oiv_cs2P2D, double &oiv_cs2P12P3)
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)
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)
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)
void siv_cs(double &siv_cs2P12P3)
void sviii_cs(double &sviii_cs2P32P1)
t_CoolHeavy CoolHeavy
Definition coolheavy.cpp:5
const realnum SMALLFLOAT
Definition cpu.h:191
t_dense dense
Definition dense.cpp:24
t_embesq embesq
Definition embesq.cpp:5
diatomics h2("h2", 4100., &hmi.H2_total, Yan_H2_CS)
t_hmi hmi
Definition hmi.cpp:5
double ConvRate2CS(realnum gHi, realnum rate)
t_mole_local mole
Definition mole.cpp:7
t_oxy oxy
Definition oxy.cpp:5
t_phycon phycon
Definition phycon.cpp:6
static double * g
Definition species2.cpp:28
TransitionList TauLine2("TauLine2", &AnonStates)
TransitionProxy::iterator TauDummy
Definition taulines.cpp:60
TransitionList TauLines("TauLines", &AnonStates)
void TempChange(double TempNew, bool lgForceUpdate)
t_thermal thermal
Definition thermal.cpp:5
void DumpLine(const TransitionProxy &t)
void PutCS(double cs, const TransitionProxy &t)