cloudy  trunk
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
parse_print.cpp
Go to the documentation of this file.
1 /* This file is part of Cloudy and is copyright (C)1978-2008 by Gary J. Ferland and
2  * others. For conditions of distribution and use see copyright notice in license.txt */
3 /*ParsePrint parse the print command */
4 /*prt_constants print physical constants */
5 #include "cddefines.h"
6 #include "physconst.h"
7 #include "rfield.h"
8 #include "iso.h"
9 #include "iterations.h"
10 #include "lines.h"
11 #include "called.h"
12 #include "elementnames.h"
13 #include "prt.h"
14 #include "h2.h"
15 #include "parse.h"
16 #include "version.h"
17 /*prt_constants print physical constants */
18 STATIC void prt_constants(void);
19 
21  /* input line was converted to caps by calling routine */
22  char *chCARD_CAPS )
23 {
24  bool lgEOL;
25  int ipISO;
26  long int i,
27  j,
28  nelem,
29  num1;
30  double a;
31  double sum;
32 
33  DEBUG_ENTRY( "ParsePrint()" );
34 
35  /* >>chng 01 aug 91, had been series of if branches, and could hit more than
36  * one key - dangerous! changed to else if so only one hit per line possible */
37  if( nMatch("AGES",chCARD_CAPS) )
38  {
39  /* print all estimates of cloud timescales */
40  prt.lgPrnAges = true;
41  }
42 
43  else if( nMatch("ARRA",chCARD_CAPS) )
44  {
45  /* print arrays for ionization balance of heavy elements */
46  if( nMatch( "ONLY" , chCARD_CAPS ) )
47  {
48  /* returns element number on C scale */
49  if( (nelem = GetElem(chCARD_CAPS))<0 )
50  {
51  fprintf(ioQQQ,"An element name must appear on this PRINT ARRAYS ONLY xx command.\n");
52  cdEXIT(EXIT_FAILURE);
53  }
54  /* have the element number, turn on its print */
55  prt.lgPrtArry[nelem] = true;
56  }
57  else
58  {
59  /* this flag, print arrays for all elements */
60  for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
61  {
62  prt.lgPrtArry[nelem] = true;
63  }
64  }
65  }
66 
67  else if( nMatch("CITA",chCARD_CAPS) )
68  {
69  /* the print citations command */
70  fprintf( ioQQQ, "\n\nCloudy is a research project that involves the creative"
71  " efforts of many people. It should be cited as follows:\n" );
72  fprintf( ioQQQ, "Calculations were performed with version %s of Cloudy,"
73  " last described by %s.\n\n",
74  t_version::Inst().chVersion,
75  t_version::Inst().chCitationShort);
76  fprintf( ioQQQ, "The reference is:\n%s\n\n", t_version::Inst().chCitation );
77  fprintf( ioQQQ, "In Latex this is:\n%s\n\n", t_version::Inst().chCitationLatex );
78  }
79 
80  else if( nMatch("COLU",chCARD_CAPS) && nMatch("DENS",chCARD_CAPS) )
81  {
82  if( nMatch(" ON ",chCARD_CAPS) )
83  {
84  /* print column densities of elements - this is default */
85  prt.lgPrintColumns = true;
86  }
87  else if( nMatch(" OFF",chCARD_CAPS) )
88  {
89  /* print column densities of elements */
90  prt.lgPrintColumns = false;
91  }
92  }
93 
94  else if( nMatch("VERS",chCARD_CAPS) )
95  {
96  /* print compiler and code version information */
97  fprintf( ioQQQ, "\nThis is Cloudy %s\n%s\n\n" ,
98  t_version::Inst().chVersion,
99  t_version::Inst().chInfo );
100  }
101 
102  /* option to print departure coefficients in addition to level pops
103  * keywords He-like to do He-like sequence element, else do h-like
104  * element name, if not recognized, does hydrogen
105  * so with no options prints hydrogen itself */
106  else if( nMatch("DEPA",chCARD_CAPS) )
107  {
108  if( nMatch("HE-L",chCARD_CAPS) )
109  {
110  ipISO = ipHE_LIKE;
111  }
112  else
113  {
114  ipISO = ipH_LIKE;
115  }
116 
117  /* now check for element name */
118  nelem = GetElem( chCARD_CAPS );
119 
120  /* return value is < 0 if no element recognized - in this case use root of sequence */
121  nelem = MAX2( nelem, ipISO );
122 
123  /* print departure coefficients instead of hydrogen level populations */
124  iso.lgPrtDepartCoef[ipISO][nelem] = true;
125  }
126 
127  else if( nMatch("CONS",chCARD_CAPS) )
128  {
129  /* print physical constants, routine is below */
130  prt_constants();
131  }
132 
133  else if( nMatch("ERRO",chCARD_CAPS) )
134  {
135  /* print errors to special window */
136  lgPrnErr = true;
137  }
138 
139  else if( nMatch("HEAT",chCARD_CAPS) )
140  {
141  /* print heat arrays */
142  prt.lgPrintHeating = true;
143  }
144 
145  else if( nMatch("PATH",chCARD_CAPS) )
146  {
147  /* print the path */
148  cpu.printDataPath();
149  }
150 
151  /*else if( nMatch("H-LI",chCARD_CAPS))*/
152  else if( nMatch("POPU",chCARD_CAPS))
153  {
154  if( nMatch("HE-L",chCARD_CAPS) )
155  {
156  ipISO = ipHE_LIKE;
157  }
158  else
159  {
160  ipISO = ipH_LIKE;
161  }
162 
163  /* now check for element name */
164  nelem = GetElem( chCARD_CAPS );
165  /* return value is < 0 if no element recognized - in this case use H */
166  nelem = MAX2(0,nelem);
167 
168  /* if no element specified but he-like iso, then use helium */
169  if( nelem==0 && ipISO==ipHE_LIKE )
170  nelem = ipHELIUM;
171 
172  if( nelem < ipISO )
173  {
174  fprintf(ioQQQ,"This iso-sequence (%s) and element (%s) are impossible.\n",
176  elementnames.chElementName[nelem]);
177  cdEXIT(EXIT_FAILURE);
178  }
179 
180  /* print hydrogenic H-like level populations */
181  iso.lgPrtLevelPops[ipISO][nelem] = true;
182  }
183 
184  /* option to only print last iteration */
185  else if( nMatch("LAST",chCARD_CAPS) )
186  {
187  prt.lgPrtLastIt = true;
188  }
189 
190  /* the print line command as several options */
191  else if( nMatch("LINE",chCARD_CAPS) )
192  {
193  if( nMatch(" ALL",chCARD_CAPS) )
194  {
195  /* turn on all printed components */
196  prt.lgPrnPump = true;
197  prt.lgPrnColl = true;
198  prt.lgPrnHeat = true;
199  }
200 
201  else if( nMatch("CELL",chCARD_CAPS) )
202  {
203  /* print line cell on physics scale, first cell in continuum is 1
204  * give all lines in this cell */
205  prt.lgPrnLineCell = true;
206  i = 5;
207  prt.nPrnLineCell = (long)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
208  if( lgEOL )
209  NoNumb( chCARD_CAPS );
210  if( prt.nPrnLineCell < 1 )
211  {
212  /* non-positive cells are not allowed */
213  fprintf(ioQQQ , "The cell number on the PRINT LINE CELL command must be positive.\n");
214  fprintf(ioQQQ , "The cell number was %li.\n" , prt.nPrnLineCell);
215  }
216  }
217 
218  else if( nMatch("COLL",chCARD_CAPS) )
219  {
220  /* also print collisional contributions */
221  prt.lgPrnColl = true;
222  }
223 
224  else if( nMatch("COLU",chCARD_CAPS) )
225  {
226  /* option to print main line array as a single column */
227  prt.lgPrtLineArray = false;
228  /* this also has an option - liNEAR - to print linear quantity
229  * in exponential format */
230  if( nMatch("NEAR",chCARD_CAPS) )
231  prt.lgPrtLineLog = false;
232  }
233 
234  /* force printing emergent intensities */
235  else if( nMatch("EMER",chCARD_CAPS) && nMatch("GENT",chCARD_CAPS) )
236  {
237  prt.lgPrtLineEmergent = true;
238  LineSave.lgLineEmergent = true;
239  }
240 
241  else if( nMatch("FAIN",chCARD_CAPS) && !(nMatch("OPTI",chCARD_CAPS)&&nMatch("DEPT",chCARD_CAPS)) )
242  {
243  /* print line faint - above do not trigger on optical depth
244  * option to adjust intensity of faintest line to print */
245  /* >> 01 feb 01, move print faint into print line faint */
246  /* faintest line, rel to norm line, to print; either linear of log */
247  i = 5;
248  a = FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
249 
250  /* option for, if no number, keyword=" OFF", to print all lines */
251  if( lgEOL )
252  {
253  if( nMatch(" OFF",chCARD_CAPS) )
254  {
255  prt.lgFaintOn = false;
256  }
257  else
258  {
259  fprintf( ioQQQ,
260  " There faintest line to print must be on this line, sorry.\n" );
261  cdEXIT(EXIT_FAILURE);
262  }
263  }
264 
265  prt.lgFntSet = true;
266  if( a <= 0. )
267  {
268  prt.TooFaint = (realnum)pow(10.,a);
269  }
270  else
271  {
272  prt.TooFaint = (realnum)a;
273  }
274  }
275 
276  else if( nMatch("FLUX",chCARD_CAPS) && nMatch("EART",chCARD_CAPS))
277  {
278  /* print line flux seen at earth */
279  prt.lgPrintFluxEarth = true;
280  }
281 
282  else if( nMatch(" H2",chCARD_CAPS) && nMatch("ELEC",chCARD_CAPS) )
283  {
284  /* print H2 electronic lines too - -1 since number of electronic
285  * levels is not yet known, will set when H2 actually called */
286  h2.nElecLevelOutput = -1;
287  }
288 
289  else if( nMatch("HEAT",chCARD_CAPS) )
290  {
291  /* also print heating contributions */
292  prt.lgPrnHeat = true;
293  }
294 
295  else if( nMatch("INWA",chCARD_CAPS) )
296  {
297  /* also print inward contributions */
298  prt.lgPrnInwd = true;
299  }
300 
301  else if( nMatch("OPTI",chCARD_CAPS) && nMatch("DEPT",chCARD_CAPS) )
302  {
303  /* print line optical depths, with option for smallest to print */
304  if( nMatch(" OFF",chCARD_CAPS) )
305  {
306  /* turn off or on printing of optical depths - default off */
307  prt.lgPrtTau = false;
308  }
309  else
310  {
311  prt.lgPrtTau = true;
312  }
313  if( nMatch("FAIN",chCARD_CAPS) )
314  {
315  /* log of faintest optical depth, default is linear value of 0.1 */
316  i = 5;
317  prt.PrtTauFnt = (realnum)pow(10.,FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL));
318  if( lgEOL )
319  {
320  fprintf( ioQQQ, " There must be a number for the FAINT option. They are HEAD and ZONE. Sorry.\n" );
321  cdEXIT(EXIT_FAILURE);
322  }
323  }
324  }
325 
326  else if( nMatch("PUMP",chCARD_CAPS) )
327  {
328  /* also print pump contributions */
329  prt.lgPrnPump = true;
330  }
331 
332  else if( nMatch("SORT",chCARD_CAPS) )
333  {
334  /* >>chng 01 aug 18, print sort command works after all these years,
335  * sort by wavelength or intensity */
336  /* turn on sorting with respect to wavelength */
337  prt.lgSortLines = true;
338  if( nMatch("WAVE",chCARD_CAPS) )
339  {
340  /* sort by wavelength */
341  /* remember which one to do */
342  prt.lgSortLineIntensity = false;
343  prt.lgSortLineWavelength = true;
344 
345  /* wavelength has range option */
346  /* option to only certain print range of lines */
347  if( nMatch("RANG",chCARD_CAPS) )
348  {
349  i = 5;
350  prt.wlSort1 = (realnum)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
351  /* line was entered, look for possible micron or cm label */
352  if( chCARD_CAPS[i-1] == 'M' )
353  {
354  /* microns */
355  prt.wlSort1 *= 1e4;
356  }
357  else if( chCARD_CAPS[i-1] == 'C' )
358  {
359  /* microns */
360  prt.wlSort1 *= 1e8;
361  }
362  prt.wlSort2 = (realnum)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
363  /* line was entered, look for possible micron or cm label */
364  if( chCARD_CAPS[i-1] == 'M' )
365  {
366  /* microns */
367  prt.wlSort2 *= 1e4;
368  }
369  else if( chCARD_CAPS[i-1] == 'C' )
370  {
371  /* microns */
372  prt.wlSort2 *= 1e8;
373  }
374  if( lgEOL )
375  {
376  fprintf( ioQQQ, " There must be two numbers for the RANGE option, the lower and upper wavelength. Sorry.\n" );
377  cdEXIT(EXIT_FAILURE);
378  }
379  if( prt.wlSort1 <0. || prt.wlSort2 <0. ||
380  prt.wlSort1 >= prt.wlSort2 )
381  {
382  fprintf( ioQQQ, " The lower and upper wavelength must be positive and in the correct order. Sorry.\n" );
383  cdEXIT(EXIT_FAILURE);
384  }
385  }
386  else
387  {
388  prt.wlSort1 = -1;
389  prt.wlSort2 = 1e30f;
390  }
391  }
392  else if( nMatch("INTE",chCARD_CAPS) )
393  {
394  /* sort by intensity/luminosity */
395  /* remember which one to do */
396  prt.lgSortLineIntensity = true;
397  prt.lgSortLineWavelength = false;
398  }
399  else
400  {
401  fprintf( ioQQQ, "I can sort by wavelength or intensity - one must be specified.\nSorry.\n" );
402  cdEXIT(EXIT_FAILURE);
403  }
404  }
405 
406  else if( nMatch(" SUM",chCARD_CAPS) )
407  {
408  /* option to read in set of lines to sum over */
409  sum = PrtLineSum( "READ" );
410  /* sum is not used anywhere, following makes lint shut up */
411  if( false ) fprintf(ioQQQ,"%.2e\n", sum);
412  }
413 
414  else if( nMatch("SURF",chCARD_CAPS) && nMatch("BRIG",chCARD_CAPS) )
415  {
416  /* print surface brightness rather than 4pi J */
417  prt.lgSurfaceBrightness = true;
418  /* default is per sr, arcsec option changes to sq arcsec */
419  if( nMatch("ARCS",chCARD_CAPS ) )
420  {
421  /* use sr */
422  prt.lgSurfaceBrightness_SR = false;
423  }
424  else
425  {
426  /* use sq arcsec */
428  }
429  }
430  else
431  {
432  fprintf( ioQQQ, "One of the keys should have appeared. \nPlease consult Hazy.\nSorry.\n" );
433  cdEXIT(EXIT_FAILURE);
434  }
435  }
436 
437  /* print maser lines when TAV is called */
438  else if( nMatch("MASE",chCARD_CAPS) )
439  {
440  prt.lgPrtMaser = true;
441  }
442 
443  else if( nMatch("ONLY",chCARD_CAPS) )
444  {
445  if( nMatch("ZONE",chCARD_CAPS) )
446  prt.lgOnlyZone = true;
447 
448  else if( nMatch("HEAD",chCARD_CAPS) )
449  prt.lgOnlyHead = true;
450 
451  else
452  {
453  fprintf( ioQQQ, " There must be a keyword for the ONLY option. They are HEAD and ZONE. Sorry.\n" );
454  cdEXIT(EXIT_FAILURE);
455  }
456  }
457 
458  else if( nMatch("STAR",chCARD_CAPS) )
459  {
460  /* start printout at specified zone */
461  called.lgTalk = false;
462  prt.lgPrtStart = true;
463  i = 5;
464  prt.nstart = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
465  if( lgEOL )
466  {
467  fprintf( ioQQQ,
468  " The zone on which the print is to start MUST be entered on this line. Sorry.\n" );
469  cdEXIT(EXIT_FAILURE);
470  }
471  }
472 
473  /* print continuum command */
474  else if( nMatch("CONT",chCARD_CAPS) )
475  {
476  /* >>chng 01 jun 30, logic of keys swapped around, so no keyword gets nFnu info */
477  /* print continuum diffuse turns on nFnu continuum at many energies */
478  if( nMatch("BLOC",chCARD_CAPS) )
479  {
480  /* option to print emergent continuum at end of calculation*/
481  prt.lgPrtCont = true;
482  }
483  else if( nMatch("INDI" , chCARD_CAPS ))
484  {
485  /* option to print lines and continuum that go into each continuum
486  * index the continuum index is the cell within the continuum
487  * array - this identifies lines that occur within each
488  * continuum cell */
489  prt.lgPrtContIndices = true;
490  /* these are lower and upper limits to the energy range in Rydbergs.
491  * they are the first and second number on the command line, lower and
492  * upper bounds of the code are used if not specified */
493  i = 5;
494  /* if no number on line then zero is returned, this is fine, since
495  * we want the lower energy bound of the code */
496  prt.lgPrtContIndices_lo_E = (realnum)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
497  prt.lgPrtContIndices_hi_E = (realnum)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
498  /* if we hit end of line then use high-energy limit of code - that is,
499  * include all energies */
500  if( lgEOL )
502  }
503  else
504  {
505  /* option to print continuum points within emission lines block */
506  prt.lgPrnDiff = true;
507  }
508  }
509 
510  else if( nMatch("COOL",chCARD_CAPS) )
511  {
512  /* print cooling array for a specified one */
513  i = 5;
514  prt.nzdump = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
515 
516  /* dump all zones if argument is zero or not present */
517  if( lgEOL )
518  {
519  prt.nzdump = 0;
520  }
521  }
522 
523  else if( nMatch("QUIE",chCARD_CAPS) || (nMatch(" OFF",chCARD_CAPS) &&
524  !nMatch("FAIN" ,chCARD_CAPS)) )
525  {
526  /* in above, there is also a 'print faint off' command
527  * QUIET or OFF means turn off printout */
528  called.lgTalk = false;
529  }
530 
531  else if( nMatch(" ON ",chCARD_CAPS) )
532  {
533  /* on means turn on printout, lgTalkIsOK is set true in cdInit, but set
534  * false in dooptimize. this keeps printout quiet during optimize,
535  * even when init files are parsed */
536  /* called.lgTalkForcedOff was set true with cdTalk(false), if this was
537  * set then do not respect this command. this is to prevent print on at end
538  * of init file from turning on print in grids when print is turned off */
540  {
541  called.lgTalk = true;
542  }
543  }
544 
545  else if( nMatch("SHOR",chCARD_CAPS) )
546  {
547  /* make short printout, don't print last */
548  prt.lgPrtShort = true;
549  if( !prt.lgFntSet )
550  prt.TooFaint = 0.001f;
551  }
552 
553  else if( nMatch("EVER",chCARD_CAPS) )
554  {
555  /* print every nth zone */
556  i = 5;
557  num1 = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
558  if( lgEOL )
559  {
560  fprintf( ioQQQ, " The number of zones to print MUST be entered on this line. Sorry.\n" );
561  cdEXIT(EXIT_FAILURE);
562  }
563 
564  iterations.IterPrnt[0] = MAX2(num1,1);
565 
566  for( j=1; j < iterations.iter_malloc; j++ )
567  {
568  iterations.IterPrnt[j] = (long int)FFmtRead(chCARD_CAPS,&i,INPUT_LINE_LENGTH,&lgEOL);
569  if( lgEOL )
570  {
572  }
573  }
574  }
575 
576  /* check if no keywords were recognized. */
577  else
578  {
579  fprintf( ioQQQ, " There MUST be a keyword on the following line. Sorry.\n" );
580  fprintf( ioQQQ, " The PRINT FAINT command is now the PRINT LINE FAINT command.\n" );
581  fprintf( ioQQQ, " %80.80s\n", chCARD_CAPS );
582  cdEXIT(EXIT_FAILURE);
583  }
584  return;
585 }
586 
587 /*prt_constants print physical and machine constants */
589 {
590 
591  DEBUG_ENTRY( "prt_constants()" );
592 
593  fprintf(ioQQQ,"\n\nPhysical constants used by Cloudy, taken from physconst.h\n");
594 
595  fprintf(ioQQQ,"EE\t%.15g\n",EE);
596  fprintf(ioQQQ,"EULER\t%.15g\n",EULER);
597  fprintf(ioQQQ,"PI\t%.15g\n",PI);
598  fprintf(ioQQQ,"PI2\t%.15g\n",PI2);
599  fprintf(ioQQQ,"PI4\t%.15g\n",PI4);
600  fprintf(ioQQQ,"PI8\t%.15g\n",PI8);
601  fprintf(ioQQQ,"SQRT2\t%.15g\n",SQRT2);
602  fprintf(ioQQQ,"SQRTPI\t%.15g\n",SQRTPI);
603  fprintf(ioQQQ,"SQRTPIBY2\t%.15g\n",SQRTPIBY2);
604  fprintf(ioQQQ,"LN_TWO\t%.15g\n",LN_TWO);
605  fprintf(ioQQQ,"LN_TEN\t%.15g\n",LN_TEN);
606  fprintf(ioQQQ,"LOG10_E\t%.15g\n",LOG10_E);
607  fprintf(ioQQQ,"OPTDEP2EXTIN\t%.15g\n",OPTDEP2EXTIN);
608  fprintf(ioQQQ,"RADIAN\t%.15g\n",RADIAN);
609  fprintf(ioQQQ,"SOLAR_MASS\t%.15g\n",SOLAR_MASS);
610  fprintf(ioQQQ,"SOLAR_LUMINOSITY\t%.15g\n",SOLAR_LUMINOSITY);
611  fprintf(ioQQQ,"AU\t%.15g\n",AU);
612  fprintf(ioQQQ,"ATOMIC_MASS_UNIT\t%.15g\n",ATOMIC_MASS_UNIT);
613  fprintf(ioQQQ,"ELECTRON_MASS\t%.15g\n",ELECTRON_MASS);
614  fprintf(ioQQQ,"PROTON_MASS\t%.15g\n",PROTON_MASS);
615  fprintf(ioQQQ,"BOLTZMANN\t%.15g\n",BOLTZMANN);
616  fprintf(ioQQQ,"SPEEDLIGHT\t%.15g\n",SPEEDLIGHT);
617  fprintf(ioQQQ,"HPLANCK\t%.15g\n",HPLANCK);
618  fprintf(ioQQQ,"GRAV_CONST\t%.15g\n",GRAV_CONST);
619  fprintf(ioQQQ,"ELEM_CHARGE\t%.15g\n",ELEM_CHARGE);
620  fprintf(ioQQQ,"RYD_INF\t%.15g\n",RYD_INF);
621  fprintf(ioQQQ,"HIONPOT\t%.15g\n",HIONPOT);
622  fprintf(ioQQQ,"PARSEC\t%.15g\n",PARSEC);
623  fprintf(ioQQQ,"H_BAR \t%.15g\n",H_BAR );
624  fprintf(ioQQQ,"ELEM_CHARGE_ESU \t%.15g\n",ELEM_CHARGE_ESU );
625  fprintf(ioQQQ,"ELECTRIC_CONST\t%.15g\n",ELECTRIC_CONST);
626  fprintf(ioQQQ,"HION_LTE_POP\t%.15g\n",HION_LTE_POP);
627  fprintf(ioQQQ,"SAHA\t%.15g\n",SAHA);
628  fprintf(ioQQQ,"ERG1CM\t%.15g\n",ERG1CM);
629  fprintf(ioQQQ,"T1CM\t%.15g\n",T1CM);
630  fprintf(ioQQQ,"WAVNRYD\t%.15g\n",WAVNRYD);
631  fprintf(ioQQQ,"RYDLAM\t%.15g\n",RYDLAM);
632  fprintf(ioQQQ,"EN1RYD\t%.15g\n",EN1RYD);
633  fprintf(ioQQQ,"TE1RYD\t%.15g\n",TE1RYD);
634  fprintf(ioQQQ,"EVDEGK\t%.15g\n",EVDEGK);
635  fprintf(ioQQQ,"EVRYD\t%.15g\n",EVRYD);
636  fprintf(ioQQQ,"EN1EV\t%.15g\n",EN1EV);
637  fprintf(ioQQQ,"FR1RYD\t%.15g\n",FR1RYD);
638  fprintf(ioQQQ,"HNU3C2\t%.15g\n",HNU3C2);
639  fprintf(ioQQQ,"FR1RYDHYD\t%.15g\n",FR1RYDHYD );
640  fprintf(ioQQQ,"HBAReV\t%.15g\n",HBAReV );
641  fprintf(ioQQQ,"RYDLAMHYD\t%.15g\n",RYDLAMHYD );
642  fprintf(ioQQQ,"STEFAN_BOLTZ\t%.15g\n",STEFAN_BOLTZ);
643  fprintf(ioQQQ,"FREQ_1EV\t%.15g\n",FREQ_1EV);
644  fprintf(ioQQQ,"FINE_STRUCTURE\t%.15g\n",FINE_STRUCTURE);
645  fprintf(ioQQQ,"BOHR_RADIUS_CM\t%.15g\n",BOHR_RADIUS_CM);
646  fprintf(ioQQQ,"TWO_PHOT_CONST\t%.15g\n",TWO_PHOT_CONST);
647  fprintf(ioQQQ,"COLL_CONST\t%.15g\n",COLL_CONST);
648  fprintf(ioQQQ,"MILNE_CONST\t%.15g\n",MILNE_CONST);
649  fprintf(ioQQQ,"TRANS_PROB_CONST\t%.15g\n",TRANS_PROB_CONST);
650  fprintf(ioQQQ,"\n");
651 
652  fprintf(ioQQQ,"Some other interesting sizes:\n");
653  fprintf(ioQQQ,"bool\t%lu\n",(unsigned long)sizeof(bool));
654  fprintf(ioQQQ,"char\t%lu\n",(unsigned long)sizeof(char));
655  fprintf(ioQQQ,"int\t%lu\n",(unsigned long)sizeof(int));
656  fprintf(ioQQQ,"long int\t%lu\n",(unsigned long)sizeof(long int));
657  fprintf(ioQQQ,"unsigned int\t%lu\n",(unsigned long)sizeof(unsigned int));
658  fprintf(ioQQQ,"float\t%lu\n",(unsigned long)sizeof(sys_float));
659  fprintf(ioQQQ,"realnum\t%lu\n",(unsigned long)sizeof(realnum));
660  fprintf(ioQQQ,"double\t%lu\n",(unsigned long)sizeof(double));
661  fprintf(ioQQQ,"double*\t%lu\n",(unsigned long)sizeof(double*));
662  fprintf(ioQQQ,"\n");
663 
664  fprintf(ioQQQ,"Some constants from float.h.\n");
665  /* some constants from float.h */
666  fprintf(ioQQQ,"DBL_DIG \t%i\n", DBL_DIG); /* # of decimal digits of precision */
667  fprintf(ioQQQ,"DBL_EPSILON \t%.15g\n",DBL_EPSILON); /* smallest such that 1.0+DBL_EPSILON != 1.0 */
668  fprintf(ioQQQ,"DBL_MANT_DIG\t%i\n",DBL_MANT_DIG); /* # of bits in mantissa */
669  fprintf(ioQQQ,"DBL_MAX\t%.15g\n", DBL_MAX); /* max value */
670  fprintf(ioQQQ,"DBL_MAX_10_EXP\t%i\n", DBL_MAX_10_EXP); /* max decimal exponent */
671  fprintf(ioQQQ,"DBL_MAX_EXP\t%i\n", DBL_MAX_EXP); /* max binary exponent */
672  fprintf(ioQQQ,"DBL_MIN\t%.15g\n", DBL_MIN); /* min positive value */
673 
674  fprintf(ioQQQ,"FLT_DIG\t%i\n", FLT_DIG); /* # of decimal digits of precision */
675  fprintf(ioQQQ,"FLT_EPSILON\t%.15g\n", FLT_EPSILON); /* smallest such that 1.0+FLT_EPSILON != 1.0 */
676  fprintf(ioQQQ,"FLT_MANT_DIG\t%i\n", FLT_MANT_DIG); /* # of bits in mantissa */
677  fprintf(ioQQQ,"FLT_MAX\t%.15g\n", FLT_MAX); /* max value */
678  fprintf(ioQQQ,"FLT_MAX_10_EXP\t%i\n", FLT_MAX_10_EXP);/* max decimal exponent */
679  fprintf(ioQQQ,"FLT_MAX_EXP\t%i\n", FLT_MAX_EXP); /* max binary exponent */
680  fprintf(ioQQQ,"FLT_MIN\t%.15g\n", FLT_MIN); /* min positive value */
681 
682  fprintf(ioQQQ,"\n\n\n");
683 
684  return;
685 }

Generated for cloudy by doxygen 1.8.1.2