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 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)