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++ )
166 double EnergyRydGround = 0.;
170 double EnergyWN, EnergyRyd;
174 EnergyRyd = HIonPoten/
POW2((
double)
N_(ipHi));
189 iso_sp[ipISO][nelem].
fb[ipHi].xIsoLevNIonRyd = EnergyRyd;
191 EnergyRydGround = EnergyRyd;
192 iso_sp[ipISO][nelem].
st[ipHi].energy().set(EnergyRydGround-EnergyRyd);
195 for( ipLo=0; ipLo < ipHi; ipLo++ )
197 EnergyWN = RYD_INF * (
iso_sp[ipISO][nelem].
fb[ipLo].xIsoLevNIonRyd -
198 iso_sp[ipISO][nelem].
fb[ipHi].xIsoLevNIonRyd);
206 EnergyWN = -1.0 * EnergyWN;
211 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() >= 0.);
212 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyErg() >= 0.);
213 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyK() >= 0.);
225 iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN()/
227 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).WLAng() > 0.);
256 enum { DEBUG_EINA_A_NNP =
false };
274 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
281 for( ipLo=
ipH1s; ipLo < ipHi; ipLo++ )
306 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() > 0.);
312 if( DEBUG_EINA_A_NNP )
314 printf(
"%ld\t %ld\t %ld\t %.4e\n",
316 N_( ipHi ),
N_( ipLo ),
317 iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() );
338 for( ipLo=
ipHe1s1S; ipLo<ipHi; ipLo++ )
361 enum { DEBUG_LIFETIMES =
false };
365 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
371 iso_sp[ipISO][nelem].
st[0].lifetime() = -FLT_MAX;
377 for( ipLo=0; ipLo < ipHi; ipLo++ )
386 iso_sp[ipISO][nelem].
st[ipHi].lifetime() = 1./
iso_sp[ipISO][nelem].
st[ipHi].lifetime();
388 if( DEBUG_LIFETIMES )
390 printf(
"%ld\t %ld\t %.4e\n",
393 iso_sp[ipISO][nelem].st[ipHi].lifetime() );
396 for( ipLo=0; ipLo < ipHi; ipLo++ )
398 if(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() <= 0. )
405 (1.f/
iso_sp[ipISO][nelem].st[ipHi].lifetime())/
408 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().dampXvel()> 0.);
421 for(
long nelem = ipISO; nelem <
LIMELM; nelem++ )
442 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
448 for(
long ipLo=0; ipLo < ipHi; ++ipLo )
450 iso_sp[ipISO][nelem].
ex[ipHi][ipLo].pestrk = 0.;
451 iso_sp[ipISO][nelem].
ex[ipHi][ipLo].pestrk_up = 0.;
477 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
483 iso_sp[ipISO][nelem].
st[ipHi].Pop() = 0.;
484 iso_sp[ipISO][nelem].
fb[ipHi].Reset();
518 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
528 string chemicalLabel =
makeChemical( nelem, nelem-ipISO );
550 for(
long i1 = 0; i1 < numLevels; ++i1 )
564 for(
long i1 = 0; i1 < i; ++i1 )
608 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
632 for(
long nelem=0; nelem < ipISO; ++nelem )
641 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
662 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
671 unsigned int nLine = 0;
691 unsigned int nTransition=0;
694 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
699 Transitions[ipISO][nelem][nTransition].setHi(ipHi);
700 Transitions[ipISO][nelem][nTransition].setLo(ipLo);
711 unsigned int nExtraLyman = 0;
733 for(
long nelem=ipISO; nelem <
LIMELM; ++nelem )
737 long ion = nelem - ipISO;
738 ASSERT( ion >= 0 && ion <= nelem );
782 for( il = 0L; il < in; ++il )
784 iso_sp[ipISO][nelem].
st[i].n() = in;
785 iso_sp[ipISO][nelem].
st[i].S() = is;
786 iso_sp[ipISO][nelem].
st[i].l() = il;
787 iso_sp[ipISO][nelem].
st[i].j() = -1;
796 for( in =
iso_sp[ipISO][nelem].n_HighestResolved_max + 1;
799 for( il = 0L; il < in; ++il )
810 iso_sp[ipISO][nelem].
st[level].n() = in;
811 iso_sp[ipISO][nelem].
st[level].S() = -LONG_MAX;
812 iso_sp[ipISO][nelem].
st[level].l() = -LONG_MAX;
813 iso_sp[ipISO][nelem].
st[level].j() = -1;
815 for( il = 0; il < in; ++il )
827 ASSERT( (in > 0) && (in < (
iso_sp[ipISO][nelem].n_HighestResolved_max +
iso_sp[ipISO][nelem].nCollapsed_max + 1) ) );
832 for( il = 0L; il < in; ++il )
834 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].n() == in );
835 if( in <=
iso_sp[ipISO][nelem].n_HighestResolved_max )
839 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].l() == il );
840 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].
S() == is );
842 ASSERT(
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ==
iso_sp[ipISO][nelem].IndexIfAllResolved[in][il][is] );
861 for( il = 0L; il < in; ++il )
863 for( is = 3L; is >= 1L; is -= 2 )
868 if( (il == 1L) && (is == 1L) )
871 if( (in == 1L) && (is == 3L) )
877 iso_sp[ipISO][nelem].
st[i].n() = in;
878 iso_sp[ipISO][nelem].
st[i].S() = is;
879 iso_sp[ipISO][nelem].
st[i].l() = il;
881 iso_sp[ipISO][nelem].
st[i].j() = il;
887 else if( (in == 2) && (il == 1) && (is == 3) )
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;
895 iso_sp[ipISO][nelem].
st[i].j() = ij;
905 iso_sp[ipISO][nelem].
st[i].n() = in;
906 iso_sp[ipISO][nelem].
st[i].S() = is;
907 iso_sp[ipISO][nelem].
st[i].l() = il;
908 iso_sp[ipISO][nelem].
st[i].j() = -1L;
918 iso_sp[ipISO][nelem].
st[i].n() = in;
919 iso_sp[ipISO][nelem].
st[i].S() = 1L;
920 iso_sp[ipISO][nelem].
st[i].l() = 1L;
921 iso_sp[ipISO][nelem].
st[i].j() = 1L;
930 for( in =
iso_sp[ipISO][nelem].n_HighestResolved_max + 1;
934 for( il = 0L; il < in; ++il )
936 for( is = 3L; is >= 1L; is -= 2 )
941 if( (il == 1L) && (is == 1L) )
960 iso_sp[ipISO][nelem].
st[level].n() = in;
961 iso_sp[ipISO][nelem].
st[level].S() = -LONG_MAX;
962 iso_sp[ipISO][nelem].
st[level].l() = -LONG_MAX;
963 iso_sp[ipISO][nelem].
st[level].j() = -1;
965 for( il = 0; il < in; ++il )
967 for( is = 1; is <= 3; is += 2 )
980 ASSERT( (in > 0) && (in < (
iso_sp[ipISO][nelem].n_HighestResolved_max +
iso_sp[ipISO][nelem].nCollapsed_max + 1) ) );
985 for( il = 0L; il < in; ++il )
987 for( is = 3L; is >= 1; is -= 2 )
990 if( (in == 1L) && (is == 3L) )
993 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].n() == in );
994 if( in <=
iso_sp[ipISO][nelem].n_HighestResolved_max )
998 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].l() == il );
999 ASSERT(
iso_sp[ipISO][nelem].st[
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ].
S() == is );
1001 ASSERT(
iso_sp[ipISO][nelem].QuantumNumbers2Index[in][il][is] ==
iso_sp[ipISO][nelem].IndexIfAllResolved[in][il][is] );
1011 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
1018 iso_sp[ipISO][nelem].
st[ipLo].nelem() = (int)(nelem+1);
1019 iso_sp[ipISO][nelem].
st[ipLo].IonStg() = (int)(nelem+1-ipISO);
1021 if(
iso_sp[ipISO][nelem].st[ipLo].j() >= 0 )
1023 iso_sp[ipISO][nelem].
st[ipLo].g() = 2.f*
iso_sp[ipISO][nelem].
st[ipLo].j()+1.f;
1025 else if(
iso_sp[ipISO][nelem].st[ipLo].l() >= 0 )
1027 iso_sp[ipISO][nelem].
st[ipLo].g() = (2.f*
iso_sp[ipISO][nelem].
st[ipLo].l()+1.f) *
1028 iso_sp[ipISO][nelem].st[ipLo].
S();
1042 char chConfiguration[11] =
" ";
1043 long nCharactersWritten = 0;
1048 if(
iso_sp[ipISO][nelem].st[ipLo].n() >
iso_sp[ipISO][nelem].n_HighestResolved_max )
1050 nCharactersWritten = sprintf( chConfiguration,
"n=%3li",
1051 iso_sp[ipISO][nelem].st[ipLo].n() );
1053 else if(
iso_sp[ipISO][nelem].st[ipLo].j() > 0 )
1055 nCharactersWritten = sprintf( chConfiguration,
"%3li^%li%c_%li",
1056 iso_sp[ipISO][nelem].st[ipLo].n(),
1057 iso_sp[ipISO][nelem].st[ipLo].
S(),
1059 iso_sp[ipISO][nelem].st[ipLo].j() );
1063 nCharactersWritten = sprintf( chConfiguration,
"%3li^%li%c",
1064 iso_sp[ipISO][nelem].st[ipLo].n(),
1065 iso_sp[ipISO][nelem].st[ipLo].
S(),
1069 if( nCharactersWritten > 10 )
1071 chConfiguration[10] =
'\0';
1073 iso_sp[ipISO][nelem].
st[ipLo].chConfig()=chConfiguration;
1081 #if defined(__ICC) && defined(__i386)
1082 #pragma optimization_level 1
1093 (*(*t).Hi()).nelem() = (int)(nelem+1);
1094 (*(*t).Hi()).IonStg() = (int)(nelem+1-ipISO);
1096 (*(*t).Hi()).n() = nHi;
1102 (*(*t).Hi()).chConfig() =
"ExtraLyman level (probably duplicate)";
1105 Enerwn =
iso_sp[ipISO][nelem].
fb[0].xIsoLevNIonRyd * RYD_INF * ( 1. - 1./
POW2((
double)nHi) );
1108 (*t).EnergyWN() = (
realnum)(Enerwn);
1110 (*(*t).Hi()).
energy().set( Enerwn,
"cm^-1" );
1121 Aul = (1.508e10) /
pow((
double)nHi,2.975);
1129 Aul = 1.375E10 *
pow((
double)nelem, 3.9) /
pow((
double)nHi,3.1);
1133 (*t).Emis().Aul() = (
realnum)Aul;
1137 (*t).Emis().dampXvel() = (
realnum)( 1.f / (*(*t).Hi()).lifetime() / PI4 / (*t).EnergyWN() );
1141 (*t).Emis().gf() = (
realnum)(
GetGF((*t).Emis().Aul(), (*t).EnergyWN(), (*(*t).Hi()).g()));
1144 (*t).Emis().opacity() = (
realnum)(
abscf((*t).Emis().gf(), (*t).EnergyWN(), (*(*t).Lo()).g()));
1147 (*t).ipCont() = INT_MIN;
1148 (*t).Emis().ipFine() = INT_MIN;
1154 enum {DEBUG_LOC=
false};
1161 (*t).Emis().opacity()
1173 double tau, t0, eps2;
1175 double m = ELECTRON_MASS;
1178 double mu = (m*M)/(M+m);
1180 long Z = nelem + 1 - ipISO;
1187 eps2 = 1. - ( l*l + l + 8./47. - (l+1.)/69./n ) /
POW2( (
double)n );
1189 t0 = 3. * H_BAR *
powi( (
double)n, 5 ) /
1190 ( 2. *
pow4( (
double)( z * Z ) ) *
powi( FINE_STRUCTURE, 5 ) * mu *
pow2( SPEEDLIGHT ) ) *
1191 pow2( (m + M)/(Z*m + z*
M) );
1193 tau = t0 * ( 1. - eps2 ) /
1194 ( 1. + 19./88.*( (1./eps2 - 1.) * log( 1. - eps2 ) + 1. -
1195 0.5 * eps2 - 0.025 * eps2 * eps2 ) );
1202 tau *= 1.1722 *
pow( (
double)nelem, 0.1 );
1219 long int i, j, ipLo, ipHi;
1224 memset( SumAPerN, 0, (
iso_sp[ipISO][nelem].n_HighestResolved_max +
iso_sp[ipISO][nelem].nCollapsed_max + 1 )*
sizeof(
double ) );
1230 iso_sp[ipISO][nelem].
fb[0].SigmaAtot = 0.;
1231 iso_sp[ipISO][nelem].
ex[0][0].SigmaCascadeProb = 0.;
1253 iso_sp[ipISO][nelem].
fb[ipHi].SigmaAtot = 0.;
1254 iso_sp[ipISO][nelem].
ex[ipHi][ipHi].SigmaCascadeProb = 0.;
1261 for( ipLo=ipLoStart; ipLo<ipHi; ipLo++ )
1266 for( ipLo=ipLoStart; ipLo<ipHi; ipLo++ )
1279 ASSERT(
iso_sp[ipISO][nelem].BranchRatio[ipHi][ipLo] <= 1.0000001 );
1286 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() > 0. ||
1293 iso_sp[ipISO][nelem].
fb[ipHi].SigmaAtot +=
1295 (
double)
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() );
1302 iso_sp[ipISO][nelem].
fb[ipHi].SigmaAtot = sqrt(
iso_sp[ipISO][nelem].fb[ipHi].SigmaAtot );
1306 for( i=0; i<ipHi; i++ )
1308 for( ipLo=0; ipLo<=i; ipLo++ )
1316 for( ipLo=0; ipLo<ipHi; ipLo++ )
1318 double SigmaCul = 0.;
1319 for( i=ipLo; i<ipHi; i++ )
1324 double SigmaA =
iso_sp[ipISO][nelem].
ex[ipHi][i].Error[
IPRAD] *
1327 pow2(SigmaA*
iso_sp[ipISO][nelem].CascadeProb[i][ipLo]*
iso_sp[ipISO][nelem].st[ipHi].lifetime()) +
1328 pow2(
iso_sp[ipISO][nelem].fb[ipHi].SigmaAtot*
iso_sp[ipISO][nelem].BranchRatio[ipHi][i]*
1329 iso_sp[ipISO][nelem].CascadeProb[i][ipLo]*
iso_sp[ipISO][nelem].st[ipHi].lifetime()) +
1330 pow2(
iso_sp[ipISO][nelem].ex[i][ipLo].SigmaCascadeProb*
iso_sp[ipISO][nelem].BranchRatio[ipHi][i]);
1333 SigmaCul = sqrt(SigmaCul);
1334 iso_sp[ipISO][nelem].
ex[ipHi][ipLo].SigmaCascadeProb = SigmaCul;
1343 enum {DEBUG_LOC=
false};
1373 if( (
iso_sp[ipISO][nelem].st[ipHi].l() == 1) && (
iso_sp[ipISO][nelem].st[ipHi].
S() == 3) )
1378 for( i = ipLo; i<=ipHi; i++)
1380 if( (
iso_sp[ipISO][nelem].st[i].l() == hi_l) && (
iso_sp[ipISO][nelem].st[i].
S() == hi_s) )
1422 enum {DEBUG_LOC=
false};
1427 fprintf(
ioQQQ,
"n %ld\t lifetime %.4e\n", i, 1./SumAPerN[i]);
1446 for(
long nelem = ipISO; nelem <
LIMELM; nelem++ )
1459 (*tr).WLAng() = (
realnum)(RYDLAM/
1460 ((
iso_sp[ipISO-1][nelem].fb[0].xIsoLevNIonRyd -
iso_sp[ipISO-1][nelem].fb[1].xIsoLevNIonRyd) -
1461 (
iso_sp[ipISO][nelem].fb[1].xIsoLevNIonRyd-
iso_sp[ipISO][nelem].fb[i].xIsoLevNIonRyd)) );
1463 (*tr).EnergyWN() = 1.e8f / (*tr).WLAng();
1465 (*tr).Emis().iRedisFun() =
ipCRDW;
1467 (*(*tr).Hi()).nelem() = nelem + 1;
1468 (*(*tr).Hi()).IonStg() = nelem + 1 - ipISO;
1469 fixit(
"what should the stat weight of the upper level be? For now say 2.");
1470 (*(*tr).Hi()).g() = 2.f;
1473 (*(*tr).Hi()).chConfig() =
"Satellite level (probably duplicate)";
1478 (*tr).Emis().PopOpc() =
1479 (*(*tr).Lo()).Pop();
1481 (*tr).Emis().pump() = 0.;
1493 double ConBoltz, LTE_pop=
SMALLFLOAT+FLT_EPSILON, factor1, ConvLTEPOP;
1511 (*tr).Emis().xObsIntensity() =
1512 (*tr).Emis().xIntensity() =
1514 ERG1CM * (*tr).EnergyWN();
1531 LTE_pop = (*(*tr).Hi()).g() * ConBoltz * ConvLTEPOP;
1534 LTE_pop =
max( LTE_pop, 1e-30f );
1537 (*tr).Emis().Aul() = (
realnum)(dr_rate/LTE_pop);
1538 (*tr).Emis().Aul() =
1547 max( 1e-20f, (*tr).Emis().gf() );
1551 (*(*tr).Hi()).DepartCoef() = 1.;
1553 (*tr).Emis().PopOpc() =
1554 (*(*tr).Lo()).Pop() -
1555 (*(*tr).Hi()).Pop() *
1556 (*(*tr).Lo()).g()/(*(*tr).Hi()).g();
1558 (*tr).Emis().opacity() =
1561 (*(*tr).Lo()).g()));
1564 double lifetime = 1e-10;
1566 (*tr).Emis().dampXvel() = (
realnum)(
1567 (1.f/lifetime)/PI4/(*tr).EnergyWN());
1579 long tot_num_levels;
1586 tot_num_levels = (long)( nmaxResolved * 0.5 *( nmaxResolved + 1 ) ) + numCollapsed;
1590 tot_num_levels = nmaxResolved*nmaxResolved + nmaxResolved + 1 + numCollapsed;
1595 return tot_num_levels;
1603 ASSERT(
iso_sp[ipISO][nelem].n_HighestResolved_max >= 3 );
1608 if(
iso_sp[ipISO][nelem].numLevels_max >
iso_sp[ipISO][nelem].numLevels_malloc )
1610 fprintf(
ioQQQ,
"The number of levels for ipISO %li, nelem %li, has been increased since the initial coreload.\n",
1635 for(
long ipLo=0; ipLo<ipFirstCollapsed; ipLo++ )
1637 long spin =
iso_sp[ipISO][nelem].
st[ipLo].S();
1645 iso_sp[ipISO][nelem].CachedAs[ nHi-iso_sp[ipISO][nelem].n_HighestResolved_max-1 ][ ipLo ][1] };
1648 Auls[0]*spin*(2.f*(
L_(ipLo)+1.f)+1.f);
1655 Auls[1]*spin*(2.f*(
L_(ipLo)-1.f)+1.f);
1659 EffectiveAul /= (2.f*nHi*nHi);
1661 EffectiveAul /= (4.f*nHi*nHi);
1670 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().Aul() > 0. );
1679 DEBUG_ENTRY(
"iso_collapsed_lifetimes_update()" );
1685 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
1694 iso_sp[ipISO][nelem].
st[ipHi].lifetime() = 1./totalAul;
1696 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
1698 if(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN() <= 0. )
1705 totalAul/(PI4*
iso_sp[ipISO][nelem].trans(ipHi,ipLo).EnergyWN()));
1707 ASSERT(
iso_sp[ipISO][nelem].trans(ipHi,ipLo).Emis().dampXvel()> 0.);
1715 STATIC void Prt_AGN_table(
void )
1724 sprintf( &chLevel.front(ipLo) ,
"%li %li%c",
N_(ipLo),
S_(ipLo),
chL[
MIN2(20,
L_(ipLo))] );
1735 double te[NTEMP]={6000.,8000.,10000.,15000.,20000.,25000. };
1736 double telog[NTEMP] ,
1741 for(
long i=0; i < NTEMP; ++i )
1743 telog[i] = log10( te[i] );
1746 for(
long i=0; i < NTEMP; ++i )
1754 for(
long ipLo=
ipHe1s1S; ipLo < ipHi; ++ipLo )
1759 if(
N_(ipHi) ==
N_(ipLo) )
1764 &chLevel.front(ipLo) , &chLevel.front(ipHi) );
1767 for(
long i=0; i < NTEMP; ++i )
1776 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,...)
double pow(double x, int i)
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)