25 STATIC double iso_get_collision_strength_collapsed_to_collapsed( 
long ipISO, 
long nelem, 
long ipCollider,
 
   26                                         long nHi, 
double IP_Ryd_Hi,
 
   27                                         long nLo, 
double IP_Ryd_Lo,
 
   28                                         double Aul, 
double tauLo, 
double EnerWN, 
double EnerErg );
 
   31                                         long nHi, 
double IP_Ryd_Hi,
 
   32                                         long nLo, 
long lLo, 
long sLo, 
long jLo, 
long gLo, 
double IP_Ryd_Lo,
 
   33                                         double Aul, 
double tauLo, 
double EnerWN, 
double EnerErg );
 
   35                                         long nHi, 
long lHi, 
long sHi, 
long jHi, 
long gHi, 
double IP_Ryd_Hi,
 
   36                                         long nLo, 
long lLo, 
long sLo, 
long jLo, 
long gLo, 
double IP_Ryd_Lo,
 
   37                                         double Aul, 
double tauLo, 
double EnerWN, 
double EnerErg );
 
   40                                         long nHi, 
double IP_Ryd_Hi,
 
   41                                         long nLo, 
double IP_Ryd_Lo,
 
   42                                         double tauLo, 
double EnerWN, 
double EnerErg );
 
   73                         sp->
fb[ipHi].ColIoniz = 
 
  154                 {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0},
 
  155                 {0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0} };
 
  174                                 "     iso_collide called %s nelem %li - no reeval Boltz fac, LTE dens\n",
 
  185                                 "     iso_collide called %s nelem %li - will reeval Boltz fac, LTE dens\n",
 
  231                                 sp->
fb[ipLo].PopLTE = 
 
  232                                         sp->
st[ipLo].g() / sp->
st[ipLo].
ConBoltz() * ConvLTEPOP;
 
  237                                 sp->
fb[ipLo].PopLTE = 0.;
 
  240                         sp->
fb[ipLo].PopLTE = 
MIN2( sp->
fb[ipLo].PopLTE, MAX_POP_LTE );
 
  243                         if( sp->
fb[ipLo].PopLTE <= 0. )
 
  259                         vector<double> ratefac(
ipALPHA+1);
 
  264                                 ratefac[ipCollider] = 
powpq(ELECTRON_MASS/reduced_mass_collider_system,3,2) * COLL_CONST/
phycon.
sqrte;
 
  269                                 double overHig = 1./(double)sp->
st[ipHi].g();
 
  270                                 for( 
long ipLo=0; ipLo < ipHi; ipLo++ )
 
  280                                                 double rateCoef = cs_temp * ratefac[ipCollider] * overHig;
 
  289                                         if( 
N_(ipHi) <= 5 && 
N_(ipLo) <= 2 )
 
  301                         for( 
long ipHi=1; ipHi < upper_limit; ipHi++ )
 
  304                                 for( 
long ipLo=0; ipLo < ipHi; ipLo++ )
 
  313                         for( 
long ipHi=0; ipHi < upper_limit; ipHi++ )
 
  320                         for( 
long ipHi=0; ipHi < upper_limit; ipHi++ )
 
  327                         for( 
long ipHi=0; ipHi < upper_limit; ipHi++ )
 
  343                                 sp->
fb[ipLo].ColIoniz = 0.;
 
  348                                         if( 
N_(ipLo)==2 && 
N_(ipHi)==2 )
 
  379         long nHi = sp->
st[ipHi].n();
 
  380         long lHi = sp->
st[ipHi].l();
 
  381         long sHi = sp->
st[ipHi].S();
 
  382         long jHi = sp->
st[ipHi].j();
 
  383         long gHi = sp->
st[ipHi].g();
 
  384         double IP_Ryd_Hi = sp->
fb[ipHi].xIsoLevNIonRyd;
 
  385         long nLo = sp->
st[ipLo].n();
 
  386         long lLo = sp->
st[ipLo].l();
 
  387         long sLo = sp->
st[ipLo].S();
 
  388         long jLo = sp->
st[ipLo].j();
 
  389         long gLo = sp->
st[ipLo].g();
 
  390         double IP_Ryd_Lo = sp->
fb[ipLo].xIsoLevNIonRyd;
 
  393         double tauLo = sp->
st[ipHi].lifetime();
 
  402         else if( nHi-nLo > 2 && ipCollider > 
ipELECTRON )
 
  411                                         tauLo, EnerWN, EnerErg );
 
  413                 cs = iso_get_collision_strength_collapsed_to_collapsed( ipISO, nelem, ipCollider,
 
  416                                         Aul, tauLo, EnerWN, EnerErg );
 
  424                                         nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  425                                         Aul, tauLo, EnerWN, EnerErg );
 
  430                                         nHi, lHi, sHi, jHi, gHi, IP_Ryd_Hi,
 
  431                                         nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  432                                         Aul, tauLo, EnerWN, EnerErg );
 
  441                         ( 
GetGF(Aul_hydro, EnerWN, 2.*nHi*nHi)/(2.*nLo*nLo) );
 
  447                 double oHi=1./(double)gHi;
 
  449                 if ( nelem == 1 && nHi == nLo && nHi == 30 && (ipCollider == 
ipPROTON ))
 
  453                                                 double ratef = 
powpq(ELECTRON_MASS/reduced_mass_collider_system,3,2) * COLL_CONST/
phycon.
sqrte;
 
  455                         rate_test = cs*ratef*oHi;
 
  457                         fprintf(
ioQQQ,
"Rates for H %ld %ld %ld %ld %ld %ld %ld %ld %g: %g %g \n",
 
  458                                         nLo,lLo,lHi,sLo,sHi,jLo,jHi,nelem,
phycon.
te,rate_test, 
dense.
eden);
 
  468                                         long nHi, 
double IP_Ryd_Hi,
 
  469                                         long nLo, 
double IP_Ryd_Lo,
 
  470                                         double tauLo, 
double EnerWN, 
double EnerErg )
 
  472         DEBUG_ENTRY( 
"iso_get_collision_strength_collapsed_to_collapsed_fast()" );
 
  479         double Aul_total = 0.;
 
  481         for( 
long lLo = 0; lLo < nLo; ++lLo )
 
  493                         gHi = (2*(lLo-1)+1)*sHi;
 
  498                 gHi = (2*(lLo+1)+1)*sHi;
 
  510                                 gHi = (2*(lLo-1)+1)*sHi;
 
  515                         gHi = (2*(lLo+1)+1)*sHi;
 
  524                 g_nLo = (2 * 
POW2(nLo));
 
  525                 factor = (nHi - 1) * g_nLo;
 
  529                 g_nLo = (4 * 
POW2(nLo));
 
  530                 factor = (2 * nHi - 2) * g_nLo;
 
  538                                 nHi, -1, -1, -1, 1, IP_Ryd_Hi,
 
  539                                 nLo, -1, -1, -1, 1, IP_Ryd_Lo,
 
  540                                 Aul_total/nAul, tauLo, EnerWN, EnerErg );
 
  544                                 nHi, -1, -1, -1, 1, IP_Ryd_Hi,
 
  545                                 nLo, -1, -1, -1, 1, IP_Ryd_Lo,
 
  546                                 Aul_total/nAul, tauLo, EnerWN, EnerErg );
 
  548                                 nHi, -1, -1, -1, 1, IP_Ryd_Hi,
 
  549                                 nLo, -1, -1, -1, 1, IP_Ryd_Lo,
 
  558 STATIC double iso_get_collision_strength_collapsed_to_collapsed( 
long ipISO, 
long nelem, 
long ipCollider,
 
  559                                         long nHi, 
double IP_Ryd_Hi,
 
  560                                         long nLo, 
double IP_Ryd_Lo,
 
  561                                         double Aul, 
double tauLo, 
double EnerWN, 
double EnerErg )
 
  563         DEBUG_ENTRY( 
"iso_get_collision_strength_collapsed_to_collapsed()" );
 
  568         vector<long> ang_mom_lo;
 
  569         for( 
long i = 0; i < nLo; ++i )
 
  570                 ang_mom_lo.push_back( i );
 
  573         for( vector<long>::iterator itLo = ang_mom_lo.begin(); itLo != ang_mom_lo.end(); ++itLo )
 
  582                 long gLo = (2*lLo+1) * sLo;
 
  585                                         nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  586                                         Aul, tauLo, EnerWN, EnerErg );
 
  593                         long gLo = (2*lLo+1) * sLo;
 
  596                                         nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  597                                         Aul, tauLo, EnerWN, EnerErg );
 
  607                                         long nHi, 
double IP_Ryd_Hi,
 
  608                                         long nLo, 
long lLo, 
long sLo, 
long jLo, 
long gLo, 
double IP_Ryd_Lo,
 
  609                                         double Aul, 
double tauLo, 
double EnerWN, 
double EnerErg )
 
  611         DEBUG_ENTRY( 
"iso_get_collision_strength_collapsed_to_resolved()" );
 
  622         ASSERT( lLo >= 0 && lLo < nLo );
 
  626         if( (nLo==2) && (lLo==1) && (sLo==3) )
 
  628                 ASSERT( (jLo>=0) && (jLo<=2) );
 
  629                 ipLoRes -= (2 - jLo);
 
  632         double cs_less_1 = 0.;
 
  636                 gHi = (2*lHi+1) * sHi;
 
  639                                 nHi, lHi, sHi, jHi, gHi, IP_Ryd_Hi,
 
  640                                 nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  641                                 Aul, tauLo, EnerWN, EnerErg );
 
  645         gHi = (2*lHi+1) * sHi;
 
  648                         nHi, lHi, sHi, jHi, gHi, IP_Ryd_Hi,
 
  649                         nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  650                         Aul, tauLo, EnerWN, EnerErg );
 
  654         else if( lLo+2 < nHi )
 
  663                         nHi, lHi, sHi, jHi, gHi, IP_Ryd_Hi,
 
  664                         nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  665                         Aul, tauLo, EnerWN, EnerErg );
 
  673         cs = cs_less_1 + cs_plus_1 + factor * cs_other;
 
  679                                         long nHi, 
long lHi, 
long sHi, 
long jHi, 
long gHi, 
double IP_Ryd_Hi,
 
  680                                         long nLo, 
long lLo, 
long sLo, 
long jLo, 
long gLo, 
double IP_Ryd_Lo,
 
  681                                         double Aul, 
double tauLo, 
double EnerWN, 
double EnerErg )
 
  683         DEBUG_ENTRY( 
"iso_get_collision_strength_resolved()" );
 
  690                                         nHi, lHi, sHi, gHi, IP_Ryd_Hi,
 
  691                                         nLo, lLo, sLo, gLo, IP_Ryd_Lo,
 
  692                                         Aul, tauLo, EnerErg );
 
  697                                         nHi, lHi, sHi, jHi, gHi, IP_Ryd_Hi,
 
  698                                         nLo, lLo, sLo, jLo, gLo, IP_Ryd_Lo,
 
  699                                         Aul, tauLo, EnerWN, EnerErg );
 
STATIC double iso_get_collision_strength(long ipISO, long nelem, long ipCollider, long ipHi, long ipLo)
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 
NORETURN void TotalInsanity(void)
multi_arr< realnum, 3 > CachedAs
bool lgIsoTraceFull[NISO]
double hydro_vs_ioniz(double ionization_energy_Ryd, double Te)
STATIC double iso_get_collision_strength_collapsed_to_resolved(long ipISO, long nelem, long ipCollider, long nHi, double IP_Ryd_Hi, long nLo, long lLo, long sLo, long jLo, long gLo, double IP_Ryd_Lo, double Aul, double tauLo, double EnerWN, double EnerErg)
void iso_suprathermal(long ipISO, long nelem)
double coll_ion_wrapper(long int z, long int n, double t)
long int ipIsoTrace[NISO]
bool lgColl_l_mixing[NISO]
void iso_put_error(long ipISO, long nelem, long ipHi, long ipLo, long whichData, realnum errorOpt, realnum errorPess)
double anu(size_t i) const 
multi_arr< long, 3 > IndexIfAllResolved
double * rate_coef_ul_set() const 
t_iso_sp iso_sp[NISO][LIMELM]
void vexp(const double x[], double y[], long nlo, long nhi)
bool fp_equal(sys_float x, sys_float y, int n=3)
ColliderList colliders(dense)
long int n_HighestResolved_max
realnum & EnergyWN() const 
EmissionList::reference Emis() const 
STATIC double iso_get_collision_strength_collapsed_to_collapsed_fast(long ipISO, long nelem, long ipCollider, long nHi, double IP_Ryd_Hi, long nLo, double IP_Ryd_Lo, double tauLo, double EnerWN, double EnerErg)
void iso_collisional_ionization(long ipISO, long nelem)
TransitionProxy trans(const long ipHi, const long ipLo)
double *** CollIonRate_Ground
realnum AtomicWeight[LIMELM]
double HydroEinstA(long int n1, long int n2)
double GetGF(double trans_prob, double enercm, double gup)
vector< t_collider > list
realnum & col_str() const 
CollisionProxy Coll() const 
#define DEBUG_ENTRY(funcname)
double powpq(double x, int p, int q)
realnum & rate_lu_nontherm_set() const 
const double * rate_coef_ul() const 
int fprintf(const Output &stream, const char *format,...)
t_secondaries secondaries
STATIC double iso_get_collision_strength_resolved(long ipISO, long nelem, long ipCollider, long nHi, long lHi, long sHi, long jHi, long gHi, double IP_Ryd_Hi, long nLo, long lLo, long sLo, long jLo, long gLo, double IP_Ryd_Lo, double Aul, double tauLo, double EnerWN, double EnerErg)
double Hion_coll_ioniz_ratecoef(long int ipISO, long int nelem, long int n, double ionization_energy_Ryd, double Te)
realnum GetHelikeCollisionStrength(long nelem, long Collider, long nHi, long lHi, long sHi, long jHi, long gHi, double IP_Ryd_Hi, long nLo, long lLo, long sLo, long jLo, long gLo, double IP_Ryd_Lo, double Aul, double tauLo, double EnerWN, double EnerErg)
void iso_collide(long ipISO, long nelem)
bool lgCaseB_HummerStorey
double ColUL(const ColliderList &colls) const 
long int ipHeavy[LIMELM][LIMELM]