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