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)