32 fprintf(
ioQQQ,
" PrtMacros:\n FLT_IS_DBL\t");
34 fprintf(
ioQQQ,
"defined.\n");
37 fprintf(
ioQQQ ,
"\n DMALLOC\t");
39 fprintf(
ioQQQ,
"defined");
42 fprintf(
ioQQQ ,
"\n SYS_CONFIG\t");
44 fprintf(
ioQQQ,
"defined");
47 fprintf(
ioQQQ ,
"\n MPI_GRID_RUN\t");
49 fprintf(
ioQQQ,
"defined");
52 fprintf(
ioQQQ ,
"\n USE_GPROF\t");
54 fprintf(
ioQQQ,
"defined");
57 fprintf(
ioQQQ ,
"\n HAVE_FUNC\t");
59 fprintf(
ioQQQ,
"defined");
62 fprintf(
ioQQQ ,
"\n _MSC_VER\t");
64 fprintf(
ioQQQ,
"defined");
67 fprintf(
ioQQQ ,
"\n __INTEL_COMPILER\t");
68# ifdef __INTEL_COMPILER
69 fprintf(
ioQQQ,
"defined");
72 fprintf(
ioQQQ ,
"\n OLD_ASSERT\t");
74 fprintf(
ioQQQ,
"defined");
77 fprintf(
ioQQQ ,
"\n HAVE_POWI\t");
79 fprintf(
ioQQQ,
"defined");
82 fprintf(
ioQQQ ,
"\n HAVE_POW_DOUBLE_INT\t");
83# ifdef HAVE_POW_DOUBLE_INT
84 fprintf(
ioQQQ,
"defined");
87 fprintf(
ioQQQ ,
"\n HAVE_POW_DOUBLE_LONG\t");
88# ifdef HAVE_POW_DOUBLE_LONG
89 fprintf(
ioQQQ,
"defined");
92 fprintf(
ioQQQ ,
"\n HAVE_POW_FLOAT_INT\t");
93# ifdef HAVE_POW_FLOAT_INT
94 fprintf(
ioQQQ,
"defined");
97 fprintf(
ioQQQ ,
"\n HAVE_POW_FLOAT_LONG\t");
98# ifdef HAVE_POW_FLOAT_LONG
99 fprintf(
ioQQQ,
"defined");
102 fprintf(
ioQQQ ,
"\n HAVE_POW_FLOAT_DOUBLE\t");
103# ifdef HAVE_POW_FLOAT_DOUBLE
104 fprintf(
ioQQQ,
"defined");
107 fprintf(
ioQQQ ,
"\n HAVE_POW_DOUBLE_FLOAT\t");
108# ifdef HAVE_POW_DOUBLE_FLOAT
109 fprintf(
ioQQQ,
"defined");
112 fprintf(
ioQQQ ,
"\n");
134 prt.lgPrnAges =
true;
137 else if( p.
nMatch(
"ARRA") )
145 fprintf(
ioQQQ,
"An element name must appear on this PRINT ARRAYS ONLY xx command.\n");
149 prt.lgPrtArry[nelem] =
true;
156 prt.lgPrtArry[nelem] =
true;
161 else if( p.
nMatch(
"CITA") )
163 prt.lgPrtCitations =
true;
171 prt.lgPrintColumns =
true;
173 else if( p.
nMatch(
" OFF") )
176 prt.lgPrintColumns =
false;
184 else if( p.
nMatch(
"DEPA") )
199 nelem =
MAX2( nelem, ipISO );
202 iso_sp[ipISO][nelem].lgPrtDepartCoef =
true;
205 else if( p.
nMatch(
"CONS") )
211 else if( p.
nMatch(
"ERRO") )
217 else if( p.
nMatch(
"HEAT") )
220 prt.lgPrintHeating =
true;
223 else if( p.
nMatch(
"PATH") )
226 cpu.i().printDataPath();
230 else if( p.
nMatch(
"POPU"))
244 nelem =
MAX2(0,nelem);
252 fprintf(
ioQQQ,
"This iso-sequence (%s) and element (%s) are impossible.\n",
259 iso_sp[ipISO][nelem].lgPrtLevelPops =
true;
263 else if( p.
nMatch(
"LAST") )
265 prt.lgPrtLastIt =
true;
269 else if( p.
nMatch(
"LINE") )
274 prt.lgPrnPump =
true;
275 prt.lgPrnColl =
true;
276 prt.lgPrnHeat =
true;
279 else if( p.
nMatch(
"CELL") )
283 prt.lgPrnLineCell =
true;
286 p.
NoNumb(
"cell for line print" );
287 if(
prt.nPrnLineCell < 1 )
290 fprintf(
ioQQQ ,
"The cell number on the PRINT LINE CELL command must be positive.\n");
291 fprintf(
ioQQQ ,
"The cell number was %li.\n" ,
prt.nPrnLineCell);
295 else if( p.
nMatch(
"COLL") )
302 prt.lgPrnIsoCollapsed =
true;
307 prt.lgPrnColl =
true;
311 else if( p.
nMatch(
"COLU") )
314 prt.lgPrtLineArray =
false;
318 prt.lgPrtLineLog =
false;
334 prt.lgFaintOn =
false;
339 " There faintest line to print must be on this line, sorry.\n" );
345 if( a <= 0. || p.
nMatch(
" LOG") )
358 prt.lgPrintFluxEarth =
true;
365 h2.nElecLevelOutput = -1;
368 else if( p.
nMatch(
"HEAT") )
371 prt.lgPrnHeat =
true;
374 else if( p.
nMatch(
"INWA") )
377 prt.lgPrnInwd =
true;
386 prt.lgPrtTau =
false;
398 fprintf(
ioQQQ,
" There must be a number for the FAINT option. They are HEAD and ZONE. Sorry.\n" );
404 else if( p.
nMatch(
"PUMP") )
407 prt.lgPrnPump =
true;
410 else if( p.
nMatch(
"SORT") )
415 prt.lgSortLines =
true;
420 prt.lgSortLineIntensity =
false;
421 prt.lgSortLineWavelength =
true;
433 fprintf(
ioQQQ,
" There must be two numbers for the RANGE option, the lower and upper wavelength. Sorry.\n" );
436 if(
prt.wlSort1 <0. ||
prt.wlSort2 <0. ||
437 prt.wlSort1 >=
prt.wlSort2 )
439 fprintf(
ioQQQ,
" The lower and upper wavelength must be positive and in the correct order. Sorry.\n" );
449 else if( p.
nMatch(
"INTE") )
453 prt.lgSortLineIntensity =
true;
454 prt.lgSortLineWavelength =
false;
458 fprintf(
ioQQQ,
"I can sort by wavelength or intensity - one must be specified.\nSorry.\n" );
463 else if( p.
nMatch(
" SUM") )
472 prt.lgSurfaceBrightness =
true;
477 prt.lgSurfaceBrightness_SR =
false;
482 prt.lgSurfaceBrightness_SR =
true;
486 else if( p.
nMatch(
"CUMU") )
489 prt.lgPrintLineCumulative =
true;
494 fprintf(
ioQQQ,
"One of the keys should have appeared. \nPlease consult Hazy.\nSorry.\n" );
500 else if( p.
nMatch(
"MASE") )
502 prt.lgPrtMaser =
true;
505 else if( p.
nMatch(
"ONLY") )
508 prt.lgOnlyZone =
true;
510 else if( p.
nMatch(
"HEAD") )
511 prt.lgOnlyHead =
true;
515 fprintf(
ioQQQ,
" There must be a keyword for the ONLY option. They are HEAD and ZONE. Sorry.\n" );
520 else if( p.
nMatch(
"STAR") )
524 prt.lgPrtStart =
true;
529 " The zone on which the print is to start MUST be entered on this line. Sorry.\n" );
535 else if( p.
nMatch(
"CONT") )
540 fprintf(
ioQQQ ,
" PROBLEM The PRINT CONTINUUM BLOCK command has been removed. Ignored for now.\n");
542 else if( p.
nMatch(
"INDI" ))
548 prt.lgPrtContIndices =
true;
564 fprintf(
ioQQQ,
" PROBLEM PRINT CONTINUUM command is now the default, and the command has been removed.\n" );
568 else if( p.
nMatch(
"COOL") )
588 else if( p.
nMatch(
"MACR") )
594 else if( p.
nMatch(
" ON ") )
607 else if (p.
nMatch(
"RECOMB"))
609 ionbal.lgRecom_Badnell_print =
true;
613 else if( p.
nMatch(
"SHOR") )
616 prt.lgPrtShort =
true;
618 prt.TooFaint = 0.001f;
621 else if( p.
nMatch(
"VERS") )
624 fprintf(
ioQQQ,
"\nThis is Cloudy %s\n%s\n\n" ,
629 else if( p.
nMatch(
"VOIGT") )
635 fprintf(
ioQQQ,
" The damping constant must appear on the print voigt command. Sorry.\n" );
639 const long NVOIGT=100;
640 realnum xprofile[NVOIGT], profileVoigtH[NVOIGT];
641 for(
long i=0; i<NVOIGT; ++i )
644 VoigtH( damp, xprofile, profileVoigtH, NVOIGT );
646 fprintf(
ioQQQ,
"\n x VoigtH\n");
647 for(
long int i=0; i<NVOIGT; ++i )
649 fprintf(
ioQQQ,
"%.4e %.4e\n", xprofile[i], profileVoigtH[i] );
660 fprintf(
ioQQQ,
" The number of zones to print MUST be entered on this line. Sorry.\n" );
679 fprintf(
ioQQQ,
" There MUST be a keyword on the following line. Sorry.\n" );
680 fprintf(
ioQQQ,
" The PRINT FAINT command is now the PRINT LINE FAINT command.\n" );
693 fprintf(
ioQQQ,
"\n\nPhysical constants used by Cloudy, taken from physconst.h\n");
695 fprintf(
ioQQQ,
"EE\t%.15g\n",
EE);
697 fprintf(
ioQQQ,
"PI\t%.15g\n",
PI);
711 fprintf(
ioQQQ,
"AU\t%.15g\n",
AU);
755 fprintf(
ioQQQ,
"Some other interesting sizes:\n");
756 fprintf(
ioQQQ,
"bool\t%lu\n",(
unsigned long)
sizeof(
bool));
757 fprintf(
ioQQQ,
"char\t%lu\n",(
unsigned long)
sizeof(
char));
758 fprintf(
ioQQQ,
"int\t%lu\n",(
unsigned long)
sizeof(
int));
759 fprintf(
ioQQQ,
"long int\t%lu\n",(
unsigned long)
sizeof(
long int));
760 fprintf(
ioQQQ,
"unsigned int\t%lu\n",(
unsigned long)
sizeof(
unsigned int));
762 fprintf(
ioQQQ,
"realnum\t%lu\n",(
unsigned long)
sizeof(
realnum));
763 fprintf(
ioQQQ,
"double\t%lu\n",(
unsigned long)
sizeof(
double));
764 fprintf(
ioQQQ,
"double*\t%lu\n",(
unsigned long)
sizeof(
double*));
767 fprintf(
ioQQQ,
"Some constants from float.h.\n");
769 fprintf(
ioQQQ,
"DBL_DIG \t%i\n", DBL_DIG);
770 fprintf(
ioQQQ,
"DBL_EPSILON \t%.15g\n",DBL_EPSILON);
771 fprintf(
ioQQQ,
"DBL_MANT_DIG\t%i\n",DBL_MANT_DIG);
772 fprintf(
ioQQQ,
"DBL_MAX\t%.15g\n", DBL_MAX);
773 fprintf(
ioQQQ,
"DBL_MAX_10_EXP\t%i\n", DBL_MAX_10_EXP);
774 fprintf(
ioQQQ,
"DBL_MAX_EXP\t%i\n", DBL_MAX_EXP);
775 fprintf(
ioQQQ,
"DBL_MIN\t%.15g\n", DBL_MIN);
777 fprintf(
ioQQQ,
"FLT_DIG\t%i\n", FLT_DIG);
778 fprintf(
ioQQQ,
"FLT_EPSILON\t%.15g\n", FLT_EPSILON);
779 fprintf(
ioQQQ,
"FLT_MANT_DIG\t%i\n", FLT_MANT_DIG);
780 fprintf(
ioQQQ,
"FLT_MAX\t%.15g\n", FLT_MAX);
781 fprintf(
ioQQQ,
"FLT_MAX_10_EXP\t%i\n", FLT_MAX_10_EXP);
782 fprintf(
ioQQQ,
"FLT_MAX_EXP\t%i\n", FLT_MAX_EXP);
783 fprintf(
ioQQQ,
"FLT_MIN\t%.15g\n", FLT_MIN);
790 fprintf(
ioQQQ,
"\nThis machine has %ld threads.\n",
cpu.i().nCPU() );
#define DEBUG_ENTRY(funcname)
long int GetElem(void) const
bool nMatch(const char *chKey) const
NORETURN void NoNumb(const char *chDesc) const
int PrintLine(FILE *fp) const
static t_version & Inst()
UNUSED const realnum BIGFLOAT
t_elementnames elementnames
diatomics h2("h2", 4100., &hmi.H2_total, Yan_H2_CS)
t_iso_sp iso_sp[NISO][LIMELM]
STATIC void PrtMacros(void)
void ParsePrint(Parser &p)
STATIC void prt_constants(void)
void ParsePrtLineSum(Parser &p)
UNUSED const double H_BAR
UNUSED const double SOLAR_MASS
UNUSED const double AS1RAD
UNUSED const double TRANS_PROB_CONST
UNUSED const double FR1RYD
UNUSED const double BOHR_RADIUS_CM
UNUSED const double STEFAN_BOLTZ
UNUSED const double LOG10_E
UNUSED const double HPLANCK
UNUSED const double FINE_STRUCTURE
UNUSED const double SPEEDLIGHT
UNUSED const double BOLTZMANN
UNUSED const double HIONPOT
UNUSED const double ELECTRON_MASS
UNUSED const double SQAS_SKY
UNUSED const double LN_TWO
UNUSED const double FREQ_1EV
UNUSED const double SOLAR_LUMINOSITY
UNUSED const double RYDLAMHYD
UNUSED const double LN_TEN
UNUSED const double RYD_INF
UNUSED const double SQRTPIBY2
UNUSED const double EN1RYD
UNUSED const double EVRYD
UNUSED const double EN1EV
UNUSED const double OPTDEP2EXTIN
UNUSED const double ERG1CM
UNUSED const double GRAV_CONST
UNUSED const double EULER
UNUSED const double SQAS1SR
UNUSED const double PROTON_MASS
UNUSED const double ELECTRIC_CONST
UNUSED const double EVDEGK
UNUSED const double SQRT2
UNUSED const double RADIAN
UNUSED const double SQRTPI
UNUSED const double ATOMIC_MASS_UNIT
UNUSED const double HNU3C2
UNUSED const double ELEM_CHARGE
UNUSED const double COLL_CONST
UNUSED const double HBAReV
UNUSED const double ELEM_CHARGE_ESU
UNUSED const double MILNE_CONST
UNUSED const double TWO_PHOT_CONST
UNUSED const double WAVNRYD
UNUSED const double TE1RYD
UNUSED const double PARSEC
UNUSED const double HION_LTE_POP
UNUSED const double FR1RYDHYD
UNUSED const double RYDLAM
void VoigtH(realnum a, const realnum v[], realnum y[], int n)