27 atmdat.CharExcIonTotal[nelem1] = 0.;
28 atmdat.CharExcRecTotal[nelem1] = 0.;
32 for (
long nelem=
ipHYDROGEN; nelem < nelem1; ++nelem)
34 atmdat.CharExcIonTotal[nelem1] +=
atmdat.CharExcIonOf[nelem][nelem1][0]*
dense.xIonDense[nelem][1];
36 atmdat.CharExcRecTotal[nelem1] +=
atmdat.CharExcRecTo[nelem][nelem1][0]*
iso_sp[ipISO][nelem].st[0].Pop();
40 for(
long nelem=nelem1+1; nelem<
LIMELM; ++nelem)
42 for(
long ion=0; ion<=nelem; ++ion )
45 atmdat.CharExcIonTotal[nelem1] +=
atmdat.CharExcRecTo[nelem1][nelem][ion]*
dense.xIonDense[nelem][ion+1];
47 atmdat.CharExcRecTotal[nelem1] +=
atmdat.CharExcIonOf[nelem1][nelem][ion]*
dense.xIonDense[nelem][ion];
75 for( level=
ipH1s; level<
iso_sp[ipISO][nelem].numLevels_local; ++level)
79 double DR_reverse = 0.;
82 long indexIP =
iso_sp[ipISO][nelem].fb[level].ipIsoLevNIonCon-1;
83 double OccNum =
rfield.OccNumbIncidCont[indexIP] +
rfield.OccNumbContEmitOut[indexIP];
84 double OccNumBB = 1./(exp(
iso_sp[ipISO][nelem].fb[level].xIsoLevNIonRyd /
phycon.te_ryd ) - 1. );
85 double RelOccNum =
MIN2( 1., OccNum / OccNumBB );
88 DR_reverse =
iso_sp[ipISO][nelem].fb[level].DielecRecomb * RelOccNum /
89 iso_sp[ipISO][nelem].fb[level].PopLTE;
93 iso_sp[ipISO][nelem].fb[level].RateLevel2Cont =
iso_sp[ipISO][nelem].fb[level].gamnc +
94 iso_sp[ipISO][nelem].fb[level].ColIoniz*
dense.EdenHCorr +
99 iso_sp[ipISO][nelem].fb[level].RateCont2Level = (
105 iso_sp[ipISO][nelem].fb[level].DielecRecomb +
108 iso_sp[ipISO][nelem].fb[level].RecomInducRate*
iso_sp[ipISO][nelem].fb[level].PopLTE +
112 iso_sp[ipISO][nelem].fb[level].ColIoniz*
dense.EdenHCorr*
iso_sp[ipISO][nelem].fb[level].PopLTE
117 ASSERT(
iso_sp[ipISO][nelem].fb[level].DielecRecomb >= 0. );
118 ASSERT(
iso_sp[ipISO][nelem].fb[level].RecomInducRate >= 0. );
120 ASSERT(
iso_sp[ipISO][nelem].fb[level].ColIoniz >= 0. );
121 ASSERT(
iso_sp[ipISO][nelem].fb[level].RateCont2Level >= 0. );
125 iso_sp[ipISO][nelem].fb[level].RateCont2Level *=
126 iso_sp[ipISO][nelem].ex[
iso_sp[ipISO][nelem].numLevels_max ][level].ErrorFactor[
IPRAD];
131 ionbal.RateRecomIso[nelem][ipISO] = 0.;
132 ionbal.RR_rate_coef_used[nelem][nelem-ipISO] = 0.;
135 for( level=0; level<
iso_sp[ipISO][nelem].numLevels_local; ++level)
140 ionbal.RateRecomIso[nelem][ipISO] +=
iso_sp[ipISO][nelem].fb[level].RateCont2Level;
143 ionbal.RR_rate_coef_used[nelem][nelem-ipISO] +=
iso_sp[ipISO][nelem].fb[level].RadRecomb[
ipRecRad]*
147 ASSERT(
ionbal.RR_rate_coef_used[nelem][nelem-ipISO]>= 0. );
151 Recom3Body +=
iso_sp[ipISO][nelem].fb[level].ColIoniz*
dense.EdenHCorr*
iso_sp[ipISO][nelem].fb[level].PopLTE;
157 iso_sp[ipISO][nelem].RecomCollisFrac = Recom3Body*
dense.eden /
ionbal.RateRecomIso[nelem][ipISO];
160 if(
conv.nTotalIoniz==0 )
161 ionbal.RateIoniz[nelem][nelem-ipISO][nelem-ipISO+1] =
iso_sp[ipISO][nelem].fb[0].RateLevel2Cont;
164 if(
ionbal.RateRecomIso[nelem][ipISO] > 0. )
166 iso_sp[ipISO][nelem].xIonSimple =
ionbal.RateIonizTot(nelem,nelem-ipISO)/
ionbal.RateRecomIso[nelem][ipISO];
170 iso_sp[ipISO][nelem].xIonSimple = 0.;
175 fprintf(
ioQQQ,
" iso_ionize_recombine iso=%2ld Z=%2ld Level2Cont[0] %10.2e RateRecomTot %10.2e xIonSimple %10.2e\n",
176 ipISO, nelem,
iso_sp[ipISO][nelem].fb[0].RateLevel2Cont,
ionbal.RateRecomIso[nelem][ipISO],
iso_sp[ipISO][nelem].xIonSimple );