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