22 #define PRT_POPS false
24 #define LIM_H2_POP_LOOP 10
27 #define H2_DISS_ALLISON_DALGARNO 6e-19f
67 double source_so_far = 0.;
68 double source_so_far_s = 0.;
69 double sink_so_far = 0.;
72 double pop_tot_s = 0.;
74 for(
long ipHi=0; ipHi < nLevels_per_elec[0]; ++ipHi )
108 pop_tot_s +=
states[ipHi].Pop();
114 pop_tot +=
states[ipHi].Pop();
121 double sink_left = sink_tot - sink_so_far;
124 sink_left /= pop_tot;
125 if( sink_left >= 0. )
127 for(
long ipHi=0; ipHi < nLevels_per_elec[0]; ++ipHi )
137 fixit(
"kill the second term (sp_star) when H2* is killed in chemistry");
140 double sink_left_s = sink_tot_s - sink_so_far_s;
143 sink_left_s /= pop_tot_s;
146 if( sink_left_s >= 0. )
148 for(
long ipHi=0; ipHi < nLevels_per_elec[0]; ++ipHi )
155 fixit(
"kill the second term (sp_star) when H2* is killed in chemistry");
157 double source_left = source_tot - source_so_far;
159 double source_left_s = source_tot_s - source_so_far_s;
160 if( source_left+source_left_s >= 0. )
162 double rpop_lte = 1.;
163 double rpop_lte_s = 0.;
167 double pop_lte_s = 0.;
168 for(
long ipHi=0; ipHi < nLevels_per_elec[0]; ++ipHi )
170 long iElec =
states[ipHi].n();
171 long iVib =
states[ipHi].v();
172 long iRot =
states[ipHi].J();
178 rpop_lte = 1./
SDIV(pop_lte);
179 rpop_lte_s = 1./
SDIV(pop_lte_s);
181 for(
long ipHi=0; ipHi < nLevels_per_elec[0]; ++ipHi )
183 long iElec =
states[ipHi].n();
184 long iVib =
states[ipHi].v();
185 long iRot =
states[ipHi].J();
200 DEBUG_ENTRY(
"diatomics::H2_X_coll_rate_evaluate()" );
242 for(
long ipLo=0; ipLo<ipHi; ++ipLo )
245 double colldown = 0.;
251 ASSERT( CollRate[nColl]*collider_density[nColl] >= 0. );
285 ASSERT( (*tr).Emis().Aul() > 0. );
287 (*tr).Emis().ipFine() =
ipFineCont( (*tr).EnergyRyd());
308 ASSERT( (*tr).ipCont() > 0 );
309 drive += (*tr).Emis().pump() * (*tr).Emis().PopOpc() * (*tr).EnergyErg();
334 ASSERT( (*tr).ipCont() > 0 );
335 if( (*(*tr).Hi()).Pop() > smallfloat && (*tr).Emis().PopOpc() > smallfloat )
343 " H2_RadPress returns, radiation pressure is %.2e\n",
361 energy += st->Pop() * st->energy();
380 (*tr).outline_resonance();
401 line_one( *tr,
false, 0.f, doppler_width );
430 ASSERT( (*tr).ipCont() > 0 );
480 double rot_cooling , dCoolDT;
497 " The total number of levels used in the matrix solver must be <= %li, the number of levels within X.\n Sorry.\n",
547 fprintf(
ioQQQ,
" H2_Level_low_matrix has been called with the number of rotor levels greater than space allocated.\n");
616 ASSERT( (*tr).ipCont() > 0 );
623 AulEscp[ihi][ilo] = (*tr).Emis().Aul()*(
624 (*tr).Emis().Pesc_total() );
625 AulDest[ihi][ilo] = (*tr).Emis().Aul()*(*tr).Emis().Pdest();
626 AulPump[ilo][ihi] = (*tr).Emis().pump();
641 ASSERT( (*tr).ipCont() > 0 );
647 (*(*tr).Hi()).Pop() * (
648 (*tr).Emis().Aul()*( (*tr).Emis().Ploss() ) +
649 (*tr).Emis().pump() * (*(*tr).Lo()).g() / (*(*tr).Hi()).g() );
651 rateout += (*tr).Emis().pump();
678 if(lgDeBug)
fprintf(
ioQQQ,
"DEBUG H2_Level_low_matrix, ilo=%li",ilo);
704 double rateout = ratein *
748 enum {DEBUG_LOC=
false};
749 if( DEBUG_LOC || lgDeBug)
857 fprintf(
ioQQQ,
" H2_Level_low_matrix called atom_levelN which returned negative populations.\n");
866 totpop = abundance/totpop;
876 fixit(
"need to also store DepartCoef above X");
905 convLabel =
"H2_LOOPS";
907 convLabel =
"HD_LOOPS";
921 double old_solomon_rate=-1.;
922 long int n_pop_oscil = 0;
929 lgOrthoParaRatioConv;
930 double quant_old=-1.,
933 bool lgH2_pops_oscil=
false,
934 lgH2_pops_ever_oscil=
false;
937 double PopChgMax_relative=0. , PopChgMaxOld_relative=0., PopChgMax_total=0., PopChgMaxOld_total=0.;
938 long int iRotMaxChng_relative , iVibMaxChng_relative,
939 iRotMaxChng_total , iVibMaxChng_total,
941 double popold_relative , popnew_relative , popold_total , popnew_total;
947 converge_pops_total=1e-3,
948 converge_ortho_para=1e-2;
955 "\n***************H2_LevelPops %s call %li this iteration, zone is %.2f, H2/H:%.e Te:%e ne:%e\n",
959 dens_rel_to_lim_react,
966 static long int nzone_prt=-1;
967 if(
nzone!=nzone_prt )
970 fprintf(
ioQQQ,
"DEBUG zone %li species %s rel_to_lim:%.3e Te:%.3e *ne:%.3e n(%s):%.3e\n",
973 dens_rel_to_lim_react,
996 " H2_LevelPops %s pops too small, not computing, set to LTE and return, H2/H is %.2e and H2_to_H_limit is %.2e.\n",
998 dens_rel_to_lim_react,
1001 fixit(
"set lgEvaluated = false here?");
1019 fixit(
"this does not appear to be necessary and may be counterproductive");
1051 long iElec = (*st).n();
1052 long iVib = (*st).v();
1053 long iRot = (*st).J();
1088 double pop_total = 0.;
1091 long iElec = (*st).n();
1092 long iVib = (*st).v();
1094 pop_total += (*st).Pop();
1105 "%s H2_renorm_chemistry is %.4e, *dense_total is %.4e pops_per_elec[0] is %.4e\n",
1114 long iElec = (*st).n();
1115 long iVib = (*st).v();
1116 long iRot = (*st).J();
1124 " H2 entry, old pops sumed to %.3e, renorm to htwo den of %.3e\n",
1129 fixit(
"I suspect this is counterproductive. Test without it -- Ryan");
1132 converge_pops_relative *= 2.;
1133 converge_pops_total *= 3.;
1134 converge_ortho_para *= 3.;
1148 lgConv_h2_soln =
false;
1150 long loop_h2_pops = 0;
1161 lgConv_h2_soln =
true;
1220 long iElec = (*st).n();
1221 if( iElec > 0 )
continue;
1222 long iVib = (*st).v();
1242 long iElec = (*st).n();
1243 if( iElec > 0 )
continue;
1244 long iVib = (*st).v();
1245 if( iVib > 0 )
continue;
1252 double pop_total = 0.;
1254 pop_total += (*st).Pop();
1257 double H2_renorm_conserve = *dense_total/
SDIV(pop_total);
1270 (*st).Pop() *= H2_renorm_conserve;
1271 long iElec = (*st).n();
1272 long iVib = (*st).v();
1281 double sum_pops_matrix = 0.;
1284 sum_pops_matrix +=
states[i].Pop();
1293 PopChgMaxOld_relative = PopChgMax_relative;
1294 PopChgMaxOld_total = PopChgMax_total;
1295 PopChgMax_relative = 0.;
1296 PopChgMax_total = 0.;
1297 iRotMaxChng_relative =-1;
1298 iVibMaxChng_relative = -1;
1299 iRotMaxChng_total =-1;
1300 iVibMaxChng_total = -1;
1301 popold_relative = 0.;
1302 popnew_relative = 0.;
1324 long iElec = (*st).n();
1325 long iVib = (*st).v();
1326 long iRot = (*st).J();
1332 pop>1e-6 * (*dense_total) &&
1342 > fabs(PopChgMax_relative)*pop
1345 PopChgMax_relative =
1347 iRotMaxChng_relative = iRot;
1348 iVibMaxChng_relative = iVib;
1350 popnew_relative = pop;
1358 if( fabs(rel_change) > fabs(PopChgMax_total) )
1360 PopChgMax_total = rel_change;
1361 iRotMaxChng_total = iRot;
1362 iVibMaxChng_total = iVib;
1387 else if( abs_change> 0.1*pop )
1406 double H2_renorm_conserve_init = *dense_total/sumold;
1413 long iElec = (*st).n();
1414 long iVib = (*st).v();
1415 long iRot = (*st).J();
1429 long iElec = (*st).n();
1430 long iVib = (*st).v();
1431 long iRot = (*st).J();
1432 const double& pop = (*st).Pop();
1475 if( loop_h2_pops>2 && (
1477 (PopChgMax_relative*PopChgMaxOld_relative<0. ) ) )
1479 lgH2_pops_oscil =
true;
1480 if( loop_h2_pops > 6 )
1483 lgH2_pops_ever_oscil =
true;
1489 lgH2_pops_oscil =
false;
1493 lgH2_pops_ever_oscil =
false;
1503 lgConv_h2_soln =
true;
1504 lgPopsConv_total =
true;
1505 lgPopsConv_relative =
true;
1507 lgSolomonConv =
true;
1508 lgOrthoParaRatioConv =
true;
1512 if( fabs(PopChgMax_relative)>converge_pops_relative )
1515 lgConv_h2_soln =
false;
1516 lgPopsConv_relative =
false;
1519 quant_old = PopChgMaxOld_relative;
1521 quant_new = PopChgMax_relative;
1523 strcpy( chReason ,
"rel pops changed" );
1528 else if( fabs(PopChgMax_total)>converge_pops_total)
1530 lgConv_h2_soln =
false;
1531 lgPopsConv_total =
false;
1534 quant_old = PopChgMaxOld_total;
1536 quant_new = PopChgMax_total;
1538 strcpy( chReason ,
"tot pops changed" );
1549 lgConv_h2_soln =
false;
1550 lgOrthoParaRatioConv =
false;
1553 strcpy( chReason ,
"ortho/para ratio changed" );
1566 lgConv_h2_soln =
false;
1570 strcpy( chReason ,
"heating changed" );
1589 lgConv_h2_soln =
false;
1590 lgSolomonConv =
false;
1591 quant_old = old_solomon_rate;
1593 strcpy( chReason ,
"Solomon rate changed" );
1597 if( !lgConv_h2_soln )
1611 TorF(lgH2_pops_ever_oscil),
1613 if( !lgPopsConv_relative )
1614 fprintf(
ioQQQ,
" PopChgMax_relative:%.4e v:%li J:%li old:%.4e new:%.4e",
1616 iVibMaxChng_relative,
1617 iRotMaxChng_relative ,
1620 else if( !lgPopsConv_total )
1621 fprintf(
ioQQQ,
" PopChgMax_total:%.4e v:%li J:%li old:%.4e new:%.4e",
1627 else if( !lgHeatConv )
1633 else if( !lgSolomonConv )
1635 else if( !lgOrthoParaRatioConv )
1636 fprintf(
ioQQQ,
" current, old, older ratios are %.4e %.4e %.4e",
1648 " H2 5lev %li Conv?%c",
1650 TorF(lgConv_h2_soln) );
1652 if( fabs(PopChgMax_relative)>0.1 )
1653 fprintf(
ioQQQ,
" pops, rel chng %.3e",PopChgMax_relative);
1655 fprintf(
ioQQQ,
" rel heat %.3e rel chng %.3e H2 heat/cool %.2e",
1661 " Oscil?%c Ever Oscil?%c",
1662 TorF(lgH2_pops_oscil) ,
1663 TorF(lgH2_pops_ever_oscil) );
1670 "H2 loop\t%li\tkase pop chng\t%i\tchem renorm fac\t%.4e\tortho/para ratio:\t%.3e\tfrac of pop in matrix: %.3f\n",
1678 if( iVibMaxChng_relative>=0 && iRotMaxChng_relative>=0 && PopChgMax_relative>1e-10 )
1680 "end loop %li H2 max rel chng=%.3e from %.3e to %.3e at v=%li J=%li\n\n",
1682 PopChgMax_relative ,
1685 iVibMaxChng_relative , iRotMaxChng_relative
1695 lgPopsConverged =
false;
1696 old_val = quant_old;
1697 new_val = quant_new;
1702 ASSERT( (*st).Pop() >= 0. );
1708 (*tr).Coll().cool() = 0.;
1709 (*tr).Coll().heat() = 0.;
1711 (*tr).Emis().PopOpc() = (*(*tr).Lo()).Pop() - (*(*tr).Hi()).Pop() * (*(*tr).Lo()).g() / (*(*tr).Hi()).g();
1723 double popTimesE = (*st).Pop() * (*st).energy().WN();
1731 if(
H2_den_s > 1e-30 * (*dense_total) )
1757 static long ip_cut_off = -1;
1758 if( ip_cut_off < 0 )
1761 ip_cut_off =
ipoint( 1.14 );
1766 double flux_accum_photodissoc_BigH2_H2s = 0;
1767 fixit(
"this 2.5 seems like a pretty bad (and unnecessary) approximation. Needs to be generalized at any rate.");
1768 long ip_H2_level =
ipoint( 1.07896 - 2.5 / EVRYD);
1769 for(
long i= ip_H2_level; i < ip_cut_off; ++i )
1778 long iElec = (*st).n();
1779 if( iElec > 0 )
continue;
1780 long iVib = (*st).v();
1781 long iRot = (*st).J();
1782 const double &pop = (*st).Pop();
1783 fixit(
"generalize this factor (present value is (2m_e/m_H)^1.5/(2*2). See Robin's Feb 7, 2009 email.");
1784 const double mass_stat_factor = 3.634e-5/(2*2);
1800 arg_ratio =
safe_div(exp_disoc,(*st).Boltzmann(),0.0);
1801 if( arg_ratio > 0. )
1805 (*st).g() * mass_stat_factor;
1812 double flux_accum_photodissoc_BigH2_H2g = 0;
1814 ip_H2_level =
ipoint( 1.07896 - (*st).energy().Ryd() );
1816 for(
long i= ip_H2_level; i < ip_cut_off; ++i )
1832 arg_ratio =
safe_div(exp_disoc,(*st).Boltzmann(),0.0);
1833 if( arg_ratio > 0. )
1836 (*st).g() * mass_stat_factor;
1880 fprintf(
ioQQQ,
" H2_LevelPops exit1 %8.2f loops:%3li H2/H:%.3e Sol dis old %.3e new %.3e Sol dis star %.3e g-to-s %.3e photodiss star %.3e\n",
1883 dens_rel_to_lim_react,
1913 const double FRAC = 0.99999;
1915 double sum_pop = 0.;
1918 const bool PRT =
false;
1943 DEBUG_ENTRY(
"diatomics::SolveExcitedElectronicLevels()" );
1954 long iElecLo = (*Lo).n();
1955 long iVibLo = (*Lo).v();
1956 long iRotLo = (*Lo).J();
1958 long iElecHi = (*Hi).n();
1959 if( iElecHi < 1 )
continue;
1960 long iVibHi = (*Hi).v();
1961 long iRotHi = (*Hi).J();
1968 double rate_up = (*tr).Emis().pump() + CosmicRayHILyaExcitationRate * (*tr).Coll().col_str();
1970 (*tr).Emis().Aul() * ( (*tr).Emis().Ploss() ) +
1971 rate_up * (*(*tr).Lo()).g() / (*(*tr).Hi()).g();
1977 rate_in[iElecHi][iVibHi][iRotHi] +=
H2_old_populations[iElecLo][iVibLo][iRotLo]*rate_up;
1988 ASSERT( rate_up >= 0. && rate_down >= 0. );
1996 long iElec = (*st).n();
1997 long iVib = (*st).v();
1998 long iRot = (*st).J();
2017 fixit(
"uncomment and test");
2037 if( (*Lo).n() != 0 )
continue;
2039 if( (*Hi).n() < 1 )
continue;
2042 double rate = (*Hi).Pop() *
2043 ((*tr).Emis().Aul() * ( (*tr).Emis().Ploss() ) +
2044 (*tr).Emis().pump() * (*Lo).g() / (*Hi).g());
2054 DEBUG_ENTRY(
"diatomics::SolveSomeGroundElectronicLevels()" );
2071 for(
long ipLo=0; ipLo<ipHi; ++ipLo )
2080 H2stat /
states[ipLo].g() *
2087 H2_col_rate_in[iVibHi][iRotHi] += collup * H2_old_populations[0][iVibLo][iRotLo];
2097 long nEner = nLevels_per_elec[0];
2107 if( nEner+1 < nLevels_per_elec[0] )
2129 else if( nEner == 1 )
2146 double pump_from_below = 0.;
2147 for(
long ipLo = 0; ipLo<nEner; ++ipLo )
2156 if( ( abs(iRotLo-iRot) == 2 || iRotLo == iRot ) && (iVibLo <= iVib) && (*tr).ipCont() > 0 )
2158 double rateone = (*tr).Emis().Aul() * ( (*tr).Emis().Ploss() );
2162 double pump_up = (*tr).Emis().pump() + CosmicRayHILyaExcitationRate * (*tr).Coll().col_str();
2164 rateone += pump_up * (*(*tr).Lo()).g() / (*(*tr).Hi()).g();
2167 H2_rad_rate_in[iVibLo][iRotLo] += rateone * H2_old_populations[iElec][iVib][iRot];
2184 #if defined(__ICC) && defined(__i386)
2185 #pragma optimization_level 1
2207 long iElec = (*st).n();
2208 long iVib = (*st).v();
2209 long iRot = (*st).J();
2230 double H2popHi =
states[ipHi].Pop();
2231 double ewnHi =
states[ipHi].energy().WN();
2233 for(
long ipLo=0; ipLo<ipHi; ++ipLo )
2235 double rate_dn_heat = 0.;
2244 double rate_up_cool = rate_dn_heat *
states[ipLo].Pop() *
2246 H2statHi /
states[ipLo].g() *
2249 rate_dn_heat *= H2popHi;
2255 double conversion = (ewnHi -
states[ipLo].energy().WN() ) * ERG1CM;
2256 double heatone = rate_dn_heat * conversion;
2257 double coolone = rate_up_cool * conversion;
2259 double oneline = heatone - coolone;
2269 (rate_up_cool==0 && rate_dn_heat==0) ||
2277 " DEBUG H2 heat fnzone\t%.2f\trenorm\t%.3e\tte\t%.4e\tdexc\t%.3e\theat/tot\t%.3e\n",
2290 " H2_Cooling Ctot\t%.4e\t HeatDiss \t%.4e\t HeatDexc \t%.4e\n" ,
2340 fprintf(
ioQQQ,
" iRot must be 0 (total), 1 (ortho), or 2 (para), returning -1.\n");
2360 if( iRot <0 || iVib >
nVib_hi[iElec] || iRot >
nRot_hi[iElec][iVib])
2362 fprintf(
ioQQQ,
" iVib and iRot must lie within X, returning -2.\n");
2363 fprintf(
ioQQQ,
" iVib must be <= %li and iRot must be <= %li.\n",
2380 if( strcmp(chLabel,
"ZERO") == 0 )
2387 else if( strcmp(chLabel,
"ADD ") == 0 )
2392 long iElec = (*st).n();
2393 if( iElec > 0 )
continue;
2394 long iVib = (*st).v();
2395 long iRot = (*st).J();
2406 else if( strcmp(chLabel,
"PRIN") != 0 )
2408 fprintf(
ioQQQ,
" H2_Colden does not understand the label %s\n",
2438 (*tr).Emis().ots() = (*(*tr).Hi()).Pop() * (*tr).Emis().Aul() * (*tr).Emis().Pdest();
2451 double sumpop1 = 0.;
2452 double sumpopA1 = 0.;
2453 double sumpopcollH2O_deexcit = 0.;
2454 double sumpopcollH2p_deexcit = 0.;
2455 double sumpopcollH_deexcit = 0.;
2457 double sumpopcollH2O_excit = 0.;
2458 double sumpopcollH2p_excit = 0.;
2459 double sumpopcollH_excit = 0.;
2464 long iElecHi = (*stHi).n();
2465 if( iElecHi > 0 )
continue;
2466 long iVibHi = (*stHi).v();
2467 long iRotHi = (*stHi).J();
2468 double ewnHi = (*stHi).energy().WN();
2471 long iVibLo = (*stLo).v();
2472 long iRotLo = (*stLo).J();
2473 double ewnLo2 = (*stLo).energy().WN();
2484 double popHi = (*(*tr).Hi()).Pop();
2485 double popLo = (*(*tr).Lo()).Pop();
2493 sumpopcollH2O_deexcit += popHi * CollRateCoeff[ihi][ilo][2];
2494 sumpopcollH2p_deexcit += popHi * CollRateCoeff[ihi][ilo][3];
2496 double temp = popLo *
2497 (*stHi).g() / (*stLo).g() *
2498 safe_div((*stHi).Boltzmann(), (*stLo).Boltzmann(), 0.0 );
2501 sumpopcollH_excit += temp * CollRateCoeff[ihi][ilo][0];
2502 sumpopcollH2O_excit += temp * CollRateCoeff[ihi][ilo][2];
2503 sumpopcollH2p_excit += temp * CollRateCoeff[ihi][ilo][3];
2508 sumpopA1 += popHi * (*tr).Emis().Aul();
2534 double H2_sum_excit_elec_den = 0.;
2541 return H2_sum_excit_elec_den;
multi_arr< double, 2 > H2_rad_rate_in
iterator begin(size_type i1)
multi_arr< double, 2 > H2_col_rate_out
multi_arr< double, 2 >::const_iterator md2ci
double sink_rate_tot(const char chSpecies[]) const
t_mole_global mole_global
multi_arr< realnum, 3 > H2_dissprob
const double ENERGY_H2_STAR
realnum GetXColden(long iVib, long iRot)
double H2_DissocEnergies[N_ELEC]
void SolveExcitedElectronicLevels(void)
NORETURN void TotalInsanity(void)
double Average_collH2_excit
void H2_LevelPops(bool &lgPopsConverged, double &old_value, double &new_value)
bool lgLeiden_Keep_ipMH2s
ConvergenceCounter register_(const string name)
multi_arr< double, 2 > pops_per_vib
void set_xIntensity(const TransitionProxy &t)
multi_arr< realnum, 2 > H2_coll_dissoc_rate_coef_H2
void H2_RTMake(linefunc line_one)
valarray< long > ipVib_H2_energy_sort
bool fp_equal_tol(sys_float x, sys_float y, sys_float tol)
double rate_grain_op_conserve
multi_arr< realnum, 3 >::const_iterator mr3ci
sys_float sexp(sys_float x)
long ipFineCont(double energy_ryd)
bool lgTemperatureConstant
molezone * findspecieslocal(const char buf[])
multi_arr< realnum, 2 > H2_coll_dissoc_rate_coef
#define H2_DISS_ALLISON_DALGARNO
double source_rate_tot(const char chSpecies[]) const
static realnum collider_density[N_X_COLLIDER]
double Average_collH2_dissoc_g
void H2_X_sink_and_source(void)
double Average_collH2_deexcit
multi_arr< realnum, 2 > H2_X_formation
double Solomon_dissoc_rate_g
multi_arr< realnum, 3 > CollRateCoeff
const double *const dense_total
static realnum collider_density_total_not_H2
valarray< realnum > H2_X_sink
multi_arr< double, 3 > Cont_Dissoc_Rate
multi_arr< long int, 3 > ipEnergySort
multi_arr< double, 3 > H2_old_populations
double xIonDense[LIMELM][LIMELM+1]
double GetExcitedElecDensity(void)
double Average_collH2_dissoc_s
void H2_CollidRateEvalAll(void)
const multi_geom< d, ALLOC > & clone() const
bool fp_equal(sys_float x, sys_float y, int n=3)
multi_arr< realnum, 3 > H2_disske
long ipoint(double energy_ryd)
double cdH2_colden(long iVib, long iRot)
void H2_RT_tau_reset(void)
double photodissoc_BigH2_H2s
double energy(const genericState &gs)
long int nLevels_per_elec[N_ELEC]
long ipLineEnergy(double energy, const char *chLabel, long ipIonEnergy)
double PressureRadiationLine(const TransitionProxy &t, realnum DopplerWidth)
multi_arr< double, 3 > H2_populations_LTE
void(* linefunc)(const TransitionProxy &t, bool lgShield_this_zone, realnum pestrk, realnum DopplerWidth)
double Average_collH_deexcit
long int nCall_this_iteration
double H2_InterEnergy(void)
valarray< class molezone > species
multi_arr< realnum, 2 > H2_X_colden_LTE
double photodissoc_BigH2_H2g
realnum IonizErrorAllowed
multi_arr< bool, 2 > lgH2_radiative
multi_arr< realnum, 2 > H2_X_Hmin_back
multi_arr< double, 3 > H2_rad_rate_out
void RT_OTS_AddLine(double ots, long int ip)
diatomics h2("h2", 4100.,&hmi.H2_total, Yan_H2_CS)
sys_float safe_div(sys_float x, sys_float y, sys_float res_0by0)
realnum GetDopplerWidth(realnum massAMU)
valarray< long > ipElec_H2_energy_sort
realnum HeatCoolRelErrorAllowed
void RT_line_one_tauinc(const TransitionProxy &t, long int mas_species, long int mas_ion, long int mas_hi, long int mas_lo, realnum DopplerWidth)
double rate_grain_J1_to_J0
void H2_Calc_Average_Rates(void)
double ortho_para_current
void H2_Solomon_rate(void)
vector< double > stat_levn
multi_arr< double, 2 > H2_X_rate_to_elec_excited
void H2_zero_pops_too_low(void)
multi_arr< double, 2 > H2_X_rate_from_elec_excited
void H2_Colden(const char *chLabel)
double Average_collH_excit
void H2_X_coll_rate_evaluate(void)
#define DEBUG_ENTRY(funcname)
double Solomon_dissoc_rate_s
void H2_Level_low_matrix(realnum abundance)
iterator end(size_type i1)
multi_arr< double, 2 >::iterator md2i
multi_arr< long int, 2 > ipTransitionSort
void mole_update_species_cache(void)
diatomics hd("hd", 4100.,&hmi.HD_total, Yan_H2_CS)
TransitionList::iterator rad_end
int fprintf(const Output &stream, const char *format,...)
valarray< long > nRot_hi[N_ELEC]
double pops_per_elec[N_ELEC]
sys_float SDIV(sys_float x)
double H2_renorm_chemistry
double Average_collH_dissoc_g
valarray< long > ipRot_H2_energy_sort
valarray< realnum > H2_X_source
long int nzone_nlevel_set
double Average_collH_dissoc_s
void CalcPhotoionizationRate(void)
t_secondaries secondaries
void RT_line_one_tau_reset(const TransitionProxy &t)
multi_arr< realnum, 2 > H2_X_coll_rate
void SolveSomeGroundElectronicLevels(void)
multi_arr< double, 2 > H2_col_rate_in
multi_arr< realnum, 2 > H2_X_colden
multi_arr< int, 2 > H2_ipPhoto
multi_arr< bool, 3 > H2_lgOrtho