2 #ifndef COOLING_METAL_HINCLUDED
3 #define COOLING_METAL_HINCLUDED
25 #define CL_B_gm (6.022e23*(938.7830/931.494))
26 #define CL_k_Boltzmann 1.38066e-16
27 #define CL_eV_erg 1.60219e-12
28 #define CL_eV_per_K (CL_k_Boltzmann/CL_eV_erg)
35 #define CL_RT_FLOAT double
36 #define CL_RT_MIN 1e-100
45 #define CL_MAX_NEG_EXP_ARG -500.
47 #define CL_NMAXBYTETABLE 56000
48 #define MU_METAL 17.6003
49 #define ZSOLAR 0.0130215
62 double dMassFracHelium;
66 double dLymanWernerFrac;
70 double f_HI,f_HeI,f_HeII;
77 double HI,HII,HeI,HeII,HeIII;
86 double Rate_Phot_HeII;
87 double Rate_Phot_H2_cosmo;
91 double Heat_Phot_HeII;
98 double Rate_Phot_HeII;
99 double Rate_Phot_H2_cosmo;
102 double Heat_Phot_HeI;
103 double Heat_Phot_HeII;
107 double Cool_Coll_HeI;
108 double Cool_Coll_HeII;
109 double Cool_Diel_HeII;
114 double Cool_LowTFactor;
119 CL_RT_FLOAT Rate_Coll_HI;
120 CL_RT_FLOAT Rate_Coll_HeI;
121 CL_RT_FLOAT Rate_Coll_HeII;
122 CL_RT_FLOAT Rate_Coll_e_H2;
123 CL_RT_FLOAT Rate_Coll_HI_H2;
124 CL_RT_FLOAT Rate_Coll_H2_H2;
125 CL_RT_FLOAT Rate_Coll_Hm_e;
126 CL_RT_FLOAT Rate_Coll_HI_e;
127 CL_RT_FLOAT Rate_Coll_HII_H2;
128 CL_RT_FLOAT Rate_Coll_Hm_HII;
129 CL_RT_FLOAT Rate_HI_e;
130 CL_RT_FLOAT Rate_HI_Hm;
131 CL_RT_FLOAT Rate_Radr_HII;
132 CL_RT_FLOAT Rate_Radr_HeII;
133 CL_RT_FLOAT Rate_Radr_HeIII;
134 CL_RT_FLOAT Rate_Diel_HeII;
135 CL_RT_FLOAT Rate_Chtr_HeII;
137 CL_RT_FLOAT Cool_Brem_1;
138 CL_RT_FLOAT Cool_Brem_2;
139 CL_RT_FLOAT Cool_Radr_HII;
140 CL_RT_FLOAT Cool_Radr_HeII;
141 CL_RT_FLOAT Cool_Radr_HeIII;
142 CL_RT_FLOAT Cool_Line_HI;
143 CL_RT_FLOAT Cool_Line_HeI;
144 CL_RT_FLOAT Cool_Line_HeII;
145 CL_RT_FLOAT Cool_Line_H2_H;
146 CL_RT_FLOAT Cool_Line_H2_H2;
147 CL_RT_FLOAT Cool_Line_H2_He;
148 CL_RT_FLOAT Cool_Line_H2_e;
149 CL_RT_FLOAT Cool_Line_H2_HII;
150 CL_RT_FLOAT Cool_LowT;
182 double MetalnHlogMin;
183 double MetalnHlogMax;
188 float ***MetalCoolln;
189 float ***MetalHeatln;
190 double *Rate_DustForm_H2;
197 int bUVTableUsesTime;
204 double dLymanWernerFrac;
206 double dComovingGmPerCcUnit;
208 double dErgPerGmUnit;
210 double dErgPerGmPerSecUnit;
211 double diErgPerGmUnit;
214 double dMassFracHelium;
218 #if defined(COOLDEBUG)
254 double LymanWernerCode;
270 double collion_H2_H2;
271 double collion_HII_H2;
283 STIFF *IntegratorContext;
285 double rho,ExternalHeating,E,ZMetal,dLymanWerner, columnL;
289 double Y_H, Y_He, Y_eMax;
290 double Y_Total0, Y_Total1;
297 void CoolFinalize(
COOL *cl );
301 void clInitConstants(
COOL *cl,
double dGMPerCcunit,
double dComovingGmPerCcUnit,
302 double dErgPerGmUnit,
double dSecUnit,
double dKpcUnit,
COOLPARAM CoolParam);
303 void clInitUV(
COOL *cl,
int nTableColumns,
int nTableRows,
double *dTableData );
304 void clInitRatesTable(
COOL *cl,
double TMin,
double TMax,
int nTable );
306 void clRateMetalTable(
COOL *cl,
RATE *Rate,
double T,
double rho,
double Y_H,
double ZMetal);
307 void clHHeTotal(
COOL *cl,
double ZMetal);
310 void clRatesTableError(
COOL *cl );
311 void clRatesRedshift(
COOL *cl,
double z,
double dTime );
312 double clHeatTotal (
COOL *cl,
PERBARYON *Y,
RATE *Rate,
double rho,
double ZMetal );
313 void clRates(
COOL *cl,
RATE *Rate,
double T,
double rho,
double ZMetal,
double columnL,
double Rate_Phot_H2_stellar);
314 double clCoolTotal(
COOL *cl,
PERBARYON *Y,
RATE *Rate,
double rho,
double ZMetal );
317 void clPrintCoolFile(
COOL *cl,
PERBARYON *Y,
RATE *Rate,
double rho,
double ZMetal, FILE *fp );
320 double clThermalEnergy(
double Y_Total,
double T );
321 double clTemperature(
double Y_Total,
double E );
322 double clSelfShield (
double yH2,
double h);
323 double clDustShield (
double yHI,
double yH2,
double z,
double h);
324 double clRateCollHI(
double T );
325 double clRateCollHeI(
double T );
326 double clRateCollHeII(
double T );
327 double clRateColl_e_H2(
double T );
328 double clRateColl_HI_H2(
double T );
329 double clRateColl_H2_H2(
double T );
330 double clRateColl_HII_H2(
double T);
331 double clRateColl_Hm_e(
double T);
332 double clRateColl_HI_e(
double T);
333 double clRateColl_Hm_HII(
double T);
334 double clRateHI_e(
double T);
335 double clRateHI_Hm(
double T);
336 double clRateRadrHII(
double T );
337 double clRateRadrHeII(
double T );
338 double clRateDielHeII(
double T );
339 double clRateChtrHeII(
double T);
340 double clRateRadrHeIII(
double T );
341 double clCoolBrem1(
double T );
342 double clCoolBrem2(
double T );
343 double clCoolRadrHII(
double T );
344 double clCoolRadrHeII(
double T );
345 double clCoolRadrHeIII(
double T );
346 double clCoolLineHI(
double T );
347 double clCoolLineHeI(
double T );
348 double clCoolLineHeII(
double T );
349 double clCoolLineH2_table(
double T );
350 double clCoolLineH2_HI(
double T );
351 double clCoolLineH2_H2(
double T );
352 double clCoolLineH2_He(
double T );
353 double clCoolLineH2_e(
double T );
354 double clCoolLineH2_HII(
double T );
355 double clCoolLowT(
double T );
356 double clRateDustFormH2(
double z,
double clump);
358 double ZMetal,
double *dEdotHeat,
double *dEdotCool );
360 double ExternalHeating,
double rho,
double ZMetal,
double dt,
double columnL,
double dLymanWerner );
362 double ExternalHeating,
double rho,
double ZMetal,
double dt );
365 void clDerivs(
double x,
const double *y,
double *yheat,
366 double *ycool,
void *Data) ;
369 void CoolLogParams(
COOLPARAM *CoolParam, FILE *fp );
370 void CoolOutputArray(
COOLPARAM *CoolParam,
int,
int *,
char * );
372 #define COOL_ARRAY0_EXT "HI"
374 double COOL_SET_ARRAY0(
COOL *cl,
COOLPARTICLE *cp,
double ZMetal,
double val);
376 #define COOL_ARRAY1_EXT "HeI"
378 double COOL_SET_ARRAY1(
COOL *cl,
COOLPARTICLE *cp,
double ZMetal,
double val);
380 #define COOL_ARRAY2_EXT "HeII"
382 double COOL_SET_ARRAY2(
COOL *cl,
COOLPARTICLE *cp,
double ZMetal,
double val);
384 #define COOL_ARRAY3_EXT "H2"
386 double COOL_SET_ARRAY3(
COOL *cl,
COOLPARTICLE *cp,
double ZMetal,
double val);
388 double COOL_EDOT(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_,
double columnL_ );
389 #define COOL_EDOT( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_, columnL_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolEdotInstantCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ , columnL_)))
391 double COOL_COOLING(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ ,
double columnL_);
392 #define COOL_COOLING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_, columnL_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolCoolingCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ , columnL_)))
394 double COOL_HEATING(
COOL *cl_,
COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_,
double columnL_ );
395 #define COOL_HEATING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_, columnL_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolHeatingCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ , columnL_)))
397 void clSetAbundanceTotals(
COOL *cl,
double ZMetal,
double *Y_H,
double *Y_He,
double *Y_eMAX);
401 double CoolLymanWerner(
double dAge);
403 double CoolEnergyToTemperature(
COOL *Cool,
COOLPARTICLE *cp,
double E,
double ZMetal);
404 double CoolCodeEnergyToTemperature(
COOL *Cool,
COOLPARTICLE *cp,
double E,
double ZMetal);
407 void CoolSetTime(
COOL *Cool,
double dTime,
double z );
409 double CoolCodeTimeToSeconds(
COOL *Cool,
double dCodeTime );
411 #define CoolCodeTimeToSeconds( Cool, dCodeTime ) ((Cool)->dSecUnit*(dCodeTime))
413 double CoolSecondsToCodeTime(
COOL *Cool,
double dTime );
415 #define CoolSecondsToCodeTime( Cool, dTime ) ((dTime)/(Cool)->dSecUnit)
417 double CoolCodeEnergyToErgPerGm(
COOL *Cool,
double dCodeEnergy );
419 #define CoolCodeEnergyToErgPerGm( Cool, dCodeEnergy ) ((Cool)->dErgPerGmUnit*(dCodeEnergy))
421 double CoolErgPerGmToCodeEnergy(
COOL *Cool,
double dEnergy );
423 #define CoolErgPerGmToCodeEnergy( Cool, dEnergy ) ((Cool)->diErgPerGmUnit*(dEnergy))
425 double CoolCodeWorkToErgPerGmPerSec(
COOL *Cool,
double dCodeWork );
427 #define CoolCodeWorkToErgPerGmPerSec( Cool, dCodeWork ) ((Cool)->dErgPerGmPerSecUnit*(dCodeWork))
429 double CoolErgPerGmPerSecToCodeWork(
COOL *Cool,
double dWork );
431 #define CoolErgPerGmPerSecToCodeWork( Cool, dWork ) ((dWork)/(Cool)->dErgPerGmPerSecUnit)
433 double CodeDensityToComovingGmPerCc(
COOL *Cool,
double dCodeDensity );
435 #define CodeDensityToComovingGmPerCc( Cool, dCodeDensity ) ((Cool)->dComovingGmPerCcUnit*(dCodeDensity))
438 double ExternalHeating,
double rho,
double ZMetal,
double tStep,
double columnL );
441 double ExternalHeating,
double rho,
double ZMetal,
double *r,
double tStep,
double columnL );
445 void CoolInitEnergyAndParticleData(
COOL *cl,
COOLPARTICLE *cp,
double *E,
double dDensity,
double dTemp,
double ZMetal);
448 double CoolHeatingRate(
COOL *cl,
COOLPARTICLE *cp,
double E,
double dDensity,
double ZMetal,
double columnL);
451 double rhoCode,
double ZMetal,
double *posCode,
double columnL );
453 double rhoCode,
double ZMetal,
double *posCode,
double columnL );
455 double rhoCode,
double ZMetal,
double *posCode,
double columnL );
457 void CoolCodePressureOnDensitySoundSpeed(
COOL *cl,
COOLPARTICLE *cp,
double uPred,
double fDensity,
double gamma,
double gammam1,
double *PoverRho,
double *c );
460 #define CoolCodePressureOnDensitySoundSpeed( cl__, cp__, uPred__, fDensity__, gamma__, gammam1__, PoverRho__, c__ ) { \
461 *(PoverRho__) = ((5./3.-1)*(uPred__)); \
462 *(c__) = sqrt((5./3.)*(*(PoverRho__))); }
470 void CoolTableReadInfo(
COOLPARAM *CoolParam,
int cntTable,
int *nTableColumns,
char *suffix );
472 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