Changeset 1853
- Timestamp:
- 03/17/08 07:39:48 (10 months ago)
- Location:
- trunk/source
- Files:
-
- 5 modified
-
helike_cs.cpp (modified) (2 diffs)
-
hydrocollid.cpp (modified) (2 diffs)
-
hydro_vs_rates.cpp (modified) (9 diffs)
-
hydro_vs_rates.h (modified) (3 diffs)
-
iso_collide.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/helike_cs.cpp
r1822 r1853 494 494 ipHi, 495 495 ipLo, 496 Transitions[ipHE_LIKE][nelem][ipHi][ipLo].Emis->Aul, 496 497 phycon.te, 497 498 Collider ); … … 829 830 ipHi, 830 831 ipLo, 832 Transitions[ipHE_LIKE][nelem][ipHi][ipLo].Emis->Aul, 831 833 phycon.te, 832 834 Collider ); -
trunk/source/hydrocollid.cpp
r1771 r1853 1113 1113 CStemp = HCSAR_interp(ipLo,ipHi); 1114 1114 } 1115 else if( nelem==ipHYDROGEN && ipCollider==ipELECTRON && ( N_(ipHi) != N_(ipLo) ) ) 1116 { 1117 CStemp = hydro_vs_deexcit( ipH_LIKE, nelem, ipHi, ipLo, Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Aul ); 1118 } 1115 1119 else if( nelem>ipHYDROGEN && ipCollider==ipELECTRON && N_(ipHi) <= 3 && N_(ipLo) < 3 ) 1116 1120 { … … 1140 1144 ASSERT( N_(ipHi) != N_(ipLo) ); 1141 1145 /* highly excited levels */ 1142 CStemp = CS_VS80( ipH_LIKE, nelem, ipHi, ipLo, phycon.te, ipCollider ); 1146 CStemp = CS_VS80( ipH_LIKE, nelem, ipHi, ipLo, 1147 Transitions[ipH_LIKE][nelem][ipHi][ipLo].Emis->Aul, 1148 phycon.te, 1149 ipCollider ); 1143 1150 } 1144 1151 } -
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 } -
trunk/source/hydro_vs_rates.h
r1732 r1853 11 11 \param ipHi 12 12 \param ipLo 13 \param Aul 13 14 \param temp 14 15 \param Collider … … 18 19 long int ipHi, 19 20 long int ipLo, 21 double Aul, 20 22 double temp, 21 23 long int Collider ); … … 44 46 long int level); 45 47 48 /**hydro_vs_ioniz generate hydrogenic collisional ionization rate coefficients 49 * for quantum number n 50 \param ipISO 51 \param nelem 52 \param ipHi 53 \param ipLo 54 \param Aul 55 */ 56 double hydro_vs_deexcit( long ipISO, long nelem, long ipHi, long ipLo, double Aul ); 57 46 58 #endif /* _HYDRO_VS_RATES_H_ */ -
trunk/source/iso_collide.cpp
r1852 r1853 387 387 ) / phycon.sqrte*COLL_CONST/(double)StatesElem[ipISO][nelem][ipHi].g ); 388 388 389 if( ipISO == ipHE_LIKE ) 389 if( ipISO == ipH_LIKE ) 390 { 391 if( N_(ipHi) > iso.n_HighestResolved_max[ipISO][nelem] && 392 N_(ipLo) <= iso.n_HighestResolved_max[ipISO][nelem] ) 393 { 394 Transitions[ipISO][nelem][ipHi][ipLo].Coll.ColUL *= 395 (8.f/3.f)*(log((realnum)N_(ipHi))+2.f); 396 } 397 } 398 else if( ipISO == ipHE_LIKE ) 390 399 { 391 400 fixit(); … … 397 406 { 398 407 Transitions[ipISO][nelem][ipHi][ipLo].Coll.ColUL *= 399 ( realnum)( (2./3.)*(log((double)N_(ipHi))+2));408 (2.f/3.f)*(log((realnum)N_(ipHi))+2.f); 400 409 } 401 410 }
