1#ifndef COOLING_GRACKLE_HINCLUDED
2#define COOLING_GRACKLE_HINCLUDED
18#define CONFIG_BFLOAT_8
23#ifndef GRACKLE_PRIMORDIAL_CHEMISTRY_MAX
24#define GRACKLE_PRIMORDIAL_CHEMISTRY_MAX 1
27#define CL_NMAXBYTETABLE 56000
36 int with_radiative_cooling;
37 int primordial_chemistry;
40 int cmb_temperature_floor;
41 int bBrokenGrackleFloor;
47 char grackle_data_file[MAXPATHLEN];
52#if (GRACKLE_PRIMORDIAL_CHEMISTRY_MAX<1)
55#if (GRACKLE_PRIMORDIAL_CHEMISTRY_MAX>=1)
56 gr_float HI, HII, HeI, HeII, HeIII, e;
57#if (GRACKLE_PRIMORDIAL_CHEMISTRY_MAX>=2)
58 gr_float HM, H2I, H2II;
59#if (GRACKLE_PRIMORDIAL_CHEMISTRY_MAX>=3)
73 double dComovingGmPerCcUnit;
75 double diErgPerGmUnit;
76 double dErgPerGmPerSecUnit;
78 char grackle_data_file[MAXPATHLEN];
79 chemistry_data *pgrackle_data;
95void CoolFinalize( COOL *cl );
96clDerivsData *CoolDerivsInit(COOL *cl);
97void CoolDerivsFinalize(clDerivsData *cld ) ;
99void clInitConstants( COOL *cl,
double dGMPerCcunit,
double dComovingGmPerCcUnit,
100 double dErgPerGmUnit,
double dSecUnit,
double dKpcUnit, COOLPARAM CoolParam);
101void CoolInitRatesTable( COOL *cl, COOLPARAM CoolParam);
103void CoolAddParams( COOLPARAM *CoolParam, PRM );
104void CoolLogParams( COOLPARAM *CoolParam, FILE *fp );
105void CoolOutputArray( COOLPARAM *CoolParam,
int,
int *,
char * );
108#define COOL_ARRAY0_EXT "HI"
109double COOL_ARRAY0(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
110void COOL_SET_ARRAY0(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
112#define COOL_ARRAY1_EXT "HII"
113double COOL_ARRAY1(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
114void COOL_SET_ARRAY1(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
116#define COOL_ARRAY2_EXT "HeI"
117double COOL_ARRAY2(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
118void COOL_SET_ARRAY2(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
120#define COOL_ARRAY3_EXT "HeII"
121double COOL_ARRAY3(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
122void COOL_SET_ARRAY3(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
123#define COOL_SET_ARRAY3( cl_, cp, aa, bb_val ) (assert(0))
125#define COOL_ARRAY4_EXT "HeIII"
126double COOL_ARRAY4(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
127void COOL_IN_ARRAY4(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
128#define COOL_IN_ARRAY4(w,x,y,z)
130#define COOL_ARRAY5_EXT "e"
131double COOL_ARRAY5(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
132void COOL_IN_ARRAY5(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
133#define COOL_IN_ARRAY5(w,x,y,z)
136#define COOL_ARRAY6_EXT "HM"
137double COOL_ARRAY6(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
138void COOL_IN_ARRAY6(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
139#define COOL_IN_ARRAY6(w,x,y,z)
141#define COOL_ARRAY7_EXT "H2I"
142double COOL_ARRAY7(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
143void COOL_IN_ARRAY7(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
144#define COOL_IN_ARRAY7(w,x,y,z)
146#define COOL_ARRAY8_EXT "H2II"
147double COOL_ARRAY8(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
148void COOL_IN_ARRAY8(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
149#define COOL_IN_ARRAY8(w,x,y,z)
152#define COOL_ARRAY9_EXT "DI"
153double COOL_ARRAY9(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
154void COOL_IN_ARRAY9(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
155#define COOL_IN_ARRAY9(w,x,y,z)
157#define COOL_ARRAY10_EXT "DII"
158double COOL_ARRAY10(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
159void COOL_IN_ARRAY10(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
160#define COOL_IN_ARRAY10(w,x,y,z)
162#define COOL_ARRAY11_EXT "HDI"
163double COOL_ARRAY11(COOL *cl, COOLPARTICLE *cp,
double ZMetal);
164void COOL_IN_ARRAY11(COOL *cl, COOLPARTICLE *cp,
double ZMetal,
double Data);
165#define COOL_IN_ARRAY11(w,x,y,z)
167#define COOL_ARRAY12_EXT "dummy"
168#define COOL_ARRAY12(x,y,z) 0
169#define COOL_IN_ARRAY12(w,x,y,z)
171#define COOL_ARRAY13_EXT "dummy"
172#define COOL_ARRAY13(x,y,z) 0
173#define COOL_IN_ARRAY13(w,x,y,z)
175#define COOL_ARRAY14_EXT "dummy"
176#define COOL_ARRAY14(x,y,z) 0
177#define COOL_IN_ARRAY14(w,x,y,z)
179#define COOL_ARRAY15_EXT "dummy"
180#define COOL_ARRAY15(x,y,z) 0
181#define COOL_IN_ARRAY15(w,x,y,z)
183double COOL_EDOT( COOL *cl_, COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
184#define COOL_EDOT( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolEdotInstantCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
186double COOL_COOLING( COOL *cl_, COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
187#define COOL_COOLING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolCoolingCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
189double COOL_HEATING( COOL *cl_, COOLPARTICLE *cp_,
double ECode_,
double rhoCode_,
double ZMetal_,
double *posCode_ );
190#define COOL_HEATING( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_) (CoolCodeWorkToErgPerGmPerSec( cl_, CoolHeatingCode( cl_, cp_, ECode_, rhoCode_, ZMetal_, posCode_ )))
195double CoolEnergyToTemperature( COOL *Cool, COOLPARTICLE *cp,
double E,
double,
double ZMetal);
196double CoolCodeEnergyToTemperature( COOL *Cool, COOLPARTICLE *cp,
double E,
197 double rho,
double ZMetal);
200void CoolSetTime( COOL *Cool,
double dTime,
double z );
202double CoolCodeTimeToSeconds( COOL *Cool,
double dCodeTime );
204#define CoolCodeTimeToSeconds( Cool, dCodeTime ) ((Cool)->dSecUnit*(dCodeTime))
206double CoolSecondsToCodeTime( COOL *Cool,
double dTime );
208#define CoolSecondsToCodeTime( Cool, dTime ) ((dTime)/(Cool)->dSecUnit)
210double CoolCodeEnergyToErgPerGm( COOL *Cool,
double dCodeEnergy );
212#define CoolCodeEnergyToErgPerGm( Cool, dCodeEnergy ) ((Cool)->dErgPerGmUnit*(dCodeEnergy))
214double CoolErgPerGmToCodeEnergy( COOL *Cool,
double dEnergy );
216#define CoolErgPerGmToCodeEnergy( Cool, dEnergy ) ((Cool)->diErgPerGmUnit*(dEnergy))
218double CoolCodeWorkToErgPerGmPerSec( COOL *Cool,
double dCodeWork );
220#define CoolCodeWorkToErgPerGmPerSec( Cool, dCodeWork ) ((Cool)->dErgPerGmPerSecUnit*(dCodeWork))
222double CoolErgPerGmPerSecToCodeWork( COOL *Cool,
double dWork );
224#define CoolErgPerGmPerSecToCodeWork( Cool, dWork ) ((dWork)/(Cool)->dErgPerGmPerSecUnit)
226double CodeDensityToComovingGmPerCc( COOL *Cool,
double dCodeDensity );
228#define CodeDensityToComovingGmPerCc( Cool, dCodeDensity ) ((Cool)->dComovingGmPerCcUnit*(dCodeDensity))
230void CoolIntegrateEnergy(COOL *cl, clDerivsData *cData, COOLPARTICLE *cp,
double *E,
231 double ExternalHeating,
double rho,
double ZMetal,
double *rp,
double tStep );
233void CoolIntegrateEnergyCode(COOL *cl, clDerivsData *cData, COOLPARTICLE *cp,
double *E,
234 double ExternalHeating,
double rho,
double ZMetal,
double *r,
double tStep );
236void CoolDefaultParticleData( COOLPARTICLE *cp );
238void CoolInitEnergyAndParticleData( COOL *cl, COOLPARTICLE *cp,
double *E,
double dDensity,
double dTemp,
double ZMetal);
241double CoolHeatingRate( COOL *cl, COOLPARTICLE *cp,
double E,
double dDensity,
double ZMetal,
double rkpc);
243double CoolEdotInstantCode(COOL *cl, COOLPARTICLE *cp,
double ECode,
244 double rhoCode,
double ZMetal,
double *posCode );
245double CoolCoolingCode(COOL *cl, COOLPARTICLE *cp,
double ECode,
246 double rhoCode,
double ZMetal,
double *posCode );
247double CoolHeatingCode(COOL *cl, COOLPARTICLE *cp,
double ECode,
248 double rhoCode,
double ZMetal,
double *posCode );
250void CoolCodePressureOnDensitySoundSpeed( COOL *cl, COOLPARTICLE *cp,
double uPred,
double fDensity,
double gamma,
double gammam1,
double *PoverRho,
double *c );
253#define CoolCodePressureOnDensitySoundSpeed( cl__, cp__, uPred__, fDensity__, gamma__, gammam1__, PoverRho__, c__ ) { \
254 *(PoverRho__) = ((5./3.-1)*(uPred__)); \
255 *(c__) = sqrt((5./3.)*(*(PoverRho__))); }
263void CoolTableReadInfo( COOLPARAM *CoolParam,
int cntTable,
int *nTableColumns,
char *suffix );
265void CoolTableRead( COOL *Cool,
int nData,
void *vData);
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
COOL * cl
pointer to cooling context
Definition cooling_boley.h:110