38 double DepartCoefInv ,
51 for( i=0; i <
rfield.nflux; i++ )
61 if(
dense.lgElmtOn[nelem] )
63 for( ion=0; ion<nelem+1; ++ion )
70 factor +=
hmi.H2_total*2.f;
74 long loop_min =
ionbal.ipCompRecoil[nelem][ion]-1;
75 long loop_max =
rfield.nflux;
78 factor *=
ionbal.nCompRecoilElec[nelem-ion];
79 for( i=loop_min; i < loop_max; i++ )
82 opac.opacity_abs[i] +=
opac.OpacStack[i-1+
opac.iopcom]*factor;
100 static double *TotBremsAllIons;
101 static bool lgFirstTime=
true;
102 double BremsThisEner,bfac, sumion[
LIMELM+1];
103 long int ion_lo , ion_hi;
108 TotBremsAllIons = (
double *)
MALLOC((
unsigned long)
rfield.nupper*
sizeof(
double));
115 for(ion=1; ion<=
LIMELM; ++ion )
120 if(
dense.lgElmtOn[nelem] && ion<=nelem+1 )
122 sumion[ion] +=
dense.xIonDense[nelem][ion];
126 sumion[ion] *=
POW2((
double)ion)*bfac;
130 for(
long ipMol = 0; ipMol<
mole_global.num_calc; ipMol++ )
147 while( sumion[ion_lo]==0 && ion_lo<
LIMELM-1 )
150 while( sumion[ion_hi]==0 && ion_hi>0 )
155 for( i=0; i <
rfield.nflux; i++ )
173 for(ion=ion_lo; ion<=ion_hi; ++ion )
175 BremsThisEner += sumion[ion]*
rfield.gff[ion][i];
178 TotBremsAllIons[i] = BremsThisEner;
181 if(
rfield.ContBoltz[i] < 0.995 )
183 TotBremsAllIons[i] *=
opac.OpacStack[i-1+
opac.ipBrems]*
184 (1. -
rfield.ContBoltz[i]);
188 TotBremsAllIons[i] *=
opac.OpacStack[i-1+
opac.ipBrems]*
191 opac.FreeFreeOpacity[i] = TotBremsAllIons[i];
195 opac.opacity_abs[i] +=
opac.FreeFreeOpacity[i];
202 DepartCoefInv = 1./
hmi.hmidep;
216 for( i=
hmi.iphmin-1; i < limit; i++ )
219 factor = 1. -
rfield.ContBoltz[i]*DepartCoefInv;
226 limit =
opac.ih2pnt[1];
229 for( i=
opac.ih2pnt[0]-1; i < limit; i++ )
239 if( (*diatom)->lgEnabled &&
mole_global.lgStancil )
241 for( vector< diss_tran >::iterator tran = (*diatom)->Diss_Trans.begin(); tran != (*diatom)->Diss_Trans.end(); ++tran )
243 long lower_limit =
ipoint(tran->energies[0]);
244 long upper_limit =
ipoint(tran->energies.back());
245 upper_limit =
MIN2( upper_limit,
rfield.nflux-1 );
246 for(i = lower_limit; i <= upper_limit; ++i)
248 opac.opacity_abs[i] += (*diatom)->MolDissocOpacity( *tran,
rfield.anu[i]);
268 for( i=0; i < limit; i++ )
270 opac.opacity_sct[i] += (fac*
opac.OpacStack[i-1+
opac.ipRayScat]);
278 if(
opac.stimax[0] < factor)
279 opac.stimax[0] = factor;
286 if(
opac.stimax[1] < factor)
287 opac.stimax[1] = factor;
296 hydro.lgHLyaMased =
true;
309 low =
h2.ip_photo_opac_thresh;
311 ipop =
h2.ip_photo_opac_offset;
341 if(
dense.lgElmtOn[nelem] )
392 for( nelem=ipISO; nelem <
LIMELM; nelem++ )
395 if(
dense.lgElmtOn[nelem] )
401 for( n=0; n <
iso_sp[ipISO][nelem].numLevels_local; n++ )
403 if(
iso_sp[ipISO][nelem].fb[n].ipIsoLevNIonCon <
rfield.nflux )
409 if(
opac.opacity_abs[
iso_sp[ipISO][nelem].fb[n].ipIsoLevNIonCon-1] > 0. )
413 long int ip =
iso_sp[ipISO][nelem].fb[n].ipIsoLevNIonCon;
417 iso_sp[ipISO][nelem].fb[n].ipOpac );
419 iso_sp[ipISO][nelem].fb[n].ConOpacRatio = 1.-
420 (
iso_sp[ipISO][nelem].st[n].Pop()*t2)/
421 opac.opacity_abs[ip-1];
425 iso_sp[ipISO][nelem].fb[n].ConOpacRatio = 0.;
432 for( n=0; n <
iso_sp[ipISO][nelem].numLevels_local; n++ )
435 if(
iso_sp[ipISO][nelem].fb[n].ipIsoLevNIonCon <
rfield.nflux )
441 if(
opac.opacity_abs[
iso_sp[ipISO][nelem].fb[n].ipIsoLevNIonCon-1] > 0. )
444 if(
iso_sp[ipISO][nelem].fb[n].DepartCoef > 1e-30 && (!
conv.lgSearch ) )
447 fac = 1./
iso_sp[ipISO][nelem].fb[n].DepartCoef;
449 else if(
conv.lgSearch )
467 if(
opac.opacity_abs[
iso_sp[ipISO][nelem].fb[n].ipIsoLevNIonCon-1] > 0. )
470 long int ip =
iso_sp[ipISO][nelem].fb[n].ipIsoLevNIonCon;
475 iso_sp[ipISO][nelem].fb[n].ipOpac );
477 double opacity_this_species =
478 iso_sp[ipISO][nelem].st[n].Pop()*t2*
479 (1. - fac*
rfield.ContBoltz[ip-1]);
481 double opacity_fraction = 1. - opacity_this_species /
opac.opacity_abs[ip-1];
482 if(opacity_fraction < 0)
483 opacity_fraction = 0.;
486 iso_sp[ipISO][nelem].fb[n].ConOpacRatio =
487 iso_sp[ipISO][nelem].fb[n].ConOpacRatio* 0.75 + 0.25*opacity_fraction;
489 if(
iso_sp[ipISO][nelem].fb[n].ConOpacRatio < 0.)
490 iso_sp[ipISO][nelem].fb[n].ConOpacRatio = 0.;
494 iso_sp[ipISO][nelem].fb[n].ConOpacRatio = 0.;
499 iso_sp[ipISO][nelem].fb[n].ConOpacRatio = 0.;
504 iso_sp[ipISO][nelem].fb[n].ConOpacRatio = 0.;
516 for( i=0; i <
rfield.nflux; i++ )
525 for( i=0; i <
rfield.nflux; i++ )
528 opac.opacity_abs[i] +=
opac.OpacStatic[i];
534 for( i=0; i <
rfield.nflux; i++ )
536 opac.albedo[i] =
opac.opacity_sct[i]/
537 (
opac.opacity_sct[i] +
opac.opacity_abs[i]);
546 fprintf(
ioQQQ,
" OpacityAddTotal returns; grd rec eff (opac) for Hn=1,4%10.2e%10.2e%10.2e%10.2e%10.2e%10.2e%10.2e%10.2e%10.2e%10.2e HeI,II:%10.2e%10.2e\n",
563 enum {DEBUG_LOC=
false};
564 if( DEBUG_LOC && (
nzone>=378) )
568 for( i=0; i<
rfield.nflux; ++i )
570 fprintf(
ioQQQ,
"rtotsbugggg\t%li\t%.3e\t%.3e\t%.3e\t%.3e\n",