18STATIC double hydro_vs_coll_str(
double energy,
long ipISO,
long nelem,
long ipHi,
long ipLo,
long Collider,
double Aul );
21 class my_Integrand :
public std::unary_function<double, double>
24 long ipISO, nelem, ipHi, ipLo, Collider;
28 double operator() (
double EOverKT)
31 return exp( -1.*EOverKT ) *
col_str;
49double CS_VS80(
long int ipISO,
long int nelem,
long int ipHi,
long int ipLo,
double Aul,
double temp,
long int Collider )
73 func.Collider = Collider;
78 coll_str = VS80.
sum( 0., 1., func );
79 coll_str += VS80.
sum( 1., 10., func );
97 double Apn, bp, Bpn, delta;
101 double cross_section, coll_str, gLo, gHi, abs_osc_str, reduced_mass;
106 ASSERT( Collider >= 0.&& Collider <4 );
110 gLo =
iso_sp[ipISO][nelem].st[ipLo].g();
111 gHi =
iso_sp[ipISO][nelem].st[ipHi].g();
120 n = (double)
iso_sp[ipISO][nelem].st[ipHi].n();
121 p = (double)
iso_sp[ipISO][nelem].st[ipLo].n();
127 Epn =
EVRYD*(
iso_sp[ipISO][nelem].fb[ipLo].xIsoLevNIonRyd -
iso_sp[ipISO][nelem].fb[ipHi].xIsoLevNIonRyd);
128 Epi =
EVRYD*
iso_sp[ipISO][nelem].fb[ipLo].xIsoLevNIonRyd;
132 Apn = 2.*ryd/Epn*abs_osc_str;
134 bp = 1.4*log(p)/p - .7/p - .51/p/p + 1.16/p/p/p - 0.55/p/p/p/p;
136 Bpn = 4.*ryd*ryd/n/n/n*(1./Epn/Epn + 4./3.*Epi/
POW3(Epn) + bp*Epi*Epi/
powi(Epn,4));
138 delta = exp(-Bpn/Apn) - 0.4*Epn/ryd;
140 gamma = ryd*(8. + 23.*
POW2(s/p))/
141 ( 8. + 1.1*n*s + 0.8/
pow2(s) + 0.4*sqrt(
pow3(n))/sqrt(s)*fabs(s-1.0) );
147 if( energy/2./ryd+delta <= 0 )
153 cross_section = 2.*ryd/(energy + gamma)*(Apn*log(energy/2./ryd+delta) + Bpn);
182 epi = ionization_energy_Ryd *
EVRYD / t_eV;
185 denom = pow(epi,2.33) + 4.38*pow(epi,1.72) + 1.32*epi;
188 coef = 3.17e-27 /
pow3(t_eV) * stat_level / stat_ion / denom;
216 epi = ionization_energy_Ryd *
EVRYD / t_eV;
219 denom = pow(epi,2.33) + 4.38*pow(epi,1.72) + 1.32*epi;
222 coef = 9.56e-6 / sqrt(
pow3(t_eV)) *
dsexp( epi ) / denom;
238 double ionization_energy_Ryd,
260 static const double arrH[4] = {1.48,3.64,5.93,8.32};
261 static const double arrRnp[8] = {2.20,1.90,1.73,1.65,1.60,1.56,1.54,1.52};
262 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};
264 static double small = 0.;
272 charge = nelem - ipISO;
306 chim =
EVRYD * ionization_energy_Ryd;
308 boltz =
dsexp( chim/tev );
311 etwo = boltz - y*eone;
312 ethree = (boltz - y*etwo)/2.;
315 t2 = 1./3./xn*(boltz - y*ethree);
316 t3 = 3.*H/xn/(3. - Rnp)*(y*etwo - 2.*y*eone + boltz);
317 t4 = 3.36*y*(eone - etwo);
318 rate = 7.69415e-9*sqrt(Te)*9.28278e-3*
powi(xn/(charge+1),4)*
g*y;
319 rate *= t1 - t2 + t3 + t4;
320 rate2 = 2.1e-8*sqrt(Te)/chim/chim*
dsexp(2.302585*5040.*chim/Te);
323 rate =
MAX2(rate,small);
324 rate2 =
MAX2(rate2,small);
329 if( rate==0. || rate2==0. )
330 HydColIon_v =
MAX2(rate,rate2);
332 HydColIon_v =
MIN2(rate,rate2);
334 ASSERT( HydColIon_v >= 0. );
335 return( HydColIon_v );
342 double Anp, bn, Bnp, delta_np;
344 double Gamma_np, p, n, g_p, g_n;
345 double ryd, s, kT_eV, rate,
col_str, abs_osc_str;
358 n = (double)
iso_sp[ipISO][nelem].st[ipLo].n();
359 p = (double)
iso_sp[ipISO][nelem].st[ipHi].n();
363 g_n =
iso_sp[ipISO][nelem].st[ipLo].g();
364 g_p =
iso_sp[ipISO][nelem].st[ipHi].g();
369 Enp =
EVRYD*(
iso_sp[ipISO][nelem].fb[ipLo].xIsoLevNIonRyd -
iso_sp[ipISO][nelem].fb[ipHi].xIsoLevNIonRyd);
370 Eni =
EVRYD*
iso_sp[ipISO][nelem].fb[ipHi].xIsoLevNIonRyd;
376 Anp = 2.*ryd/Enp*abs_osc_str;
378 bn = 1.4*log(n)/n - .7/n - .51/n/n + 1.16/n/n/n - 0.55/n/n/n/n;
380 Bnp = 4.*ryd*ryd/p/p/p*(1./Enp/Enp + 4./3.*Eni/
POW3(Enp) + bn*Eni*Eni/
powi(Enp,4));
382 delta_np = exp(-Bnp/Anp) + 0.1*Enp/ryd;
384 Gamma_np = ryd*log(1. + n*n*n*kT_eV/ryd) * (3. + 11.*s*s/n/n) /
385 ( 6. + 1.6*p*s + 0.3/
pow2(s) + 0.8*sqrt(
pow3(p))/sqrt(s)*fabs(s-0.6) );
387 if( 0.3*kT_eV/ryd+delta_np <= 0 )
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 );
#define DEBUG_ENTRY(funcname)
double powi(double, long int)
double sum(double min, double max, Integrand func)
static const double ColliderMass[4]
STATIC double cross_section(double EgammaRyd, double EthRyd, long nelem, long n, long l, long s)
double Hion_coll_ioniz_ratecoef(long int ipISO, long int nelem, long int n, double ionization_energy_Ryd, double Te)
double hydro_vs_deexcit(long ipISO, long nelem, long ipHi, long ipLo, double Aul)
double CS_VS80(long int ipISO, long int nelem, long int ipHi, long int ipLo, double Aul, double temp, long int Collider)
double hydro_vs_ioniz(double ionization_energy_Ryd, double Te)
STATIC double hydro_vs_coll_str(double energy, long ipISO, long nelem, long ipHi, long ipLo, long Collider, double Aul)
double hydro_vs_coll_recomb(double ionization_energy_Ryd, double Te, double stat_level, double stat_ion)
t_iso_sp iso_sp[NISO][LIMELM]
double ConvCrossSect2CollStr(double CrsSectCM2, double gLo, double E_ProjectileRyd, double reduced_mass_grams)
double GetGF(double trans_prob, double enercm, double gup)
UNUSED const double BOHR_RADIUS_CM
UNUSED const double ELECTRON_MASS
UNUSED const double RYD_INF
UNUSED const double EVRYD
UNUSED const double PROTON_MASS
UNUSED const double EVDEGK
UNUSED const double ATOMIC_MASS_UNIT
UNUSED const double COLL_CONST
UNUSED const double TE1RYD