53 for( ion=0; ion <=
dense.IonHigh[nelem]-1; ion++ )
55 ionbal.RateRecomTot[nelem][ion] = 0.;
60 if( ((
dense.IonHigh[nelem] >= nelem - ipISO) &&
61 (
dense.IonLow[nelem] <= nelem - ipISO)) )
63 ionbal.RateRecomTot[nelem][nelem-ipISO] =
ionbal.RateRecomIso[nelem][ipISO];
71 Heavy.xLyaHeavy[nelem][nelem] = 0.;
72 Heavy.xLyaHeavy[nelem][nelem-1] = 0.;
75 for( ion=
dense.IonLow[nelem]; ion <= limit; ion++ )
85 ionbal.RateRecomTot[nelem][ion] =
87 ionbal.RR_rate_coef_used[nelem][ion] +
88 ionbal.DR_Badnell_rate_coef[nelem][ion] +
101 if(
save.lgioRecom || lgPrintIt )
108 ioOut =
save.ioRecom;
112 " %s recombination coefficients fnzone:%.2f \tte\t%.4e\tne\t%.4e\n",
117 limit =
dense.IonHigh[nelem];
119 for( i=0; i<limit; ++i )
120 fprintf( ioOut,
"%10ld",i+1);
121 fprintf( ioOut,
"\n");
123 for( i=0; i < limit; i++ )
125 fprintf( ioOut,
"%10.2e",
ionbal.RR_rate_coef_used[nelem][i] );
127 fprintf( ioOut,
" radiative used vs Z\n" );
129 for( i=0; i < limit; i++ )
131 fprintf( ioOut,
"%10.2e",
ionbal.RR_Verner_rate_coef[nelem][i] );
133 fprintf( ioOut,
" old Verner vs Z\n" );
135 for( i=0; i < limit; i++ )
137 fprintf( ioOut,
"%10.2e",
ionbal.RR_Badnell_rate_coef[nelem][i] );
139 fprintf( ioOut,
" new Badnell vs Z\n" );
141 for( i=0; i < limit; i++ )
148 fprintf( ioOut,
" CT/n(H0)\n" );
150 for( i=0; i < limit; i++ )
152 fprintf( ioOut,
"%10.2e",
ionbal.CotaRate[ion] );
154 fprintf( ioOut,
" 3body vs Z /ne\n" );
157 for( i=0; i <
dense.IonHigh[nelem]; i++ )
159 fprintf( ioOut,
"%10.2e",
gv.GrainChTrRate[nelem][i+1][i]/
dense.eden );
161 fprintf( ioOut,
" Grain vs Z /ne\n" );
162 fprintf( ioOut,
" old Nussbaumer Storey DR vs Z\n" );
164 for( i=0; i < limit; i++ )
166 fprintf( ioOut,
"%10.2e",
ionbal.DR_Badnell_rate_coef[nelem][i] );
168 fprintf( ioOut,
" new Badnell DR vs Z\n" );
171 for( i=0; i < limit; i++ )
173 fprintf( ioOut,
"%10.2e",
ionbal.RateRecomTot[nelem][i] );
176 " total rec rate (with density) for %s\n",
178 for( i=0; i < limit; i++ )
180 fprintf( ioOut,
"%10.2e",
ionbal.RateRecomTot[nelem][i]/
dense.eden );
183 " total rec rate / ne for %s\n\n",
187 if(
dense.IonHigh[nelem] > 11 )
190 fprintf( ioOut,
" R " );
191 for( i=11; i < limit; i++ )
193 fprintf( ioOut,
"%10.2e",
dense.eden*
ionbal.CotaRate[ion] );
195 fprintf( ioOut,
"\n" );
197 fprintf( ioOut,
" " );
198 for( i=11; i < limit; i++ )
200 fprintf( ioOut,
"%10.2e",
ionbal.RateRecomTot[nelem][i] );
202 fprintf( ioOut,
"\n\n" );
209 for( i=
dense.IonLow[nelem]; i <= limit; i++ )
222 double te1[
N1LIM]={ 5000., 10000., 20000.};
223 double te2[
N2LIM]={ 20000.,50000.,100000.,1e6};
225 double BreakEnergy = 100./13.0;
226 long int nelem, ion , i;
231 double TempSave =
phycon.te;
233 double EdenSave =
dense.eden;
241 fprintf(io,
"X+i\\Te");
242 for( i=0; i<
N1LIM; ++i )
245 fprintf(io,
"\t%.0f K",
phycon.te);
253 if(
abund.lgAGN[nelem] )
255 for( ion=0; ion<=nelem; ++ion )
259 if(
Heavy.Valence_IP_Ryd[nelem][ion] > BreakEnergy )
263 sprintf(chOutput,
"%s",
266 if( chOutput[1]==
' ' )
267 chOutput[1] = chOutput[2];
271 sprintf(chString,
"0 ");
275 sprintf(chString,
"+ ");
279 sprintf(chString,
"+%li ",ion);
281 strcat( chOutput , chString );
282 fprintf(io,
"%5s",chOutput );
284 for( i=0; i<
N1LIM; ++i )
287 dense.IonLow[nelem] = 0;
288 dense.IonHigh[nelem] = nelem+1;
290 fprintf(
ioQQQ,
"PROBLEM ConvBase returned error.\n");
291 fprintf(io,
"\t%.2e",
ionbal.RateRecomTot[nelem][ion]);
300 fprintf(io,
"X+i\\Te");
301 for( i=0; i<
N2LIM; ++i )
304 fprintf(io,
"\t%.0f K",
phycon.te);
312 if(
abund.lgAGN[nelem] )
314 for( ion=0; ion<=nelem; ++ion )
318 if(
Heavy.Valence_IP_Ryd[nelem][ion] <= BreakEnergy )
335 fprintf(io,
"+%li",ion);
338 for( i=0; i<
N2LIM; ++i )
341 dense.IonLow[nelem] = 0;
342 dense.IonHigh[nelem] = nelem+1;
344 fprintf(
ioQQQ,
"PROBLEM ConvBase returned error.\n");
345 fprintf(io,
"\t%.2e",
ionbal.RateRecomTot[nelem][ion]);