Cloudy
Spectral Synthesis Code for Astrophysics
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
cddrive.cpp File Reference
#include "cddefines.h"
#include "cddrive.h"
#include "trace.h"
#include "conv.h"
#include "init.h"
#include "lines.h"
#include "pressure.h"
#include "dense.h"
#include "radius.h"
#include "struc.h"
#include "mole.h"
#include "elementnames.h"
#include "mean.h"
#include "phycon.h"
#include "called.h"
#include "parse.h"
#include "input.h"
#include "taulines.h"
#include "version.h"
#include "thermal.h"
#include "grid.h"
#include "timesc.h"
#include "cloudy.h"
#include "warnings.h"
#include "broke.h"
#include "iso.h"
#include "save.h"
#include "rfield.h"
#include "lines_service.h"
#include "service.h"
#include "parser.h"
#include "generic_state.h"
#include "prt.h"
#include "noexec.h"
#include <sys/time.h>
#include <sys/resource.h>
Include dependency graph for cddrive.cpp:

Functions

int cdDrive ()
 
void cdReasonGeo (FILE *ioOUT)
 
void cdWarnings (FILE *ioOUT)
 
void cdCautions (FILE *ioOUT)
 
void cdTimescales (double *TTherm, double *THRecom, double *TH2)
 
void cdSurprises (FILE *ioOUT)
 
void cdNotes (FILE *ioOUT)
 
double cdCooling_last ()
 
void cdVersion (char chString[])
 
void cdDate (char chString[])
 
double cdHeating_last ()
 
double cdEDEN_last ()
 
void cdNoExec ()
 
STATIC void cdClock (struct timeval *clock_dat)
 
void cdSetExecTime ()
 
double cdExecTime ()
 
long cdMemory ()
 
void cdPrintCommands (FILE *ioOUT)
 
void cdEmis (const char *chLabel, realnum wavelength, double *emiss, bool lgEmergent)
 
void cdEmis (const LineID &line, double *emiss, bool lgEmergent)
 
void cdEmis_ip (long int ipLine, double *emiss, bool lgEmergent)
 
int cdColm (const char *chLabel, long int ion, double *theocl)
 
void cdErrors (FILE *ioOUT)
 
void cdDepth_depth (double cdDepth[])
 
void cdPressure_depth (double TotalPressure[], double GasPressure[], double RadiationPressure[])
 
void cdPressure_last (double *PresTotal, double *PresGas, double *PresRad)
 
long int cdnZone ()
 
double cdTemp_last ()
 
STATIC bool set_weighting (const char *chCaller, const char *chWeight, int &dim)
 
int cdIonFrac (const char *chLabel, long int IonStage, double *fracin, const char *chWeight, bool lgDensity)
 
long debugLine (realnum wavelength)
 
long int cdLine (const string &chLabel, realnum wavelength, double *relint, double *absint, int LineType)
 
long int cdLine (const LineID &line, double *relint, double *absint, int LineType)
 
void cdLine_ip (long int ipLine, double *relint, double *absint, int LineType)
 
void cdNwcns (long int *NumberWarnings, long int *NumberCautions, long int *NumberNotes, long int *NumberSurprises, long int *NumberTempFailures, long int *NumberPresFailures, long int *NumberIonFailures, long int *NumberNeFailures)
 
void cdOutput (const string &filename, const char *mode)
 
void cdOutput (const string &filename, FILE *fp)
 
void cdInput (const string &filename, const char *mode)
 
void cdTalk (bool lgTOn)
 
double cdB21cm ()
 
int cdTemp (const char *chLabel, long int IonStage, double *TeMean, const char *chWeight)
 
int cdTemp (const string &chLabel, double *TeMean, const char *chWeight)
 
void test_cdTemp_molecules ()
 
int cdRead (const string &chInputLine)
 
void cdClosePunchFiles ()
 

Variables

static bool lgCalled =false
 
static struct timeval before
 

Function Documentation

double cdB21cm ( )

cdB21cm returns B as measured by 21 cm assumes tangled field weighted by n(H0)/T

References DEBUG_ENTRY, mean, SMALLFLOAT, and t_mean::TempB_HarMean.

Referenced by PrtFinal().

void cdCautions ( FILE *  )

produces list of cautions

References t_warnings::chCaunln, DEBUG_ENTRY, fprintf(), and warnings.

Referenced by cdErrors(), PrtComment(), SaveLineIntensity(), SaveResults(), and ShowMe().

Here is the call graph for this function:

STATIC void cdClock ( struct timeval *  clock_dat)

References cdEXIT, DEBUG_ENTRY, EXIT_FAILURE, fprintf(), and ioQQQ.

Referenced by cdExecTime(), and cdSetExecTime().

Here is the call graph for this function:

void cdClosePunchFiles ( )

wrapper to close all save files

References CloseSaveFiles(), and DEBUG_ENTRY.

Here is the call graph for this function:

double cdCooling_last ( )

cdCooling_last The returns the total cooling (erg cm^-3 s^-1) for the last computed zone

References t_thermal::ctot, and thermal.

void cdDate ( char  chString[])

cdDate The argument is a string with at least 8 char that will receive a null terminated string with the date of the current version of the code.

References Singleton< t_version >::Inst().

Here is the call graph for this function:

void cdDepth_depth ( double  cdDepth[])

returns depth structure of previous model

Parameters
cdDepth[]

References DEBUG_ENTRY, t_struc::depth, nzone, and struc.

int cdDrive ( )

cdDrive This command actually computes a model. It returns 0 if the calculation was successful, and 1 if an error condition was encountered

References cdEXIT, cloudy(), t_input::crd, DEBUG_ENTRY, EXIT_FAILURE, fprintf(), grid, grid_do(), InitCoreload(), t_mesh::InitMesh(), input, ioQQQ, lgcdInitCalled, t_prt::lgIncludeBlends, t_grid::lgInsideGrid, t_optimize::lgNoVary, t_optimize::lgOptimr, t_trace::lgTrace, t_optimize::lgVaryOn, t_mesh::ncells(), t_rfield::nflux, t_rfield::nflux_with_check, t_rfield::nPositive, optimize, ParseInitFile(), prt, rfield, and trace.

Referenced by cdMain().

Here is the call graph for this function:

double cdEDEN_last ( )

cdEDEN_last return electron density of last zone

References dense, and t_dense::eden.

void cdEmis ( const char *  chLabel,
realnum  wavelength,
double *  emiss,
bool  lgEmergent 
)

cdEms obtain the local emissivity for a line, for the last computed zone

References cdEmis(), and DEBUG_ENTRY.

Referenced by cdEmis(), and cdEmis_ip().

Here is the call graph for this function:

void cdEmis ( const LineID line,
double *  emiss,
bool  lgEmergent 
)

References cdEmis(), DEBUG_ENTRY, t_LineSave::findline(), t_LineSave::lines, and LineSave.

Here is the call graph for this function:

void cdEmis_ip ( long int  ipLine,
double *  emiss,
bool  lgEmergent 
)

cdEms_ip obtain the local emissivity for a line with known index

Parameters
ipLineindex of the line in the stack
*emissthe vol emissivity of this line in last computed zone
lgEmergentintrinsic or emergent emissivities

References ASSERT, cdEmis(), DEBUG_ENTRY, t_LineSave::lines, LineSave, and t_LineSave::nsum.

Referenced by save_line().

Here is the call graph for this function:

void cdErrors ( FILE *  )

cdErrors After the calculation is completed, a summary of all error messages can be be generated by calling this routine. The argument is the output file

Parameters
[out]*ioOUToutput file

References cdCautions(), cdNwcns(), cdWarnings(), t_input::chTitle, DEBUG_ENTRY, fprintf(), and input.

Here is the call graph for this function:

double cdExecTime ( )

cdExecTime returns the elapsed time cpu time (sec) that has elapsed since cdInit called cdSetExecTime.

References before, cdClock(), cdEXIT, DEBUG_ENTRY, EXIT_FAILURE, fprintf(), ioQQQ, and lgCalled.

Referenced by cdMain(), PrtFinal(), and SaveDo().

Here is the call graph for this function:

double cdHeating_last ( )

cdHeating_last returns the total heating (erg cm^-3 s^-1) for the last computed zone

References t_thermal::htot, and thermal.

void cdInput ( const string &  filename = "",
const char *  mode = "r" 
)

cdInput This tells the code where to get input. The arguments are as for the stdio.h fopen call, but the resulting file pointer is checked for validity. All further input will come from this file. If filename = "", input is switched to stdin (and mode is ignored). If this routine is not called then all input will come from stdin, the standard c input

References AS_LOCAL_ONLY_TRY, cdEXIT, DEBUG_ENTRY, ES_FAILURE, fprintf(), ioQQQ, ioStdin, NULL, and open_data().

Referenced by cdMain(), and cdPrepareExit().

Here is the call graph for this function:

int cdIonFrac ( const char *  chLabel,
long int  IonStage,
double *  fracin,
const char *  chWeight,
bool  lgDensity 
)
 * cdIonFrac
 * This returns the ionization fraction for any element included in the calculation. 
 * The first parameter is 4 char null terminated string giving the first 4 letters of
 * element name as spelled by Cloudy.  
 * The second parameter is an integer giving the ionization stage, 
 * 1 for atom, 2 for first ion, etc.
 * The third parameter returns the predicted ionization fraction of that ion stage.
 * The last parameter is an 8 character + null string that says either "volume" or "radius",
 * to specify whether the average should be weighted by volume or radius.
 * The return value is 0 if the routine could find the species and
 * non-zero if it failed to find the element 
Parameters
*chLabelfour char string, null terminated, giving the element name
IonStageIonStage is ionization stage, 1 for atom, up to N+1 where N is atomic number
*fracinwill be fractional ionization
*chWeighthow to weight the average, must be "VOLUME" or "RADIUS"
lgDensityif true then weighting also has electron density, if false then only volume or radius

References caps(), t_elementnames::chElementNameShort, DEBUG_ENTRY, elementnames, exp10(), fprintf(), ioQQQ, ipHYDROGEN, LIMELM, mean, t_mean::MeanIon(), set_weighting(), and trimTrailingWhiteSpace().

Referenced by DynaPunchTimeDep(), lgCheckMonitors(), and save_average().

Here is the call graph for this function:

long int cdLine ( const string &  chLabel,
realnum  wavelength,
double *  relint,
double *  absint,
int  LineType = 0 
)

cdLine This routine finds the predicted intensity of any line in the standard output.

Parameters
*chLabel1st parameter is the species label, as it appears in the output.
wavelength2nd parameter is the float wavelength in Angstroms, not how it appears in printout. The digits must agree with the number in the printout, but the units must be Angstroms. 3rd parameter is the predicted intensity relative to the normalization line. 4th par is the log of the predicted luminosity or intensity of the line (ergs).
*relint5th is pointer to relative intensity, a double that is returned
*absint6th is pointer to log of absolute intensity
LineType- emergent or intrinsic intensity
Returns
return value: The routine returns an index (>0) of the array element within stack if it finds the line, It returns the negative of the total number of lines if it could not find the line. (this is a debugging aid) note that this returns a long int since there are LOTS of lines this also IS NOT the standard C convention for success or failure

References cdLine(), and DEBUG_ENTRY.

Referenced by cdLine(), ConvIterCheck(), IterStart(), lgCheckMonitors(), lines(), PrtComment(), PrtFinal(), and SaveDo().

Here is the call graph for this function:

long int cdLine ( const LineID line,
double *  relint,
double *  absint,
int  LineType = 0 
)

cdLine get the predicted line intensity, using LineID

Parameters
linethe line we are looking for
*relintlinear intensity relative to normalization line
*absintlog of luminosity or intensity of line
LineType- intrinsic or emergent intensity

References cdLine_ip(), DEBUG_ENTRY, t_LineSave::findline(), and LineSave.

Here is the call graph for this function:

void cdLine_ip ( long int  ipLine,
double *  relint,
double *  absint,
int  LineType = 0 
)

cdLine_ip get the predicted line intensity, using index for line in stack

Parameters
ipLine
*relintlinear intensity relative to normalization line
*absintlog of luminosity or intensity of line
LineType- intrinsic or emergent intensity

References ASSERT, t_radius::Conv2PrtInten, DEBUG_ENTRY, fprintf(), ioQQQ, t_LineSave::ipNormWavL, t_LineSave::lines, LineSave, t_LineSave::nsum, radius, and t_LineSave::ScaleNormLine.

Referenced by cdLine(), lgCheckMonitors(), PrtLineSum(), and save_line().

Here is the call graph for this function:

long cdMemory ( )

References cdEXIT, EXIT_FAILURE, fprintf(), and ioQQQ.

Referenced by cdMain().

Here is the call graph for this function:

void cdNoExec ( )

cdNoExec This provides option to have the code prepare the initial conditions for a model, but not actually try to compute the model. I use this when setting up a large grid so that I can quickly run through the full grid as a check that the commands are entered properly and the parameters I am going to vary do so properly. The command is then commented out when the grid is properly set up.

References DEBUG_ENTRY, t_noexec::lgNoExec, and noexec.

void cdNotes ( FILE *  )

produces list of Notes

References t_warnings::chNoteln, DEBUG_ENTRY, fprintf(), and warnings.

Referenced by PrtComment().

Here is the call graph for this function:

void cdNwcns ( long int *  NumberWarnings,
long int *  NumberCautions,
long int *  NumberNotes,
long int *  NumberSurprises,
long int *  NumberTempFailures,
long int *  NumberPresFailures,
long int *  NumberIonFailures,
long int *  NumberNeFailures 
)

cdNwcns This command returns the number of warnings, cautions, notes, surprises, assorted types of failures found the last computed model

Parameters
*NumberWarningsthe number of warnings
*NumberCautionsthe number of cautions
*NumberNotesthe number of notes
*NumberSurprisesthe number of surprises
*NumberTempFailuresthe number of temperature convergence failures
*NumberPresFailuresthe number of pressure convergence failures
*NumberIonFailuresthe number of ionization convergence failures
*NumberNeFailuresthe number of electron density convergence failures

References t_warnings::chBangln, t_warnings::chCaunln, t_warnings::chNoteln, t_warnings::chWarnln, conv, DEBUG_ENTRY, t_conv::nIonFail, t_conv::nNeFail, t_conv::nPreFail, t_conv::nTeFail, and warnings.

Referenced by cdErrors(), and cdMain().

long int cdnZone ( )

cdnZone returns number of zones

References nzone.

void cdOutput ( const string &  filename = "",
const char *  mode = "w" 
)

cdOutput This tells the code where to send output. The arguments are as for the stdio.h fopen call, but the resulting file pointer is checked for validity. All further log output will go to this file. If filename = "", output is switched to stdout (and mode is ignored). If this routine is not called then all output will go to stdout, the standard c output

References t_save::chOutputFile, DEBUG_ENTRY, ioQQQ, NULL, open_data(), and save.

Referenced by cdMain(), and cdPrepareExit().

Here is the call graph for this function:

void cdOutput ( const string &  filename,
FILE *  fp 
)
void cdPressure_depth ( double  TotalPressure[],
double  GasPressure[],
double  RadiationPressure[] 
)

cdPressure_depth This returns the pressure and its constituents for the last iteration. space was allocated in the calling routine for the vectors - before calling this, cdnZone should have been called to get the number of zones, then space allocated for the arrays

Parameters
TotalPressure[]total pressure, all forms
GasPressure[]gas pressure
RadiationPressure[]radiation pressure

References DEBUG_ENTRY, t_struc::GasPressure, nzone, t_struc::pres_radiation_lines_curr, t_struc::pressure, and struc.

void cdPressure_last ( double *  TotalPressure,
double *  GasPressure,
double *  RadiationPressure 
)
cdPressure_last

This returns the pressure and its constituents for the last computed zone.

Parameters
*TotalPressuretotal pressure, all forms
*GasPressuregas pressure
*RadiationPressureradiation pressure

References DEBUG_ENTRY, t_pressure::pres_radiation_lines_curr, t_pressure::PresGasCurr, pressure, and t_pressure::PresTotlCurr.

void cdPrintCommands ( FILE *  )

cdPrintCommands( FILE *) This routine prints all input commands into file whose handle is the argument

Parameters
*ioOUT[out] output file handle

References t_input::crd, fprintf(), and input.

Referenced by ShowMe().

Here is the call graph for this function:

int cdRead ( const string &  )

cdRead This sends commands to the code. The normal set of commands described in Part I of Hazy must be entered as a C-style or C++-style string. These strings are then fed to Cloudy with this command. The function returns the number of commands that can still be entered before the command stack is full. The code will stop if you try to continue giving it commands after the command has returned zero. This return value is the opposite of the standard - a non-zero return is normal

References AS_SILENT_TRY, cdEXIT, CardInfo::chCardSav, t_save::chOutputFile, t_input::crd, t_input::curInclLevel, DEBUG_ENTRY, EXIT_FAILURE, exp10(), fprintf(), Parser::getNumberDefault(), grid, Parser::hasCommand(), input, ioQQQ, lgcdInitCalled, t_grid::lgGrid, t_prt::lgIncludeBlends, t_input::lgInitPresent, lgIsCommentSeq(), t_optimize::lgNoVary, t_optimize::lgOptimr, t_prt::lgPrintTime, t_input::lgSetNoBuffering, t_trace::lgTrace, t_optimize::lgVaryOn, t_grid::nGridCommands, Parser::nMatch(), NULL, open_data(), optimize, ParseInit(), prt, rfield, save, Parser::setline(), t_mesh::setResolutionScaleFactor(), StripComment(), trace, and trimTrailingWhiteSpace().

Referenced by cdMain(), and ParseInitFile().

Here is the call graph for this function:

void cdReasonGeo ( FILE *  )

This prints the reason why the model stopped, and the model geometry, on the io file pointed to by the file handle

References t_warnings::chRgcln, DEBUG_ENTRY, fprintf(), and warnings.

Referenced by PrtComment().

Here is the call graph for this function:

void cdSetExecTime ( )

normally called by cdInit, this routine sets initial variables for times

References before, cdClock(), and lgCalled.

Referenced by cdInit().

Here is the call graph for this function:

void cdSurprises ( FILE *  )

produces list of surprises

References broke, t_warnings::chBangln, DEBUG_ENTRY, fprintf(), Singleton< FixitList >::Inst(), t_broke::lgPrintFixits, FixitList::list, and warnings.

Referenced by PrtComment().

Here is the call graph for this function:

void cdTalk ( bool  )

cdTalk tells the code whether or not to produce any of its normal output, If the argument is true (or if it is not called at all) it produces output, produces no output if it is false

References called, cpu, DEBUG_ENTRY, t_cpu::i(), t_cpu_i::lgMPI_talk(), t_called::lgTalk, and t_called::lgTalkForcedOff.

Here is the call graph for this function:

int cdTemp ( const char *  chLabel,
long int  IonStage,
double *  TeMean,
const char *  chWeight 
)
int cdTemp ( const string &  chLabel,
double *  TeMean,
const char *  chWeight 
)

cdTemp

* This routine finds the mean electron temperature for any ionization stage 
* It returns 0 if it could find the species, 1 if it could not find the species.
* The first argument is a string that gives the species in chemical notation,
* or a special label.
* This second argument will be returned as result.
* Last parameter is either "VOLUME" or "RADIUS" to give weighting.
*
* The special labels are the following:
* - "21CM" will return the temperature wrt the atomic hydrogen density.
* - "SPIN" will return the excitation temperature of the 21cm hyperfine states.
* - "OPTI" will return the temperature from the ratio of the 21cm and Lya
*    optical depths, see AGN3, Section 5.5.
* - "H2" will return the temperature weighted wrt the H2 density.
* - "TENE" will return the temperature weighted wrt the electron density.
* - "" will return a simple mean of the kinetic temperature.
* 
Parameters
chLabel[in]String for species or special label.
TeMean[out]Temperature result.
chWeight[in]String for weighting the average; must be "VOLUME" or "RADIUS".
Returns
0 for success, 1 for failure.

References caps(), DEBUG_ENTRY, elem_symbol_to_index(), TransitionProxy::Emis(), TransitionList::Emis(), exp10(), fprintf(), HFLines, ioQQQ, ipH1s, ipH2p, ipH_LIKE, ipHYDROGEN, isAtomicIonValid(), isMolecule(), iso_sp, isSpecies(), LIMELM, mean, t_mean::MeanIon(), t_mean::MeanMoleculeTemp(), parse_chemical(), set_weighting(), SMALLFLOAT, EmissionProxy::TauCon(), t_mean::TempEdenMean, t_mean::TempH_21cmSpinMean, t_mean::TempHarMean, t_mean::TempMean, t_iso_sp::trans(), and trimTrailingWhiteSpace().

Here is the call graph for this function:

double cdTemp_last ( )

cdTemp_last returns the temperature of the last zone on last iteration

References phycon, and t_phycon::te.

void cdTimescales ( double *  TTherm,
double *  THRecom,
double *  TH2 
)

cdTimescales returns the longest thermal, recombination, and H2 formation timescales that occurred in the previous model

Parameters
*TThermthe thermal cooling timescale
*THRecomthe hydrogen recombination timescale
*TH2the H2 formation timescale

References DEBUG_ENTRY, MAX2, t_timesc::time_H2_Dest_longest, t_timesc::time_H2_Form_longest, t_timesc::time_Hrecom_long, t_timesc::time_therm_long, and timesc.

void cdVersion ( char  chString[])

cdVersion The argument is a string with at least 8 characters that will receive a null terminated string with the version number of the code.

References Singleton< t_version >::Inst().

Here is the call graph for this function:

void cdWarnings ( FILE *  )

These routines produce lists of warnings, cautions, notes, surprises These are the routines that are called by cdErrors. Normally cdErrors and not these routines would be called by the user.

References t_warnings::chWarnln, DEBUG_ENTRY, fprintf(), and warnings.

Referenced by cdErrors(), optimize_func(), PrtComment(), SaveLineIntensity(), SaveResults(), and ShowMe().

Here is the call graph for this function:

long debugLine ( realnum  wavelength)

debugLine provides a debugging hook into the main line array loops over whole array and finds every line that matches length, the wavelength, the argument to the function put breakpoint inside if test return value is number of matches, also prints all matches

Parameters
[in]theemission line wavelength
[out]thenumber of matches

References t_LineSave::lines, LineSave, t_LineSave::nsum, t_LineSave::sig_figs, wavelength, and WavlenErrorGet().

Here is the call graph for this function:

STATIC bool set_weighting ( const char *  chCaller,
const char *  chWeight,
int &  dim 
)
inline

References caps(), DEBUG_ENTRY, fprintf(), and ioQQQ.

Referenced by cdIonFrac(), and cdTemp().

Here is the call graph for this function:

void test_cdTemp_molecules ( )

test_cdTemp_molecules - Report temperatures for all molecules

References cdTemp(), DEBUG_ENTRY, fprintf(), getMolecules(), and ioQQQ.

Referenced by PrtFinal().

Here is the call graph for this function:

Variable Documentation

struct timeval before
static

Referenced by cdExecTime(), and cdSetExecTime().

bool lgCalled =false
static