653 if( strcmp(chTime,
"LAST") == 0 )
659 for( ipPun=0; ipPun <
save.nsave; ipPun++ )
663 fprintf(
save.ipPnunit[ipPun],
"%s",
save.chHeader[ipPun] );
664 save.lgPunHeader[ipPun] =
false;
668 save.ipConPun = ipPun;
671 bool lgNoHitFirstBranch =
false;
684 (
lgAbort && strcmp(chTime,
"LAST") == 0 ) ||
688 if( strcmp(
save.chSave[ipPun],
"ABUN") == 0 )
691 if( strcmp(chTime,
"LAST") != 0 )
693 fprintf(
save.ipPnunit[ipPun],
"%.2f",
699 fprintf(
save.ipPnunit[ipPun],
"\t%.2f",
702 fprintf(
save.ipPnunit[ipPun],
"\n" );
706 else if( strcmp(
save.chSave[ipPun],
"21CM") == 0 )
709 if( strcmp(chTime,
"LAST") != 0 )
711 fprintf(
save.ipPnunit[ipPun],
712 "%.5e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\n",
737 -0.068/log((
colden.H0_21cm_upper/3.)/
colden.H0_21cm_lower)
742 else if( strcmp(
save.chSave[ipPun],
"AGES") == 0 )
745 if( strcmp(chTime,
"LAST") != 0 )
750 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n",
758 1./
SDIV((ipCO != -1) ?
mole.species[ipCO].snk : 0.),
760 1./
SDIV((ipOH != -1) ?
mole.species[ipOH].snk : 0.),
766 else if( strcmp(
save.chSave[ipPun],
" AGN") == 0 )
768 if( strcmp(chTime,
"LAST") == 0 )
770 if( strcmp(
save.chSaveArgs[ipPun],
"HECS" ) == 0 )
775 if( strcmp(
save.chSaveArgs[ipPun],
"HEMI" ) == 0 )
782 fprintf(
ioQQQ,
" SaveDo does not recognize flag %4.4s set for AGN save. This is impossible.\n",
783 save.chSave[ipPun] );
790 else if( strcmp(
save.chSave[ipPun],
"MONI") == 0 )
792 if( strcmp(chTime,
"LAST") == 0 )
799 else if( strcmp(
save.chSave[ipPun],
"AVER") == 0 )
801 if( strcmp(chTime,
"LAST") == 0 )
808 else if( strncmp(
save.chSave[ipPun],
"CHA",3) == 0 )
810 if( strcmp(chTime,
"LAST") == 0 )
817 else if( strcmp(
save.chSave[ipPun],
"CHIA") == 0)
819 static bool lgRunOnce =
true;
826 double fupsilon = 0.;
827 double initTemp = 4.0;
828 double finalTemp = 9.1;
829 double stepTemp = 0.2;
830 fprintf(
save.ipPnunit[ipPun],
"Species\tLo\tHi\tWLAng");
831 for(
double logtemp = initTemp;logtemp < finalTemp;logtemp = logtemp + stepTemp )
833 fprintf(
save.ipPnunit[ipPun],
"\t%2.1f",logtemp);
835 fprintf(
save.ipPnunit[ipPun],
"\n");
836 for (
int ipSpecies=0; ipSpecies <
nSpecies; ++ipSpecies)
839 tr !=
dBaseTrans[ipSpecies].Emis().end(); ++tr)
841 if(
dBaseTrans[ipSpecies].chLabel() ==
"Chianti" )
843 ipLo = tr->Tran().ipLo();
844 ipHi = tr->Tran().ipHi();
845 fprintf(
save.ipPnunit[ipPun],
"%s\t%i\t%i\t",
847 fprintf(
save.ipPnunit[ipPun],
"%5.3e",tr->Tran().WLAng());
848 for(
double logtemp = initTemp;logtemp < finalTemp;logtemp = logtemp + stepTemp )
851 fprintf(
save.ipPnunit[ipPun],
"\t%5.3e",fupsilon);
853 fprintf(
save.ipPnunit[ipPun],
"\n");
860 else if( strcmp(
save.chSave[ipPun],
"COOL") == 0 ||
861 strcmp(
save.chSave[ipPun],
"EACH") == 0 )
864 if( strcmp(chTime,
"LAST") != 0 )
868 else if( strcmp(
save.chSave[ipPun],
"DOMI") == 0 )
871 if( strcmp(chTime,
"LAST") != 0 )
876 fprintf(
ioQQQ,
"Error in SAVE DOMINANT RATES, species %s not found\n",
877 save.chSpeciesDominantRates[ipPun]);
881 fprintf(
save.ipPnunit[ipPun],
882 "%e\t%e\t",
radius.depth_mid_zone,
mole.species[ debug_species->
index ].column );
888 else if( strncmp(
save.chSave[ipPun],
"DYN" , 3) == 0 )
891 if( strcmp(chTime,
"LAST") != 0 )
895 else if( strcmp(
save.chSave[ipPun],
"ENTH") == 0 )
897 if( strcmp(chTime,
"LAST") != 0 )
898 fprintf(
save.ipPnunit[ipPun],
899 "%.5e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n",
910 else if( strcmp(
save.chSave[ipPun],
"COLU") == 0 )
913 if( strcmp(chTime,
"LAST") == 0 )
919 else if( strcmp(
save.chSave[ipPun],
"COLS") == 0 )
922 if( strcmp(chTime,
"LAST") == 0 )
929 else if( strcmp(
save.chSave[ipPun],
"COMP") == 0 )
932 if( strcmp(chTime,
"LAST") != 0 )
934 for( jj=0; jj<
rfield.nflux; jj = jj +
save.ncSaveSkip)
936 fprintf(
save.ipPnunit[ipPun],
"%10.2e%10.2e%10.2e\n",
944 else if( strcmp(
save.chSave[ipPun],
"CON ") == 0 )
950 bool lgPrintThis =
false;
951 if(
save.lgSaveEveryZone[ipPun] )
954 if( strcmp(chTime,
"LAST") != 0 )
961 else if(
nzone%
save.nSaveEveryZone[ipPun]==0 )
978 if( strcmp(chTime,
"LAST") == 0 )
981 ASSERT( !
save.lgSaveEveryZone[ipPun] ||
save.nSaveEveryZone[ipPun]>0 );
984 if(
save.lgSaveEveryZone[ipPun] &&
nzone!=1)
985 fprintf(
save.ipPnunit[ipPun],
"%s\n",
989 int nEmType = (int)
save.punarg[ipPun][0];
990 ASSERT( nEmType==0 || nEmType==1 );
993 for( j=0; j<
rfield.nflux; j = j+
save.ncSaveSkip)
1005 flxin = ((double)
rfield.flux_total_incident[nEmType][j])
1014 flxref = (
rfield.anu2[j]*((double)
rfield.ConRefIncid[nEmType][j]+
rfield.ConEmitReflec[nEmType][j])/
rfield.widflx[j] +
1023 conem = ((double)
rfield.ConEmitOut[nEmType][j]/
1029 flxtrn = conem + flxatt;
1034 fprintf(
save.ipPnunit[ipPun],
"%.3e\t", flxin );
1036 fprintf(
save.ipPnunit[ipPun],
"%.3e\t", flxatt );
1038 fprintf(
save.ipPnunit[ipPun],
"%.3e\t", conem );
1040 fprintf(
save.ipPnunit[ipPun],
"%.3e\t", flxtrn );
1042 fprintf(
save.ipPnunit[ipPun],
"%.3e\t", flxref );
1044 fprintf(
save.ipPnunit[ipPun],
"%.3e\t", flxref + flxtrn );
1053 fprintf(
save.ipPnunit[ipPun],
"%4.4s\t%4.4s\t",
1067 else if( strcmp(
save.chSave[ipPun],
"CONN") == 0 )
1069 if( strcmp(chTime,
"LAST") == 0 )
1073 else if( strcmp(
save.chSave[ipPun],
"CONC") == 0 )
1078 if( strcmp(chTime,
"LAST") == 0 )
1081 for( j=0; j<
rfield.nflux; j = j +
save.ncSaveSkip)
1083 flxin =
rfield.flux_total_incident[0][j]*
rfield.anu2[j]*
1086 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.3e\n",
1092 else if( strcmp(
save.chSave[ipPun],
"CONG") == 0 )
1095 if( strcmp(chTime,
"LAST") == 0 )
1099 for( j=0; j<
rfield.nflux; j = j +
save.ncSaveSkip)
1101 fsum =
gv.GraphiteEmission[j]*
rfield.anu2[j]*
1104 fout =
gv.SilicateEmission[j]*
rfield.anu2[j]*
1109 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.3e\t%.3e\t%.3e\n",
1113 gv.GrainEmission[j]*
rfield.anu2[j]*
1119 else if( strcmp(
save.chSave[ipPun],
"CONR") == 0 )
1124 if( strcmp(chTime,
"LAST") == 0 )
1128 fprintf(
save.ipPnunit[ipPun],
" Reflected continuum not predicted when SPHERE is set.\n" );
1130 "\n\n>>>>>>>>>>>>>\n Reflected continuum not predicted when SPHERE is set.\n" );
1134 for( j=0; j<
rfield.nflux; j = j +
save.ncSaveSkip)
1141 flxref =
rfield.anu2[j]*((double)
rfield.ConRefIncid[0][j]+
rfield.ConEmitReflec[0][j])/
1146 if(
rfield.flux_total_incident[0][j] > 1e-25 )
1148 av =
rfield.ConRefIncid[0][j]/
rfield.flux_total_incident[0][j];
1155 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4s\n",
1157 av,
rfield.chContLabel[j] );
1162 else if( strcmp(
save.chSave[ipPun],
"CNVE") == 0 )
1165 if( strcmp(chTime,
"LAST") != 0 )
1167 fprintf(
save.ipPnunit[ipPun],
1168 "%.5e\t%li\t%.4e\t%.4f\t%.4e\t%.4e\t%.3f\t%.4e\t%.4e\t%.4f\n",
1182 else if( strcmp(
save.chSave[ipPun],
"CONB") == 0 )
1187 if( strcmp(chTime,
"LAST") != 0 )
1189 for( j=0; j<
rfield.nupper; j = j +
save.ncSaveSkip)
1191 fprintf(
save.ipPnunit[ipPun],
"%14.5e %14.5e %14.5e\n",
1197 else if( strcmp(
save.chSave[ipPun],
"COND") == 0 )
1203 if( strcmp(chTime,
"LAST") == 0 &&
1208 for( j=0; j<
rfield.nflux; j = j+
save.ncSaveSkip)
1214 double EmisLin = resolution*
EN1RYD*
1218 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.5e\t%.5e\t%.5e\n",
1225 else if( strcmp(chTime,
"LAST") != 0 &&
1233 fprintf(
save.ipPnunit[ipPun],
"%.5e",
1235 for( j=1; j<
rfield.nflux; j = j+
save.ncSaveSkip)
1237 fprintf(
save.ipPnunit[ipPun],
"\t%.5e",
1240 fprintf(
save.ipPnunit[ipPun],
"\n" );
1245 double EmisLin = resolution*
EN1RYD*
1249 fprintf(
save.ipPnunit[ipPun],
"%.5e",
1251 for( j=1; j<
rfield.nflux; j = j+
save.ncSaveSkip)
1256 double EmisLin = resolution*
EN1RYD*
1260 fprintf(
save.ipPnunit[ipPun],
"\t%.5e",
1263 fprintf(
save.ipPnunit[ipPun],
"\n" );
1267 else if( strcmp(
save.chSave[ipPun],
"CONE") == 0 )
1272 if( strcmp(chTime,
"LAST") == 0 )
1275 for( j=0; j<
rfield.nflux;j = j +
save.ncSaveSkip)
1294 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.3e\t%.3e\t%.3e\t%4.4s\t%4.4s\n",
1307 else if( strcmp(
save.chSave[ipPun],
"CONf") == 0 )
1309 if( strcmp(chTime,
"LAST") == 0 )
1312 if(
save.punarg[ipPun][0] > 0. )
1320 if(
save.punarg[ipPun][1]> 0. )
1326 nskip = (long)
save.punarg[ipPun][2];
1332 for( jj=1; jj<nskip; ++jj )
1334 xnu +=
rfield.fine_anu[j+jj];
1335 sum1 +=
rfield.fine_opt_depth[j+jj];
1337 fprintf(
save.ipPnunit[ipPun],
1342 }
while( j < nu_hi );
1346 else if( strcmp(
save.chSave[ipPun],
"CONi") == 0 )
1353 if( strcmp(chTime,
"LAST") != 0 )
1356 if(
save.punarg[ipPun][0] <= 0. )
1360 else if(
save.punarg[ipPun][0] < 100. )
1366 i1 = (
long int)
save.punarg[ipPun][0];
1375 for( j=i1-1; j <
rfield.nflux; j++ )
1377 fref +=
rfield.flux[0][j]*
opac.opacity_abs[j];
1378 fout +=
rfield.otslin[j]*
opac.opacity_abs[j];
1379 fsum +=
rfield.otscon[j]*
opac.opacity_abs[j];
1380 sum +=
rfield.ConInterOut[j]*
opac.opacity_abs[j];
1381 flxin += (
rfield.outlin[0][j] +
rfield.outlin_noplot[j])*
opac.opacity_abs[j];
1383 fprintf(
save.ipPnunit[ipPun],
"%10.2e%10.2e%10.2e%10.2e%10.2e\n",
1384 fref, fout, fsum, sum, flxin );
1388 else if( strcmp(
save.chSave[ipPun],
"CONI") == 0 )
1394 if(
save.lgSaveEveryZone[ipPun] || (strcmp(chTime,
"LAST") == 0) )
1398 if(
save.lgSaveEveryZone[ipPun] )
1399 fprintf(
save.ipPnunit[ipPun],
"#save every zone %li\n",
nzone);
1404 if(
save.punarg[ipPun][0] <= 0. )
1406 else if(
save.punarg[ipPun][0] < 100. )
1409 i1 = (
long int)
save.punarg[ipPun][0];
1412 for( j=i1-1; j <
rfield.nflux; j++ )
1414 flxcor =
rfield.flux[0][j] +
1420 sum += flxcor*
opac.opacity_abs[j];
1430 for( j=i1-1; j<
rfield.nflux; ++j)
1432 flxcor =
rfield.flux[0][j] +
1438 fsum += flxcor*
opac.opacity_abs[j];
1442 RateInter = flxcor*
opac.opacity_abs[j]*sum;
1446 if( (RateInter >=
save.punarg[ipPun][1]) && (flxcor >
SMALLFLOAT) )
1450 fprintf(
save.ipPnunit[ipPun],
1451 "%li\t%.5e\t%.2e\t%.2e\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2e\t%.2e\t%.4s\t%.4s\n",
1455 flxcor*
opac.opacity_abs[j],
1456 rfield.flux[0][j]/flxcor,
1459 (
rfield.outlin[0][j] +
rfield.outlin_noplot[j])/flxcor,
1460 rfield.ConInterOut[j]/flxcor,
1470 fprintf(
save.ipPnunit[ipPun],
1471 " punchdo, the PUNCH IONIZING CONTINUUM command "
1472 "did not find a strong point, sum and fsum were %.2e %.2e\n",
1474 fprintf(
save.ipPnunit[ipPun],
1475 " punchdo, the low-frequency energy was %.5e Ryd\n",
1477 fprintf(
save.ipPnunit[ipPun],
1478 " You can reset the threshold for the lowest fractional "
1479 "interaction to print with the second number of the save command\n"
1480 " The fraction was %.3f and this was too large.\n",
1481 save.punarg[ipPun][1]);
1486 else if( strcmp(
save.chSave[ipPun],
"CONl") == 0 )
1488 if( strcmp(chTime,
"LAST") != 0 )
1490 int nEmType = (int)
save.punarg[ipPun][0];
1491 ASSERT( nEmType==0 || nEmType==1 );
1493 for( j=0; j<
rfield.nflux; j = j+
save.ncSaveSkip)
1501 flxref = (
rfield.anu2[j]*((double)
rfield.ConRefIncid[nEmType][j]+
rfield.ConEmitReflec[nEmType][j])/
rfield.widflx[j] +
1510 conem = (((double)
rfield.ConEmitOut[nEmType][j])/
1516 flxtrn = conem + flxatt;
1519 double lowlim, highlim, NRGeV;
1524 if( NRGeV >= lowlim && NRGeV <= highlim )
1527 fprintf(
save.ipPnunit[ipPun],
"%14.8e ", NRGeV );
1529 fprintf(
save.ipPnunit[ipPun],
"%14.8e %14.8e %14.8e ",0.,0.,0.);
1531 fprintf(
save.ipPnunit[ipPun],
"%14.8e\n", (flxref + flxtrn)/NRGeV );
1540 else if( strcmp(
save.chSave[ipPun],
"CONS") == 0 )
1542 if( strcmp(chTime,
"LAST") != 0 )
1546 if(
save.ipEmisFreq[ipPun] < 0 )
1548 j =
save.ipEmisFreq[ipPun]-1;
1550 fprintf(
save.ipPnunit[ipPun],
1551 "%.14e\t%.14e\t%.5e\t%.5e\t%.5e\n",
1555 opac.opacity_abs[j],
1556 opac.opacity_sct[j] );
1560 else if( strcmp(
save.chSave[ipPun],
"CORA") == 0 )
1566 if( strcmp(chTime,
"LAST") == 0 )
1569 for( j=0;j<
rfield.nflux;j = j +
save.ncSaveSkip)
1571 fprintf(
save.ipPnunit[ipPun],
1572 "%.5e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%4.4s\t%4.4s\t",
1577 rfield.ConRefIncid[0][j],
1578 rfield.ConEmitReflec[0][j],
1586 fprintf(
save.ipPnunit[ipPun],
"%li\n",
rfield.line_count[j] );
1591 else if( strcmp(
save.chSave[ipPun],
"CONo") == 0 )
1597 if( strcmp(chTime,
"LAST") == 0 )
1600 for( j=0;j<
rfield.nflux; j = j +
save.ncSaveSkip)
1602 fprintf(
save.ipPnunit[ipPun],
"%11.5e%10.2e%10.2e\n",
1612 else if( strcmp(
save.chSave[ipPun],
"CONO") == 0 )
1618 if( strcmp(chTime,
"LAST") == 0 )
1621 for( j=0; j<
rfield.nflux; j = j +
save.ncSaveSkip)
1627 fprintf(
save.ipPnunit[ipPun],
"%11.5e%10.2e%10.2e%10.2e%10.2e\n",
1639 else if( strcmp(
save.chSave[ipPun],
"CONT") == 0 )
1646 if( strcmp(chTime,
"LAST") == 0 )
1648 fprintf(
save.ipPnunit[ipPun],
"#\n" );
1649 fprintf(
save.ipPnunit[ipPun],
"%32ld # file format version number\n",
1651 fprintf(
save.ipPnunit[ipPun],
"%s # check 1\n",
1657 u.x = double(
rfield.emm);
1658 if(
cpu.i().big_endian() )
1659 fprintf(
save.ipPnunit[ipPun],
"%23.8x %8.8x # check 2\n",
1662 fprintf(
save.ipPnunit[ipPun],
"%23.8x %8.8x # check 2\n",
1664 u.x = double(
rfield.egamry);
1665 if(
cpu.i().big_endian() )
1666 fprintf(
save.ipPnunit[ipPun],
"%23.8x %8.8x # check 3\n",
1669 fprintf(
save.ipPnunit[ipPun],
"%23.8x %8.8x # check 3\n",
1672 if(
cpu.i().big_endian() )
1673 fprintf(
save.ipPnunit[ipPun],
"%23.8x %8.8x # check 4\n",
1676 fprintf(
save.ipPnunit[ipPun],
"%23.8x %8.8x # check 4\n",
1678 fprintf(
save.ipPnunit[ipPun],
"%32ld # nflux\n",
1680 fprintf(
save.ipPnunit[ipPun],
"#\n" );
1682 const realnum *trans_coef_total=
rfield.getCoarseTransCoef();
1685 for( j=0; j <
rfield.nflux; j +=
save.ncSaveSkip )
1712 flxtrn = conem + flxatt;
1717 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.3e\t%.3e\n",
1719 trans_coef_total[j] );
1724 else if( strcmp(
save.chSave[ipPun],
"CON2") == 0 )
1727 if( strcmp(chTime,
"LAST") == 0 )
1730 for( j=0; j<
rfield.nflux; j = j+
save.ncSaveSkip)
1732 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.5e\t%.5e\n",
1740 else if( strcmp(
save.chSave[ipPun],
"DUSE") == 0 )
1743 if( strcmp(chTime,
"LAST") != 0 )
1745 fprintf(
save.ipPnunit[ipPun],
" %.5e\t",
1749 fprintf(
save.ipPnunit[ipPun],
"%.2e\t" ,
rfield.extin_mag_V_extended);
1752 fprintf(
save.ipPnunit[ipPun],
"%.2e\n" ,
rfield.extin_mag_V_point);
1756 else if( strcmp(
save.chSave[ipPun],
"DUSO") == 0 )
1759 if( strcmp(chTime,
"LAST") == 0 )
1761 for( j=0; j <
rfield.nflux; j++ )
1764 fprintf(
save.ipPnunit[ipPun],
1765 "%.5e\t%.2e\t%.2e\t%.2e\t",
1769 gv.dstab[j] +
gv.dstsc[j],
1777 for(
size_t nd=0; nd <
gv.bin.size(); nd++ )
1779 scat +=
gv.bin[nd]->pure_sc1[j]*
gv.bin[nd]->dstAbund;
1782 fprintf(
save.ipPnunit[ipPun],
1784 fprintf(
save.ipPnunit[ipPun],
1785 "%.2e\n",
gv.dstsc[j]/
SDIV(
gv.dstab[j] +
gv.dstsc[j]) );
1791 else if( strcmp(
save.chSave[ipPun],
"DUSA") == 0 ||
1792 strcmp(
save.chSave[ipPun],
"DUSD") == 0 )
1794 bool lgDGRatio = ( strcmp(
save.chSave[ipPun],
"DUSD") == 0 );
1797 if( strcmp(chTime,
"LAST") != 0 )
1800 static bool lgMustPrtHeaderDRRatio =
true,
1801 lgMustPrtHeaderAbundance=
true;
1803 if( ( lgMustPrtHeaderDRRatio && lgDGRatio ) ||
1804 ( lgMustPrtHeaderAbundance && !lgDGRatio ) )
1808 if( lgMustPrtHeaderDRRatio && lgDGRatio )
1809 lgMustPrtHeaderDRRatio =
false;
1810 else if( lgMustPrtHeaderAbundance &&!lgDGRatio )
1811 lgMustPrtHeaderAbundance =
false;
1813 fprintf(
save.ipPnunit[ipPun],
"#Depth" );
1814 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1815 fprintf(
save.ipPnunit[ipPun],
"\t%s",
gv.bin[nd]->chDstLab );
1816 fprintf(
save.ipPnunit[ipPun],
"\ttotal\n" );
1819 fprintf(
save.ipPnunit[ipPun],
"#grn rad (mic)" );
1820 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1821 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AvRadius*1e4 );
1822 fprintf(
save.ipPnunit[ipPun],
"\txxxx\n" );
1824 fprintf(
save.ipPnunit[ipPun],
" %.5e",
1828 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1830 double abund =
gv.bin[nd]->IntVol*
gv.bin[nd]->dustp[0]*
1831 gv.bin[nd]->cnv_H_pCM3;
1834 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
abund );
1837 fprintf(
save.ipPnunit[ipPun],
"\t%.3e\n", total );
1841 else if( strcmp(
save.chSave[ipPun],
"DUSP") == 0 )
1844 if( strcmp(chTime,
"LAST") != 0 )
1847 static bool lgMustPrtHeader =
true;
1849 if( lgMustPrtHeader )
1852 fprintf(
save.ipPnunit[ipPun],
"#Depth" );
1853 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1854 fprintf(
save.ipPnunit[ipPun],
"\t%s",
gv.bin[nd]->chDstLab );
1855 fprintf(
save.ipPnunit[ipPun],
"\n" );
1858 fprintf(
save.ipPnunit[ipPun],
"#grn rad (mic)" );
1859 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1860 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AvRadius*1e4 );
1861 fprintf(
save.ipPnunit[ipPun],
"\n" );
1864 lgMustPrtHeader =
false;
1866 fprintf(
save.ipPnunit[ipPun],
" %.5e",
1869 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1870 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->dstpot*
EVRYD );
1871 fprintf(
save.ipPnunit[ipPun],
"\n" );
1875 else if( strcmp(
save.chSave[ipPun],
"DUSR") == 0 )
1878 if( strcmp(chTime,
"LAST") != 0 )
1881 static bool lgMustPrtHeader =
true;
1883 if( lgMustPrtHeader )
1886 fprintf(
save.ipPnunit[ipPun],
"#Depth" );
1887 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1888 fprintf(
save.ipPnunit[ipPun],
"\t%s",
gv.bin[nd]->chDstLab );
1889 fprintf(
save.ipPnunit[ipPun],
"\n" );
1892 fprintf(
save.ipPnunit[ipPun],
"#grn rad (mic)" );
1893 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1894 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AvRadius*1e4 );
1895 fprintf(
save.ipPnunit[ipPun],
"\n" );
1898 lgMustPrtHeader =
false;
1900 fprintf(
save.ipPnunit[ipPun],
" %.5e",
1903 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1904 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->rate_h2_form_grains_used );
1905 fprintf(
save.ipPnunit[ipPun],
"\n" );
1909 else if( strcmp(
save.chSave[ipPun],
"DUST") == 0 )
1912 if( strcmp(chTime,
"LAST") != 0 )
1915 static bool lgMustPrtHeader =
true;
1917 if( lgMustPrtHeader )
1920 fprintf(
save.ipPnunit[ipPun],
"#Depth" );
1921 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1922 fprintf(
save.ipPnunit[ipPun],
"\t%s",
gv.bin[nd]->chDstLab );
1923 fprintf(
save.ipPnunit[ipPun],
"\n" );
1926 fprintf(
save.ipPnunit[ipPun],
"#grn rad (mic)" );
1927 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1928 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AvRadius*1e4 );
1929 fprintf(
save.ipPnunit[ipPun],
"\n" );
1932 lgMustPrtHeader =
false;
1934 fprintf(
save.ipPnunit[ipPun],
" %.5e",
1936 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1937 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->tedust );
1938 fprintf(
save.ipPnunit[ipPun],
"\n" );
1942 else if( strcmp(
save.chSave[ipPun],
"DUSC") == 0 )
1946 if( strcmp(chTime,
"LAST") != 0 )
1949 static bool lgMustPrtHeader =
true;
1951 if( lgMustPrtHeader )
1954 fprintf(
save.ipPnunit[ipPun],
"#Depth\tne(grn)" );
1955 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1956 fprintf(
save.ipPnunit[ipPun],
"\t%s",
gv.bin[nd]->chDstLab );
1957 fprintf(
save.ipPnunit[ipPun],
"\n" );
1960 fprintf(
save.ipPnunit[ipPun],
"#grn rad (mic)\tne\t" );
1961 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1962 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AvRadius*1e4 );
1963 fprintf(
save.ipPnunit[ipPun],
"\n" );
1966 lgMustPrtHeader =
false;
1969 fprintf(
save.ipPnunit[ipPun],
" %.5e\t%.4e",
1976 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1978 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AveDustZ );
1980 fprintf(
save.ipPnunit[ipPun],
"\n" );
1984 else if( strcmp(
save.chSave[ipPun],
"DUSH") == 0 )
1987 if( strcmp(chTime,
"LAST") != 0 )
1990 static bool lgMustPrtHeader =
true;
1992 if( lgMustPrtHeader )
1995 fprintf(
save.ipPnunit[ipPun],
"#Depth" );
1996 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
1997 fprintf(
save.ipPnunit[ipPun],
"\t%s",
gv.bin[nd]->chDstLab );
1998 fprintf(
save.ipPnunit[ipPun],
"\n" );
2001 fprintf(
save.ipPnunit[ipPun],
"#grn rad (mic)" );
2002 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
2003 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AvRadius*1e4 );
2004 fprintf(
save.ipPnunit[ipPun],
"\n" );
2007 lgMustPrtHeader =
false;
2009 fprintf(
save.ipPnunit[ipPun],
" %.5e",
2012 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
2013 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->GasHeatPhotoEl );
2014 fprintf(
save.ipPnunit[ipPun],
"\n" );
2018 else if( strcmp(
save.chSave[ipPun],
"DUSV") == 0 )
2021 if( strcmp(chTime,
"LAST") != 0 )
2024 static bool lgMustPrtHeader =
true;
2026 if( lgMustPrtHeader )
2029 fprintf(
save.ipPnunit[ipPun],
"#Depth" );
2030 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
2031 fprintf(
save.ipPnunit[ipPun],
"\t%s",
gv.bin[nd]->chDstLab );
2032 fprintf(
save.ipPnunit[ipPun],
"\n" );
2035 fprintf(
save.ipPnunit[ipPun],
"#grn rad (mic)" );
2036 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
2037 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->AvRadius*1e4 );
2038 fprintf(
save.ipPnunit[ipPun],
"\n" );
2041 lgMustPrtHeader =
false;
2043 fprintf(
save.ipPnunit[ipPun],
" %.5e",
2046 for(
size_t nd=0; nd <
gv.bin.size(); ++nd )
2047 fprintf(
save.ipPnunit[ipPun],
"\t%.3e",
gv.bin[nd]->DustDftVel*1e-5 );
2048 fprintf(
save.ipPnunit[ipPun],
"\n" );
2053 else if( strcmp(
save.chSave[ipPun],
"DUSQ") == 0 )
2056 if( strcmp(chTime,
"LAST") == 0 )
2058 for( j=0; j <
rfield.nflux; j++ )
2060 fprintf(
save.ipPnunit[ipPun],
"%11.4e",
2062 for(
size_t nd=0; nd <
gv.bin.size(); nd++ )
2064 fprintf(
save.ipPnunit[ipPun],
"%9.1e%9.1e",
2065 gv.bin[nd]->dstab1[j]*4./
gv.bin[nd]->IntArea,
2066 gv.bin[nd]->pure_sc1[j]*
gv.bin[nd]->asym[j]*4./
gv.bin[nd]->IntArea );
2068 fprintf(
save.ipPnunit[ipPun],
"\n" );
2073 else if( strcmp(
save.chSave[ipPun],
"ELEM") == 0 )
2075 if( strcmp(chTime,
"LAST") != 0 )
2081 nelem = (
long int)
save.punarg[ipPun][0];
2085 if(
dense.lgElmtOn[nelem] )
2089 if(
save.punarg[ipPun][1] == 0 )
2090 renorm =
dense.gas_phase[nelem];
2092 fprintf(
save.ipPnunit[ipPun],
" %.5e",
radius.depth_mid_zone );
2094 for( j=0; j <= (nelem + 1); ++j)
2096 fprintf(
save.ipPnunit[ipPun],
"\t%.2e",
2097 dense.xIonDense[nelem][j]/renorm );
2102 fprintf(
save.ipPnunit[ipPun],
"\t%.2e",
2103 hmi.H2_total/renorm );
2108 fprintf(
save.ipPnunit[ipPun],
"\t%.2e\t%.2e\t%.2e",
2110 fprintf(
save.ipPnunit[ipPun],
"\t%.2e\t%.2e",
2112 fprintf(
save.ipPnunit[ipPun],
"\t%.2e",
2117 fprintf(
save.ipPnunit[ipPun],
"\t%.2e\t%.2e\t%.2e",
2120 fprintf(
save.ipPnunit[ipPun],
"\n" );
2125 else if( strcmp(
save.chSave[ipPun],
"RECA") == 0 )
2133 else if( strcmp(
save.chSave[ipPun],
"RECE") == 0 )
2141 fprintf(
save.ipPnunit[ipPun],
2142 "%12.4e %12.4e %12.4e %12.4e\n",
2149 else if( strncmp(
save.chSave[ipPun],
"FEc" , 3 ) == 0 )
2152 if( strcmp(chTime,
"LAST") == 0 )
2155 if(
save.punarg[ipPun][0] == 1 )
2158 char chTempHeader[100];
2159 long ipFeII_Cont_type;
2160 if( strcmp(
save.chSave[ipPun],
"FEcI") == 0 )
2162 strcpy(chTempHeader ,
"#FeII inward: Wl(A)\tInt[erg cm-2 s-1]\n");
2163 ipFeII_Cont_type = 1;
2165 else if( strcmp(
save.chSave[ipPun],
"FEcO") == 0 )
2167 strcpy(chTempHeader ,
"#FeII outward: Wl(A)\tInt[erg cm-2 s-1]\n");
2168 ipFeII_Cont_type = 2;
2170 else if( strcmp(
save.chSave[ipPun],
"FEcT") == 0 )
2172 strcpy(chTempHeader ,
"#FeII total: Wl(A)\tInt[erg cm-2 s-1]\n");
2173 ipFeII_Cont_type = 3;
2178 if(
save.lgPunHeader[ipPun] &&
2183 fprintf(
save.ipPnunit[ipPun],
"%s%.5f",
2188 fprintf(
save.ipPnunit[ipPun],
"\t%.5e",
2191 fprintf(
save.ipPnunit[ipPun],
"\n");
2192 save.lgPunHeader[ipPun] =
false;
2195 fprintf(
save.ipPnunit[ipPun],
"%.2f",
2199 fprintf(
save.ipPnunit[ipPun],
"\t%e",
2202 fprintf(
save.ipPnunit[ipPun],
"\n");
2204 else if(
save.punarg[ipPun][0] == 2 )
2208 if(
save.lgPunHeader[ipPun] &&
2211 fprintf(
save.ipPnunit[ipPun],
"FeiI wl, total, inward, outward\n");
2212 save.lgPunHeader[ipPun] =
false;
2216 fprintf(
save.ipPnunit[ipPun],
"%.5f",
2218 fprintf(
save.ipPnunit[ipPun],
"\t%e",
2220 fprintf(
save.ipPnunit[ipPun],
"\t%e",
2222 fprintf(
save.ipPnunit[ipPun],
"\t%e",
2224 fprintf(
save.ipPnunit[ipPun],
"\n");
2231 else if( strcmp(
save.chSave[ipPun],
"FENl") == 0 )
2233 if( strcmp(chTime,
"LAST") == 0 )
2240 else if( strcmp(
save.chSave[ipPun],
"FE2l") == 0 )
2242 if( strcmp(chTime,
"LAST") == 0 )
2249 else if( strcmp(
save.chSave[ipPun],
"FEli") == 0 )
2251 if( strcmp(chTime,
"LAST") == 0 )
2258 else if( strcmp(
save.chSave[ipPun],
"FE2o") == 0 )
2260 if( strcmp(chTime,
"LAST") == 0 )
2267 else if( strcmp(
save.chSave[ipPun],
"FRED") == 0 )
2271 if( strcmp(chTime,
"LAST") != 0 )
2274 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.5e\t%.3e\t%.3e\t%.3e"
2275 "\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e"
2276 "\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e"
2277 "\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e"
2278 "\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e"
2312 else if( strcmp(
save.chSave[ipPun],
"FE2d") == 0 )
2315 if( strcmp(chTime,
"LAST") != 0 )
2319 else if( strcmp(
save.chSave[ipPun],
"FE2D") == 0 )
2322 if( strcmp(chTime,
"LAST") != 0 )
2326 else if( strcmp(
save.chSave[ipPun],
"FE2p") == 0 )
2328 bool lgFlag =
false;
2329 if(
save.punarg[ipPun][2] )
2332 if( strcmp(chTime,
"LAST") != 0 )
2337 else if( strcmp(
save.chSave[ipPun],
"FE2P") == 0 )
2339 bool lgFlag =
false;
2340 if(
save.punarg[ipPun][2] )
2343 if( strcmp(chTime,
"LAST") != 0 )
2346 (
long int)
save.punarg[ipPun][0],
2347 (
long int)
save.punarg[ipPun][1],
2352 else if( strcmp(
save.chSave[ipPun],
"FITS") == 0 )
2354 if( strcmp(chTime,
"LAST") == 0 )
2360 else if( strcmp(
save.chSave[ipPun],
"GAMt") == 0 )
2362 if( strcmp(chTime,
"LAST") != 0 )
2366 for( nelem=0; nelem <
LIMELM; nelem++ )
2368 for( ion=0; ion <= nelem; ion++ )
2370 for( ns=0; ns <
Heavy.nsShells[nelem][ion]; ns++ )
2372 fprintf(
save.ipPnunit[ipPun],
"%3ld%3ld%3ld%10.2e%10.2e%10.2e",
2373 nelem+1, ion+1, ns+1,
2374 ionbal.PhotoRate_Shell[nelem][ion][ns][0],
2375 ionbal.PhotoRate_Shell[nelem][ion][ns][1] ,
2376 ionbal.PhotoRate_Shell[nelem][ion][ns][2] );
2380 fprintf(
save.ipPnunit[ipPun],
"%5.2f",
2383 fprintf(
save.ipPnunit[ipPun],
"\n" );
2391 else if( strcmp(
save.chSave[ipPun],
"GAMe") == 0 )
2393 if( strcmp(chTime,
"LAST") != 0 )
2396 nelem = (long)
save.punarg[ipPun][0];
2397 ion = (long)
save.punarg[ipPun][1];
2399 ns =
Heavy.nsShells[nelem][ion]-1;
2402 opac.ipElement[nelem][ion][ns][0] ,
2403 opac.ipElement[nelem][ion][ns][1] ,
2404 opac.ipElement[nelem][ion][ns][2] ,
2405 save.ipPnunit[ipPun],
2406 ionbal.PhotoRate_Shell[nelem][ion][ns][0] ,
2407 ionbal.PhotoRate_Shell[nelem][ion][ns][0]*0.1 );
2411 else if( strcmp(
save.chSave[ipPun],
"GAUN") == 0 )
2414 if( strcmp(chTime,
"LAST") != 0 )
2424 lgNoHitFirstBranch =
true;
2430 (
lgAbort && strcmp(chTime,
"LAST") == 0 ) ||
2433 if( strcmp(
save.chSave[ipPun],
"HISp") == 0 )
2436 if( strcmp(chTime,
"LAST") != 0 )
2439 if( !
conv.lgConvPres )
2441 fprintf(
save.ipPnunit[ipPun],
2442 "#PROBLEM Pressure not converged iter %li zone %li density-pressure follows:\n",
2446 if( !
conv.lgConvTemp )
2448 fprintf(
save.ipPnunit[ipPun],
2449 "#PROBLEM Temperature not converged iter %li zone %li density-pressure follows:\n",
2452 for(
unsigned long k=0; k <
conv.hist_pres_density.size(); ++k )
2455 fprintf(
save.ipPnunit[ipPun] ,
"%2li %4li\t%.5e\t%.5e\t%.5e\n",
2458 conv.hist_pres_density[k],
2459 conv.hist_pres_current[k],
2460 conv.hist_pres_error[k]);
2465 else if( strcmp(
save.chSave[ipPun],
"HISt") == 0 )
2468 if( strcmp(chTime,
"LAST") != 0 )
2471 if( !
conv.lgConvPres )
2473 fprintf(
save.ipPnunit[ipPun],
2474 "#PROBLEM Pressure not converged iter %li zone %li temp heat cool follows:\n",
2478 if( !
conv.lgConvTemp )
2480 fprintf(
save.ipPnunit[ipPun],
2481 "#PROBLEM Temperature not converged iter %li zone %li temp heat cool follows:\n",
2484 for(
unsigned long k=0; k <
conv.hist_temp_temp.size(); ++k )
2487 fprintf(
save.ipPnunit[ipPun] ,
"%2li %4li\t%.5e\t%.5e\t%.5e\n",
2490 conv.hist_temp_temp[k],
2491 conv.hist_temp_heat[k],
2492 conv.hist_temp_cool[k]);
2497 else if( strncmp(
save.chSave[ipPun],
"H2",2) == 0 )
2500 save.whichDiatomToPrint[ipPun]->H2_PunchDo(
save.ipPnunit[ipPun] ,
save.chSave[ipPun] , chTime, ipPun );
2503 else if( strcmp(
save.chSave[ipPun],
"HEAT") == 0 )
2506 if( strcmp(chTime,
"LAST") != 0 )
2510 else if( strncmp(
save.chSave[ipPun],
"HE",2) == 0 )
2514 if( strcmp(
save.chSave[ipPun] ,
"HELW") == 0 )
2516 if( strcmp(chTime,
"LAST") == 0 )
2519 fprintf(
save.ipPnunit[ipPun],
2520 "Z\tElem\t2 1P->1 1S\t2 3P1->1 1S\t2 3P2->1 1S"
2521 "\t2 3S->1 1S\t2 3P2->2 3S\t2 3P1->2 3S\t2 3P0->2 3S" );
2522 fprintf(
save.ipPnunit[ipPun],
"\n" );
2526 fprintf(
save.ipPnunit[ipPun],
"%li\t%s",
2529 fprintf(
save.ipPnunit[ipPun],
"\t" );
2532 fprintf(
save.ipPnunit[ipPun],
"\t" );
2535 fprintf(
save.ipPnunit[ipPun],
"\t" );
2538 fprintf(
save.ipPnunit[ipPun],
"\t" );
2541 fprintf(
save.ipPnunit[ipPun],
"\t" );
2544 fprintf(
save.ipPnunit[ipPun],
"\t" );
2547 fprintf(
save.ipPnunit[ipPun],
"\t" );
2550 fprintf(
save.ipPnunit[ipPun],
"\n");
2559 else if( strcmp(
save.chSave[ipPun],
"HUMM") == 0 )
2563 fprintf(
save.ipPnunit[ipPun],
2564 " %.5e %10.3e %10.3e %10.3e %10.3e %10.3e %10.3e\n",
2572 else if( strncmp(
save.chSave[ipPun] ,
"HYD", 3 ) == 0 )
2575 if( strcmp(
save.chSave[ipPun],
"HYDc") == 0 )
2577 if( strcmp(chTime,
"LAST") != 0 )
2580 fprintf(
save.ipPnunit[ipPun],
2581 " %.5e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n",
2592 else if( strcmp(
save.chSave[ipPun],
"HYDi") == 0 )
2594 if( strcmp(chTime,
"LAST") != 0 )
2624 fprintf(
save.ipPnunit[ipPun],
"hion\t%4ld\t%.2e\t%.2e\t%.2e",
2631 fprintf(
save.ipPnunit[ipPun],
"\t%.2e",
2634 fprintf(
save.ipPnunit[ipPun],
2635 "\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\n",
2640 fref/
MAX2(1e-37,fout),
2641 stage/
MAX2(1e-37,fout),
2652 else if( strcmp(
save.chSave[ipPun],
"HYDp") == 0 )
2654 if( strcmp(chTime,
"LAST") != 0 )
2658 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.2e\t%.2e",
2666 fprintf(
save.ipPnunit[ipPun],
"\t%.2e",
2669 fprintf(
save.ipPnunit[ipPun],
"\n" );
2673 else if( strcmp(
save.chSave[ipPun],
"HYDl") == 0 )
2675 if( strcmp(chTime,
"LAST") == 0 )
2682 for( ipLo=0; ipLo<ipHi; ++ipLo )
2686 fprintf(
save.ipPnunit[ipPun],
"%li\t%li\t%li\t%li\t%.4e\t%.2e\n",
2699 else if( strcmp(
save.chSave[ipPun],
"HYDL") == 0 )
2701 if( strcmp(chTime,
"LAST") != 0 )
2707 fprintf(
save.ipPnunit[ipPun],
2708 "%.5e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\n",
2724 else if( strcmp(
save.chSave[ipPun],
"HYDr") == 0 )
2728 while(
phycon.te <= 20000. )
2731 double ThinCoolingCaseB;
2734 ThinCoolingCaseB = pow(10.,((-25.859117 +
2735 0.16229407*
phycon.telogn[0] +
2736 0.34912863*
phycon.telogn[1] -
2737 0.10615964*
phycon.telogn[2])/(1. +
2738 0.050866793*
phycon.telogn[0] -
2739 0.014118924*
phycon.telogn[1] +
2740 0.0044980897*
phycon.telogn[2] +
2743 fprintf(
save.ipPnunit[ipPun],
" %10.2e\t",
2745 fprintf(
save.ipPnunit[ipPun],
" %10.2e\t",
2748 fprintf(
save.ipPnunit[ipPun],
" %10.2e\t",
2751 fprintf(
save.ipPnunit[ipPun],
" %10.2e\n",
2757 fprintf(
ioQQQ ,
"save agn now exits since solution is disturbed.\n");
2764 else if( strcmp(
save.chSave[ipPun],
"IONI") == 0 )
2766 if( strcmp(chTime,
"LAST") == 0 )
2774 else if( strcmp(
save.chSave[ipPun],
"IONR") == 0 )
2776 if( strcmp(chTime,
"LAST") != 0 )
2779 nelem = (long)
save.punarg[ipPun][0];
2780 fprintf(
save.ipPnunit[ipPun],
2787 for( ion=0; ion<nelem+1; ++ion )
2789 fprintf(
save.ipPnunit[ipPun],
2790 "\t%.4e\t%.4e\t%.4e\t%.4e",
2791 dense.xIonDense[nelem][ion] ,
2792 ionbal.RateIonizTot(nelem,ion) ,
2793 ionbal.RateRecomTot[nelem][ion] ,
2796 fprintf(
save.ipPnunit[ipPun],
"\n");
2800 else if( strcmp(
save.chSave[ipPun],
" IP ") == 0 )
2802 if( strcmp(chTime,
"LAST") == 0 )
2805 for( nelem=0; nelem <
LIMELM; nelem++ )
2811 const int NELEM_LINE = 10;
2813 for( ion_big=0; ion_big<=nelem; ion_big += NELEM_LINE )
2815 int ion_limit =
MIN2(ion_big+NELEM_LINE-1,nelem);
2818 fprintf(
save.ipPnunit[ipPun],
2822 for( ion=ion_big; ion <= ion_limit; ++ion )
2824 fprintf(
save.ipPnunit[ipPun],
"\t%4ld", ion+1 );
2826 fprintf(
save.ipPnunit[ipPun],
"\n" );
2831 for( ips=0; ips <
Heavy.nsShells[nelem][ion_big]; ips++ )
2835 fprintf(
save.ipPnunit[ipPun],
"%2.2s",
Heavy.chShell[ips]);
2838 for( ion=ion_big; ion<=ion_limit; ++ion )
2843 if( ips >=
Heavy.nsShells[nelem][ion] )
2852 fprintf(
save.ipPnunit[ipPun],
"\t%6.3f", energy );
2854 else if( energy < 100. )
2856 fprintf(
save.ipPnunit[ipPun],
"\t%6.2f", energy );
2858 else if( energy < 1000. )
2860 fprintf(
save.ipPnunit[ipPun],
"\t%6.1f", energy );
2864 fprintf(
save.ipPnunit[ipPun],
"\t%6ld", (
long)(energy) );
2869 fprintf(
save.ipPnunit[ipPun],
"\n" );
2876 else if( strcmp(
save.chSave[ipPun],
"LINC") == 0 )
2879 if( strcmp(chTime,
"LAST") != 0 )
2882 save.lgEmergent[ipPun]);
2886 else if( strcmp(
save.chSave[ipPun],
"LIND") == 0 )
2892 else if( strcmp(
save.chSave[ipPun],
"LINL") == 0 )
2895 bool lgPrintAll=
false;
2897 if(
save.punarg[ipPun][0]>0. )
2902 else if( strcmp(
save.chSave[ipPun],
"LINO") == 0 )
2904 if( strcmp(chTime,
"LAST") == 0 )
2911 else if( strcmp(
save.chSave[ipPun],
"LINP") == 0 )
2913 if( strcmp(chTime,
"LAST") != 0 )
2928 else if( strcmp(
save.chSave[ipPun],
"LINS") == 0 )
2931 if( strcmp(chTime,
"LAST") != 0 )
2934 save.lgEmergent[ipPun]);
2938 else if( strcmp(
save.chSave[ipPun],
"LINR") == 0 )
2941 if( strcmp(chTime,
"LAST") != 0 )
2945 else if( strcmp(
save.chSave[ipPun],
"LINA") == 0 )
2948 if( strcmp(chTime,
"LAST") == 0 )
2954 LineSv[j].SumLine[0] > 0. )
2957 fprintf(
save.ipPnunit[ipPun],
"%12.5e",
2960 fprintf(
save.ipPnunit[ipPun],
"\t%4.4s ",
2965 fprintf(
save.ipPnunit[ipPun],
"\t%8.3f",
2968 fprintf(
save.ipPnunit[ipPun],
"\t%8.3f",
2971 fprintf(
save.ipPnunit[ipPun],
" \t%c\n",
2978 else if( strcmp(
save.chSave[ipPun],
"LINI") == 0 )
2980 if( strcmp(chTime,
"LAST") == 0 &&
2987 else if( strcmp(chTime,
"LAST") != 0 )
3000 else if( strcmp(
save.chSave[ipPun],
"LEIL") == 0)
3004 if( strcmp(chTime,
"LAST") == 0 )
3006 double absval , rel;
3012 const int NLINE_H2 = 31;
3014 const int NLINE_NOTH_H2 = 5;
3016 char chLabel[NLINE_NOTH_H2][5]=
3017 {
"C 2",
"O 1",
"O 1",
"C 1",
"C 1" };
3018 double Wl[NLINE_NOTH_H2]=
3019 {157.6 , 63.17 , 145.5 ,609.2 , 369.7 , };
3023 double Wl_H2[NLINE_H2]=
3025 28.213, 17.03 , 12.28 , 9.662 , 8.024 , 6.907 , 6.107 , 5.510 , 5.051 , 4.693 ,
3026 4.408 , 4.180 , 3.996 , 3.845 , 3.723 , 3.625 , 3.546 , 3.485 , 3.437 , 3.403 ,
3027 3.380 , 3.368 , 3.365 , 3.371 , 3.387 , 3.410 , 3.441 , 3.485 , 3.542 , 3.603};
3029 for( n=0; n<NLINE_NOTH_H2; ++n )
3031 fprintf(
save.ipPnunit[ipPun],
"%s\t%.2f",chLabel[n] , Wl[n]);
3034 if(
cdLine( chLabel[n] , (
realnum)(Wl[n]*1e4) , &absval , &rel ) <= 0 )
3036 fprintf(
save.ipPnunit[ipPun],
" did not find\n");
3040 fprintf(
save.ipPnunit[ipPun],
"\t%.3e\t%.3e\n",pow(10.,rel),absval);
3043 fprintf(
save.ipPnunit[ipPun],
"\n\n\n");
3048 fprintf(
save.ipPnunit[ipPun],
3049 "Here are some of the H2 Intensities, The first one is the\n"
3050 "1-0 S(0) line and the following ones are the 0-0 S(X)\n"
3051 "lines where X goes from 0 to 29\n\n");
3052 for( n=0; n<NLINE_H2; ++n )
3054 fprintf(
save.ipPnunit[ipPun],
"%s\t%.3f",
"H2 " , Wl_H2[n]);
3056 if(
cdLine(
"H2 " , (
realnum)(Wl_H2[n]*1e4) , &absval , &rel ) <= 0 )
3058 fprintf(
save.ipPnunit[ipPun],
" did not find\n");
3062 fprintf(
save.ipPnunit[ipPun],
"\t%.3e\t%.3e\n",pow(10.,rel),absval);
3069 else if( strcmp(
save.chSave[ipPun],
"LEIS") == 0)
3071 if( strcmp(chTime,
"LAST") != 0 )
3074 double col_ci , col_oi , col_cii, col_heii;
3075 if(
cdColm(
"carb" , 1 , &col_ci ) )
3077 if(
cdColm(
"carb" , 2 , &col_cii ) )
3079 if(
cdColm(
"oxyg" , 1 , &col_oi ) )
3081 if(
cdColm(
"heli" , 2 , &col_heii ) )
3084 fprintf(
save.ipPnunit[ipPun],
3085 "%.5e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t"
3086 "%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t"
3087 "%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t"
3088 "%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t"
3089 "%.3e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\n",
3095 rfield.extin_mag_V_point,
3124 hmi.H2_Solomon_dissoc_rate_used_H2g ,
3125 gv.rate_h2_form_grains_used_total,
3126 hmi.H2_photodissoc_used_H2g,
3127 hmi.UV_Cont_rel2_Draine_DB96_depth,
3129 mole.findrk(
"PHOTON,CO=>C,O"),
3141 -1.*
MIN2(0.,
gv.GasCoolColl),
3145 hmi.HeatH2Dish_used,
3147 hmi.HeatH2Dexc_used ,
3169 else if( strcmp(
save.chSave[ipPun],
"NLTE") == 0)
3171 if( strcmp(chTime,
"LAST") == 0 )
3181 else if( strcmp(
save.chSave[ipPun],
"LY1") == 0)
3183 static bool runonce =
true;
3186 for(
long ipHi=0; ipHi <
FeII.nFeIILevel_malloc; ipHi++ )
3190 fprintf(
save.ipPnunit[ipPun],
"%li\t%10.3f\t%3.1f\n",ipHi+1,
FeII.FeIINRGs[ipHi],
FeII.FeIISTWT[ipHi]);
3193 fprintf(
save.ipPnunit[ipPun],
"-1\n");
3198 else if( strcmp(
save.chSave[ipPun],
"LY2") == 0)
3200 static bool runonce =
true;
3203 for(
long ipLo = 0; ipLo <
FeII.nFeIILevel_malloc; ipLo++)
3205 for(
long ipHi=0; ipHi <
FeII.nFeIILevel_malloc; ipHi++ )
3207 if(
FeII.FeIIAul[ipHi][ipLo] >= 0. &&
FeII.FeIIAul[ipHi][ipLo] != 1e-5f &&
FeII.FeIIAul[ipHi][ipLo] != 1e-6f )
3209 fprintf(
save.ipPnunit[ipPun],
"A\t%li\t%li\t%8.2e\n",
3210 ipLo+1,ipHi+1,
FeII.FeIIAul[ipHi][ipLo]);
3215 fprintf(
save.ipPnunit[ipPun],
"-1\n");
3220 else if( strcmp(
save.chSave[ipPun],
"LY3") == 0)
3222 static realnum tt[8]={1e3f,3e3f,5e3f,7e3f,1e4f,12e3f,15e3f,2e4f};
3223 static bool runonce =
true;
3226 fprintf(
save.ipPnunit[ipPun],
"TEMP\t8");
3227 for(
int k = 0; k < 8; k++)
3229 fprintf(
save.ipPnunit[ipPun],
"\t%8.2e",tt[k]);
3231 fprintf(
save.ipPnunit[ipPun],
"\n");
3232 for(
long ipHi = 1; ipHi <
FeII.nFeIILevel_malloc; ipHi++)
3234 for(
long ipLo=0; ipLo < ipHi; ipLo++ )
3236 bool skipLine =
false;
3237 for(
int k = 0; k < 8; k++)
3239 if(
FeII.FeIIColl[ipHi][ipLo][k] == -2. ||
FeII.FeIIColl[ipHi][ipLo][k] == 0.)
3247 fprintf(
save.ipPnunit[ipPun],
"CSELECTRON\t%li\t%li",ipLo+1,ipHi+1);
3248 for(
int k = 0; k < 8; k++)
3250 fprintf(
save.ipPnunit[ipPun],
"\t%8.2e",
FeII.FeIIColl[ipHi][ipLo][k]);
3252 fprintf(
save.ipPnunit[ipPun],
"\n");
3257 fprintf(
save.ipPnunit[ipPun],
"-1\n");
3261 else if( strcmp(
save.chSave[ipPun],
"LLST") == 0)
3264 if( strcmp(chTime,
"LAST") == 0 )
3266 fprintf(
save.ipPnunit[ipPun],
"iteration %li" ,
iteration );
3267 if(
save.punarg[ipPun][1] )
3268 fprintf(
save.ipPnunit[ipPun],
"\n" );
3271 if(
save.nLineList[ipPun] < 0 )
3275 if(
save.lgEmergent[ipPun] )
3277 if(
save.lgCumulative[ipPun] )
3281 for( j=0; j<
save.nLineList[ipPun]; ++j )
3283 double relative , absolute, PrtQuantity;
3284 if( (
cdLine(
save.chLineListLabel[ipPun][j] ,
3285 save.wlLineList[ipPun][j] ,
3286 &relative , &absolute , LineType ) ) <=0 )
3288 if( !
h2.lgEnabled && strncmp(
save.chLineListLabel[ipPun][j] ,
"H2 " , 4 )==0 )
3290 static bool lgMustPrintFirstTime =
true;
3291 if( lgMustPrintFirstTime )
3294 fprintf(
ioQQQ,
"Did not find an H2 line, the large model is not "
3295 "included, so I will ignore it. Log intensity set to -30.\n" );
3296 fprintf(
ioQQQ,
"I will totally ignore any future missed H2 lines\n");
3297 lgMustPrintFirstTime =
false;
3310 fprintf(
ioQQQ,
"DISASTER - did not find a line in the Line List table\n");
3319 if(
save.punarg[ipPun][0] > 0 )
3320 PrtQuantity = pow(10. , absolute);
3322 PrtQuantity = relative;
3325 if(
save.punarg[ipPun][1] )
3328 if(
save.lgLineListRatio[ipPun] &&
is_odd(j) )
3329 fprintf(
save.ipPnunit[ipPun] ,
"/" );
3331 fprintf(
save.ipPnunit[ipPun],
"%s ",
save.chLineListLabel[ipPun][j] );
3334 fprintf(
save.ipPnunit[ipPun],
"%s ", chTemp );
3339 if(
save.lgLineListRatio[ipPun] )
3342 static double SaveQuantity = 0;
3344 fprintf(
save.ipPnunit[ipPun],
"\t%.4e" ,
3345 SaveQuantity /
SDIV( PrtQuantity ) );
3347 SaveQuantity = PrtQuantity;
3351 fprintf(
save.ipPnunit[ipPun],
"\t%.4e" , PrtQuantity );
3354 if(
save.punarg[ipPun][1] )
3356 if( !
save.lgLineListRatio[ipPun] ||
3358 fprintf(
save.ipPnunit[ipPun],
"\n" );
3361 fprintf(
save.ipPnunit[ipPun],
"\n" );
3365 else if( strcmp(
save.chSave[ipPun],
"CHRT") == 0)
3368 if( strcmp(chTime,
"LAST") != 0 )
3370 bool lgHeader, lgData;
3371 if(
save.lgPunHeader[ipPun] )
3377 save.lgPunHeader[ipPun] =
false;
3384 else if( strcmp(
save.chSave[ipPun],
"MAP ") == 0 )
3388 if( !
hcmap.lgMapDone &&
3389 (
nzone ==
hcmap.MapZone || strcmp(chTime,
"LAST") == 0 ) )
3391 lgTlkSav =
called.lgTalk;
3393 hcmap.lgMapBeingDone =
true;
3395 called.lgTalk = lgTlkSav;
3399 else if( strcmp(
save.chSave[ipPun],
"MOLE") == 0 )
3401 if(
save.lgPunHeader[ipPun] )
3403 fprintf(
save.ipPnunit[ipPun],
3404 "#molecular species will follow:\n");
3405 fprintf(
save.ipPnunit[ipPun],
3406 "#depth\tAV(point)\tAV(extend)\tCO diss rate\tC recom rate");
3410 fprintf(
save.ipPnunit[ipPun],
"\t%s",
mole_global.list[i]->label.c_str() );
3412 fprintf (
save.ipPnunit[ipPun],
"\n");
3413 save.lgPunHeader[ipPun] =
false;
3415 if( strcmp(chTime,
"LAST") != 0 )
3418 fprintf(
save.ipPnunit[ipPun],
"%.5e\t" ,
radius.depth_mid_zone );
3421 fprintf(
save.ipPnunit[ipPun],
"%.2e\t" ,
rfield.extin_mag_V_point);
3424 fprintf(
save.ipPnunit[ipPun],
"%.2e\t" ,
rfield.extin_mag_V_extended);
3427 fprintf(
save.ipPnunit[ipPun],
"%.5e\t" ,
mole.findrk(
"PHOTON,CO=>C,O") );
3435 fprintf(
save.ipPnunit[ipPun],
"\t%.2e",
mole.species[j].den );
3438 fprintf(
save.ipPnunit[ipPun],
"\n");
3442 else if( strcmp(
save.chSave[ipPun],
"OPAC") == 0 )
3445 if(
save.lgSaveEveryZone[ipPun] || strcmp(chTime,
"LAST") == 0 )
3450 else if( strcmp(
save.chSave[ipPun],
"OPTc") == 0 )
3452 if(
save.lgSaveEveryZone[ipPun] || strcmp(chTime,
"LAST") == 0 )
3454 for( j=0; j <
rfield.nflux; j++ )
3456 fprintf(
save.ipPnunit[ipPun],
3457 "%13.5e\t%.3e\t%12.4e\t%.3e\n",
3459 opac.TauAbsFace[j]+
opac.TauScatFace[j],
3461 opac.TauScatFace[j] );
3467 else if( strcmp(
save.chSave[ipPun],
"OPTf") == 0 )
3469 if(
save.lgSaveEveryZone[ipPun] || strcmp(chTime,
"LAST") == 0 )
3472 if(
save.punarg[ipPun][0] > 0. )
3479 if(
save.punarg[ipPun][1]> 0. )
3486 nskip = (long)
save.punarg[ipPun][2];
3493 for( jj=1; jj<nskip; ++jj )
3495 sum1 +=
rfield.fine_opt_depth[j+jj];
3496 sum2 +=
rfield.fine_opac_zone[j+jj];
3497 xnu +=
rfield.fine_anu[j+jj];
3500 fprintf(
save.ipPnunit[ipPun],
3501 "%12.6e\t%.3e\t%.3e\n",
3506 }
while( j < nu_hi );
3510 else if( strcmp(
save.chSave[ipPun],
" OTS") == 0 )
3519 for( j=0; j <
rfield.nflux; j++ )
3521 opConSum +=
rfield.otscon[j]*
opac.opacity_abs[j];
3522 opLinSum +=
rfield.otslin[j]*
opac.opacity_abs[j];
3523 if(
rfield.otslin[j]*
opac.opacity_abs[j] > xLinMax )
3525 xLinMax =
rfield.otslin[j]*
opac.opacity_abs[j];
3528 if(
rfield.otscon[j]*
opac.opacity_abs[j] > ConMax )
3530 ConMax =
rfield.otscon[j]*
opac.opacity_abs[j];
3534 fprintf(
save.ipPnunit[ipPun],
3535 "tot con lin=%.2e%.2e lin=%.4s%.4e%.2e con=%.4s%.4e%.2e\n",
3536 opConSum, opLinSum,
rfield.chLineLabel[ipLinMax-1]
3537 ,
rfield.anu[ipLinMax-1], xLinMax,
rfield.chContLabel[ipConMax-1]
3538 ,
rfield.anu[ipConMax-1], ConMax );
3541 else if( strcmp(
save.chSave[ipPun],
"OVER") == 0 )
3550 if( strcmp(chTime,
"LAST") != 0 )
3554 fprintf(
save.ipPnunit[ipPun],
"%.5e\t",
radius.depth_mid_zone );
3559 fprintf(
save.ipPnunit[ipPun],
"%.4f\t%.3f",
3565 fprintf(
save.ipPnunit[ipPun],
"%.4f\t%.3f",
3570 fprintf(
save.ipPnunit[ipPun],
"\t%.4f\t%.4f",
3574 fprintf(
save.ipPnunit[ipPun],
"\t%.4f",
3579 fprintf(
save.ipPnunit[ipPun],
"\t%.4f\t%.4f",
3584 for( j=1; j <= 3; j++ )
3588 fprintf(
save.ipPnunit[ipPun],
"\t%.4f",
3595 hold =
MAX2(toosmall, hold );
3596 fprintf(
save.ipPnunit[ipPun],
"\t%.4f", log10(hold) );
3599 for( j=1; j <= 4; j++ )
3603 fprintf(
save.ipPnunit[ipPun],
"\t%.4f",
3608 for( j=1; j <= 6; j++ )
3612 fprintf(
save.ipPnunit[ipPun],
"\t%.4f",
3619 hold =
MAX2(toosmall, hold );
3620 fprintf(
save.ipPnunit[ipPun],
"\t%.4f", log10(hold) );
3623 fprintf(
save.ipPnunit[ipPun],
"\t%.2e" ,
rfield.extin_mag_V_point);
3626 fprintf(
save.ipPnunit[ipPun],
"\t%.2e\n" ,
rfield.extin_mag_V_extended);
3630 else if( strcmp(
save.chSave[ipPun],
" PDR") == 0 )
3633 if( strcmp(chTime,
"LAST") != 0 )
3642 fprintf(
save.ipPnunit[ipPun],
3643 "%.5e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t%.2e\t",
3658 hmi.UV_Cont_rel2_Habing_TH85_depth);
3661 fprintf(
save.ipPnunit[ipPun],
"%.2e\t" ,
rfield.extin_mag_V_point);
3664 fprintf(
save.ipPnunit[ipPun],
"%.2e\t" ,
rfield.extin_mag_V_extended);
3667 fprintf(
save.ipPnunit[ipPun],
"%.2e\n" ,
opac.TauAbsGeo[0][
rfield.ipV_filter] );
3672 else if( strcmp(
save.chSave[ipPun],
"PERF") == 0 )
3674 if( strcmp(chTime,
"LAST") != 0 )
3676 static double ElapsedTime , ZoneTime;
3685 ZoneTime = t - ElapsedTime;
3690 fprintf(
save.ipPnunit[ipPun],
" %ld\t%.3f\t%.2f\t%li",
3691 nzone, ZoneTime , ElapsedTime,
conv.nPres2Ioniz );
3693 for(
long i=0; i<
NTYPES; ++i )
3694 fprintf(
save.ipPnunit[ipPun],
"\t%li",
conv.getCounterZone(i) );
3695 fprintf(
save.ipPnunit[ipPun],
"\n" );
3699 else if( strcmp(
save.chSave[ipPun],
"PHYS") == 0 )
3701 if( strcmp(chTime,
"LAST") != 0 )
3704 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.4e\t%.3e\t%.3e\t%.3e\t%.3e\t%.3e\n",
3710 else if( strcmp(
save.chSave[ipPun],
"PRES") == 0 )
3713 if( strcmp(chTime,
"LAST") != 0 )
3715 fprintf(
save.ipPnunit[ipPun],
3716 "%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%.5e\t%c\n",
3734 pressure.pres_radiation_lines_curr,
3740 timesc.sound_speed_adiabatic/1e5,
3758 else if( strcmp(
save.chSave[ipPun],
"PREL") == 0 )
3761 fprintf(
save.ipPnunit[ipPun],
3762 "%.5e\t%.3e\t%.3e\t",
3771 else if(
save.chSave[ipPun][0]==
'R' )
3774 if( strcmp(
save.chSave[ipPun],
"RADI") == 0 )
3777 if( strcmp(chTime,
"LAST") != 0 )
3779 fprintf(
save.ipPnunit[ipPun],
"%ld\t%.5e\t%.4e\t%.4e\n",
3785 else if( strcmp(
save.chSave[ipPun],
"RADO") == 0 )
3788 if( strcmp(chTime,
"LAST") == 0 )
3790 fprintf(
save.ipPnunit[ipPun],
"%ld\t%.5e\t%.4e\t%.4e\n",
3796 else if( strcmp(
save.chSave[ipPun],
"RESU") == 0 )
3799 if( strcmp(chTime,
"LAST") == 0 )
3809 else if( strcmp(
save.chSave[ipPun],
"SECO") == 0 )
3812 if( strcmp(chTime,
"LAST") != 0 )
3813 fprintf(
save.ipPnunit[ipPun],
3814 "%.5e\t%.3e\t%.3e\t%.3e\n",
3821 else if( strcmp(
save.chSave[ipPun],
"SOUS") == 0 )
3825 if( strcmp(chTime,
"LAST") != 0 )
3828 for( j=0; j < limit; j++ )
3830 fprintf(
save.ipPnunit[ipPun],
3831 "%.5e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4e\n",
3834 opac.opacity_abs[j],
3842 else if( strcmp(
save.chSave[ipPun],
"SOUD") == 0 )
3847 fprintf(
save.ipPnunit[ipPun],
3848 "%.4e\t%.4e\t%.4e\t%.4e\n",
3849 opac.TauAbsFace[j-1],
3856 else if( strcmp(
save.chSave[ipPun],
"SPEC") == 0 )
3862 else if( strcmp(
save.chSave[ipPun],
"SPCS") == 0 )
3864 if( ( strcmp(chTime,
"LAST") != 0 && strcmp(
save.chSaveArgs[ipPun],
"COLU") != 0 ) ||
3865 ( strcmp(chTime,
"LAST") == 0 && strcmp(
save.chSaveArgs[ipPun],
"COLU") == 0 ) )
3869 else if( strcmp(
save.chSave[ipPun],
"TEMP") == 0 )
3871 static double deriv_old=-1;
3872 double deriv=-1. , deriv_sec;
3874 fprintf(
save.ipPnunit[ipPun],
"%.5e\t%.4e\t%.2e",
3882 fprintf(
save.ipPnunit[ipPun],
"\t%.2e", deriv );
3886 deriv_sec = (deriv-deriv_old)/
radius.drad;
3887 fprintf(
save.ipPnunit[ipPun],
"\t%.2e",
3892 fprintf(
save.ipPnunit[ipPun],
"\n");
3896 else if( strcmp(
save.chSave[ipPun],
"TIMD") == 0 )
3898 if( strcmp(chTime,
"LAST") == 0 )
3903 else if( strcmp(
save.chSave[ipPun],
"XTIM") == 0 )
3905 static double ElapsedTime , ZoneTime;
3914 ZoneTime = t - ElapsedTime;
3919 fprintf(
save.ipPnunit[ipPun],
" %ld\t%.3f\t%.2f\n",
3920 nzone, ZoneTime , ElapsedTime );
3923 else if( strcmp(
save.chSave[ipPun],
"TPRE") == 0 )
3926 fprintf(
save.ipPnunit[ipPun],
"%5ld %11.4e %11.4e %11.4e %g\n",
3931 else if( strcmp(
save.chSave[ipPun],
"WIND") == 0 )
3936 if( (
save.punarg[ipPun][0] == 0 && strcmp(chTime,
"LAST") == 0)
3939 (
save.punarg[ipPun][0] == 1 && strcmp(chTime,
"LAST") != 0 ) )
3941 fprintf(
save.ipPnunit[ipPun],
3942 "%.5e\t%.5e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4e\t%.4e\n",
3946 wind.AccelTotalOutward,
3950 wind.AccelGravity );
3954 else if( strcmp(
save.chSave[ipPun],
"XATT") == 0 )
3959 if( strcmp(chTime,
"LAST") == 0 )
3965 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
3970 else if( strcmp(
save.chSave[ipPun],
"XRFI") == 0 )
3975 if( strcmp(chTime,
"LAST") == 0 )
3981 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
3986 else if( strcmp(
save.chSave[ipPun],
"XINC") == 0 )
3991 if( strcmp(chTime,
"LAST") == 0 )
3997 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4002 else if( strcmp(
save.chSave[ipPun],
"XDFR") == 0 )
4007 if( strcmp(chTime,
"LAST") == 0 )
4013 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4018 else if( strcmp(
save.chSave[ipPun],
"XDFO") == 0 )
4023 if( strcmp(chTime,
"LAST") == 0 )
4029 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4034 else if( strcmp(
save.chSave[ipPun],
"XLNR") == 0 )
4039 if( strcmp(chTime,
"LAST") == 0 )
4045 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4050 else if( strcmp(
save.chSave[ipPun],
"XLNO") == 0 )
4055 if( strcmp(chTime,
"LAST") == 0 )
4061 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4066 else if( strcmp(
save.chSave[ipPun],
"XREF") == 0 )
4071 if( strcmp(chTime,
"LAST") == 0 )
4077 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4082 else if( strcmp(
save.chSave[ipPun],
"XTOT") == 0 )
4087 if( strcmp(chTime,
"LAST") == 0 )
4093 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4098 else if( strcmp(
save.chSave[ipPun],
"XTRN") == 0 )
4103 if( strcmp(chTime,
"LAST") == 0 )
4109 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4114 else if( strcmp(
save.chSave[ipPun],
"XSPM") == 0 )
4119 if( strcmp(chTime,
"LAST") == 0 )
4125 fprintf(
ioQQQ,
" Cannot save xspec files unless doing a grid.\n" );
4135 else if(
save.lgRealSave[ipPun] && lgNoHitFirstBranch )
4138 fprintf(
ioQQQ,
" PROBLEM DISASTER SaveDo does not recognize flag %4.4s set by ParseSave. This is impossible.\n",
4139 save.chSave[ipPun] );
4151 if( strcmp(chTime,
"LAST") == 0 &&
4153 save.lgHashEndIter[ipPun] &&
4154 save.lg_separate_iterations[ipPun] &&
4155 !
save.lgFITS[ipPun] )
4157 if(
dynamics.lgTimeDependentStatic && strcmp(
save.chHashString ,
"TIME_DEP" )==0 )
4159 fprintf(
save.ipPnunit[ipPun],
"\"time=%f\n",
4164 fprintf(
save.ipPnunit[ipPun],
"%s",
4165 save.chHashString );
4167 fprintf(
save.ipPnunit[ipPun],
" GRID_DELIMIT -- grid%09ld",
4169 fprintf(
save.ipPnunit[ipPun],
"\n" );
4173 fflush(
save.ipPnunit[ipPun] );