105 g010 = (*t10.
Lo()).g();
106 g110 = (*t10.
Hi()).g();
108 g121 = (*t21.
Lo()).g();
109 g221 = (*t21.
Hi()).g();
111 g020 = (*t20.
Lo()).g();
112 g220 = (*t20.
Hi()).g();
129 fprintf(
ioQQQ,
" PROBLEM atom_level3: insane stat weights g0 :%10.2e%10.2e %10.10s\n",
130 g010, g020, chLab10 );
148 fprintf(
ioQQQ,
" PROBLEM atom_level3: insane stat weights g1 :%10.2e%10.2e %10.10s\n",
166 fprintf(
ioQQQ,
" PROBLEM atom_level3: insane stat weights g2 :%10.2e%10.2e %10.10s\n",
167 g010, g020, chLab10 );
177 AbunxIon =
dense.xIonDense[ (*t10.
Hi()).nelem() -1][(*t10.
Hi()).IonStg()-1];
184 AbunxIon =
dense.xIonDense[(*t21.
Hi()).nelem() -1][(*t21.
Hi()).IonStg()-1];
192 fprintf(
ioQQQ,
" PROBLEM atom_level3: insanity at g010 g121 branch \n" );
228 if( AbunxIon <= 1e-30 || c > 60. )
233 atoms.PopLevels[0] = AbunxIon;
234 atoms.PopLevels[1] = 0.;
235 atoms.PopLevels[2] = 0.;
238 atoms.DepLTELevels[0] = 1.;
239 atoms.DepLTELevels[1] = 0.;
240 atoms.DepLTELevels[2] = 0.;
246 (*t21.
Lo()).Pop() = 0.;
247 (*t10.
Lo()).Pop() = AbunxIon;
248 (*t20.
Lo()).Pop() = AbunxIon;
249 (*t21.
Hi()).Pop() = 0.;
250 (*t10.
Hi()).Pop() = 0.;
251 (*t20.
Hi()).Pop() = 0.;
308 ASSERT( ((*t10.
Hi()).IonStg()*(*t21.
Hi()).IonStg() == 0) || ((*t10.
Hi()).IonStg() == (*t21.
Hi()).IonStg()));
310 ASSERT( ((*t20.
Hi()).IonStg()*(*t21.
Hi()).IonStg() == 0) || ((*t20.
Hi()).IonStg() == (*t21.
Hi()).IonStg() ) );
312 ASSERT( ((*t10.
Hi()).nelem() * (*t21.
Hi()).nelem() == 0) || ((*t10.
Hi()).nelem() == (*t21.
Hi()).nelem()) );
314 ASSERT( ((*t20.
Hi()).nelem() * (*t21.
Hi()).nelem() == 0) || ((*t20.
Hi()).nelem() == (*t21.
Hi()).nelem()) );
316 ASSERT( o10 > 0. && o21 > 0. && o20 > 0. );
331 ener10 = ener20 - ener21;
334 bolt01 = bolt02/bolt12;
337 temp01 = temp02 - temp12;
340 else if( t21.
Emis().
Aul() == 0. )
344 ener21 = ener20 - ener10;
347 bolt12 = bolt02/bolt01;
350 temp12 = temp02 - temp01;
353 else if( t20.
Emis().
Aul() == 0. )
357 ener20 = ener21 + ener10;
360 bolt02 = bolt01*bolt12;
363 temp02 = temp01 + temp12;
374 bolt02 = bolt01*bolt12;
381 ASSERT( ener10 > 0. && ener20 > 0. && ener21 > 0. );
384 ASSERT( ener10 < ener20 && ener21 < ener20 );
387 ASSERT( fabs((ener10+ener21)/ener20-1.) < 1e-4 );
390 pump10 = pump01*g0/g1;
392 pump21 = pump12*g1/g2;
394 pump20 = pump02*g0/g2;
397 c01 = o10*bolt01*
dense.cdsqte/g0;
399 c10 = o10*
dense.cdsqte/g1;
400 r10 = c10 + a10 + pump10;
401 c20 = o20*
dense.cdsqte/g2;
402 r20 = c20 + a20 + pump20;
403 c02 = o20*bolt02*
dense.cdsqte/g0;
405 c12 = o21*bolt12*
dense.cdsqte/g1;
407 c21 = o21*
dense.cdsqte/g2;
408 r21 = c21 + a21 + pump21;
410 alpha1 = (double)(AbunxIon)*(r01+r02)/(r10+r01+r02);
411 alpha2 = (double)(AbunxIon)*(r01)/(r10+r12+r01);
412 alpha = alpha1 - alpha2;
416 beta = (r21 - r01)/(r10 + r12 + r01) + (r20 + r01 + r02)/(r10 +
419 if( alpha/
MAX2(alpha1,alpha2) < 1e-11 )
431 atoms.PopLevels[2] = p2;
433 if( alpha < 0. || beta < 0. )
435 fprintf(
ioQQQ,
" atom_level3: insane n2 pop alf, bet, p2=%10.2e%10.2e%10.2e %10.10s t=%10.2e\n",
436 alpha, beta, p2, chLab,
phycon.te );
437 fprintf(
ioQQQ,
" gs are%5.1f%5.1f%5.1f\n", g0, g1,
439 fprintf(
ioQQQ,
" Bolts are%10.2e%10.2e%10.2e\n",
440 bolt01, bolt12, bolt02 );
441 fprintf(
ioQQQ,
" As are%10.2e%10.2e%10.2e\n", a10,
443 fprintf(
ioQQQ,
" Energies are%10.2e%10.2e%10.2e\n",
444 ener10, ener21, ener20 );
445 fprintf(
ioQQQ,
" 2 terms, dif of alpha are%15.6e%15.6e\n",
446 (r01 + r02)/(r10 + r01 + r02), r01/(r10 + r12 + r01) );
451 alpha = (double)(AbunxIon)*(r01+r02) - (
double)(p2)*(r20+r01+r02);
455 if( fabs(alpha)/(
MAX2(AbunxIon*(r01+r02),p2*(r20+r01+r02))) < 1e-9 )
461 beta = r10 + r01 + r02;
463 atoms.PopLevels[1] = p1;
471 atoms.PopLevels[1] = p1;
478 fprintf(
ioQQQ,
" atom_level3: insane n1 pop alf, bet, p1=%10.2e%10.2e%10.2e %10.10s%5f\n",
479 alpha, beta, p1, chLab, t10.
WLAng() );
480 fprintf(
ioQQQ,
" local electron density and temperature were%10.2e%10.2e\n",
487 p0 = AbunxIon - p2 - p1;
490 atoms.PopLevels[0] = p0;
493 fprintf(
ioQQQ,
" atom_level3: insane n0 pop p1, 2, abun=%10.2e%10.2e%10.2e \n",
500 (*t21.
Lo()).Pop() = p1;
501 (*t10.
Lo()).Pop() = p0;
502 (*t20.
Lo()).Pop() = p0;
506 (*t21.
Hi()).Pop() = p2;
507 (*t10.
Hi()).Pop() = p1;
508 (*t20.
Hi()).Pop() = p2;
568 heat20 = p2*c20*ener20;
569 cool02 = p0*c02*ener20;
570 heat21 = p2*c21*ener21;
571 cool12 = p1*c12*ener21;
572 heat10 = p1*c10*ener10;
573 cool01 = p0*c01*ener10;
584 hnet02 = heat20 *(1. - t20.
Emis().ColOvTot());
586 hnet12 = heat21 *(1. - t21.
Emis().ColOvTot());
588 hnet01 = heat10 *(1. - t10.
Emis().ColOvTot());
607 if( fabs(cnet01/
MAX2(DBL_MIN,cool01)) < 1e-10 )
618 TotCool = cnet02 + cnet12 + cnet01;
619 TotHeat = hnet02 + hnet12 + hnet01;
671 enum{DEBUG_LOC=
false};
674 fprintf(
ioQQQ,
"atom_level3 nLev3Fail %i\n",