37 char chL[21]={
'S',
'P',
'D',
'F',
'G',
'H',
'I',
'K',
'L',
'M',
'N',
'O',
'Q',
'R',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z'};
94 iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN(),
95 iso_sp[ipISO][nelem].st[ipHi].g()));
96 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().gf() > 0.);
101 iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN(),
102 iso_sp[ipISO][nelem].st[ipLo].g()));
103 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().opacity() > 0.);
116 static int nCalled = 0;
145 (*TauDummy).AddHiState();
146 (*TauDummy).AddLoState();
147 (*TauDummy).AddLine2Stack();
155 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
171 HIonPoten = 0.99946650834637;
173 HIonPoten = 3.9996319917;
180 double EnergyRydGround = 0.;
184 double EnergyWN, EnergyRyd;
188 EnergyRyd = HIonPoten/
POW2((
double)
N_(ipHi));
189 if( ipHi==
ipH2p && nelem >4 )
197 double E_correction = 0.1783*pow(Z,4)-1.8313*pow(Z,3)+27.803*pow(Z,2)-208.04*Z+570.59;
199 EnergyRyd -= E_correction * WAVNRYD;
215 iso_sp[ipISO][nelem].
fb[ipHi].xIsoLevNIonRyd = EnergyRyd;
217 EnergyRydGround = EnergyRyd;
218 iso_sp[ipISO][nelem].
st[ipHi].energy().set(EnergyRydGround-EnergyRyd);
221 for( ipLo=0; ipLo < ipHi; ipLo++ )
223 EnergyWN = RYD_INF * (
iso_sp[ipISO][nelem].
fb[ipLo].xIsoLevNIonRyd -
224 iso_sp[ipISO][nelem].
fb[ipHi].xIsoLevNIonRyd);
232 EnergyWN = -1.0 * EnergyWN;
237 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() >= 0.);
238 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyErg() >= 0.);
239 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyK() >= 0.);
251 iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN()/
253 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).WLAng() > 0.);
282 enum { DEBUG_EINA_A_NNP =
false };
300 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
307 for( ipLo=
ipH1s; ipLo < ipHi; ipLo++ )
332 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() > 0.);
338 if( DEBUG_EINA_A_NNP )
340 printf(
"%ld\t %ld\t %ld\t %.4e\n",
342 N_( ipHi ),
N_( ipLo ),
343 iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() );
364 for( ipLo=
ipHe1s1S; ipLo<ipHi; ipLo++ )
376 enum { DEBUG_LIFETIMES =
false };
380 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
386 iso_sp[ipISO][nelem].
st[0].lifetime() = -FLT_MAX;
392 for( ipLo=0; ipLo < ipHi; ipLo++ )
401 iso_sp[ipISO][nelem].
st[ipHi].lifetime() = 1./
iso_sp[ipISO][nelem].
st[ipHi].lifetime();
403 if( DEBUG_LIFETIMES )
405 printf(
"%ld\t %ld\t %.4e\n",
408 iso_sp[ipISO][nelem].st[ipHi].lifetime() );
411 for( ipLo=0; ipLo < ipHi; ipLo++ )
413 if(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() <= 0. )
420 (1.f/
iso_sp[ipISO][nelem].st[ipHi].lifetime())/
423 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().dampXvel()> 0.);
436 for(
long nelem = ipISO; nelem <
LIMELM; nelem++ )
457 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
463 for(
long ipLo=0; ipLo < ipHi; ++ipLo )
465 iso_sp[ipISO][nelem].
ex[ipHi][ipLo].pestrk = 0.;
466 iso_sp[ipISO][nelem].
ex[ipHi][ipLo].pestrk_up = 0.;
492 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
498 iso_sp[ipISO][nelem].
st[ipHi].Pop() = 0.;
499 iso_sp[ipISO][nelem].
fb[ipHi].Reset();
533 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
543 string chemicalLabel =
makeChemical( nelem, nelem-ipISO );
565 for(
long i1 = 0; i1 < numLevels; ++i1 )
579 for(
long i1 = 0; i1 < i; ++i1 )
623 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
647 for(
long nelem=0; nelem < ipISO; ++nelem )
656 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
677 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
686 unsigned int nLine = 0;
706 unsigned int nTransition=0;
709 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
714 Transitions[ipISO][nelem][nTransition].setHi(ipHi);
715 Transitions[ipISO][nelem][nTransition].setLo(ipLo);
726 unsigned int nExtraLyman = 0;
748 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
752 long ion = nelem - ipISO;
753 ASSERT( ion >= 0 && ion <= nelem );
797 for( il = 0L; il < in; ++il )
799 iso_sp[ipISO][nelem].
st[i].n() = in;
800 iso_sp[ipISO][nelem].
st[i].S() = is;
801 iso_sp[ipISO][nelem].
st[i].l() = il;
802 iso_sp[ipISO][nelem].
st[i].j() = -1;
811 for( in =
iso_sp[ipISO][nelem].n_HighestResolved_max + 1;
814 for( il = 0L; il < in; ++il )
825 iso_sp[ipISO][nelem].
st[level].n() = in;
826 iso_sp[ipISO][nelem].
st[level].S() = -LONG_MAX;
827 iso_sp[ipISO][nelem].
st[level].l() = -LONG_MAX;
828 iso_sp[ipISO][nelem].
st[level].j() = -1;
830 for( il = 0; il < in; ++il )
842 ASSERT( (in > 0) && (in < (
iso_sp[ipISO][nelem].n_HighestResolved_max +
iso_sp[ipISO][nelem].nCollapsed_max + 1) ) );
847 for( il = 0L; il < in; ++il )
849 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].n() == in );
850 if( in <=
iso_sp[ipISO][nelem].n_HighestResolved_max )
854 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].l() == il );
855 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].
S() == is );
857 ASSERT(
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ==
iso_sp[ipISO][nelem].IndexIfAllResolved[in][il][is] );
876 for( il = 0L; il < in; ++il )
878 for( is = 3L; is >= 1L; is -= 2 )
883 if( (il == 1L) && (is == 1L) )
886 if( (in == 1L) && (is == 3L) )
892 iso_sp[ipISO][nelem].
st[i].n() = in;
893 iso_sp[ipISO][nelem].
st[i].S() = is;
894 iso_sp[ipISO][nelem].
st[i].l() = il;
896 iso_sp[ipISO][nelem].
st[i].j() = il;
902 else if( (in == 2) && (il == 1) && (is == 3) )
907 iso_sp[ipISO][nelem].
st[i].n() = in;
908 iso_sp[ipISO][nelem].
st[i].S() = is;
909 iso_sp[ipISO][nelem].
st[i].l() = il;
910 iso_sp[ipISO][nelem].
st[i].j() = ij;
920 iso_sp[ipISO][nelem].
st[i].n() = in;
921 iso_sp[ipISO][nelem].
st[i].S() = is;
922 iso_sp[ipISO][nelem].
st[i].l() = il;
923 iso_sp[ipISO][nelem].
st[i].j() = -1L;
933 iso_sp[ipISO][nelem].
st[i].n() = in;
934 iso_sp[ipISO][nelem].
st[i].S() = 1L;
935 iso_sp[ipISO][nelem].
st[i].l() = 1L;
936 iso_sp[ipISO][nelem].
st[i].j() = 1L;
945 for( in =
iso_sp[ipISO][nelem].n_HighestResolved_max + 1;
949 for( il = 0L; il < in; ++il )
951 for( is = 3L; is >= 1L; is -= 2 )
956 if( (il == 1L) && (is == 1L) )
975 iso_sp[ipISO][nelem].
st[level].n() = in;
976 iso_sp[ipISO][nelem].
st[level].S() = -LONG_MAX;
977 iso_sp[ipISO][nelem].
st[level].l() = -LONG_MAX;
978 iso_sp[ipISO][nelem].
st[level].j() = -1;
980 for( il = 0; il < in; ++il )
982 for( is = 1; is <= 3; is += 2 )
995 ASSERT( (in > 0) && (in < (
iso_sp[ipISO][nelem].n_HighestResolved_max +
iso_sp[ipISO][nelem].nCollapsed_max + 1) ) );
1000 for( il = 0L; il < in; ++il )
1002 for( is = 3L; is >= 1; is -= 2 )
1005 if( (in == 1L) && (is == 3L) )
1008 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].n() == in );
1009 if( in <=
iso_sp[ipISO][nelem].n_HighestResolved_max )
1013 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].l() == il );
1014 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].
S() == is );
1016 ASSERT(
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ==
iso_sp[ipISO][nelem].IndexIfAllResolved[in][il][is] );
1026 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
1033 iso_sp[ipISO][nelem].
st[ipLo].nelem() = (int)(nelem+1);
1034 iso_sp[ipISO][nelem].
st[ipLo].IonStg() = (int)(nelem+1-ipISO);
1036 if(
iso_sp[ipISO][nelem].st[ipLo].j() >= 0 )
1038 iso_sp[ipISO][nelem].
st[ipLo].g() = 2.f*
iso_sp[ipISO][nelem].
st[ipLo].j()+1.f;
1040 else if(
iso_sp[ipISO][nelem].st[ipLo].l() >= 0 )
1042 iso_sp[ipISO][nelem].
st[ipLo].g() = (2.f*
iso_sp[ipISO][nelem].
st[ipLo].l()+1.f) *
1043 iso_sp[ipISO][nelem].st[ipLo].
S();
1057 char chConfiguration[32];
1058 long nCharactersWritten = 0;
1066 iso_sp[ipISO][nelem].st[ipLo].n() >
iso_sp[ipISO][nelem].n_HighestResolved_max )
1068 nCharactersWritten = sprintf( chConfiguration,
"n=%3li",
1069 iso_sp[ipISO][nelem].st[ipLo].n() );
1071 else if( (
iso_sp[ipISO][nelem].st[ipLo].j() > 0 &&
1073 (
iso_sp[ipISO][nelem].st[ipLo].j() >= 0 &&
1076 nCharactersWritten = sprintf( chConfiguration,
"%3li^%li%c_%li",
1077 iso_sp[ipISO][nelem].st[ipLo].n(),
1078 iso_sp[ipISO][nelem].st[ipLo].
S(),
1080 iso_sp[ipISO][nelem].st[ipLo].j() );
1084 nCharactersWritten = sprintf( chConfiguration,
"%3li^%li%c",
1085 iso_sp[ipISO][nelem].st[ipLo].n(),
1086 iso_sp[ipISO][nelem].st[ipLo].
S(),
1090 if( nCharactersWritten < 0 || nCharactersWritten > 31 )
1093 iso_sp[ipISO][nelem].
st[ipLo].chConfig() = chConfiguration;
1101 #if defined(__ICC) && defined(__i386)
1102 #pragma optimization_level 1
1113 (*(*t).Hi()).nelem() = (int)(nelem+1);
1114 (*(*t).Hi()).IonStg() = (int)(nelem+1-ipISO);
1116 (*(*t).Hi()).n() = nHi;
1122 (*(*t).Hi()).chConfig() =
"ExtraLyman level (probably duplicate)";
1125 Enerwn =
iso_sp[ipISO][nelem].
fb[0].xIsoLevNIonRyd * RYD_INF * ( 1. - 1./
POW2((
double)nHi) );
1128 (*t).EnergyWN() = (
realnum)(Enerwn);
1130 (*(*t).Hi()).
energy().set( Enerwn,
"cm^-1" );
1141 Aul = (1.508e10) / pow((
double)nHi,2.975);
1149 Aul = 1.375E10 * pow((
double)nelem, 3.9) / pow((
double)nHi,3.1);
1153 (*t).Emis().Aul() = (
realnum)Aul;
1157 (*t).Emis().dampXvel() = (
realnum)( 1.f / (*(*t).Hi()).lifetime() / PI4 / (*t).EnergyWN() );
1161 (*t).Emis().gf() = (
realnum)(
GetGF((*t).Emis().Aul(), (*t).EnergyWN(), (*(*t).Hi()).g()));
1164 (*t).Emis().opacity() = (
realnum)(
abscf((*t).Emis().gf(), (*t).EnergyWN(), (*(*t).Lo()).g()));
1167 (*t).ipCont() = INT_MIN;
1168 (*t).Emis().ipFine() = INT_MIN;
1174 enum {DEBUG_LOC=
false};
1181 (*t).Emis().opacity()
1193 double tau, t0, eps2;
1195 double m = ELECTRON_MASS;
1198 double mu = (m*M)/(M+m);
1200 long Z = nelem + 1 - ipISO;
1207 eps2 = 1. - ( l*l + l + 8./47. - (l+1.)/69./n ) /
POW2( (
double)n );
1209 t0 = 3. * H_BAR *
powi( (
double)n, 5 ) /
1210 ( 2. *
pow4( (
double)( z * Z ) ) *
powi( FINE_STRUCTURE, 5 ) * mu *
pow2( SPEEDLIGHT ) ) *
1211 pow2( (m + M)/(Z*m + z*
M) );
1213 tau = t0 * ( 1. - eps2 ) /
1214 ( 1. + 19./88.*( (1./eps2 - 1.) * log( 1. - eps2 ) + 1. -
1215 0.5 * eps2 - 0.025 * eps2 * eps2 ) );
1222 tau *= 1.1722 * pow( (
double)nelem, 0.1 );
1239 long int i, j, ipLo, ipHi;
1244 memset( SumAPerN, 0, (
iso_sp[ipISO][nelem].n_HighestResolved_max +
iso_sp[ipISO][nelem].nCollapsed_max + 1 )*
sizeof(
double ) );
1250 iso_sp[ipISO][nelem].
fb[0].SigmaAtot = 0.;
1251 iso_sp[ipISO][nelem].
ex[0][0].SigmaCascadeProb = 0.;
1273 iso_sp[ipISO][nelem].
fb[ipHi].SigmaAtot = 0.;
1274 iso_sp[ipISO][nelem].
ex[ipHi][ipHi].SigmaCascadeProb = 0.;
1281 for( ipLo=ipLoStart; ipLo<ipHi; ipLo++ )
1286 for( ipLo=ipLoStart; ipLo<ipHi; ipLo++ )
1299 ASSERT(
iso_sp[ipISO][nelem].BranchRatio[ipHi][ipLo] <= 1.0000001 );
1306 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() > 0. ||
1313 iso_sp[ipISO][nelem].
fb[ipHi].SigmaAtot +=
1315 (
double)
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() );
1322 iso_sp[ipISO][nelem].
fb[ipHi].SigmaAtot = sqrt(
iso_sp[ipISO][nelem].fb[ipHi].SigmaAtot );
1326 for( i=0; i<ipHi; i++ )
1328 for( ipLo=0; ipLo<=i; ipLo++ )
1336 for( ipLo=0; ipLo<ipHi; ipLo++ )
1338 double SigmaCul = 0.;
1339 for( i=ipLo; i<ipHi; i++ )
1344 double SigmaA =
iso_sp[ipISO][nelem].
ex[ipHi][i].Error[
IPRAD] *
1347 pow2(SigmaA*
iso_sp[ipISO][nelem].CascadeProb[i][ipLo]*
iso_sp[ipISO][nelem].st[ipHi].lifetime()) +
1348 pow2(
iso_sp[ipISO][nelem].fb[ipHi].SigmaAtot*
iso_sp[ipISO][nelem].BranchRatio[ipHi][i]*
1349 iso_sp[ipISO][nelem].CascadeProb[i][ipLo]*
iso_sp[ipISO][nelem].st[ipHi].lifetime()) +
1350 pow2(
iso_sp[ipISO][nelem].ex[i][ipLo].SigmaCascadeProb*
iso_sp[ipISO][nelem].BranchRatio[ipHi][i]);
1353 SigmaCul = sqrt(SigmaCul);
1354 iso_sp[ipISO][nelem].
ex[ipHi][ipLo].SigmaCascadeProb = SigmaCul;
1363 enum {DEBUG_LOC=
false};
1393 if( (
iso_sp[ipISO][nelem].st[ipHi].l() == 1) && (
iso_sp[ipISO][nelem].st[ipHi].
S() == 3) )
1398 for( i = ipLo; i<=ipHi; i++)
1400 if( (
iso_sp[ipISO][nelem].st[i].l() == hi_l) && (
iso_sp[ipISO][nelem].st[i].
S() == hi_s) )
1442 enum {DEBUG_LOC=
false};
1447 fprintf(
ioQQQ,
"n %ld\t lifetime %.4e\n", i, 1./SumAPerN[i]);
1466 for(
long nelem = ipISO; nelem <
LIMELM; nelem++ )
1479 (*tr).WLAng() = (
realnum)(RYDLAM/
1480 ((
iso_sp[ipISO-1][nelem].fb[0].xIsoLevNIonRyd -
iso_sp[ipISO-1][nelem].fb[1].xIsoLevNIonRyd) -
1481 (
iso_sp[ipISO][nelem].fb[1].xIsoLevNIonRyd-
iso_sp[ipISO][nelem].fb[i].xIsoLevNIonRyd)) );
1483 (*tr).EnergyWN() = 1.e8f / (*tr).WLAng();
1485 (*tr).Emis().iRedisFun() =
ipCRDW;
1487 (*(*tr).Hi()).nelem() = nelem + 1;
1488 (*(*tr).Hi()).IonStg() = nelem + 1 - ipISO;
1489 fixit(
"what should the stat weight of the upper level be? For now say 2.");
1490 (*(*tr).Hi()).g() = 2.f;
1493 (*(*tr).Hi()).chConfig() =
"Satellite level (probably duplicate)";
1498 (*tr).Emis().PopOpc() =
1499 (*(*tr).Lo()).Pop();
1501 (*tr).Emis().pump() = 0.;
1513 double ConBoltz, LTE_pop=
SMALLFLOAT+FLT_EPSILON, factor1, ConvLTEPOP;
1531 (*tr).Emis().xObsIntensity() =
1532 (*tr).Emis().xIntensity() =
1534 ERG1CM * (*tr).EnergyWN();
1551 LTE_pop = (*(*tr).Hi()).g() * ConBoltz * ConvLTEPOP;
1554 LTE_pop =
max( LTE_pop, 1e-30f );
1557 (*tr).Emis().Aul() = (
realnum)(dr_rate/LTE_pop);
1558 (*tr).Emis().Aul() =
1567 max( 1e-20f, (*tr).Emis().gf() );
1571 (*(*tr).Hi()).DepartCoef() = 1.;
1573 (*tr).Emis().PopOpc() =
1574 (*(*tr).Lo()).Pop() -
1575 (*(*tr).Hi()).Pop() *
1576 (*(*tr).Lo()).g()/(*(*tr).Hi()).g();
1578 (*tr).Emis().opacity() =
1581 (*(*tr).Lo()).g()));
1584 double lifetime = 1e-10;
1586 (*tr).Emis().dampXvel() = (
realnum)(
1587 (1.f/lifetime)/PI4/(*tr).EnergyWN());
1599 long tot_num_levels;
1606 tot_num_levels = (long)( nmaxResolved * 0.5 *( nmaxResolved + 1 ) ) + numCollapsed;
1610 tot_num_levels = nmaxResolved*nmaxResolved + nmaxResolved + 1 + numCollapsed;
1615 return tot_num_levels;
1623 ASSERT(
iso_sp[ipISO][nelem].n_HighestResolved_max >= 3 );
1628 if(
iso_sp[ipISO][nelem].numLevels_max >
iso_sp[ipISO][nelem].numLevels_malloc )
1630 fprintf(
ioQQQ,
"The number of levels for ipISO %li, nelem %li, has been increased since the initial coreload.\n",
1655 for(
long ipLo=0; ipLo<ipFirstCollapsed; ipLo++ )
1657 long spin =
iso_sp[ipISO][nelem].
st[ipLo].S();
1665 iso_sp[ipISO][nelem].CachedAs[ nHi-iso_sp[ipISO][nelem].n_HighestResolved_max-1 ][ ipLo ][1] };
1668 Auls[0]*spin*(2.f*(
L_(ipLo)+1.f)+1.f);
1675 Auls[1]*spin*(2.f*(
L_(ipLo)-1.f)+1.f);
1679 EffectiveAul /= (2.f*nHi*nHi);
1681 EffectiveAul /= (4.f*nHi*nHi);
1690 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() > 0. );
1699 DEBUG_ENTRY(
"iso_collapsed_lifetimes_update()" );
1705 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
1714 iso_sp[ipISO][nelem].
st[ipHi].lifetime() = 1./totalAul;
1716 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
1718 if(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() <= 0. )
1725 totalAul/(PI4*
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN()));
1727 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().dampXvel()> 0.);
1735 STATIC void Prt_AGN_table(
void )
1744 sprintf( &chLevel.front(ipLo) ,
"%li %li%c",
N_(ipLo),
S_(ipLo),
chL[
MIN2(20,
L_(ipLo))] );
1755 double te[NTEMP]={6000.,8000.,10000.,15000.,20000.,25000. };
1756 double telog[NTEMP] ,
1761 for(
long i=0; i < NTEMP; ++i )
1763 telog[i] = log10( te[i] );
1766 for(
long i=0; i < NTEMP; ++i )
1774 for(
long ipLo=
ipHe1s1S; ipLo < ipHi; ++ipLo )
1779 if(
N_(ipHi) ==
N_(ipLo) )
1784 &chLevel.front(ipLo) , &chLevel.front(ipHi) );
1787 for(
long i=0; i < NTEMP; ++i )
1796 for(
long i=0; i < NTEMP; ++i )
long int numLevels_malloc
realnum & opacity() const
STATIC void iso_assign_quantum_numbers(void)
NORETURN void TotalInsanity(void)
multi_arr< int, 3 > ipSatelliteLines
multi_arr< realnum, 3 > CachedAs
STATIC void iso_satellite(void)
double abscf(double gf, double enercm, double gl)
realnum ph1(int i, int j, int k, int l) const
long iso_get_total_num_levels(long ipISO, long nmaxResolved, long numCollapsed)
sys_float sexp(sys_float x)
double RefIndex(double EnergyWN)
multi_arr< long, 2 > ipTrans
vector< vector< TransitionList > > Transitions
realnum HeCSInterp(long nelem, long ipHi, long ipLo, long Collider)
multi_arr< long, 3 > IndexIfAllResolved
STATIC void tfidle(bool lgForceUpdate)
t_iso_sp iso_sp[NISO][LIMELM]
void iso_collapsed_lifetimes_update(long ipISO, long nelem)
STATIC void FillExtraLymanLine(const TransitionList::iterator &t, long ipISO, long nelem, long nHi)
double xIonDense[LIMELM][LIMELM+1]
long int n_HighestResolved_local
const multi_geom< d, ALLOC > & clone() const
multi_arr< double, 2 > BranchRatio
double helike_energy(long nelem, long ipLev)
void iso_update_num_levels(long ipISO, long nelem)
long int n_HighestResolved_max
realnum & EnergyWN() const
double energy(const genericState &gs)
realnum & dampXvel() const
EmissionList::reference Emis() const
multi_arr< int, 3 > ipExtraLymanLines
void iso_satellite_update(long nelem)
molecule * findspecies(const char buf[])
STATIC void iso_zero(void)
valarray< class molezone > species
char species[CHARS_SPECIES]
double powi(double, long int)
realnum helike_transprob(long nelem, long ipHi, long ipLo)
void iso_collapsed_Aul_update(long ipISO, long nelem)
vector< vector< TransitionList > > SatelliteLines
multi_arr< long, 3 > QuantumNumbers2Index
TransitionProxy trans(const long ipHi, const long ipLo)
STATIC void iso_allocate(void)
realnum AtomicWeight[LIMELM]
string makeChemical(long nelem, long ion)
multi_arr< double, 2 > CascadeProb
multi_arr< extra_tr, 2 > ex
void DoFSMixing(long nelem, long ipLoSing, long ipHiSing)
void reserve(size_type i1)
double GetGF(double trans_prob, double enercm, double gup)
void iso_recomb_setup(long ipISO)
void iso_recomb_malloc(void)
vector< vector< TransitionList > > ExtraLymanLines
#define DEBUG_ENTRY(funcname)
double powpq(double x, int p, int q)
double iso_state_lifetime(long ipISO, long nelem, long n, long l)
void iso_cascade(long ipISO, long nelem)
void iso_setRedisFun(long ipISO, long nelem, long ipLo, long ipHi)
int fprintf(const Output &stream, const char *format,...)
vector< TransitionList > AllTransitions
void HelikeTransProbSetup(void)
void iso_setOpacity(long ipISO, long nelem, long ipLo, long ipHi)
double H_Einstein_A(long int n, long int l, long int np, long int lp, long int iz)
long int nCollapsed_local
long int nLyman_malloc[NISO]
qList AnonStates("AnonStates", 1)
void AddLine2Stack() const
static vector< species > isoSpecies(NISO)
void iso_recomb_auxiliary_free(void)
realnum hydro_transprob(long nelem, long ipHi, long ipLo)