Changeset 1853

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.

Location:
trunk/source
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • trunk/source/helike_cs.cpp

    r1822 r1853  
    494494                                                        ipHi, 
    495495                                                        ipLo, 
     496                                                        Transitions[ipHE_LIKE][nelem][ipHi][ipLo].Emis->Aul, 
    496497                                                        phycon.te, 
    497498                                                        Collider ); 
     
    829830                                                        ipHi, 
    830831                                                        ipLo, 
     832                                                        Transitions[ipHE_LIKE][nelem][ipHi][ipLo].Emis->Aul, 
    831833                                                        phycon.te, 
    832834                                                        Collider ); 
  • trunk/source/hydrocollid.cpp

    r1771 r1853  
    11131113                        CStemp = HCSAR_interp(ipLo,ipHi); 
    11141114                } 
     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                } 
    11151119                else if( nelem>ipHYDROGEN && ipCollider==ipELECTRON && N_(ipHi) <= 3 && N_(ipLo) < 3 ) 
    11161120                { 
     
    11401144                        ASSERT( N_(ipHi) != N_(ipLo) ); 
    11411145                        /* 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 ); 
    11431150                } 
    11441151        } 
  • 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} 
  • trunk/source/hydro_vs_rates.h

    r1732 r1853  
    1111    \param ipHi 
    1212    \param ipLo 
     13        \param Aul 
    1314    \param temp 
    1415    \param Collider 
     
    1819                           long int ipHi, 
    1920                           long int ipLo, 
     21                           double Aul,  
    2022                           double temp, 
    2123                           long int Collider ); 
     
    4446                long int level); 
    4547 
     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 */ 
     56double hydro_vs_deexcit( long ipISO, long nelem, long ipHi, long ipLo, double Aul ); 
     57 
    4658#endif /* _HYDRO_VS_RATES_H_ */ 
  • trunk/source/iso_collide.cpp

    r1852 r1853  
    387387                                        ) / phycon.sqrte*COLL_CONST/(double)StatesElem[ipISO][nelem][ipHi].g ); 
    388388 
    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 ) 
    390399                                { 
    391400                                        fixit(); 
     
    397406                                        { 
    398407                                                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); 
    400409                                        } 
    401410                                }