26 STATIC double Hydcs123(
long int ilow, 
long int ihigh, 
long int iz, 
long int chType);
 
   35 inline double C2_PR78(
double x, 
double y);
 
   41 static const realnum HCSTE[
NHCSTE] = {5802.f,11604.f,34812.f,58020.f,116040.f,174060.f,232080.f,290100.f};
 
   52         if( ipLo==1 && ipHi==2 )
 
   54                 fprintf(
ioQQQ,
"HCSAR_interp was called for the 2s-2p transition, which it cannot do\n");
 
   71                         for( ip=1; ip<
NHCSTE; ++ip )
 
   83                         fprintf(
ioQQQ,
" insane cs returned by HCSAR_interp, values are\n");
 
  132         static const double ap[5] = {-2113.113,729.0084,1055.397,854.632,938.9912};
 
  133         static const double bp[5] = {-6783.515,-377.7190,724.1936,493.1107,735.7466}; 
 
  134         static const double cp[5] = {-3049.719,226.2320,637.8630,388.5465,554.6369};
 
  135         static const double dp[5] = {3514.5153,88.60169,-470.4055,-329.4914,-450.8459};
 
  136         static const double ep[5] = {0.005251557,0.009059154,0.008725781,0.009952418,0.01098687};
 
  137         static const double ae[5] = {-767.5859,-643.1189,-461.6836,-429.0543,-406.5285};
 
  138         static const double be[5] = {-1731.9178,-1442.548,-1055.364,-980.3079,-930.9266};
 
  139         static const double ce[5] = {-939.1834,-789.9569,-569.1451,-530.1974,-502.0939};
 
  140         static const double de[5] = {927.4773,773.2008,564.3272,524.2944,497.7763};
 
  141         static const double ee[5] = {-0.002528027,-0.003793665,-0.002122103,-0.002234207,-0.002317720};
 
  142         static const double A[2] = {4.4394,0.0};
 
  143         static const double B[2] = {0.8949,0.8879};
 
  144         static const double C0[2] = {-0.6012,-0.2474};
 
  145         static const double C1[2] = {-3.9710,-3.7562};
 
  146         static const double C2[2] = {-4.2176,2.0491};
 
  147         static const double D0[2] = {2.930,0.0539};
 
  148         static const double D1[2] = {1.7990,3.4009};
 
  149         static const double D2[2] = {4.9347,-1.7770};
 
  248         else if( ipLow == 2 )
 
  254         else if( ipLow == 3 )
 
  266         Charge = (double)(nelem + 1);
 
  268         ChargeSquared = Charge*Charge;
 
  270         if( ipLow == 2 && ipHi == 3 )
 
  281                 else if( nelem == 1 )
 
  289                 else if( nelem <= 5 )
 
  296                 else if( nelem <= 11 )
 
  303                 else if( nelem <= 15 )
 
  310                 else if( nelem <= 17 )
 
  331                 TeUse = 
MIN2(x,0.80);
 
  332                 x = 
MAX2(0.025,TeUse);
 
  339                         Ratelow = ae[j-1] + be[j-1]*x + ce[j-1]*
pow2(x)*logx + de[j-1]*
 
  340                           exp(x) + ee[j-1]*logx/
pow2(x);
 
  342                 else if( chType == 
'p' )
 
  344                         Ratelow = ap[j-1] + bp[j-1]*x + cp[j-1]*
pow2(x)*logx + dp[j-1]*
 
  345                           exp(x) + ep[j-1]*logx/
pow2(x);
 
  350                         fprintf( 
ioQQQ, 
" insane collision species given to Hydcs123\n" );
 
  362                         TeUse = 
MIN2(x,0.80);
 
  363                         x = 
MAX2(0.025,TeUse);
 
  367                                 Ratehigh = ae[k-1] + be[k-1]*x + ce[k-1]*
pow2(x)*logx + 
 
  368                                         de[k-1]*exp(x) + ee[k-1]*logx/
pow2(x);
 
  372                                 Ratehigh = ap[k-1] + bp[k-1]*x + cp[k-1]*
pow2(x)*logx + 
 
  373                                         dp[k-1]*exp(x) + ep[k-1]*logx/
pow2(x);
 
  376                         slope = (Ratehigh - Ratelow)/(zhigh - zlow);
 
  377                         rate = slope*(Charge - zlow) + Ratelow;
 
  379                 rate = rate/ChargeSquared/Charge*1.0e-7;
 
  381                 templow = 0.025*27.211396*TE1RYD/EVRYD*ChargeSquared;
 
  382                 temphigh = 0.80*27.211396*TE1RYD/EVRYD*ChargeSquared;
 
  384                 temp = 
MAX2(TeUse,templow);
 
  385                 Hydcs123_v = rate*gHi*sqrt(temp)/COLL_CONST;
 
  390                         Hydcs123_v *= 
powpq( PROTON_MASS/ELECTRON_MASS, 3, 2 );
 
  393         else if( ipHi == 4 || ipHi == 5 || ipHi == 6 )
 
  402                 else if( nelem == 1 )
 
  409                 else if( nelem > 1 && nelem <= 5 )
 
  414                         Ratehigh = 
C6cs123(ipLow,ipHi);
 
  416                 else if( nelem > 5 && nelem <= 9 )
 
  423                 else if( nelem > 9 && nelem <= 19 )
 
  430                 else if( nelem > 19 && nelem <= 25 )
 
  455                         slope = (Ratehigh - Ratelow)/(zhigh - zlow);
 
  456                         rate = slope*(Charge - zlow) + Ratelow;
 
  473                         return( Hydcs123_v );
 
  479                 EE = ChargeSquared*EVRYD*(1./QuanNLo/QuanNLo - 1./QuanNUp/QuanNUp);
 
  489                 C = C0[i] + C1[i]/Charge + C2[i]/ChargeSquared;
 
  490                 D = D0[i] + D1[i]/Charge + D2[i]/ChargeSquared;
 
  516                 rate = (B[i] + D*q)/expq + (A[i] + C*q - D*q*q)*
 
  521                 rate *= 8.010e-8/(2. * ChargeSquared * sqrt(tev));
 
  523                 rate *= expq*gLo/gHi;
 
  528         return( Hydcs123_v );
 
  540         static const double a[3] = {-92.23774,-1631.3878,-6326.4947};
 
  541         static const double b[3] = {-11.93818,-218.3341,-849.8927};
 
  542         static const double c[3] = {0.07762914,1.50127,5.847452};
 
  543         static const double d[3] = {78.401154,1404.8475,5457.9291};
 
  544         static const double e[3] = {332.9531,5887.4263,22815.211};
 
  561         t = 
MIN2(TeUse,1.6e6);
 
  565         if( i == 1 && j == 2 )
 
  568                 fprintf( 
ioQQQ, 
" Carbon VI 2s-1s not done in C6cs123\n" );
 
  572         else if( i == 1 && j == 3 )
 
  575                 fprintf( 
ioQQQ, 
" Carbon VI 2p-1s not done in C6cs123\n" );
 
  579         else if( i == 1 && ( j == 4 || j == 5 || j == 6 ) )
 
  582                 C6cs123_v = a[0] + b[0]*x + c[0]*
pow2(x)*sqrt(x) + d[0]*logx + 
 
  585         else if( i == 2 && ( j == 4 || j == 5 || j == 6 ) )
 
  588                 C6cs123_v = a[1] + b[1]*x + c[1]*
pow2(x)*sqrt(x) + d[1]*logx + 
 
  591         else if( i == 3 && ( j == 4 || j == 5 || j == 6 ) )
 
  594                 C6cs123_v = a[2] + b[2]*x + c[2]*
pow2(x)*sqrt(x) + d[2]*logx + 
 
  599                 fprintf( 
ioQQQ, 
"  insane levels for C VI n=1,2,3 !!!\n" );
 
  614         static const double a[3] = {-12.5007,-187.2303,-880.18896};
 
  615         static const double b[3] = {-1.438749,-22.17467,-103.1259};
 
  616         static const double c[3] = {0.008219688,0.1318711,0.6043752};
 
  617         static const double d[3] = {10.116516,153.2650,717.4036};
 
  618         static const double e[3] = {45.905343,685.7049,3227.2836};
 
  637         t = 
MIN2(TeUse,1.585e7);
 
  641         if( i == 1 && j == 2 )
 
  644                 fprintf( 
ioQQQ, 
" Ca XX 2s-1s not done in Ca20cs123\n" );
 
  648         else if( i == 1 && j == 3 )
 
  651                 fprintf( 
ioQQQ, 
" Ca XX 2p-1s not done in Ca20cs123\n" );
 
  655         else if( i == 1 && ( j == 4 || j == 5 || j == 6 ))
 
  658                 Ca20cs123_v = a[0] + b[0]*x + c[0]*
pow2(x)*sqrt(x) + d[0]*logx + 
 
  661         else if( i == 2 && ( j == 4 || j == 5 || j == 6 ))
 
  664                 Ca20cs123_v = a[1] + b[1]*x + c[1]*
pow2(x)*sqrt(x) + d[1]*logx + 
 
  667         else if( i == 3 && ( j == 4 || j == 5 || j == 6 ))
 
  670                 Ca20cs123_v = a[2] + b[2]*x + c[2]*
pow2(x)*sqrt(x) + d[2]*logx + 
 
  675                 fprintf( 
ioQQQ, 
"  insane levels for Ca XX n=1,2,3 !!!\n" );
 
  678         return( Ca20cs123_v );
 
  690         static const double a[3] = {3.346644,151.2435,71.7095};
 
  691         static const double b[3] = {0.5176036,20.05133,13.1543};
 
  692         static const double c[3] = {-0.00408072,-0.1311591,-0.1099238};
 
  693         static const double d[3] = {-3.064742,-129.8303,-71.0617};
 
  694         static const double e[3] = {-11.87587,-541.8599,-241.2520};
 
  711         t = 
MIN2(TeUse,1.6e6);
 
  715         if( i == 1 && j == 2 )
 
  718                 fprintf( 
ioQQQ, 
" Neon X 2s-1s not done in Ne10cs123\n" );
 
  722         else if( i == 1 && j == 3 )
 
  725                 fprintf( 
ioQQQ, 
" Neon X 2p-1s not done in Ne10cs123\n" );
 
  729         else if( i == 1 && ( j == 4 || j == 5 || j == 6 ) )
 
  732                 Ne10cs123_v = a[0] + b[0]*x + c[0]*
pow2(x)*sqrt(x) + d[0]*logx + 
 
  735         else if( i == 2 && ( j == 4 || j == 5 || j == 6 ) )
 
  738                 Ne10cs123_v = a[1] + b[1]*x + c[1]*
pow2(x)*sqrt(x) + d[1]*logx + 
 
  741         else if( i == 3 && ( j == 4 || j == 5 || j == 6 ) )
 
  744                 Ne10cs123_v = a[2] + b[2]*x + c[2]*
pow2(x)*sqrt(x) + d[2]*logx + 
 
  749                 fprintf( 
ioQQQ, 
"  insane levels for Ne X n=1,2,3 !!!\n" );
 
  752         return( Ne10cs123_v );
 
  761         static const double a[11]={0.12176209,0.32916723,0.46546497,0.044501688,
 
  762           0.040523277,0.5234889,1.4903214,1.4215094,1.0295881,4.769306,9.7226127};
 
  763         static const double b[11]={0.039936166,2.9711166e-05,-0.020835863,3.0508137e-04,
 
  764           -2.004485e-15,4.41475e-06,1.0622666e-05,2.0538877e-06,0.80638448,2.0967075e-06,
 
  766         static const double c[11]={143284.77,0.73158545,-2.159172,0.43254802,2.1338557,
 
  767           8.9899702e-06,-2.9001451e-12,1.762076e-05,52741.735,-2153.1219,-3.3996921e-11};
 
  789         else if( t > 5.0e05 )
 
  796         if( i == 1 && j == 2 )
 
  799                 He2cs123_v = a[0] + b[0]*exp(-t/c[0]);
 
  801         else if( i == 1 && j == 3 )
 
  804                 He2cs123_v = a[1] + b[1]*
pow(t,c[1]);
 
  806         else if( i == 1 && j == 4 )
 
  809                 double logt = log(t);
 
  810                 He2cs123_v = a[2] + b[2]*logt + c[2]/logt;
 
  812         else if( i == 1 && j == 5 )
 
  815                 He2cs123_v = a[3] + b[3]*
pow(t,c[3]);
 
  817         else if( i == 1 && j == 6 )
 
  820                 He2cs123_v = a[4] + b[4]*
pow(t,c[4]);
 
  822         else if( i == 2 && j == 4 )
 
  825                 He2cs123_v = (a[5] + c[5]*t)/(1 + b[5]*t);
 
  827         else if( i == 2 && j == 5 )
 
  830                 He2cs123_v = a[6] + b[6]*t + c[6]*t*t;
 
  832         else if( i == 2 && j == 6 )
 
  835                 He2cs123_v = (a[7] + c[7]*t)/(1 + b[7]*t);
 
  837         else if( i == 3 && j == 4 )
 
  840                 He2cs123_v = a[8] + b[8]*exp(-t/c[8]);
 
  842         else if( i == 3 && j == 5 )
 
  845                 He2cs123_v = a[9] + b[9]*t + c[9]/t;
 
  847         else if( i == 3 && j == 6 )
 
  850                 He2cs123_v = a[10] + b[10]*t + c[10]*t*t;
 
  855                 fprintf( 
ioQQQ, 
"  insane levels for He II n=1,2,3 !!!\n" );
 
  858         return( He2cs123_v );
 
  870         static const double a[3] = {-4.238398,-238.2599,-1211.5237};
 
  871         static const double b[3] = {-0.4448177,-27.06869,-136.7659};
 
  872         static const double c[3] = {0.0022861,0.153273,0.7677703};
 
  873         static const double d[3] = {3.303775,191.7165,972.3731};
 
  874         static const double e[3] = {15.82689,878.1333,4468.696};
 
  891         t = 
MIN2(TeUse,1.585e7);
 
  895         if( i == 1 && j == 2 )
 
  898                 fprintf( 
ioQQQ, 
" Fe XXVI 2s-1s not done in Fe26cs123\n" );
 
  902         else if( i == 1 && j == 3 )
 
  905                 fprintf( 
ioQQQ, 
" Fe XXVI 2p-1s not done in Fe26cs123\n" );
 
  909         else if( i == 1 && ( j == 4 || j == 5 || j == 6 ) )
 
  912                 Fe26cs123_v = a[0] + b[0]*x + c[0]*
pow2(x)*sqrt(x) + d[0]*logx + 
 
  915         else if( i == 2 && ( j == 4 || j == 5 || j == 6 ) )
 
  918                 Fe26cs123_v = a[1] + b[1]*x + c[1]*
pow2(x)*sqrt(x) + d[1]*logx + 
 
  921         else if( i == 3 && ( j == 4 || j == 5 || j == 6 ) )
 
  924                 Fe26cs123_v = a[2] + b[2]*x + c[2]*
pow2(x)*sqrt(x) + d[2]*logx + 
 
  929                 fprintf( 
ioQQQ, 
"  insane levels for Ca XX n=1,2,3 !!!\n" );
 
  932         return( Fe26cs123_v );
 
  949         kTRyd = temp / TE1RYD;
 
  980         return pow2(x)*log1p(2./3.*x)/(2.*y + 1.5*x);
 
  996         double Ebar2 = 
pow2(Ebar);
 
 1002         double A = 8./(3.*s) * 
pow3(np/(s*n)) * (0.184 - 0.04/
pow2(cbrt(s))) * 
powi(1.-0.2*s/nnp, 1+2*is);
 
 1004         double Z3 = (double)(nelem + 1 - ipISO);
 
 1005         double Z32 = 
pow2(Z3);
 
 1007         double D = exp(-Z32/(nnp*Ebar2));
 
 1009         double L = log((1.+0.53*Ebar2*nnp/Z32) / (1.+0.4*Ebar));
 
 1011         double F = 
powi(1.-0.3*s*D/nnp, 1+2*is);
 
 1013         double G = 0.5*
pow3(Ebar*n2/(Z3*np));
 
 1015         double h1 = sqrt(2. - 
pow2(n/np));
 
 1016         double h2 = 2.*Z3/(n2*Ebar);
 
 1017         double xPlus = h2/(h1+1.);
 
 1018         double xMinus = h2/(h1-1.);
 
 1020         double y = 1./(1.-D*log(18.*s)/(4.*s));
 
 1027         cross_section *= PI*
pow2(n2*BOHR_RADIUS_CM/Z3) / Ebar;
 
 1031                 stat_weight = 2.*n2;
 
 1033                 stat_weight = 4.*n2;
 
 1038         return cross_section*stat_weight*Ebar / (PI*
pow2(BOHR_RADIUS_CM));
 
 1042 STATIC void TestPercivalRichards( 
void )
 
 1047         for( 
long i=0; i<5; i++ )
 
 1049                 double Ebar[5] = {0.1, 0.4, 0.8, 1.0, 10.};
 
 1055         for( 
long i=0; i<5; i++ )
 
 1057                 double Ebar[5] = {0.1, 0.4, 0.8, 1.0, 10.};
 
 1089                                         nHi, lHi, sHi, gHi, IP_Ryd_Hi,
 
 1090                                         nLo, lLo, sLo, gLo, IP_Ryd_Lo,
 
 1091                                         Aul, tauLo, EnerErg );
 
 1096                                         long nHi, 
long lHi, 
long sHi, 
long gHi, 
double IP_Ryd_Hi,
 
 1097                                         long nLo, 
long lLo, 
long sLo, 
long gLo, 
double IP_Ryd_Lo,
 
 1098                                         double Aul, 
double tauLo, 
double EnerErg )
 
 1108         double deltaE_eV = EnerErg/EN1EV;
 
 1117                                 abs( lLo - lHi ) != 1 )
 
 1160                                 abs( lLo - lHi ) != 1 )
 
 1170                                         CStemp /= 2.*
pow2(nHi);
 
 1180                 if( (CStemp = 
HlikeCSInterp( nelem, ipCollider, nHi, lHi, sHi, nLo, lLo, sLo )) >= 0.f )
 
 1182                         fixit( 
"do something here and throughout this routine with where as in helike_cs.cpp." );
 
 1187                         CStemp = 
hydro_vs_deexcit( nHi, gHi, IP_Ryd_Hi, nLo, gLo, IP_Ryd_Lo, Aul );
 
 1190                                 CStemp /= 2.*
pow2(nHi);
 
 1192                 else if( nLo == nHi )
 
 1278                                         CStemp /= 2.*
pow2(nHi);
 
 1291         if( lLo < 0 || lHi < 0 )
 
 1294         ASSERT( sHi==2 && sLo==2 );
 
 1307                 cs = 
Hydcs123(ipLo + 1,ipHi + 1,nelem,
'e');
 
 1309         else if( nelem>
ipHYDROGEN && Collider==
ipPROTON && nHi==2 && lHi==1 && nLo==2 && lLo==0 )
 
 1311                 cs = 
Hydcs123(ipLo + 1,ipHi + 1,nelem,
'p');
 
realnum GetHlikeCollisionStrength(long nelem, long ipCollider, long nHi, long lHi, long sHi, long gHi, double IP_Ryd_Hi, long nLo, long lLo, long sLo, long gLo, double IP_Ryd_Lo, double Aul, double tauLo, double EnerErg)
realnum EnergyErg() const 
STATIC double Ne10cs123(long int i, long int j)
bool lgCS_PSClassic[NISO]
NORETURN void TotalInsanity(void)
realnum h_coll_str(long ipLo, long ipHi, long ipTe)
bool lgCS_therm_ave[NISO]
double CS_l_mixing_VF01(long ipISO, long nelem, long n, long l, long lp, long s, long gLo, double tauLo, double IP_Ryd_Hi, double IP_Ryd_Lo, double temp, long Collider)
STATIC double Fe26cs123(long int i, long int j)
double C2_PR78(double x, double y)
double CS_l_mixing_PS64(long nelem, double tau, double target_charge, long n, long l, double gLo, long lp, double deltaE_eV, long Collider)
bool lgCS_Vrinceanu[NISO]
STATIC double Hydcs123(long int ilow, long int ihigh, long int iz, long int chType)
t_iso_sp iso_sp[NISO][LIMELM]
STATIC double CS_ThermAve_PR78(long ipISO, long nelem, long nHi, long nLo, double deltaE, double temp)
bool fp_equal(sys_float x, sys_float y, int n=3)
realnum HydroCSInterp(long nelem, long ipHi, long ipLo, long ipCollider)
double CS_l_mixing_VOS12(long n, long l, long lp, long nelem, double gLo, long Ztarget, long Collider, double sqrte)
STATIC realnum HCSAR_interp(int ipLo, int ipHi)
static const realnum HCSTE[NHCSTE]
STATIC double He2cs123(long int i, long int j)
EmissionList::reference Emis() const 
STATIC double CS_PercivalRichards78(double Ebar)
double powi(double, long int)
diatomics h2("h2", 4100.,&hmi.H2_total, Yan_H2_CS)
multi_arr< long, 3 > QuantumNumbers2Index
TransitionProxy trans(const long ipHi, const long ipLo)
STATIC double Ca20cs123(long int i, long int j)
double CS_l_mixing_VOS12QM(long ipISO, long nelem, long n, long l, long lp, long s, long gLo, double tauLo, double IP_Ryd_Hi, double IP_Ryd_Lo, double temp, long Collider)
static double global_deltaE
double qg32(double, double, double(*)(double))
STATIC double C6cs123(long int i, long int j)
#define DEBUG_ENTRY(funcname)
double powpq(double x, int p, int q)
STATIC double cross_section(double EgammaRyd, double EthRyd, long nelem, long n, long l, long s)
int fprintf(const Output &stream, const char *format,...)
double pow(double x, int i)
STATIC realnum HlikeCSInterp(long nelem, long Collider, long nHi, long lHi, long sHi, long nLo, long lLo, long sLo)
double hydro_vs_deexcit(long nHi, long gHi, double IP_Ryd_Hi, long nLo, long gLo, double IP_Ryd_Lo, double Aul)
double CS_l_mixing_PS64_expI(long nelem, double tau, double target_charge, long n, long l, double g, long lp, double deltaE_eV, long Collider)
STATIC double Therm_ave_coll_str_int_PR78(double EOverKT)
bool lgCaseB_HummerStorey