Changeset 1853 for trunk/source/hydro_vs_rates.cpp
- Timestamp:
- 03/17/08 07:39:48 (10 months ago)
- Files:
-
- 1 modified
-
trunk/source/hydro_vs_rates.cpp (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/hydro_vs_rates.cpp
r1732 r1853 14 14 #include "iso.h" 15 15 #include "hydro_vs_rates.h" 16 #include "lines_service.h" 16 17 17 18 STATIC double hydro_vs_coll_str( double energy ); … … 19 20 20 21 static long global_ipISO, global_nelem, global_ipHi, global_ipLo, global_Collider; 21 static double global_temp ;22 static double global_temp, global_Aul; 22 23 /* These are masses relative to the proton mass of the electron, proton, and alpha particle. */ 23 24 static double ColliderMass[4] = {ELECTRON_MASS/PROTON_MASS, 1.0, 4.0, 4.0}; … … 33 34 /* VS80 stands for Vriens and Smeets 1980 */ 34 35 /* This routine calculates thermally-averaged collision strengths. */ 35 double CS_VS80( long int ipISO, long int nelem, long int ipHi, long int ipLo, double temp, long int Collider )36 double CS_VS80( long int ipISO, long int nelem, long int ipHi, long int ipLo, double Aul, double temp, long int Collider ) 36 37 { 37 38 double coll_str; … … 43 44 global_temp = temp; 44 45 global_Collider = Collider; 46 global_Aul = Aul; 45 47 46 48 /* evaluate collision strength, two options, … … 84 86 double gamma, p, n; 85 87 double ryd, s; 86 double cross_section, coll_str, stat_weight;88 double cross_section, coll_str, gLo, gHi, abs_osc_str, Aul; 87 89 long ipISO, nelem, ipHi, ipLo, Collider; 88 90 … … 94 96 ipLo = global_ipLo; 95 97 Collider = global_Collider; 96 97 stat_weight = StatesElem[ipISO][nelem][ipLo].g; 98 Aul = global_Aul; 99 100 gLo = StatesElem[ipISO][nelem][ipLo].g; 101 gHi = StatesElem[ipISO][nelem][ipHi].g; 98 102 99 103 /* This comes from equations 14,15, and 16 of Vriens and Smeets. */ … … 114 118 115 119 /* This is an absorption oscillator strength. */ 116 Apn = 2.*ryd/Epn*HydroOscilStr(p,n); 120 abs_osc_str = GetGF( Aul, Epn*RYD_INF/EVRYD, gHi)/gLo; 121 Apn = 2.*ryd/Epn*abs_osc_str; 117 122 118 123 bp = 1.4*log(p)/p - .7/p - .51/p/p + 1.16/p/p/p - 0.55/p/p/p/p; … … 140 145 141 146 /* convert to collision strength */ 142 coll_str = cross_section * stat_weight* (energy/EVRYD);147 coll_str = cross_section * gLo * (energy/EVRYD); 143 148 144 149 if( nelem==ipCARBON ) … … 300 305 return( HydColIon_v ); 301 306 } 307 308 /*hydro_vs_deexcit compute collisional deexcitation rates for hydrogen atom, 309 * from Vriens and Smeets 1980 */ 310 double hydro_vs_deexcit( long ipISO, long nelem, long ipHi, long ipLo, double Aul ) 311 { 312 double Anp, bn, Bnp, delta_np; 313 double Eni, Enp; 314 double Gamma_np, p, n, g_p, g_n; 315 double ryd, s, kT_eV, rate, col_str, abs_osc_str; 316 long Collider; 317 318 DEBUG_ENTRY( "hydro_vs_coll_str()" ); 319 320 Collider = ipELECTRON; 321 322 kT_eV = EVRYD * phycon.te / TE1RYD; 323 324 /* This comes from equations 24 of Vriens and Smeets. */ 325 /* >>refer he-like cs Vriens, L. \& Smeets, A. H. M. Phys. Rev. A, 22, 940 */ 326 /* Computes the Vriens and Smeets 327 * rate coeff. for collisional dexcitation between any two levels of H. 328 * valid for all nhigh, nlow 329 * at end converts this excitation rate to collision strength */ 330 331 n = (double)StatesElem[ipISO][nelem][ipLo].n; 332 p = (double)StatesElem[ipISO][nelem][ipHi].n; 333 334 ASSERT( n!=p ); 335 336 g_n = StatesElem[ipISO][nelem][ipLo].g; 337 g_p = StatesElem[ipISO][nelem][ipHi].g; 338 339 ryd = EVRYD; 340 s = fabs(n-p); 341 342 Enp = EVRYD*(iso.xIsoLevNIonRyd[ipISO][nelem][ipLo] - iso.xIsoLevNIonRyd[ipISO][nelem][ipHi]); 343 Eni = EVRYD*iso.xIsoLevNIonRyd[ipISO][nelem][ipHi]; 344 345 ASSERT( Enp > 0. ); 346 347 /* This is an absorption oscillator strength. */ 348 abs_osc_str = GetGF( Aul, Enp*RYD_INF/EVRYD, g_p)/g_n; 349 Anp = 2.*ryd/Enp*abs_osc_str; 350 351 bn = 1.4*log(n)/n - .7/n - .51/n/n + 1.16/n/n/n - 0.55/n/n/n/n; 352 353 Bnp = 4.*ryd*ryd/p/p/p*(1./Enp/Enp + 4./3.*Eni/POW3(Enp) + bn*Eni*Eni/powi(Enp,4)); 354 355 delta_np = exp(-Bnp/Anp) + 0.1*Enp/ryd; 356 357 Gamma_np = ryd*log(1. + n*n*n*kT_eV/ryd) * (3. + 11.*s*s/n/n) / 358 ( 6. + 1.6*p*s + 0.3/s/s + 0.8*(pow(p,1.5))/(pow(s,0.5))*fabs(s-0.6) ); 359 360 if( 0.3*kT_eV/ryd+delta_np <= 0 ) 361 { 362 rate = 0.; 363 } 364 else 365 { 366 rate = 1.6E-7 * pow(kT_eV, 0.5) * g_n / g_p / ( kT_eV + Gamma_np ) * 367 ( Anp * log(0.3*kT_eV/ryd + delta_np) + Bnp ); 368 } 369 370 col_str = rate / COLL_CONST * phycon.sqrte * StatesElem[ipISO][nelem][ipHi].g; 371 372 return( col_str ); 373 }
