2 #ifndef COOLING_METAL_HINCLUDED
3 #define COOLING_METAL_HINCLUDED
22 #define CL_B_gm (6.022e23*(938.7830/931.494))
23 #define CL_k_Boltzmann 1.38066e-16
24 #define CL_eV_erg 1.60219e-12
25 #define CL_eV_per_K (CL_k_Boltzmann/CL_eV_erg)
32 #define CL_RT_FLOAT double
33 #define CL_RT_MIN 1e-100
42 #define CL_MAX_NEG_EXP_ARG -500.
44 #define CL_NMAXBYTETABLE 56000
45 #define MU_METAL 17.6003
46 #define ZSOLAR 0.0130215
58 double dMassFracHelium;
64 double f_HI,f_HeI,f_HeII;
69 double HI,HII,HeI,HeII,HeIII;
77 double Rate_Phot_HeII;
81 double Heat_Phot_HeII;
87 double Rate_Phot_HeII;
91 double Heat_Phot_HeII;
95 double Cool_Coll_HeII;
96 double Cool_Diel_HeII;
100 double Cool_LowTFactor;
105 CL_RT_FLOAT Rate_Coll_HI;
106 CL_RT_FLOAT Rate_Coll_HeI;
107 CL_RT_FLOAT Rate_Coll_HeII;
108 CL_RT_FLOAT Rate_Radr_HII;
109 CL_RT_FLOAT Rate_Radr_HeII;
110 CL_RT_FLOAT Rate_Radr_HeIII;
111 CL_RT_FLOAT Rate_Diel_HeII;
112 CL_RT_FLOAT Rate_Chtr_HeII;
114 CL_RT_FLOAT Cool_Brem_1;
115 CL_RT_FLOAT Cool_Brem_2;
116 CL_RT_FLOAT Cool_Radr_HII;
117 CL_RT_FLOAT Cool_Radr_HeII;
118 CL_RT_FLOAT Cool_Radr_HeIII;
119 CL_RT_FLOAT Cool_Line_HI;
120 CL_RT_FLOAT Cool_Line_HeI;
121 CL_RT_FLOAT Cool_Line_HeII;
122 CL_RT_FLOAT Cool_LowT;
154 double MetalnHlogMin;
155 double MetalnHlogMax;
160 float ***MetalCoolln;
161 float ***MetalHeatln;
168 int bUVTableUsesTime;
174 double dComovingGmPerCcUnit;
175 double dErgPerGmUnit;
177 double dErgPerGmPerSecUnit;
178 double diErgPerGmUnit;
180 double dMassFracHelium;
226 STIFF *IntegratorContext;
228 double rho,ExternalHeating,E,ZMetal;
232 double Y_H, Y_He, Y_eMax;
233 double Y_Total0, Y_Total1;
239 void CoolFinalize(
COOL *cl );
243 void clInitConstants(
COOL *cl,
double dGMPerCcunit,
double dComovingGmPerCcUnit,
244 double dErgPerGmUnit,
double dSecUnit,
double dKpcUnit,
COOLPARAM CoolParam);
245 void clInitUV(
COOL *cl,
int nTableColumns,
int nTableRows,
double *dTableData );
246 void clInitRatesTable(
COOL *cl,
double TMin,
double TMax,
int nTable );
248 void clRateMetalTable(
COOL *cl,
RATE *Rate,
double T,
double rho,
double Y_H,
double ZMetal);
249 void clHHeTotal(
COOL *cl,
double ZMetal);
252 void clRatesTableError(
COOL *cl );
253 void clRatesRedshift(
COOL *cl,
double z,
double dTime );
255 void clRates(
COOL *cl,
RATE *Rate,
double T,
double rho);
256 double clCoolTotal(
COOL *cl,
PERBARYON *Y,
RATE *Rate,
double rho,
double ZMetal );
259 void clPrintCoolFile(
COOL *cl,
PERBARYON *Y,
RATE *Rate,
double rho, FILE *fp );
262 double clThermalEnergy(
double Y_Total,
double T );
263 double clTemperature(
double Y_Total,
double E );
264 double clRateCollHI(
double T );
265 double clRateCollHeI(
double T );
266 double clRateCollHeII(
double T );
267 double clRateRadrHII(
double T );
268 double clRateRadrHeII(
double T );
269 double clRateDielHeII(
double T );
270 double clRateChtrHeII(
double T);
271 double clRateRadrHeIII(
double T );
272 double clCoolBrem1(
double T );
273 double clCoolBrem2(
double T );
274 double clCoolRadrHII(
double T );
275 double clCoolRadrHeII(
double T );
276 double clCoolRadrHeIII(
double T );
277 double clCoolLineHI(
double T );
278 double clCoolLineHeI(
double T );
279 double clCoolLineHeII(
double T );
280 double clCoolLowT(
double T );
282 double ZMetal,
double *dEdotHeat,
double *EdotCool );
284 double ExternalHeating,
double rho,
double ZMetal,
double dt );
285 void clIntegrateEnergyDEBUG(
COOL *cl,
PERBARYON *Y,
double *E,
286 double ExternalHeating,
double rho,
double ZMetal,
double dt );
289 void clDerivs(
double x,
const double *y,
double *yheat,
290 double *ycool,
void *Data) ;
293 void CoolLogParams(
COOLPARAM *CoolParam, FILE *fp );
294 void CoolOutputArray(
COOLPARAM *CoolParam,
int,
int *,
char * );
296 #define COOL_ARRAY0_EXT "HI"
298 double COOL_SET_ARRAY0(
COOL *cl,
COOLPARTICLE *cp,
double ZMetal,
double val);
300 #define COOL_ARRAY1_EXT "HeI"
302 double COOL_SET_ARRAY1(
COOL *cl,
COOLPARTICLE *cp,
double ZMetal,
double val);
304 #define COOL_ARRAY2_EXT "HeII"
306 double COOL_SET_ARRAY2(
COOL *cl,
COOLPARTICLE *cp,
double ZMetal,
double val);
308 #define COOL_ARRAY3_EXT "H2"
309 #define COOL_ARRAY3(cl_, cp, aa ) (0)
310 double COOL_SET_ARRAY3(
COOL *cl_,
COOLPARTICLE *cp,
double aa,
double bb_val);
311 #define COOL_SET_ARRAY3( cl_, cp, aa, bb_val ) (0)
313 double COOL_EDOT(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
314 #define COOL_EDOT( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolEdotInstantCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
316 double COOL_COOLING(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
317 #define COOL_COOLING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolCoolingCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
319 double COOL_HEATING(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
320 #define COOL_HEATING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolHeatingCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
322 void clSetAbundanceTotals(
COOL *cl,
double ZMetal,
double *Y_H,
double *Y_He,
double *Y_eMAX);
327 double CoolEnergyToTemperature(
COOL *Cool,
COOLPARTICLE *cp,
double E,
double ZMetal);
328 double CoolCodeEnergyToTemperature(
COOL *Cool,
COOLPARTICLE *cp,
double E,
double ZMetal);
331 void CoolSetTime(
COOL *Cool,
double dTime,
double z );
333 double CoolCodeTimeToSeconds(
COOL *Cool,
double dCodeTime );
335 #define CoolCodeTimeToSeconds( Cool, dCodeTime ) ((Cool)->dSecUnit*(dCodeTime))
337 double CoolSecondsToCodeTime(
COOL *Cool,
double dTime );
339 #define CoolSecondsToCodeTime( Cool, dTime ) ((dTime)/(Cool)->dSecUnit)
341 double CoolCodeEnergyToErgPerGm(
COOL *Cool,
double dCodeEnergy );
343 #define CoolCodeEnergyToErgPerGm( Cool, dCodeEnergy ) ((Cool)->dErgPerGmUnit*(dCodeEnergy))
345 double CoolErgPerGmToCodeEnergy(
COOL *Cool,
double dEnergy );
347 #define CoolErgPerGmToCodeEnergy( Cool, dEnergy ) ((Cool)->diErgPerGmUnit*(dEnergy))
349 double CoolCodeWorkToErgPerGmPerSec(
COOL *Cool,
double dCodeWork );
351 #define CoolCodeWorkToErgPerGmPerSec( Cool, dCodeWork ) ((Cool)->dErgPerGmPerSecUnit*(dCodeWork))
353 double CoolErgPerGmPerSecToCodeWork(
COOL *Cool,
double dWork );
355 #define CoolErgPerGmPerSecToCodeWork( Cool, dWork ) ((dWork)/(Cool)->dErgPerGmPerSecUnit)
357 double CodeDensityToComovingGmPerCc(
COOL *Cool,
double dCodeDensity );
359 #define CodeDensityToComovingGmPerCc( Cool, dCodeDensity ) ((Cool)->dComovingGmPerCcUnit*(dCodeDensity))
362 double ExternalHeating,
double rho,
double ZMetal,
double tStep );
365 double ExternalHeating,
double rho,
double ZMetal,
double *r,
double tStep );
369 void CoolInitEnergyAndParticleData(
COOL *cl,
COOLPARTICLE *cp,
double *E,
double dDensity,
double dTemp,
double ZMetal);
372 double CoolHeatingRate(
COOL *cl,
COOLPARTICLE *cp,
double E,
double dDensity,
double ZMetal);
375 double rhoCode,
double ZMetal,
double *posCode );
377 double rhoCode,
double ZMetal,
double *posCode );
379 double rhoCode,
double ZMetal,
double *posCode );
381 void CoolCodePressureOnDensitySoundSpeed(
COOL *cl,
COOLPARTICLE *cp,
double uPred,
double fDensity,
double gamma,
double gammam1,
double *PoverRho,
double *c );
384 #define CoolCodePressureOnDensitySoundSpeed( cl__, cp__, uPred__, fDensity__, gamma__, gammam1__, PoverRho__, c__ ) { \
385 *(PoverRho__) = ((5./3.-1)*(uPred__)); \
386 *(c__) = sqrt((5./3.)*(*(PoverRho__))); }
394 void CoolTableReadInfo(
COOLPARAM *CoolParam,
int cntTable,
int *nTableColumns,
char *suffix );
396 void CoolTableRead(
COOL *Cool,
int nData,
void *vData);
COOL * cl
pointer to cooling context
Definition: cooling_boley.h:110
structure to hold Temperature independent cooling and heating rates
Definition: cooling_cosmo.h:86
Context for stiff integration.
Definition: stiff.h:6
Object containing the parameter information.
Definition: param.h:38
structure to hold Temperature dependent cooling rates
Definition: cooling_cosmo.h:106
abundance of various species in particles/baryon
Definition: cooling_boley.h:75
Heating/Cooling context: parameters and tables.
Definition: cooling_boley.h:83
per-particle cooling data
Definition: cooling_boley.h:68
context for calculating cooling derivatives
Definition: cooling_boley.h:108
return structure for clTestCool()
Definition: cooling_cosmo.h:187
Rate information for a given particle.
Definition: cooling_cosmo.h:170
photoionization and heating rates from a uniform UV background
Definition: cooling_cosmo.h:72