00001
00002
00003
00004
00005
00006 #include "cddefines.h"
00007 #include "physconst.h"
00008 #include "rfield.h"
00009 #include "rt.h"
00010 #include "cpu.h"
00011 #include "iso.h"
00012 #include "iterations.h"
00013 #include "lines.h"
00014 #include "called.h"
00015 #include "elementnames.h"
00016 #include "thirdparty.h"
00017 #include "ionbal.h"
00018 #include "prt.h"
00019 #include "h2.h"
00020 #include "parser.h"
00021 #include "version.h"
00022
00023 STATIC void prt_constants(void);
00024
00025
00026
00027 STATIC void PrtMacros( void )
00028 {
00029
00030 DEBUG_ENTRY( "PrtMacros()" );
00031
00032 fprintf( ioQQQ," PrtMacros:\n FLT_IS_DBL\t");
00033 # ifdef FLT_IS_DBL
00034 fprintf( ioQQQ,"defined.\n");
00035 # endif
00036
00037 fprintf( ioQQQ , "\n DMALLOC\t");
00038 # ifdef DMALLOC
00039 fprintf( ioQQQ,"defined");
00040 # endif
00041
00042 fprintf( ioQQQ , "\n SYS_CONFIG\t");
00043 # ifdef SYS_CONFIG
00044 fprintf( ioQQQ,"defined");
00045 # endif
00046
00047 fprintf( ioQQQ , "\n MPI_GRID_RUN\t");
00048 # ifdef MPI_GRID_RUN
00049 fprintf( ioQQQ,"defined");
00050 # endif
00051
00052 fprintf( ioQQQ , "\n USE_GPROF\t");
00053 # ifdef USE_GPROF
00054 fprintf( ioQQQ,"defined");
00055 # endif
00056
00057 fprintf( ioQQQ , "\n HAVE_FUNC\t");
00058 # ifdef HAVE_FUNC
00059 fprintf( ioQQQ,"defined");
00060 # endif
00061
00062 fprintf( ioQQQ , "\n _MSC_VER\t");
00063 # ifdef _MSC_VER
00064 fprintf( ioQQQ,"defined");
00065 # endif
00066
00067 fprintf( ioQQQ , "\n __INTEL_COMPILER\t");
00068 # ifdef __INTEL_COMPILER
00069 fprintf( ioQQQ,"defined");
00070 # endif
00071
00072 fprintf( ioQQQ , "\n OLD_ASSERT\t");
00073 # ifdef OLD_ASSERT
00074 fprintf( ioQQQ,"defined");
00075 # endif
00076
00077 fprintf( ioQQQ , "\n HAVE_POWI\t");
00078 # ifdef HAVE_POWI
00079 fprintf( ioQQQ,"defined");
00080 # endif
00081
00082 fprintf( ioQQQ , "\n HAVE_POW_DOUBLE_INT\t");
00083 # ifdef HAVE_POW_DOUBLE_INT
00084 fprintf( ioQQQ,"defined");
00085 # endif
00086
00087 fprintf( ioQQQ , "\n HAVE_POW_DOUBLE_LONG\t");
00088 # ifdef HAVE_POW_DOUBLE_LONG
00089 fprintf( ioQQQ,"defined");
00090 # endif
00091
00092 fprintf( ioQQQ , "\n HAVE_POW_FLOAT_INT\t");
00093 # ifdef HAVE_POW_FLOAT_INT
00094 fprintf( ioQQQ,"defined");
00095 # endif
00096
00097 fprintf( ioQQQ , "\n HAVE_POW_FLOAT_LONG\t");
00098 # ifdef HAVE_POW_FLOAT_LONG
00099 fprintf( ioQQQ,"defined");
00100 # endif
00101
00102 fprintf( ioQQQ , "\n HAVE_POW_FLOAT_DOUBLE\t");
00103 # ifdef HAVE_POW_FLOAT_DOUBLE
00104 fprintf( ioQQQ,"defined");
00105 # endif
00106
00107 fprintf( ioQQQ , "\n HAVE_POW_DOUBLE_FLOAT\t");
00108 # ifdef HAVE_POW_DOUBLE_FLOAT
00109 fprintf( ioQQQ,"defined");
00110 # endif
00111
00112 fprintf( ioQQQ , "\n");
00113
00114 }
00115
00116 void ParsePrint(
00117
00118 Parser &p )
00119 {
00120 int ipISO;
00121 long int
00122 j,
00123 nelem,
00124 num1;
00125 double a;
00126
00127 DEBUG_ENTRY( "ParsePrint()" );
00128
00129
00130
00131 if( p.nMatch("AGES") )
00132 {
00133
00134 prt.lgPrnAges = true;
00135 }
00136
00137 else if( p.nMatch("ARRA") )
00138 {
00139
00140 if( p.nMatch( "ONLY" ) )
00141 {
00142
00143 if( (nelem = p.GetElem())<0 )
00144 {
00145 fprintf(ioQQQ,"An element name must appear on this PRINT ARRAYS ONLY xx command.\n");
00146 cdEXIT(EXIT_FAILURE);
00147 }
00148
00149 prt.lgPrtArry[nelem] = true;
00150 }
00151 else
00152 {
00153
00154 for( nelem=ipHYDROGEN; nelem<LIMELM; ++nelem )
00155 {
00156 prt.lgPrtArry[nelem] = true;
00157 }
00158 }
00159 }
00160
00161 else if( p.nMatch("CITA") )
00162 {
00163 prt.lgPrtCitations = true;
00164 }
00165
00166 else if( p.nMatch("COLU") && p.nMatch("DENS") )
00167 {
00168 if( p.nMatch(" ON ") )
00169 {
00170
00171 prt.lgPrintColumns = true;
00172 }
00173 else if( p.nMatch(" OFF") )
00174 {
00175
00176 prt.lgPrintColumns = false;
00177 }
00178 }
00179
00180
00181
00182
00183
00184 else if( p.nMatch("DEPA") )
00185 {
00186 if( p.nMatch("HE-L") )
00187 {
00188 ipISO = ipHE_LIKE;
00189 }
00190 else
00191 {
00192 ipISO = ipH_LIKE;
00193 }
00194
00195
00196 nelem = p.GetElem( );
00197
00198
00199 nelem = MAX2( nelem, ipISO );
00200
00201
00202 iso_sp[ipISO][nelem].lgPrtDepartCoef = true;
00203 }
00204
00205 else if( p.nMatch("CONS") )
00206 {
00207
00208 prt_constants();
00209 }
00210
00211 else if( p.nMatch("ERRO") )
00212 {
00213
00214 lgPrnErr = true;
00215 }
00216
00217 else if( p.nMatch("HEAT") )
00218 {
00219
00220 prt.lgPrintHeating = true;
00221 }
00222
00223 else if( p.nMatch("PATH") )
00224 {
00225
00226 cpu.i().printDataPath();
00227 }
00228
00229
00230 else if( p.nMatch("POPU"))
00231 {
00232 if( p.nMatch("HE-L") )
00233 {
00234 ipISO = ipHE_LIKE;
00235 }
00236 else
00237 {
00238 ipISO = ipH_LIKE;
00239 }
00240
00241
00242 nelem = p.GetElem( );
00243
00244 nelem = MAX2(0,nelem);
00245
00246
00247 if( nelem==0 && ipISO==ipHE_LIKE )
00248 nelem = ipHELIUM;
00249
00250 if( nelem < ipISO )
00251 {
00252 fprintf(ioQQQ,"This iso-sequence (%s) and element (%s) are impossible.\n",
00253 elementnames.chElementName[ipISO],
00254 elementnames.chElementName[nelem]);
00255 cdEXIT(EXIT_FAILURE);
00256 }
00257
00258
00259 iso_sp[ipISO][nelem].lgPrtLevelPops = true;
00260 }
00261
00262
00263 else if( p.nMatch("LAST") )
00264 {
00265 prt.lgPrtLastIt = true;
00266 }
00267
00268
00269 else if( p.nMatch("LINE") )
00270 {
00271 if( p.nMatch(" ALL") )
00272 {
00273
00274 prt.lgPrnPump = true;
00275 prt.lgPrnColl = true;
00276 prt.lgPrnHeat = true;
00277 }
00278
00279 else if( p.nMatch("CELL") )
00280 {
00281
00282
00283 prt.lgPrnLineCell = true;
00284 prt.nPrnLineCell = (long)p.FFmtRead();
00285 if( p.lgEOL() )
00286 p.NoNumb("cell for line print" );
00287 if( prt.nPrnLineCell < 1 )
00288 {
00289
00290 fprintf(ioQQQ , "The cell number on the PRINT LINE CELL command must be positive.\n");
00291 fprintf(ioQQQ , "The cell number was %li.\n" , prt.nPrnLineCell);
00292 }
00293 }
00294
00295 else if( p.nMatch("COLL") )
00296 {
00297
00298
00299 if( p.nMatch(" ISO") )
00300 {
00301
00302 prt.lgPrnIsoCollapsed = true;
00303 }
00304 else
00305 {
00306
00307 prt.lgPrnColl = true;
00308 }
00309 }
00310
00311 else if( p.nMatch("COLU") )
00312 {
00313
00314 prt.lgPrtLineArray = false;
00315
00316
00317 if( p.nMatch("NEAR") )
00318 prt.lgPrtLineLog = false;
00319 }
00320
00321 else if( p.nMatch("FAIN") && !(p.nMatch("OPTI")&&p.nMatch("DEPT")) )
00322 {
00323
00324
00325
00326
00327 a = p.FFmtRead();
00328
00329
00330 if( p.lgEOL() )
00331 {
00332 if( p.nMatch(" OFF") )
00333 {
00334 prt.lgFaintOn = false;
00335 }
00336 else
00337 {
00338 fprintf( ioQQQ,
00339 " There faintest line to print must be on this line, sorry.\n" );
00340 cdEXIT(EXIT_FAILURE);
00341 }
00342 }
00343
00344 prt.lgFntSet = true;
00345 if( a <= 0. || p.nMatch(" LOG") )
00346 {
00347 prt.TooFaint = (realnum)pow(10.,a);
00348 }
00349 else
00350 {
00351 prt.TooFaint = (realnum)a;
00352 }
00353 }
00354
00355 else if( p.nMatch("FLUX") && p.nMatch("EART"))
00356 {
00357
00358 prt.lgPrintFluxEarth = true;
00359 }
00360
00361 else if( p.nMatch(" H2") && p.nMatch("ELEC") )
00362 {
00363
00364
00365 h2.nElecLevelOutput = -1;
00366 }
00367
00368 else if( p.nMatch("HEAT") )
00369 {
00370
00371 prt.lgPrnHeat = true;
00372 }
00373
00374 else if( p.nMatch("INWA") )
00375 {
00376
00377 prt.lgPrnInwd = true;
00378 }
00379
00380 else if( p.nMatch("OPTI") && p.nMatch("DEPT") )
00381 {
00382
00383 if( p.nMatch(" OFF") )
00384 {
00385
00386 prt.lgPrtTau = false;
00387 }
00388 else
00389 {
00390 prt.lgPrtTau = true;
00391 }
00392 if( p.nMatch("FAIN") )
00393 {
00394
00395 prt.PrtTauFnt = (realnum)pow(10.,p.FFmtRead());
00396 if( p.lgEOL() )
00397 {
00398 fprintf( ioQQQ, " There must be a number for the FAINT option. They are HEAD and ZONE. Sorry.\n" );
00399 cdEXIT(EXIT_FAILURE);
00400 }
00401 }
00402 }
00403
00404 else if( p.nMatch("PUMP") )
00405 {
00406
00407 prt.lgPrnPump = true;
00408 }
00409
00410 else if( p.nMatch("SORT") )
00411 {
00412
00413
00414
00415 prt.lgSortLines = true;
00416 if( p.nMatch("WAVE") )
00417 {
00418
00419
00420 prt.lgSortLineIntensity = false;
00421 prt.lgSortLineWavelength = true;
00422
00423
00424
00425 if( p.nMatch("RANG") )
00426 {
00427 prt.wlSort1 = (realnum)p.getWaveOpt();
00428
00429 prt.wlSort2 = (realnum)p.getWaveOpt();
00430
00431 if( p.lgEOL() )
00432 {
00433 fprintf( ioQQQ, " There must be two numbers for the RANGE option, the lower and upper wavelength. Sorry.\n" );
00434 cdEXIT(EXIT_FAILURE);
00435 }
00436 if( prt.wlSort1 <0. || prt.wlSort2 <0. ||
00437 prt.wlSort1 >= prt.wlSort2 )
00438 {
00439 fprintf( ioQQQ, " The lower and upper wavelength must be positive and in the correct order. Sorry.\n" );
00440 cdEXIT(EXIT_FAILURE);
00441 }
00442 }
00443 else
00444 {
00445 prt.wlSort1 = -1;
00446 prt.wlSort2 = 1e30f;
00447 }
00448 }
00449 else if( p.nMatch("INTE") )
00450 {
00451
00452
00453 prt.lgSortLineIntensity = true;
00454 prt.lgSortLineWavelength = false;
00455 }
00456 else
00457 {
00458 fprintf( ioQQQ, "I can sort by wavelength or intensity - one must be specified.\nSorry.\n" );
00459 cdEXIT(EXIT_FAILURE);
00460 }
00461 }
00462
00463 else if( p.nMatch(" SUM") )
00464 {
00465
00466 ParsePrtLineSum( p );
00467 }
00468
00469 else if( p.nMatch("SURF") && p.nMatch("BRIG") )
00470 {
00471
00472 prt.lgSurfaceBrightness = true;
00473
00474 if( p.nMatch("ARCS" ) )
00475 {
00476
00477 prt.lgSurfaceBrightness_SR = false;
00478 }
00479 else
00480 {
00481
00482 prt.lgSurfaceBrightness_SR = true;
00483 }
00484 }
00485
00486 else if( p.nMatch("CUMU") )
00487 {
00488
00489 prt.lgPrintLineCumulative = true;
00490 }
00491
00492 else
00493 {
00494 fprintf( ioQQQ, "One of the keys should have appeared. \nPlease consult Hazy.\nSorry.\n" );
00495 cdEXIT(EXIT_FAILURE);
00496 }
00497 }
00498
00499
00500 else if( p.nMatch("MASE") )
00501 {
00502 prt.lgPrtMaser = true;
00503 }
00504
00505 else if( p.nMatch("ONLY") )
00506 {
00507 if( p.nMatch("ZONE") )
00508 prt.lgOnlyZone = true;
00509
00510 else if( p.nMatch("HEAD") )
00511 prt.lgOnlyHead = true;
00512
00513 else
00514 {
00515 fprintf( ioQQQ, " There must be a keyword for the ONLY option. They are HEAD and ZONE. Sorry.\n" );
00516 cdEXIT(EXIT_FAILURE);
00517 }
00518 }
00519
00520 else if( p.nMatch("STAR") )
00521 {
00522
00523 called.lgTalk = false;
00524 prt.lgPrtStart = true;
00525 prt.nstart = (long int)p.FFmtRead();
00526 if( p.lgEOL() )
00527 {
00528 fprintf( ioQQQ,
00529 " The zone on which the print is to start MUST be entered on this line. Sorry.\n" );
00530 cdEXIT(EXIT_FAILURE);
00531 }
00532 }
00533
00534
00535 else if( p.nMatch("CONT") )
00536 {
00537 if( p.nMatch("BLOC") )
00538 {
00539
00540 fprintf(ioQQQ , " PROBLEM The PRINT CONTINUUM BLOCK command has been removed. Ignored for now.\n");
00541 }
00542 else if( p.nMatch("INDI" ))
00543 {
00544
00545
00546
00547
00548 prt.lgPrtContIndices = true;
00549
00550
00551
00552
00553
00554 prt.lgPrtContIndices_lo_E = (realnum)p.FFmtRead();
00555 prt.lgPrtContIndices_hi_E = (realnum)p.FFmtRead();
00556
00557
00558 if( p.lgEOL() )
00559 prt.lgPrtContIndices_hi_E = (realnum)rfield.egamry;
00560 }
00561 else
00562 {
00563
00564 fprintf( ioQQQ, " PROBLEM PRINT CONTINUUM command is now the default, and the command has been removed.\n" );
00565 }
00566 }
00567
00568 else if( p.nMatch("COOL") )
00569 {
00570
00571 prt.nzdump = (long int)p.FFmtRead();
00572
00573
00574 if( p.lgEOL() )
00575 {
00576 prt.nzdump = 0;
00577 }
00578 }
00579
00580 else if( p.nMatch("QUIE") || (p.nMatch(" OFF") &&
00581 !p.nMatch("FAIN" )) )
00582 {
00583
00584
00585 called.lgTalk = false;
00586 }
00587
00588 else if( p.nMatch("MACR") )
00589 {
00590
00591 PrtMacros();
00592 }
00593
00594 else if( p.nMatch(" ON ") )
00595 {
00596
00597
00598
00599
00600
00601 if( called.lgTalkIsOK && !called.lgTalkForcedOff )
00602 {
00603 called.lgTalk = cpu.i().lgMPI_talk();
00604 }
00605 }
00606
00607 else if (p.nMatch("RECOMB"))
00608 {
00609 ionbal.lgRecom_Badnell_print = true;
00610
00611 }
00612
00613 else if( p.nMatch("SHOR") )
00614 {
00615
00616 prt.lgPrtShort = true;
00617 if( !prt.lgFntSet )
00618 prt.TooFaint = 0.001f;
00619 }
00620
00621 else if( p.nMatch("VERS") )
00622 {
00623
00624 fprintf( ioQQQ, "\nThis is Cloudy %s\n%s\n\n" ,
00625 t_version::Inst().chVersion,
00626 t_version::Inst().chInfo );
00627 }
00628
00629 else if( p.nMatch("VOIGT") )
00630 {
00631
00632 realnum damp = (realnum)p.FFmtRead();
00633 if( p.lgEOL() )
00634 {
00635 fprintf( ioQQQ, " The damping constant must appear on the print voigt command. Sorry.\n" );
00636 cdEXIT(EXIT_FAILURE);
00637 }
00638
00639 const long NVOIGT=100;
00640 realnum xprofile[NVOIGT], profileVoigtH[NVOIGT];
00641 for( long i=0; i<NVOIGT; ++i )
00642 xprofile[i] = (realnum)i * 10.f / (realnum)NVOIGT;
00643
00644 VoigtH( damp, xprofile, profileVoigtH, NVOIGT );
00645
00646 fprintf(ioQQQ,"\n x VoigtH\n");
00647 for( long int i=0; i<NVOIGT; ++i )
00648 {
00649 fprintf(ioQQQ,"%.4e %.4e\n", xprofile[i], profileVoigtH[i] );
00650 }
00651 }
00652
00653 else if( p.nMatch("ZONE") || p.nMatch("EVER") )
00654 {
00655
00656
00657 num1 = (long int)p.FFmtRead();
00658 if( p.lgEOL() )
00659 {
00660 fprintf( ioQQQ, " The number of zones to print MUST be entered on this line. Sorry.\n" );
00661 cdEXIT(EXIT_FAILURE);
00662 }
00663
00664 iterations.IterPrnt[0] = MAX2(num1,1);
00665
00666 for( j=1; j < iterations.iter_malloc; j++ )
00667 {
00668 iterations.IterPrnt[j] = (long int)p.FFmtRead();
00669 if( p.lgEOL() )
00670 {
00671 iterations.IterPrnt[j] = iterations.IterPrnt[j-1];
00672 }
00673 }
00674 }
00675
00676
00677 else
00678 {
00679 fprintf( ioQQQ, " There MUST be a keyword on the following line. Sorry.\n" );
00680 fprintf( ioQQQ, " The PRINT FAINT command is now the PRINT LINE FAINT command.\n" );
00681 p.PrintLine(ioQQQ);
00682 cdEXIT(EXIT_FAILURE);
00683 }
00684 return;
00685 }
00686
00687
00688 STATIC void prt_constants(void)
00689 {
00690
00691 DEBUG_ENTRY( "prt_constants()" );
00692
00693 fprintf(ioQQQ,"\n\nPhysical constants used by Cloudy, taken from physconst.h\n");
00694
00695 fprintf(ioQQQ,"EE\t%.15g\n",EE);
00696 fprintf(ioQQQ,"EULER\t%.15g\n",EULER);
00697 fprintf(ioQQQ,"PI\t%.15g\n",PI);
00698 fprintf(ioQQQ,"PI2\t%.15g\n",PI2);
00699 fprintf(ioQQQ,"PI4\t%.15g\n",PI4);
00700 fprintf(ioQQQ,"PI8\t%.15g\n",PI8);
00701 fprintf(ioQQQ,"SQRT2\t%.15g\n",SQRT2);
00702 fprintf(ioQQQ,"SQRTPI\t%.15g\n",SQRTPI);
00703 fprintf(ioQQQ,"SQRTPIBY2\t%.15g\n",SQRTPIBY2);
00704 fprintf(ioQQQ,"LN_TWO\t%.15g\n",LN_TWO);
00705 fprintf(ioQQQ,"LN_TEN\t%.15g\n",LN_TEN);
00706 fprintf(ioQQQ,"LOG10_E\t%.15g\n",LOG10_E);
00707 fprintf(ioQQQ,"OPTDEP2EXTIN\t%.15g\n",OPTDEP2EXTIN);
00708 fprintf(ioQQQ,"RADIAN\t%.15g\n",RADIAN);
00709 fprintf(ioQQQ,"SOLAR_MASS\t%.15g\n",SOLAR_MASS);
00710 fprintf(ioQQQ,"SOLAR_LUMINOSITY\t%.15g\n",SOLAR_LUMINOSITY);
00711 fprintf(ioQQQ,"AU\t%.15g\n",AU);
00712 fprintf(ioQQQ,"ATOMIC_MASS_UNIT\t%.15g\n",ATOMIC_MASS_UNIT);
00713 fprintf(ioQQQ,"ELECTRON_MASS\t%.15g\n",ELECTRON_MASS);
00714 fprintf(ioQQQ,"PROTON_MASS\t%.15g\n",PROTON_MASS);
00715 fprintf(ioQQQ,"BOLTZMANN\t%.15g\n",BOLTZMANN);
00716 fprintf(ioQQQ,"SPEEDLIGHT\t%.15g\n",SPEEDLIGHT);
00717 fprintf(ioQQQ,"HPLANCK\t%.15g\n",HPLANCK);
00718 fprintf(ioQQQ,"GRAV_CONST\t%.15g\n",GRAV_CONST);
00719 fprintf(ioQQQ,"ELEM_CHARGE\t%.15g\n",ELEM_CHARGE);
00720 fprintf(ioQQQ,"RYD_INF\t%.15g\n",RYD_INF);
00721 fprintf(ioQQQ,"HIONPOT\t%.15g\n",HIONPOT);
00722 fprintf(ioQQQ,"AS1RAD\t%.15g\n",AS1RAD);
00723 fprintf(ioQQQ,"SQAS1SR\t%.15g\n",SQAS1SR);
00724 fprintf(ioQQQ,"SQAS_SKY\t%.15g\n",SQAS_SKY);
00725 fprintf(ioQQQ,"PARSEC\t%.15g\n",PARSEC);
00726 fprintf(ioQQQ,"H_BAR \t%.15g\n",H_BAR );
00727 fprintf(ioQQQ,"ELEM_CHARGE_ESU \t%.15g\n",ELEM_CHARGE_ESU );
00728 fprintf(ioQQQ,"ELECTRIC_CONST\t%.15g\n",ELECTRIC_CONST);
00729 fprintf(ioQQQ,"HION_LTE_POP\t%.15g\n",HION_LTE_POP);
00730 fprintf(ioQQQ,"SAHA\t%.15g\n",SAHA);
00731 fprintf(ioQQQ,"ERG1CM\t%.15g\n",ERG1CM);
00732 fprintf(ioQQQ,"T1CM\t%.15g\n",T1CM);
00733 fprintf(ioQQQ,"WAVNRYD\t%.15g\n",WAVNRYD);
00734 fprintf(ioQQQ,"RYDLAM\t%.15g\n",RYDLAM);
00735 fprintf(ioQQQ,"EN1RYD\t%.15g\n",EN1RYD);
00736 fprintf(ioQQQ,"TE1RYD\t%.15g\n",TE1RYD);
00737 fprintf(ioQQQ,"EVDEGK\t%.15g\n",EVDEGK);
00738 fprintf(ioQQQ,"EVRYD\t%.15g\n",EVRYD);
00739 fprintf(ioQQQ,"EN1EV\t%.15g\n",EN1EV);
00740 fprintf(ioQQQ,"FR1RYD\t%.15g\n",FR1RYD);
00741 fprintf(ioQQQ,"HNU3C2\t%.15g\n",HNU3C2);
00742 fprintf(ioQQQ,"FR1RYDHYD\t%.15g\n",FR1RYDHYD );
00743 fprintf(ioQQQ,"HBAReV\t%.15g\n",HBAReV );
00744 fprintf(ioQQQ,"RYDLAMHYD\t%.15g\n",RYDLAMHYD );
00745 fprintf(ioQQQ,"STEFAN_BOLTZ\t%.15g\n",STEFAN_BOLTZ);
00746 fprintf(ioQQQ,"FREQ_1EV\t%.15g\n",FREQ_1EV);
00747 fprintf(ioQQQ,"FINE_STRUCTURE\t%.15g\n",FINE_STRUCTURE);
00748 fprintf(ioQQQ,"BOHR_RADIUS_CM\t%.15g\n",BOHR_RADIUS_CM);
00749 fprintf(ioQQQ,"TWO_PHOT_CONST\t%.15g\n",TWO_PHOT_CONST);
00750 fprintf(ioQQQ,"COLL_CONST\t%.15g\n",COLL_CONST);
00751 fprintf(ioQQQ,"MILNE_CONST\t%.15g\n",MILNE_CONST);
00752 fprintf(ioQQQ,"TRANS_PROB_CONST\t%.15g\n",TRANS_PROB_CONST);
00753 fprintf(ioQQQ,"\n");
00754
00755 fprintf(ioQQQ,"Some other interesting sizes:\n");
00756 fprintf(ioQQQ,"bool\t%lu\n",(unsigned long)sizeof(bool));
00757 fprintf(ioQQQ,"char\t%lu\n",(unsigned long)sizeof(char));
00758 fprintf(ioQQQ,"int\t%lu\n",(unsigned long)sizeof(int));
00759 fprintf(ioQQQ,"long int\t%lu\n",(unsigned long)sizeof(long int));
00760 fprintf(ioQQQ,"unsigned int\t%lu\n",(unsigned long)sizeof(unsigned int));
00761 fprintf(ioQQQ,"float\t%lu\n",(unsigned long)sizeof(sys_float));
00762 fprintf(ioQQQ,"realnum\t%lu\n",(unsigned long)sizeof(realnum));
00763 fprintf(ioQQQ,"double\t%lu\n",(unsigned long)sizeof(double));
00764 fprintf(ioQQQ,"double*\t%lu\n",(unsigned long)sizeof(double*));
00765 fprintf(ioQQQ,"\n");
00766
00767 fprintf(ioQQQ,"Some constants from float.h.\n");
00768
00769 fprintf(ioQQQ,"DBL_DIG \t%i\n", DBL_DIG);
00770 fprintf(ioQQQ,"DBL_EPSILON \t%.15g\n",DBL_EPSILON);
00771 fprintf(ioQQQ,"DBL_MANT_DIG\t%i\n",DBL_MANT_DIG);
00772 fprintf(ioQQQ,"DBL_MAX\t%.15g\n", DBL_MAX);
00773 fprintf(ioQQQ,"DBL_MAX_10_EXP\t%i\n", DBL_MAX_10_EXP);
00774 fprintf(ioQQQ,"DBL_MAX_EXP\t%i\n", DBL_MAX_EXP);
00775 fprintf(ioQQQ,"DBL_MIN\t%.15g\n", DBL_MIN);
00776
00777 fprintf(ioQQQ,"FLT_DIG\t%i\n", FLT_DIG);
00778 fprintf(ioQQQ,"FLT_EPSILON\t%.15g\n", FLT_EPSILON);
00779 fprintf(ioQQQ,"FLT_MANT_DIG\t%i\n", FLT_MANT_DIG);
00780 fprintf(ioQQQ,"FLT_MAX\t%.15g\n", FLT_MAX);
00781 fprintf(ioQQQ,"FLT_MAX_10_EXP\t%i\n", FLT_MAX_10_EXP);
00782 fprintf(ioQQQ,"FLT_MAX_EXP\t%i\n", FLT_MAX_EXP);
00783 fprintf(ioQQQ,"FLT_MIN\t%.15g\n", FLT_MIN);
00784
00785 fprintf(ioQQQ,"BIGFLOAT\t%.15g\n", BIGFLOAT);
00786 fprintf(ioQQQ,"SMALLFLOAT\t%.15g\n", SMALLFLOAT);
00787 fprintf(ioQQQ,"BIGDOUBLE\t%.15g\n", BIGDOUBLE);
00788 fprintf(ioQQQ,"SMALLDOUBLE\t%.15g\n", SMALLDOUBLE);
00789
00790 fprintf(ioQQQ,"\nThis machine has %ld threads.\n", cpu.i().nCPU() );
00791
00792 return;
00793 }