MP-Gadget  5.0.1.dev1-76bc7d4726-dirty
cooling_rates.h
Go to the documentation of this file.
1 /*Support header for functions used internally in the cooling module*/
2 
3 #ifndef _COOLING_RATES_H_
4 #define _COOLING_RATES_H_
5 
6 #include "cooling.h"
7 #include "utils/paramset.h"
8 
9 /* Definitions for the cooling rates code*/
10 enum RecombType {
11  Cen92 = 0, // Recombination from Cen 92
12  Verner96 = 1, //Verner 96 recombination rates. Basically accurate, used by Sherwood and Nyx by default.
13  Badnell06 = 2, //Even more up to date rates from Badnell 2006, cloudy's current default.
14 };
15 
17  KWH92 = 0, //Cooling from KWH 92
18  Enzo2Nyx = 1, //Updated cooling rates from Avery Meiksin, used in Nyx and Enzo 2.
19  Sherwood =2 , //Same as KWH92, but with an improved large temperature correction factor.
20 };
21 
22 /*Parameters for the cooling rate network*/
24 {
25  /*Default: Verner96*/
26  enum RecombType recomb;
27  /*Default: Sherwood*/
28  enum CoolingType cooling;
29 
30  /*Enable a self-shielding cooling and ionization correction from Rahmati & Schaye 2013. Default: on.*/
32  /*Disable using photo-ionization and heating table, for testing.*/
34  /*Global baryon fraction, Omega_b/Omega_cdm, used for the self-shielding formula.*/
35  double fBar;
36 
37  /*Normalization factor to apply to the UVB: Default: 1.*/
39 
40  /*CMB temperature in K*/
42 
43  /*Minimum gas temperature in K*/
44  double MinGasTemp;
45 
46  /*Threshold redshift above which the UVB is set to zero*/
48 
49  /* Hydrogen heating modifier */
51 
52  /*Parameters for the 'extra heating' Helium photoionization model.*/
55  double HeliumHeatAmp;
56  double HeliumHeatExp;
58 };
59 
60 /*Set the parameters for the cooling module from the parameter file.*/
62 /*Set cooling module parameters from a cooling_params struct for the tests*/
63 void set_coolpar(struct cooling_params cp);
64 
65 /*Initialize the cooling rate module. This builds a lot of interpolation tables.
66  * Defaults: TCMB 2.7255, recomb = Verner96, cooling = Sherwood.*/
67 void init_cooling_rates(const char * TreeCoolFile, const char * MetalCoolFile, Cosmology * CP);
68 
69 /* Reads and initializes the cloudy metal cooling table. Called in init_cooling_rates. No need to call it separately.*/
70 void InitMetalCooling(const char * MetalCoolFile);
71 
72 /*Get the metal cooling rate from the table.*/
73 double TableMetalCoolingRate(double redshift, double temp, double nHcgs);
74 
75 /*Solve the system of equations for photo-ionization equilibrium,
76  starting with ne = nH and continuing until convergence.
77  density is gas density in protons/cm^3
78  Internal energy is in J/kg == 10^-10 ergs/g.
79  helium is a mass fraction.
80 */
81 double get_equilib_ne(double density, double ienergy, double helium, double *logt, const struct UVBG * uvbg, double ne_init);
82 
83 /*Same as above, but get electrons per proton.*/
84 double get_ne_by_nh(double density, double ienergy, double helium, const struct UVBG * uvbg, double ne_init);
85 
86 /*Get the total (photo) heating and cooling rate for a given temperature (internal energy) and density.
87  density is total gas density in protons/cm^3
88  Internal energy is in J/kg == 10^-10 ergs/g.
89  helium is a mass fraction, 1 - HYDROGEN_MASSFRAC = 0.24 for primordial gas.
90  Returns heating - cooling.
91  */
92 double get_heatingcooling_rate(double density, double ienergy, double helium, double redshift, double metallicity, const struct UVBG * uvbg, double * ne_equilib);
93 
98  HEAT
99 };
100 
101 /* As above but returns only the specified heating rate. */
102 double get_individual_cooling(enum CoolProcess process, double density, double ienergy, double helium, const struct UVBG * uvbg, double *ne_equilib);
103 
104 /* As above but returns only the Compton cooling. */
105 double get_compton_cooling(double density, double ienergy, double helium, double redshift, double nebynh);
106 
107 /*Get the neutral hydrogen fraction at a given temperature and density.
108 density is gas density in protons/cm^3
109 Internal energy is in J/kg == 10^-10 ergs/g.
110 helium is a mass fraction.*/
111 double get_neutral_fraction_phys_cgs(double density, double ienergy, double helium, const struct UVBG * uvbg, double * ne_init);
112 
113 /* Get the helium ionic fractions at a temperature and density. Same conventions as above*/
114 double get_helium_ion_phys_cgs(int ion, double density, double ienergy, double helium, const struct UVBG * uvbg, double ne_init);
115 
116 #endif
CoolingType
Definition: cooling_rates.h:16
@ Sherwood
Definition: cooling_rates.h:19
@ KWH92
Definition: cooling_rates.h:17
@ Enzo2Nyx
Definition: cooling_rates.h:18
double get_ne_by_nh(double density, double ienergy, double helium, const struct UVBG *uvbg, double ne_init)
double get_compton_cooling(double density, double ienergy, double helium, double redshift, double nebynh)
double get_equilib_ne(double density, double ienergy, double helium, double *logt, const struct UVBG *uvbg, double ne_init)
double get_helium_ion_phys_cgs(int ion, double density, double ienergy, double helium, const struct UVBG *uvbg, double ne_init)
double get_heatingcooling_rate(double density, double ienergy, double helium, double redshift, double metallicity, const struct UVBG *uvbg, double *ne_equilib)
CoolProcess
Definition: cooling_rates.h:94
@ RECOMB
Definition: cooling_rates.h:95
@ HEAT
Definition: cooling_rates.h:98
@ COLLIS
Definition: cooling_rates.h:96
@ FREEFREE
Definition: cooling_rates.h:97
void InitMetalCooling(const char *MetalCoolFile)
void set_cooling_params(ParameterSet *ps)
double TableMetalCoolingRate(double redshift, double temp, double nHcgs)
RecombType
Definition: cooling_rates.h:10
@ Cen92
Definition: cooling_rates.h:11
@ Verner96
Definition: cooling_rates.h:12
@ Badnell06
Definition: cooling_rates.h:13
void set_coolpar(struct cooling_params cp)
double get_neutral_fraction_phys_cgs(double density, double ienergy, double helium, const struct UVBG *uvbg, double *ne_init)
void init_cooling_rates(const char *TreeCoolFile, const char *MetalCoolFile, Cosmology *CP)
double get_individual_cooling(enum CoolProcess process, double density, double ienergy, double helium, const struct UVBG *uvbg, double *ne_equilib)
void density(const ActiveParticles *act, int update_hsml, int DoEgyDensity, int BlackHoleOn, double MinEgySpec, const DriftKickTimes times, Cosmology *CP, struct sph_pred_data *SPH_predicted, MyFloat *GradRho, const ForceTree *const tree)
Definition: density.c:203
static Cosmology * CP
Definition: power.c:27
Definition: cooling.h:8
double HeliumHeatThresh
Definition: cooling_rates.h:54
double HeliumHeatAmp
Definition: cooling_rates.h:55
enum RecombType recomb
Definition: cooling_rates.h:26
double UVRedshiftThreshold
Definition: cooling_rates.h:47
double rho_crit_baryon
Definition: cooling_rates.h:57
double CMBTemperature
Definition: cooling_rates.h:41
double HeliumHeatExp
Definition: cooling_rates.h:56
enum CoolingType cooling
Definition: cooling_rates.h:28
double PhotoIonizeFactor
Definition: cooling_rates.h:38
double HydrogenHeatAmp
Definition: cooling_rates.h:50