127 {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},
128 {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} };
147 " iso_collide called %s nelem %li - no reeval Boltz fac, LTE dens\n",
153 TeUsed[ipISO][nelem] =
phycon.te;
158 " iso_collide called %s nelem %li - will reeval Boltz fac, LTE dens\n",
174 double ConvLTEPOP = pow(factor,1.5)/(2.*
iso_ctrl.stat_ion[ipISO])/
phycon.te32;
181#define MAX_POP_LTE (MAX_DENSITY/dense.density_low_limit/dense.density_low_limit)
187 sp->
st[ipLo].Boltzmann() =
189 sp->
st[ipLo].ConBoltz() =
201 sp->
fb[ipLo].PopLTE =
202 sp->
st[ipLo].g() / sp->
st[ipLo].ConBoltz() * ConvLTEPOP;
207 sp->
fb[ipLo].PopLTE = 0.;
213 if( sp->
fb[ipLo].PopLTE <= 0. )
231 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
237 if(
N_(ipHi) ==
N_(ipLo) && !
iso_ctrl.lgColl_l_mixing[ipISO] )
244 cs_temp =
HeCSInterp( nelem , ipHi , ipLo, ipCollider );
248 cs_temp *=
iso_ctrl.lgColl_excite[ipISO];
250 if(
opac.lgCaseB_HummerStorey &&
N_(ipHi)==
N_(ipLo)+1 && abs(
L_(ipHi)-
L_(ipLo))==1 )
253 cs_temp *= ( sp->
trans(ipHi,ipLo).Emis().gf() / sp->
st[ipLo].g() ) /
261 double reduced_mass_collider_system =
dense.AtomicWeight[nelem]*
ColliderMass[ipCollider]/
267 double rateCoef = cs_temp *
269 (
phycon.sqrte * (double)sp->
st[ipHi].g() );
271 if( !
opac.lgCaseB_HummerStorey )
278 rateCoef *= (8./3.)*(log(
double(
N_(ipHi)))+2.);
290 rateCoef *= (2./3.)*(log(
double(
N_(ipHi)))+2.);
302 if(
N_(ipHi) <= 5 &&
N_(ipLo) <= 2 )
310 if( (
trace.lgTrace &&
trace.lgIsoTraceFull[ipISO]) && (nelem ==
trace.ipIsoTrace[ipISO]) )
312 fprintf(
ioQQQ,
" iso_collide: %s Z=%li de-excitation rates coefficients\n",
iso_ctrl.chISO[ipISO], nelem + 1 );
314 for(
long ipHi=1; ipHi < upper_limit; ipHi++ )
316 fprintf(
ioQQQ,
" %li\t", ipHi );
317 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
322 fprintf(
ioQQQ,
"\n" );
325 fprintf(
ioQQQ,
" iso_collide: %s Z=%li collisional ionization coefficients\n",
iso_ctrl.chISO[ipISO], nelem + 1 );
326 for(
long ipHi=0; ipHi < upper_limit; ipHi++ )
330 fprintf(
ioQQQ,
"\n" );
332 fprintf(
ioQQQ,
" iso_collide: %s Z=%li continuum boltzmann factor\n",
iso_ctrl.chISO[ipISO], nelem + 1 );
333 for(
long ipHi=0; ipHi < upper_limit; ipHi++ )
337 fprintf(
ioQQQ,
"\n" );
339 fprintf(
ioQQQ,
" iso_collide: %s Z=%li continuum boltzmann factor\n",
iso_ctrl.chISO[ipISO], nelem + 1 );
340 for(
long ipHi=0; ipHi < upper_limit; ipHi++ )
344 fprintf(
ioQQQ,
"\n" );
349 if(
opac.lgCaseB_HummerStorey )
356 sp->
fb[ipLo].ColIoniz = 0.;
361 if(
N_(ipLo)==2 &&
N_(ipHi)==2 )
376 ionbal.CollIonRate_Ground[nelem][nelem-ipISO][0] =
377 sp->
fb[0].ColIoniz*
dense.EdenHCorr;
380 ionbal.CollIonRate_Ground[nelem][nelem-ipISO][1] =
381 ionbal.CollIonRate_Ground[nelem][nelem-ipISO][0]*