Show
Ignore:
Timestamp:
03/17/08 07:39:48 (10 months ago)
Author:
rporter
Message:

A set of changes to iso sequence collisions. The main effects are greater collisional excitation from ground states at kT much less then deltaE and a smoothing of excitation onto "collapsed" levels.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/source/hydro_vs_rates.cpp

    r1732 r1853  
    1414#include "iso.h" 
    1515#include "hydro_vs_rates.h" 
     16#include "lines_service.h" 
    1617 
    1718STATIC double hydro_vs_coll_str( double energy ); 
     
    1920 
    2021static long global_ipISO, global_nelem, global_ipHi, global_ipLo, global_Collider; 
    21 static double global_temp; 
     22static double global_temp, global_Aul; 
    2223/* These are masses relative to the proton mass of the electron, proton, and alpha particle. */ 
    2324static double ColliderMass[4] = {ELECTRON_MASS/PROTON_MASS, 1.0, 4.0, 4.0}; 
     
    3334/* VS80 stands for Vriens and Smeets 1980 */ 
    3435/* 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 ) 
     36double CS_VS80( long int ipISO, long int nelem, long int ipHi, long int ipLo, double Aul, double temp, long int Collider ) 
    3637{ 
    3738        double coll_str; 
     
    4344        global_temp = temp; 
    4445        global_Collider = Collider; 
     46        global_Aul = Aul; 
    4547 
    4648        /* evaluate collision strength, two options, 
     
    8486        double gamma, p, n; 
    8587        double ryd, s; 
    86         double cross_section, coll_str, stat_weight; 
     88        double cross_section, coll_str, gLo, gHi, abs_osc_str, Aul; 
    8789        long ipISO, nelem, ipHi, ipLo, Collider; 
    8890 
     
    9496        ipLo = global_ipLo; 
    9597        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; 
    98102 
    99103        /* This comes from equations 14,15, and 16 of Vriens and Smeets. */ 
     
    114118 
    115119        /* 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; 
    117122 
    118123        bp = 1.4*log(p)/p - .7/p - .51/p/p + 1.16/p/p/p - 0.55/p/p/p/p; 
     
    140145 
    141146        /* convert to collision strength */ 
    142         coll_str = cross_section * stat_weight * (energy/EVRYD); 
     147        coll_str = cross_section * gLo * (energy/EVRYD); 
    143148 
    144149        if( nelem==ipCARBON ) 
     
    300305        return( HydColIon_v ); 
    301306} 
     307 
     308/*hydro_vs_deexcit compute collisional deexcitation rates for hydrogen atom,  
     309 * from Vriens and Smeets 1980 */ 
     310double 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}