cloudy  trunk
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
mole_h2_etc.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 /* mole_H2_LTE sets Boltzmann factors and LTE unit population of large H2 molecular */
4 /* H2_zero_pops_too_low - zero out some H2 variables if we decide not to compute
5  * the full sim, called by H2_LevelPops*/
6 /* H2_Solomon_rate find rates between H2s and H2g and other levels,
7  * for eventual use in the chemistry */
8 /* gs_rate evaluate rates between ground and star states */
9 /* H2_He_coll_init initialize H2 - He collision data set
10  * H2_He_coll interpolate on h2 - He collision data set to return rate at temp*/
11 #include "cddefines.h"
12 #include "phycon.h"
13 #include "hmi.h"
14 #include "h2_priv.h"
15 #include "rfield.h"
16 #include "thermal.h"
17 #include "ionbal.h"
18 #include "gammas.h"
19 #include "iterations.h"
20 #include "prt.h"
21 
22 /*H2_Solomon_rate find rates between H2s and H2g and other levels,
23  * for eventual use in the chemistry */
25 {
26  DEBUG_ENTRY( "H2_Solomon_rate()" );
27 
28  /* iElecLo will always be X in this routine */
29 
30  /* find rate (s-1) h2 dissociation into X continuum by Solomon process and
31  * assign to the TH85 g and s states
32  * these will go back into the chemistry network */
33 
34  /* rates [s-1] for dissociation from s or g, into electronic excited states
35  * followed by dissociation */
38 
39  /* these are used in a print statement - are they needed? */
42 
43  /* at this point we have already evaluated the sum of the radiative rates out
44  * of the electronic excited states - this is H2_rad_rate_out[electronic][vib][rot]
45  * and this includes both decays into the continuum and bound states of X */
46 
47  for( TransitionList::iterator tr = trans.begin(); tr != rad_end; ++tr )
48  {
49  qList::iterator Hi = (*tr).Hi() ;
50  if( (*Hi).n() < 1 ) continue;
51  double factor = (double)H2_dissprob[(*Hi).n()][(*Hi).v()][(*Hi).J()]/H2_rad_rate_out[(*Hi).n()][(*Hi).v()][(*Hi).J()];
52  /* this is the rate [cm-3 s-1] that mole goes from
53  * lower level into electronic excited states then
54  * into continuum */
55  double rate_up_cont = (*(*tr).Lo()).Pop() * (*tr).Emis().pump() * factor;
56 
57  /* rate electronic state decays into H2g */
58  double elec_decay = (*(*tr).Hi()).Pop() * (*tr).Emis().Aul() *
59  ((*tr).Emis().Ploss());
60  if( (*(*tr).Lo()).energy().WN() > ENERGY_H2_STAR && hmi.lgLeiden_Keep_ipMH2s )
61  {
62  /* this is H2g up to excited then to continuum -
63  * cm-3 s-1 at this point */
64  Solomon_dissoc_rate_s += rate_up_cont;
65  /* rate electronic state decays into H2g */
66  Solomon_elec_decay_s += elec_decay;
67  }
68  else
69  {
70  /* this is H2g up to excited then to continuum -
71  * cm-3 s-1 at this point */
72  Solomon_dissoc_rate_g += rate_up_cont;
73  /* rate electronic state decays into H2g */
74  Solomon_elec_decay_g += elec_decay;
75  }
76  }
77 
78  double H2_sum_excit_elec_den = GetExcitedElecDensity();
79 
80  /* at this point units of Solomon_elec_decay_g, H2s are cm-3 s-1
81  * since populations are included -
82  * div by pops to get actual dissocation rate, s-1 */
83  if( *dense_total > SMALLFLOAT )
84  {
85  Solomon_elec_decay_g /= SDIV( H2_sum_excit_elec_den );
86  Solomon_elec_decay_s /= SDIV( H2_sum_excit_elec_den );
87 
88  /* will be used for H2s-> H + H */
90 
91  /* will be used for H2g-> H + H */
93 
94  }
95  else
96  {
99 
100  }
101  /*fprintf(ioQQQ,"DEBUG H2 new %.2e %.2e %.2e %.2e \n",
102  Solomon_elec_decay_g ,
103  Solomon_elec_decay_s ,
104  Solomon_dissoc_rate_s,
105  Solomon_dissoc_rate_g );*/
106 
107  return;
108 }
109 
110 /* gs_rate evaluate rate between ground and star states */
111 double diatomics::gs_rate( void )
112 {
113  DEBUG_ENTRY( "diatomics::gs_rate()" );
114 
115  /* rate g goes to s */
116  double ground_to_star_rate = 0.;
117 
118  /* now find all pumps up to electronic excited states */
119  /* sum over all electronic states, finding dissociation rate */
120  for( long iElecHi=1; iElecHi<n_elec_states; ++iElecHi )
121  {
122  for( long iVibHi=0; iVibHi<=nVib_hi[iElecHi]; ++iVibHi )
123  {
124  for( long iRotHi=Jlowest[iElecHi]; iRotHi<=nRot_hi[iElecHi][iVibHi]; ++iRotHi )
125  {
126  long ipHi = ipEnergySort[iElecHi][iVibHi][iRotHi];
127  double decay_star = H2_rad_rate_out[iElecHi][iVibHi][iRotHi] - H2_dissprob[iElecHi][iVibHi][iRotHi];
128  /* loop over all other levels in H2g, subtracting
129  * their rate - remainder is rate into star, this is
130  * usually only a few levels */
131  for( long ipOther=0; ipOther < nEner_H2_ground; ++ipOther )
132  {
133  if( lgH2_radiative[ipHi][ipOther] )
134  {
135  EmissionProxy em = trans[ ipTransitionSort[ipHi][ipOther] ].Emis();
136  decay_star -= em.Aul() * ( em.Ploss() );
137  }
138  }
139  /* MAX because may underflow to negative numbers is rates very large
140  * this is fraction that returns to H2s */
141  decay_star = MAX2(0., decay_star)/SDIV(H2_rad_rate_out[iElecHi][iVibHi][iRotHi]);
142 
143  /* loop over all levels in H2g */
144  for( long ipLoX=0; ipLoX < nEner_H2_ground; ++ipLoX )
145  {
146  if( lgH2_radiative[ipHi][ipLoX] )
147  {
148  /* this is the rate [cm-3 s-1] that mole goes from
149  * lower level into electronic excited states then
150  * into continuum */
151  double rate_up_cont =
152  states[ipLoX].Pop() *
153  trans[ ipTransitionSort[ipHi][ipLoX] ].Emis().pump();
154  ground_to_star_rate += rate_up_cont*decay_star;
155 
156  }/* end if line exists */
157  }
158  }/* end loop rot electronic excited */
159  }/* end loop vib electronic excited */
160  }/* end loop electronic electronic excited */
161 
162  /* at this point units are cm-3 s-1 - convert to rate s-1 */
163  ground_to_star_rate /= SDIV( H2_den_g );
164  return ground_to_star_rate;
165 }
166 
167 long diatomics::OpacityCreate( double *stack )
168 {
169  DEBUG_ENTRY( "diatomics::OpacityCreate()" );
170 
171  ASSERT( photoion_opacity_fun != NULL );
172 
173  for( long i=ip_photo_opac_thresh-1; i < rfield.nflux_with_check; i++ )
174  {
175  /* >>chng 05 nov 24, add H2 photoionization cross section */
176  //opac.OpacStack[i-ip_photo_opac_thresh + ip_photo_opac_offset] =
179  //Yan_H2_CS(rfield.anu(i));
180  }
181 
182  //opac.nOpacTot += rfield.nflux_with_check - ip_photo_opac_thresh + 1;
184 }
185 
186 /* H2_zero_pops_too_low - zero out some H2 variables if we decide not to compute
187  * the full sim, called by H2_LevelPops*/
189 {
190  DEBUG_ENTRY( "H2_zero_pops_too_low()" );
191 
192  // zero populations
193  fill_n( pops_per_elec, N_ELEC, 0. );
194  pops_per_vib.zero();
195  for( qList::iterator st = states.begin(); st != states.end(); ++st )
196  {
197  double pop = H2_populations_LTE[ (*st).n() ][ (*st).v() ][ (*st).J() ] * (*dense_total);
198  H2_old_populations[ (*st).n() ][ (*st).v() ][ (*st).J() ] = pop;
199  (*st).Pop() = pop;
200  }
201 
202 
203  for( TransitionList::iterator tr = trans.begin(); tr != rad_end; ++tr )
204  {
205  /* population of lower level with correction for stim emission */
206  (*tr).Emis().PopOpc() = (*(*tr).Lo()).Pop() - (*(*tr).Hi()).Pop() * (*(*tr).Lo()).g() / (*(*tr).Hi()).g();
207 
208  /* following two heat exchange excitation, deexcitation */
209  (*tr).Coll().cool() = 0.;
210  (*tr).Coll().heat() = 0.;
211 
212  /* intensity of line */
213  (*tr).Emis().xIntensity() = 0.;
214  (*tr).Emis().xObsIntensity() = 0.;
215  (*tr).Emis().ots() = 0.;
216  }
217 
220  HeatDiss = 0.;
221  HeatDexc = 0.;
222  HeatDexc_deriv = 0.;
225  return;
226 }
227 
228 /*mole_H2_LTE sets Boltzmann factors and LTE unit population of large H2 molecular */
230 {
231  DEBUG_ENTRY( "mole_H2_LTE()" );
232 
233  /* do we need to update the Boltzmann factors and unit LTE populations? */
234  if( ! fp_equal( phycon.te, TeUsedBoltz ) )
235  {
236  double part_fun = 0.;
238  /* loop over all levels setting H2_Boltzmann and deriving partition function */
239  for( qList::iterator st = states.begin(); st != states.end(); ++st )
240  {
241  double bfac = dsexp( (*st).energy().K() / phycon.te );
242  (*st).Boltzmann() = bfac;
243  /* energy is relative to lowest level in the molecule, v=0, J=0,
244  * so Boltzmann factor is relative to this level */
245  /* sum the partition function - Boltzmann factor times statistical weight */
246  part_fun += bfac * (*st).g();
247  ASSERT( part_fun > 0 );
248  }
249  /* have partition function, set H2_populations_LTE (populations for unit H2 density) */
250  for( qList::const_iterator st = states.begin(); st != states.end(); ++st )
251  {
252  long iElec = (*st).n();
253  long iVib = (*st).v();
254  long iRot = (*st).J();
255  /* these are the H2 LTE populations for a unit H2 density -
256  * these populations will sum up to unity */
257  H2_populations_LTE[iElec][iVib][iRot] =
258  (*st).Boltzmann() * (*st).g() / part_fun;
259  }
260  if( nTRACE >= n_trace_full )
261  fprintf(ioQQQ,
262  "mole_H2_LTE set H2_Boltzmann factors, T=%.2f, partition function is %.2f\n",
263  phycon.te,
264  part_fun);
265 
266  {
267  enum { DEBUG_LOC = false };
268  if( DEBUG_LOC )
269  {
270  double total_density = 0.;
271  for( qList::const_iterator st = states.begin(); st != states.end(); ++st )
272  {
273  total_density +=
274  H2_populations_LTE[ (*st).n() ][ (*st).v() ][ (*st).J() ];
275  }
276  ASSERT( fp_equal_tol( total_density, 1.0, 1e-5 ) );
277  }
278  }
279  {
280  enum { DEBUG_LOC = false };
281  if( DEBUG_LOC )
282  {
283  printf( "# part_fun = %10e\n", part_fun );
284  for( qList::const_iterator st = states.begin(); st != states.end(); ++st )
285  {
286  printf( "%5ld\t%5ld\t%5ld\t%10f\t%10e\t%10e\t%10e\n",
287  (*st).n(), (*st).v(), (*st).J(),
288  (*st).g(),
289  (*st).energy().K(), (*st).Boltzmann(),
290  H2_populations_LTE[ (*st).n() ][ (*st).v() ][ (*st).J() ] );
291  }
292  // separate iterations
293  printf("\n\n");
294  }
295  }
296  }
297 
298  return;
299 }
300 
301 /*H2_Reset called by IterRestart to reset variables that are needed after an iteration */
303 {
304 
305  DEBUG_ENTRY( "H2_Reset()" );
306 
307  if(nTRACE)
308  fprintf(ioQQQ,
309  "\n***************H2_Reset called, resetting nCall_this_iteration, zone %.2f iteration %li\n",
310  fnzone,
311  iteration );
312 
313  /* number of times large molecules evaluated in this iteration,
314  * is false if never evaluated, on next evaluation will start with LTE populations */
316  nCall_this_zone = 0;
317 
318  /* these remember the largest and smallest factors needed to
319  * renormalize the H2 chemistry */
320  renorm_max = 1.;
321  renorm_min = 1.;
322 
323  /* counters used by H2_itrzn to find number of calls of h2 per zone */
324  nH2_pops = 0;
325  nH2_zone = 0;
326  /* this is used to establish zone number for evaluation of number of levels in matrix */
327  nzone_nlevel_set = 0;
328 
329  nzoneAsEval = -1;
330  iterationAsEval = -1;
331 
332  TeUsedColl = -1;
333  TeUsedBoltz = -1;
334 
335  lgEvaluated = false;
336 
337  /* zero out array used to save emission line intensities */
338  H2_SaveLine.zero();
339 
340  /* this was option to print all electronic states in the main printout - but
341  * number of electronic states was not known at initialization so set to -1,
342  * will set properly now */
343  if( nElecLevelOutput < 1 )
345 
346  lgPrtMatrix = false;
347  if( strncmp( prt.matrix.species, label.c_str(), 2 ) == 0 )
348  {
349  lgPrtMatrix = true;
350  // printf("label = '%s'\t prt..matrix.species = '%s'\t lgPrtMatrix = %d\n",
351  // label.c_str(), prt..matrix.species, int( lgPrtMatrix ) );
352  }
353 
354  return;
355 }
356 
357 /*Yan_H2_CS - cross sections for the photoionization of H2
358  * may be represented analytically in the paper
359  *>>refer H2 photo cs Yan, M.; Sadeghpour, H. R.; Dalgarno, A. 1998, ApJ, 496, 1044
360  * This is revised version given in ERRATUM 2001, ApJ, 559, 1194
361  * return value is photo cs in cm-2 */
362 double Yan_H2_CS( double energy_ryd /* photon energy in ryd */)
363 {
364 
365  double energy_keV; /* keV */
366  double cross_section; /* barns */
367  double x; /* x = E/15.4 */
368  double xsqrt , x15 , x2;
369  double energy = energy_ryd * EVRYD;
370 
371  DEBUG_ENTRY( "Yan_H2_CS()" );
372 
373  /* energy relative to threshold */
374  x = energy / 15.4;
375  energy_keV = energy/1000.0;
376  xsqrt = sqrt(x);
377  x15 = x * xsqrt;
378  x2 = x*x;
379 
380  if( energy < 15.4 )
381  {
382  cross_section = 0.;
383  }
384 
385  else if(energy >= 15.4 && energy < 18.)
386  {
387  cross_section = 1e7 * (1 - 197.448/xsqrt + 438.823/x - 260.481/x15 + 17.915/x2);
388  /* this equation is obviously negative for x = 1 */
389  cross_section = MAX2( 0. , cross_section );
390  }
391 
392  else if(energy >= 18. && energy <= 30.)
393  {
394  cross_section = (-145.528 +351.394*xsqrt - 274.294*x + 74.320*x15)/powpq(energy_keV,7,2);
395  }
396 
397  else if(energy > 30. && energy <= 85.)
398  {
399  cross_section = (65.304 - 91.762*xsqrt + 51.778*x - 9.364*x15)/powpq(energy_keV,7,2);
400  }
401 
402  /* the high-energy tail */
403  else
404  {
405  cross_section = 45.57*(1 - 2.003/xsqrt - 4.806/x + 50.577/x15 - 171.044/x2 + 231.608/(xsqrt*x2) - 81.885/(x*x2))/powpq(energy_keV,7,2);
406  }
407 
408  return( cross_section * 1e-24 );
409 }
410 
412 {
413  DEBUG_ENTRY( "diatomics::CalcPhotoionizationRate()" );
414 
415  /* must reevaluate During search phase */
417  {
418  t_phoHeat photoHeat;
419  /* generally not important, do one time per zone */
424  &photoHeat)*
426  /* Compton recoil ionization - we include this in the H2 photoionization
427  * rate but not the heating rate - factor of two since assume 2H
428  * is same as two H0 at such high energies */
430 
431  /* photo heating - this has units s-1 - needs H2 density
432  * to become vol heat rate */
435  nzone_eval = nzone;
437  }
438 
439  return;
440 }
441 
443 {
444  DEBUG_ENTRY( "LTE_Cooling()" );
445 
446  /* force calculation of LTE level populations --
447  * done if the temperature has changed */
448  mole_H2_LTE();
449 
450  /* H2 line cooling out of X band only, as we are interested in excitation
451  * temperatures no more than 10,000 K */
452  double h2_lte_cooling = 0.;
453  for( TransitionList::iterator tr = trans.begin(); tr != trans.end(); ++tr )
454  {
455  qList::iterator Hi = (*tr).Hi();
456 
457  if( (*Hi).n() > 0 )
458  continue;
459 
460  /* cooling is product of the transition energy and Einstein A, and
461  * the Boltzmann factor of molecules in the upper transition level
462  *>>refer eq(38) Glover & Abel 2008, MNRAS, 388, 1627
463  * -- must be modified by branching ratio */
464  h2_lte_cooling += (*tr).Emis().Aul() * (*tr).EnergyErg() *
465  H2_populations_LTE[ (*Hi).n() ][ (*Hi).v() ][ (*Hi).J() ];
466  }
467 
468  {
469  enum { DEBUG_LOC = false };
470  if( DEBUG_LOC && iterations.lgLastIt )
471  {
472  for( TransitionList::iterator tr = trans.begin(); tr != trans.end(); ++tr )
473  {
474  qList::iterator Hi = (*tr).Hi();
475 
476  if( (*Hi).n() > 0 )
477  continue;
478 
479  qList::iterator Lo = (*tr).Lo();
480  printf("%2ld %2ld %2ld\t %2ld %2ld %2ld\t %10e\t %10e\t %10e\t %10e\n",
481  (*Hi).n(), (*Hi).v(), (*Hi).J(),
482  (*Lo).n(), (*Lo).v(), (*Lo).J(),
483  (*tr).Emis().Aul(),
484  (*tr).EnergyErg(),
485  H2_populations_LTE[ (*Hi).n() ][ (*Hi).v() ][ (*Hi).J() ],
486  (*tr).Emis().Aul() *
487  (*tr).EnergyErg() *
488  H2_populations_LTE[ (*Hi).n() ][ (*Hi).v() ][ (*Hi).J() ]);
489  }
490  // separate iterations
491  printf("\n\n");
492  }
493  }
494 
495  return h2_lte_cooling;
496 }
497 
498 /* Interpolate the LTE cooling (per molecule) tabulated data prepared
499  * with the big model.
500  */
502 {
503  DEBUG_ENTRY( "interpolate_LTE_Cooling()" );
504 
505  double cool = 0.;
506 
507  if( Temp < LTE_Temp[0] || Temp > LTE_Temp[ LTE_Temp.size()-1 ] )
508  return cool;
509 
510  size_t i = 0;
511  while( i < LTE_Temp.size() && Temp > LTE_Temp[i] )
512  i++;
513 
514  cool = ((Temp-LTE_Temp[i-1]) * LTE_cool[i] + (LTE_Temp[i]-Temp) * LTE_cool[i-1])
515  / ( LTE_Temp[i] - LTE_Temp[i-1] );
516 
517  if( cool < 0. )
518  cool = 0.;
519 
520  return cool;
521 }
int nTRACE
Definition: h2_priv.h:406
const int N_ELEC
Definition: h2_priv.h:34
multi_arr< realnum, 3 > H2_dissprob
Definition: h2_priv.h:496
double HeatHiEnr
Definition: thermal.h:208
const double ENERGY_H2_STAR
Definition: h2_priv.h:449
double gs_rate(void)
double renorm_min
Definition: h2_priv.h:343
static double x2[63]
double TeUsedBoltz
Definition: h2_priv.h:422
double GammaK(long int ipLoEnr, long int ipHiEnr, long int ipOpac, double yield1, t_phoHeat *photoHeat)
double ** CompRecoilIonRate
Definition: ionbal.h:162
long int n_elec_states
Definition: h2_priv.h:416
long ip_photo_opac_thresh
Definition: h2_priv.h:320
vector< double > LTE_cool
Definition: h2_priv.h:589
const realnum SMALLFLOAT
Definition: cpu.h:246
bool lgLeiden_Keep_ipMH2s
Definition: hmi.h:219
int n_trace_full
Definition: h2_priv.h:409
multi_arr< double, 2 > pops_per_vib
Definition: h2_priv.h:464
double HeatDexc_deriv
Definition: h2_priv.h:299
bool lgPrtMatrix
Definition: h2_priv.h:592
bool lgPhotoIoniz_On
Definition: ionbal.h:117
long int Jlowest[N_ELEC]
Definition: h2_priv.h:480
long OpacityCreate(double *stack)
bool lgEvaluated
Definition: h2_priv.h:317
t_phycon phycon
Definition: phycon.cpp:6
bool fp_equal_tol(sys_float x, sys_float y, sys_float tol)
Definition: cddefines.h:904
vector< double > LTE_Temp
Definition: h2_priv.h:589
iterator begin(void)
Definition: transition.h:339
int nElecLevelOutput
Definition: h2_priv.h:356
FILE * ioQQQ
Definition: cddefines.cpp:7
double H2_den_g
Definition: h2_priv.h:543
long int nzone
Definition: cddefines.cpp:14
TransitionList trans
Definition: h2_priv.h:430
double anu(size_t i) const
Definition: mesh.h:120
double dsexp(double x)
Definition: service.cpp:1038
long int nEner_H2_ground
Definition: h2_priv.h:461
double Yan_H2_CS(double energy_ryd)
double Solomon_dissoc_rate_g
Definition: h2_priv.h:271
double TeUsedColl
Definition: h2_priv.h:423
const double *const dense_total
Definition: h2_priv.h:453
long int nflux_with_check
Definition: rfield.h:49
long int iteration_evaluated
Definition: h2_priv.h:567
multi_arr< long int, 3 > ipEnergySort
Definition: h2_priv.h:551
multi_arr< double, 3 > H2_old_populations
Definition: h2_priv.h:501
double LTE_Cooling_per_H2()
double GetExcitedElecDensity(void)
Definition: mole_h2.cpp:2540
long int iteration
Definition: cddefines.cpp:16
long int iterationAsEval
Definition: h2_priv.h:507
bool fp_equal(sys_float x, sys_float y, int n=3)
Definition: cddefines.h:854
t_ionbal ionbal
Definition: ionbal.cpp:8
void mole_H2_LTE(void)
double photodissoc_BigH2_H2s
Definition: h2_priv.h:264
double energy(const genericState &gs)
long int nzoneAsEval
Definition: h2_priv.h:507
realnum Ploss() const
Definition: emission.h:130
double H2_den_s
Definition: h2_priv.h:543
multi_arr< double, 3 > H2_populations_LTE
Definition: h2_priv.h:502
string label
Definition: h2_priv.h:435
long int nCall_this_zone
Definition: h2_priv.h:348
t_rfield rfield
Definition: rfield.cpp:9
long int nCall_this_iteration
Definition: h2_priv.h:586
double photodissoc_BigH2_H2g
Definition: h2_priv.h:265
multi_arr< bool, 2 > lgH2_radiative
Definition: h2_priv.h:574
long int nH2_pops
Definition: h2_priv.h:577
char species[CHARS_SPECIES]
Definition: prt.h:116
double(* photoion_opacity_fun)(double energy)
Definition: h2_priv.h:81
double HeatLowEnr
Definition: thermal.h:206
long ip_photo_opac_offset
Definition: h2_priv.h:321
multi_arr< realnum, 6 > H2_SaveLine
Definition: h2_priv.h:570
multi_arr< double, 3 > H2_rad_rate_out
Definition: h2_priv.h:498
t_iterations iterations
Definition: iterations.cpp:6
t_prt prt
Definition: prt.cpp:14
double HeatDexc
Definition: h2_priv.h:297
iterator end(void)
Definition: transition.h:343
iterator end()
Definition: quantumstate.h:373
long int nzone_eval
Definition: h2_priv.h:566
#define ASSERT(exp)
Definition: cddefines.h:613
void H2_Solomon_rate(void)
Definition: mole_h2_etc.cpp:24
bool lgLastIt
Definition: iterations.h:47
double HeatDiss
Definition: h2_priv.h:296
double photo_heat_soft
Definition: h2_priv.h:262
double photo_heat_hard
Definition: h2_priv.h:263
void H2_zero_pops_too_low(void)
t_prt_matrix matrix
Definition: prt.h:238
double renorm_max
Definition: h2_priv.h:343
qList states
Definition: h2_priv.h:429
#define DEBUG_ENTRY(funcname)
Definition: cddefines.h:723
double powpq(double x, int p, int q)
Definition: service.cpp:630
double Solomon_dissoc_rate_s
Definition: h2_priv.h:272
double photoionize_rate
Definition: h2_priv.h:261
iterator begin()
Definition: quantumstate.h:365
multi_arr< long int, 2 > ipTransitionSort
Definition: h2_priv.h:552
double Solomon_elec_decay_g
Definition: h2_priv.h:275
STATIC double cross_section(double EgammaRyd, double EthRyd, long nelem, long n, long l, long s)
void H2_Reset(void)
#define MAX2(a, b)
Definition: cddefines.h:824
TransitionList::iterator rad_end
Definition: h2_priv.h:431
int fprintf(const Output &stream, const char *format,...)
Definition: service.cpp:1121
valarray< long > nRot_hi[N_ELEC]
Definition: h2_priv.h:477
double pops_per_elec[N_ELEC]
Definition: h2_priv.h:484
double Solomon_elec_decay_s
Definition: h2_priv.h:276
sys_float SDIV(sys_float x)
Definition: cddefines.h:1002
long int nzone_nlevel_set
Definition: h2_priv.h:581
void CalcPhotoionizationRate(void)
t_hmi hmi
Definition: hmi.cpp:5
double fnzone
Definition: cddefines.cpp:15
double interpolate_LTE_Cooling(double Temp)
double te
Definition: phycon.h:21
const int ipHYDROGEN
Definition: cddefines.h:349
realnum & Aul() const
Definition: emission.h:690
long int nVib_hi[N_ELEC]
Definition: h2_priv.h:475
EmissionList & Emis()
Definition: transition.h:363
long int nH2_zone
Definition: h2_priv.h:578