cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ion_photo.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2022 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 /*ion_photo fill array PhotoRate with photoionization rates for heavy elements */
4 #include "cddefines.h"
5 #include "yield.h"
6 #include "heavy.h"
7 #include "opacity.h"
8 #include "thermal.h"
9 #include "conv.h"
10 #include "grainvar.h"
11 #include "elementnames.h"
12 #include "ionbal.h"
13 #include "phycon.h"
14 #include "hmi.h"
15 #include "rfield.h"
16 #include "atoms.h"
17 #include "iso.h"
18 #include "oxy.h"
19 #include "atmdat.h"
20 #include "fe.h"
21 #include "gammas.h"
22 #include "mole.h"
23 #include "freebound.h"
24 #include "dense.h"
25 #include "taulines.h"
26 
27 void ion_photo(
28  /* nelem is atomic number on C scale, 0 for H */
29  long int nelem ,
30  /* debugging flag to turn on print */
31  bool lgPrintIt )
32 {
33  long int ion,
34  iphi,
35  iplow,
36  ipop,
37  limit_hi,
38  limit_lo,
39  ns;
40 
41  DEBUG_ENTRY( "ion_photo()" );
42 
43  /* IonLow(nelem) and IonHigh(nelem) are bounds for evaluation*/
44 
45  /*begin sanity checks */
46  ASSERT( nelem < LIMELM );
47  ASSERT( dense.IonLow[nelem] >= 0 );
48  ASSERT( dense.IonLow[nelem] <= dense.IonHigh[nelem] );
49  ASSERT( dense.IonHigh[nelem] <= nelem + 1);
50  /*end sanity checks */
51 
52  /* NB - in following, nelem is on c scale, so is 29 for Zn */
53 
54  /* min since iso-like atom rates produced in iso_photo.
55  * IonHigh and IonLow range from 0 to nelem+1, but for photo rates
56  * we want 0 to nelem since cannot destroy fully stripped ion.
57  * since iso-seq done elsewhere, want to actually do IonHigh-xxx.*/
58  /* >>chng 00 dec 07, logic on limit_hi now precisely identical to ion_solver */
59  /* >>chng 02 mar 31, change limit_hi to < in loop (had been <=) and
60  * also coded for arbitrary number of iso sequences */
61  /*limit_hi = MIN2(nelem,dense.IonHigh[nelem]);
62  limit_hi = MIN2(nelem-2,dense.IonHigh[nelem]-1);*/
63  limit_hi = MIN2( dense.IonHigh[nelem] , nelem+1-NISO );
64 
65  /* >>chng 03 sep 26, always do atom itself since may be needed for molecules */
66  limit_hi = MAX2( 1 , limit_hi );
67 
68  /* when grains are present want to use atoms as lower bound to number of stages of ionization,
69  * since atomic rates needed for species within grains */
70  if( !conv.nPres2Ioniz && gv.lgDustOn() )
71  {
72  limit_lo = 0;
73  }
74  else
75  {
76  limit_lo = dense.IonLow[nelem];
77  }
78 
79  /* >>chng 01 dec 11, lower bound now limit_lo */
80  /* loop over all ions for this element */
81  /* >>chng 02 mar 31, now ion < limit_hi not <= */
82  for( ion=limit_lo; ion < limit_hi; ion++ )
83  {
84  /* loop over all shells for this ion */
85  for( ns=0; ns < Heavy.nsShells[nelem][ion]; ns++ )
86  {
87  /* always reevaluate the outer shell, and all shells if lgRedoStatic is set */
88  if( (ns==(Heavy.nsShells[nelem][ion]-1) || opac.lgRedoStatic) )
89  {
90  /* option to redo the rates only on occasion */
91  iplow = opac.ipElement[nelem][ion][ns][0];
92  iphi = opac.ipElement[nelem][ion][ns][1];
93  ipop = opac.ipElement[nelem][ion][ns][2];
94 
95  t_phoHeat photoHeat;
96 
97  /* compute the photoionization rate, ionbal.lgPhotoIoniz_On is 1, set 0
98  * with "no photoionization" command */
99  ionbal.PhotoRate_Shell[nelem][ion][ns][0] =
100  GammaK(iplow,iphi,
101  ipop,t_yield::Inst().elec_eject_frac(nelem,ion,ns,0),
102  &photoHeat )*ionbal.lgPhotoIoniz_On;
103 
104  /* these three lines must be kept parallel with the lines
105  * in GammaK ion*/
106 
107  /* the heating rate */
108  ionbal.PhotoRate_Shell[nelem][ion][ns][1] = photoHeat.HeatLowEnr*ionbal.lgPhotoIoniz_On;
109  ionbal.PhotoRate_Shell[nelem][ion][ns][2] = photoHeat.HeatHiEnr*ionbal.lgPhotoIoniz_On;
110  }
111  }
112 
113  /* add on compton recoil ionization for atoms to outer shell */
114  /* >>chng 02 mar 24, moved here from ion_solver */
115  /* this is the outer shell */
116  ns = (Heavy.nsShells[nelem][ion]-1);
117  /* this must be moved to photoionize and have code parallel to iso_photo code */
118  ionbal.PhotoRate_Shell[nelem][ion][ns][0] += ionbal.CompRecoilIonRate[nelem][ion];
119  /* add the heat as secondary-ionization capable heating */
120  ionbal.PhotoRate_Shell[nelem][ion][ns][2] += ionbal.CompRecoilHeatRate[nelem][ion];
121  }
122 
123  /* option to print information about these rates for this element */
124  if( lgPrintIt )
125  {
126  /* option to print rates for particular shell */
127  ns = 5;
128  ion = 1;
129  GammaPrt(
130  opac.ipElement[nelem][ion][ns][0],
131  opac.ipElement[nelem][ion][ns][1],
132  opac.ipElement[nelem][ion][ns][2],
133  ioQQQ, /* io unit we will write to */
134  ionbal.PhotoRate_Shell[nelem][ion][ns][0],
135  0.05);
136 
137  /* outer loop is from K to most number of shells present in atom */
138  for( ns=0; ns < Heavy.nsShells[nelem][0]; ns++ )
139  {
140  fprintf( ioQQQ, "\n %s", elementnames.chElementNameShort[nelem] );
141  fprintf( ioQQQ, " %s" , Heavy.chShell[ns]);
142  /* MB hydrogenic photo rate may not be included in beow */
143  for( ion=0; ion < dense.IonHigh[nelem]; ion++ )
144  {
145  if( Heavy.nsShells[nelem][ion] > ns )
146  {
147  fprintf( ioQQQ, " %8.1e", ionbal.PhotoRate_Shell[nelem][ion][ns][0] );
148  }
149  else
150  {
151  break;
152  }
153  }
154  }
155  fprintf(ioQQQ,"\n");
156  }
157 
158  /* Ly-alpha photoionization of Ca+
159  * valence shell is reevaluated by ion_photo on every call, so this does not double count */
160  if( nelem == ipCALCIUM )
161  {
162 
163  long id_Ca2;
164 
165  if( (id_Ca2 = atmdat.ipSpecIon[nelem][1]) < 0 )
166  {
167  return;
168  }
169 
170  // H I Lya OTS rates
171  double hlgam = rfield.otslin[ iso_sp[ipH_LIKE][ipHYDROGEN].trans(ipH2p,ipH1s).ipCont() -1];
172  double PhotoRate5 = 1.7e-18*hlgam,
173  PhotoRate4 = 8.4e-19*hlgam,
174  PhotoRate3 = 7.0e-18*hlgam,
175  PhotoRate2 = 4.8e-18*hlgam;
176 
177  realnum dstCala = (realnum)(dBaseStates[id_Ca2][4].Pop()*PhotoRate5 +
178  dBaseStates[id_Ca2][3].Pop()*PhotoRate4);
179  realnum dCaf12 = (realnum)((dBaseStates[id_Ca2][2].Pop()*PhotoRate3 +
180  dBaseStates[id_Ca2][1].Pop()*PhotoRate2)*2.31e-12);
181 
182  double denseCa2 = 0.;
183  for( long i = 0; i < dBaseSpecies[id_Ca2].numLevels_local; ++i)
184  {
185  denseCa2 += dBaseStates[id_Ca2][i].Pop();
186  }
187 
188  /* total rate Lalpha destroys CaII,
189  * this is only used in ioncali to increase ionization rate by
190  * adding it to the ct vector */
191  if( denseCa2 > 0. )
192  {
193  dstCala = (realnum)(
194  (dstCala + dCaf12/2.31e-12)/denseCa2);
195  {
196  /*@-redef@*/
197  enum {DEBUG_LOC=false};
198  /*@+redef@*/
199  if( DEBUG_LOC )
200  {
201  fprintf(ioQQQ," hlgam is %e\n", hlgam);
202  }
203  }
204  }
205  else
206  {
207  dstCala = 0.;
208  }
209 
210  long ns = 6, ion = 1;
211  ionbal.PhotoRate_Shell[nelem][ion][ns][0] += dstCala;
212  }
213 
214  if( nelem == ipCARBON )
215  {
216  /* >>chng 05 aug 10, add Leiden hack here to get same C0 photo rate
217  * as UMIST - negates difference in grain opacities */
219  {
220  int nelem=ipCARBON , ion=0 , ns=2;
221  ionbal.PhotoRate_Shell[nelem][ion][ns][0] =
223  exp(-(3.0*rfield.extin_mag_V_point))/1.66));
224  /* heating rates */
225  ionbal.PhotoRate_Shell[nelem][ion][ns][1] = 0.;
226  ionbal.PhotoRate_Shell[nelem][ion][ns][2] = 0.;
227  }
228  }
229 
230  if( nelem == ipNITROGEN )
231  {
232  /* photoionization from 2D of NI*/
233  t_phoHeat photoHeat;
234 
235  long id_n1;
236  double pop1 = 0., pop2 = 0.;
237 
238  double denseN1 = 0.;
239 
240  if( (id_n1 = atmdat.ipSpecIon[nelem][0]) >= 0 )
241  {
242 
243  for( long i = 0; i < dBaseSpecies[id_n1].numLevels_local; ++i)
244  {
245  denseN1 += dBaseStates[id_n1][i].Pop();
246  }
247 
248  if( denseN1 > SMALLFLOAT )
249  {
250  pop1 = dBaseStates[id_n1][1].Pop();
251  pop2 = dBaseStates[id_n1][2].Pop();
252 
253  atoms.p2nit = (realnum)(pop1+pop2)/denseN1;
254  // photo rate, population atoms.p2nit evaluated in cooling
255  atoms.d5200r = (realnum)GammaK(opac.in1[0],opac.in1[1],opac.in1[2],1.,&photoHeat);
256  /* valence shell photoionization, followed by heating; [0][6] => atomic nitrogen */
258  (1. - atoms.p2nit) + atoms.p2nit*atoms.d5200r;
260  (1. - atoms.p2nit) + photoHeat.HeatNet*atoms.p2nit;
261  }
262  else
263  {
264  atoms.p2nit = 0.;
265  atoms.d5200r = 0.;
266  }
267  }
268  else
269  {
270  atoms.p2nit = 0.;
271  atoms.d5200r = 0.;
272  }
273  }
274 
275  if ( nelem == ipMAGNESIUM )
276  {
277  if( dense.IonLow[ipMAGNESIUM] <= 1 )
278  {
279 
280  long id_mg2;
281  double pop1 = 0., pop2 = 0.;
282 
283  double denseMg2 = 0.;
284 
285  if( (id_mg2 = atmdat.ipSpecIon[nelem][1]) >= 0 )
286  {
287 
288  for( long i = 0; i < dBaseSpecies[id_mg2].numLevels_local; ++i)
289  {
290  denseMg2 += dBaseStates[id_mg2][i].Pop();
291  }
292 
293  if( denseMg2 > SMALLFLOAT )
294  {
295  pop1 = dBaseStates[id_mg2][1].Pop();
296  pop2 = dBaseStates[id_mg2][2].Pop();
297 
298  atoms.popMg2 = (realnum)(pop1+pop2)/denseMg2;
299 
300  t_phoHeat dummy;
301  /* photoionization from excited upper state of 2798 */
302  double rmg2l = GammaK(opac.ipmgex,
303  iso_sp[ipH_LIKE][ipHYDROGEN].fb[0].ipIsoLevNIonCon,opac.ipOpMgEx,1., &dummy );
304  ionbal.PhotoRate_Shell[ipMAGNESIUM][1][3][0] += rmg2l*atoms.popMg2;
305 
306  if( ionbal.PhotoRate_Shell[ipMAGNESIUM][1][3][0] > 1e-30 )
307  {
308  /* remember max relative photoionization rate for possible comment */
310  ionbal.PhotoRate_Shell[ipMAGNESIUM][1][3][0]));
311  }
312  }
313  else
314  {
315  atoms.xMg2Max = 0.;
316  atoms.popMg2 = 0.;
317  }
318  }
319  else
320  {
321  atoms.xMg2Max = 0.;
322  atoms.popMg2 = 0.;
323  }
324  }
325  else
326  {
327  atoms.xMg2Max = 0.;
328  atoms.popMg2 = 0.;
329  }
330  }
331 
332  if( nelem == ipOXYGEN )
333  {
334  t_phoHeat dummy;
335 
336  /* O++ */
337  oxy.poiii2Max = 0.;
338  oxy.poiii3Max = 0.;
339  oxy.poiii2 = 0.;
340  oxy.poiii3 = 0.;
341  oxy.r4363Max = 0.;
342  oxy.r5007Max = 0.;
343  oxy.d5007r = 0.;
344 
345  /* neutral O */
346  oxy.poiexc = 0.;
347  oxy.poimax = 0.;
348  oxy.d6300 = 0.;
349 
350  /* other transitions */
351  oxy.s3727 = 0.;
352  oxy.s7325 = 0.;
353  oxy.AugerO3 = 0.;
354 
355 
356  /* oxygen, atomic number 8 */
357  if( !dense.lgElmtOn[ipOXYGEN] )
358  {
359  thermal.setHeating(7,9,0.);
360  return;
361  }
362 
363  long id_o3, id_o1;;
364  if( (id_o3 = atmdat.ipSpecIon[nelem][2]) >= 0 )
365  {
366  double denseO3 = 0.;
367  for( long i = 0; i < dBaseSpecies[id_o3].numLevels_local; ++i)
368  {
369  denseO3 += dBaseStates[id_o3][i].Pop();
370  }
371  if( denseO3 > SMALLFLOAT )
372  {
373  oxy.poiii3 = dBaseStates[id_o3][4].Pop()/denseO3;
374  oxy.poiii2 = dBaseStates[id_o3][3].Pop()/denseO3;
375 
376  double denseO3_First3 = (dBaseStates[id_o3][0].Pop() +
377  dBaseStates[id_o3][1].Pop() +
378  dBaseStates[id_o3][2].Pop())/denseO3;
379 
380  ASSERT(oxy.poiii3 <= 1. && oxy.poiii3 >= 0.);
381  ASSERT(oxy.poiii2 <= 1. && oxy.poiii2 >= 0.);
382 
383  /* photoionization from O++ 1D
384  *
385  * estimate gamma function by assuming no frequency dependence
386  * betwen 1D and O++3P edge */
387  /* destroy upper level of OIII 5007*/
389  opac.ipo3exc[2] , 1., &dummy ));
390 
391  /* destroy upper level of OIII 4363*/
392  realnum oxy_d4363 = (realnum)(GammaK(opac.ipo3exc3[0],opac.ipo3exc3[1],
393  opac.ipo3exc3[2] , 1., &dummy ));
394 
395  /* photoionization from excited states */
396  /* doubly ionized oxygen destruction */
398  denseO3_First3 + oxy.d5007r*oxy.poiii2 + oxy_d4363*oxy.poiii3;
399 
400  if( ionbal.PhotoRate_Shell[ipOXYGEN][2][2][0] > 1e-30 && dense.IonLow[ipOXYGEN] <= 2 )
401  {
402  if( (oxy.d5007r*oxy.poiii2 + oxy_d4363*oxy.poiii3)/
404  oxy.r5007Max) )
405  {
407  oxy.poiii3Max = (realnum)(oxy_d4363*oxy.poiii3/ionbal.PhotoRate_Shell[ipOXYGEN][2][2][0]);
408  }
409  oxy.r4363Max = (realnum)(MAX2(oxy.r4363Max,oxy_d4363));
411  }
412  }
413  }
414 
415  if( (id_o1 = atmdat.ipSpecIon[nelem][0]) >= 0 )
416  {
417  double denseO1 = 0.;
418  for( long i = 0; i < dBaseSpecies[id_o1].numLevels_local; ++i)
419  {
420  denseO1 += dBaseStates[id_o1][i].Pop();
421  }
422 
423  if( denseO1 > SMALLFLOAT )
424  {
425  double denseO1_First3 = (dBaseStates[id_o1][0].Pop() +
426  dBaseStates[id_o1][1].Pop() +
427  dBaseStates[id_o1][2].Pop())/denseO1;
428 
429  oxy.poiexc = dBaseStates[id_o1][3].Pop()/denseO1;
430  ASSERT(oxy.poiexc <= 1. && oxy.poiexc >= 0.);
431 
432  /* destroy upper level of OI 6300*/
434  opac.ipo1exc[2] , 1., &dummy ));
435 
436  /* photoionization from excited states */
437  /* neutral oxygen destruction */
439  denseO1_First3 + oxy.d6300*oxy.poiexc;
440 
441  /* ct into excited states */
442  if( dense.IonLow[ipOXYGEN] <= 0 && (ionbal.PhotoRate_Shell[ipOXYGEN][0][2][0] +
444  {
446  (ionbal.PhotoRate_Shell[ipOXYGEN][0][2][0]+
447  atmdat.CharExcIonOf[ipHYDROGEN][ipOXYGEN][0]* dense.xIonDense[ipHYDROGEN][1])));
448  }
449  }
450  }
451 
452  /* save atomic oxygen photodestruction rate for 3727 creation */
453  if( dense.IonLow[ipOXYGEN] == 0 && oxy.i2d < rfield.nflux )
454  {
455  oxy.s3727 = (realnum)(GammaK(oxy.i2d,oxy.i2p,opac.iopo2d , 1., &dummy ));
456 
457  long int iup = MIN2(iso_sp[ipH_LIKE][1].fb[0].ipIsoLevNIonCon,rfield.nflux);
458  oxy.s7325 = (realnum)(GammaK(oxy.i2d,iup,opac.iopo2d , 1., &dummy ));
459 
460  oxy.s7325 -= oxy.s3727;
461  oxy.s3727 = oxy.s3727 + oxy.s7325;
462 
463  /* ratio of cross sections */
464  oxy.s7325 *= 0.66f;
465  }
466 
468 
472  }
473 
474  if( nelem == ipIRON )
475  {
476  if( !dense.lgElmtOn[ipIRON] )
477  {
478  fe.fekcld = 0.;
479  fe.fekhot = 0.;
480  fe.fegrain = 0.;
481  }
482  else
483  {
484  const int NDIM = ipIRON+1;
485 
486  static const double fyield[NDIM+1] = {.34,.34,.35,.35,.36,.37,.37,.38,.39,.40,
487  .41,.42,.43,.44,.45,.46,.47,.47,.48,.48,.49,.49,.11,.75,0.,0.,0.};
488 
489  long int i, limit, limit2;
490  /* total fluorescence production of K-alpha
491  * "cold" iron has M-shell electrons, up to Fe 18 */
492  fe.fekcld = 0.;
493  limit = MIN2(18,dense.IonHigh[ipIRON]);
494 
495  for( i=dense.IonLow[ipIRON]; i < limit; i++ )
496  {
497  ASSERT( i < NDIM + 1 );
498  fe.fekcld +=
500  fyield[i]);
501  }
502 
503  /* same sum for hot iron, do not include one and two electron Fe */
504  fe.fekhot = 0.;
505  limit = MAX2(18,dense.IonLow[ipIRON]);
506 
507  limit2 = MIN2(ipIRON-1,dense.IonHigh[ipIRON]);
508  ASSERT( limit2 <= LIMELM + 1 );
509 
510  for( i=limit; i < limit2; i++ )
511  {
512  ASSERT( i < NDIM + 1 );
513  fe.fekhot +=
515  fyield[i]);
516  }
517 
518  /* Fe Ka from grains - Fe in grains assumed to be atomic
519  * gv.elmSumAbund[ipIRON] is number density of iron added over all grain species */
520  i = 0;
521  /* fyield is 0.34 for atomic fe */
522  fe.fegrain = ( gv.lgWD01 ) ? 0.f : (realnum)(ionbal.PhotoRate_Shell[ipIRON][i][0][0]*fyield[i]*
524  }
525  }
526 
527  return;
528 }
long iopo2d
Definition: opacity.h:300
t_mole_global mole_global
Definition: mole.cpp:7
double HeatHiEnr
Definition: thermal.h:208
long int ipElement[LIMELM][LIMELM][7][3]
Definition: opacity.h:223
t_atmdat atmdat
Definition: atmdat.cpp:6
t_thermal thermal
Definition: thermal.cpp:6
const int ipMAGNESIUM
Definition: cddefines.h:360
double GammaK(long int ipLoEnr, long int ipHiEnr, long int ipOpac, double yield1, t_phoHeat *photoHeat)
double ** CompRecoilIonRate
Definition: ionbal.h:162
t_opac opac
Definition: opacity.cpp:5
double ** CompRecoilHeatRate
Definition: ionbal.h:168
t_Heavy Heavy
Definition: heavy.cpp:5
realnum fekhot
Definition: fe.h:11
t_fe fe
Definition: fe.cpp:5
const realnum SMALLFLOAT
Definition: cpu.h:246
const int NISO
Definition: cddefines.h:311
long int ipo1exc[3]
Definition: opacity.h:223
long ipmgex
Definition: opacity.h:300
long int IonHigh[LIMELM+1]
Definition: dense.h:130
const int ipOXYGEN
Definition: cddefines.h:356
bool lgPhotoIoniz_On
Definition: ionbal.h:117
t_conv conv
Definition: conv.cpp:5
realnum d5200r
Definition: atoms.h:126
t_phycon phycon
Definition: phycon.cpp:6
long int i2d
Definition: oxy.h:38
long int ipo3exc[3]
Definition: opacity.h:223
realnum poiii2Max
Definition: oxy.h:19
realnum elmSumAbund[LIMELM]
Definition: grainvar.h:510
FILE * ioQQQ
Definition: cddefines.cpp:7
realnum r4363Max
Definition: oxy.h:19
vector< freeBound > fb
Definition: iso.h:481
#define MIN2(a, b)
Definition: cddefines.h:803
t_dense dense
Definition: global.cpp:15
realnum AugerO3
Definition: oxy.h:31
static t_yield & Inst()
Definition: cddefines.h:209
realnum popMg2
Definition: atoms.h:129
t_elementnames elementnames
Definition: elementnames.cpp:5
t_iso_sp iso_sp[NISO][LIMELM]
Definition: iso.cpp:11
double xIonDense[LIMELM][LIMELM+1]
Definition: dense.h:135
realnum * otslin
Definition: rfield.h:183
t_ionbal ionbal
Definition: ionbal.cpp:8
realnum fegrain
Definition: fe.h:15
const int ipIRON
Definition: cddefines.h:374
long int IonLow[LIMELM+1]
Definition: dense.h:129
realnum r5007Max
Definition: oxy.h:19
long int nsShells[LIMELM][LIMELM]
Definition: heavy.h:28
bool lgLeidenHack
Definition: mole.h:334
realnum poiii3
Definition: oxy.h:19
const int ipH1s
Definition: iso.h:29
long int nPres2Ioniz
Definition: conv.h:145
void ion_photo(long int nelem, bool lgPrintIt)
Definition: ion_photo.cpp:27
t_rfield rfield
Definition: rfield.cpp:9
long & ipCont() const
Definition: transition.h:489
realnum s7325
Definition: oxy.h:34
t_atoms atoms
Definition: atoms.cpp:5
float realnum
Definition: cddefines.h:124
long ipOpMgEx
Definition: opacity.h:300
double HeatLowEnr
Definition: thermal.h:206
realnum xMg2Max
Definition: atoms.h:129
char chElementNameShort[LIMELM][CHARS_ELEMENT_NAME_SHORT]
Definition: elementnames.h:21
realnum UV_Cont_rel2_Habing_TH85_face
Definition: hmi.h:74
double **** PhotoRate_Shell
Definition: ionbal.h:112
bool lgElmtOn[LIMELM]
Definition: dense.h:160
TransitionProxy trans(const long ipHi, const long ipLo)
Definition: iso.h:473
void setHeating(long nelem, long ion, double heating)
Definition: thermal.h:190
double extin_mag_V_point
Definition: rfield.h:258
const int ipH2p
Definition: iso.h:31
bool lgWD01
Definition: grainvar.h:479
long int ipo3exc3[3]
Definition: opacity.h:223
#define ASSERT(exp)
Definition: cddefines.h:613
realnum p2nit
Definition: atoms.h:126
const int ipCALCIUM
Definition: cddefines.h:368
const int ipNITROGEN
Definition: cddefines.h:355
const int ipH_LIKE
Definition: iso.h:64
const int LIMELM
Definition: cddefines.h:308
realnum poiii2
Definition: oxy.h:19
realnum poiexc
Definition: oxy.h:19
vector< vector< long > > ipSpecIon
Definition: atmdat.h:455
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:723
long int in1[3]
Definition: opacity.h:223
vector< qList > dBaseStates
Definition: taulines.cpp:16
bool lgRedoStatic
Definition: opacity.h:160
realnum d6300
Definition: oxy.h:19
vector< species > dBaseSpecies
Definition: taulines.cpp:15
t_oxy oxy
Definition: oxy.cpp:5
#define MAX2(a, b)
Definition: cddefines.h:824
int fprintf(const Output &stream, const char *format,...)
Definition: service.cpp:1121
char chShell[7][3]
Definition: heavy.h:31
realnum d5007r
Definition: oxy.h:19
const int ipCARBON
Definition: cddefines.h:354
realnum s3727
Definition: oxy.h:34
double HeatNet
Definition: thermal.h:204
double hmrate4(double a, double b, double c, double te)
Definition: mole.h:537
void GammaPrt(long int ipLoEnr, long int ipHiEnr, long int ipOpac, FILE *ioFILE, double total, double threshold)
GrainVar gv
Definition: grainvar.cpp:5
t_hmi hmi
Definition: hmi.cpp:5
double CharExcIonOf[NCX][LIMELM][LIMELM+1]
Definition: atmdat.h:300
realnum poiii3Max
Definition: oxy.h:19
double te
Definition: phycon.h:21
realnum fekcld
Definition: fe.h:11
long int i2p
Definition: oxy.h:38
bool lgDustOn() const
Definition: grainvar.h:475
const int ipHYDROGEN
Definition: cddefines.h:349
long int nflux
Definition: rfield.h:46
realnum poimax
Definition: oxy.h:19