80 long int *ipSortLines;
81 double *xLog_line_lumin;
161 fprintf(
ioQQQ,
"\f\n");
162 fprintf(
ioQQQ,
"%23c",
' ' );
164 int repeat = (72-len)/2;
165 for( i=0; i < repeat; ++i )
166 fprintf(
ioQQQ,
"*" );
168 for( i=0; i < 72-repeat-len; ++i )
169 fprintf(
ioQQQ,
"*" );
170 fprintf(
ioQQQ,
"\n" );
172 for( i=0; i <=
input.nSave; i++ )
181 strcpy( chCard ,
input.chCardSav[i] );
186 if( (strcmp(chCKey,
"CONT")!= 0) && !
nMatch(
"HIDE" , chCard) )
187 fprintf(
ioQQQ,
"%23c* %-80s*\n",
' ',
input.chCardSav[i] );
201 " *********************************> Log(U):%6.2f <*********************************\n",
207 "\n This is a beta test version of the code, and is intended for testing only.\n\n" );
212 fprintf(
ioQQQ,
" \n" );
213 fprintf(
ioQQQ,
" >>>>>>>>>> Warning!\n" );
214 fprintf(
ioQQQ,
" >>>>>>>>>> Warning!\n" );
215 fprintf(
ioQQQ,
" >>>>>>>>>> Warning! Warnings exist, this calculation has serious problems.\n" );
216 fprintf(
ioQQQ,
" >>>>>>>>>> Warning!\n" );
217 fprintf(
ioQQQ,
" >>>>>>>>>> Warning!\n" );
218 fprintf(
ioQQQ,
" \n" );
223 " >>>>>>>>>> Cautions are present.\n" );
229 " >>>>>>>>>> The calculation stopped for unintended reasons.\n" );
235 " >>>>>>>>>> Another iteration is needed.\n" );
241 strcpy( chGeo,
"Closed" );
245 strcpy( chGeo,
" Open" );
249 if( strcmp(
dense.chDenseLaw,
"CPRE") == 0 )
251 strcpy( chPlaw,
" Constant Pressure " );
254 else if( strcmp(
dense.chDenseLaw,
"CDEN") == 0 )
256 strcpy( chPlaw,
" Constant Density " );
259 else if( (strcmp(
dense.chDenseLaw,
"POWD") == 0 || strcmp(
dense.chDenseLaw
260 ,
"POWR") == 0) || strcmp(
dense.chDenseLaw,
"POWC") == 0 )
262 strcpy( chPlaw,
" Power Law Density " );
265 else if( strcmp(
dense.chDenseLaw,
"SINE") == 0 )
267 strcpy( chPlaw,
" Rapid Fluctuations " );
270 else if( strncmp(
dense.chDenseLaw ,
"DLW" , 3) == 0 )
272 strcpy( chPlaw,
" Special Density Lw " );
275 else if( strcmp(
dense.chDenseLaw,
"HYDR") == 0 )
277 strcpy( chPlaw,
" Hydrostatic Equlib " );
280 else if( strcmp(
dense.chDenseLaw,
"WIND") == 0 )
282 strcpy( chPlaw,
" Radia Driven Wind " );
285 else if( strcmp(
dense.chDenseLaw,
"DYNA") == 0 )
287 strcpy( chPlaw,
" Dynamical Flow " );
290 else if( strcmp(
dense.chDenseLaw,
"GLOB") == 0 )
292 strcpy( chPlaw,
" Globule " );
297 strcpy( chPlaw,
" UNRECOGNIZED CPRES " );
301 "\n Emission Line Spectrum. %20.20sModel. %6.6s geometry. Iteration %ld of %ld.\n",
305 if(
radius.distance > 0. &&
radius.lgRadiusKnown &&
prt.lgPrintFluxEarth )
311 chUnit =
"/arcsec^2";
315 sprintf( chLine,
"Flux observed at the Earth (erg/s/cm^2%s).", chUnit );
318 else if(
prt.lgSurfaceBrightness )
321 if(
prt.lgSurfaceBrightness_SR )
326 sprintf( chLine,
"Surface brightness (erg/s/cm^2/%s).", chUnit );
329 else if(
radius.lgPredLumin )
334 else if(
geometry.iEmissPower == 1 )
336 else if(
geometry.iEmissPower == 0 )
337 chUnit =
"erg/s/cm^2";
343 sprintf( chCoverage,
"with full coverage" );
345 sprintf( chCoverage,
"with a covering factor of %.1f%%",
geometry.covgeo*100. );
348 sprintf( chLine,
"Luminosity (%s) emitted by a partial cylinder %s.", chUnit, chCoverage );
350 sprintf( chLine,
"Luminosity (%s) emitted by a shell %s.", chUnit, chCoverage );
357 chAper =
"long slit";
358 else if(
geometry.iEmissPower == 0 )
359 chAper =
"pencil beam";
363 sprintf( chLine,
"Observed through a %s with aperture covering factor %.1f%%.",
371 sprintf( chLine,
"Intensity (erg/s/cm^2)." );
375 fprintf(
ioQQQ,
"\n" );
384 static const int NWLH = 21;
386 realnum wlh[NWLH] = {6563.e0f, 4861.e0f, 4340.e0f, 4102.e0f, 1.875e4f, 1.282e4f,
387 1.094e4f, 1.005e4f, 2.625e4f, 2.166e4f, 1.945e4f, 7.458e4f,
388 4.653e4f, 3.740e4f, 4.051e4f, 7.458e4f, 3.296e4f, 1216.e0f,
389 1026.e0f, 972.5e0f, 949.7e0f };
397 if( (strcmp(
LineSv[i].chALab,
"Ca B" )==0) ||
398 (strcmp(
LineSv[i].chALab,
"Ca A" )==0) )
405 for( j=0; j<NWLH; ++j )
409 LineSv[i].SumLine[0] = 0.;
410 LineSv[i].SumLine[1] = 0.;
421 static const int NWLHE = 20;
422 realnum wlhe[NWLHE] = {1640.e0f, 1215.e0f, 1085.e0f, 1025.e0f, 4686.e0f, 3203.e0f,
423 2733.e0f, 2511.e0f, 1.012e4f, 6560.e0f, 5412.e0f, 4860.e0f,
424 1.864e4f, 1.163e4f, 9345.e0f, 8237.e0f, 303.8e0f, 256.3e0f,
428 if( (strcmp(
LineSv[i].chALab,
"Ca B" )==0) ||
429 (strcmp(
LineSv[i].chALab,
"Ca A" )==0) )
436 for( j=0; j<NWLHE; ++j )
440 LineSv[i].SumLine[0] = 0.;
441 LineSv[i].SumLine[1] = 0.;
455 if(
cdLine(
"TOTL",4861.36f,&hbeta,&absint)<=0 )
460 fprintf(
ioQQQ,
" PrtFinal could not find TOTL 4861 with cdLine.\n" );
469 if(
cdLine(
"He 1",5875.61f,&he5876,&absint)<=0 )
475 fprintf(
ioQQQ,
" PrtFinal could not find He 1 5876 with cdLine.\n" );
482 if(
cdLine(
"He 2",4686.01f,&he4686,&absint)<=0 )
489 fprintf(
ioQQQ,
" PrtFinal could not find He 2 4686 with cdLine.\n" );
503 heabun = (he4686*0.078 + he5876*0.739)/hbeta;
521 if(
cdLine(
"O 3",5007.,&o5007,&absint)<=0 )
526 fprintf(
ioQQQ,
" PrtFinal could not find O 3 5007 with cdLine.\n" );
531 if(
cdLine(
"TOTL",4363.,&o4363,&absint)<=0 )
536 fprintf(
ioQQQ,
" PrtFinal could not find TOTL 4363 with cdLine.\n" );
542 if( (o4363 != 0.) && (o5007 != 0.) )
546 bot = o5007 - o4363/
oxy.o3enro;
569 oxy.o3cs12 = 2.2347f;
570 oxy.o3cs13 = 0.29811f;
571 ratio = ratio/1.3333/(
oxy.o3cs13/
oxy.o3cs12);
573 ratio = ratio/
oxy.o3enro/
oxy.o3br32;
586 if(
cdLine(
"Bac ",3646.,&bacobs,&absint)<=0 )
588 fprintf(
ioQQQ,
" PrtFinal could not find Bac 3546 with cdLine.\n" );
628 tel = -4.827969400906710 + x*(33.08493347410885 + x*(-56.08886262205931 +
629 x*(52.44759454803217 + x*(-25.07958990094209 + x*(4.815046760060006)))));
631 if( tel > 1. && tel < 5. )
648 if(
cdLine(
"thin",3646.,&bacthn,&absint)<=0 )
650 fprintf(
ioQQQ,
" PrtFinal could not find thin 3646 with cdLine.\n" );
655 if(
cdLine(
"Ca B",4861.36f,&hbcab,&absint)<=0 )
657 fprintf(
ioQQQ,
" PrtFinal could not find Ca B 4861 with cdLine.\n" );
695 x = 1.e0/log10(bacthn);
696 tel = -4.827969400906710 + x*(33.08493347410885 + x*(-56.08886262205931 +
697 x*(52.44759454803217 + x*(-25.07958990094209 + x*(4.815046760060006)))));
699 if( tel > 1. && tel < 5. )
737 xLog_line_lumin = (
double *)
MALLOC(
sizeof(
double)*(
unsigned long)
LineSave.nsum);
741 lgPrt = (
short int *)
MALLOC(
sizeof(
short int)*(
unsigned long)
LineSave.nsum);
750 chSTyp = (
char *)
MALLOC(
sizeof(
char)*(
unsigned long)
LineSave.nsum );
755 chSLab = ((
char**)
MALLOC((
unsigned long)
LineSave.nsum*
sizeof(
char*)));
760 chSLab[i] = (
char*)
MALLOC(5*
sizeof(
char));
764 ipSortLines = (
long *)
MALLOC(
sizeof(
long)*(
unsigned long)
LineSave.nsum );
774 for( ipEmType=0; ipEmType<nEmType; ++ipEmType )
782 fprintf(
ioQQQ,
"\n\n >>PROBLEM Normalization line has small or zero intensity, its value was %.2e and its intensity was set to 1."
783 "\n >>Please consider using another normalization line (this is set with the NORMALIZE command).\n" , snorm);
784 fprintf(
ioQQQ,
" >>The relative intensities will be meaningless, and many lines may appear too faint.\n" );
794 double scale =
LineSv[i].SumLine[ipEmType]/snorm*
LineSave.ScaleNormLine;
802 if(
LineSv[i].SumLine[ipEmType] > 0. )
804 xLog_line_lumin[i] = log10(
LineSv[i].SumLine[ipEmType]) +
radius.Conv2PrtInten;
808 xLog_line_lumin[i] = -38.;
816 if( (strcmp(
LineSv[i].chALab,
"Unit") == 0) || (strcmp(
LineSv[i].chALab,
"UntD") == 0) )
818 else if( strcmp(
LineSv[i].chALab,
"Coll") == 0 && !
prt.lgPrnColl )
820 else if( strcmp(
LineSv[i].chALab,
"Pump") == 0 && !
prt.lgPrnPump )
822 else if( strncmp(
LineSv[i].chALab,
"Inw",3) == 0 && !
prt.lgPrnInwd )
824 else if( strcmp(
LineSv[i].chALab,
"Heat") == 0 && !
prt.lgPrnHeat )
834 for(i=0; i< 32; i++ )
836 ipNegIntensity[i] = LONG_MAX;
845 const char chIntensityType[4][100]=
846 {
" Intrinsic" ,
" Emergent" ,
"Cumulative intrinsic" ,
"Cumulative emergent" };
847 ASSERT( ipEmType==0 || ipEmType==1 || ipEmType==2 || ipEmType==3 );
850 fprintf(
ioQQQ,
"\n" );
851 if(
prt.lgPrtLineArray )
852 fprintf(
ioQQQ,
" " );
853 fprintf(
ioQQQ,
"%s" , chIntensityType[ipEmType] );
854 fprintf(
ioQQQ,
" line intensities\n" );
858 fprintf(
ioQQQ,
" Caution: emergent intensities are not reliable on the "
859 "first iteration.\n");
869 if( scaled[i] >=
prt.TooFaint && lgPrt[i] )
872 if( ipEmType==1 &&
LineSv[i].chSumTyp!=
't' )
874 if(
prt.lgPrtLineLog )
876 xLog_line_lumin[iprnt] = log10(
LineSv[i].SumLine[ipEmType]) +
radius.Conv2PrtInten;
880 xLog_line_lumin[iprnt] =
LineSv[i].SumLine[ipEmType] * pow(10.,
radius.Conv2PrtInten);
882 sclsav[iprnt] = scaled[i];
883 chSTyp[iprnt] =
LineSv[i].chSumTyp;
887 strcpy( chSLab[iprnt],
LineSv[i].chALab );
891 else if( -scaled[i] >
prt.TooFaint && lgPrt[i] )
894 ipNegIntensity[nNegIntenLines] = i;
895 nNegIntenLines =
MIN2(32,nNegIntenLines+1);
899 else if( strcmp(
LineSv[i].chALab,
"####" ) == 0 &&!
prt.lgSortLines )
901 strcpy( chSLab[iprnt],
LineSv[i].chALab );
902 xLog_line_lumin[iprnt] = 0.;
904 chSTyp[iprnt] =
LineSv[i].chSumTyp;
917 if( strcmp(
LineSv[i].chALab,
"####" ) == 0 )
919 strcpy( chSLab[i],
LineSv[i].chALab );
920 xLog_line_lumin[i] = 0.;
922 chSTyp[i] =
LineSv[i].chSumTyp;
927 sclsav[i] = scaled[i];
928 chSTyp[i] =
LineSv[i].chSumTyp;
929 strcpy( chSLab[i],
LineSv[i].chALab );
934 ipNegIntensity[nNegIntenLines] = i;
935 nNegIntenLines =
MIN2(32,nNegIntenLines+1);
945 if(
prt.lgSortLines && iprnt > 1 )
948 if(
prt.lgSortLineWavelength )
951 if(
prt.wlSort1 >-0.1 )
955 for( i=0; i<iprnt; ++i )
961 sclsav[j] = sclsav[i];
962 chSTyp[j] = chSTyp[i];
963 strcpy( chSLab[j], chSLab[i] );
967 xLog_line_lumin[j] = xLog_line_lumin[i];
985 else if(
prt.lgSortLineIntensity )
1007 for( i=0; i<iprnt; ++i )
1017 if(
prt.lgPrtLineArray )
1022 nline = (iprnt + 2)/3;
1028 nline = (iprnt + 3)/4;
1039 fprintf(
ioQQQ,
"\n === No lines above selection threshold to print ===\n");
1042 for( i=0; i < nline; i++ )
1044 fprintf(
ioQQQ,
" " );
1048 for( j=i; j<iprnt; j = j + nline)
1051 long ipLin = ipSortLines[j];
1054 if( strcmp( chSLab[ipLin],
"####" ) == 0 )
1064 fprintf(
ioQQQ,
"%4.4s ",chSLab[ipLin] );
1071 if(
prt.lgPrtLineLog )
1073 fprintf(
ioQQQ,
" %7.3f", xLog_line_lumin[ipLin] );
1078 fprintf(
ioQQQ,
" %.2e ", xLog_line_lumin[ipLin] );
1084 if( sclsav[ipLin] < 9999.5 )
1086 fprintf(
ioQQQ,
"%9.4f",sclsav[ipLin] );
1088 else if( sclsav[ipLin] < 99999.5 )
1090 fprintf(
ioQQQ,
"%9.3f",sclsav[ipLin] );
1092 else if( sclsav[ipLin] < 999999.5 )
1094 fprintf(
ioQQQ,
"%9.2f",sclsav[ipLin] );
1096 else if( sclsav[ipLin] < 9999999.5 )
1098 fprintf(
ioQQQ,
"%9.1f",sclsav[ipLin] );
1102 fprintf(
ioQQQ,
"*********" );
1106 fprintf(
ioQQQ,
" " );
1110 fprintf(
ioQQQ,
" \n" );
1113 if( nNegIntenLines > 0 )
1115 fprintf(
ioQQQ,
" Lines with negative intensities - Linear intensities relative to normalize line.\n" );
1116 fprintf(
ioQQQ,
" " );
1118 for( i=0; i < nNegIntenLines; ++i )
1120 fprintf(
ioQQQ,
"%ld %s %.0f %.1e, ",
1122 LineSv[ipNegIntensity[i]].chALab,
1124 scaled[ipNegIntensity[i]] );
1126 fprintf(
ioQQQ,
"\n" );
1135 if( (a >= 0.05) &&
LineSv[i].chSumTyp ==
'c' )
1137 ipNegIntensity[j] = i;
1143 fprintf(
ioQQQ,
"\n\n\n %s\n",
input.chTitle );
1146 fprintf(
ioQQQ,
" Cooling: " );
1147 for( i=0; i < j; i++ )
1149 fprintf(
ioQQQ,
" %4.4s ",
1150 LineSv[ipNegIntensity[i]].chALab);
1154 fprintf(
ioQQQ,
":%5.3f",
1157 fprintf(
ioQQQ,
" \n" );
1165 if( (a >= 0.05) &&
LineSv[i].chSumTyp ==
'h' )
1167 ipNegIntensity[j] = i;
1175 fprintf(
ioQQQ,
" Heating: " );
1176 for( i=0; i < j; i++ )
1178 fprintf(
ioQQQ,
" %4.4s ",
1179 LineSv[ipNegIntensity[i]].chALab);
1183 fprintf(
ioQQQ,
":%5.3f",
1186 fprintf(
ioQQQ,
" \n" );
1190 if( !
prt.lgPrtCitations )
1192 fprintf(
ioQQQ,
"\n" );
1211 qlow = log10(qlow) +
radius.Conv2PrtInten;
1212 plow = log10(plow) +
radius.Conv2PrtInten;
1235 qion = log10(qion) +
radius.Conv2PrtInten;
1236 pion = log10(pion) +
radius.Conv2PrtInten;
1278 uhel = log10(
rfield.uheii);
1286 "\n IONIZE PARMET: U(1-)%8.4f U(4-):%8.4f U(sp):%6.2f "
1287 "Q(ion): %7.3f L(ion)%7.3f Q(low):%7.3f L(low)%7.3f\n",
1288 uhl, uhel, usp, qion, pion, qlow, plow );
1310 if(
thermal.FreeFreeTotHeat > 0. )
1323 reclin = log10(reclin) +
radius.Conv2PrtInten;
1331 " ENERGY BUDGET: Heat:%8.3f Coolg:%8.3f Error:%5.1f%% Rec Lin:%8.3f F-F H%7.3f P(rad/tot)max ",
1338 fprintf(
ioQQQ,
"\n");
1342 coleff =
opac.TauAbsGeo[0][
rt.ipxry-1] -
rt.tauxry;
1351 fprintf(
ioQQQ,
"\n Col(Heff): ");
1353 fprintf(
ioQQQ,
" snd travl time ");
1355 fprintf(
ioQQQ,
" sec Te-low: ");
1357 fprintf(
ioQQQ,
" Te-hi: ");
1362 fprintf(
ioQQQ,
" G0TH85: ");
1366 fprintf(
ioQQQ,
" G0DB96:");
1369 fprintf(
ioQQQ,
"\n");
1371 fprintf(
ioQQQ,
" Emiss Measure n(e)n(p) dl ");
1373 fprintf(
ioQQQ,
" n(e)n(He+)dl ");
1375 fprintf(
ioQQQ,
" En(e)n(He++) dl ");
1377 fprintf(
ioQQQ,
" ne nC+:");
1379 fprintf(
ioQQQ,
"\n");
1382 if(
rfield.EnergyBremsThin > 0. )
1392 fprintf(
ioQQQ,
" He/Ha:");
1396 fprintf(
ioQQQ,
" =%7.2f*true Lthin:",hescal);
1412 znit = (double)(
conv.nTotalIoniz-
conv.nTotalIoniz_start)/(double)(
nzone);
1419 fprintf(
ioQQQ,
" itr/zn:%5.2f",znit);
1422 fprintf(
ioQQQ,
" H2 itr/zn:%6.2f",
h2.H2_itrzn());
1425 fprintf(
ioQQQ,
" File Opacity: F" );
1434 xmass =
dense.xMassTotal * pow(10., (
double)
radius.pirsq ) ;
1438 chUnit =
"(gm/cm^2)";
1439 xmass =
dense.xMassTotal;
1441 fprintf(
ioQQQ,
" MassTot %.2e %s", xmass, chUnit );
1442 fprintf(
ioQQQ,
"\n");
1447 if(
cdTemp(
"opti",0,&THI,
"volume" ) )
1449 fprintf(
ioQQQ,
"\n>>>>>>>>>>>>>>>>> PrtFinal, impossible problem getting 21cm opt.\n");
1452 fprintf(
ioQQQ,
" Temps(21 cm) T(21cm/Ly a) ");
1459 if(
cdTemp(
"21cm",0,&THI,
"radius" ) )
1461 fprintf(
ioQQQ,
"\n>>>>>>>>>>>>>>>>> PrtFinal, impossible problem getting 21cm temp.\n");
1464 fprintf(
ioQQQ,
" T(<nH/Tkin>) ");
1469 if(
cdTemp(
"spin",0,&THI,
"radius" ) )
1471 fprintf(
ioQQQ,
"\n>>>>>>>>>>>>>>>>> PrtFinal, impossible problem getting 21cm spin.\n");
1474 fprintf(
ioQQQ,
" T(<nH/Tspin>) ");
1479 fprintf(
ioQQQ,
" TB21cm:");
1481 fprintf(
ioQQQ,
"\n");
1483 fprintf(
ioQQQ,
" N(H0/Tspin) ");
1485 fprintf(
ioQQQ,
" N(OH/Tkin) ");
1490 fprintf(
ioQQQ,
" B(21cm) ");
1494 fprintf(
ioQQQ,
"\n");
1497 rate =
timesc.TimeErode*2e-26;
1508 if(
wind.acldr > 0. )
1514 wind.AccelAver = 0.;
1525 fprintf(
ioQQQ,
" <a>:");
1527 fprintf(
ioQQQ,
" erdeFe");
1529 fprintf(
ioQQQ,
" Tcompt");
1531 fprintf(
ioQQQ,
" Tthr");
1533 fprintf(
ioQQQ,
" <Tden>: ");
1535 fprintf(
ioQQQ,
" <dens>:");
1537 fprintf(
ioQQQ,
" <MolWgt>");
1539 fprintf(
ioQQQ,
"\n");
1544 rjeans = 7.79637 + (log10(tmean) - log10(
dense.wmole) - log10(
dense.xMassDensity*
1555 rjeans = (double)pow(10.,rjeans);
1557 ajmass = 3.*log10(rjeans/2.) + log10(4.*
PI/3.*
dense.xMassDensity*
1561 ajmass = pow(10.,ajmass);
1578 ajmin = pow(10.,ajmin);
1593 bottom =
rfield.flux[0][ip2500-1]*
1596 top =
rfield.flux[0][ip2kev-1]*
1600 if( bottom > 1e-30 && top > 1e-30 )
1602 ratio = log10(top) - log10(bottom);
1603 if( ratio < 36. && ratio > -36. )
1605 ratio = pow(10.,ratio);
1621 double freq_ratio =
rfield.anu[ip2kev-1]/
rfield.anu[ip2500-1];
1622 alfox = log(ratio)/log(freq_ratio);
1643 fprintf(
ioQQQ,
" Mean Jeans l(cm)");
1645 fprintf(
ioQQQ,
" M(sun)");
1647 fprintf(
ioQQQ,
" smallest: len(cm):");
1649 fprintf(
ioQQQ,
" M(sun):");
1651 fprintf(
ioQQQ,
" a_ox tran:%6.2f\n" , alfox);
1653 fprintf(
ioQQQ,
" Rion:");
1660 fprintf(
ioQQQ,
" Dist:");
1662 fprintf(
ioQQQ,
" Diam:");
1663 if(
radius.distance > 0. )
1667 fprintf(
ioQQQ,
"\n");
1669 if(
prt.lgPrintTime )
1683 " Hatom level%3ld HatomType:%4.4s HInducImp %2c"
1684 " He tot level:%3ld He2 level: %3ld ExecTime%8.1f\n",
1697 " ConvrgError(%%) <eden>%7.3f MaxEden%7.3f <H-C>%7.2f Max(H-C)%8.2f <Press>%8.3f MaxPrs er%7.3f\n",
1699 conv.BigEdenError*100. ,
1701 conv.BigHeatCoolError*100. ,
1703 conv.BigPressError*100. );
1706 " Continuity(%%) chng Te%6.1f elec den%6.1f n(H2)%7.1f n(CO) %7.1f\n",
1713 fprintf(
ioQQQ,
"\n Averaged Quantities\n" );
1714 fprintf(
ioQQQ,
" Te Te(Ne) Te(NeNp) Te(NeHe+)Te(NeHe2+) Te(NeO+) Te(NeO2+)"
1715 " Te(H2) N(H) Ne(O2+) Ne(Np)\n" );
1716 static const char* weight[3] = {
"Radius",
"Area",
"Volume" };
1717 int dmax =
geometry.lgGeoPP ? 1 : 3;
1718 for(
int dim=0; dim < dmax; ++dim )
1720 fprintf(
ioQQQ,
" %6s:", weight[dim] );
1738 fprintf(
ioQQQ,
"\n" );
1745 fprintf(
ioQQQ,
" \n" );
1748 fprintf(
ioQQQ,
" Peimbert T(OIIIr)");
1752 fprintf(
ioQQQ,
" T(Bac)");
1756 fprintf(
ioQQQ,
" T(Hth)");
1760 fprintf(
ioQQQ,
" t2(Hstrc)");
1764 fprintf(
ioQQQ,
" T(O3-BAC)");
1768 fprintf(
ioQQQ,
" t2(O3-BC)");
1772 fprintf(
ioQQQ,
" t2(O3str)");
1775 fprintf(
ioQQQ,
"\n");
1779 fprintf(
ioQQQ,
" Be careful: grains exist. This spectrum was not corrected for reddening before analysis.\n" );
1785 if(
gv.lgDustOn() &&
gv.lgGrainPhysicsOn )
1789 double total_dust2gas = 0.;
1791 fprintf(
ioQQQ,
"\n Average Grain Properties (over radius):\n" );
1793 for(
size_t i0=0; i0 <
gv.bin.size(); i0 += 10 )
1796 fprintf(
ioQQQ,
"\n" );
1799 size_t i1 =
min(i0+10,
gv.bin.size());
1801 fprintf(
ioQQQ,
" " );
1802 for(
size_t nd=i0; nd < i1; nd++ )
1804 chQHeat = (char)(
gv.bin[nd]->lgEverQHeat ?
'*' :
' ');
1805 fprintf(
ioQQQ,
"%-12.12s%c",
gv.bin[nd]->chDstLab, chQHeat );
1807 fprintf(
ioQQQ,
"\n" );
1809 fprintf(
ioQQQ,
" nd:" );
1810 for(
size_t nd=i0; nd < i1; nd++ )
1812 if( nd != i0 ) fprintf(
ioQQQ,
" " );
1813 fprintf(
ioQQQ,
"%7ld ", (
unsigned long)nd );
1815 fprintf(
ioQQQ,
"\n" );
1817 fprintf(
ioQQQ,
" <Tgr>:" );
1818 for(
size_t nd=i0; nd < i1; nd++ )
1820 if( nd != i0 ) fprintf(
ioQQQ,
" " );
1823 fprintf(
ioQQQ,
"\n" );
1825 fprintf(
ioQQQ,
" <Vel>:" );
1826 for(
size_t nd=i0; nd < i1; nd++ )
1828 if( nd != i0 ) fprintf(
ioQQQ,
" " );
1831 fprintf(
ioQQQ,
"\n" );
1833 fprintf(
ioQQQ,
" <Pot>:" );
1834 for(
size_t nd=i0; nd < i1; nd++ )
1836 if( nd != i0 ) fprintf(
ioQQQ,
" " );
1839 fprintf(
ioQQQ,
"\n" );
1841 fprintf(
ioQQQ,
" <D/G>:" );
1842 for(
size_t nd=i0; nd < i1; nd++ )
1844 if( nd != i0 ) fprintf(
ioQQQ,
" " );
1847 total_dust2gas +=
gv.bin[nd]->avDGRatio/
radius.depth_x_fillfac;
1849 fprintf(
ioQQQ,
"\n" );
1852 fprintf(
ioQQQ,
" Dust to gas ratio (by mass):");
1862 fprintf(
ioQQQ,
", A(V)/N(H)(pnt):%.3e, (ext):%.3e",
1867 fprintf(
ioQQQ,
", R:");
1872 fprintf(
ioQQQ,
"%.3e", AV/(AB-AV) );
1876 fprintf(
ioQQQ,
"%.3e", 0. );
1878 fprintf(
ioQQQ,
" AV(ext):%.3e (pnt):%.3e\n",
1879 rfield.extin_mag_V_extended,
1880 rfield.extin_mag_V_point);
1885 free( ipSortLines );
1898 free( xLog_line_lumin );
1911 if(
prt.lgPrintColumns )