100 for(
long nelem=ipISO; nelem <
LIMELM; nelem++ )
106 EdenAbund =
dense.eden*
dense.xIonDense[nelem][nelem+1-ipISO];
110 if(
dense.IonHigh[nelem] >= nelem+1-ipISO )
117 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
136 const bool lgDoChecks =
false;
148 for( vector<two_photon>::iterator tnu = sp->
TwoNu.begin(); tnu != sp->
TwoNu.end(); ++tnu )
152 for( nu=0; nu < tnu->ipTwoPhoE; nu++ )
155 rfield.TotDiff2Pht[nu] += tnu->local_emis[nu];
158 rfield.ConEmitLocal[
nzone][nu] += tnu->local_emis[nu];
162 rfield.DiffuseEscape[nu] += tnu->local_emis[nu] *
opac.ExpmTau[nu];
164 enum {DEBUG_LOC=
false};
167 fprintf(
ioQQQ,
"Two-photon emission coefficients - ipISO, nelem = %2li, %2li\n", ipISO, nelem );
176 for(
long nelem=
NISO; nelem <
LIMELM; nelem++ )
179 for(
long ion=0; ion < nelem-
NISO+1; ion++ )
181 Heavy.RadRecCon[nelem][ion] = 0.;
186 for(
long ion=
dense.IonLow[nelem]; ion < nelem-
NISO+1; ion++ )
188 if(
dense.xIonDense[nelem][ion+1] > 0. )
190 long int ns, nshell,igRec , igIon,
193 ip =
Heavy.ipHeavy[nelem][ion]-1;
210 gion = (double)igIon;
213 ns =
Heavy.nsShells[nelem][ion]-1;
214 ASSERT( ns == (nshell-1) );
217 iplow =
opac.ipElement[nelem][ion][ns][0]-1;
218 iphi =
opac.ipElement[nelem][ion][ns][1];
220 ipop =
opac.ipElement[nelem][ion][ns][2];
225 EdenAbund =
dense.eden*
dense.xIonDense[nelem][ion+1];
231 for( nu=iplow; nu < iphi; ++nu )
233 photon = gamma*
rfield.ContBoltz[nu]/
rfield.ContBoltz[iplow]*
254 ipla =
Heavy.ipLyHeavy[nelem][ion]-1;
257 difflya =
Heavy.xLyaHeavy[nelem][ion]*
dense.xIonDense[nelem][ion+1];
264 ipla =
Heavy.ipBalHeavy[nelem][ion]-1;
267 difflya =
Heavy.xLyaHeavy[nelem][ion]*
dense.xIonDense[nelem][ion+1];
275 for( nu=0; nu < limit; nu++ )
277 double TotBremsAllIons = 0., BremsThisIon;
290 for(
long ion=
MAX2(1,
dense.IonLow[nelem]); ion<=
dense.IonHigh[nelem]; ++ion )
294 TotBremsAllIons += BremsThisIon;
299 for(
long ipMol = 0; ipMol<
mole_global.num_calc; ipMol++ )
308 BremsThisIon =
POW2( (
double)ion )*
mole.species[ipMol].den*
rfield.gff[ion][nu];
309 TotBremsAllIons += BremsThisIon;
317 ASSERT( TotBremsAllIons >= 0.);
344 if(
gv.lgDustOn() &&
gv.lgGrainPhysicsOn )
350 for( nu=0; nu <
rfield.nflux; nu++ )
353 rfield.DiffuseEscape[nu] +=
gv.GrainEmission[nu];
365 if(
rfield.ContBoltz[
hmi.iphmin-1] > 0. )
367 for( nu=
hmi.iphmin-1; nu < limit; nu++ )
380 for( nu=
hmi.iphmin-1; nu < limit; nu++ )
388 factor = gamma*exp(-arg)*
rfield.widflx[nu]*
397 for(
long i=1; i <=
nLevel1; i++ )
402 for(
long nelem = ipISO; nelem <
LIMELM; nelem++ )
406 for(
long i=0; i<
iso_sp[ipISO][nelem].numLevels_local; i++ )
409 (*tr).Emis().phots() =
412 ((*tr).Emis().Pesc()+
413 (*tr).Emis().Pelec_esc());
415 (*tr).outline_resonance();
429 enum {DEBUG_LOC=
false};
430 if( DEBUG_LOC && i==4821 )
433 fprintf(
ioQQQ,
"DEBUG dump lev2 line %li\n", i );
435 fprintf(
ioQQQ,
"DEBUG dump %.3e %.3e %.3e\n",
450 HFLines[i].outline_resonance();
454 for(
long ipSpecies=0; ipSpecies<
nSpecies; ipSpecies++ )
461 int ipHi = (*tr).ipHi();
462 if (ipHi >=
dBaseSpecies[ipSpecies].numLevels_local || (*tr).ipCont() <= 0)
464 (*tr).outline_resonance();
471 (*diatom)->H2_RT_diffuse();
479 fprintf(
ioQQQ,
" RT_diffuse returns.\n" );
482 for( nu=0; nu <
rfield.ipPlasma-1; nu++ )
484 rfield.flux_beam_const[nu] = 0.;
485 rfield.flux_beam_time[nu] = 0.;
486 rfield.flux_isotropic[nu] = 0.;
491 rfield.outlin[0][nu] = 0.;
492 rfield.outlin_noplot[nu] = 0.;
493 rfield.reflin[0][nu] = 0.;
494 rfield.TotDiff2Pht[nu] = 0.;
495 rfield.ConInterOut[nu] = 0.;
499 for( nu=0; nu <
rfield.nflux; nu++ )
503 rfield.OccNumbDiffCont[nu] =
511 opac.opacity_abs[nu] );
529 if(
rfield.lgKillOutLine )
531 for( nu=0; nu <
rfield.nflux; nu++ )
533 rfield.outlin[0][nu] = 0.;
534 rfield.outlin_noplot[nu] = 0.;
539 if(
rfield.lgKillOutCont )
541 for( nu=0; nu <
rfield.nflux; nu++ )
543 rfield.ConInterOut[nu] = 0.;
555 {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},
556 {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} };
558 if( !lgUpdateContinuum &&
fp_equal(
phycon.te, TeUsed[ipISO][nelem] ) &&
conv.nTotalIoniz )
565 double SumCaseB = 0.;
568 double EdenAbund =
dense.eden*
dense.xIonDense[nelem][nelem+1-ipISO];
572 if(
dense.IonHigh[nelem] >= nelem+1-ipISO )
582 double Sum1level = 0.;
583 sp->
fb[n].RadRecCon = 0.;
584 sp->
fb[n].RadRecCoolCoef = 0.;
592 for(
long nu=sp->
fb[n].ipIsoLevNIonCon-1; nu < ipHi; nu++ )
600 double arg = (
rfield.anu[nu]-sp->
fb[n].xIsoLevNIonRyd+
609 double photon = gamma*exp(-arg)*
rfield.widflx[nu]*
610 opac.OpacStack[ nu-sp->
fb[n].ipIsoLevNIonCon + sp->
fb[n].ipOpac ] *
618 if( lgUpdateContinuum )
625 rfield.DiffuseEscape[nu] +=
630 sp->
fb[n].RadRecCon +=
rfield.anu[nu] *
635 double energyAboveThresh =
rfield.anu[nu] - sp->
fb[n].xIsoLevNIonRyd;
636 energyAboveThresh =
MAX2( 0., energyAboveThresh );
637 sp->
fb[n].RadRecCoolCoef += energyAboveThresh * photon *
648 SumCaseB += Sum1level;
655 sp->
fb[n].RadRecCon = 0.;
656 sp->
fb[n].RadRecCoolCoef = 0.;
664 TeUsed[ipISO][nelem] =
phycon.te;