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 double EloK =
states[ilo].energy().K();
680 if(lgDeBug)
fprintf(
ioQQQ,
"DEBUG H2_Level_low_matrix, ilo=%li",ilo);
710 double rateout = ratein *
754 enum {DEBUG_LOC=
false};
755 if( DEBUG_LOC || lgDeBug)
863 fprintf(
ioQQQ,
" H2_Level_low_matrix called atom_levelN which returned negative populations.\n");
872 totpop = abundance/totpop;
882 fixit(
"need to also store DepartCoef above X");
911 convLabel =
"H2_LOOPS";
913 convLabel =
"HD_LOOPS";
927 double old_solomon_rate=-1.;
928 long int n_pop_oscil = 0;
935 lgOrthoParaRatioConv;
936 double quant_old=-1.,
939 bool lgH2_pops_oscil=
false,
940 lgH2_pops_ever_oscil=
false;
943 double PopChgMax_relative=0. , PopChgMaxOld_relative=0., PopChgMax_total=0., PopChgMaxOld_total=0.;
944 long int iRotMaxChng_relative , iVibMaxChng_relative,
945 iRotMaxChng_total , iVibMaxChng_total,
947 double popold_relative , popnew_relative , popold_total , popnew_total;
953 converge_pops_total=1e-3,
954 converge_ortho_para=1e-2;
961 "\n***************H2_LevelPops %s call %li this iteration, zone is %.2f, H2/H:%.e Te:%e ne:%e\n",
965 dens_rel_to_lim_react,
972 static long int nzone_prt=-1;
973 if(
nzone!=nzone_prt )
976 fprintf(
ioQQQ,
"DEBUG zone %li species %s rel_to_lim:%.3e Te:%.3e *ne:%.3e n(%s):%.3e\n",
979 dens_rel_to_lim_react,
1002 " 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",
1004 dens_rel_to_lim_react,
1007 fixit(
"set lgEvaluated = false here?");
1025 fixit(
"this does not appear to be necessary and may be counterproductive");
1057 long iElec = (*st).n();
1058 long iVib = (*st).v();
1059 long iRot = (*st).J();
1094 double pop_total = 0.;
1097 long iElec = (*st).n();
1098 long iVib = (*st).v();
1100 pop_total += (*st).Pop();
1111 "%s H2_renorm_chemistry is %.4e, *dense_total is %.4e pops_per_elec[0] is %.4e\n",
1120 long iElec = (*st).n();
1121 long iVib = (*st).v();
1122 long iRot = (*st).J();
1130 " H2 entry, old pops sumed to %.3e, renorm to htwo den of %.3e\n",
1135 fixit(
"I suspect this is counterproductive. Test without it -- Ryan");
1138 converge_pops_relative *= 2.;
1139 converge_pops_total *= 3.;
1140 converge_ortho_para *= 3.;
1154 lgConv_h2_soln =
false;
1156 long loop_h2_pops = 0;
1167 lgConv_h2_soln =
true;
1226 long iElec = (*st).n();
1227 if( iElec > 0 )
continue;
1228 long iVib = (*st).v();
1248 long iElec = (*st).n();
1249 if( iElec > 0 )
continue;
1250 long iVib = (*st).v();
1251 if( iVib > 0 )
continue;
1258 double pop_total = 0.;
1260 pop_total += (*st).Pop();
1263 double H2_renorm_conserve = *dense_total/
SDIV(pop_total);
1276 (*st).Pop() *= H2_renorm_conserve;
1277 long iElec = (*st).n();
1278 long iVib = (*st).v();
1287 double sum_pops_matrix = 0.;
1290 sum_pops_matrix +=
states[i].Pop();
1299 PopChgMaxOld_relative = PopChgMax_relative;
1300 PopChgMaxOld_total = PopChgMax_total;
1301 PopChgMax_relative = 0.;
1302 PopChgMax_total = 0.;
1303 iRotMaxChng_relative =-1;
1304 iVibMaxChng_relative = -1;
1305 iRotMaxChng_total =-1;
1306 iVibMaxChng_total = -1;
1307 popold_relative = 0.;
1308 popnew_relative = 0.;
1330 long iElec = (*st).n();
1331 long iVib = (*st).v();
1332 long iRot = (*st).J();
1338 pop>1e-6 * (*dense_total) &&
1348 > fabs(PopChgMax_relative)*pop
1351 PopChgMax_relative =
1353 iRotMaxChng_relative = iRot;
1354 iVibMaxChng_relative = iVib;
1356 popnew_relative = pop;
1364 if( fabs(rel_change) > fabs(PopChgMax_total) )
1366 PopChgMax_total = rel_change;
1367 iRotMaxChng_total = iRot;
1368 iVibMaxChng_total = iVib;
1393 else if( abs_change> 0.1*pop )
1412 double H2_renorm_conserve_init = *dense_total/sumold;
1419 long iElec = (*st).n();
1420 long iVib = (*st).v();
1421 long iRot = (*st).J();
1435 long iElec = (*st).n();
1436 long iVib = (*st).v();
1437 long iRot = (*st).J();
1438 const double& pop = (*st).Pop();
1481 if( loop_h2_pops>2 && (
1483 (PopChgMax_relative*PopChgMaxOld_relative<0. ) ) )
1485 lgH2_pops_oscil =
true;
1486 if( loop_h2_pops > 6 )
1489 lgH2_pops_ever_oscil =
true;
1495 lgH2_pops_oscil =
false;
1499 lgH2_pops_ever_oscil =
false;
1509 lgConv_h2_soln =
true;
1510 lgPopsConv_total =
true;
1511 lgPopsConv_relative =
true;
1513 lgSolomonConv =
true;
1514 lgOrthoParaRatioConv =
true;
1518 if( fabs(PopChgMax_relative)>converge_pops_relative )
1521 lgConv_h2_soln =
false;
1522 lgPopsConv_relative =
false;
1525 quant_old = PopChgMaxOld_relative;
1527 quant_new = PopChgMax_relative;
1529 strcpy( chReason ,
"rel pops changed" );
1534 else if( fabs(PopChgMax_total)>converge_pops_total)
1536 lgConv_h2_soln =
false;
1537 lgPopsConv_total =
false;
1540 quant_old = PopChgMaxOld_total;
1542 quant_new = PopChgMax_total;
1544 strcpy( chReason ,
"tot pops changed" );
1555 lgConv_h2_soln =
false;
1556 lgOrthoParaRatioConv =
false;
1559 strcpy( chReason ,
"ortho/para ratio changed" );
1572 lgConv_h2_soln =
false;
1576 strcpy( chReason ,
"heating changed" );
1595 lgConv_h2_soln =
false;
1596 lgSolomonConv =
false;
1597 quant_old = old_solomon_rate;
1599 strcpy( chReason ,
"Solomon rate changed" );
1603 if( !lgConv_h2_soln )
1617 TorF(lgH2_pops_ever_oscil),
1619 if( !lgPopsConv_relative )
1620 fprintf(
ioQQQ,
" PopChgMax_relative:%.4e v:%li J:%li old:%.4e new:%.4e",
1622 iVibMaxChng_relative,
1623 iRotMaxChng_relative ,
1626 else if( !lgPopsConv_total )
1627 fprintf(
ioQQQ,
" PopChgMax_total:%.4e v:%li J:%li old:%.4e new:%.4e",
1633 else if( !lgHeatConv )
1639 else if( !lgSolomonConv )
1641 else if( !lgOrthoParaRatioConv )
1642 fprintf(
ioQQQ,
" current, old, older ratios are %.4e %.4e %.4e",
1654 " H2 5lev %li Conv?%c",
1656 TorF(lgConv_h2_soln) );
1658 if( fabs(PopChgMax_relative)>0.1 )
1659 fprintf(
ioQQQ,
" pops, rel chng %.3e",PopChgMax_relative);
1661 fprintf(
ioQQQ,
" rel heat %.3e rel chng %.3e H2 heat/cool %.2e",
1667 " Oscil?%c Ever Oscil?%c",
1668 TorF(lgH2_pops_oscil) ,
1669 TorF(lgH2_pops_ever_oscil) );
1676 "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",
1684 if( iVibMaxChng_relative>=0 && iRotMaxChng_relative>=0 && PopChgMax_relative>1e-10 )
1686 "end loop %li H2 max rel chng=%.3e from %.3e to %.3e at v=%li J=%li\n\n",
1688 PopChgMax_relative ,
1691 iVibMaxChng_relative , iRotMaxChng_relative
1701 lgPopsConverged =
false;
1702 old_val = quant_old;
1703 new_val = quant_new;
1708 ASSERT( (*st).Pop() >= 0. );
1714 (*tr).Coll().cool() = 0.;
1715 (*tr).Coll().heat() = 0.;
1717 (*tr).Emis().PopOpc() = (*(*tr).Lo()).Pop() - (*(*tr).Hi()).Pop() * (*(*tr).Lo()).g() / (*(*tr).Hi()).g();
1729 double popTimesE = (*st).Pop() * (*st).energy().WN();
1737 if(
H2_den_s > 1e-30 * (*dense_total) )
1763 static long ip_cut_off = -1;
1764 if( ip_cut_off < 0 )
1767 ip_cut_off =
ipoint( 1.14 );
1772 double flux_accum_photodissoc_BigH2_H2s = 0;
1773 fixit(
"this 2.5 seems like a pretty bad (and unnecessary) approximation. Needs to be generalized at any rate.");
1774 long ip_H2_level =
ipoint( 1.07896 - 2.5 / EVRYD);
1775 for(
long i= ip_H2_level; i < ip_cut_off; ++i )
1784 long iElec = (*st).n();
1785 if( iElec > 0 )
continue;
1786 long iVib = (*st).v();
1787 long iRot = (*st).J();
1788 const double &pop = (*st).Pop();
1789 fixit(
"generalize this factor (present value is (2m_e/m_H)^1.5/(2*2). See Robin's Feb 7, 2009 email.");
1790 const double mass_stat_factor = 3.634e-5/(2*2);
1806 arg_ratio =
safe_div(exp_disoc,(*st).Boltzmann(),0.0);
1807 if( arg_ratio > 0. )
1811 (*st).g() * mass_stat_factor;
1818 double flux_accum_photodissoc_BigH2_H2g = 0;
1820 ip_H2_level =
ipoint( 1.07896 - (*st).energy().Ryd() );
1822 for(
long i= ip_H2_level; i < ip_cut_off; ++i )
1838 arg_ratio =
safe_div(exp_disoc,(*st).Boltzmann(),0.0);
1839 if( arg_ratio > 0. )
1842 (*st).g() * mass_stat_factor;
1886 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",
1889 dens_rel_to_lim_react,
1919 const double FRAC = 0.99999;
1921 double sum_pop = 0.;
1924 const bool PRT =
false;
1949 DEBUG_ENTRY(
"diatomics::SolveExcitedElectronicLevels()" );
1960 long iElecLo = (*Lo).n();
1961 long iVibLo = (*Lo).v();
1962 long iRotLo = (*Lo).J();
1964 long iElecHi = (*Hi).n();
1965 if( iElecHi < 1 )
continue;
1966 long iVibHi = (*Hi).v();
1967 long iRotHi = (*Hi).J();
1974 double rate_up = (*tr).Emis().pump() + CosmicRayHILyaExcitationRate * (*tr).Coll().col_str();
1976 (*tr).Emis().Aul() * ( (*tr).Emis().Ploss() ) +
1977 rate_up * (*(*tr).Lo()).g() / (*(*tr).Hi()).g();
1983 rate_in[iElecHi][iVibHi][iRotHi] +=
H2_old_populations[iElecLo][iVibLo][iRotLo]*rate_up;
1994 ASSERT( rate_up >= 0. && rate_down >= 0. );
2002 long iElec = (*st).n();
2003 long iVib = (*st).v();
2004 long iRot = (*st).J();
2023 fixit(
"uncomment and test");
2043 if( (*Lo).n() != 0 )
continue;
2045 if( (*Hi).n() < 1 )
continue;
2048 double rate = (*Hi).Pop() *
2049 ((*tr).Emis().Aul() * ( (*tr).Emis().Ploss() ) +
2050 (*tr).Emis().pump() * (*Lo).g() / (*Hi).g());
2060 DEBUG_ENTRY(
"diatomics::SolveSomeGroundElectronicLevels()" );
2075 double EhiK =
states[ipHi].energy().K();
2077 for(
long ipLo=0; ipLo<ipHi; ++ipLo )
2088 H2stat /
states[ipLo].g() *
2095 H2_col_rate_in[iVibHi][iRotHi] += collup * H2_old_populations[0][iVibLo][iRotLo];
2105 long nEner = nLevels_per_elec[0];
2115 if( nEner+1 < nLevels_per_elec[0] )
2137 else if( nEner == 1 )
2154 double pump_from_below = 0.;
2155 for(
long ipLo = 0; ipLo<nEner; ++ipLo )
2164 if( ( abs(iRotLo-iRot) == 2 || iRotLo == iRot ) && (iVibLo <= iVib) && (*tr).ipCont() > 0 )
2166 double rateone = (*tr).Emis().Aul() * ( (*tr).Emis().Ploss() );
2170 double pump_up = (*tr).Emis().pump() + CosmicRayHILyaExcitationRate * (*tr).Coll().col_str();
2172 rateone += pump_up * (*(*tr).Lo()).g() / (*(*tr).Hi()).g();
2175 H2_rad_rate_in[iVibLo][iRotLo] += rateone * H2_old_populations[iElec][iVib][iRot];
2192 #if defined(__ICC) && defined(__i386)
2193 #pragma optimization_level 1
2215 long iElec = (*st).n();
2216 long iVib = (*st).v();
2217 long iRot = (*st).J();
2238 double H2popHi =
states[ipHi].Pop();
2239 double ewnHi =
states[ipHi].energy().WN();
2241 for(
long ipLo=0; ipLo<ipHi; ++ipLo )
2243 double rate_dn_heat = 0.;
2252 double rate_up_cool = rate_dn_heat *
states[ipLo].Pop() *
2254 H2statHi /
states[ipLo].g() *
2257 rate_dn_heat *= H2popHi;
2263 double conversion = (ewnHi -
states[ipLo].energy().WN() ) * ERG1CM;
2264 double heatone = rate_dn_heat * conversion;
2265 double coolone = rate_up_cool * conversion;
2267 double oneline = heatone - coolone;
2277 (rate_up_cool==0 && rate_dn_heat==0) ||
2285 " DEBUG H2 heat fnzone\t%.2f\trenorm\t%.3e\tte\t%.4e\tdexc\t%.3e\theat/tot\t%.3e\n",
2298 " H2_Cooling Ctot\t%.4e\t HeatDiss \t%.4e\t HeatDexc \t%.4e\n" ,
2348 fprintf(
ioQQQ,
" iRot must be 0 (total), 1 (ortho), or 2 (para), returning -1.\n");
2368 if( iRot <0 || iVib >
nVib_hi[iElec] || iRot >
nRot_hi[iElec][iVib])
2370 fprintf(
ioQQQ,
" iVib and iRot must lie within X, returning -2.\n");
2371 fprintf(
ioQQQ,
" iVib must be <= %li and iRot must be <= %li.\n",
2388 if( strcmp(chLabel,
"ZERO") == 0 )
2395 else if( strcmp(chLabel,
"ADD ") == 0 )
2400 long iElec = (*st).n();
2401 if( iElec > 0 )
continue;
2402 long iVib = (*st).v();
2403 long iRot = (*st).J();
2414 else if( strcmp(chLabel,
"PRIN") != 0 )
2416 fprintf(
ioQQQ,
" H2_Colden does not understand the label %s\n",
2446 (*tr).Emis().ots() = (*(*tr).Hi()).Pop() * (*tr).Emis().Aul() * (*tr).Emis().Pdest();
2459 double sumpop1 = 0.;
2460 double sumpopA1 = 0.;
2461 double sumpopcollH2O_deexcit = 0.;
2462 double sumpopcollH2p_deexcit = 0.;
2463 double sumpopcollH_deexcit = 0.;
2465 double sumpopcollH2O_excit = 0.;
2466 double sumpopcollH2p_excit = 0.;
2467 double sumpopcollH_excit = 0.;
2472 long iElecHi = (*stHi).n();
2473 if( iElecHi > 0 )
continue;
2474 long iVibHi = (*stHi).v();
2475 long iRotHi = (*stHi).J();
2476 double ewnHi = (*stHi).energy().WN();
2479 long iVibLo = (*stLo).v();
2480 long iRotLo = (*stLo).J();
2481 double ewnLo2 = (*stLo).energy().WN();
2492 double popHi = (*(*tr).Hi()).Pop();
2493 double popLo = (*(*tr).Lo()).Pop();
2501 sumpopcollH2O_deexcit += popHi * CollRateCoeff[ihi][ilo][2];
2502 sumpopcollH2p_deexcit += popHi * CollRateCoeff[ihi][ilo][3];
2504 double temp = popLo *
2505 (*stHi).g() / (*stLo).g() *
2506 safe_div((*stHi).Boltzmann(), (*stLo).Boltzmann(), 0.0 );
2509 sumpopcollH_excit += temp * CollRateCoeff[ihi][ilo][0];
2510 sumpopcollH2O_excit += temp * CollRateCoeff[ihi][ilo][2];
2511 sumpopcollH2p_excit += temp * CollRateCoeff[ihi][ilo][3];
2516 sumpopA1 += popHi * (*tr).Emis().Aul();
2542 double H2_sum_excit_elec_den = 0.;
2549 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