18 STATIC double hydro_vs_coll_str( 
long nHi, 
long gHi, 
double IP_Ryd_Hi, 
long nLo, 
long gLo, 
double IP_Ryd_Lo, 
double Aul, 
long nelem, 
long Collider, 
double energy );
 
   21         class my_Integrand : 
public std::unary_function<double, double> 
 
   27                 long nHi, gHi, nLo, gLo;
 
   28                 double IP_Ryd_Hi, IP_Ryd_Lo;
 
   30                 double operator() (
double EOverKT)
 const 
   33                                         Aul, nelem, Collider, EOverKT * EVRYD * temp/TE1RYD );
 
   34                                 return exp( -1.*EOverKT ) * col_str;
 
   49 double CS_VS80( 
long nHi, 
long gHi, 
double IP_Ryd_Hi, 
long nLo, 
long gLo, 
double IP_Ryd_Lo, 
double Aul, 
long nelem, 
long Collider, 
double temp )
 
   55                 coll_str = 
hydro_vs_deexcit( nHi, gHi, IP_Ryd_Hi, nLo, gLo, IP_Ryd_Lo, Aul );
 
   70                         func.IP_Ryd_Hi = IP_Ryd_Hi;
 
   73                         func.IP_Ryd_Lo = IP_Ryd_Lo;
 
   76                         func.Collider = Collider;
 
   81                         coll_str = VS80.
sum( 0., 1. );
 
   82                         coll_str += VS80.
sum( 1., 10. );
 
   89                                         Aul, nelem, Collider, EVRYD*temp/TE1RYD );
 
   99 STATIC double hydro_vs_coll_str( 
long nHi, 
long gHi, 
double IP_Ryd_Hi, 
long nLo, 
long gLo, 
double IP_Ryd_Lo, 
double Aul, 
long nelem, 
long Collider, 
double energy )
 
  104         ASSERT( Collider >= 0.&& Collider <4 );
 
  115         double n = (double)nHi;
 
  116         double p = (double)nLo;
 
  118         double g_n = (double)gHi;
 
  119         double g_p = (double)gLo;
 
  122         double s = fabs(n-p);
 
  125         double Epn = EVRYD * (IP_Ryd_Lo - IP_Ryd_Hi);
 
  126         double Epi = EVRYD * IP_Ryd_Lo;
 
  129         double abs_osc_str = 
GetGF( Aul, Epn*RYD_INF/EVRYD, g_n)/g_p;
 
  130         double rEpn = 1./Epn;
 
  131         double Apn = 2.*ryd*rEpn*abs_osc_str;
 
  134         double bp = rp*(1.4*log(p) - .7 + rp*(- .51 + rp*(1.16*rp - 0.55*rp)));
 
  136         double Bpn = 4.*ryd*ryd/
pow3(n)*rEpn*rEpn*(1. + Epi*rEpn*(4./3. + bp*Epi*rEpn));
 
  138         double delta = exp(-Bpn/Apn) - 0.4*Epn/ryd;
 
  146         if( energy/2./ryd+delta <= 0  )
 
  152                 double gamma = ryd*(8. + 23.*
POW2(s*rp))*s*s/
 
  153                         ( s*s*(8. + 1.1*n*s) + 0.8 + 0.4*
powpq(n*s,3,2)*fabs(s-1.0) );
 
  154                 cross_section = 2.*ryd/(energy + gamma)*(Apn*log(energy/2./ryd+delta) + Bpn);
 
  155                 cross_section = 
MAX2( cross_section, 0. );
 
  159         double coll_str = 
ConvCrossSect2CollStr( cross_section * PI*BOHR_RADIUS_CM*BOHR_RADIUS_CM, g_n, energy/EVRYD, reduced_mass );
 
  183         epi = ionization_energy_Ryd * EVRYD / t_eV;
 
  186         denom = 
pow(epi,2.33) + 4.38*
pow(epi,1.72) + 1.32*epi;
 
  189         coef = 3.17e-27 / 
pow3(t_eV) * stat_level / stat_ion / denom;
 
  217         epi = ionization_energy_Ryd * EVRYD / t_eV;
 
  220         denom = 
pow(epi,2.33) + 4.38*
pow(epi,1.72) + 1.32*epi;
 
  223         coef = 9.56e-6 / 
powpq(t_eV,3,2) * 
dsexp( epi ) / denom;
 
  239                 double ionization_energy_Ryd,
 
  261         static const double arrH[4] = {1.48,3.64,5.93,8.32};
 
  262         static const double arrRnp[8] = {2.20,1.90,1.73,1.65,1.60,1.56,1.54,1.52};
 
  263         static const double arrg[10] = {0.8675,0.932,0.952,0.960,0.965,0.969,0.972,0.975,0.978,0.981};
 
  265         static double small = 0.;
 
  273         charge = nelem - ipISO;
 
  305         tev = EVRYD/TE1RYD*Te;
 
  307         chim = EVRYD * ionization_energy_Ryd;
 
  309         boltz = 
dsexp( chim/tev );
 
  317         t3 = 3.*H/xn/(3. - Rnp)*(y*etwo - 2.*y*eone + boltz);
 
  318         t4 = 3.36*y*(eone - etwo);
 
  319         rate = 7.69415e-9*sqrt(Te)*9.28278e-3*
powi(xn/(charge+1),4)*g*y;
 
  320         rate *= t1 - t2 + t3 + t4;
 
  321         rate2 = 2.1e-8*sqrt(Te)/chim/chim*
dsexp(2.302585*5040.*chim/Te);
 
  324         rate = 
MAX2(rate,small);
 
  325         rate2 = 
MAX2(rate2,small);
 
  330         if( rate==0. || rate2==0. )
 
  331                 HydColIon_v = 
MAX2(rate,rate2);
 
  333                 HydColIon_v = 
MIN2(rate,rate2);
 
  335         ASSERT( HydColIon_v >= 0. );
 
  336         return( HydColIon_v );
 
  341 double hydro_vs_deexcit( 
long nHi, 
long gHi, 
double IP_Ryd_Hi, 
long nLo, 
long gLo, 
double IP_Ryd_Lo, 
double Aul )
 
  345         double kT_eV = EVRYD * 
phycon.
te / TE1RYD;
 
  354         double n = (double)nLo;
 
  355         double p = (double)nHi;
 
  359         double g_n = (double)gLo;
 
  360         double g_p = (double)gHi;
 
  363         double s = fabs(n-p);
 
  365         double Enp = EVRYD * (IP_Ryd_Lo - IP_Ryd_Hi);
 
  366         double rEnp = 1./Enp;
 
  367         double Eni = EVRYD * IP_Ryd_Hi;
 
  372         double abs_osc_str = 
GetGF( Aul, Enp*RYD_INF/EVRYD, g_p)/g_n;
 
  373         double Anp = 2.*ryd*rEnp*abs_osc_str;
 
  376         double bn = rn*( 1.4*log(n) - .7 +rn*(- .51 + rn*(1.16 - 0.55*rn)));
 
  378         double Bnp = 4.*ryd*ryd/
pow3(p)*rEnp*rEnp*(1. + Eni*rEnp*(4./3. + bn*Eni*rEnp));
 
  380         double delta_np = exp(-Bnp/Anp) + 0.06 * s*s / (p*n*n);
 
  384         if( 0.3*kT_eV/ryd+delta_np <= 0 )
 
  390                 double Gamma_np = ryd*log(1. + n*n*n*kT_eV/ryd) * (3. + 11.*s*s*rn*rn) * s * s /
 
  391                         ( s*s* (6. + 1.6*p*s) + 0.3 + 0.8*
powpq(p*s,3,2)*fabs(s-0.6) );
 
  393                 rate = 1.6E-7 * sqrt(kT_eV) * g_n / (g_p * ( kT_eV + Gamma_np ) ) *
 
  394                         ( Anp * log(0.3*kT_eV/ryd + delta_np) + Bnp );
 
  397         double col_str = rate / COLL_CONST * 
phycon.
sqrte * g_p;
 
STATIC double hydro_vs_coll_str(long nHi, long gHi, double IP_Ryd_Hi, long nLo, long gLo, double IP_Ryd_Lo, double Aul, long nelem, long Collider, double energy)
double hydro_vs_ioniz(double ionization_energy_Ryd, double Te)
double expn(int n, double x)
ColliderList colliders(dense)
double CS_VS80(long nHi, long gHi, double IP_Ryd_Hi, long nLo, long gLo, double IP_Ryd_Lo, double Aul, long nelem, long Collider, double temp)
double energy(const genericState &gs)
double powi(double, long int)
double sum(double min, double max) const 
realnum AtomicWeight[LIMELM]
double GetGF(double trans_prob, double enercm, double gup)
vector< t_collider > list
#define DEBUG_ENTRY(funcname)
double powpq(double x, int p, int q)
STATIC double cross_section(double EgammaRyd, double EthRyd, long nelem, long n, long l, long s)
double ConvCrossSect2CollStr(double CrsSectCM2, double gLo, double E_ProjectileRyd, double reduced_mass_grams)
bool lgCollStrenThermAver
double pow(double x, int i)
double hydro_vs_coll_recomb(double ionization_energy_Ryd, double Te, double stat_level, double stat_ion)
double hydro_vs_deexcit(long nHi, long gHi, double IP_Ryd_Hi, long nLo, long gLo, double IP_Ryd_Lo, double Aul)
double Hion_coll_ioniz_ratecoef(long int ipISO, long int nelem, long int n, double ionization_energy_Ryd, double Te)