00001
00002
00003
00004 #include "cddefines.h"
00005 #include "physconst.h"
00006 #include "phycon.h"
00007 #include "iso.h"
00008 #include "rfield.h"
00009 #include "radius.h"
00010 #include "version.h"
00011 #include "called.h"
00012 #include "thermal.h"
00013 #include "dense.h"
00014 #include "continuum.h"
00015 #include "ipoint.h"
00016 #include "prt.h"
00017
00018 void PrtHeader(void)
00019 {
00020 long int i,
00021 ip2500,
00022 ip2kev;
00023 double absbol,
00024 absv,
00025 alfox,
00026 avpow,
00027 bolc,
00028 gpowl,
00029 pballog,
00030 pionl,
00031 qballog,
00032 qgaml,
00033 qheiil,
00034 qhel,
00035 ql,
00036 qxl,
00037 radpwl,
00038 ratio,
00039 solar,
00040 tcomp,
00041 tradio;
00042
00043 DEBUG_ENTRY( "PrtHeader()" );
00044
00045 if( !called.lgTalk )
00046 {
00047 return;
00048 }
00049
00050 if( prt.lgPrtCitations )
00051 {
00052
00053 fprintf( ioQQQ, "\n\nCloudy is a research project that involves the creative"
00054 " efforts of many people. It should be cited as follows:\n" );
00055 fprintf( ioQQQ, "Calculations were performed with version %s of Cloudy,"
00056 " last described by %s.\n\n",
00057 t_version::Inst().chVersion,
00058 t_version::Inst().chCitationShort);
00059 fprintf( ioQQQ, "The reference is:\n%s\n\n", t_version::Inst().chCitation );
00060 fprintf( ioQQQ, "In Latex this is:\n%s\n\n", t_version::Inst().chCitationLatex );
00061 DatabasePrintReference();
00062 fprintf(ioQQQ,"\n\n");
00063 }
00064
00065 fprintf( ioQQQ, " %4ldCellPeak",rfield.nflux );
00066 PrintE82(ioQQQ, rfield.anu[prt.ipeak-1] );
00067 fprintf( ioQQQ, " Lo");
00068 fprintf( ioQQQ,PrintEfmt("%9.2e", rfield.anu[0] - rfield.widflx[0]/2. ));
00069 fprintf( ioQQQ, "=%6.2fcm Hi-Con:",
00070 9.117e-6/(rfield.anu[0] - rfield.widflx[0]/2.) );
00071 PrintE82(ioQQQ,rfield.anu[rfield.nflux-1] + rfield.widflx[rfield.nflux-1]/2.);
00072 fprintf(ioQQQ," Ryd E(hi):");
00073 PrintE82(ioQQQ,rfield.egamry);
00074 fprintf(ioQQQ,"Ryd E(hi): %9.2f MeV\n", rfield.egamry*0.0000136 );
00075
00076 if( prt.xpow > 0. )
00077 {
00078 prt.xpow = (realnum)(log10(prt.xpow) + radius.pirsq);
00079 qxl = log10(prt.qx) + radius.pirsq;
00080 }
00081 else
00082 {
00083 prt.xpow = 0.;
00084 qxl = 0.;
00085 }
00086
00087 if( prt.powion > 0. )
00088 {
00089 pionl = log10(prt.powion) + radius.pirsq;
00090 avpow = prt.powion/rfield.qhtot/EN1RYD;
00091 }
00092 else
00093 {
00094 pionl = 0.;
00095 avpow = 0.;
00096 }
00097
00098
00099
00100 if( prt.pbal > 0. )
00101 {
00102 pballog = log10(MAX2(1e-30,prt.pbal)) + radius.pirsq;
00103 qballog = log10(MAX2(1e-30,rfield.qbal)) + radius.pirsq;
00104 }
00105 else
00106 {
00107 pballog = 0.;
00108 qballog = 0.;
00109 }
00110
00111 if( radius.pirsq > 0. )
00112 {
00113 fprintf( ioQQQ, " L(nu>1ryd):%9.4f Average nu:",pionl);
00114 PrintE93(ioQQQ, avpow);
00115 fprintf( ioQQQ," L( X-ray):%9.4f L(BalC):%9.4f Q(Balmer C):%9.4f\n",
00116 prt.xpow, pballog, qballog );
00117 if( pionl > 47. )
00118 {
00119 fprintf(ioQQQ,"\n\n WARNING - the continuum has a luminosity %.2e times greater than the sun.\n",
00120 pow( 10. , pionl-log10(SOLAR_LUMINOSITY) ) );
00121 fprintf(ioQQQ," WARNING - Is this correct? Check the luminosity commands.\n\n\n");
00122 }
00123 }
00124 else
00125 {
00126 fprintf( ioQQQ, " I(nu>1ryd):%9.4f Average nu:",pionl);
00127 PrintE93(ioQQQ, avpow);
00128 fprintf( ioQQQ," I( X-ray):%9.4f I(BalC):%9.4f Phi(BalmrC):%9.4f\n",
00129 prt.xpow,
00130 log10(MAX2(1e-30,prt.pbal)),
00131 log10(MAX2(1e-30,rfield.qbal)) );
00132 }
00133
00134 if( rfield.qhe > 0. )
00135 {
00136 qhel = log10(rfield.qhe) + radius.pirsq;
00137 }
00138 else
00139 {
00140 qhel = 0.;
00141 }
00142
00143 if( rfield.qheii > 0. )
00144 {
00145 qheiil = log10(rfield.qheii) + radius.pirsq;
00146 }
00147 else
00148 {
00149 qheiil = 0.;
00150 }
00151
00152 if( prt.q > 0. )
00153 {
00154 ql = log10(prt.q) + radius.pirsq;
00155 }
00156 else
00157 {
00158 ql = 0.;
00159 }
00160
00161 if( radius.pirsq != 0. )
00162 {
00163 fprintf( ioQQQ,
00164 " Q(1.0-1.8):%9.4f Q(1.8-4.0):%9.4f Q(4.0-20):"
00165 "%9.4f Q(20--):%9.4f Ion pht flx:",
00166 ql,
00167 qhel,
00168 qheiil,
00169 qxl);
00170 PrintE93(ioQQQ, rfield.qhtot );
00171 }
00172 else
00173 {
00174 fprintf( ioQQQ,
00175 " phi(1.0-1.8):%7.4f phi(1.8-4.0):%7.3f phi(4.0-20):"
00176 "%7.3f phi(20--):%7.3f Ion pht flx:",
00177 ql,
00178 qhel,
00179 qheiil,
00180 qxl );
00181 PrintE93(ioQQQ, rfield.qhtot );
00182 }
00183 fprintf( ioQQQ,"\n");
00184
00185
00186 if( rfield.anu[rfield.nflux-1] > 150. )
00187 {
00188
00189 ip2kev = ipoint(147.);
00190 ip2500 = ipoint(0.3645);
00191 if( rfield.flux[0][ip2500-1] > 1e-28 )
00192 {
00193 ratio = (rfield.flux[0][ip2kev-1]*rfield.anu[ip2kev-1]/rfield.widflx[ip2kev-1])/
00194 (rfield.flux[0][ip2500-1]*rfield.anu[ip2500-1]/rfield.widflx[ip2500-1]);
00195 }
00196 else
00197 {
00198 ratio = 0.;
00199 }
00200
00201 if( ratio > 0. )
00202 {
00203 alfox = log(ratio)/log(rfield.anu[ip2kev-1]/rfield.anu[ip2500-1]);
00204 }
00205 else
00206 {
00207 alfox = 0.;
00208 }
00209 }
00210 else
00211 {
00212 alfox = 0.;
00213 }
00214
00215 if( prt.GammaLumin > 0. )
00216 {
00217 gpowl = log10(prt.GammaLumin) + radius.pirsq;
00218 qgaml = log10(prt.qgam) + radius.pirsq;
00219 }
00220 else
00221 {
00222 gpowl = 0.;
00223 qgaml = 0.;
00224 }
00225
00226 if( prt.pradio > 0. )
00227 {
00228 radpwl = log10(prt.pradio) + radius.pirsq;
00229 }
00230 else
00231 {
00232 radpwl = 0.;
00233 }
00234
00235 if( radius.pirsq > 0. )
00236 {
00237 fprintf( ioQQQ,
00238 " L(gam ray):%9.4f Q(gam ray):%9.4f L(Infred):%9.4f Alf(ox):%9.4f Total lumin:%9.4f\n",
00239 gpowl, qgaml, radpwl, alfox, log10(continuum.TotalLumin) +
00240 radius.pirsq );
00241 }
00242 else
00243 {
00244 fprintf( ioQQQ,
00245 " I(gam ray):%9.4f phi(gam r):%9.4f I(Infred):%9.4f Alf(ox):%9.4f Total inten:%9.4f\n",
00246 gpowl, qgaml, radpwl, alfox, log10(continuum.TotalLumin) +
00247 radius.pirsq );
00248 }
00249
00250
00251 if( radius.lgRadiusKnown )
00252 {
00253 solar = log10(continuum.TotalLumin) + radius.pirsq - 33.5828;
00254 absbol = 4.75 - 2.5*solar;
00255
00256
00257
00258
00259 absv = -2.5*(log10(MAX2(1e-30,continuum.fluxv)) + radius.pirsq - 20.654202);
00260
00261
00262 if( continuum.fbeta > 0. )
00263 {
00264 continuum.fbeta = (realnum)(log10(MAX2(1e-37,continuum.fbeta)) + radius.pirsq);
00265 }
00266 else
00267 {
00268 continuum.fbeta = 0.;
00269 }
00270
00271 bolc = absbol - absv;
00272 fprintf( ioQQQ,
00273 " log L/Lsun:%9.4f Abs bol mg:%9.4f Abs V mag:%9.4f Bol cor:%9.4f nuFnu(Bbet):%9.4f\n",
00274 solar,
00275 absbol,
00276 absv,
00277 bolc,
00278 continuum.fbeta );
00279 }
00280
00281 rfield.cmcool = 0.;
00282 rfield.cmheat = 0.;
00283
00284 for( i=0; i < rfield.nflux; i++ )
00285 {
00286
00287 rfield.cmcool += (rfield.flux[0][i] + rfield.outlin[0][i] + rfield.outlin_noplot[i] +rfield.ConInterOut[i])*
00288 rfield.csigc[i];
00289
00290
00291
00292 rfield.cmheat += (rfield.flux[0][i] + rfield.outlin[0][i] + rfield.outlin_noplot[i] +rfield.ConInterOut[i])*
00293 rfield.csigh[i]*(1. + rfield.OccNumbIncidCont[i]);
00294 }
00295
00296 rfield.cmheat *= dense.eden*1e-15;
00297
00298
00299 rfield.cmcool *= dense.eden*4.*6.338e-6*1e-15;
00300
00301
00302 if( rfield.cmcool > 0. )
00303 {
00304 rfield.lgComUndr = false;
00305 tcomp = rfield.cmheat/rfield.cmcool;
00306 }
00307 else
00308 {
00309
00310 rfield.lgComUndr = true;
00311 tcomp = 0.;
00312 }
00313
00314
00315 if( phycon.TEnerDen > (1.05*tcomp) )
00316 {
00317 thermal.lgEdnGTcm = true;
00318 }
00319 else
00320 {
00321 thermal.lgEdnGTcm = false;
00322 }
00323
00324
00325 fprintf( ioQQQ, " U(1.0----):");
00326 PrintE93( ioQQQ, rfield.uh);
00327 fprintf( ioQQQ, " U(4.0----):");
00328 PrintE93( ioQQQ,rfield.uheii );
00329 fprintf( ioQQQ, " T(En-Den):");
00330 PrintE93( ioQQQ,phycon.TEnerDen );
00331 fprintf( ioQQQ, " T(Comp):");
00332 PrintE93( ioQQQ,tcomp );
00333 fprintf( ioQQQ, " nuJnu(912A):");
00334 PrintE93( ioQQQ,prt.fx1ryd );
00335 fprintf( ioQQQ, "\n");
00336
00337
00338 fprintf( ioQQQ, " Occ(FarIR):");
00339 PrintE93( ioQQQ, rfield.OccNumbIncidCont[0]);
00340 fprintf( ioQQQ, " Occ(H n=6):");
00341
00342 if( iso_sp[ipH_LIKE][ipHYDROGEN].n_HighestResolved_local + iso_sp[ipH_LIKE][ipHYDROGEN].nCollapsed_local >= 6 )
00343 {
00344 long ip6p = iso_sp[ipH_LIKE][ipHYDROGEN].QuantumNumbers2Index[6][1][2];
00345 PrintE93( ioQQQ, rfield.OccNumbIncidCont[iso_sp[ipH_LIKE][ipHYDROGEN].fb[ip6p].ipIsoLevNIonCon-1]);
00346 }
00347 else
00348 {
00349 PrintE93( ioQQQ, 0.);
00350 }
00351 fprintf( ioQQQ, " Occ(1Ryd):");
00352 PrintE93( ioQQQ, rfield.OccNumbIncidCont[iso_sp[ipH_LIKE][ipHYDROGEN].fb[ipH1s].ipIsoLevNIonCon-1]);
00353 fprintf( ioQQQ, " Occ(4R):");
00354 PrintE93( ioQQQ, rfield.OccNumbIncidCont[iso_sp[ipH_LIKE][ipHELIUM].fb[ipH1s].ipIsoLevNIonCon-1]);
00355 fprintf( ioQQQ, " Occ (Nu-hi):");
00356 PrintE93( ioQQQ, rfield.OccNumbIncidCont[rfield.nflux-1] );
00357 fprintf( ioQQQ, "\n");
00358
00359
00360 tradio = rfield.OccNumbIncidCont[0]*TE1RYD*rfield.anu[0];
00361 fprintf( ioQQQ, " Tbr(FarIR):");
00362 PrintE93( ioQQQ, tradio);
00363 fprintf( ioQQQ, " Tbr(H n=6):");
00364 if( iso_sp[ipH_LIKE][ipHYDROGEN].n_HighestResolved_local + iso_sp[ipH_LIKE][ipHYDROGEN].nCollapsed_local >= 6 )
00365 {
00366 long ip6p = iso_sp[ipH_LIKE][ipHYDROGEN].QuantumNumbers2Index[6][1][2];
00367 PrintE93( ioQQQ, rfield.OccNumbIncidCont[iso_sp[ipH_LIKE][ipHYDROGEN].fb[ip6p].ipIsoLevNIonCon-1]*TE1RYD*rfield.anu[iso_sp[ipH_LIKE][ipHYDROGEN].fb[ip6p].ipIsoLevNIonCon-1]);
00368 }
00369 else
00370 {
00371 PrintE93( ioQQQ, 0.);
00372 }
00373 fprintf( ioQQQ, " Tbr(1Ryd):");
00374 PrintE93( ioQQQ, rfield.OccNumbIncidCont[iso_sp[ipH_LIKE][ipHYDROGEN].fb[ipH1s].ipIsoLevNIonCon-1]*TE1RYD*rfield.anu[iso_sp[ipH_LIKE][ipHYDROGEN].fb[0].ipIsoLevNIonCon-1]);
00375 fprintf( ioQQQ, " Tbr(4R):");
00376 PrintE93( ioQQQ, rfield.OccNumbIncidCont[iso_sp[ipH_LIKE][ipHELIUM].fb[ipH1s].ipIsoLevNIonCon-1]*TE1RYD*rfield.anu[iso_sp[ipH_LIKE][ipHELIUM].fb[ipH1s].ipIsoLevNIonCon-1]);
00377 fprintf( ioQQQ, " Tbr (Nu-hi):");
00378 PrintE93( ioQQQ, rfield.OccNumbIncidCont[rfield.nflux-1]*TE1RYD*rfield.anu[rfield.nflux-1]);
00379 fprintf( ioQQQ, "\n");
00380
00381 if( tradio > 1e9 )
00382 {
00383 fprintf( ioQQQ,
00384 " >>>The radio brightness temperature is very large,%10.2eK at%10.2ecm. Is this physical???\n",
00385 tradio, 9.115e-6/rfield.anu[0] );
00386 }
00387
00388
00389 fprintf( ioQQQ, " \n" );
00390 return;
00391 }